Merge m-c to oak
authorMatt Howell <mhowell@mozilla.com>
Wed, 14 Sep 2016 15:48:59 -0700
changeset 491575 020147bba7960595682f27565fc7a5b0eef94219
parent 491574 cae30a308fb978ec0c4abbcd1ea2c37ee02032b8 (current diff)
parent 413613 8a494adbc5cced90a4edf0c98cffde906bf7f3ae (diff)
child 491576 e86e0aeb2dc0ca4c5a3b1281b6be856751655839
push id47343
push userbmo:dothayer@mozilla.com
push dateWed, 01 Mar 2017 22:58:58 +0000
milestone51.0a1
Merge m-c to oak This is just so I have some commit that I can test updating to from the previous build.
CLOBBER
browser/app/nsBrowserApp.cpp
browser/app/profile/firefox.js
browser/base/content/browser.js
browser/components/preferences/in-content/advanced.js
browser/installer/package-manifest.in
browser/themes/linux/menuPanel-small.png
browser/themes/linux/menuPanel-small@2x.png
browser/themes/linux/menuPanel.png
browser/themes/linux/menuPanel@2x.png
browser/themes/osx/menuPanel-small-yosemite.png
browser/themes/osx/menuPanel-small-yosemite@2x.png
browser/themes/osx/menuPanel-small.png
browser/themes/osx/menuPanel-small@2x.png
browser/themes/osx/menuPanel-yosemite.png
browser/themes/osx/menuPanel-yosemite@2x.png
browser/themes/osx/menuPanel.png
browser/themes/osx/menuPanel@2x.png
browser/themes/shared/login-doorhanger.inc.css
browser/themes/windows/menuPanel-aero.png
browser/themes/windows/menuPanel-aero@2x.png
browser/themes/windows/menuPanel-small-aero.png
browser/themes/windows/menuPanel-small-aero@2x.png
browser/themes/windows/menuPanel-small.png
browser/themes/windows/menuPanel-small@2x.png
browser/themes/windows/menuPanel.png
browser/themes/windows/menuPanel@2x.png
devtools/client/debugger/new/test/mochitest/browser_dbg_stub.js
devtools/client/locales/en-US/promisedebugger.properties
devtools/client/sourceeditor/codemirror/mode/clike.js
devtools/client/sourceeditor/codemirror/mode/css.js
devtools/client/sourceeditor/codemirror/mode/htmlmixed.js
devtools/client/sourceeditor/codemirror/mode/javascript.js
devtools/client/sourceeditor/codemirror/mode/wasm.js
devtools/client/sourceeditor/codemirror/mode/xml.js
ipc/glue/GeckoChildProcessHost.cpp
js/src/jskwgen.cpp
layout/generic/VisibilityIPC.h
media/libcubeb/bug1278612.patch
netwerk/test/unit/test_invalidport.js
old-configure.in
taskcluster/ci/legacy/kind.yml
taskcluster/ci/legacy/routes.json
taskcluster/ci/legacy/tasks/branches/alder/job_flags.yml
taskcluster/ci/legacy/tasks/branches/ash/job_flags.yml
taskcluster/ci/legacy/tasks/branches/autoland/job_flags.yml
taskcluster/ci/legacy/tasks/branches/base_job_flags.yml
taskcluster/ci/legacy/tasks/branches/base_jobs.yml
taskcluster/ci/legacy/tasks/branches/mozilla-central/job_flags.yml
taskcluster/ci/legacy/tasks/branches/mozilla-inbound/job_flags.yml
taskcluster/ci/legacy/tasks/branches/stylo-try/job_flags.yml
taskcluster/ci/legacy/tasks/branches/stylo/job_flags.yml
taskcluster/ci/legacy/tasks/branches/try/job_flags.yml
taskcluster/ci/legacy/tasks/build.yml
taskcluster/ci/legacy/tasks/builds/android_api_15.yml
taskcluster/ci/legacy/tasks/builds/android_api_15_debug.yml
taskcluster/ci/legacy/tasks/builds/android_api_15_gradle.yml
taskcluster/ci/legacy/tasks/builds/android_api_15_gradle_dependencies.yml
taskcluster/ci/legacy/tasks/builds/android_api_15_partner_sample1.yml
taskcluster/ci/legacy/tasks/builds/android_checkstyle.yml
taskcluster/ci/legacy/tasks/builds/android_lint.yml
taskcluster/ci/legacy/tasks/builds/android_test.yml
taskcluster/ci/legacy/tasks/builds/android_x86.yml
taskcluster/ci/legacy/tasks/builds/b2g_aries_debug.yml
taskcluster/ci/legacy/tasks/builds/b2g_aries_eng.yml
taskcluster/ci/legacy/tasks/builds/b2g_base.yml
taskcluster/ci/legacy/tasks/builds/b2g_nexus_5l_debug.yml
taskcluster/ci/legacy/tasks/builds/b2g_nexus_5l_eng.yml
taskcluster/ci/legacy/tasks/builds/b2g_phone_base.yml
taskcluster/ci/legacy/tasks/builds/b2g_phone_eng_base.yml
taskcluster/ci/legacy/tasks/builds/base_linux32.yml
taskcluster/ci/legacy/tasks/builds/base_linux64.yml
taskcluster/ci/legacy/tasks/builds/base_macosx64.yml
taskcluster/ci/legacy/tasks/builds/base_win32.yml
taskcluster/ci/legacy/tasks/builds/base_win64.yml
taskcluster/ci/legacy/tasks/builds/dbg_linux32.yml
taskcluster/ci/legacy/tasks/builds/dbg_linux64.yml
taskcluster/ci/legacy/tasks/builds/dbg_linux64_asan.yml
taskcluster/ci/legacy/tasks/builds/dbg_macosx64.yml
taskcluster/ci/legacy/tasks/builds/dbg_win32.yml
taskcluster/ci/legacy/tasks/builds/dbg_win64.yml
taskcluster/ci/legacy/tasks/builds/firefox_docker_base.yml
taskcluster/ci/legacy/tasks/builds/firefox_l10n_base.yml
taskcluster/ci/legacy/tasks/builds/firefox_l10n_linux32.yml
taskcluster/ci/legacy/tasks/builds/firefox_l10n_linux64.yml
taskcluster/ci/legacy/tasks/builds/firefox_windows_base.yml
taskcluster/ci/legacy/tasks/builds/haz_linux.yml
taskcluster/ci/legacy/tasks/builds/haz_shell_linux.yml
taskcluster/ci/legacy/tasks/builds/linux64_clang.yml
taskcluster/ci/legacy/tasks/builds/linux64_gcc.yml
taskcluster/ci/legacy/tasks/builds/mobile_base.yml
taskcluster/ci/legacy/tasks/builds/mulet_haz_linux.yml
taskcluster/ci/legacy/tasks/builds/mulet_linux.yml
taskcluster/ci/legacy/tasks/builds/mulet_linux_dbg.yml
taskcluster/ci/legacy/tasks/builds/opt_linux32.yml
taskcluster/ci/legacy/tasks/builds/opt_linux64.yml
taskcluster/ci/legacy/tasks/builds/opt_linux64_artifact.yml
taskcluster/ci/legacy/tasks/builds/opt_linux64_asan.yml
taskcluster/ci/legacy/tasks/builds/opt_linux64_pgo.yml
taskcluster/ci/legacy/tasks/builds/opt_linux64_st-an.yml
taskcluster/ci/legacy/tasks/builds/opt_linux64_valgrind.yml
taskcluster/ci/legacy/tasks/builds/opt_macosx64.yml
taskcluster/ci/legacy/tasks/builds/opt_macosx64_st-an.yml
taskcluster/ci/legacy/tasks/builds/opt_win32.yml
taskcluster/ci/legacy/tasks/builds/opt_win64.yml
taskcluster/ci/legacy/tasks/builds/sm_arm64_sim.yml
taskcluster/ci/legacy/tasks/builds/sm_arm_sim.yml
taskcluster/ci/legacy/tasks/builds/sm_arm_sim_osx.yml
taskcluster/ci/legacy/tasks/builds/sm_asan.yml
taskcluster/ci/legacy/tasks/builds/sm_base.yml
taskcluster/ci/legacy/tasks/builds/sm_compacting.yml
taskcluster/ci/legacy/tasks/builds/sm_msan.yml
taskcluster/ci/legacy/tasks/builds/sm_nonunified.yml
taskcluster/ci/legacy/tasks/builds/sm_package.yml
taskcluster/ci/legacy/tasks/builds/sm_plain.yml
taskcluster/ci/legacy/tasks/builds/sm_plaindebug.yml
taskcluster/ci/legacy/tasks/builds/sm_rootanalysis.yml
taskcluster/ci/legacy/tasks/builds/sm_tsan.yml
taskcluster/ci/legacy/tasks/builds/sm_variant_base.yml
taskcluster/ci/legacy/tasks/docker_build.yml
taskcluster/ci/legacy/tasks/docker_test.yml
taskcluster/ci/legacy/tasks/harness_test.yml
taskcluster/ci/legacy/tasks/image.yml
taskcluster/ci/legacy/tasks/l10n.yml
taskcluster/ci/legacy/tasks/lint.yml
taskcluster/ci/legacy/tasks/phone_build.yml
taskcluster/ci/legacy/tasks/post-builds/mulet_simulator.yml
taskcluster/ci/legacy/tasks/post-builds/upload_symbols.yml
taskcluster/ci/legacy/tasks/test.yml
taskcluster/ci/legacy/tasks/tests/harness_marionette.yml
taskcluster/ci/legacy/tasks/tests/mozharness-gecko.yml
taskcluster/ci/legacy/tasks/tests/mozlint-eslint.yml
taskcluster/ci/legacy/tasks/tests/mozlint-flake8.yml
taskcluster/ci/legacy/tasks/tests/mozlint-wpt.yml
taskcluster/ci/legacy/tasks/tests/sphinx.yml
taskcluster/ci/legacy/tasks/tests/taskgraph-tests.yml
taskcluster/ci/legacy/tasks/windows_build.yml
taskcluster/ci/legacy/tasks/windows_test.yml
taskcluster/taskgraph/test/test_task_legacy.py
taskcluster/taskgraph/test/test_util_legacy_commit_parser.py
taskcluster/taskgraph/transforms/make_task.py
taskcluster/taskgraph/util/legacy_commit_parser.py
testing/docker/desktop-test/bin/test.sh
testing/docker/desktop1604-test/bin/test.sh
testing/web-platform/meta/XMLHttpRequest/event-readystatechange-loaded.htm.ini
testing/web-platform/meta/XMLHttpRequest/open-url-bogus.htm.ini
testing/web-platform/meta/custom-elements/custom-elements-registry/define.html.ini
testing/web-platform/meta/dom/events/Event-initEvent.html.ini
testing/web-platform/meta/dom/events/Event-propagation.html.ini
testing/web-platform/meta/dom/nodes/Document-getElementsByTagName-xhtml.xhtml.ini
testing/web-platform/meta/dom/nodes/Document-getElementsByTagName.html.ini
testing/web-platform/meta/dom/nodes/Element-getElementsByTagName.html.ini
testing/web-platform/meta/dom/nodes/Node-properties.html.ini
testing/web-platform/meta/encrypted-media/clearkey-check-initdata-type.html.ini
testing/web-platform/meta/encrypted-media/clearkey-events.html.ini
testing/web-platform/meta/encrypted-media/clearkey-generate-request-disallowed-input.html.ini
testing/web-platform/meta/encrypted-media/clearkey-keystatuses-multiple-sessions.html.ini
testing/web-platform/meta/encrypted-media/clearkey-not-callable-after-createsession.html.ini
testing/web-platform/meta/encrypted-media/drm-check-initdata-type.html.ini
testing/web-platform/meta/encrypted-media/drm-generate-request-disallowed-input.html.ini
testing/web-platform/meta/fetch/api/cors/cors-cookies-worker.html.ini
testing/web-platform/meta/fetch/api/cors/cors-cookies.html.ini
testing/web-platform/meta/html/browsers/history/the-history-interface/008.html.ini
testing/web-platform/meta/referrer-policy/origin/meta-csp/cross-origin/http-http/img-tag/generic.keep-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/origin/meta-csp/cross-origin/http-http/img-tag/generic.no-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/origin/meta-csp/cross-origin/http-http/img-tag/generic.swap-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/origin/meta-csp/cross-origin/http-https/img-tag/generic.keep-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/origin/meta-csp/cross-origin/http-https/img-tag/generic.no-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/origin/meta-csp/cross-origin/http-https/img-tag/generic.swap-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/origin/meta-csp/same-origin/http-http/img-tag/generic.keep-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/origin/meta-csp/same-origin/http-http/img-tag/generic.no-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/origin/meta-csp/same-origin/http-http/img-tag/generic.swap-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/origin/meta-csp/same-origin/http-https/img-tag/generic.keep-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/origin/meta-csp/same-origin/http-https/img-tag/generic.no-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/origin/meta-csp/same-origin/http-https/img-tag/generic.swap-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-http/fetch-request/cross-origin.keep-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-http/fetch-request/cross-origin.no-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-http/fetch-request/cross-origin.swap-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-http/iframe-tag/cross-origin.keep-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-http/iframe-tag/cross-origin.no-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-http/iframe-tag/cross-origin.swap-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-http/img-tag/cross-origin.keep-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-http/img-tag/cross-origin.no-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-http/img-tag/cross-origin.swap-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-http/script-tag/cross-origin.keep-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-http/script-tag/cross-origin.no-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-http/script-tag/cross-origin.swap-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-http/xhr-request/cross-origin.keep-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-http/xhr-request/cross-origin.no-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-http/xhr-request/cross-origin.swap-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-https/fetch-request/cross-origin.keep-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-https/fetch-request/cross-origin.no-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-https/fetch-request/cross-origin.swap-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-https/iframe-tag/cross-origin.keep-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-https/iframe-tag/cross-origin.no-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-https/iframe-tag/cross-origin.swap-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-https/img-tag/cross-origin.keep-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-https/img-tag/cross-origin.no-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-https/img-tag/cross-origin.swap-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-https/script-tag/cross-origin.keep-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-https/script-tag/cross-origin.no-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-https/script-tag/cross-origin.swap-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-https/xhr-request/cross-origin.keep-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-https/xhr-request/cross-origin.no-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/cross-origin/http-https/xhr-request/cross-origin.swap-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/same-origin/http-http/fetch-request/same-origin-insecure.swap-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/same-origin/http-http/iframe-tag/same-origin-insecure.swap-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/same-origin/http-http/img-tag/same-origin-insecure.keep-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/same-origin/http-http/img-tag/same-origin-insecure.no-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/same-origin/http-http/img-tag/same-origin-insecure.swap-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/same-origin/http-http/script-tag/same-origin-insecure.swap-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/same-origin/http-http/xhr-request/same-origin-insecure.swap-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/same-origin/http-https/fetch-request/same-origin-insecure.swap-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/same-origin/http-https/iframe-tag/same-origin-insecure.swap-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/same-origin/http-https/img-tag/same-origin-insecure.swap-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/same-origin/http-https/script-tag/same-origin-insecure.swap-origin-redirect.http.html.ini
testing/web-platform/meta/referrer-policy/same-origin/meta-csp/same-origin/http-https/xhr-request/same-origin-insecure.swap-origin-redirect.http.html.ini
testing/web-platform/tests/IndexedDB/idbcursor-continuePrimaryKey.htm
testing/web-platform/tests/IndexedDB/idbobjectstore_getKey.htm
testing/web-platform/tests/IndexedDB/idbobjectstore_getKey_exception_order.htm
testing/web-platform/tests/annotation-model/examples/example1-manual.html
testing/web-platform/tests/annotation-model/examples/example2-manual.html
testing/web-platform/tests/annotation-model/tools/template
testing/web-platform/tests/conformance-checkers/html/elements/base/href/port-999999-isvalid.html
testing/web-platform/tests/conformance-checkers/html/elements/html/manifest/port-999999-isvalid.html
testing/web-platform/tests/css-shapes/basic-shape-circle-ellipse-serialization.html
testing/web-platform/tests/custom-elements/custom-elements-registry/define.html
testing/web-platform/tests/domparsing/insert_adjacent_html.xhtml
testing/web-platform/tests/encrypted-media/content/audio_aac-lc_128k_2keys_bis.mp4
testing/web-platform/tests/encrypted-media/content/drmconfig.json
testing/web-platform/tests/encrypted-media/content/video_512x288_h264-360k_enc_2keys_bis.mp4
testing/web-platform/tests/encrypted-media/util/drmtoday-messagehandler.js
testing/web-platform/tests/html/semantics/forms/the-form-element/form-submission-sandbox.html
testing/web-platform/tests/html/semantics/forms/the-form-element/support/form-submission-sandbox-iframe.html
testing/web-platform/tests/html/semantics/grouping-content/the-ol-element/reversed-1d.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-http/fetch-request/insecure-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-http/fetch-request/insecure-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-http/fetch-request/insecure-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-http/iframe-tag/insecure-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-http/iframe-tag/insecure-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-http/iframe-tag/insecure-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-http/img-tag/insecure-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-http/img-tag/insecure-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-http/img-tag/insecure-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-http/script-tag/insecure-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-http/script-tag/insecure-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-http/script-tag/insecure-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-http/xhr-request/insecure-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-http/xhr-request/insecure-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-http/xhr-request/insecure-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-https/fetch-request/upgrade-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-https/fetch-request/upgrade-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-https/fetch-request/upgrade-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-https/iframe-tag/upgrade-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-https/iframe-tag/upgrade-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-https/iframe-tag/upgrade-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-https/img-tag/upgrade-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-https/img-tag/upgrade-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-https/img-tag/upgrade-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-https/script-tag/upgrade-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-https/script-tag/upgrade-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-https/script-tag/upgrade-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-https/xhr-request/upgrade-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-https/xhr-request/upgrade-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/cross-origin/http-https/xhr-request/upgrade-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-http/fetch-request/insecure-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-http/fetch-request/insecure-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-http/fetch-request/insecure-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-http/iframe-tag/insecure-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-http/iframe-tag/insecure-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-http/iframe-tag/insecure-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-http/img-tag/insecure-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-http/img-tag/insecure-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-http/img-tag/insecure-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-http/script-tag/insecure-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-http/script-tag/insecure-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-http/script-tag/insecure-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-http/xhr-request/insecure-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-http/xhr-request/insecure-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-http/xhr-request/insecure-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-https/fetch-request/upgrade-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-https/fetch-request/upgrade-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-https/fetch-request/upgrade-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-https/iframe-tag/upgrade-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-https/iframe-tag/upgrade-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-https/iframe-tag/upgrade-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-https/img-tag/upgrade-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-https/img-tag/upgrade-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-https/img-tag/upgrade-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-https/script-tag/upgrade-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-https/script-tag/upgrade-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-https/script-tag/upgrade-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-https/xhr-request/upgrade-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-https/xhr-request/upgrade-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer-when-downgrade/meta-csp/same-origin/http-https/xhr-request/upgrade-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-http/fetch-request/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-http/fetch-request/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-http/fetch-request/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-http/iframe-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-http/iframe-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-http/iframe-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-http/img-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-http/img-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-http/img-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-http/script-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-http/script-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-http/script-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-http/xhr-request/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-http/xhr-request/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-http/xhr-request/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-https/fetch-request/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-https/fetch-request/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-https/fetch-request/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-https/iframe-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-https/iframe-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-https/iframe-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-https/img-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-https/img-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-https/img-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-https/script-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-https/script-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-https/script-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-https/xhr-request/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-https/xhr-request/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/cross-origin/http-https/xhr-request/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-http/fetch-request/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-http/fetch-request/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-http/fetch-request/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-http/iframe-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-http/iframe-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-http/iframe-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-http/img-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-http/img-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-http/img-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-http/script-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-http/script-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-http/script-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-http/xhr-request/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-http/xhr-request/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-http/xhr-request/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-https/fetch-request/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-https/fetch-request/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-https/fetch-request/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-https/iframe-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-https/iframe-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-https/iframe-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-https/img-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-https/img-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-https/img-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-https/script-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-https/script-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-https/script-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-https/xhr-request/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-https/xhr-request/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/no-referrer/meta-csp/same-origin/http-https/xhr-request/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-http/fetch-request/cross-origin.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-http/fetch-request/cross-origin.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-http/fetch-request/cross-origin.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-http/iframe-tag/cross-origin.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-http/iframe-tag/cross-origin.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-http/iframe-tag/cross-origin.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-http/img-tag/cross-origin.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-http/img-tag/cross-origin.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-http/img-tag/cross-origin.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-http/script-tag/cross-origin.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-http/script-tag/cross-origin.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-http/script-tag/cross-origin.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-http/xhr-request/cross-origin.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-http/xhr-request/cross-origin.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-http/xhr-request/cross-origin.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-https/fetch-request/cross-origin.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-https/fetch-request/cross-origin.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-https/fetch-request/cross-origin.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-https/iframe-tag/cross-origin.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-https/iframe-tag/cross-origin.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-https/iframe-tag/cross-origin.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-https/img-tag/cross-origin.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-https/img-tag/cross-origin.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-https/img-tag/cross-origin.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-https/script-tag/cross-origin.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-https/script-tag/cross-origin.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-https/script-tag/cross-origin.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-https/xhr-request/cross-origin.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-https/xhr-request/cross-origin.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/cross-origin/http-https/xhr-request/cross-origin.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-http/fetch-request/same-origin-insecure.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-http/fetch-request/same-origin-insecure.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-http/fetch-request/same-origin-insecure.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-http/iframe-tag/same-origin-insecure.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-http/iframe-tag/same-origin-insecure.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-http/iframe-tag/same-origin-insecure.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-http/img-tag/same-origin-insecure.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-http/img-tag/same-origin-insecure.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-http/img-tag/same-origin-insecure.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-http/script-tag/same-origin-insecure.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-http/script-tag/same-origin-insecure.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-http/script-tag/same-origin-insecure.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-http/xhr-request/same-origin-insecure.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-http/xhr-request/same-origin-insecure.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-http/xhr-request/same-origin-insecure.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/fetch-request/same-origin-downgrade.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/fetch-request/same-origin-downgrade.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/fetch-request/same-origin-downgrade.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/fetch-request/same-origin-insecure.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/fetch-request/same-origin-upgrade.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/fetch-request/same-origin-upgrade.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/fetch-request/same-origin-upgrade.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/iframe-tag/same-origin-downgrade.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/iframe-tag/same-origin-downgrade.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/iframe-tag/same-origin-downgrade.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/iframe-tag/same-origin-insecure.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/iframe-tag/same-origin-upgrade.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/iframe-tag/same-origin-upgrade.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/iframe-tag/same-origin-upgrade.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/img-tag/same-origin-downgrade.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/img-tag/same-origin-downgrade.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/img-tag/same-origin-downgrade.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/img-tag/same-origin-insecure.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/img-tag/same-origin-upgrade.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/img-tag/same-origin-upgrade.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/img-tag/same-origin-upgrade.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/script-tag/same-origin-downgrade.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/script-tag/same-origin-downgrade.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/script-tag/same-origin-downgrade.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/script-tag/same-origin-insecure.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/script-tag/same-origin-upgrade.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/script-tag/same-origin-upgrade.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/script-tag/same-origin-upgrade.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/xhr-request/same-origin-downgrade.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/xhr-request/same-origin-downgrade.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/xhr-request/same-origin-downgrade.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/xhr-request/same-origin-insecure.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/xhr-request/same-origin-upgrade.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/xhr-request/same-origin-upgrade.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin-when-cross-origin/meta-csp/same-origin/http-https/xhr-request/same-origin-upgrade.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-http/fetch-request/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-http/fetch-request/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-http/fetch-request/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-http/iframe-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-http/iframe-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-http/iframe-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-http/img-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-http/img-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-http/img-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-http/script-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-http/script-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-http/script-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-http/xhr-request/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-http/xhr-request/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-http/xhr-request/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-https/fetch-request/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-https/fetch-request/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-https/fetch-request/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-https/iframe-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-https/iframe-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-https/iframe-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-https/img-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-https/img-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-https/img-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-https/script-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-https/script-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-https/script-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-https/xhr-request/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-https/xhr-request/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/cross-origin/http-https/xhr-request/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-http/fetch-request/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-http/fetch-request/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-http/fetch-request/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-http/iframe-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-http/iframe-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-http/iframe-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-http/img-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-http/img-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-http/img-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-http/script-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-http/script-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-http/script-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-http/xhr-request/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-http/xhr-request/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-http/xhr-request/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-https/fetch-request/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-https/fetch-request/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-https/fetch-request/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-https/iframe-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-https/iframe-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-https/iframe-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-https/img-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-https/img-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-https/img-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-https/script-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-https/script-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-https/script-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-https/xhr-request/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-https/xhr-request/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/origin/meta-csp/same-origin/http-https/xhr-request/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-http/fetch-request/cross-origin.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-http/fetch-request/cross-origin.no-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-http/fetch-request/cross-origin.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-http/iframe-tag/cross-origin.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-http/iframe-tag/cross-origin.no-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-http/iframe-tag/cross-origin.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-http/img-tag/cross-origin.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-http/img-tag/cross-origin.no-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-http/img-tag/cross-origin.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-http/script-tag/cross-origin.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-http/script-tag/cross-origin.no-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-http/script-tag/cross-origin.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-http/xhr-request/cross-origin.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-http/xhr-request/cross-origin.no-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-http/xhr-request/cross-origin.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-https/fetch-request/cross-origin.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-https/fetch-request/cross-origin.no-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-https/fetch-request/cross-origin.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-https/iframe-tag/cross-origin.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-https/iframe-tag/cross-origin.no-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-https/iframe-tag/cross-origin.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-https/img-tag/cross-origin.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-https/img-tag/cross-origin.no-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-https/img-tag/cross-origin.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-https/script-tag/cross-origin.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-https/script-tag/cross-origin.no-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-https/script-tag/cross-origin.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-https/xhr-request/cross-origin.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-https/xhr-request/cross-origin.no-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/cross-origin/http-https/xhr-request/cross-origin.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/same-origin/http-http/fetch-request/same-origin-insecure.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/same-origin/http-http/fetch-request/same-origin-insecure.no-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/same-origin/http-http/fetch-request/same-origin-insecure.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/same-origin/http-http/iframe-tag/same-origin-insecure.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/same-origin/http-http/iframe-tag/same-origin-insecure.no-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/same-origin/http-http/iframe-tag/same-origin-insecure.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/same-origin/http-http/img-tag/same-origin-insecure.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/same-origin/http-http/img-tag/same-origin-insecure.no-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/same-origin/http-http/img-tag/same-origin-insecure.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/same-origin/http-http/script-tag/same-origin-insecure.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/same-origin/http-http/script-tag/same-origin-insecure.no-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/same-origin/http-http/script-tag/same-origin-insecure.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/same-origin/http-http/xhr-request/same-origin-insecure.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/same-origin/http-http/xhr-request/same-origin-insecure.no-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/same-origin/http-http/xhr-request/same-origin-insecure.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/same-origin/http-https/fetch-request/same-origin-insecure.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/same-origin/http-https/iframe-tag/same-origin-insecure.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/same-origin/http-https/img-tag/same-origin-insecure.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/same-origin/http-https/script-tag/same-origin-insecure.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/same-origin/meta-csp/same-origin/http-https/xhr-request/same-origin-insecure.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-http/fetch-request/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-http/fetch-request/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-http/fetch-request/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-http/iframe-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-http/iframe-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-http/iframe-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-http/img-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-http/img-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-http/img-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-http/script-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-http/script-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-http/script-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-http/xhr-request/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-http/xhr-request/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-http/xhr-request/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-https/fetch-request/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-https/fetch-request/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-https/fetch-request/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-https/iframe-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-https/iframe-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-https/iframe-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-https/img-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-https/img-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-https/img-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-https/script-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-https/script-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-https/script-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-https/xhr-request/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-https/xhr-request/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/cross-origin/http-https/xhr-request/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-http/fetch-request/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-http/fetch-request/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-http/fetch-request/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-http/iframe-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-http/iframe-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-http/iframe-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-http/img-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-http/img-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-http/img-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-http/script-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-http/script-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-http/script-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-http/xhr-request/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-http/xhr-request/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-http/xhr-request/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-https/fetch-request/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-https/fetch-request/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-https/fetch-request/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-https/iframe-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-https/iframe-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-https/iframe-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-https/img-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-https/img-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-https/img-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-https/script-tag/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-https/script-tag/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-https/script-tag/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-https/xhr-request/generic.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-https/xhr-request/generic.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unsafe-url/meta-csp/same-origin/http-https/xhr-request/generic.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-http/fetch-request/insecure-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-http/fetch-request/insecure-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-http/fetch-request/insecure-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-http/iframe-tag/insecure-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-http/iframe-tag/insecure-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-http/iframe-tag/insecure-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-http/img-tag/insecure-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-http/img-tag/insecure-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-http/img-tag/insecure-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-http/script-tag/insecure-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-http/script-tag/insecure-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-http/script-tag/insecure-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-http/xhr-request/insecure-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-http/xhr-request/insecure-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-http/xhr-request/insecure-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-https/fetch-request/upgrade-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-https/fetch-request/upgrade-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-https/fetch-request/upgrade-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-https/iframe-tag/upgrade-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-https/iframe-tag/upgrade-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-https/iframe-tag/upgrade-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-https/img-tag/upgrade-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-https/img-tag/upgrade-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-https/img-tag/upgrade-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-https/script-tag/upgrade-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-https/script-tag/upgrade-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-https/script-tag/upgrade-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-https/xhr-request/upgrade-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-https/xhr-request/upgrade-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/cross-origin/http-https/xhr-request/upgrade-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-http/fetch-request/insecure-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-http/fetch-request/insecure-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-http/fetch-request/insecure-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-http/iframe-tag/insecure-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-http/iframe-tag/insecure-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-http/iframe-tag/insecure-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-http/img-tag/insecure-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-http/img-tag/insecure-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-http/img-tag/insecure-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-http/script-tag/insecure-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-http/script-tag/insecure-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-http/script-tag/insecure-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-http/xhr-request/insecure-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-http/xhr-request/insecure-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-http/xhr-request/insecure-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-https/fetch-request/upgrade-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-https/fetch-request/upgrade-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-https/fetch-request/upgrade-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-https/iframe-tag/upgrade-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-https/iframe-tag/upgrade-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-https/iframe-tag/upgrade-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-https/img-tag/upgrade-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-https/img-tag/upgrade-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-https/img-tag/upgrade-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-https/script-tag/upgrade-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-https/script-tag/upgrade-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-https/script-tag/upgrade-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-https/xhr-request/upgrade-protocol.keep-origin-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-https/xhr-request/upgrade-protocol.no-redirect.http.html
testing/web-platform/tests/referrer-policy/unset-referrer-policy/meta-csp/same-origin/http-https/xhr-request/upgrade-protocol.swap-origin-redirect.http.html
testing/web-platform/tests/tools/setup.cfg
toolkit/components/passwordmgr/LoginDoorhangers.jsm
toolkit/components/passwordmgr/content/login.xml
toolkit/components/passwordmgr/test/browser/browser_filldoorhanger.js
toolkit/components/passwordmgr/test/notification_common.js
toolkit/components/telemetry/Histograms.json
toolkit/crashreporter/test/unit/test_crash_rust_panic.js
toolkit/mozapps/update/updater/updater.cpp
xpcom/build/XPCOMInit.cpp
--- a/.gitignore
+++ b/.gitignore
@@ -70,17 +70,17 @@ python/psutil/**/*.so
 python/psutil/**/*.pyd
 python/psutil/build/
 
 # Ignore chrome.manifest files from the devtools loader
 devtools/client/chrome.manifest
 devtools/shared/chrome.manifest
 
 # Ignore node_modules directories in devtools
