Merge mozilla-inbound to mozilla-central a=merge
authorRazvan Maries <rmaries@mozilla.com>
Mon, 24 Dec 2018 23:50:58 +0200
changeset 508985 b243a5a3fc64
parent 508977 68d308ba966c (current diff)
parent 508984 dec0ff3e2943 (diff)
child 508986 d2bc993e14ea
child 508994 147895cc0f25
child 509008 191dfb7c9ac3
push id10547
push userffxbld-merge
push dateMon, 21 Jan 2019 13:03:58 +0000
treeherdermozilla-beta@24ec1916bffe [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone66.0a1
first release with
nightly linux32
b243a5a3fc64 / 66.0a1 / 20181224215145 / files
nightly linux64
b243a5a3fc64 / 66.0a1 / 20181224215145 / files
nightly mac
b243a5a3fc64 / 66.0a1 / 20181224215145 / files
nightly win32
b243a5a3fc64 / 66.0a1 / 20181224215145 / files
nightly win64
b243a5a3fc64 / 66.0a1 / 20181224215145 / files
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
releases
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge mozilla-inbound to mozilla-central a=merge
browser/app/profile/firefox.js
browser/base/content/browser.js
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -1510,18 +1510,21 @@ pref("toolkit.telemetry.hybridContent.en
 pref("browser.ping-centre.telemetry", true);
 pref("browser.ping-centre.log", false);
 pref("browser.ping-centre.staging.endpoint", "https://onyx_tiles.stage.mozaws.net/v3/links/ping-centre");
 pref("browser.ping-centre.production.endpoint", "https://tiles.services.mozilla.com/v3/links/ping-centre");
 
 // Enable GMP support in the addon manager.
 pref("media.gmp-provider.enabled", true);
 
-// Enable blocking access to storage from tracking resources by default
+// Enable blocking access to storage from tracking resources only in nightly
+// and early beta. By default the value is 0: BEHAVIOR_ACCEPT
+#ifdef EARLY_BETA_OR_EARLIER
 pref("network.cookie.cookieBehavior", 4 /* BEHAVIOR_REJECT_TRACKER */);
+#endif
 
 pref("browser.contentblocking.allowlist.storage.enabled", true);
 
 pref("dom.storage_access.enabled", true);
 
 pref("dom.storage_access.auto_grants", true);
 pref("dom.storage_access.max_concurrent_auto_grants", 5);
 
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -809,48 +809,17 @@ var gPopupBlockerObserver = {
       for (let i = 0; i < popups.length; i++) {
         if (popups[i].popupWindowURIspec)
           aBrowser.unblockPopup(i);
       }
     }, null);
   },
 
   editPopupSettings() {
-    let prefillValue = "";
-    try {
-      // We use contentPrincipal rather than currentURI to get the right
-      // value in case this is a data: URI that's inherited off something else.
-      // Some principals don't have URIs, so fall back in case URI is not present.
-      let principalURI = gBrowser.contentPrincipal.URI || gBrowser.currentURI;
-      if (principalURI) {
-        // asciiHost conveniently doesn't throw.
-        if (principalURI.asciiHost) {
-          prefillValue = principalURI.prePath;
-        } else {
-          // For host-less URIs like file://, prePath would effectively allow
-          // popups everywhere on file://. Use the full spec:
-          prefillValue = principalURI.spec;
-        }
-      }
-    } catch (e) { }
-
-    var params = { blockVisible: false,
-                   sessionVisible: false,
-                   allowVisible: true,
-                   prefilledHost: prefillValue,
-                   permissionType: "popup",
-    };
-
-    var existingWindow = Services.wm.getMostRecentWindow("Browser:Permissions");
-    if (existingWindow) {
-      existingWindow.initWithParams(params);
-      existingWindow.focus();
-    } else
-      window.openDialog("chrome://browser/content/preferences/permissions.xul",
-                        "_blank", "resizable,dialog=no,centerscreen", params);
+    openPreferences("privacy-permissions-block-popups");
   },
 
   dontShowMessage() {
     var showMessage = Services.prefs.getBoolPref("privacy.popups.showBrowserMessage");
     Services.prefs.setBoolPref("privacy.popups.showBrowserMessage", !showMessage);
     gBrowser.getNotificationBox().removeCurrentNotification();
   },
 };
