Bug 1451024 - Cookie settings should be disabled when the related prefs are locked draft
authorKirk Steuber <ksteuber@mozilla.com>
Tue, 10 Apr 2018 15:05:42 -0700
changeset 781358 a320255459c504c47f1a00faa528fc86e3dcc00a
parent 781307 17dda59473c3d27d113dbd83ca0b198557b4e580
push id106278
push userksteuber@mozilla.com
push dateThu, 12 Apr 2018 20:59:27 +0000
bugs1451024
milestone61.0a1
Bug 1451024 - Cookie settings should be disabled when the related prefs are locked Also adds too the cookie tests to ensure this takes effect. MozReview-Commit-ID: A85kv20BcnI
browser/components/enterprisepolicies/tests/browser/browser_policy_cookie_settings.js
browser/components/preferences/in-content/privacy.js
--- a/browser/components/enterprisepolicies/tests/browser/browser_policy_cookie_settings.js
+++ b/browser/components/enterprisepolicies/tests/browser/browser_policy_cookie_settings.js
@@ -77,16 +77,36 @@ async function test_cookie_settings({
   }
   is(Services.cookies.countCookiesFromHost(firstPartyURI.host), expectedCookieCount,
      "Number of cookies was not what expected after restarting session");
 
   is(Services.prefs.prefIsLocked("network.cookie.cookieBehavior"), cookieSettingsLocked,
      "Cookie behavior pref lock status should be what is expected");
   is(Services.prefs.prefIsLocked("network.cookie.lifetimePolicy"), cookieSettingsLocked,
      "Cookie lifetime pref lock status should be what is expected");
+
+  let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:preferences");
+  // eslint-disable-next-line no-shadow
+  await ContentTask.spawn(tab.linkedBrowser, {cookiesEnabled, cookieSettingsLocked}, async function({cookiesEnabled, cookieSettingsLocked}) {
+    let acceptThirdPartyLabel = content.document.getElementById("acceptThirdPartyLabel");
+    let acceptThirdPartyMenu = content.document.getElementById("acceptThirdPartyMenu");
+    let keepUntilLabel = content.document.getElementById("keepUntil");
+    let keepUntilMenu = content.document.getElementById("keepCookiesUntil");
+
+    let expectControlsDisabled = !cookiesEnabled || cookieSettingsLocked;
+    is(acceptThirdPartyLabel.disabled, expectControlsDisabled,
+       "\"Accept Third Party Cookies\" Label disabled status should match expected");
+    is(acceptThirdPartyMenu.disabled, expectControlsDisabled,
+       "\"Accept Third Party Cookies\" Menu disabled status should match expected");
+    is(keepUntilLabel.disabled, expectControlsDisabled,
+       "\"Keep Cookies Until\" Label disabled status should match expected");
+    is(keepUntilMenu.disabled, expectControlsDisabled,
+       "\"Keep Cookies Until\" Menu disabled status should match expected");
+  });
+  BrowserTestUtils.removeTab(tab);
 }
 
 add_task(async function test_initial_state() {
   await test_cookie_settings({
     cookiesEnabled: true,
     thirdPartyCookiesEnabled: true,
     cookiesExpireAfterSession: false,
     cookieSettingsLocked: false
--- a/browser/components/preferences/in-content/privacy.js
+++ b/browser/components/preferences/in-content/privacy.js
@@ -821,33 +821,38 @@ var gPrivacyPane = {
       return Ci.nsICookieService.ACCEPT_NORMALLY;
     }
 
     return lifetimePolicy;
   },
 
   /**
    * Reads the network.cookie.cookieBehavior preference value and
-   * enables/disables the rest of the cookie UI accordingly, returning true
-   * if cookies are enabled.
+   * enables/disables the rest of the cookie UI accordingly.
+   *
+   * Returns "0" if cookies are accepted and "2" if they are entirely disabled.
    */
   readAcceptCookies() {
-    var pref = Preferences.get("network.cookie.cookieBehavior");
-    var acceptThirdPartyLabel = document.getElementById("acceptThirdPartyLabel");
-    var acceptThirdPartyMenu = document.getElementById("acceptThirdPartyMenu");
-    var keepUntil = document.getElementById("keepUntil");
-    var menu = document.getElementById("keepCookiesUntil");
+    let pref = Preferences.get("network.cookie.cookieBehavior");
+    let acceptThirdPartyLabel = document.getElementById("acceptThirdPartyLabel");
+    let acceptThirdPartyMenu = document.getElementById("acceptThirdPartyMenu");
+    let keepUntilLabel = document.getElementById("keepUntil");
+    let keepUntilMenu = document.getElementById("keepCookiesUntil");
 
     // enable the rest of the UI for anything other than "disable all cookies"
-    var acceptCookies = (pref.value != 2);
+    let acceptCookies = (pref.value != 2);
+    let cookieBehaviorLocked = Services.prefs.prefIsLocked("network.cookie.cookieBehavior");
+    const acceptThirdPartyControlsDisabled = !acceptCookies || cookieBehaviorLocked;
 
-    acceptThirdPartyLabel.disabled = acceptThirdPartyMenu.disabled = !acceptCookies;
+    acceptThirdPartyLabel.disabled = acceptThirdPartyMenu.disabled = acceptThirdPartyControlsDisabled;
 
     let privateBrowsing = Preferences.get("browser.privatebrowsing.autostart").value;
-    keepUntil.disabled = menu.disabled = privateBrowsing || !acceptCookies;
+    let cookieExpirationLocked = Services.prefs.prefIsLocked("network.cookie.lifetimePolicy");
+    const keepUntilControlsDisabled = privateBrowsing || !acceptCookies || cookieExpirationLocked;
+    keepUntilLabel.disabled = keepUntilMenu.disabled = keepUntilControlsDisabled;
 
     // Our top-level setting is a radiogroup that only sets "enable all"
     // and "disable all", so convert the pref value accordingly.
     return acceptCookies ? "0" : "2";
   },
 
   /**
    * Updates the "accept third party cookies" menu based on whether the