-devtools/client/**/node_modules
+devtools/**/node_modules
 
 # Tag files generated by GNU Global
 GTAGS
 GRTAGS
 GSYMS
 GPATH
 
 # Git clone directory for updating web-platform-tests
--- a/.hgignore
+++ b/.hgignore
@@ -74,17 +74,17 @@
 # Git repositories
 .git/
 
 # Ignore chrome.manifest files from the devtools loader
 ^devtools/client/chrome.manifest$
 ^devtools/shared/chrome.manifest$
 
 # Ignore node_modules directories in devtools
-^devtools/client/.*/node_modules/
+^devtools/.*/node_modules/
 
 # git checkout of libstagefright
 ^media/libstagefright/android$
 
 # Tag files generated by GNU Global
 GTAGS
 GRTAGS
 GSYMS
--- a/CLOBBER
+++ b/CLOBBER
@@ -17,9 +17,9 @@
 #
 # Modifying this file will now automatically clobber the buildbot machines \o/
 #
 
 # Are you updating CLOBBER because you think it's needed for your WebIDL
 # changes to stick? As of bug 928195, this shouldn't be necessary! Please
 # don't change CLOBBER for WebIDL changes any more.
 
-Bug 1287426 - Clobber required because of Linux Chromium sandbox file moves.
+Bug 1302429 to fix also bustage.
--- a/accessible/base/EventTree.cpp
+++ b/accessible/base/EventTree.cpp
@@ -253,16 +253,34 @@ EventTree::FindOrInsert(Accessible* aCon
     while (parent) {
       // Reached a top, no match for a current event.
       if (parent == top) {
         break;
       }
 
       // We got a match.
       if (parent->Parent() == node->mContainer) {
+        // Reject the node if it's contained by a show/hide event target
+        uint32_t evCount = node->mDependentEvents.Length();
+        for (uint32_t idx = 0; idx < evCount; idx++) {
+          AccMutationEvent* ev = node->mDependentEvents[idx];
+          if (ev->GetAccessible() == parent) {
+#ifdef A11Y_LOG
+            if (logging::IsEnabledAll(logging::eEventTree |
+                                      logging::eVerbose)) {
+              logging::MsgBegin("EVENTS_TREE",
+                "Rejecting node since contained by show/hide target");
+              logging::AccessibleInfo("Container", aContainer);
+              logging::MsgEnd();
+            }
+#endif
+            return nullptr;
+          }
+        }
+
         return node->FindOrInsert(aContainer);
       }
 
       parent = parent->Parent();
       MOZ_ASSERT(parent, "Wrong tree");
     }
 
     // If the given container contains a current node
--- a/accessible/base/TextAttrs.h
+++ b/accessible/base/TextAttrs.h
@@ -175,23 +175,23 @@ protected:
     virtual bool GetValueFor(Accessible* aAccessible, T* aValue) = 0;
 
     // Indicates if root value should be exposed.
     bool mGetRootValue;
 
     // Native value and flag indicating if the value is defined (initialized in
     // derived classes). Note, undefined native value means it is inherited
     // from root.
-    T mNativeValue;
-    bool mIsDefined;
+    MOZ_INIT_OUTSIDE_CTOR T mNativeValue;
+    MOZ_INIT_OUTSIDE_CTOR bool mIsDefined;
 
     // Native root value and flag indicating if the value is defined  (initialized
     // in derived classes).
-    T mRootNativeValue;
-    bool mIsRootDefined;
+    MOZ_INIT_OUTSIDE_CTOR T mRootNativeValue;
+    MOZ_INIT_OUTSIDE_CTOR bool mIsRootDefined;
   };
 
 
   /**
    * Class is used for the work with 'language' text attribute.
    */
   class LangTextAttr : public TTextAttr<nsString>
   {
--- a/accessible/tests/mochitest/events/test_coalescence.html
+++ b/accessible/tests/mochitest/events/test_coalescence.html
@@ -441,16 +441,57 @@
         testIsDefunct(this.b);
       }
 
       this.getID = function test5_getID() {
         return "remove a child, remove a parent sibling, remove the parent";
       }
     }
 
+    /**
+     * Insert accessibles with a child node moved by aria-owns
+     * Markup:
+     * <div id="t6_fc">
+     *   <div id="t6_owns"></div>
+     * </div>
+     * <div id="t6_sc" aria-owns="t6_owns"></div>
+     */
+    function test6()
+    {
+      this.parent = getNode("t6");
+      this.fc = document.createElement("div");
+      this.fc.setAttribute("id", "t6_fc");
+      this.owns = document.createElement("div");
+      this.owns.setAttribute("id", "t6_owns");
+      this.sc = document.createElement("div");
+      this.sc.setAttribute("id", "t6_sc");
+
+      this.eventSeq = [
+        new invokerChecker(EVENT_SHOW, this.fc),
+        new invokerChecker(EVENT_SHOW, this.sc),
+        new invokerChecker(EVENT_REORDER, this.parent),
+        new unexpectedInvokerChecker(EVENT_REORDER, this.fc),
+        new unexpectedInvokerChecker(EVENT_REORDER, this.sc),
+        new unexpectedInvokerChecker(EVENT_HIDE, this.owns),
+        new unexpectedInvokerChecker(EVENT_SHOW, this.owns)
+      ];
+
+      this.invoke = function test6_invoke()
+      {
+        getNode("t6").appendChild(this.fc);
+        getNode("t6_fc").appendChild(this.owns);
+        getNode("t6").appendChild(this.sc);
+        getNode("t6_sc").setAttribute("aria-owns", "t6_owns");
+      };
+
+      this.getID = function test6_getID() {
+        return "Insert accessibles with a child node moved by aria-owns";
+      };
+    }
+
     ////////////////////////////////////////////////////////////////////////////
     // Do tests.
 
     //gA11yEventDumpToConsole = true; // debug stuff
     //enableLogging("tree,eventTree,verbose");
 
     var gQueue = null;
     function doTests()
@@ -472,16 +513,17 @@
       gQueue.push(new showParentNChild("select10", "option10", true));
       gQueue.push(new showParentNAddChild("select11", false));
       gQueue.push(new showParentNAddChild("select12", true));
 
       gQueue.push(new removeGrandChildrenNHideParent("t1_child1", "t1_child2", "t1_parent"));
       gQueue.push(new test3());
       gQueue.push(new test4());
       gQueue.push(new test5());
+      gQueue.push(new test6());
 
       gQueue.invoke(); // Will call SimpleTest.finish();
     }
 
     SimpleTest.waitForExplicitFinish();
     addA11yLoadEvent(doTests);
   </script>
 </head>
@@ -562,10 +604,13 @@
   </div>
 
   <div id="t5">
     <div role="button" id="t5_b">btn</div>
     <div role="listbox" id="t5_lb">
       <div role="option" id="t5_o">opt</div>
     </div>
   </div>
+
+  <div id="t6">
+  </div>
 </body>
 </html>
--- a/addon-sdk/source/lib/sdk/l10n/properties/core.js
+++ b/addon-sdk/source/lib/sdk/l10n/properties/core.js
@@ -8,16 +8,20 @@ const { newURI } = require('../../url/ut
 const { getRulesForLocale } = require("../plural-rules");
 const { getPreferedLocales } = require('../locale');
 const { rootURI } = require("@loader/options");
 const { Services } = Cu.import("resource://gre/modules/Services.jsm", {});
 
 const baseURI = rootURI + "locale/";
 const preferedLocales = getPreferedLocales(true);
 
+// Make sure we don't get stale data after an update
+// (See Bug 1300735 for rationale).
+Services.strings.flushBundles();
+
 function getLocaleURL(locale) {
   // if the locale is a valid chrome URI, return it
   try {
     let uri = newURI(locale);
     if (uri.scheme == 'chrome')
       return uri.spec;
   }
   catch(_) {}
--- a/browser/app/blocklist.xml
+++ b/browser/app/blocklist.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0"?>
-<blocklist xmlns="http://www.mozilla.org/2006/addons-blocklist" lastupdate="1472235999000">
+<blocklist xmlns="http://www.mozilla.org/2006/addons-blocklist" lastupdate="1472845813000">
   <emItems>
       <emItem  blockID="i58" id="webmaster@buzzzzvideos.info">
                         <versionRange  minVersion="0" maxVersion="*">
                     </versionRange>
                     <prefs>
               </prefs>
     </emItem>
       <emItem  blockID="i71" id="youtube@2youtube.com">
@@ -281,16 +281,22 @@
               </prefs>
     </emItem>
       <emItem  blockID="i554" id="lightningnewtab@gmail.com">
                         <versionRange  minVersion="0" maxVersion="*" severity="1">
                     </versionRange>
                     <prefs>
               </prefs>
     </emItem>
+      <emItem  blockID="i1266" id="@stopad">
+                        <versionRange  minVersion="0" maxVersion="0.0.4" severity="1">
+                    </versionRange>
+                    <prefs>
+              </prefs>
+    </emItem>
       <emItem  blockID="i348" id="{13c9f1f9-2322-4d5c-81df-6d4bf8476ba4}">
                         <versionRange  minVersion="0" maxVersion="*" severity="1">
                     </versionRange>
                     <prefs>
               </prefs>
     </emItem>
       <emItem  blockID="i972" id="831778-poidjao88DASfsAnindsd@jetpack">
                         <versionRange  minVersion="0" maxVersion="*" severity="3">
@@ -711,17 +717,17 @@
     </emItem>
       <emItem  blockID="i68" id="flashupdate@adobe.com">
                         <versionRange  minVersion="0" maxVersion="*">
                     </versionRange>
                     <prefs>
               </prefs>
     </emItem>
       <emItem  blockID="i45" id="{22119944-ED35-4ab1-910B-E619EA06A115}">
-                        <versionRange  minVersion="0.1" maxVersion="7.6.1">
+                        <versionRange  minVersion="0.1" maxVersion="7.9.20.6" severity="1">
                       <targetApplication  id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}">
                               <versionRange  minVersion="8.0a1" maxVersion="*" />
                           </targetApplication>
                     </versionRange>
                     <prefs>
               </prefs>
     </emItem>
       <emItem  blockID="i380" id="{cc8f597b-0765-404e-a575-82aefbd81daf}">
@@ -4150,12 +4156,24 @@
       <serialNumber>EA==</serialNumber>
     </certItem>
         <certItem issuerName="MDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTQ==">
       <serialNumber>EQ==</serialNumber>
     </certItem>
         <certItem issuerName="MDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTQ==">
       <serialNumber>Eg==</serialNumber>
     </certItem>
+        <certItem issuerName="MG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3Q=">
+      <serialNumber>RurwlgVMxeP6Zepun0LGZA==</serialNumber>
+    </certItem>
+        <certItem issuerName="MG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3Q=">
+      <serialNumber>Os2rnHWYhryvdOXfgan06A==</serialNumber>
+    </certItem>
+        <certItem issuerName="MG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3Q=">
+      <serialNumber>U3t2Vk8pfxTcaUPpIq0seQ==</serialNumber>
+    </certItem>
+        <certItem issuerName="ME0xCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxJzAlBgNVBAMTHkRpZ2lDZXJ0IFNIQTIgU2VjdXJlIFNlcnZlciBDQQ==">
+      <serialNumber>Aa8e+91erglSMgsk/mtVaA==</serialNumber>
+    </certItem>
       </certItems>
 
 
 </blocklist>
\ No newline at end of file
--- a/browser/app/nsBrowserApp.cpp
+++ b/browser/app/nsBrowserApp.cpp
@@ -5,18 +5,16 @@
 
 #include "nsXULAppAPI.h"
 #include "mozilla/AppData.h"
 #include "application.ini.h"
 #include "nsXPCOMGlue.h"
 #if defined(XP_WIN)
 #include <windows.h>
 #include <stdlib.h>
-#include <io.h>
-#include <fcntl.h>
 #elif defined(XP_UNIX)
 #include <sys/resource.h>
 #include <unistd.h>
 #endif
 
 #include <stdio.h>
 #include <stdarg.h>
 #include <time.h>
@@ -279,18 +277,18 @@ InitXPCOMGlue(const char *argv0, nsIFile
 
   nsresult rv = mozilla::BinaryPath::Get(argv0, exePath);
   if (NS_FAILED(rv)) {
     Output("Couldn't find the application directory.\n");
     return rv;
   }
 
   char *lastSlash = strrchr(exePath, XPCOM_FILE_PATH_SEPARATOR[0]);
-  if (!lastSlash || (size_t(lastSlash - exePath) > MAXPATHLEN -
-sizeof(XPCOM_DLL) - 1))
+  if (!lastSlash ||
+      (size_t(lastSlash - exePath) > MAXPATHLEN - sizeof(XPCOM_DLL) - 1))
     return NS_ERROR_FAILURE;
 
   strcpy(lastSlash + 1, XPCOM_DLL);
 
   if (!FileExists(exePath)) {
     Output("Could not find the Mozilla runtime.\n");
     return NS_ERROR_FAILURE;
   }
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -630,16 +630,18 @@ pref("network.protocol-handler.expose.ma
 pref("network.protocol-handler.expose.news", false);
 pref("network.protocol-handler.expose.snews", false);
 pref("network.protocol-handler.expose.nntp", false);
 
 pref("accessibility.typeaheadfind", false);
 pref("accessibility.typeaheadfind.timeout", 5000);
 pref("accessibility.typeaheadfind.linksonly", false);
 pref("accessibility.typeaheadfind.flashBar", 1);
+pref("findbar.highlightAll", true);
+pref("findbar.modalHighlight", true);
 
 // Tracks when accessibility is loaded into the previous session.
 pref("accessibility.loadedInLastSession", false);
 
 pref("plugins.click_to_play", true);
 pref("plugins.testmode", false);
 
 pref("plugin.default.state", 1);
@@ -1213,18 +1215,18 @@ pref("social.sidebar.unload_timeout_ms",
 // is true. Pref'd off for release while usage testing is done through beta.
 pref("social.share.activationPanelEnabled", true);
 pref("social.shareDirectory", "https://activations.cdn.mozilla.net/sharePanel.html");
 
 // Block insecure active content on https pages
 pref("security.mixed_content.block_active_content", true);
 
 // Show degraded UI for http pages with password fields.
-// Only for Nightly and Dev Edition for not, not for beta or release.
-#ifndef RELEASE_BUILD
+// Only for Nightly, Dev Edition and early beta, not for late beta or release.
+#ifdef EARLY_BETA_OR_EARLIER
 pref("security.insecure_password.ui.enabled", true);
 #else
 pref("security.insecure_password.ui.enabled", false);
 #endif
 
 // 1 = allow MITM for certificate pinning checks.
 pref("security.cert_pinning.enforcement_level", 1);
 
@@ -1500,8 +1502,19 @@ pref("extensions.pocket.enabled", true);
 pref("signon.schemeUpgrades", true);
 
 // Enable the "Simplify Page" feature in Print Preview
 pref("print.use_simplify_page", true);
 
 // Space separated list of URLS that are allowed to send objects (instead of
 // only strings) through webchannels. This list is duplicated in mobile/android/app/mobile.js
 pref("webchannel.allowObject.urlWhitelist", "https://accounts.firefox.com https://content.cdn.mozilla.net https://input.mozilla.org https://support.mozilla.org https://install.mozilla.org");
+
+// Whether or not the browser should scan for unsubmitted
+// crash reports, and then show a notification for submitting
+// those reports.
+#ifdef RELEASE_BUILD
+pref("browser.crashReports.unsubmittedCheck.enabled", false);
+#else
+pref("browser.crashReports.unsubmittedCheck.enabled", true);
+#endif
+
+pref("browser.crashReports.unsubmittedCheck.autoSubmit", false);
\ No newline at end of file
--- a/browser/base/content/abouthome/aboutHome.js
+++ b/browser/base/content/abouthome/aboutHome.js
@@ -213,16 +213,21 @@ function onSearchSubmit(aEvent)
   gContentSearchController.search(aEvent);
 }
 
 
 var gContentSearchController;
 
 function setupSearch()
 {
+  // Set submit button label for when CSS background are disabled (e.g.
+  // high contrast mode).
+  document.getElementById("searchSubmit").value =
+    document.body.getAttribute("dir") == "ltr" ? "\u25B6" : "\u25C0";
+
   // The "autofocus" attribute doesn't focus the form element
   // immediately when the element is first drawn, so the
   // attribute is also used for styling when the page first loads.
   searchText = document.getElementById("searchText");
   searchText.addEventListener("blur", function searchText_onBlur() {
     searchText.removeEventListener("blur", searchText_onBlur);
     searchText.removeAttribute("autofocus");
   });
--- a/browser/base/content/abouthome/aboutHome.xhtml
+++ b/browser/base/content/abouthome/aboutHome.xhtml
@@ -39,17 +39,17 @@
     <div id="topSection">
       <div id="brandLogo"></div>
 
       <div id="searchIconAndTextContainer">
         <div id="searchIcon"/>
         <input type="text" name="q" value="" id="searchText" maxlength="256"
                aria-label="&contentSearchInput.label;" autofocus="autofocus"
                dir="auto"/>
-        <input id="searchSubmit" type="button" value="&#x25b6;" onclick="onSearchSubmit(event)"
+        <input id="searchSubmit" type="button" onclick="onSearchSubmit(event)"
                title="&contentSearchSubmit.tooltip;"/>
       </div>
 
       <div id="snippetContainer">
         <div id="defaultSnippets" hidden="true">
           <span id="defaultSnippet1">&abouthome.defaultSnippet1.v1;</span>
           <span id="defaultSnippet2">&abouthome.defaultSnippet2.v1;</span>
         </div>
--- a/browser/base/content/browser.css
+++ b/browser/base/content/browser.css
@@ -772,23 +772,16 @@ html|*#fullscreen-exit-button {
 #addon-progress-notification {
   -moz-binding: url("chrome://browser/content/urlbarBindings.xml#addon-progress-notification");
 }
 
 #click-to-play-plugins-notification {
   -moz-binding: url("chrome://browser/content/urlbarBindings.xml#click-to-play-plugins-notification");
 }
 
-#login-fill-notification {
-  -moz-binding: url("chrome://browser/content/urlbarBindings.xml#login-fill-notification");
-}
-
-.login-fill-item {
-  -moz-binding: url("chrome://passwordmgr/content/login.xml#login");
-}
 
 .plugin-popupnotification-centeritem {
   -moz-binding: url("chrome://browser/content/urlbarBindings.xml#plugin-popupnotification-center-item");
 }
 
 browser[tabmodalPromptShowing] {
   -moz-user-focus: none !important;
 }
@@ -1180,20 +1173,16 @@ toolbarpaletteitem[place="palette"][hidd
 }
 
 /* Combined context-menu items */
 #context-navigation > .menuitem-iconic > .menu-iconic-text,
 #context-navigation > .menuitem-iconic > .menu-accel-container {
   display: none;
 }
 