--- a/browser/components/enterprisepolicies/content/aboutPolicies.js
+++ b/browser/components/enterprisepolicies/content/aboutPolicies.js
@@ -281,20 +281,19 @@ function init() {
 
   let data = Services.policies.getActivePolicies();
   generateActivePolicies(data);
   generateErrors();
   generateDocumentation();
 
   // Event delegation on #categories element
   let menu = document.getElementById("categories");
-  menu.addEventListener("click", function click(e) {
-    if (e.target && e.target.parentNode == menu)
-      show(e.target);
-  });
+  for (let category of menu.children) {
+    category.addEventListener("click", () => show(category));
+  }
 
   if (location.hash) {
     let sectionButton = document.getElementById("category-" + location.hash.substring(1));
     if (sectionButton) {
       sectionButton.click();
     }
   }
 
@@ -318,17 +317,17 @@ function show(button) {
   content.classList.add("active");
   content.hidden = false;
 
   let current_button = document.querySelector("[selected=true]");
   current_button.removeAttribute("selected");
   button.setAttribute("selected", "true");
 
   let title = document.getElementById("sectionTitle");
-  title.textContent = button.children[0].textContent;
+  title.textContent = button.children[1].textContent;
   location.hash = category;
   restoreScrollPosition(category);
 }
 
 const scrollPositions = {};
 function saveScrollPosition(category) {
   const mainContent = document.querySelector(".main-content");
   scrollPositions[category] = mainContent.scrollTop;
--- a/browser/components/enterprisepolicies/content/aboutPolicies.xhtml
+++ b/browser/components/enterprisepolicies/content/aboutPolicies.xhtml
@@ -14,23 +14,26 @@
         <link rel="localization" href="browser/branding/sync-brand.ftl"/>
         <link rel="localization" href="browser/aboutPolicies.ftl"/>
         <link rel="localization" href="browser/policies/policies-descriptions.ftl"/>
         <script type="application/javascript" src="chrome://browser/content/policies/aboutPolicies.js" />
     </head>
     <body id="body" onload="init()">
         <div id="categories">
             <div class="category" selected="true" id="category-active">
-                <span class="category-name" data-l10n-id="active-policies-tab"/>
+                <img class="category-icon" src="chrome://browser/content/policies/policies-active.svg"></img>
+                <label class="category-name" data-l10n-id="active-policies-tab"></label>
             </div>
             <div class="category" id="category-documentation">
-                <span class="category-name" data-l10n-id="documentation-tab"/>
+                <img class="category-icon" src="chrome://browser/content/policies/policies-documentation.svg"></img>
+                <label class="category-name" data-l10n-id="documentation-tab"></label>
             </div>
             <div class="category" id="category-errors">
-                <span class="category-name" data-l10n-id="errors-tab"/>
+                <img class="category-icon" src="chrome://browser/content/policies/policies-error.svg"></img>
+                <label class="category-name" data-l10n-id="errors-tab"></label>
             </div>
         </div>
         <div class="main-content">
             <div class="header">
                 <div id="sectionTitle" class="header-name" data-l10n-id="active-policies-tab"/>
             </div>
 
             <div id="active" class="tab active">
new file mode 100644
--- /dev/null
+++ b/browser/components/enterprisepolicies/content/policies-active.svg
@@ -0,0 +1,3 @@
+<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg">
+    <path fill="context-fill" fill-opacity="context-fill-opacity" d="m11 10c-.5522847 0-1-.44771525-1-1v-4h-7v8c0 .5522847.44771525 1 1 1h2c.55228475 0 1 .4477153 1 1s-.44771525 1-1 1h-3c-1.1045695 0-2-.8954305-2-2v-10c0-1.1045695.8954305-2 2-2h1.05c.23659623-1.16516199 1.26105919-2.00250628 2.45-2.00250628s2.21340377.83734429 2.45 2.00250628h1.05c1.1045695 0 2 .8954305 2 2v5c0 .55228475-.4477153 1-1 1zm-1-6v-1h-1.051c-.47526862.000097-.88494628-.33433375-.98-.8-.14293517-.69793844-.7570756-1.19905191-1.4695-1.19905191s-1.32656483.50111347-1.4695 1.19905191c-.09505372.46566625-.50473138.800097-.98.8h-1.05v1zm-3.5-2c.27614237 0 .5.22385763.5.5s-.22385763.5-.5.5-.5-.22385763-.5-.5.22385763-.5.5-.5zm-2 5c-.27614237 0-.5-.22385763-.5-.5s.22385763-.5.5-.5h4c.27614237 0 .5.22385763.5.5s-.22385763.5-.5.5zm0 2c-.27614237 0-.5-.22385763-.5-.5s.22385763-.5.5-.5h2c.27614237 0 .5.22385763.5.5s-.22385763.5-.5.5zm0 2c-.27614237 0-.5-.2238576-.5-.5s.22385763-.5.5-.5h3c.27614237 0 .5.2238576.5.5s-.22385763.5-.5.5zm5.16250363 4.9969649c-.17706448-.0000378-.34686306-.070407-.47204764-.1956294l-2.00303103-2.003031c-.25303103-.2619823-.24941233-.6784164.00813326-.935962s.67397967-.2611643.93596203-.0081333l1.44017931 1.4401793 4.21704794-6.02444961c.2127301-.29815587.6259441-.36927468.9261129-.15939456.3001689.20988012.3752209.62239779.1682098.92455241l-4.6737391 6.67677006c-.1126024.1627768-.29162177.2672048-.48873957.2850981-.01935032.0009766-.03873758.0009766-.0580879 0z"/>
+</svg>
new file mode 100644
--- /dev/null
+++ b/browser/components/enterprisepolicies/content/policies-documentation.svg
@@ -0,0 +1,3 @@
+<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg">
+    <path fill="context-fill" fill-opacity="context-fill-opacity" d="m11 7.00250628c-.5522847 0-1-.44771525-1-1v-1h-7v8.00000002c0 .5522847.44771525 1 1 1h2c.55228475 0 1 .4477152 1 1 0 .5522847-.44771525 1-1 1h-3c-1.1045695 0-2-.8954305-2-2v-10.00000002c0-1.1045695.8954305-2 2-2h1.05c.23659623-1.16516199 1.26105919-2.00250628 2.45-2.00250628s2.21340377.83734429 2.45 2.00250628h1.05c1.1045695 0 2 .8954305 2 2v2c0 .55228475-.4477153 1-1 1zm-1-3v-1h-1.051c-.47526862.000097-.88494628-.33433374-.98-.8-.14293517-.69793844-.7570756-1.19905191-1.4695-1.19905191s-1.32656483.50111347-1.4695 1.19905191c-.09505372.46566626-.50473138.800097-.98.8h-1.05v1zm-3.5-2c.27614237 0 .5.22385763.5.5 0 .27614238-.22385763.5-.5.5s-.5-.22385762-.5-.5c0-.27614237.22385763-.5.5-.5zm-2 5c-.27614237 0-.5-.22385762-.5-.5 0-.27614237.22385763-.5.5-.5h4c.27614237 0 .5.22385763.5.5 0 .27614238-.22385763.5-.5.5zm0 2c-.27614237 0-.5-.22385762-.5-.5 0-.27614237.22385763-.5.5-.5h2c.27614237 0 .5.22385763.5.5 0 .27614238-.22385763.5-.5.5zm0 2.00000002c-.27614237 0-.5-.2238576-.5-.5s.22385763-.5.5-.5h1c.27614237 0 .5.2238576.5.5s-.22385763.5-.5.5zm6.5 4.9974937c-2.2092 0-4-1.7908-4-4s1.7908-4 4-4 4 1.7908 4 4-1.7908 4-4 4zm.46-2c0-.254051-.205949-.46-.46-.46s-.46.205949-.46.46.205949.46.46.46.46-.205949.46-.46zm-1.06-3c0-.3056.2464-.6.6-.6s.6.2944.6.6c0 .1244-.0576.254-.1632.3896-.0796.1016-.1544.172-.228.24-.0308.0288-.0612.0572-.092.0876-.0062816.0061251-.0126828.0121262-.0192.018-.052.0468-.1864.168-.2792.3028-.1304.1896-.2184.434-.2184.762 0 .2209139.1790861.4.4.4s.4-.1790861.4-.4c0-.1724.0424-.258.0776-.3088.0204-.0296.0456-.0576.0788-.09.016-.0156.032-.03.0516-.048l.0012-.0008.0036-.0032c.02-.018.0456-.0416.07-.0664l.0344-.032c.1262825-.1138504.2434416-.2374293.3504-.3696.16-.2048.3324-.5056.3324-.8812 0-.6944-.5536-1.4-1.4-1.4s-1.4.7056-1.4 1.4c0 .2209139.1790861.4.4.4s.4-.1790861.4-.4z"/>
+</svg>
new file mode 100644
--- /dev/null
+++ b/browser/components/enterprisepolicies/content/policies-error.svg
@@ -0,0 +1,3 @@
+<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg">
+    <path fill="context-fill" fill-opacity="context-fill-opacity" d="m11 7.00250628c-.5522847 0-1-.44771525-1-1v-1h-7v8.00000002c0 .5522847.44771525 1 1 1h1c.55228475 0 1 .4477152 1 1 0 .5522847-.44771525 1-1 1h-2c-1.1045695 0-2-.8954305-2-2v-10.00000002c0-1.1045695.8954305-2 2-2h1.05c.23659623-1.16516199 1.26105919-2.00250628 2.45-2.00250628s2.21340377.83734429 2.45 2.00250628h1.05c1.1045695 0 2 .8954305 2 2v2c0 .55228475-.4477153 1-1 1zm-1-3v-1h-1.051c-.47526862.000097-.88494628-.33433374-.98-.8-.14293517-.69793844-.7570756-1.19905191-1.4695-1.19905191s-1.32656483.50111347-1.4695 1.19905191c-.09505372.46566626-.50473138.800097-.98.8h-1.05v1zm-3.5-2c.27614237 0 .5.22385763.5.5 0 .27614238-.22385763.5-.5.5s-.5-.22385762-.5-.5c0-.27614237.22385763-.5.5-.5zm-2 5c-.27614237 0-.5-.22385762-.5-.5 0-.27614237.22385763-.5.5-.5h4c.27614237 0 .5.22385763.5.5 0 .27614238-.22385763.5-.5.5zm0 2c-.27614237 0-.5-.22385762-.5-.5 0-.27614237.22385763-.5.5-.5h3c.27614237 0 .5.22385763.5.5 0 .27614238-.22385763.5-.5.5zm0 2.00000002c-.27614237 0-.5-.2238576-.5-.5s.22385763-.5.5-.5h2c.27614237 0 .5.2238576.5.5s-.22385763.5-.5.5zm10.4094737 3.3385315c.1818196.3660605.1556801.8011195-.0686611 1.1427768-.2243412.3416572-.6131685.5385659-1.0213389.5172232h-5.70000002c-.39222659-.0104155-.75207561-.2200879-.95454083-.5561802-.20246523-.3360923-.21960272-.7522174-.04545917-1.1038198l2.85-5.69999999c.19423612-.39115456.59327402-.63853153 1.03000002-.63853153.4367259 0 .8357638.24737697 1.03.63853153zm-4.45-3.78v1.73c.0381214.2884432.2840486.5040066.575.5040066s.5368786-.2155634.575-.5040066v-1.73c.0295426-.2235324-.0731401-.4439283-.2632845-.56510838-.1901445-.12118005-.4332866-.12118005-.623431 0-.1901445.12118008-.2928271.34157598-.2632845.56510838zm.57 4.13c.3755536 0 .68-.3044464.68-.68 0-.2750343-.1656767-.522987-.4197753-.6282381s-.5465787-.0470731-.7410573.1474055c-.1944787.1944786-.2526566.4869588-.1474055.7410573.1052511.2540986.3532038.4197753.6282381.4197753z"/>
+</svg>
--- a/browser/components/enterprisepolicies/jar.mn
+++ b/browser/components/enterprisepolicies/jar.mn
@@ -1,8 +1,11 @@
 # 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/.
 
 browser.jar:
     content/browser/policies/aboutPolicies.css              (content/aboutPolicies.css)
     content/browser/policies/aboutPolicies.xhtml            (content/aboutPolicies.xhtml)
     content/browser/policies/aboutPolicies.js               (content/aboutPolicies.js)
+    content/browser/policies/policies-active.svg            (content/policies-active.svg)
+    content/browser/policies/policies-documentation.svg     (content/policies-documentation.svg)
+    content/browser/policies/policies-error.svg             (content/policies-error.svg)
--- a/browser/components/preferences/containers.xul
+++ b/browser/components/preferences/containers.xul
@@ -3,17 +3,16 @@
 <!-- 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/. -->
 
 <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
 <?xml-stylesheet href="chrome://browser/skin/preferences/containers.css" type="text/css"?>
 
 <window id="ContainersDialog"
-        windowtype="Browser:Permissions"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         data-l10n-attrs="title, style"
         onload="gContainersManager.onLoad();"
         onunload="gContainersManager.uninit();"
         persist="screenX screenY width height"
         onkeypress="gContainersManager.onWindowKeyPress(event);">
 
   <linkset>
--- a/browser/components/preferences/in-content/privacy.xul
+++ b/browser/components/preferences/in-content/privacy.xul
@@ -571,17 +571,17 @@
                                permissions-button-cancel.label,
                                permissions-button-ok.label,
                                permissions-exceptions-autoplay-media-window2.title,
                                permissions-exceptions-autoplay-media-desc2
                                " />
     </hbox>
   </hbox>
 
-  <hbox>
+  <hbox data-subcategory="permissions-block-popups">
     <checkbox id="popupPolicy" preference="dom.disable_open_during_load"
               data-l10n-id="permissions-block-popups"
               onsyncfrompreference="return gPrivacyPane.updateButtons('popupPolicyButton',
                                          'dom.disable_open_during_load');"
               flex="1" />
     <!-- Please don't remove the wrapping hbox/vbox/box for these elements. It's used to properly compute the search tooltip position. -->
     <hbox>
       <button id="popupPolicyButton"
--- a/browser/components/preferences/in-content/tests/browser_contentblocking.js
+++ b/browser/components/preferences/in-content/tests/browser_contentblocking.js
@@ -1,10 +1,13 @@
 /* eslint-env webextensions */
 
+ChromeUtils.defineModuleGetter(this, "Preferences",
+                               "resource://gre/modules/Preferences.jsm");
+
 const TP_PREF = "privacy.trackingprotection.enabled";
 const TP_PBM_PREF = "privacy.trackingprotection.pbmode.enabled";
 const TP_LIST_PREF = "urlclassifier.trackingTable";
 const NCB_PREF = "network.cookie.cookieBehavior";
 const CAT_PREF = "browser.contentblocking.category";
 
 requestLongerTimeout(2);
 
@@ -202,16 +205,17 @@ add_task(async function testContentBlock
 add_task(async function testContentBlockingCustomCategory() {
   let prefs = [TP_LIST_PREF, TP_PREF, TP_PBM_PREF, NCB_PREF];
 
   await openPreferencesViaOpenPreferencesAPI("privacy", {leaveOpen: true});
   let doc = gBrowser.contentDocument;
   let strictRadioOption = doc.getElementById("strictRadio");
   let standardRadioOption = doc.getElementById("standardRadio");
   let customRadioOption = doc.getElementById("customRadio");
+  let defaults = new Preferences({defaultBranch: true});
 
   standardRadioOption.click();
   await TestUtils.waitForCondition(() => !Services.prefs.prefHasUserValue(TP_PREF));
 
   customRadioOption.click();
   await TestUtils.waitForCondition(() => Services.prefs.getStringPref(CAT_PREF) == "custom");
   // The custom option does not force changes of any prefs, other than CAT_PREF, all other TP prefs should remain as they were for standard.
   for (let pref of prefs) {
@@ -226,17 +230,30 @@ add_task(async function testContentBlock
   Services.prefs.setBoolPref(TP_PREF, false);
   await TestUtils.waitForCondition(() => !Services.prefs.prefHasUserValue(TP_PREF));
   is(Services.prefs.getStringPref(CAT_PREF), "custom", `${CAT_PREF} has been set to custom`);
 
   strictRadioOption.click();
   await TestUtils.waitForCondition(() => Services.prefs.getStringPref(CAT_PREF) == "strict");
 
   // Changing the NCB_PREF should necessarily set CAT_PREF to "custom"
-  Services.prefs.setIntPref(NCB_PREF, Ci.nsICookieService.BEHAVIOR_ACCEPT);
+  let defaultNCB = defaults.get(NCB_PREF);
+  let nonDefaultNCB;
+  switch (defaultNCB) {
+  case Ci.nsICookieService.BEHAVIOR_ACCEPT:
+    nonDefaultNCB = Ci.nsICookieService.BEHAVIOR_REJECT;
+    break;
+  case Ci.nsICookieService.BEHAVIOR_REJECT_TRACKER:
+    nonDefaultNCB = Ci.nsICookieService.BEHAVIOR_ACCEPT;
+    break;
+  default:
+    ok(false, "Unexpected default value found for " + NCB_PREF + ": " + defaultNCB);
+    break;
+  }
+  Services.prefs.setIntPref(NCB_PREF, nonDefaultNCB);
   await TestUtils.waitForCondition(() => Services.prefs.prefHasUserValue(NCB_PREF));
   is(Services.prefs.getStringPref(CAT_PREF), "custom", `${CAT_PREF} has been set to custom`);
 
   gBrowser.removeCurrentTab();
 });
 
 function checkControlState(doc, controls, enabled) {
   for (let selector of controls) {
--- a/browser/components/preferences/in-content/tests/browser_spotlight.js
+++ b/browser/components/preferences/in-content/tests/browser_spotlight.js
@@ -1,67 +1,38 @@
-
-add_task(async function test_reports_section() {
-  let prefs = await openPreferencesViaOpenPreferencesAPI("privacy-reports", {leaveOpen: true});
-  is(prefs.selectedPane, "panePrivacy", "Privacy pane is selected by default");
-  let doc = gBrowser.contentDocument;
-  is(doc.location.hash, "#privacy", "The subcategory should be removed from the URI");
-  await TestUtils.waitForCondition(() => doc.querySelector(".spotlight"),
-    "Wait for the reports section is spotlighted.");
-  is(doc.querySelector(".spotlight").getAttribute("data-subcategory"), "reports",
-    "The reports section is spotlighted.");
-  BrowserTestUtils.removeTab(gBrowser.selectedTab);
-});
+add_task(async function test_openPreferences_spotlight() {
+  for (let [arg, expectedPane, expectedHash, expectedSubcategory] of [
+    ["privacy-reports",
+     "panePrivacy", "#privacy", "reports"],
+    ["privacy-address-autofill",
+     "panePrivacy", "#privacy", "address-autofill"],
+    ["privacy-credit-card-autofill",
+     "panePrivacy", "#privacy", "credit-card-autofill"],
+    ["privacy-form-autofill",
+     "panePrivacy", "#privacy", "form-autofill"],
+    ["privacy-trackingprotection",
+     "panePrivacy", "#privacy", "trackingprotection"],
+    ["privacy-permissions-block-popups",
+     "panePrivacy", "#privacy", "permissions-block-popups"],
+  ]) {
+    if (arg == "privacy-credit-card-autofill" &&
+        !Services.prefs.getBoolPref("extensions.formautofill.creditCards.available")) {
+      continue;
+    }
 
-add_task(async function test_address_autofill_section() {
-  let prefs = await openPreferencesViaOpenPreferencesAPI("privacy-address-autofill", {leaveOpen: true});
-  is(prefs.selectedPane, "panePrivacy", "Privacy pane is selected by default");
-  let doc = gBrowser.contentDocument;
-  is(doc.location.hash, "#privacy", "The subcategory should be removed from the URI");
-  await TestUtils.waitForCondition(() => doc.querySelector(".spotlight"),
-    "Wait for the address-autofill section is spotlighted.");
-  is(doc.querySelector(".spotlight").getAttribute("data-subcategory"), "address-autofill",
-    "The address-autofill section is spotlighted.");
-  BrowserTestUtils.removeTab(gBrowser.selectedTab);
-});
+    let prefs =
+        await openPreferencesViaOpenPreferencesAPI(arg, { leaveOpen: true });
+    is(prefs.selectedPane, expectedPane, "The right pane is selected");
+    let doc = gBrowser.contentDocument;
+    is(doc.location.hash, expectedHash,
+       "The subcategory should be removed from the URI");
+    await TestUtils.waitForCondition(() => doc.querySelector(".spotlight"),
+                                     "Wait for the spotlight");
+    is(doc.querySelector(".spotlight").getAttribute("data-subcategory"),
+       expectedSubcategory, "The right subcategory is spotlighted");
 
-add_task(async function test_credit_card_autofill_section() {
-  if (!Services.prefs.getBoolPref("extensions.formautofill.creditCards.available")) {
-    return;
+    doc.defaultView.spotlight(null);
+    is(doc.querySelector(".spotlight"), null,
+       "The spotlighted section is cleared");
+
+    BrowserTestUtils.removeTab(gBrowser.selectedTab);
   }
-  let prefs = await openPreferencesViaOpenPreferencesAPI("privacy-credit-card-autofill", {leaveOpen: true});
-  is(prefs.selectedPane, "panePrivacy", "Privacy pane is selected by default");
-  let doc = gBrowser.contentDocument;
-  is(doc.location.hash, "#privacy", "The subcategory should be removed from the URI");
-  await TestUtils.waitForCondition(() => doc.querySelector(".spotlight"),
-    "Wait for the credit-card-autofill section is spotlighted.");
-  is(doc.querySelector(".spotlight").getAttribute("data-subcategory"), "credit-card-autofill",
-    "The credit-card-autofill section is spotlighted.");
-  BrowserTestUtils.removeTab(gBrowser.selectedTab);
 });
-
-add_task(async function test_form_autofill_section() {
-  let prefs = await openPreferencesViaOpenPreferencesAPI("privacy-form-autofill", {leaveOpen: true});
-  is(prefs.selectedPane, "panePrivacy", "Privacy pane is selected by default");
-  let doc = gBrowser.contentDocument;
-  is(doc.location.hash, "#privacy", "The subcategory should be removed from the URI");
-  await TestUtils.waitForCondition(() => doc.querySelector(".spotlight"),
-    "Wait for the form-autofill section is spotlighted.");
-  is(doc.querySelector(".spotlight").getAttribute("data-subcategory"), "form-autofill",
-    "The form-autofill section is spotlighted.");
-  BrowserTestUtils.removeTab(gBrowser.selectedTab);
-});
-
-add_task(async function test_change_cookie_settings() {
-  let prefs = await openPreferencesViaOpenPreferencesAPI("privacy-trackingprotection", {leaveOpen: true});
-  is(prefs.selectedPane, "panePrivacy", "Privacy pane is selected by default");
-  let doc = gBrowser.contentDocument;
-  is(doc.location.hash, "#privacy", "The subcategory should be removed from the URI");
-  await TestUtils.waitForCondition(() => doc.querySelector(".spotlight"),
-    "Wait for the content-blocking section to be spotlighted.");
-  is(doc.querySelector(".spotlight").getAttribute("data-subcategory"), "trackingprotection",
-    "The tracking-protection section is spotlighted.");
-  doc.defaultView.spotlight(null);
-  is(doc.querySelector(".spotlight"), null,
-    "The spotlighted section is cleared.");
-
-  BrowserTestUtils.removeTab(gBrowser.selectedTab);
-});
--- a/browser/components/preferences/permissions.js
+++ b/browser/components/preferences/permissions.js
@@ -435,12 +435,8 @@ var gPermissionManager = {
       c.removeAttribute("data-isCurrentSortCol");
       c.removeAttribute("sortDirection");
     });
     column.setAttribute("data-isCurrentSortCol", "true");
     column.setAttribute("sortDirection", sortDirection);
     column.setAttribute("data-last-sortDirection", sortDirection);
   },
 };
-
-function initWithParams(params) {
-  gPermissionManager.init(params);
-}
--- a/browser/components/preferences/permissions.xul
+++ b/browser/components/preferences/permissions.xul
@@ -4,17 +4,16 @@
    - 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/. -->
 
 <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
 <?xml-stylesheet href="chrome://browser/content/preferences/sitePermissions.css" type="text/css"?>
 <?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css" type="text/css"?>
 
 <window id="PermissionsDialog"
-        windowtype="Browser:Permissions"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         data-l10n-id="permissions-window"
         data-l10n-attrs="title, style"
         onload="gPermissionManager.onLoad();"
         onunload="gPermissionManager.uninit();"
         persist="screenX screenY width height"
         onkeypress="gPermissionManager.onWindowKeyPress(event);">
 
--- a/devtools/client/inspector/grids/test/browser.ini
+++ b/devtools/client/inspector/grids/test/browser.ini
@@ -27,17 +27,17 @@ skip-if = (verify && (os == 'win' || os 
 [browser_grids_grid-list-on-mutation-element-removed.js]
 [browser_grids_grid-list-toggle-grids_01.js]
 [browser_grids_grid-list-toggle-grids_02.js]
 [browser_grids_grid-list-toggle-multiple-grids.js]
 [browser_grids_grid-outline-cannot-show-outline.js]
 [browser_grids_grid-outline-highlight-area.js]
 skip-if = (verify && (os == 'win')) || (os == "win" && os_version == "10.0" && !debug) #Bug 1501760
 [browser_grids_grid-outline-highlight-cell.js]
-skip-if = (verify && (os == 'win'))
+skip-if = (verify && (os == 'win')) || (os == "win" && os_version == "10.0" && asan) #Bug 1501317
 [browser_grids_grid-outline-multiple-grids.js]
 [browser_grids_grid-outline-selected-grid.js]
 [browser_grids_grid-outline-updates-on-grid-change.js]
 [browser_grids_grid-outline-writing-mode.js]
 skip-if = (verify && (os == 'win'))
 [browser_grids_highlighter-setting-rules-grid-toggle.js]
 [browser_grids_highlighter-toggle-telemetry.js]
 [browser_grids_number-of-css-grids-telemetry.js]
--- a/js/xpconnect/src/XPCConvert.cpp
+++ b/js/xpconnect/src/XPCConvert.cpp
@@ -1136,17 +1136,17 @@ bool XPCConvert::JSObject2NativeInterfac
   // attach it to the wrapper. Note that we allow a maximum of one
   // aggregated native for a given XPCWrappedJS.
   if (aOuter) {
     wrapper->SetAggregatedNativeObject(aOuter);
   }
 
   // We need to go through the QueryInterface logic to make this return
   // the right thing for the various 'special' interfaces; e.g.
-  // nsIPropertyBag. We must use AggregatedQueryInterface in cases where
+  // nsISimpleEnumerator. We must use AggregatedQueryInterface in cases where
   // there is an outer to avoid nasty recursion.
   rv = aOuter ? wrapper->AggregatedQueryInterface(*iid, dest)
               : wrapper->QueryInterface(*iid, dest);
   if (pErr) {
     *pErr = rv;
   }
   return NS_SUCCEEDED(rv);
 }
--- a/js/xpconnect/src/XPCForwards.h
+++ b/js/xpconnect/src/XPCForwards.h
@@ -48,11 +48,9 @@ class nsXPCComponents_Classes;
 class nsXPCComponents_Results;
 class nsXPCComponents_ID;
 class nsXPCComponents_Exception;
 class nsXPCComponents_Constructor;
 class nsXPCComponents_Utils;
 
 class AutoMarkingPtr;
 
-class xpcProperty;
-
 #endif /* xpcforwards_h___ */
--- a/js/xpconnect/src/XPCWrappedJS.cpp
+++ b/js/xpconnect/src/XPCWrappedJS.cpp
@@ -661,44 +661,16 @@ size_t nsXPCWrappedJS::SizeOfIncludingTh
   }
 
   return n;
 }
 
 /***************************************************************************/
 
 NS_IMETHODIMP
-nsXPCWrappedJS::GetEnumerator(nsISimpleEnumerator** aEnumerate) {
-  AutoJSContext cx;
-  XPCCallContext ccx(cx);
-  if (!ccx.IsValid()) {
-    return NS_ERROR_UNEXPECTED;
-  }
-
-  RootedObject scope(cx, GetJSObjectGlobal());
-  return nsXPCWrappedJSClass::BuildPropertyEnumerator(ccx, GetJSObject(), scope,
-                                                      aEnumerate);
-}
-
-NS_IMETHODIMP
-nsXPCWrappedJS::GetProperty(const nsAString& name, nsIVariant** _retval) {
-  AutoJSContext cx;
-  XPCCallContext ccx(cx);
-  if (!ccx.IsValid()) {
-    return NS_ERROR_UNEXPECTED;
-  }
-
-  RootedObject scope(cx, GetJSObjectGlobal());
-  return nsXPCWrappedJSClass::GetNamedPropertyAsVariant(ccx, GetJSObject(),
-                                                        scope, name, _retval);
-}
-
-/***************************************************************************/
-
-NS_IMETHODIMP
 nsXPCWrappedJS::DebugDump(int16_t depth) {
 #ifdef DEBUG
   XPC_LOG_ALWAYS(
       ("nsXPCWrappedJS @ %p with mRefCnt = %" PRIuPTR, this, mRefCnt.get()));
   XPC_LOG_INDENT();
 
   XPC_LOG_ALWAYS(("%s wrapper around JSObject @ %p",
                   IsRootWrapper() ? "ROOT" : "non-root", mJSObj.get()));
--- a/js/xpconnect/src/XPCWrappedJSClass.cpp
+++ b/js/xpconnect/src/XPCWrappedJSClass.cpp
@@ -256,146 +256,16 @@ JSObject* nsXPCWrappedJSClass::CallQuery
 
   if (success) success = JS_ValueToObject(cx, retval, &retObj);
 
   return success ? retObj.get() : nullptr;
 }
 
 /***************************************************************************/
 
-static bool GetNamedPropertyAsVariantRaw(XPCCallContext& ccx,
-                                         HandleObject aJSObj, HandleId aName,
-                                         nsIVariant** aResult, nsresult* pErr) {
-  nsXPTType type = {TD_INTERFACE_TYPE};
-  RootedValue val(ccx);
-
-  return JS_GetPropertyById(ccx, aJSObj, aName, &val) &&
-         XPCConvert::JSData2Native(ccx, aResult, val, type,
-                                   &NS_GET_IID(nsIVariant), 0, pErr);
-}
-
-// static
-nsresult nsXPCWrappedJSClass::GetNamedPropertyAsVariant(XPCCallContext& ccx,
-                                                        JSObject* aJSObjArg,
-                                                        HandleObject scope,
-                                                        const nsAString& aName,
-                                                        nsIVariant** aResult) {
-  JSContext* cx = ccx.GetJSContext();
-  RootedObject aJSObj(cx, aJSObjArg);
-
-  AutoScriptEvaluate scriptEval(cx);
-  if (!scriptEval.StartEvaluating(scope)) {
-    return NS_ERROR_FAILURE;
-  }
-
-  // Wrap the string in a Value after the AutoScriptEvaluate, so that the
-  // resulting value ends up in the correct compartment.
-  nsStringBuffer* buf;
-  RootedValue value(cx);
-  if (!XPCStringConvert::ReadableToJSVal(ccx, aName, &buf, &value)) {
-    return NS_ERROR_OUT_OF_MEMORY;
-  }
-  if (buf) {
-    buf->AddRef();
-  }
-
-  RootedId id(cx);
-  nsresult rv = NS_OK;
-  if (!JS_ValueToId(cx, value, &id) ||
-      !GetNamedPropertyAsVariantRaw(ccx, aJSObj, id, aResult, &rv)) {
-    if (NS_FAILED(rv)) {
-      return rv;
-    }
-    return NS_ERROR_FAILURE;
-  }
-  return NS_OK;
-}
-
-/***************************************************************************/
-
-// static
-nsresult nsXPCWrappedJSClass::BuildPropertyEnumerator(
-    XPCCallContext& ccx, JSObject* aJSObjArg, HandleObject scope,
-    nsISimpleEnumerator** aEnumerate) {
-  JSContext* cx = ccx.GetJSContext();
-  RootedObject aJSObj(cx, aJSObjArg);
-
-  AutoScriptEvaluate scriptEval(cx);
-  if (!scriptEval.StartEvaluating(aJSObj)) {
-    return NS_ERROR_FAILURE;
-  }
-
-  Rooted<IdVector> idArray(cx, IdVector(cx));
-  if (!JS_Enumerate(cx, aJSObj, &idArray)) {
-    return NS_ERROR_FAILURE;
-  }
-
-  nsCOMArray<nsIProperty> propertyArray(idArray.length());
-  RootedId idName(cx);
-  for (size_t i = 0; i < idArray.length(); i++) {
-    idName = idArray[i];
-
-    nsCOMPtr<nsIVariant> value;
-    nsresult rv;
-    if (!GetNamedPropertyAsVariantRaw(ccx, aJSObj, idName,
-                                      getter_AddRefs(value), &rv)) {
-      if (NS_FAILED(rv)) {
-        return rv;
-      }
-      return NS_ERROR_FAILURE;
-    }
-
-    RootedValue jsvalName(cx);
-    if (!JS_IdToValue(cx, idName, &jsvalName)) {
-      return NS_ERROR_FAILURE;
-    }
-
-    JSString* name = ToString(cx, jsvalName);
-    if (!name) {
-      return NS_ERROR_FAILURE;
-    }
-
-    nsAutoJSString autoStr;
-    if (!autoStr.init(cx, name)) {
-      return NS_ERROR_FAILURE;
-    }
-
-    nsCOMPtr<nsIProperty> property =
-        new xpcProperty(autoStr.get(), (uint32_t)autoStr.Length(), value);
-
-    if (!propertyArray.AppendObject(property)) {
-      return NS_ERROR_FAILURE;
-    }
-  }
-
-  return NS_NewArrayEnumerator(aEnumerate, propertyArray,
-                               NS_GET_IID(nsIProperty));
-}
-
-/***************************************************************************/
-
-NS_IMPL_ISUPPORTS(xpcProperty, nsIProperty)
-
-xpcProperty::xpcProperty(const char16_t* aName, uint32_t aNameLen,
-                         nsIVariant* aValue)
-    : mName(aName, aNameLen), mValue(aValue) {}
-
-NS_IMETHODIMP xpcProperty::GetName(nsAString& aName) {
-  aName.Assign(mName);
-  return NS_OK;
-}
-
-NS_IMETHODIMP xpcProperty::GetValue(nsIVariant** aValue) {
-  nsCOMPtr<nsIVariant> rval = mValue;
-  rval.forget(aValue);
-  return NS_OK;
-}
-
-/***************************************************************************/
-
 namespace {
 
 class WrappedJSNamed final : public nsINamed {
   nsCString mName;
 
   ~WrappedJSNamed() {}
 
  public:
@@ -484,30 +354,16 @@ nsXPCWrappedJSClass::DelegatedQueryInter
                                              REFNSIID aIID,
                                              void** aInstancePtr) {
   if (aIID.Equals(NS_GET_IID(nsIXPConnectJSObjectHolder))) {
     NS_ADDREF(self);
     *aInstancePtr = (void*)static_cast<nsIXPConnectJSObjectHolder*>(self);
     return NS_OK;
   }
 
-  if (aIID.Equals(NS_GET_IID(nsIPropertyBag))) {
-    // We only want to expose one implementation from our aggregate.
-    nsXPCWrappedJS* root = self->GetRootWrapper();
-
-    if (!root->IsValid()) {
-      *aInstancePtr = nullptr;
-      return NS_NOINTERFACE;
-    }
-
-    NS_ADDREF(root);
-    *aInstancePtr = (void*)static_cast<nsIPropertyBag*>(root);
-    return NS_OK;
-  }
-
   // We can't have a cached wrapper.
   if (aIID.Equals(NS_GET_IID(nsWrapperCache))) {
     *aInstancePtr = nullptr;
     return NS_NOINTERFACE;
   }
 
   // QI on an XPCWrappedJS can run script, so we need an AutoEntryScript.
   // This is inherently Gecko-specific.
@@ -619,17 +475,17 @@ nsXPCWrappedJSClass::DelegatedQueryInter
     // XPConvert::JSObject2NativeInterface() here to make sure we
     // get a new (or used) nsXPCWrappedJS.
     RefPtr<nsXPCWrappedJS> wrapper;
     nsresult rv =
         nsXPCWrappedJS::GetNewOrUsed(ccx, jsobj, aIID, getter_AddRefs(wrapper));
     if (NS_SUCCEEDED(rv) && wrapper) {
       // We need to go through the QueryInterface logic to make
       // this return the right thing for the various 'special'
-      // interfaces; e.g.  nsIPropertyBag.
+      // interfaces; e.g.  nsISimpleEnumerator.
       rv = wrapper->QueryInterface(aIID, aInstancePtr);
       return rv;
     }
   }
 
   // If we're asked to QI to nsINamed, we pretend that this is possible. We'll
   // try to return a name that makes sense for the wrapped JS value.
   if (aIID.Equals(NS_GET_IID(nsINamed))) {
--- a/js/xpconnect/src/XPCWrappedNative.cpp
+++ b/js/xpconnect/src/XPCWrappedNative.cpp
@@ -982,19 +982,16 @@ nsresult XPCWrappedNative::InitTearOff(X
   // JSObject and our XPCWrappedNativeProto's JSObject. If we let this
   // set mutation happen then the interface's methods will be added to
   // our JSObject, but calls on those methods will get routed up to
   // native code and into the wrappedJS - which will do a method lookup
   // on *our* JSObject and find the same method and make another call
   // into an infinite loop.
   // see: http://bugzilla.mozilla.org/show_bug.cgi?id=96725
 
-  // The code in this block also does a check for the double wrapped
-  // nsIPropertyBag case.
-
   nsCOMPtr<nsIXPConnectWrappedJS> wrappedJS(do_QueryInterface(qiResult));
   if (wrappedJS) {
     RootedObject jso(cx, wrappedJS->GetJSObject());
     if (jso == mFlatJSObject) {
       // The implementing JSObject is the same as ours! Just say OK
       // without actually extending the set.
       //
       // XXX It is a little cheesy to have FindTearOff return an
@@ -1004,42 +1001,16 @@ nsresult XPCWrappedNative::InitTearOff(X
       // actual tearoff returned. The only callers that do use the
       // returned tearoff make sure to check for either a non-null
       // JSObject or a matching Interface before proceeding.
       // I think we can get away with this bit of ugliness.
 
       aTearOff->SetInterface(nullptr);
       return NS_OK;
     }
-
-    // Decide whether or not to expose nsIPropertyBag to calling
-    // JS code in the double wrapped case.
-    //
-    // Our rule here is that when JSObjects are double wrapped and
-    // exposed to other JSObjects then the nsIPropertyBag interface
-    // is only exposed on an 'opt-in' basis; i.e. if the underlying
-    // JSObject wants other JSObjects to be able to see this interface
-    // then it must implement QueryInterface and not throw an exception
-    // when asked for nsIPropertyBag. It need not actually *implement*
-    // nsIPropertyBag - xpconnect will do that work.
-
-    if (iid->Equals(NS_GET_IID(nsIPropertyBag)) && jso) {
-      RootedObject jsoGlobal(cx, wrappedJS->GetJSObjectGlobal());
-      RefPtr<nsXPCWrappedJSClass> clasp =
-          nsXPCWrappedJSClass::GetNewOrUsed(cx, *iid);
-      if (clasp) {
-        RootedObject answer(
-            cx, clasp->CallQueryInterfaceOnJSObject(cx, jso, jsoGlobal, *iid));
-
-        if (!answer) {
-          aTearOff->SetInterface(nullptr);
-          return NS_ERROR_NO_INTERFACE;
-        }
-      }
-    }
   }
 
   if (NS_FAILED(nsXPConnect::SecurityManager()->CanCreateWrapper(
           cx, *iid, identity, GetClassInfo()))) {
     // the security manager vetoed. It should have set an exception.
     aTearOff->SetInterface(nullptr);
     return NS_ERROR_XPC_SECURITY_MANAGER_VETO;
   }
--- a/js/xpconnect/src/xpcprivate.h
+++ b/js/xpconnect/src/xpcprivate.h
@@ -125,17 +125,16 @@
 #include "nsString.h"
 #include "nsReadableUtils.h"
 
 #include "MainThreadUtils.h"
 
 #include "nsIConsoleService.h"
 
 #include "nsVariant.h"
-#include "nsIPropertyBag.h"
 #include "nsIProperty.h"
 #include "nsCOMArray.h"
 #include "nsTArray.h"
 #include "nsBaseHashtable.h"
 #include "nsHashKeys.h"
 #include "nsWrapperCache.h"
 #include "nsStringBuffer.h"
 #include "nsDataHashtable.h"
@@ -1648,26 +1647,16 @@ class nsXPCWrappedJSClass final : public
   JSObject* GetRootJSObject(JSContext* cx, JSObject* aJSObj);
 
   NS_IMETHOD CallMethod(nsXPCWrappedJS* wrapper, uint16_t methodIndex,
                         const nsXPTMethodInfo* info, nsXPTCMiniVariant* params);
 
   JSObject* CallQueryInterfaceOnJSObject(JSContext* cx, JSObject* jsobj,
                                          JS::HandleObject scope, REFNSIID aIID);
 
-  static nsresult BuildPropertyEnumerator(XPCCallContext& ccx, JSObject* aJSObj,
-                                          JS::HandleObject scope,
-                                          nsISimpleEnumerator** aEnumerate);
-
-  static nsresult GetNamedPropertyAsVariant(XPCCallContext& ccx,
-                                            JSObject* aJSObj,
-                                            JS::HandleObject scope,
-                                            const nsAString& aName,
-                                            nsIVariant** aResult);
-
  private:
   // aObj is the nsXPCWrappedJS's object. We used this as the callee (or |this|
   // if getter or setter).
   // aSyntheticException, if not null, is the exception we should be using.
   // If null, look for an exception on the JSContext hanging off the
   // XPCCallContext.
   static nsresult CheckForException(
       XPCCallContext& ccx, mozilla::dom::AutoEntryScript& aes,
@@ -1712,25 +1701,23 @@ class nsXPCWrappedJSClass final : public
 /*************************/
 // nsXPCWrappedJS is a wrapper for a single JSObject for use from native code.
 // nsXPCWrappedJS objects are chained together to represent the various
 // interface on the single underlying (possibly aggregate) JSObject.
 
 class nsXPCWrappedJS final : protected nsAutoXPTCStub,
                              public nsIXPConnectWrappedJSUnmarkGray,
                              public nsSupportsWeakReference,
-                             public nsIPropertyBag,
                              public XPCRootSetElem {
  public:
   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
   NS_DECL_NSIXPCONNECTJSOBJECTHOLDER
   NS_DECL_NSIXPCONNECTWRAPPEDJS
   NS_DECL_NSIXPCONNECTWRAPPEDJSUNMARKGRAY
   NS_DECL_NSISUPPORTSWEAKREFERENCE
-  NS_DECL_NSIPROPERTYBAG
 
   NS_DECL_CYCLE_COLLECTION_SKIPPABLE_CLASS_AMBIGUOUS(nsXPCWrappedJS,
                                                      nsIXPConnectWrappedJS)
 
   NS_IMETHOD CallMethod(uint16_t methodIndex, const nsXPTMethodInfo* info,
                         nsXPTCMiniVariant* params) override;
 
   /*
@@ -1833,30 +1820,16 @@ class nsXPCWrappedJS final : protected n
 /***************************************************************************
 ****************************************************************************
 *
 * All manner of utility classes follow...
 *
 ****************************************************************************
 ***************************************************************************/
 
-class xpcProperty : public nsIProperty {
- public:
-  NS_DECL_ISUPPORTS
-  NS_DECL_NSIPROPERTY
-
-  xpcProperty(const char16_t* aName, uint32_t aNameLen, nsIVariant* aValue);
-
- private:
-  virtual ~xpcProperty() {}
-
-  nsString mName;
-  nsCOMPtr<nsIVariant> mValue;
-};
-
 namespace xpc {
 
 // A wrapper around JS iterators which presents an equivalent
 // nsISimpleEnumerator interface for their contents.
 class XPCWrappedJSIterator final : public nsISimpleEnumerator {
  public:
   NS_DECL_CYCLE_COLLECTION_CLASS(XPCWrappedJSIterator)
   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
--- a/modules/libpref/init/all.js
+++ b/modules/libpref/init/all.js
@@ -1281,17 +1281,17 @@ pref("dom.popup_allowed_events", "change
 
 pref("dom.disable_open_click_delay", 1000);
 pref("dom.serviceWorkers.disable_open_click_delay", 1000);
 
 pref("dom.storage.enabled", true);
 // Whether or not LSNG (Next Generation Local Storage) is enabled.
 // See bug 1510410 for enabling this on Nightly.
 #ifdef NIGHTLY_BUILD
-pref("dom.storage.next_gen", true);
+pref("dom.storage.next_gen", false);
 #else
 pref("dom.storage.next_gen", false);
 #endif
 pref("dom.storage.default_quota",      5120);
 pref("dom.storage.shadow_writes", true);
 pref("dom.storage.snapshot_prefill", 16384);
 pref("dom.storage.snapshot_reusing", true);
 pref("dom.storage.testing", false);
--- a/netwerk/protocol/http/nsHttpConnectionMgr.cpp
+++ b/netwerk/protocol/http/nsHttpConnectionMgr.cpp
@@ -30,17 +30,17 @@
 #include "nsITransport.h"
 #include "nsInterfaceRequestorAgg.h"
 #include "nsIRequestContext.h"
 #include "nsISocketTransportService.h"
 #include <algorithm>
 #include "mozilla/ChaosMode.h"
 #include "mozilla/Unused.h"
 #include "nsIURI.h"
-#include "nsIPropertyBag.h"
+#include "nsIXPConnect.h"
 
 #include "mozilla/Move.h"
 #include "mozilla/Telemetry.h"
 
 namespace mozilla {
 namespace net {
 
 //-----------------------------------------------------------------------------
@@ -536,18 +536,17 @@ class nsCompleteUpgradeData : public ARe
 
  private:
   virtual ~nsCompleteUpgradeData() = default;
 };
 
 nsresult nsHttpConnectionMgr::CompleteUpgrade(
     nsAHttpConnection *aConn, nsIHttpUpgradeListener *aUpgradeListener) {
   // test if aUpgradeListener is a wrapped JsObject
-  // bit of a HACK
-  nsCOMPtr<nsIPropertyBag> wrapper = do_QueryInterface(aUpgradeListener);
+  nsCOMPtr<nsIXPConnectWrappedJS> wrapper = do_QueryInterface(aUpgradeListener);
 
   bool wrapped = !!wrapper;
 
   RefPtr<nsCompleteUpgradeData> data =
       new nsCompleteUpgradeData(aConn, aUpgradeListener, wrapped);
   return PostEvent(&nsHttpConnectionMgr::OnMsgCompleteUpgrade, 0, data);
 }