-#login-fill-doorhanger:not([inDetailView]) > #login-fill-clickcapturer {
-  pointer-events: none;
-}
-
 .popup-notification-invalid-input {
   box-shadow: 0 0 1.5px 1px red;
 }
 
 .popup-notification-invalid-input[focused] {
   box-shadow: 0 0 2px 2px rgba(255,0,0,0.4);
 }
 
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -6847,17 +6847,17 @@ var gIdentityHandler = {
     if (sharing)
       this._identityBox.setAttribute("sharing", sharing);
     else
       this._identityBox.removeAttribute("sharing");
 
     this._sharingState = tab._sharingState;
 
     if (this._identityPopup.state == "open") {
-      this.updateSitePermissions();
+      this._handleHeightChange(() => this.updateSitePermissions());
     }
   },
 
   /**
    * Attempt to provide proper IDN treatment for host names
    */
   getEffectiveHost: function() {
     if (!this._IDNService)
@@ -7359,16 +7359,30 @@ var gIdentityHandler = {
     for (let permission of permissions) {
       let item = this._createPermissionItem(permission);
       this._permissionList.appendChild(item);
     }
 
     this.updatePermissionHint();
   },
 
+  _handleHeightChange: function(aFunction, aWillShowReloadHint) {
+    let heightBefore = getComputedStyle(this._permissionList).height;
+    aFunction();
+    let heightAfter = getComputedStyle(this._permissionList).height;
+    // Showing the reload hint increases the height, we need to account for it.
+    if (aWillShowReloadHint) {
+      heightAfter = parseInt(heightAfter) +
+                    parseInt(getComputedStyle(this._permissionList.nextSibling).height);
+    }
+    let heightChange = parseInt(heightAfter) - parseInt(heightBefore);
+    if (heightChange)
+      this._identityPopupMultiView.setHeightToFit(heightChange);
+  },
+
   _createPermissionItem: function (aPermission) {
     let container = document.createElement("hbox");
     container.setAttribute("class", "identity-popup-permission-item");
     container.setAttribute("align", "center");
 
     let img = document.createElement("image");
     let classes = "identity-popup-permission-icon " + aPermission.id + "-icon";
     if (aPermission.state == SitePermissions.BLOCK)
@@ -7388,17 +7402,18 @@ var gIdentityHandler = {
     stateLabel.textContent = SitePermissions.getStateLabel(
       aPermission.id, aPermission.state, aPermission.inUse || false);
 
     let button = document.createElement("button");
     button.setAttribute("class", "identity-popup-permission-remove-button");
     let tooltiptext = gNavigatorBundle.getString("permissions.remove.tooltip");
     button.setAttribute("tooltiptext", tooltiptext);
     button.addEventListener("command", () => {
-      this._permissionList.removeChild(container);
+      this._handleHeightChange(() =>
+        this._permissionList.removeChild(container), !this._permissionJustRemoved);
       if (aPermission.inUse &&
           ["camera", "microphone", "screen"].includes(aPermission.id)) {
         let windowId = this._sharingState.windowId;
         if (aPermission.id == "screen") {
           windowId = "screen:" + windowId;
         } else {
           // If we set persistent permissions or the sharing has
           // started due to existing persistent permissions, we need
--- a/browser/base/content/browser.xul
+++ b/browser/base/content/browser.xul
@@ -713,18 +713,16 @@
                   <image id="default-notification-icon" class="notification-anchor-icon" role="button"
                          tooltiptext="&urlbar.defaultNotificationAnchor.tooltip;"/>
                   <image id="geo-notification-icon" class="notification-anchor-icon geo-icon" role="button"
                          tooltiptext="&urlbar.geolocationNotificationAnchor.tooltip;"/>
                   <image id="addons-notification-icon" class="notification-anchor-icon install-icon" role="button"
                          tooltiptext="&urlbar.addonsNotificationAnchor.tooltip;"/>
                   <image id="indexedDB-notification-icon" class="notification-anchor-icon indexedDB-icon" role="button"
                          tooltiptext="&urlbar.indexedDBNotificationAnchor.tooltip;"/>
-                  <image id="login-fill-notification-icon" class="notification-anchor-icon login-icon" role="button"
-                         tooltiptext="&urlbar.loginFillNotificationAnchor.tooltip;"/>
                   <image id="password-notification-icon" class="notification-anchor-icon login-icon" role="button"
                          tooltiptext="&urlbar.passwordNotificationAnchor.tooltip;"/>
                   <image id="plugins-notification-icon" class="notification-anchor-icon plugin-icon" role="button"
                          tooltiptext="&urlbar.pluginsNotificationAnchor.tooltip;"/>
                   <image id="web-notifications-notification-icon" class="notification-anchor-icon desktop-notification-icon" role="button"
                          tooltiptext="&urlbar.webNotificationAnchor.tooltip;"/>
                   <image id="webRTC-shareDevices-notification-icon" class="notification-anchor-icon camera-icon" role="button"
                          tooltiptext="&urlbar.webRTCShareDevicesNotificationAnchor.tooltip;"/>
--- a/browser/base/content/newtab/newTab.xhtml
+++ b/browser/base/content/newtab/newTab.xhtml
@@ -66,17 +66,17 @@
       </div>
     </div>
 
     <div id="newtab-search-container">
       <div id="newtab-search-form">
         <div id="newtab-search-icon"/>
         <input type="text" name="q" value="" id="newtab-search-text"
              aria-label="&contentSearchInput.label;" maxlength="256" dir="auto"/>
-        <input id="newtab-search-submit" type="button" value="&#x25b6;"
+        <input id="newtab-search-submit" type="button"
              title="&contentSearchSubmit.tooltip;"/>
       </div>
     </div>
 
     <div id="newtab-horizontal-margin">
       <div class="newtab-side-margin"/>
       <div id="newtab-grid">
       </div>
--- a/browser/base/content/newtab/page.js
+++ b/browser/base/content/newtab/page.js
@@ -109,16 +109,21 @@ var gPage = {
    * is/gets enabled.
    */
   _init: function Page_init() {
     if (this._initialized)
       return;
 
     this._initialized = true;
 
+    // Set submit button label for when CSS background are disabled (e.g.
+    // high contrast mode).
+    document.getElementById("newtab-search-submit").value =
+      document.body.getAttribute("dir") == "ltr" ? "\u25B6" : "\u25C0";
+
     // Initialize search.
     gSearch.init();
 
     if (document.hidden) {
       addEventListener("visibilitychange", this);
     } else {
       setTimeout(_ => this.onPageFirstVisible());
     }
--- a/browser/base/content/popup-notifications.inc
+++ b/browser/base/content/popup-notifications.inc
@@ -47,32 +47,16 @@
     <popupnotification id="password-notification" hidden="true">
       <popupnotificationcontent orient="vertical">
         <textbox id="password-notification-username"/>
         <textbox id="password-notification-password" type="password" show-content=""/>
         <checkbox id="password-notification-visibilityToggle" hidden="true"/>
       </popupnotificationcontent>
     </popupnotification>
 
-    <stack id="login-fill-doorhanger" hidden="true">
-      <vbox id="login-fill-mainview">
-        <description id="login-fill-testing"
-                     value="Thanks for testing the login fill doorhanger!"/>
-        <textbox id="login-fill-filter"/>
-        <richlistbox id="login-fill-list"/>
-      </vbox>
-      <vbox id="login-fill-clickcapturer"/>
-      <vbox id="login-fill-details">
-        <textbox id="login-fill-username" readonly="true"/>
-        <textbox id="login-fill-password" type="password" disabled="true"/>
-        <hbox>
-          <button id="login-fill-use" label="Use in form"/>
-        </hbox>
-      </vbox>
-    </stack>
 
     <popupnotification id="addon-progress-notification" hidden="true">
       <popupnotificationcontent orient="vertical">
         <progressmeter id="addon-progress-notification-progressmeter"/>
         <label id="addon-progress-notification-progresstext" crop="end"/>
       </popupnotificationcontent>
       <button id="addon-progress-cancel"
               oncommand="this.parentNode.cancel();"/>
--- a/browser/base/content/tabbrowser.xml
+++ b/browser/base/content/tabbrowser.xml
@@ -848,44 +848,60 @@
                 return this;
               throw Components.results.NS_NOINTERFACE;
             }
           });
         ]]>
         </body>
       </method>
 
+      <field name="serializationHelper">
+        Cc["@mozilla.org/network/serialization-helper;1"]
+          .getService(Ci.nsISerializationHelper);
+      </field>
+
+      <field name="mIconLoadingPrincipal">
+        null
+      </field>
+
       <method name="setIcon">
         <parameter name="aTab"/>
         <parameter name="aURI"/>
         <parameter name="aLoadingPrincipal"/>
         <body>
           <![CDATA[
             let browser = this.getBrowserForTab(aTab);
             browser.mIconURL = aURI instanceof Ci.nsIURI ? aURI.spec : aURI;
+            let loadingPrincipal = aLoadingPrincipal
+              ? aLoadingPrincipal
+              : Services.scriptSecurityManager.getSystemPrincipal();
 
             if (aURI) {
               if (!(aURI instanceof Ci.nsIURI)) {
                 aURI = makeURI(aURI);
               }
-              // We do not serialize the principal from within SessionStore.jsm,
-              // hence if aLoadingPrincipal is null we default to the
-              // systemPrincipal which will allow the favicon to load.
-              let loadingPrincipal = aLoadingPrincipal
-                ? aLoadingPrincipal
-                : Services.scriptSecurityManager.getSystemPrincipal();
               PlacesUIUtils.loadFavicon(browser, loadingPrincipal, aURI);
             }
 
             let sizedIconUrl = browser.mIconURL || "";
             if (sizedIconUrl != aTab.getAttribute("image")) {
-              if (sizedIconUrl)
+              if (sizedIconUrl) {
                 aTab.setAttribute("image", sizedIconUrl);
-              else
+                if (!browser.mIconLoadingPrincipal ||
+                    !browser.mIconLoadingPrincipal.equals(loadingPrincipal)) {
+                  aTab.setAttribute("iconLoadingPrincipal",
+                    this.serializationHelper.serializeToString(loadingPrincipal));
+                  browser.mIconLoadingPrincipal = loadingPrincipal;
+                }
+              }
+              else {
                 aTab.removeAttribute("image");
+                aTab.removeAttribute("iconLoadingPrincipal");
+                delete browser.mIconLoadingPrincipal;
+              }
               this._tabAttrModified(aTab, ["image"]);
             }
 
             this._callProgressListeners(browser, "onLinkIconAvailable", [browser.mIconURL]);
           ]]>
         </body>
       </method>
 
--- a/browser/base/content/test/general/browser.ini
+++ b/browser/base/content/test/general/browser.ini
@@ -251,16 +251,17 @@ skip-if = buildapp == 'mulet'
 [browser_bug676619.js]
 skip-if = buildapp == 'mulet' || os == "mac" # mac: Intermittent failures, bug 925225
 [browser_bug678392.js]
 skip-if = os == "mac" # Bug 1102331 - does focus things on the content window which break in e10s mode (still causes orange on Mac 10.10)
 [browser_bug710878.js]
 [browser_bug719271.js]
 [browser_bug724239.js]
 [browser_bug734076.js]
+skip-if = (os == 'linux' && e10s) # bug 1277750
 [browser_bug735471.js]
 [browser_bug749738.js]
 [browser_bug763468_perwindowpb.js]
 [browser_bug767836_perwindowpb.js]
 [browser_bug817947.js]
 [browser_bug822367.js]
 tags = mcb
 [browser_bug832435.js]
--- a/browser/base/content/test/general/browser_permissions.js
+++ b/browser/base/content/test/general/browser_permissions.js
@@ -32,17 +32,17 @@ function* closeIdentityPopup() {
 }
 
 add_task(function* testMainViewVisible() {
   let {gIdentityHandler} = gBrowser.ownerGlobal;
   let tab = gBrowser.selectedTab = gBrowser.addTab();
   yield promiseTabLoadEvent(tab, PERMISSIONS_PAGE);
 
   let permissionsList = document.getElementById("identity-popup-permission-list");
-  let emptyLabel = permissionsList.nextSibling;
+  let emptyLabel = permissionsList.nextSibling.nextSibling;
 
   yield openIdentityPopup();
 
   ok(!is_hidden(emptyLabel), "List of permissions is empty");
 
   yield closeIdentityPopup();
 
   SitePermissions.set(gBrowser.currentURI, "camera", SitePermissions.ALLOW);
@@ -102,17 +102,17 @@ add_task(function* testIdentityIcon() {
 });
 
 add_task(function* testCancelPermission() {
   let {gIdentityHandler} = gBrowser.ownerGlobal;
   let tab = gBrowser.selectedTab = gBrowser.addTab();
   yield promiseTabLoadEvent(tab, PERMISSIONS_PAGE);
 
   let permissionsList = document.getElementById("identity-popup-permission-list");
-  let emptyLabel = permissionsList.nextSibling;
+  let emptyLabel = permissionsList.nextSibling.nextSibling;
 
   SitePermissions.set(gBrowser.currentURI, "geo", SitePermissions.ALLOW);
   SitePermissions.set(gBrowser.currentURI, "camera", SitePermissions.BLOCK);
 
   yield openIdentityPopup();
 
   ok(is_hidden(emptyLabel), "List of permissions is not empty");
 
--- a/browser/base/content/test/webrtc/browser_devices_get_user_media.js
+++ b/browser/base/content/test/webrtc/browser_devices_get_user_media.js
@@ -538,16 +538,17 @@ function test() {
       for (let test of gTests) {
         info(test.desc);
         yield test.run();
 
         // Cleanup before the next test
         yield expectNoObserverCalled();
       }
     }).then(finish, ex => {
+     Cu.reportError(ex);
      ok(false, "Unexpected Exception: " + ex);
      finish();
     });
   }, true);
   let rootDir = getRootDirectory(gTestPath);
   rootDir = rootDir.replace("chrome://mochitests/content/",
                             "https://example.com/");
   content.location = rootDir + "get_user_media.html";
--- a/browser/base/content/test/webrtc/browser_devices_get_user_media_anim.js
+++ b/browser/base/content/test/webrtc/browser_devices_get_user_media_anim.js
@@ -88,16 +88,17 @@ function test() {
     Task.spawn(function* () {
       yield SpecialPowers.pushPrefEnv({"set": [[PREF_PERMISSION_FAKE, true]]});
 
       for (let test of gTests) {
         info(test.desc);
         yield test.run();
       }
     }).then(finish, ex => {
+     Cu.reportError(ex);
      ok(false, "Unexpected Exception: " + ex);
      finish();
     });
   }, true);
   let rootDir = getRootDirectory(gTestPath);
   rootDir = rootDir.replace("chrome://mochitests/content/",
                             "https://example.com/");
   content.location = rootDir + "get_user_media.html";
--- a/browser/base/content/test/webrtc/browser_devices_get_user_media_in_frame.js
+++ b/browser/base/content/test/webrtc/browser_devices_get_user_media_in_frame.js
@@ -257,16 +257,17 @@ function test() {
       for (let test of gTests) {
         info(test.desc);
         yield test.run();
 
         // Cleanup before the next test
         yield expectNoObserverCalled();
       }
     }).then(finish, ex => {
+     Cu.reportError(ex);
      ok(false, "Unexpected Exception: " + ex);
      finish();
     });
   }, true);
   let rootDir = getRootDirectory(gTestPath);
   rootDir = rootDir.replace("chrome://mochitests/content/",
                             "https://example.com/");
   let url = rootDir + "get_user_media.html";
--- a/browser/base/content/test/webrtc/browser_devices_get_user_media_tear_off_tab.js
+++ b/browser/base/content/test/webrtc/browser_devices_get_user_media_tear_off_tab.js
@@ -90,16 +90,17 @@ function test() {
       for (let test of gTests) {
         info(test.desc);
         yield test.run();
 
         // Cleanup before the next test
         yield expectNoObserverCalled();
       }
     }).then(finish, ex => {
+     Cu.reportError(ex);
      ok(false, "Unexpected Exception: " + ex);
      finish();
     });
   }, true);
   let rootDir = getRootDirectory(gTestPath);
   rootDir = rootDir.replace("chrome://mochitests/content/",
                             "https://example.com/");
   content.location = rootDir + "get_user_media.html";
--- a/browser/base/content/urlbarBindings.xml
+++ b/browser/base/content/urlbarBindings.xml
@@ -2473,26 +2473,16 @@ file, You can obtain one at http://mozil
     </implementation>
     <handlers>
       <!-- The _accept method checks for .defaultPrevented so that if focus is in a button,
            enter activates the button and not this default action -->
       <handler event="keypress" keycode="VK_RETURN" group="system" action="this._accept(event);"/>
     </handlers>
   </binding>
 
-  <!-- This is the XBL notification definition for the login fill doorhanger,
-       which is empty because the actual panel is not implemented inside an XBL
-       binding, but made of elements added to the notification panel. This
-       allows accessing the full structure while the panel is hidden. -->
-  <binding id="login-fill-notification" extends="chrome://global/content/bindings/notification.xml#popup-notification">
-    <content>
-      <children/>
-    </content>
-  </binding>
-
   <binding id="splitmenu">
     <content>
       <xul:hbox anonid="menuitem" flex="1"
                 class="splitmenu-menuitem"
                 xbl:inherits="iconic,label,disabled,onclick=oncommand,_moz-menuactive=active"/>
       <xul:menu anonid="menu" class="splitmenu-menu"
                 xbl:inherits="disabled,_moz-menuactive=active"
                 oncommand="event.stopPropagation();">
--- a/browser/components/controlcenter/content/panel.inc.xul
+++ b/browser/components/controlcenter/content/panel.inc.xul
@@ -11,17 +11,17 @@
 
   <broadcasterset>
     <broadcaster id="identity-popup-mcb-learn-more" class="text-link plain" value="&identity.learnMore;"/>
     <broadcaster id="identity-popup-insecure-login-forms-learn-more" class="text-link plain" value="&identity.learnMore;"/>
   </broadcasterset>
 
   <panelmultiview id="identity-popup-multiView"
                   mainViewId="identity-popup-mainView">
-    <panelview id="identity-popup-mainView">
+    <panelview id="identity-popup-mainView" flex="1">
 
       <!-- Security Section -->
       <hbox id="identity-popup-security" class="identity-popup-section">
         <vbox id="identity-popup-security-content" flex="1">
           <label class="plain">
             <label class="identity-popup-headline host"></label>
             <label class="identity-popup-headline hostless" crop="end"/>
           </label>
@@ -86,18 +86,18 @@
 
       <!-- Permissions Section -->
       <hbox class="identity-popup-section">
         <vbox id="identity-popup-permissions-content" flex="1">
           <label id="identity-popup-permissions-headline"
                  class="identity-popup-headline"
                  value="&identity.permissions;"/>
           <vbox id="identity-popup-permission-list"/>
+          <description id="identity-popup-permission-reload-hint">&identity.permissionsReloadHint;</description>
           <description id="identity-popup-permission-empty-hint">&identity.permissionsEmpty;</description>
-          <description id="identity-popup-permission-reload-hint">&identity.permissionsReloadHint;</description>
         </vbox>
       </hbox>
     </panelview>
 
     <!-- Security SubView -->
     <panelview id="identity-popup-securityView" flex="1">
       <vbox id="identity-popup-securityView-header">
         <label class="plain">
--- a/browser/components/customizableui/content/panelUI.xml
+++ b/browser/components/customizableui/content/panelUI.xml
@@ -333,17 +333,17 @@
               });
 
               break;
             case "popupshown":
               this._setMaxHeight();
               break;
             case "popuphidden":
               this.removeAttribute("panelopen");
-              this._mainView.style.removeProperty("max-height");
+              this._mainView.style.removeProperty("height");
               this.showMainView();
               this._mainViewObserver.disconnect();
               break;
           }
         ]]></body>
       </method>
 
       <method name="_shouldSetPosition">
@@ -361,17 +361,17 @@
       <method name="_setMaxHeight">
         <body><![CDATA[
           if (!this._shouldSetHeight())
             return;
 
           // Ignore the mutation that'll fire when we set the height of
           // the main view.
           this.ignoreMutations = true;
-          this._mainView.style.maxHeight =
+          this._mainView.style.height =
             this.getBoundingClientRect().height + "px";
           this.ignoreMutations = false;
         ]]></body>
       </method>
       <method name="_adjustContainerHeight">
         <body><![CDATA[
           if (!this.ignoreMutations && !this.showingSubView && !this._transitioning) {
             let height;
@@ -411,26 +411,32 @@
           if (this._shouldSetHeight()) {
             this._adjustContainerHeight();
           }
         ]]></body>
       </method>
 
       <!-- Call this when the height of one of your views (the main view or a
            subview) changes and you want the heights of the multiview and panel
-           to be the same as the view's height. -->
+           to be the same as the view's height.
+           If the caller can give a hint of the expected height change with the
+           optional aExpectedChange parameter, it prevents flicker. -->
       <method name="setHeightToFit">
+        <parameter name="aExpectedChange"/>
         <body><![CDATA[
           // Set the max-height to zero, wait until the height is actually
           // updated, and then remove it.  If it's not removed, weird things can
           // happen, like widgets in the panel won't respond to clicks even
           // though they're visible.
           let count = 5;
           let height = getComputedStyle(this).height;
-          this.style.maxHeight = "0";
+          if (aExpectedChange)
+            this.style.maxHeight = (parseInt(height) + aExpectedChange) + "px";
+          else
+            this.style.maxHeight = "0";
           let interval = setInterval(() => {
             if (height != getComputedStyle(this).height || --count == 0) {
               clearInterval(interval);
               this.style.removeProperty("max-height");
             }
           }, 0);
         ]]></body>
       </method>
--- a/browser/components/extensions/test/browser/browser.ini
+++ b/browser/components/extensions/test/browser/browser.ini
@@ -8,16 +8,17 @@ support-files =
   context_tabs_onUpdated_iframe.html
   file_popup_api_injection_a.html
   file_popup_api_injection_b.html
   file_iframe_document.html
   file_iframe_document.sjs
   file_bypass_cache.sjs
   file_language_fr_en.html
   file_language_ja.html
+  file_language_tlh.html
   file_dummy.html
   searchSuggestionEngine.xml
   searchSuggestionEngine.sjs
 tags = webextensions
 
 
 [browser_ext_browserAction_context.js]
 [browser_ext_browserAction_disabled.js]
--- a/browser/components/extensions/test/browser/browser_ext_tabs_detectLanguage.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_detectLanguage.js
@@ -23,16 +23,23 @@ add_task(function* testDetectLanguage() 
       }).then(() => {
         return loadTab(`http://example.co.jp/${BASE_PATH}/file_language_fr_en.html`);
       }).then(tab => {
         return browser.tabs.detectLanguage(tab.id).then(lang => {
           browser.test.assertEq("fr", lang, "French/English document should be detected as primarily French");
           return browser.tabs.remove(tab.id);
         });
       }).then(() => {
+        return loadTab(`http://example.co.jp/${BASE_PATH}/file_language_tlh.html`);
+      }).then(tab => {
+        return browser.tabs.detectLanguage(tab.id).then(lang => {
+          browser.test.assertEq("und", lang, "Klingon document should not be detected, should return 'und'");
+          return browser.tabs.remove(tab.id);
+        });
+      }).then(() => {
         browser.test.notifyPass("detectLanguage");
       }).catch(e => {
         browser.test.fail(`Error: ${e} :: ${e.stack}`);
         browser.test.notifyFail("detectLanguage");
       });
     },
   });
 
--- a/browser/components/extensions/test/browser/browser_ext_tabs_onUpdated.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_onUpdated.js
@@ -25,17 +25,21 @@ add_task(function* () {
       let expectedSequence = [
         {status: "loading"},
         {status: "loading", url: pageURL},
         {status: "complete"},
       ];
       let collectedSequence = [];
 
       browser.tabs.onUpdated.addListener(function(tabId, updatedInfo) {
-        collectedSequence.push(updatedInfo);
+        // onUpdated also fires with updatedInfo.faviconUrl, so explicitly
+        // check for updatedInfo.status before recording the event.
+        if ("status" in updatedInfo) {
+          collectedSequence.push(updatedInfo);
+        }
       });
 
       browser.runtime.onMessage.addListener(function() {
         if (collectedSequence.length !== expectedSequence.length) {
           browser.test.assertEq(
             JSON.stringify(expectedSequence),
             JSON.stringify(collectedSequence),
             "got unexpected number of updateInfo data"
new file mode 100644
--- /dev/null
+++ b/browser/components/extensions/test/browser/file_language_tlh.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html lang="tlh">
+<head>
+  <meta charset="UTF-8">
+  <title></title>
+</head>
+<body>
+  tlhIngan maH!
+  Hab SoSlI' Quch!
+  Heghlu'meH QaQ jajvam
+</body>
+</html>
--- a/browser/components/nsBrowserGlue.js
+++ b/browser/components/nsBrowserGlue.js
@@ -66,16 +66,18 @@ XPCOMUtils.defineLazyServiceGetter(this,
   ["WebChannel", "resource://gre/modules/WebChannel.jsm"],
   ["WindowsRegistry", "resource://gre/modules/WindowsRegistry.jsm"],
   ["webrtcUI", "resource:///modules/webrtcUI.jsm"],
 ].forEach(([name, resource]) => XPCOMUtils.defineLazyModuleGetter(this, name, resource));
 
 if (AppConstants.MOZ_CRASHREPORTER) {
   XPCOMUtils.defineLazyModuleGetter(this, "PluginCrashReporter",
                                     "resource:///modules/ContentCrashHandlers.jsm");
+  XPCOMUtils.defineLazyModuleGetter(this, "UnsubmittedCrashHandler",
+                                    "resource:///modules/ContentCrashHandlers.jsm");
   XPCOMUtils.defineLazyModuleGetter(this, "CrashSubmit",
                                     "resource://gre/modules/CrashSubmit.jsm");
 }
 
 XPCOMUtils.defineLazyGetter(this, "gBrandBundle", function() {
   return Services.strings.createBundle('chrome://branding/locale/brand.properties');
 });
 
@@ -709,16 +711,17 @@ BrowserGlue.prototype = {
         iconURL: "resource:///chrome/browser/content/browser/defaultthemes/devedition.icon.png",
         author: vendorShortName,
       });
     }
 
     TabCrashHandler.init();
     if (AppConstants.MOZ_CRASHREPORTER) {
       PluginCrashReporter.init();
+      UnsubmittedCrashHandler.init();
     }
 
     Services.obs.notifyObservers(null, "browser-ui-startup-complete", "");
   },
 
   _checkForOldBuildUpdates: function () {
     // check for update if our build is old
     if (AppConstants.MOZ_UPDATER &&
@@ -739,74 +742,16 @@ BrowserGlue.prototype = {
       let acceptableAge = Services.prefs.getIntPref("app.update.checkInstallTime.days") * millisecondsIn24Hours;
 
       if (buildDate + acceptableAge < today) {
         Cc["@mozilla.org/updates/update-service;1"].getService(Ci.nsIApplicationUpdateService).checkForBackgroundUpdates();
       }
     }
   },
 
-  checkForPendingCrashReports: function() {
-    // We don't process crash reports older than 28 days, so don't bother submitting them
-    const PENDING_CRASH_REPORT_DAYS = 28;
-    if (AppConstants.MOZ_CRASHREPORTER) {
-      let dateLimit = new Date();
-      dateLimit.setDate(dateLimit.getDate() - PENDING_CRASH_REPORT_DAYS);
-      CrashSubmit.pendingIDsAsync(dateLimit).then(
-        function onSuccess(ids) {
-          let count = ids.length;
-          if (count) {
-            let win = RecentWindow.getMostRecentBrowserWindow();
-            if (!win) {
-              return;
-            }
-            let nb =  win.document.getElementById("global-notificationbox");
-            let notification = nb.getNotificationWithValue("pending-crash-reports");
-            if (notification) {
-              return;
-            }
-            let buttons = [
-              {
-                label: win.gNavigatorBundle.getString("pendingCrashReports.submitAll"),
-                callback: function() {
-                  ids.forEach(function(id) {
-                    CrashSubmit.submit(id, {extraExtraKeyVals: {"SubmittedFromInfobar": true}});
-                  });
-                }
-              },
-              {
-                label: win.gNavigatorBundle.getString("pendingCrashReports.ignoreAll"),
-                callback: function() {
-                  ids.forEach(function(id) {
-                    CrashSubmit.ignore(id);
-                  });
-                }
-              },
-              {
-                label: win.gNavigatorBundle.getString("pendingCrashReports.viewAll"),
-                callback: function() {
-                  win.openUILinkIn("about:crashes", "tab");
-                  return true;
-                }
-              }
-            ];
-            nb.appendNotification(PluralForm.get(count,
-                                                 win.gNavigatorBundle.getString("pendingCrashReports.label")).replace("#1", count),
-                                  "pending-crash-reports",
-                                  "chrome://browser/skin/tab-crashed.svg",
-                                  nb.PRIORITY_INFO_HIGH, buttons);
-          }
-        },
-        function onError(err) {
-          Cu.reportError(err);
-        }
-      );
-    }
-  },
-
   _onSafeModeRestart: function BG_onSafeModeRestart() {
     // prompt the user to confirm
     let strings = gBrowserBundle;
     let promptTitle = strings.GetStringFromName("safeModeRestartPromptTitle");
     let promptMessage = strings.GetStringFromName("safeModeRestartPromptMessage");
     let restartText = strings.GetStringFromName("safeModeRestartButton");
     let buttonFlags = (Services.prompt.BUTTON_POS_0 *
                        Services.prompt.BUTTON_TITLE_IS_STRING) +
@@ -1065,20 +1010,16 @@ BrowserGlue.prototype = {
         if (removalSuccessful && uninstalledValue == "True") {
           this._resetProfileNotification("uninstall");
         }
       }
     }
 
     this._checkForOldBuildUpdates();
 
-    if (!AppConstants.RELEASE_BUILD) {
-      this.checkForPendingCrashReports();
-    }
-
     CaptivePortalWatcher.init();
 
     AutoCompletePopup.init();
 
     this._firstWindowTelemetry(aWindow);
     this._firstWindowLoaded();
   },
 
--- a/browser/components/preferences/in-content/advanced.js
+++ b/browser/components/preferences/in-content/advanced.js
@@ -55,20 +55,17 @@ var gAdvancedPane = {
     setEventListener("layers.acceleration.disabled", "change",
                      gAdvancedPane.updateHardwareAcceleration);
     setEventListener("advancedPrefs", "select",
                      gAdvancedPane.tabSelectionChanged);
     if (AppConstants.MOZ_TELEMETRY_REPORTING) {
       setEventListener("submitHealthReportBox", "command",
                        gAdvancedPane.updateSubmitHealthReport);
     }
-    if (AppConstants.MOZ_CRASHREPORTER) {
-      setEventListener("submitCrashesBox", "command",
-                       gAdvancedPane.updateSubmitCrashes);
-    }
+
     setEventListener("connectionSettings", "command",
                      gAdvancedPane.showConnections);
     setEventListener("clearCacheButton", "command",
                      gAdvancedPane.clearCache);
     setEventListener("clearOfflineAppCacheButton", "command",
                      gAdvancedPane.clearOfflineAppCache);
     setEventListener("offlineNotifyExceptions", "command",
                      gAdvancedPane.showOfflineExceptions);
@@ -238,38 +235,16 @@ var gAdvancedPane = {
 
   /**
    *
    */
   initSubmitCrashes: function ()
   {
     this._setupLearnMoreLink("toolkit.crashreporter.infoURL",
                              "crashReporterLearnMore");
-
-    var checkbox = document.getElementById("submitCrashesBox");
-    try {
-      var cr = Components.classes["@mozilla.org/toolkit/crash-reporter;1"].
-               getService(Components.interfaces.nsICrashReporter);
-      checkbox.checked = cr.submitReports;
-    } catch (e) {
-      checkbox.style.display = "none";
-    }
-  },
-
-  /**
-   *
-   */
-  updateSubmitCrashes: function ()
-  {
-    var checkbox = document.getElementById("submitCrashesBox");
-    try {
-      var cr = Components.classes["@mozilla.org/toolkit/crash-reporter;1"].
-               getService(Components.interfaces.nsICrashReporter);
-      cr.submitReports = checkbox.checked;
-    } catch (e) { }
   },
 
   /**
    * The preference/checkbox is configured in XUL.
    *
    * In all cases, set up the Learn More link sanely.
    */
   initTelemetry: function ()
@@ -757,19 +732,17 @@ var gAdvancedPane = {
    *                              requests one
    */
 
   /**
    * Displays the user's certificates and associated options.
    */
   showCertificates: function ()
   {
-    openDialog("chrome://pippki/content/certManager.xul",
-               "mozilla:certmanager",
-               "modal=yes", null);
+    gSubDialog.open("chrome://pippki/content/certManager.xul");
   },
 
   /**
    * Displays a dialog from which the user can manage his security devices.
    */
   showSecurityDevices: function ()
   {
     gSubDialog.open("chrome://pippki/content/device_manager.xul");
--- a/browser/components/preferences/in-content/advanced.xul
+++ b/browser/components/preferences/in-content/advanced.xul
@@ -49,16 +49,23 @@
               type="int"/>
 
 #ifdef MOZ_TELEMETRY_REPORTING
   <preference id="toolkit.telemetry.enabled"
               name="toolkit.telemetry.enabled"
               type="bool"/>
 #endif
 
+  <!-- Data Choices tab -->
+#ifdef MOZ_CRASHREPORTER
+  <preference id="browser.crashReports.unsubmittedCheck.autoSubmit"
+              name="browser.crashReports.unsubmittedCheck.autoSubmit"
+              type="bool"/>
+#endif
+
   <!-- Network tab -->
   <preference id="browser.cache.disk.capacity"
               name="browser.cache.disk.capacity"
               type="int"/>
   <preference id="browser.offline-apps.notify"
               name="browser.offline-apps.notify"
               type="bool"/>
 
@@ -224,21 +231,23 @@
             </groupbox>
           </hbox>
         </vbox>
       </groupbox>
 #endif
 #ifdef MOZ_CRASHREPORTER
       <groupbox>
         <caption>
-          <checkbox id="submitCrashesBox" label="&enableCrashReporter.label;"
-                    accesskey="&enableCrashReporter.accesskey;"/>
+          <checkbox id="automaticallySubmitCrashesBox"
+                    preference="browser.crashReports.unsubmittedCheck.autoSubmit"
+                    label="&alwaysSubmitCrashReports.label;"
+                    accesskey="&alwaysSubmitCrashReports.accesskey;"/>
         </caption>
         <hbox class="indent">
-          <label flex="1">&crashReporterDesc.label;</label>
+          <label flex="1">&crashReporterDesc2.label;</label>
           <spacer flex="10"/>
           <label id="crashReporterLearnMore"
                  class="text-link">&crashReporterLearnMore.label;</label>
         </hbox>
       </groupbox>
 #endif
     </tabpanel>
 #endif
--- a/browser/components/sessionstore/SessionHistory.jsm
+++ b/browser/components/sessionstore/SessionHistory.jsm
@@ -167,17 +167,17 @@ var SessionHistoryInternal = {
       let x = {}, y = {};
       shEntry.getScrollPosition(x, y);
       if (x.value != 0 || y.value != 0)
         entry.scroll = x.value + "," + y.value;
     }
 
     // Collect triggeringPrincipal data for the current history entry.
     try {
-      let triggeringPrincipal = this.serializeTriggeringPrincipal(shEntry);
+      let triggeringPrincipal = Utils.serializePrincipal(shEntry.triggeringPrincipal);
       if (triggeringPrincipal) {
         entry.triggeringPrincipal_b64 = triggeringPrincipal;
       }
     } catch (ex) {
       // Not catching anything specific here, just possible errors
       // from writeCompoundObject() and the like.
       debug("Failed serializing triggeringPrincipal data: " + ex);
     }
@@ -214,49 +214,16 @@ var SessionHistoryInternal = {
         entry.children = children;
       }
     }
 
     return entry;
   },
 
   /**
-   * Serialize triggeringPrincipal data contained in the given session history entry.
-   *
-   * @param shEntry
-   *        The session history entry.
-   * @return The base64 encoded triggeringPrincipal data.
-   */
-  serializeTriggeringPrincipal: function (shEntry) {
-    if (!shEntry.triggeringPrincipal) {
-      return null;
-    }
-
-    let binaryStream = Cc["@mozilla.org/binaryoutputstream;1"].
-                       createInstance(Ci.nsIObjectOutputStream);
-    let pipe = Cc["@mozilla.org/pipe;1"].createInstance(Ci.nsIPipe);
-    pipe.init(false, false, 0, 0xffffffff, null);
-    binaryStream.setOutputStream(pipe.outputStream);
-    binaryStream.writeCompoundObject(shEntry.triggeringPrincipal, Ci.nsIPrincipal, true);
-    binaryStream.close();
-
-    // Now we want to read the data from the pipe's input end and encode it.
-    let scriptableStream = Cc["@mozilla.org/binaryinputstream;1"].
-                           createInstance(Ci.nsIBinaryInputStream);
-    scriptableStream.setInputStream(pipe.inputStream);
-    let triggeringPrincipalBytes =
-      scriptableStream.readByteArray(scriptableStream.available());
-
-    // We can stop doing base64 encoding once our serialization into JSON
-    // is guaranteed to handle all chars in strings, including embedded
-    // nulls.
-    return btoa(String.fromCharCode.apply(null, triggeringPrincipalBytes));
-  },
-
-  /**
    * Restores session history data for a given docShell.
    *
    * @param docShell
    *        The docShell that owns the session history.
    * @param tabData
    *        The tabdata including all history entries.
    */
   restore: function (docShell, tabData) {
@@ -383,26 +350,17 @@ var SessionHistoryInternal = {
     // Bug 1286472. To remain backward compatible we still have to support that
     // field for a few cycles before we can remove it within Bug 1289785.
     if (entry.owner_b64) {
       entry.triggeringPricipal_b64 = entry.owner_b64;
       delete entry.owner_b64;
     }
 
     if (entry.triggeringPrincipal_b64) {
-      var triggeringPrincipalInput = Cc["@mozilla.org/io/string-input-stream;1"]
-                                       .createInstance(Ci.nsIStringInputStream);
-      var binaryData = atob(entry.triggeringPrincipal_b64);
-      triggeringPrincipalInput.setData(binaryData, binaryData.length);
-      var binaryStream = Cc["@mozilla.org/binaryinputstream;1"].
-                         createInstance(Ci.nsIObjectInputStream);
-      binaryStream.setInputStream(triggeringPrincipalInput);
-      try { // Catch possible deserialization exceptions
-        shEntry.triggeringPrincipal = binaryStream.readObject(true);
-      } catch (ex) { debug(ex); }
+      shEntry.triggeringPrincipal = Utils.deserializePrincipal(entry.triggeringPrincipal_b64);
     }
 
     if (entry.children && shEntry instanceof Ci.nsISHContainer) {
       for (var i = 0; i < entry.children.length; i++) {
         //XXXzpao Wallpaper patch for bug 514751
         if (!entry.children[i].url)
           continue;
 
--- a/browser/components/sessionstore/SessionStore.jsm
+++ b/browser/components/sessionstore/SessionStore.jsm
@@ -806,22 +806,20 @@ var SessionStoreInternal = {
             tab.crop = "center";
           }
         } else if (tab.hasAttribute("customizemode")) {
           win.gCustomizeMode.setTab(tab);
         }
 
         // Restore the tab icon.
         if ("image" in tabData) {
-          // Using null as the loadingPrincipal because serializing
-          // the principal would be overkill. Within SetIcon we
-          // default to the systemPrincipal if aLoadingPrincipal is
-          // null which will allow the favicon to load.
-          win.gBrowser.setIcon(tab, tabData.image, null);
-          TabStateCache.update(browser, {image: null});
+          // Use the serialized contentPrincipal with the new icon load.
+          let loadingPrincipal = Utils.deserializePrincipal(tabData.iconLoadingPrincipal);
+          win.gBrowser.setIcon(tab, tabData.image, loadingPrincipal);
+          TabStateCache.update(browser, { image: null, iconLoadingPrincipal: null });
         }
 
         let event = win.document.createEvent("Events");
         event.initEvent("SSTabRestoring", true, false);
         tab.dispatchEvent(event);
         break;
       case "SessionStore:restoreTabContentStarted":
         if (browser.__SS_restoreState == TAB_STATE_NEEDS_RESTORE) {
@@ -1770,16 +1768,17 @@ var SessionStoreInternal = {
     let tabTitle = this._replaceLoadingTitle(aTab.label, tabbrowser, aTab);
     let {permanentKey} = aTab.linkedBrowser;
 
     let tabData = {
       permanentKey,
       state: tabState,
       title: tabTitle,
       image: tabbrowser.getIcon(aTab),
+      iconLoadingPrincipal: Utils.serializePrincipal(aTab.linkedBrowser.contentPrincipal),
       pos: aTab._tPos,
       closedAt: Date.now()
     };
 
     let closedTabs = this._windows[aWindow.__SSi]._closedTabs;
 
     // Determine whether the tab contains any information worth saving. Note
     // that there might be pending state changes queued in the child that
@@ -3316,16 +3315,17 @@ var SessionStoreInternal = {
       formdata: tabData.formdata || null,
       disallow: tabData.disallow || null,
       pageStyle: tabData.pageStyle || null,
 
       // This information is only needed until the tab has finished restoring.
       // When that's done it will be removed from the cache and we always
       // collect it in TabState._collectBaseTabData().
       image: tabData.image || "",
+      iconLoadingPrincipal: tabData.iconLoadingPrincipal || null,
       userTypedValue: tabData.userTypedValue || "",
       userTypedClear: tabData.userTypedClear || 0
     });
 
     browser.messageManager.sendAsyncMessage("SessionStore:restoreHistory",
                                             {tabData: tabData, epoch: epoch, loadArguments});
 
     // Restore tab attributes.
--- a/browser/components/sessionstore/TabAttributes.jsm
+++ b/browser/components/sessionstore/TabAttributes.jsm
@@ -7,17 +7,19 @@
 this.EXPORTED_SYMBOLS = ["TabAttributes"];
 
 // We never want to directly read or write these attributes.
 // 'image' should not be accessed directly but handled by using the
 //         gBrowser.getIcon()/setIcon() methods.
 // 'muted' should not be accessed directly but handled by using the
 //         tab.linkedBrowser.audioMuted/toggleMuteAudio methods.
 // 'pending' is used internal by sessionstore and managed accordingly.
-const ATTRIBUTES_TO_SKIP = new Set(["image", "muted", "pending"]);
+// 'iconLoadingPrincipal' is same as 'image' that it should be handled by
+//                        using the gBrowser.getIcon()/setIcon() methods.
+const ATTRIBUTES_TO_SKIP = new Set(["image", "muted", "pending", "iconLoadingPrincipal"]);
 
 // A set of tab attributes to persist. We will read a given list of tab
 // attributes when collecting tab data and will re-set those attributes when
 // the given tab data is restored to a new tab.
 this.TabAttributes = Object.freeze({
   persist: function (name) {
     return TabAttributesInternal.persist(name);
   },
--- a/browser/components/sessionstore/TabState.jsm
+++ b/browser/components/sessionstore/TabState.jsm
@@ -11,16 +11,18 @@ const Cu = Components.utils;
 Cu.import("resource://gre/modules/XPCOMUtils.jsm", this);
 
 XPCOMUtils.defineLazyModuleGetter(this, "PrivacyFilter",
   "resource:///modules/sessionstore/PrivacyFilter.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "TabStateCache",
   "resource:///modules/sessionstore/TabStateCache.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "TabAttributes",
   "resource:///modules/sessionstore/TabAttributes.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "Utils",
+  "resource:///modules/sessionstore/Utils.jsm");
 
 /**
  * Module that contains tab state collection methods.
  */
 this.TabState = Object.freeze({
   update: function (browser, data) {
     TabStateInternal.update(browser, data);
   },
@@ -117,16 +119,21 @@ var TabStateInternal = {
     // be read from the tab/browser every time we collect data.
 
     // Store the tab icon.
     if (!("image" in tabData)) {
       let tabbrowser = tab.ownerGlobal.gBrowser;
       tabData.image = tabbrowser.getIcon(tab);
     }
 
+    // Store the serialized contentPrincipal of this tab to use for the icon.
+    if (!("iconLoadingPrincipal" in tabData)) {
+      tabData.iconLoadingPrincipal = Utils.serializePrincipal(browser.contentPrincipal);
+    }
+
     // If there is a userTypedValue set, then either the user has typed something
     // in the URL bar, or a new tab was opened with a URI to load.
     // If so, we also track whether we were still in the process of loading something.
     if (!("userTypedValue" in tabData) && browser.userTypedValue) {
       tabData.userTypedValue = browser.userTypedValue;
       // We always used to keep track of the loading state as an integer, where
       // '0' indicated the user had typed since the last load (or no load was
       // ongoing), and any positive value indicated we had started a load since
--- a/browser/components/sessionstore/Utils.jsm
+++ b/browser/components/sessionstore/Utils.jsm
@@ -6,16 +6,21 @@
 
 this.EXPORTED_SYMBOLS = ["Utils"];
 
 const Cu = Components.utils;
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 
 Cu.import("resource://gre/modules/Services.jsm", this);
+Cu.import("resource://gre/modules/XPCOMUtils.jsm", this);
+
+XPCOMUtils.defineLazyServiceGetter(this, "serializationHelper",
+                                   "@mozilla.org/network/serialization-helper;1",
+                                   "nsISerializationHelper");
 
 this.Utils = Object.freeze({
   makeURI: function (url) {
     return Services.io.newURI(url, null, null);
   },
 
   makeInputStream: function (aString) {
     let stream = Cc["@mozilla.org/io/string-input-stream;1"].
@@ -55,10 +60,40 @@ this.Utils = Object.freeze({
   shallowCopy: function (obj) {
     let retval = {};
 
     for (let key of Object.keys(obj)) {
       retval[key] = obj[key];
     }
 
     return retval;
+  },
+
+  /**
+   * Serialize principal data.
+   *
+   * @param {nsIPrincipal} principal The principal to serialize.
+   * @return {String} The base64 encoded principal data.
+   */
+  serializePrincipal(principal) {
+    if (!principal)
+      return null;
+
+    return serializationHelper.serializeToString(principal);
+  },
+
+  /**
+   * Deserialize a base64 encoded principal (serialized with
+   * Utils::serializePrincipal).
+   *
+   * @param {String} principal_b64 A base64 encoded serialized principal.
+   * @return {nsIPrincipal} A deserialized principal.
+   */
+  deserializePrincipal(principal_b64) {
+    if (!principal_b64)
+      return null;
+
+    let principal = serializationHelper.deserializeObject(principal_b64);
+    principal.QueryInterface(Ci.nsIPrincipal);
+
+    return principal;
   }
 });
--- a/browser/components/sessionstore/test/browser_attributes.js
+++ b/browser/components/sessionstore/test/browser_attributes.js
@@ -12,28 +12,31 @@ const PREF = "browser.sessionstore.resto
 add_task(function* test() {
   Services.prefs.setBoolPref(PREF, true)
   registerCleanupFunction(() => Services.prefs.clearUserPref(PREF));
 
   // Add a new tab with a nice icon.
   let tab = gBrowser.addTab("about:robots");
   yield promiseBrowserLoaded(tab.linkedBrowser);
 
-  // Check that the tab has an 'image' attribute.
+  // Check that the tab has 'image' and 'iconLoadingPrincipal' attributes.
   ok(tab.hasAttribute("image"), "tab.image exists");
+  ok(tab.hasAttribute("iconLoadingPrincipal"), "tab.iconLoadingPrincipal exists");
 
   tab.toggleMuteAudio();
   // Check that the tab has a 'muted' attribute.
   ok(tab.hasAttribute("muted"), "tab.muted exists");
 
   // Make sure we do not persist 'image' or 'muted' attributes.
   ss.persistTabAttribute("image");
   ss.persistTabAttribute("muted");
+  ss.persistTabAttribute("iconLoadingPrincipal");
   let {attributes} = JSON.parse(ss.getTabState(tab));
   ok(!("image" in attributes), "'image' attribute not saved");
+  ok(!("iconLoadingPrincipal" in attributes), "'iconLoadingPrincipal' attribute not saved");
   ok(!("muted" in attributes), "'muted' attribute not saved");
   ok(!("custom" in attributes), "'custom' attribute not saved");
 
   // Test persisting a custom attribute.
   tab.setAttribute("custom", "foobar");
   ss.persistTabAttribute("custom");
 
   ({attributes} = JSON.parse(ss.getTabState(tab)));
--- a/browser/components/sessionstore/test/browser_label_and_icon.js
+++ b/browser/components/sessionstore/test/browser_label_and_icon.js
@@ -1,13 +1,15 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
+const {classes: Cc, interfaces: Ci} = Components;
+
 /**
  * Make sure that tabs are restored on demand as otherwise the tab will start
  * loading immediately and we can't check its icon and label.
  */
 add_task(function setup() {
   Services.prefs.setBoolPref("browser.sessionstore.restore_on_demand", true);
 
   registerCleanupFunction(() => {
@@ -34,11 +36,18 @@ add_task(function test_label_and_icon() 
   tab = gBrowser.addTab("about:blank");
   ss.setTabState(tab, state);
   yield promiseTabRestoring(tab);
 
   // Check that label and icon are set for the restoring tab.
   ok(gBrowser.getIcon(tab).startsWith("data:image/png;"), "icon is set");
   is(tab.label, "Gort! Klaatu barada nikto!", "label is set");
 
+  let serhelper = Cc["@mozilla.org/network/serialization-helper;1"]
+                    .getService(Ci.nsISerializationHelper);
+  let serializedPrincipal = tab.getAttribute("iconLoadingPrincipal");
+  let iconLoadingPrincipal = serhelper.deserializeObject(serializedPrincipal)
+                                      .QueryInterface(Ci.nsIPrincipal);
+  is(iconLoadingPrincipal.origin, "about:robots", "correct loadingPrincipal used");
+
   // Cleanup.
   yield promiseRemoveTab(tab);
 });
--- a/browser/config/tooltool-manifests/win32/releng.manifest
+++ b/browser/config/tooltool-manifests/win32/releng.manifest
@@ -24,16 +24,16 @@
 {
 "size": 167175,
 "digest": "0b71a936edf5bd70cf274aaa5d7abc8f77fe8e7b5593a208f805cc9436fac646b9c4f0b43c2b10de63ff3da671497d35536077ecbc72dba7f8159a38b580f831",
 "algorithm": "sha512",
 "filename": "sccache.tar.bz2",
 "unpack": true
 },
 {
-"version": "Visual Studio 2015 Update 2 / SDK 10.0.10586.0/212",
-"size": 332442800,
-"digest": "995394a4a515c7cb0f8595f26f5395361a638870dd0bbfcc22193fe1d98a0c47126057d5999cc494f3f3eac5cb49160e79757c468f83ee5797298e286ef6252c",
+"version": "Visual Studio 2015 Update 3 14.0.25425.01 / SDK 10.0.14393.0",
+"size": 326656969,
+"digest": "babc414ffc0457d27f5a1ed24a8e4873afbe2f1c1a4075469a27c005e1babc3b2a788f643f825efedff95b79686664c67ec4340ed535487168a3482e68559bc7",
 "algorithm": "sha512",
-"filename": "vs2015u2.zip",
+"filename": "vs2015u3.zip",
 "unpack": true
 }
 ]
--- a/browser/config/tooltool-manifests/win64/releng.manifest
+++ b/browser/config/tooltool-manifests/win64/releng.manifest
@@ -25,16 +25,16 @@
 {
 "size": 167175,
 "digest": "0b71a936edf5bd70cf274aaa5d7abc8f77fe8e7b5593a208f805cc9436fac646b9c4f0b43c2b10de63ff3da671497d35536077ecbc72dba7f8159a38b580f831",
 "algorithm": "sha512",
 "filename": "sccache.tar.bz2",
 "unpack": true
 },
 {
-"version": "Visual Studio 2015 Update 2 / SDK 10.0.10586.0/212",
-"size": 332442800,
-"digest": "995394a4a515c7cb0f8595f26f5395361a638870dd0bbfcc22193fe1d98a0c47126057d5999cc494f3f3eac5cb49160e79757c468f83ee5797298e286ef6252c",
+"version": "Visual Studio 2015 Update 3 14.0.25425.01 / SDK 10.0.14393.0",
+"size": 326656969,
+"digest": "babc414ffc0457d27f5a1ed24a8e4873afbe2f1c1a4075469a27c005e1babc3b2a788f643f825efedff95b79686664c67ec4340ed535487168a3482e68559bc7",
 "algorithm": "sha512",
-"filename": "vs2015u2.zip",
+"filename": "vs2015u3.zip",
 "unpack": true
 }
 ]
--- a/browser/installer/package-manifest.in
+++ b/browser/installer/package-manifest.in
@@ -356,16 +356,18 @@
 @RESPATH@/components/BrowserElementParent.manifest
 @RESPATH@/components/BrowserElementParent.js
 @RESPATH@/components/BrowserElementProxy.manifest
 @RESPATH@/components/BrowserElementProxy.js
 @RESPATH@/components/FeedProcessor.manifest
 @RESPATH@/components/FeedProcessor.js
 @RESPATH@/components/PackagedAppUtils.js
 @RESPATH@/components/PackagedAppUtils.manifest
+@RESPATH@/components/WellKnownOpportunisticUtils.js
+@RESPATH@/components/WellKnownOpportunisticUtils.manifest
 #ifndef XP_MACOSX
 ; OSX uses native platform impl.  Windows, Linux, and Android uses fallback JS impl.
 @BINPATH@/components/nsDNSServiceDiscovery.manifest
 @BINPATH@/components/nsDNSServiceDiscovery.js
 #endif
 @RESPATH@/browser/components/BrowserFeeds.manifest
 @RESPATH@/browser/components/FeedConverter.js
 @RESPATH@/browser/components/FeedWriter.js
--- a/browser/installer/windows/nsis/installer.nsi
+++ b/browser/installer/windows/nsis/installer.nsi
@@ -420,22 +420,16 @@ Section "-Application" APP_IDX
     StrCpy $0 "Software\Clients\StartMenuInternet\$R9\InstallInfo"
     ${If} $AddDesktopSC == 1
     ${OrIf} $AddStartMenuSC == 1
     ${OrIf} $AddTaskbarSC == 1
       WriteRegDWORD HKCU "$0" "IconsVisible" 1
     ${Else}
       WriteRegDWORD HKCU "$0" "IconsVisible" 0
     ${EndIf}
-  ${If} ${AtLeastWin8}
-    ${RemoveDEHRegistration} ${DELEGATE_EXECUTE_HANDLER_ID} \
-                             $AppUserModelID \
-                             "FirefoxURL" \
-                             "FirefoxHTML"
-  ${EndIf}
   ${EndIf}
 
 !ifdef MOZ_MAINTENANCE_SERVICE
   ; If the maintenance service page was displayed then a value was already 
   ; explicitly selected for installing the maintenance service and 
   ; and so InstallMaintenanceService will already be 0 or 1.
   ; If the maintenance service page was not displayed then 
   ; InstallMaintenanceService will be equal to "".
--- a/browser/installer/windows/nsis/shared.nsh
+++ b/browser/installer/windows/nsis/shared.nsh
@@ -1,35 +1,13 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
-; The registration ID of the COM server which is used for choosing wether
-; to launch the Win8 metro browser or desktop browser.
-!define DELEGATE_EXECUTE_HANDLER_ID {5100FEC1-212B-4BF5-9BF8-3E650FD794A3}
-;
-; Defines for adjust token privs and for enumerating keys
-!ifndef TOKEN_QUERY
-  !define TOKEN_QUERY             0x0008
-!endif
-!ifndef TOKEN_ADJUST_PRIVILEGES
-  !define TOKEN_ADJUST_PRIVILEGES 0x0020
-!endif
-!ifndef SE_RESTORE_NAME
-  !define SE_RESTORE_NAME         SeRestorePrivilege
-!endif
-!ifndef SE_PRIVILEGE_ENABLED
-  !define SE_PRIVILEGE_ENABLED    0x00000002
-!endif
-!ifndef HKEY_USERS
-  !define HKEY_USERS              0x80000003
-!endif
-
 !macro PostUpdate
-
   ; PostUpdate is called from both session 0 and from the user session
   ; for service updates, make sure that we only register with the user session
   ; Otherwise ApplicationID::Set can fail intermittently with a file in use error.
   System::Call "kernel32::GetCurrentProcessId() i.r0"
   System::Call "kernel32::ProcessIdToSessionId(i $0, *i ${NSIS_MAX_STRLEN} r9)"
 
   ; Determine if we're the protected UserChoice default or not. If so fix the
   ; start menu tile.  In case there are 2 Firefox installations, we only do
@@ -186,24 +164,16 @@
       ; based on the above checks, so attempt to just run the EXE.
       ; In the worst case, in case there is some edge case with the
       ; IsAdmin check and the permissions check, the maintenance service
       ; will just fail to be attempted to be installed.
       nsExec::Exec "$\"$INSTDIR\maintenanceservice_installer.exe$\""
     ${EndIf}
   ${EndIf}
 !endif
-
-; Register the DEH
-${If} ${AtLeastWin8}
-  ${RemoveDEHRegistration} ${DELEGATE_EXECUTE_HANDLER_ID} \
-                           $AppUserModelID \
-                           "FirefoxURL" \
-                           "FirefoxHTML"
-${EndIf}
 !macroend
 !define PostUpdate "!insertmacro PostUpdate"
 
 !macro SetAsDefaultAppGlobal
   ${RemoveDeprecatedKeys} ; Does not use SHCTX
 
   SetShellVarContext all      ; Set SHCTX to all users (e.g. HKLM)
   ${SetHandlers} ; Uses SHCTX
@@ -826,178 +796,16 @@
   StrCpy $0 "Software\Microsoft\Windows\Shell\Associations\UrlAssociations\gopher"
   ReadRegStr $2 HKCU "$0\UserChoice" "Progid"
   ${If} "$2" == "FirefoxURL"
     DeleteRegKey HKCU "$0"
   ${EndIf}
 !macroend
 !define RemoveDeprecatedKeys "!insertmacro RemoveDeprecatedKeys"
 
-; Resets Win8+ specific toast keys Windows sets. We call this on a
-; fresh install and on uninstall.
-!macro ResetWin8PromptKeys KEY PREFIX
-  ${If} ${AtLeastWin8}
-    DeleteRegValue ${KEY} "${PREFIX}Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts" "FirefoxHTML_.htm"
-    DeleteRegValue ${KEY} "${PREFIX}Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts" "FirefoxHTML_.html"
-    DeleteRegValue ${KEY} "${PREFIX}Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts" "FirefoxHTML_.xht"
-    DeleteRegValue ${KEY} "${PREFIX}Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts" "FirefoxHTML_.xhtml"
-    DeleteRegValue ${KEY} "${PREFIX}Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts" "FirefoxHTML_.shtml"
-    DeleteRegValue ${KEY} "${PREFIX}Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts" "FirefoxURL_ftp"
-    DeleteRegValue ${KEY} "${PREFIX}Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts" "FirefoxURL_http"
-    DeleteRegValue ${KEY} "${PREFIX}Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts" "FirefoxURL_https"
-  ${EndIf}
-!macroend
-!define ResetWin8PromptKeys "!insertmacro ResetWin8PromptKeys"
-
-; Adds SE_RESTORE_NAME privs
-!macro AcquireSERestoreName
-  StrCpy $R1 0
-
-  System::Call "kernel32::GetCurrentProcess() i .R0"
-  System::Call "advapi32::OpenProcessToken(i R0, i ${TOKEN_QUERY}|${TOKEN_ADJUST_PRIVILEGES}, \
-                                          *i R1R1) i .R0"
-  ${If} $R0 != 0
-    System::Call "advapi32::LookupPrivilegeValue(t n, t '${SE_RESTORE_NAME}', *l .R2) i .R0"
-    ${If} $R0 != 0
-      System::Call "*(i 1, l R2, i ${SE_PRIVILEGE_ENABLED}) i .R0"
-      System::Call "advapi32::AdjustTokenPrivileges(i R1, i 0, i R0, i 0, i 0, i 0)"
-      System::Free $R0
-    ${EndIf}
-    System::Call "kernel32::CloseHandle(i R1)"
-  ${EndIf}
-!macroend
-!define AcquireSERestoreName "!insertmacro AcquireSERestoreName"
-!define un.AcquireSERestoreName "!insertmacro AcquireSERestoreName"
-
-; Mounts all user ntuser.dat files into the registry as a subkey of HKU
-!macro MountRegistryIntoHKU
-  ; $0 is used as an index for HKEY_USERS enumeration
-  StrCpy $0 0
-  ${Do}
-    EnumRegKey $1 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
-    ${If} $1 == ""
-      ${Break}
-    ${EndIf}
-    ReadRegStr $2 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath"
-    System::Call "advapi32::RegLoadKey(i ${HKEY_USERS}, t 'User-$0', t '$2\ntuser.dat')"
-    System::Call "advapi32::RegLoadKey(i ${HKEY_USERS}, t 'User-$0_Classes', t '$2\AppData\Local\Microsoft\Windows\UsrClass.dat')"
-    IntOp $0 $0 + 1
-  ${Loop}
-!macroend
-!define MountRegistryIntoHKU "!insertmacro MountRegistryIntoHKU"
-!define un.MountRegistryIntoHKU "!insertmacro MountRegistryIntoHKU"
-
-; Unmounts all user ntuser.dat files into the registry as a subkey of HKU
-!macro UnmountRegistryIntoHKU
-  ; $0 is used as an index for HKEY_USERS enumeration
-  StrCpy $0 0
-  ${Do}
-    EnumRegKey $1 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
-    ${If} $1 == ""
-      ${Break}
-    ${EndIf}
-    ReadRegStr $2 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath"
-    System::Call "advapi32::RegUnLoadKey(i ${HKEY_USERS}, t 'User-$0')"
-    System::Call "advapi32::RegUnLoadKey(i ${HKEY_USERS}, t 'User-$0_Classes')"
-    IntOp $0 $0 + 1
-  ${Loop}
-!macroend
-!define UnmountRegistryIntoHKU "!insertmacro UnmountRegistryIntoHKU"
-!define un.UnmountRegistryIntoHKU "!insertmacro UnmountRegistryIntoHKU"
-
-; Unconditionally removes the delegate execute handler registration used to
-; launch the metro browser and misc. metro related registry values.
-!macro RemoveDEHRegistration DELEGATE_EXECUTE_HANDLER_ID \
-                             APP_USER_MODEL_ID \
-                             PROTOCOL_ACTIVATION_ID \
-                             FILE_ACTIVATION_ID
-  ${AcquireSERestoreName}
-  ${MountRegistryIntoHKU}
-
-  ; $0 is used as an index for HKEY_USERS enumeration
-  StrCpy $0 0
-
-  ${Do}
-    EnumRegKey $1 HKU "" $0
-    ${If} $1 == ""
-      ${Break}
-    ${EndIf}
-
-    ClearErrors
-    ${WordFind} "$1" "_Classes" "E#" $3
-    ${Unless} ${Errors}
-      ; remove the app user model id root registration. We don't need this
-      ; here anymore, we just use it for tray registrationdown in widget,
-      ; which we read out of the mozilla keys.
-      ${If} "${APP_USER_MODEL_ID}" != ""
-        ; The removal of this key intermittently fails, so do the best we can in cleanup
-        DeleteRegValue HKU "$1\${APP_USER_MODEL_ID}\.exe\shell\open\command" "DelegateExecute"
-        DeleteRegKey HKU "$1\${APP_USER_MODEL_ID}\.exe\shell\open"
-        DeleteRegKey HKU "$1\${APP_USER_MODEL_ID}\.exe\shell"
-        DeleteRegKey HKU "$1\${APP_USER_MODEL_ID}\.exe"
-        DeleteRegKey HKU "$1\\${APP_USER_MODEL_ID}"
-      ${EndIf}
-      ;
-      ; Remove delegate execute handler clsid registration
-      DeleteRegKey HKU "$1\CLSID\${DELEGATE_EXECUTE_HANDLER_ID}"
-
-      ; Remove protocol and file delegate execute handler id assoc
-      DeleteRegValue HKU "$1\${PROTOCOL_ACTIVATION_ID}" "AppUserModelID"
-      DeleteRegValue HKU "$1\${FILE_ACTIVATION_ID}" "AppUserModelID"
-
-      ; Remove delegate execute application registry keys
-      DeleteRegKey HKU "$1\${PROTOCOL_ACTIVATION_ID}\Application"
-      DeleteRegKey HKU "$1\${FILE_ACTIVATION_ID}\Application"
-
-      ; Remove misc. shell open info
-      DeleteRegValue HKU "$1\${PROTOCOL_ACTIVATION_ID}\shell\open" "CommandId"
-      DeleteRegValue HKU "$1\${FILE_ACTIVATION_ID}\shell\open" "CommandId"
-      DeleteRegValue HKU "$1\${PROTOCOL_ACTIVATION_ID}\shell\open\command" "DelegateExecute"
-      DeleteRegValue HKU "$1\${FILE_ACTIVATION_ID}\shell\open\command" "DelegateExecute"
-
-      ; remove metro browser splash image data
-      DeleteRegKey HKU "$1\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\DefaultBrowser_NOPUBLISHERID\SplashScreen\DefaultBrowser_NOPUBLISHERID!${APP_USER_MODEL_ID}"
-    ${Else}
-      ; misc. Metro keys
-      DeleteRegKey HKU "$1\Software\Mozilla\Firefox\Metro"
-      DeleteRegValue HKU "$1\Software\Mozilla\Firefox" "CEHDump"
-      DeleteRegValue HKU "$1\Software\Mozilla\Firefox" "MetroD3DAvailable"
-      DeleteRegValue HKU "$1\Software\Mozilla\Firefox" "MetroLastAHE"
-      ${ResetWin8PromptKeys} "HKU" "$1\"
-    ${EndIf}
-    IntOp $0 $0 + 1
-  ${Loop}
-  ${UnmountRegistryIntoHKU}
-
-  ; The removal of this key intermittently fails, so do the best we can in cleanup
-  ${If} "${APP_USER_MODEL_ID}" != ""
-    DeleteRegValue HKLM "Software\Classes\${APP_USER_MODEL_ID}\.exe\shell\open\command" "DelegateExecute"
-    DeleteRegKey HKLM "Software\Classes\${APP_USER_MODEL_ID}\.exe\shell\open"
-    DeleteRegKey HKLM "Software\Classes\${APP_USER_MODEL_ID}\.exe\shell"
-    DeleteRegKey HKLM "Software\Classes\${APP_USER_MODEL_ID}\.exe"
-    DeleteRegKey HKLM "Software\Classes\${APP_USER_MODEL_ID}"
-  ${EndIf}
-
-  ; Remove HKLM entries
-  DeleteRegKey HKLM "Software\Classes\CLSID\${DELEGATE_EXECUTE_HANDLER_ID}"
-  DeleteRegKey HKLM "Software\Classes\${PROTOCOL_ACTIVATION_ID}\Application"
-  DeleteRegKey HKLM "Software\Classes\${FILE_ACTIVATION_ID}\Application"
-  DeleteRegValue HKLM "Software\Classes\${PROTOCOL_ACTIVATION_ID}\shell\open\command" "DelegateExecute"
-  DeleteRegValue HKLM "Software\Classes\${FILE_ACTIVATION_ID}\shell\open\command" "DelegateExecute"
-  DeleteRegValue HKLM "Software\Classes\${PROTOCOL_ACTIVATION_ID}" "AppUserModelID"
-  DeleteRegValue HKLM "Software\Classes\${FILE_ACTIVATION_ID}" "AppUserModelID"
-  DeleteRegValue HKLM "Software\Classes\${PROTOCOL_ACTIVATION_ID}\shell\open" "CommandId"
-  DeleteRegValue HKLM "Software\Classes\${FILE_ACTIVATION_ID}\shell\open" "CommandId"
-
-  ClearErrors
-!macroend
-
-!define RemoveDEHRegistration "!insertmacro RemoveDEHRegistration"
-!define un.RemoveDEHRegistration "!insertmacro RemoveDEHRegistration"
-
 ; Removes various directories and files for reasons noted below.
 !macro RemoveDeprecatedFiles
   ; Some users are ending up with unpacked chrome instead of omni.ja. This
   ; causes Firefox to break badly after upgrading from Firefox 31, see bug
   ; 1063052. Removing the chrome.manifest from the install directory causes
   ; Firefox to use the updated omni.ja so it won't crash.
   ${If} ${FileExists} "$INSTDIR\chrome.manifest"
     Delete "$INSTDIR\chrome.manifest"
--- a/browser/installer/windows/nsis/uninstaller.nsi
+++ b/browser/installer/windows/nsis/uninstaller.nsi
@@ -273,23 +273,16 @@ Section "Uninstall"
     DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest"
     StrCpy $TmpVal "HKLM" ; used primarily for logging
     ${un.RegCleanMain} "Software\Mozilla"
     ${un.RegCleanUninstall}
     ${un.DeleteShortcuts}
     ${un.SetAppLSPCategories}
   ${EndIf}
 
-  ${If} ${AtLeastWin8}
-    ${RemoveDEHRegistration} ${DELEGATE_EXECUTE_HANDLER_ID} \
-                             $AppUserModelID \
-                             "FirefoxURL" \
-                             "FirefoxHTML"
-  ${EndIf}
-
   ${un.RegCleanAppHandler} "FirefoxURL"
   ${un.RegCleanAppHandler} "FirefoxHTML"
   ${un.RegCleanProtocolHandler} "ftp"
   ${un.RegCleanProtocolHandler} "http"
   ${un.RegCleanProtocolHandler} "https"
 
   ClearErrors
   ReadRegStr $R9 HKCR "FirefoxHTML" ""
--- a/browser/locales/en-US/chrome/browser/browser.dtd
+++ b/browser/locales/en-US/chrome/browser/browser.dtd
@@ -206,17 +206,16 @@ These should match what Safari and other
 <!ENTITY printButton.tooltip          "Print this page">
 
 <!ENTITY urlbar.viewSiteInfo.label                      "View site information">
 
 <!ENTITY urlbar.defaultNotificationAnchor.tooltip         "Open message panel">
 <!ENTITY urlbar.geolocationNotificationAnchor.tooltip     "Open location request panel">
 <!ENTITY urlbar.addonsNotificationAnchor.tooltip          "Open add-on installation message panel">
 <!ENTITY urlbar.indexedDBNotificationAnchor.tooltip       "Open offline storage message panel">
-<!ENTITY urlbar.loginFillNotificationAnchor.tooltip       "Manage your login information">
 <!ENTITY urlbar.passwordNotificationAnchor.tooltip        "Open save password message panel">
 <!ENTITY urlbar.pluginsNotificationAnchor.tooltip         "Manage plug-in use">
 <!ENTITY urlbar.webNotificationAnchor.tooltip             "Change whether you can receive notifications from the site">
 
 <!ENTITY urlbar.webRTCShareDevicesNotificationAnchor.tooltip      "Manage sharing your camera and/or microphone with the site">
 <!ENTITY urlbar.webRTCShareMicrophoneNotificationAnchor.tooltip   "Manage sharing your microphone with the site">
 <!ENTITY urlbar.webRTCShareScreenNotificationAnchor.tooltip       "Manage sharing your windows or screen with the site">
 
--- a/browser/locales/en-US/chrome/browser/browser.properties
+++ b/browser/locales/en-US/chrome/browser/browser.properties
@@ -725,20 +725,20 @@ certErrorDetailsCertChain.label = Certif
 # LOCALIZATION NOTE (tabgroups.migration.anonGroup):
 # %S is the group number/ID
 tabgroups.migration.anonGroup = Group %S
 tabgroups.migration.tabGroupBookmarkFolderName = Bookmarked Tab Groups
 
 # LOCALIZATION NOTE (pendingCrashReports.label): Semi-colon list of plural forms
 # See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
 # #1 is the number of pending crash reports
-pendingCrashReports.label = You have an unsubmitted crash report;You have #1 unsubmitted crash reports
+pendingCrashReports2.label = You have an unsent crash report;You have #1 unsent crash reports
 pendingCrashReports.viewAll = View
-pendingCrashReports.submitAll = Submit
-pendingCrashReports.ignoreAll = Ignore
+pendingCrashReports.send = Send
+pendingCrashReports.alwaysSend = Always Send
 
 decoder.noCodecs.button = Learn how
 decoder.noCodecs.accesskey = L
 decoder.noCodecs.message = To play video, you may need to install Microsoft’s Media Feature Pack.
 decoder.noCodecsVista.message = To play video, you may need to install Microsoft’s Platform Update Supplement for Windows Vista.
 decoder.noCodecsXP.message = To play video, you may need to enable Adobe’s Primetime Content Decryption Module.
 decoder.noCodecsLinux.message = To play video, you may need to install the required video codecs.
 decoder.noHWAcceleration.message = To improve video quality, you may need to install Microsoft’s Media Feature Pack.
--- a/browser/locales/en-US/chrome/browser/preferences/advanced.dtd
+++ b/browser/locales/en-US/chrome/browser/preferences/advanced.dtd
@@ -35,20 +35,20 @@
 <!ENTITY enableHealthReport.accesskey    "R">
 <!ENTITY healthReportLearnMore.label     "Learn More">
 
 <!ENTITY telemetryDesc.label             "Shares performance, usage, hardware and customization data about your browser with &vendorShortName; to help us make &brandShortName; better">
 <!ENTITY enableTelemetryData.label       "Share additional data (i.e., Telemetry)">
 <!ENTITY enableTelemetryData.accesskey   "T">
 <!ENTITY telemetryLearnMore.label        "Learn More">
 
-<!ENTITY crashReporterDesc.label         "&brandShortName; submits crash reports to help &vendorShortName; make your browser more stable and secure">
-<!ENTITY enableCrashReporter.label       "Enable Crash Reporter">
-<!ENTITY enableCrashReporter.accesskey   "C">
-<!ENTITY crashReporterLearnMore.label    "Learn More">
+<!ENTITY crashReporterDesc2.label         "Crash reports help &vendorShortName; fix problems and make your browser more stable and secure">
+<!ENTITY alwaysSubmitCrashReports.label   "Allow &brandShortName; to send backlogged crash reports on your behalf">
+<!ENTITY alwaysSubmitCrashReports.accesskey "c">
+<!ENTITY crashReporterLearnMore.label     "Learn More">
 
 <!ENTITY networkTab.label                "Network">
 
 <!ENTITY connection.label                "Connection">
 
 <!ENTITY connectionDesc.label            "Configure how &brandShortName; connects to the Internet">
 <!ENTITY connectionSettings.label        "Settings…">
 <!ENTITY connectionSettings.accesskey    "e">
--- a/browser/modules/ContentCrashHandlers.jsm
+++ b/browser/modules/ContentCrashHandlers.jsm
@@ -3,29 +3,46 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 "use strict";
 
 var Cc = Components.classes;
 var Ci = Components.interfaces;
 var Cu = Components.utils;
 
-this.EXPORTED_SYMBOLS = [ "TabCrashHandler", "PluginCrashReporter" ];
+this.EXPORTED_SYMBOLS = [ "TabCrashHandler",
+                          "PluginCrashReporter",
+                          "UnsubmittedCrashHandler" ];
 
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this, "CrashSubmit",
   "resource://gre/modules/CrashSubmit.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "AppConstants",
   "resource://gre/modules/AppConstants.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "RemotePages",
   "resource://gre/modules/RemotePageManager.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "SessionStore",
   "resource:///modules/sessionstore/SessionStore.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "Task",
+  "resource://gre/modules/Task.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "RecentWindow",
+  "resource:///modules/RecentWindow.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "PluralForm",
+  "resource://gre/modules/PluralForm.jsm");
+
+XPCOMUtils.defineLazyGetter(this, "gNavigatorBundle", function() {
+  const url = "chrome://browser/locale/browser.properties";
+  return Services.strings.createBundle(url);
+});
+
+// We don't process crash reports older than 28 days, so don't bother
+// submitting them
+const PENDING_CRASH_REPORT_DAYS = 28;
 
 this.TabCrashHandler = {
   _crashedTabCount: 0,
 
   get prefs() {
     delete this.prefs;
     return this.prefs = Services.prefs.getBranch("browser.tabs.crashReporting.");
   },
@@ -314,16 +331,214 @@ this.TabCrashHandler = {
     if (!this.childMap) {
       return null;
     }
 
     return this.childMap.get(this.browserMap.get(browser.permanentKey));
   },
 }
 
+/**
+ * This component is responsible for scanning the pending
+ * crash report directory for reports, and (if enabled), to
+ * prompt the user to submit those reports. It might also
+ * submit those reports automatically without prompting if
+ * the user has opted in.
+ */
+this.UnsubmittedCrashHandler = {
+  init() {
+    if (this.initialized) {
+      return;
+    }
+
+    this.initialized = true;
+
+    let pref = "browser.crashReports.unsubmittedCheck.enabled";
+    let shouldCheck = Services.prefs.getBoolPref(pref);
+
+    if (shouldCheck) {
+      Services.obs.addObserver(this, "browser-delayed-startup-finished",
+                               false);
+    }
+  },
+
+  observe(subject, topic, data) {
+    if (topic != "browser-delayed-startup-finished") {
+      return;
+    }
+
+    Services.obs.removeObserver(this, topic);
+    this.checkForUnsubmittedCrashReports();
+  },
+
+  /**
+   * Scans the profile directory for unsubmitted crash reports
+   * within the past PENDING_CRASH_REPORT_DAYS days. If it
+   * finds any, it will, if necessary, attempt to open a notification
+   * bar to prompt the user to submit them.
+   *
+   * @returns Promise
+   *          Resolves after it tries to append a notification on
+   *          the most recent browser window. If a notification
+   *          cannot be shown, will resolve anyways.
+   */
+  checkForUnsubmittedCrashReports: Task.async(function*() {
+    let dateLimit = new Date();
+    dateLimit.setDate(dateLimit.getDate() - PENDING_CRASH_REPORT_DAYS);
+
+    let reportIDs = [];
+    try {
+      reportIDs = yield CrashSubmit.pendingIDsAsync(dateLimit);
+    } catch (e) {
+      Cu.reportError(e);
+      return;
+    }
+
+    if (reportIDs.length) {
+      if (CrashNotificationBar.autoSubmit) {
+        CrashNotificationBar.submitReports(reportIDs);
+      } else {
+        this.showPendingSubmissionsNotification(reportIDs);
+      }
+    }
+  }),
+
+  /**
+   * Given an array of unsubmitted crash report IDs, try to open
+   * up a notification asking the user to submit them.
+   *
+   * @param reportIDs (Array<string>)
+   *        The Array of report IDs to offer the user to send.
+   */
+  showPendingSubmissionsNotification(reportIDs) {
+    let count = reportIDs.length;
+    if (!count) {
+      return;
+    }
+
+    let messageTemplate =
+      gNavigatorBundle.GetStringFromName("pendingCrashReports2.label");
+
+    let message = PluralForm.get(count, messageTemplate).replace("#1", count);
+
+    CrashNotificationBar.show({
+      notificationID: "pending-crash-reports",
+      message,
+      reportIDs,
+    });
+  },
+};
+
+this.CrashNotificationBar = {
+  /**
+   * Attempts to show a notification bar to the user in the most
+   * recent browser window asking them to submit some crash report
+   * IDs. If a notification cannot be shown (for example, there
+   * is no browser window), this method exits silently.
+   *
+   * The notification will allow the user to submit their crash
+   * reports. If the user dismissed the notification, the crash
+   * reports will be marked to be ignored (though they can
+   * still be manually submitted via about:crashes).
+   *
+   * @param JS Object
+   *        An Object with the following properties:
+   *
+   *        notificationID (string)
+   *          The ID for the notification to be opened.
+   *
+   *        message (string)
+   *          The message to be displayed in the notification.
+   *
+   *        reportIDs (Array<string>)
+   *          The array of report IDs to offer to the user.
+   */
+  show({ notificationID, message, reportIDs }) {
+    let chromeWin = RecentWindow.getMostRecentBrowserWindow();
+    if (!chromeWin) {
+      // Can't show a notification in this case. We'll hopefully
+      // get another opportunity to have the user submit their
+      // crash reports later.
+      return;
+    }
+
+    let nb =  chromeWin.document.getElementById("global-notificationbox");
+    let notification = nb.getNotificationWithValue(notificationID);
+    if (notification) {
+      return;
+    }
+
+    let buttons = [{
+      label: gNavigatorBundle.GetStringFromName("pendingCrashReports.send"),
+      callback: () => {
+        this.submitReports(reportIDs);
+      },
+    },
+    {
+      label: gNavigatorBundle.GetStringFromName("pendingCrashReports.alwaysSend"),
+      callback: () => {
+        this.autoSubmit = true;
+        this.submitReports(reportIDs);
+      },
+    },
+    {
+      label: gNavigatorBundle.GetStringFromName("pendingCrashReports.viewAll"),
+      callback: function() {
+        chromeWin.openUILinkIn("about:crashes", "tab");
+        return true;
+      },
+    }];
+
+    let eventCallback = (eventType) => {
+      if (eventType == "dismissed") {
+        // The user intentionally dismissed the notification,
+        // which we interpret as meaning that they don't care
+        // to submit the reports. We'll ignore these particular
+        // reports going forward.
+        reportIDs.forEach(function(reportID) {
+          CrashSubmit.ignore(reportID);
+        });
+      }
+    };
+
+    nb.appendNotification(message, notificationID,
+                          "chrome://browser/skin/tab-crashed.svg",
+                          nb.PRIORITY_INFO_HIGH, buttons,
+                          eventCallback);
+  },
+
+  get autoSubmit() {
+    return Services.prefs
+                   .getBoolPref("browser.crashReports.unsubmittedCheck.autoSubmit");
+  },
+
+  set autoSubmit(val) {
+    Services.prefs.setBoolPref("browser.crashReports.unsubmittedCheck.autoSubmit",
+                               val);
+  },
+
+  /**
+   * Attempt to submit reports to the crash report server. Each
+   * report will have the "SubmittedFromInfobar" extra key set
+   * to true.
+   *
+   * @param reportIDs (Array<string>)
+   *        The array of reportIDs to submit.
+   */
+  submitReports(reportIDs) {
+    for (let reportID of reportIDs) {
+      CrashSubmit.submit(reportID, {
+        extraExtraKeyVals: {
+          "SubmittedFromInfobar": true,
+        },
+      });
+    }
+  },
+};
+
 this.PluginCrashReporter = {
   /**
    * Makes the PluginCrashReporter ready to hear about and
    * submit crash reports.
    */
   init() {
     if (this.initialized) {
       return;
--- a/browser/themes/linux/browser.css
+++ b/browser/themes/linux/browser.css
@@ -28,16 +28,19 @@
 
   --toolbarbutton-active-background: rgba(154,154,154,.5) linear-gradient(rgba(255,255,255,.7), rgba(255,255,255,.4));
   --toolbarbutton-active-bordercolor: rgba(0,0,0,.3);
   --toolbarbutton-active-boxshadow: 0 1px 1px rgba(0,0,0,.1) inset, 0 0 1px rgba(0,0,0,.3) inset;
 
   --toolbarbutton-checkedhover-backgroundcolor: rgba(200,200,200,.5);
 
   --panel-separator-color: ThreeDShadow;
+  --arrowpanel-dimmed: hsla(0,0%,80%,.3);
+  --arrowpanel-dimmed-further: hsla(0,0%,80%,.45);
+  --arrowpanel-dimmed-even-further: hsla(0,0%,80%,.8);
 
   --urlbar-separator-color: ThreeDShadow;
 }
 
 #menubar-items {
   -moz-box-orient: vertical; /* for flex hack */
 }
 
@@ -805,25 +808,16 @@ menuitem:not([type]):not(.menuitem-toolt
 #main-window:not([customizing]) .toolbarbutton-1[disabled=true] > .toolbarbutton-icon,
 #main-window:not([customizing]) .toolbarbutton-1[disabled=true] > .toolbarbutton-menu-dropmarker,
 #main-window:not([customizing]) .toolbarbutton-1[disabled=true] > .toolbarbutton-menubutton-dropmarker,
 #main-window:not([customizing]) .toolbarbutton-1[disabled=true] > .toolbarbutton-menubutton-button > .toolbarbutton-icon,
 #main-window:not([customizing]) .toolbarbutton-1 > .toolbarbutton-menubutton-button[disabled=true] > .toolbarbutton-icon {
   opacity: 0.4;
 }
 
-:-moz-any(@primaryToolbarButtons@)[cui-areatype="menu-panel"] > .toolbarbutton-icon,
-:-moz-any(@primaryToolbarButtons@)[cui-areatype="menu-panel"] > .toolbarbutton-badge-stack > .toolbarbutton-icon,
-:-moz-any(@primaryToolbarButtons@)[cui-areatype="menu-panel"] > .toolbarbutton-menubutton-button > .toolbarbutton-icon,
-toolbaritem[cui-areatype="menu-panel"] > :-moz-any(@nestedButtons@) > .toolbarbutton-icon {
-  filter: url(chrome://browser/skin/filters.svg#fill);
-  fill: currentColor;
-  opacity: 0.7 !important; /* !important overrides .toolbarbutton-1[disabled=true] rule */
-}
-
 /* Fullscreen window controls */
 #window-controls {
   -moz-box-align: start;
   margin-inline-start: 10px;
 }
 
 #minimize-button {
   list-style-image: url("chrome://global/skin/icons/Minimize.gif");
@@ -990,35 +984,35 @@ toolbaritem[cui-areatype="menu-panel"] >
 }
 
 #urlbar-zoom-button > .toolbarbutton-icon {
   display: none;
 }
 
 #urlbar-search-footer {
   border-top: 1px solid var(--panel-separator-color);
-  background-color: hsla(210,4%,10%,.07);
+  background-color: var(--arrowpanel-dimmed);
 }
 
 #urlbar-search-settings {
   -moz-appearance: none;
   -moz-user-focus: ignore;
   color: GrayText;
   margin: 0;
   border: 0;
   padding: 8px 20px;
   background: transparent;
 }
 
 #urlbar-search-settings:hover {
-  background-color: hsla(210,4%,10%,.07);
+  background-color: var(--arrowpanel-dimmed);
 }
 
 #urlbar-search-settings:hover:active {
-  background-color: hsla(210,4%,10%,.12);
+  background-color: var(--arrowpanel-dimmed-further);
 }
 
 #urlbar-search-splitter {
   -moz-appearance: none;
   width: 8px;
   margin-inline-start: -4px;
 }
 
@@ -1746,17 +1740,16 @@ toolbarbutton.chevron > .toolbarbutton-i
 %include ../../../devtools/client/themes/responsivedesign.inc.css
 %include ../../../devtools/client/themes/commandline.inc.css
 %include ../shared/plugin-doorhanger.inc.css
 
 notification.pluginVulnerable > .notification-inner > .messageCloseButton:not(:hover) {
   background-image: -moz-image-rect(url("chrome://global/skin/icons/close.svg"), 0, 80, 16, 64);
 }
 
-%include ../shared/login-doorhanger.inc.css
 
 %include downloads/indicator.css
 
 .gcli-panel {
   padding: 0;
 }
 
 .gclitoolbar-input-node > .textbox-input-box > html|*.textbox-input::-moz-selection {
--- a/browser/themes/linux/jar.mn
+++ b/browser/themes/linux/jar.mn
@@ -11,26 +11,22 @@ browser.jar:
   skin/classic/browser/aboutSyncTabs.css
 * skin/classic/browser/syncedtabs/sidebar.css     (syncedtabs/sidebar.css)
   skin/classic/browser/actionicon-tab.png
 * skin/classic/browser/browser.css
 * skin/classic/browser/devedition.css
 * skin/classic/browser/browser-lightweightTheme.css
   skin/classic/browser/click-to-play-warning-stripes.png
   skin/classic/browser/Info.png
-  skin/classic/browser/menuPanel.png
-  skin/classic/browser/menuPanel@2x.png
   skin/classic/browser/menuPanel-customize.png
   skin/classic/browser/menuPanel-customize@2x.png
   skin/classic/browser/menuPanel-exit.png
   skin/classic/browser/menuPanel-exit@2x.png
   skin/classic/browser/menuPanel-help.png
   skin/classic/browser/menuPanel-help@2x.png
-  skin/classic/browser/menuPanel-small.png
-  skin/classic/browser/menuPanel-small@2x.png
   skin/classic/browser/monitor.png
   skin/classic/browser/monitor_16-10.png
 * skin/classic/browser/pageInfo.css
   skin/classic/browser/pageInfo.png
   skin/classic/browser/page-livemarks.png
   skin/classic/browser/Privacy-16.png
   skin/classic/browser/privatebrowsing-mask.png
   skin/classic/browser/reload-stop-go.png
deleted file mode 100644
index 4cd3e52b13d26ae5c4d85cb3ed3c00cd6c70f2ab..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index f3eb362267138163c3abceaf3028b7940954ee31..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2cf39ab66f74738da2548ddcd0b77ea7f9ff3898..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2270d645de5966c2df0e979bc273c71664d17ce2..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/themes/linux/searchbar.css
+++ b/browser/themes/linux/searchbar.css
@@ -132,17 +132,17 @@ menuitem[cmd="cmd_clearhistory"][disable
 }
 
 .search-panel-tree {
   border-top: 1px solid var(--panel-separator-color) !important;
 }
 
 .search-panel-header {
   font-weight: normal;
-  background-color: hsla(210,4%,10%,.07);
+  background-color: var(--arrowpanel-dimmed);
   border: none;
   border-top: 1px solid var(--panel-separator-color);
   padding: 3px 5px;
   color: GrayText;
 }
 
 .search-panel-header > label {
   margin-top: 2px !important;
@@ -296,17 +296,17 @@ menuitem[cmd="cmd_clearhistory"][disable
 
 .search-setting-button {
   -moz-appearance: none;
   margin: 0;
   min-height: 32px;
 }
 
 .search-setting-button[selected] {
-  background-color: hsla(210,4%,10%,.15);
+  background-color: var(--arrowpanel-dimmed-further);
 }
 
 .search-setting-button-compact {
   list-style-image: url("chrome://browser/skin/gear.svg#gear");
 }
 
 .search-setting-button-compact[selected] {
   list-style-image: url("chrome://browser/skin/gear.svg#gear-inverted");
--- a/browser/themes/osx/browser.css
+++ b/browser/themes/osx/browser.css
@@ -39,16 +39,19 @@
   --urlbar-dropmarker-url: url("chrome://browser/skin/urlbar-history-dropmarker.png");
   --urlbar-dropmarker-region: rect(0, 11px, 14px, 0);
   --urlbar-dropmarker-active-region: rect(0, 22px, 14px, 11px);
   --urlbar-dropmarker-2x-url: url("chrome://browser/skin/urlbar-history-dropmarker@2x.png");
   --urlbar-dropmarker-2x-region: rect(0, 22px, 28px, 0);
   --urlbar-dropmarker-active-2x-region: rect(0, 44px, 28px, 22px);
 
   --panel-separator-color: hsla(210,4%,10%,.14);
+  --arrowpanel-dimmed: hsla(210,4%,10%,.07);
+  --arrowpanel-dimmed-further: hsla(210,4%,10%,.12);
+  --arrowpanel-dimmed-even-further: hsla(210,4%,10%,.17);
 
   --urlbar-separator-color: hsla(0,0%,16%,.2);
 }
 
 #urlbar:-moz-lwtheme:not([focused="true"]),
 .searchbar-textbox:-moz-lwtheme:not([focused="true"]) {
   opacity: .9;
 }
@@ -745,23 +748,16 @@ toolbar .toolbarbutton-1 > .toolbarbutto
   padding-bottom: 1px;
   margin-inline-start: 7px;
   margin-inline-end: 7px;
 }
 
 %include ../shared/toolbarbuttons.inc.css
 %include ../shared/menupanel.inc.css
 
-:-moz-any(@primaryToolbarButtons@)[cui-areatype="menu-panel"][panel-multiview-anchor=true] > .toolbarbutton-icon,
-:-moz-any(@primaryToolbarButtons@)[cui-areatype="menu-panel"][panel-multiview-anchor=true] > .toolbarbutton-badge-stack > .toolbarbutton-icon,
-:-moz-any(@primaryToolbarButtons@)[cui-areatype="menu-panel"][panel-multiview-anchor=true] > .toolbarbutton-menubutton-button > .toolbarbutton-icon {
-  filter: url(chrome://browser/skin/filters.svg#fill);
-  fill: currentColor;
-}
-
 @media not all and (min-resolution: 1.1dppx) {
   #back-button:hover:active:not([disabled="true"]) {
     -moz-image-region: rect(18px, 36px, 36px, 18px);
   }
 
   #forward-button:hover:active:not([disabled="true"]) {
     -moz-image-region: rect(18px, 72px, 36px, 54px);
   }
@@ -1703,33 +1699,33 @@ toolbar .toolbarbutton-1 > .toolbarbutto
 }
 
 #urlbar-zoom-button > .toolbarbutton-icon {
   display: none;
 }
 
 #urlbar-search-footer {
   border-top: 1px solid var(--panel-separator-color);
-  background-color: hsla(210,4%,10%,.07);
+  background-color: var(--arrowpanel-dimmed);
 }
 
 #urlbar-search-settings {
   -moz-appearance: none;
   -moz-user-focus: ignore;
   color: GrayText;
   margin: 0;
   padding: 8px 20px;
 }
 
 #urlbar-search-settings:hover {
-  background-color: hsla(210,4%,10%,.07);
+  background-color: var(--arrowpanel-dimmed);
 }
 
 #urlbar-search-settings:hover:active {
-  background-color: hsla(210,4%,10%,.12);
+  background-color: var(--arrowpanel-dimmed-further);
 }
 
 #urlbar-search-splitter {
   min-width: 8px;
   width: 8px;
   background-image: none;
   margin: 0 -4px;
   position: relative;
@@ -3154,17 +3150,16 @@ menulist.translate-infobar-element > .me
   margin-left: 1em;
 }
 
 %include ../shared/fullscreen/warning.inc.css
 %include ../shared/ctrlTab.inc.css
 %include ../../../devtools/client/themes/responsivedesign.inc.css
 %include ../../../devtools/client/themes/commandline.inc.css
 %include ../shared/plugin-doorhanger.inc.css
-%include ../shared/login-doorhanger.inc.css
 
 %include downloads/indicator.css
 
 /* On mac, the popup notification contents are indented by default and so
   the default closebutton margins from notification.css require adjustment */
 
 .click-to-play-plugins-notification-description-box > .popup-notification-closebutton {
   margin-inline-end: -6px;
--- a/browser/themes/osx/jar.mn
+++ b/browser/themes/osx/jar.mn
@@ -16,26 +16,22 @@ browser.jar:
 * skin/classic/browser/browser-lightweightTheme.css
   skin/classic/browser/click-to-play-warning-stripes.png
   skin/classic/browser/Info.png
   skin/classic/browser/keyhole-circle.png
   skin/classic/browser/keyhole-circle@2x.png
   skin/classic/browser/subtle-pattern.png
   skin/classic/browser/menu-back.png
   skin/classic/browser/menu-forward.png
-  skin/classic/browser/menuPanel.png
-  skin/classic/browser/menuPanel@2x.png
   skin/classic/browser/menuPanel-customize.png
   skin/classic/browser/menuPanel-customize@2x.png
   skin/classic/browser/menuPanel-exit.png
   skin/classic/browser/menuPanel-exit@2x.png
   skin/classic/browser/menuPanel-help.png
   skin/classic/browser/menuPanel-help@2x.png
-  skin/classic/browser/menuPanel-small.png
-  skin/classic/browser/menuPanel-small@2x.png
   skin/classic/browser/panel-expander-closed.png
   skin/classic/browser/panel-expander-closed@2x.png
   skin/classic/browser/panel-expander-open.png
   skin/classic/browser/panel-expander-open@2x.png
   skin/classic/browser/panel-plus-sign.png
   skin/classic/browser/page-livemarks.png
   skin/classic/browser/page-livemarks@2x.png
   skin/classic/browser/pageInfo.css
@@ -192,26 +188,22 @@ browser.jar:
   skin/classic/browser/Toolbar-background-noise.png         (Toolbar-background-noise.png)
   skin/classic/browser/lion/toolbarbutton-dropmarker.png    (toolbarbutton-dropmarker-lion.png)
   skin/classic/browser/toolbarbutton-dropmarker@2x.png      (toolbarbutton-dropmarker-lion@2x.png)
   skin/classic/browser/lion/tabbrowser/alltabs-box-bkgnd-icon.png      (tabbrowser/alltabs-box-bkgnd-icon-lion.png)
   skin/classic/browser/tabbrowser/alltabs-box-bkgnd-icon@2x.png        (tabbrowser/alltabs-box-bkgnd-icon-lion@2x.png)
   skin/classic/browser/lion/places/toolbar.png                         (places/toolbar-lion.png)
   skin/classic/browser/yosemite/Toolbar.png                            (Toolbar-yosemite.png)
   skin/classic/browser/yosemite/Toolbar@2x.png                         (Toolbar-yosemite@2x.png)
-  skin/classic/browser/yosemite/menuPanel.png                          (menuPanel-yosemite.png)
-  skin/classic/browser/yosemite/menuPanel@2x.png                       (menuPanel-yosemite@2x.png)
   skin/classic/browser/yosemite/menuPanel-customize.png                (menuPanel-customize-yosemite.png)
   skin/classic/browser/yosemite/menuPanel-customize@2x.png             (menuPanel-customize-yosemite@2x.png)
   skin/classic/browser/yosemite/menuPanel-exit.png                     (menuPanel-exit-yosemite.png)
   skin/classic/browser/yosemite/menuPanel-exit@2x.png                  (menuPanel-exit-yosemite@2x.png)
   skin/classic/browser/yosemite/menuPanel-help.png                     (menuPanel-help-yosemite.png)
   skin/classic/browser/yosemite/menuPanel-help@2x.png                  (menuPanel-help-yosemite@2x.png)
-  skin/classic/browser/yosemite/menuPanel-small.png                    (menuPanel-small-yosemite.png)
-  skin/classic/browser/yosemite/menuPanel-small@2x.png                 (menuPanel-small-yosemite@2x.png)
   skin/classic/browser/yosemite/reload-stop-go.png                     (reload-stop-go-yosemite.png)
   skin/classic/browser/yosemite/reload-stop-go@2x.png                  (reload-stop-go-yosemite@2x.png)
   skin/classic/browser/yosemite/sync-horizontalbar.png                 (sync-horizontalbar-yosemite.png)
   skin/classic/browser/yosemite/sync-horizontalbar@2x.png              (sync-horizontalbar-yosemite@2x.png)
   skin/classic/browser/yosemite/tab-selected-end-inactive.svg          (tabbrowser/tab-selected-end-yosemite-inactive.svg)
   skin/classic/browser/yosemite/tab-selected-start-inactive.svg        (tabbrowser/tab-selected-start-yosemite-inactive.svg)
   skin/classic/browser/yosemite/tab-active-middle-inactive.png         (tabbrowser/tab-active-middle-yosemite-inactive.png)
   skin/classic/browser/yosemite/tab-active-middle-inactive@2x.png      (tabbrowser/tab-active-middle-yosemite-inactive@2x.png)
@@ -228,22 +220,18 @@ browser.jar:
 % override chrome://browser/skin/feeds/audioFeedIcon16.png                 chrome://browser/skin/feeds/feedIcon16.png
 % override chrome://browser/skin/feeds/videoFeedIcon.png                   chrome://browser/skin/feeds/feedIcon.png
 % override chrome://browser/skin/feeds/videoFeedIcon16.png                 chrome://browser/skin/feeds/feedIcon16.png
 % override chrome://browser/skin/toolbarbutton-dropmarker.png              chrome://browser/skin/lion/toolbarbutton-dropmarker.png                 os=Darwin osversion>=10.7
 % override chrome://browser/skin/tabbrowser/alltabs-box-bkgnd-icon.png     chrome://browser/skin/lion/tabbrowser/alltabs-box-bkgnd-icon.png        os=Darwin osversion>=10.7
 % override chrome://browser/skin/places/toolbar.png                        chrome://browser/skin/lion/places/toolbar.png                           os=Darwin osversion>=10.7
 % override chrome://browser/skin/Toolbar.png                               chrome://browser/skin/yosemite/Toolbar.png                              os=Darwin osversion>=10.10
 % override chrome://browser/skin/Toolbar@2x.png                            chrome://browser/skin/yosemite/Toolbar@2x.png                           os=Darwin osversion>=10.10
-% override chrome://browser/skin/menuPanel.png                             chrome://browser/skin/yosemite/menuPanel.png                            os=Darwin osversion>=10.10
-% override chrome://browser/skin/menuPanel@2x.png                          chrome://browser/skin/yosemite/menuPanel@2x.png                         os=Darwin osversion>=10.10
 % override chrome://browser/skin/menuPanel-customize.png                   chrome://browser/skin/yosemite/menuPanel-customize.png                  os=Darwin osversion>=10.10
 % override chrome://browser/skin/menuPanel-customize@2x.png                chrome://browser/skin/yosemite/menuPanel-customize@2x.png               os=Darwin osversion>=10.10
 % override chrome://browser/skin/menuPanel-exit.png                        chrome://browser/skin/yosemite/menuPanel-exit.png                       os=Darwin osversion>=10.10
 % override chrome://browser/skin/menuPanel-exit@2x.png                     chrome://browser/skin/yosemite/menuPanel-exit@2x.png                    os=Darwin osversion>=10.10
 % override chrome://browser/skin/menuPanel-help.png                        chrome://browser/skin/yosemite/menuPanel-help.png                       os=Darwin osversion>=10.10
 % override chrome://browser/skin/menuPanel-help@2x.png                     chrome://browser/skin/yosemite/menuPanel-help@2x.png                    os=Darwin osversion>=10.10
-% override chrome://browser/skin/menuPanel-small.png                       chrome://browser/skin/yosemite/menuPanel-small.png                      os=Darwin osversion>=10.10
-% override chrome://browser/skin/menuPanel-small@2x.png                    chrome://browser/skin/yosemite/menuPanel-small@2x.png                   os=Darwin osversion>=10.10
 % override chrome://browser/skin/reload-stop-go.png                        chrome://browser/skin/yosemite/reload-stop-go.png                       os=Darwin osversion>=10.10
 % override chrome://browser/skin/reload-stop-go@2x.png                     chrome://browser/skin/yosemite/reload-stop-go@2x.png                    os=Darwin osversion>=10.10
 % override chrome://browser/skin/sync-horizontalbar.png                    chrome://browser/skin/yosemite/sync-horizontalbar.png               os=Darwin osversion>=10.10
 % override chrome://browser/skin/sync-horizontalbar@2x.png                 chrome://browser/skin/yosemite/sync-horizontalbar@2x.png            os=Darwin osversion>=10.10
deleted file mode 100644
index 2c36c267869fd56dff976151050e254b10019a37..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index c009af9a48c81eeff2331540fa581b8d47d43d93..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index ecd3b7f08aa58358ae1f8b44c124582c1bea3ecd..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index e41e6f499df1ae2b5cb02ec5c42eaa9042211ce0..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 867a25d0d6c4d551ba252e020e7de6b0dbfdef7e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index ad2cadb8bad46b4d153a2f23fbce18e80deefca6..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2dc09b997e0ed069dee62eb3cf6ec27c8f8e9e5a..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 6e34e8b06903922d02e3df89dc396b138f1b28aa..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/themes/osx/searchbar.css
+++ b/browser/themes/osx/searchbar.css
@@ -122,17 +122,17 @@
 
 .search-panel-tree {
   border-top: 1px solid var(--panel-separator-color) !important;
 }
 
 .search-panel-header {
   font-size: 10px;
   font-weight: normal;
-  background-color: hsla(210,4%,10%,.07);
+  background-color: var(--arrowpanel-dimmed);
   border-top: 1px solid var(--panel-separator-color);
   margin: 0;
   padding: 3px 6px;
   color: GrayText;
 }
 
 .search-panel-header > label {
   margin-top: 2px !important;
@@ -278,17 +278,17 @@
 
 .search-setting-button {
   -moz-appearance: none;
   border-radius: 0 0 4px 4px;
   min-height: 32px;
 }
 
 .search-setting-button[selected] {
-  background-color: hsla(210,4%,10%,.15);
+  background-color: var(--arrowpanel-dimmed-further);
 }
 
 .search-setting-button-compact {
   list-style-image: url("chrome://browser/skin/gear.svg#gear");
 }
 
 .search-setting-button-compact[selected] {
   list-style-image: url("chrome://browser/skin/gear.svg#gear-inverted");
--- a/browser/themes/shared/controlcenter/panel.inc.css
+++ b/browser/themes/shared/controlcenter/panel.inc.css
@@ -151,21 +151,21 @@
 }
 
 .identity-popup-expander:-moz-focusring > .button-box,
 .identity-popup-expander[panel-multiview-anchor] > .button-box {
   border-style: none;
 }
 
 .identity-popup-expander:hover {
-  background-color: hsla(210,4%,10%,.07);
+  background-color: var(--arrowpanel-dimmed);
 }
 
 .identity-popup-expander:hover:active {
-  background-color: hsla(210,4%,10%,.12);
+  background-color: var(--arrowpanel-dimmed-further);
   box-shadow: 0 1px 0 hsla(210,4%,10%,.05) inset;
 }
 
 /* CONTENT */
 
 .identity-popup-permission-label,
 .identity-popup-permission-state-label,
 #identity-popup-security-content > description,
@@ -273,36 +273,36 @@
 }
 
 #identity-popup-securityView-body {
   padding-inline-end: 1em;
 }
 
 #identity-popup-securityView-footer {
   margin-top: 1em;
-  background-color: hsla(210,4%,10%,.07);
+  background-color: var(--arrowpanel-dimmed);
 }
 
 #identity-popup-securityView-footer > button {
   -moz-appearance: none;
   margin: 0;
   border: none;
   border-top: 1px solid var(--panel-separator-color);
   padding: 8px 20px;
   color: inherit;
   background-color: transparent;
 }
 
 #identity-popup-securityView-footer > button:hover,
 #identity-popup-securityView-footer > button:focus {
-  background-color: hsla(210,4%,10%,.07);
+  background-color: var(--arrowpanel-dimmed);
 }
 
 #identity-popup-securityView-footer > button:hover:active {
-  background-color: hsla(210,4%,10%,.12);
+  background-color: var(--arrowpanel-dimmed-further);
 }
 
 #identity-popup-content-verifier ~ description {
   margin-top: 1em;
   color: Graytext;
 }
 
 description#identity-popup-content-verified-by,
index 0251ed7470879fc6f3a2214a51fb28e41ea49689..07be6a76a86efd878a2476d39f68c84b4ad4e2bc
GIT binary patch
literal 337
zc$@)I0j~auP)<h;3K|Lk000e1NJLTq001xm000mO1ONa4`lmEH00002VoOIv0RM-N
z%)bBt010qNS#tmY3ljhU3ljkVnw%H_000McNliru;0O%{Ix_Kj(RBa-0OCnRK~y-)
z-PAD(!Y~xZ@qjvc1TW$hRJ=rIN9|F(g@<^wATENlI6QCQpqqR?Ln$w5@;Vj4SLpJC
z{GmzX-0*`6xvAh_Iy*L<oFfNoz5!!=z?dHep4j1L1e7NO%F}^T7F`&Dl3Py(N@_h7
zxL|@2PT4@<i9q1pz#DT}a+BQyaaP_5h?8<1xMGDf_Ojp%k3^tx4qOEqr@(cfkfp|$
z%KMN!MFo53z*V3i?-aNWys(vT=djKkQ|}zP3V5f;<2^WHiM#P1bUfOFj{nP_oWHE<
jp3AQ8x$J5m820%9@O{4`?|}uj00000NkvXXu0mjfGaQL2
index 593e1df43d30e2c0361902824a2c93c6b43989e5..7562e138c3d7db91dc7828c01d2277bcb8990ce2
GIT binary patch
literal 625
zc$@)o0*?KOP)<h;3K|Lk000e1NJLTq003YB001Be1ONa4N6EF{00002VoOIv0RM-N
z%)bBt010qNS#tmY3ljhU3ljkVnw%H_000McNliru;0O%{J0Kg|k$eCE0s=`yK~z}7
z?U=Dj13?gmR|^qLrJcQ%g^yri<)!ff@&w5n1VI~{q_s_*BBV%fb70{Um?~;Oa$skr
zpky5P{@ajbFWH#`F>rez*L?DQ#qLhdm~#DtMdvgj>6$QQ@F@AQNgpjAo7kA&KMFkk
z7g>OkcL7R%7NA{OfO5G2<thWpfIkfw(zsB7hZhBScuByJc4>#M=u;Ws<plv=K0IJb
zr%-LG0+@$tQx(8`oSHUu0Uf8>R|RyOYF`!5N%i9eJ~ZHs4j>w-_5kw`jZ}MpdFV&F
zJy3(@9zCl9YS3Kb0|RQ%U*f|8?q~~|E!8Q+JTzOXQ;2y4v^1yC2OUB3guWC3%tO+{
z2Lvz=eGi`(@J%;vvs^-Pn;wEMvN;}#UOp#aj)%UN&kLwqsS8Tzk<Z>#u_3sL>sAUp
z6dQt@xNe=mBcKs}6Azr$J{{xjklup>22P84yyfuTfPp(Qna5iW?+>`=-EJ11o?sSY
zJ`;0-J;5x*e3sx+da_w)<nG<{sS1a=QFiY_uPPkoM%ld!{i=MJo6;>+AXlLm@ic0A
z$gSXWPa(@ge+9q#7=5BME7w+z)684BwsM?i-nzB*<MfoebnQ9)L+^pL{F-}UEnog3
zD+9`aVjs4Wf*-b$f*-b$SwO@x()G%eaX)laybDnBE?|?NjSu(%szCGmPuH$?00000
LNkvXXu0mjfMG*`K
--- a/browser/themes/shared/customizableui/panelUI.inc.css
+++ b/browser/themes/shared/customizableui/panelUI.inc.css
@@ -402,17 +402,17 @@ toolbarpaletteitem:-moz-any([place="pale
   width: 16px;
   margin-inline-start: -16px;
   height: 51px;
   margin-bottom: 2.2em;
   padding: 0;
 }
 
 .panelUI-grid .toolbarbutton-1:not([buttonover])@buttonStateHover@ > .toolbarbutton-menubutton-dropmarker {
-  background-color: hsla(210,4%,10%,.1) !important;
+  background-color: var(--arrowpanel-dimmed) !important;
   border-radius: 0 0 0 2px;
 }
 
 .panelUI-grid .toolbarbutton-1:not([buttonover])@buttonStateHover@ > .toolbarbutton-menubutton-dropmarker:-moz-locale-dir(rtl) {
   border-radius: 0 0 2px 0;
 }
 
 #main-window:not([customizing]) .panel-combined-button[disabled] > .toolbarbutton-icon {
@@ -429,17 +429,17 @@ toolbaritem[cui-areatype="menu-panel"][s
   -moz-box-pack: center;
 }
 
 toolbaritem[cui-areatype="menu-panel"][sdkstylewidget="true"] > iframe {
   margin: 4px auto;
 }
 
 #PanelUI-multiView[viewtype="subview"] > .panel-viewcontainer > .panel-viewstack > .panel-mainview >  #PanelUI-mainView {
-  background-color: hsla(210,4%,10%,.1);
+  background-color: var(--arrowpanel-dimmed);
 }
 
 #PanelUI-multiView[viewtype="subview"] #PanelUI-mainView > #PanelUI-contents-scroller > #PanelUI-contents > .panel-wide-item,
 #PanelUI-multiView[viewtype="subview"] #PanelUI-mainView > #PanelUI-contents-scroller > #PanelUI-contents > .toolbarbutton-1:not([panel-multiview-anchor="true"]),
 #PanelUI-multiView[viewtype="subview"] #PanelUI-mainView > #PanelUI-footer > #PanelUI-update-status,
 #PanelUI-multiView[viewtype="subview"] #PanelUI-mainView > #PanelUI-footer > #PanelUI-footer-fxa > #PanelUI-fxa-status > #PanelUI-fxa-avatar,
 #PanelUI-multiView[viewtype="subview"] #PanelUI-mainView > #PanelUI-footer > #PanelUI-footer-fxa > #PanelUI-fxa-status > #PanelUI-fxa-label,
 #PanelUI-multiView[viewtype="subview"] #PanelUI-mainView > #PanelUI-footer > #PanelUI-footer-fxa > #PanelUI-fxa-icon,
@@ -530,48 +530,48 @@ toolbarpaletteitem[place="palette"] > to
 #zoom-reset-button > .toolbarbutton-icon {
   display: none;
 }
 
 #PanelUI-footer {
   display: flex;
   flex-shrink: 0;
   flex-direction: column;
-  background-color: hsla(210,4%,10%,.07);
+  background-color: var(--arrowpanel-dimmed);
   padding: 0;
   margin: 0;
 }
 
 #main-window[customizing] #PanelUI-footer-fxa {
   display: none;
 }
 
 #PanelUI-footer-fxa:not([fxastatus="signedin"]) > toolbarseparator,
 #PanelUI-footer-fxa:not([fxastatus="signedin"]) > #PanelUI-fxa-icon,
 #PanelUI-footer-fxa:not([fxaprofileimage]) > #PanelUI-fxa-status > #PanelUI-fxa-avatar {
   display: none;
 }
 
 #PanelUI-footer-fxa[fxastatus="error"] > #PanelUI-fxa-status::after {
   content: url(chrome://browser/skin/warning.svg);
-  filter: drop-shadow(0 1px 0 hsla(206, 50%, 10%, .15));
+  filter: drop-shadow(0 1px 0 hsla(206,50%,10%,.15));
   width: 47px;
   padding-top: 1px;
   display: block;
   text-align: center;
   position: relative;
   top: 25%;
 }
 
 #PanelUI-update-status[update-status]::after {
   content: "";
   width: 14px;
   height: 14px;
   margin-right: 16.5px;
-  box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.2) inset, 0px -1px 0px rgba(0, 0, 0, 0.1) inset, 0px 1px 0px rgba(12, 27, 38, 0.2);
+  box-shadow: 0px 1px 0px rgba(255,255,255,.2) inset, 0px -1px 0px rgba(0,0,0,.1) inset, 0px 1px 0px rgba(12,27,38,.2);
   border-radius: 2px;
   background-size: contain;
   display: -moz-box;
 }
 
 #PanelUI-update-status[update-status="succeeded"]::after {
   background-image: url(chrome://browser/skin/update-badge.svg);
   background-color: #74BF43;
@@ -904,122 +904,125 @@ toolbarpaletteitem[place="palette"] > to
   opacity: 0.4;
 }
 
 #PanelUI-fxa-status:not([disabled]):hover,
 #PanelUI-fxa-icon:not([disabled]):hover,
 #PanelUI-help:not([disabled]):hover,
 #PanelUI-customize:hover,
 #PanelUI-quit:not([disabled]):hover {
-  outline: 1px solid hsla(210,4%,10%,.07);
-  background-color: hsla(210,4%,10%,.07);
+  outline: 1px solid var(--arrowpanel-dimmed);
+  background-color: var(--arrowpanel-dimmed);
 }
 
 #PanelUI-fxa-status:not([disabled]):hover:active,
 #PanelUI-fxa-icon:not([disabled]):hover:active,
 #PanelUI-help:not([disabled]):hover:active,
 #PanelUI-customize:hover:active,
 #PanelUI-quit:not([disabled]):hover:active {
-  outline: 1px solid hsla(210,4%,10%,.12);
-  background-color: hsla(210,4%,10%,.12);
+  outline: 1px solid var(--arrowpanel-dimmed-further);
+  background-color: var(--arrowpanel-dimmed-further);
   box-shadow: 0 1px 0 hsla(210,4%,10%,.05) inset;
 }
 
 #PanelUI-fxa-status:not([disabled]):hover,
 #PanelUI-fxa-status:not([disabled]):hover:active,
 #PanelUI-fxa-icon:not([disabled]):hover,
 #PanelUI-fxa-icon:not([disabled]):hover:active {
   outline: none;
 }
 
 #PanelUI-footer-fxa[fxastatus="error"] {
-  background-color: hsla(42, 94%, 88%, 1.0);
-  border-top: 1px solid hsla(42, 94%, 70%, 1.0);
+  background-color: hsl(42,94%,88%);
+  border-top: 1px solid hsl(42,94%,70%);
 }
 
 #PanelUI-footer-fxa[fxastatus="error"] > #PanelUI-fxa-status:hover {
-  background-color: hsla(42, 94%, 85%, 1.0);
+  background-color: hsl(42,94%,85%);
 }
 
 #PanelUI-footer-fxa[fxastatus="error"] > #PanelUI-fxa-status:hover:active {
-  background-color: hsla(42, 94%, 82%, 1.0);
+  background-color: hsl(42,94%,82%);
   box-shadow: 0 1px 0 hsla(210,4%,10%,.05) inset;
 }
 
 #PanelUI-update-status {
   color: black;
 }
 
 #PanelUI-update-status[update-status="succeeded"] {
-  background-color: hsla(96, 65%, 75%, 0.5);
+  background-color: hsla(96,65%,75%,.5);
 }
 
 #PanelUI-update-status[update-status="succeeded"]:not([disabled]):hover {
-  background-color: hsla(96, 65%, 75%, 0.8);
+  background-color: hsla(96,65%,75%,.8);
 }
 
 #PanelUI-update-status[update-status="succeeded"]:not([disabled]):hover:active {
-  background-color: hsl(96, 65%, 75%);
+  background-color: hsl(96,65%,75%);
 }
 
 #PanelUI-update-status[update-status="failed"] {
-  background-color: hsla(359, 69%, 84%, 0.5);
+  background-color: hsla(359,69%,84%,.5);
 }
 
 #PanelUI-update-status[update-status="failed"]:not([disabled]):hover {
-  background-color: hsla(359, 69%, 84%, 0.8);
+  background-color: hsla(359,69%,84%,.8);
 }
 
 #PanelUI-update-status[update-status="failed"]:not([disabled]):hover:active {
-  background-color: hsl(359, 69%, 84%);
+  background-color: hsl(359,69%,84%);
 }
 
 #PanelUI-quit:not([disabled]):hover {
   background-color: #d94141;
   outline-color: #c23a3a;
 }
 
 #PanelUI-quit:not([disabled]):hover:active {
   background-color: #ad3434;
   outline-color: #992e2e;
 }
 
 #customization-panelHolder #PanelUI-customize {
   color: white;
-  background-color: rgb(116,191,67);
+  background-color: hsl(108,66%,30%);
   text-shadow: none;
   margin-top: -1px;
 }
 
 #customization-panelHolder #PanelUI-customize + toolbarseparator {
   display: none;
 }
 
-#customization-panelHolder #PanelUI-customize:hover,
+#customization-panelHolder #PanelUI-customize:hover {
+  background-color: hsl(109,65%,26%);
+}
+
 #customization-panelHolder #PanelUI-customize:hover:active {
-  background-color: rgb(105,173,61);
+  background-color: hsl(109,65%,22%);
 }
 
 #customization-palette .toolbarbutton-multiline-text,
 #customization-palette .toolbarbutton-text {
   display: none;
 }
 
 panelview .toolbarbutton-1,
 .subviewbutton,
 .widget-overflow-list .toolbarbutton-1,
 .panelUI-grid .toolbarbutton-1 > .toolbarbutton-menubutton-button,
 .share-provider-button,
 .toolbaritem-combined-buttons@inAnyPanel@ > toolbarbutton {
   -moz-appearance: none;
   padding: 0 6px;
-  background-color: hsla(210,4%,10%,0);
+  background-color: transparent;
   border-radius: 2px;
   border-style: solid;
-  border-color: hsla(210,4%,10%,0);
+  border-color: transparent;
 }
 
 panelview .toolbarbutton-1,
 .subviewbutton,
 .widget-overflow-list .toolbarbutton-1,
 .share-provider-button,
 .toolbaritem-combined-buttons@inAnyPanel@ > toolbarbutton {
   border-width: 1px;
@@ -1092,51 +1095,51 @@ panelview .toolbarbutton-1,
 
 panelview .toolbarbutton-1@buttonStateHover@,
 toolbarbutton.subviewbutton@buttonStateHover@,
 menu.subviewbutton@menuStateHover@,
 menuitem.subviewbutton@menuStateHover@,
 .share-provider-button@buttonStateHover@:not([checked="true"]),
 .widget-overflow-list .toolbarbutton-1@buttonStateHover@,
 .toolbaritem-combined-buttons@inAnyPanel@ > toolbarbutton@buttonStateHover@ {
-  background-color: hsla(210,4%,10%,.08);
-  border-color: hsla(210,4%,10%,.11);
+  background-color: var(--arrowpanel-dimmed);
+  border-color: var(--panel-separator-color);
 }
 
 .toolbaritem-combined-buttons@inAnyPanel@@buttonStateHover@ {
-  border-color: hsla(210,4%,10%,.11);
+  border-color: var(--panel-separator-color);
 }
 
 panelview .toolbarbutton-1:-moz-any(@buttonStateActive@,[checked=true]),
 toolbarbutton.subviewbutton@buttonStateActive@,
 menu.subviewbutton@menuStateActive@,
 menuitem.subviewbutton@menuStateActive@,
 .share-provider-button:-moz-any(@buttonStateActive@,[checked=true]),
 .widget-overflow-list .toolbarbutton-1@buttonStateActive@,
 .toolbaritem-combined-buttons@inAnyPanel@ > toolbarbutton@buttonStateActive@ {
-  background-color: hsla(210,4%,10%,.12);
+  background-color: var(--arrowpanel-dimmed-further);
   border-color: var(--panel-separator-color);
   box-shadow: 0 1px 0 hsla(210,4%,10%,.03) inset;
 }
 
 .subviewbutton.panel-subview-footer {
   margin: 4px -4px -4px;
-  background-color: hsla(210,4%,10%,.07);
+  background-color: var(--arrowpanel-dimmed);
   border-top: 1px solid var(--panel-separator-color);
   border-radius: 0;
 }
 
 menuitem.panel-subview-footer@menuStateHover@,
 .subviewbutton.panel-subview-footer@buttonStateHover@ {
-  background-color: hsla(210,4%,10%,.15);
+  background-color: var(--arrowpanel-dimmed-further);
 }
 
 menuitem.panel-subview-footer@menuStateActive@,
 .subviewbutton.panel-subview-footer@buttonStateActive@ {
-  background-color: hsla(210,4%,10%,.19);
+  background-color: var(--arrowpanel-dimmed-even-further);
   box-shadow: 0 1px 0 hsla(210,4%,10%,.05) inset;
 }
 
 #BMB_bookmarksPopup .subviewbutton {
   font: menu;
   font-weight: normal;
 }
 
@@ -1293,21 +1296,21 @@ toolbarpaletteitem[place="palette"] > .t
 }
 
 toolbarpaletteitem[place="palette"] > #search-container {
   min-width: 7em;
   width: 7em;
 }
 
 .toolbaritem-combined-buttons@inAnyPanel@ {
-  background-color: hsla(210,4%,10%,0);
+  background-color: transparent;
   border-radius: 2px;
   border: 1px solid;
-  border-color: hsla(210,4%,10%,0);
-  border-bottom-color: hsla(210,4%,10%,.1);
+  border-color: transparent;
+  border-bottom-color: var(--panel-separator-color);
   padding: 0;
   transition-property: background-color, border-color;
   transition-duration: 150ms;
 }
 
 /* Make direct siblings overlap borders: */
 .toolbaritem-combined-buttons + .toolbaritem-combined-buttons@inAnyPanel@ {
   border-top-color: transparent !important;
@@ -1476,17 +1479,17 @@ menuitem[checked="true"].subviewbutton >
 }
 
 #PanelUI-panicView.cui-widget-panelview {
   min-width: 280px;
 }
 
 #PanelUI-panic-timeframe {
   padding: 15px;
-  border-bottom: 1px solid rgba(0,0,0,0.1);
+  border-bottom: 1px solid var(--panel-separator-color);
 }
 
 #panic-button-success-icon,
 #PanelUI-panic-timeframe-icon,
 #PanelUI-panic-timeframe-icon-small {
   background-color: transparent;
   margin-inline-end: 10px;
 }
@@ -1535,24 +1538,24 @@ menuitem[checked="true"].subviewbutton >
   padding: 1px;
   margin: 0 0 2px;
   background-color: transparent;
   border-radius: 2px;
   border: 1px solid transparent;
 }
 
 .subviewradio@buttonStateHover@ {
-  background-color: hsla(210,4%,10%,.08);
+  background-color: var(--arrowpanel-dimmed);
   border-color: var(--panel-separator-color);
 }
 
 .subviewradio[selected],
 .subviewradio[selected]:hover,
 .subviewradio@buttonStateActive@ {
-  background-color: hsla(210,4%,10%,.12);
+  background-color: var(--arrowpanel-dimmed-further);
   border-color: var(--panel-separator-color);
   box-shadow: 0 1px 0 hsla(210,4%,10%,.03) inset;
 }
 
 .subviewradio > .radio-check {
   -moz-appearance: none;
   width: 16px;
   height: 16px;
--- a/browser/themes/shared/downloads/downloads.inc.css
+++ b/browser/themes/shared/downloads/downloads.inc.css
@@ -36,17 +36,17 @@
   padding: 16px 25px;
   margin: 0;
   /* The panel can be wider than this description after the blocked subview is
      shown, so center the text. */
   text-align: center;
 }
 
 .downloadsPanelFooter {
-  background-color: hsla(210,4%,10%,.07);
+  background-color: var(--arrowpanel-dimmed);
   border-top: 1px solid var(--panel-separator-color);
 }
 
 .downloadsPanelFooter toolbarseparator {
   margin: 0;
   border: 0;
   min-width: 0;
   border-left: 1px solid var(--panel-separator-color);
@@ -60,24 +60,24 @@
   margin: 0;
   padding: 0;
   min-width: 0;
   min-height: 40px;
   border: none;
 }
 
 .downloadsPanelFooterButton:hover {
-  outline: 1px solid hsla(210,4%,10%,.07);
-  background-color: hsla(210,4%,10%,.07);
+  outline: 1px solid var(--arrowpanel-dimmed);
+  background-color: var(--arrowpanel-dimmed);
 }
 
 .downloadsPanelFooterButton:hover:active,
 .downloadsPanelFooterButton[open="true"] {
-  outline: 1px solid hsla(210,4%,10%,.12);
-  background-color: hsla(210,4%,10%,.12);
+  outline: 1px solid var(--arrowpanel-dimmed-further);
+  background-color: var(--arrowpanel-dimmed-further);
   box-shadow: 0 1px 0 hsla(210,4%,10%,.05) inset;
 }
 
 .downloadsPanelFooterButton[default] {
   background-color: #0996f8;
   color: white;
 }
 
--- a/browser/themes/shared/jar.inc.mn
+++ b/browser/themes/shared/jar.inc.mn
@@ -64,16 +64,18 @@
   skin/classic/browser/heartbeat-star-lit.svg                  (../shared/heartbeat-star-lit.svg)
   skin/classic/browser/heartbeat-star-off.svg                  (../shared/heartbeat-star-off.svg)
   skin/classic/browser/identity-icon.svg                       (../shared/identity-block/identity-icon.svg)
   skin/classic/browser/identity-not-secure.svg                 (../shared/identity-block/identity-not-secure.svg)