[Pkg-mozext-commits] [requestpolicy] 245/257: [fix] subscriptions: enable regardless of default policy

David Prévot taffit at moszumanska.debian.org
Thu Jan 28 03:20:18 UTC 2016


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository requestpolicy.

commit 83f82b9b888ff5d6777e3ac4f873c259816058eb
Author: Martin Kimmerle <dev at 256k.de>
Date:   Fri Dec 25 22:28:45 2015 +0100

    [fix] subscriptions: enable regardless of default policy
    
    Resolves #529.
---
 src/content/lib/subscription.jsm                   | 20 +-------
 src/content/main/requestpolicy-service.jsm         | 17 +++----
 src/content/settings/common.js                     | 51 --------------------
 src/content/settings/defaultpolicy.js              |  6 ---
 src/content/settings/setup.js                      |  7 +--
 src/content/settings/subscriptions.js              | 45 ------------------
 tests/marionette/rp_puppeteer/tests/manifest.ini   |  1 +
 .../tests/test_subscriptions_settings.py           | 48 +++++++++++++++++++
 .../rp_puppeteer/ui/settings/__init__.py           |  4 ++
 .../rp_puppeteer/ui/settings/subscriptions.py      | 55 ++++++++++++++++++++++
 tests/marionette/tests/settings/manifest.ini       |  1 +
 .../tests/settings/test_subscriptions.py           | 54 +++++++++++++++++++++
 12 files changed, 176 insertions(+), 133 deletions(-)

diff --git a/src/content/lib/subscription.jsm b/src/content/lib/subscription.jsm
index eb74ff5..122f55c 100644
--- a/src/content/lib/subscription.jsm
+++ b/src/content/lib/subscription.jsm
@@ -125,7 +125,7 @@ UserSubscriptions.prototype = {
     FileUtil.stringToFile(JSON.stringify(this._data), userSubsFile);
   },
 
-  getSubscriptionInfo: function(defaultPolicy) {
+  getSubscriptionInfo: function() {
     var lists = this._data.lists;
     var result = {};
     for (var listName in lists) {
@@ -134,12 +134,6 @@ UserSubscriptions.prototype = {
       }
       result[listName] = {};
       for (let subName in lists[listName].subscriptions) {
-        if (defaultPolicy === "allow" && subName.indexOf("allow_") === 0) {
-          continue;
-        }
-        if (defaultPolicy === "deny" && subName.indexOf("deny_") === 0) {
-          continue;
-        }
         result[listName][subName] = null;
       }
     }
@@ -172,7 +166,7 @@ UserSubscriptions.prototype = {
   // make a big fat mess of the code, or more likely I'm just not good at
   // making it not a mess. On the other hand, this parallelizes the update
   // requests, though that may not be a great thing in this case.
-  update: function(callback, serials, defaultPolicy) {
+  update: function(callback, serials) {
     var updatingLists = {};
     var updateResults = {};
 
@@ -207,16 +201,6 @@ UserSubscriptions.prototype = {
               " " + subName);
           continue;
         }
-        if (defaultPolicy === "allow" && subName.indexOf("allow_") === 0) {
-          dprint("Skipping update of subscription that is only used " +
-              "with a default deny policy: " + subName);
-          continue;
-        }
-        if (defaultPolicy === "deny" && subName.indexOf("deny_") === 0) {
-          dprint("Skipping update of subscription that is only used " +
-              "with a default allow policy: " + subName);
-          continue;
-        }
         updateSubs[subName] = {"serial": serials[listName][subName]};
         subCount++;
       }
diff --git a/src/content/main/requestpolicy-service.jsm b/src/content/main/requestpolicy-service.jsm
index 2b1dcc6..23f54b7 100644
--- a/src/content/main/requestpolicy-service.jsm
+++ b/src/content/main/requestpolicy-service.jsm
@@ -22,7 +22,7 @@
  */
 
 /* global Components */
-const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
+const {utils: Cu} = Components;
 
 /* exported rpService */
 this.EXPORTED_SYMBOLS = ["rpService"];
@@ -37,7 +37,6 @@ let {Prefs} = importModule("models/prefs");
 let {PolicyManager} = importModule("lib/policy-manager");
 let {UserSubscriptions, SUBSCRIPTION_UPDATED_TOPIC, SUBSCRIPTION_ADDED_TOPIC,
      SUBSCRIPTION_REMOVED_TOPIC} = importModule("lib/subscription");
-let {C} = importModule("lib/utils/constants");
 let {Environment, ProcessEnvironment} = importModule("lib/environment");
 let {WindowUtils} = importModule("lib/utils/windows");
 let {Info} = importModule("lib/utils/info");
@@ -63,10 +62,8 @@ var rpService = (function() {
     subscriptions = new UserSubscriptions();
     PolicyManager.loadUserRules();
 
-    let defaultPolicy = Prefs.isDefaultAllow() ? "allow" : "deny";
-
     let failures = PolicyManager.loadSubscriptionRules(
-        subscriptions.getSubscriptionInfo(defaultPolicy));
+        subscriptions.getSubscriptionInfo());
     // TODO: check a preference that indicates the last time we checked for
     // updates. Don't do it if we've done it too recently.
     // TODO: Maybe we should probably ship snapshot versions of the official
@@ -92,7 +89,7 @@ var rpService = (function() {
       Logger.info(Logger.TYPE_INTERNAL,
           "Subscription updates completed: " + result);
     }
-    subscriptions.update(updateCompleted, serials, defaultPolicy);
+    subscriptions.update(updateCompleted, serials);
   }
 
   // TODO: move to window manager
@@ -281,6 +278,10 @@ var rpService = (function() {
 
   self.observe = function(subject, topic, data) {
     switch (topic) {
+
+      // FIXME: The subscription logic should reside in the
+      // subscription module.
+
       case SUBSCRIPTION_UPDATED_TOPIC: {
         Logger.debug(Logger.TYPE_INTERNAL, "XXX updated: " + data);
         // TODO: check if the subscription is enabled. The user might have
@@ -328,13 +329,13 @@ var rpService = (function() {
         break;
 
       // support for old browsers (Firefox <20)
-      case "private-browsing" :
+      case "private-browsing":
         if (data === "exit") {
           PolicyManager.revokeTemporaryRules();
         }
         break;
 
-      default :
+      default:
         Logger.warning(Logger.TYPE_ERROR, "unknown topic observed: " + topic);
     }
   };
diff --git a/src/content/settings/common.js b/src/content/settings/common.js
index 1900f17..b633832 100644
--- a/src/content/settings/common.js
+++ b/src/content/settings/common.js
@@ -5,14 +5,9 @@ var {common, WinEnv, elManager, $id, $str} = (function() {
   /* global Components */
   const {utils: Cu} = Components;
 
-  var {Services} = Cu.import("resource://gre/modules/Services.jsm", {});
-
   var {ScriptLoader: {importModule}} = Cu.import(
       "chrome://rpcontinued/content/lib/script-loader.jsm", {});
   var {StringUtils} = importModule("lib/utils/strings");
-  var {Prefs} = importModule("models/prefs");
-  var {UserSubscriptions, SUBSCRIPTION_ADDED_TOPIC,
-       SUBSCRIPTION_REMOVED_TOPIC} = importModule("lib/subscription");
   var {Environment, ProcessEnvironment} = importModule("lib/environment");
 
   //============================================================================
@@ -40,52 +35,6 @@ var {common, WinEnv, elManager, $id, $str} = (function() {
 
   var common = {};
 
-  /*
-   Based on the user's current default policy (allow or deny), swaps out which
-   subscriptions are enabled. That is, each subscription are either intended to be
-   used with a default allow or a default policy policy. So, if this has changed
-   then calling this function will disable/enable the correct subscriptions.
-   */
-  // TODO: rename this function.
-  common.switchSubscriptionPolicies = function() {
-    var subscriptions = new UserSubscriptions();
-
-    var newDefaultPolicy = Prefs.isDefaultAllow() ? "allow" : "deny";
-    var oldDefaultPolicy = Prefs.isDefaultAllow() ? "deny" : "allow";
-
-    var listName;
-    var subName;
-    var subInfo;
-
-    var oldSubInfo = subscriptions.getSubscriptionInfo(oldDefaultPolicy);
-    for (listName in oldSubInfo) {
-      for (subName in oldSubInfo[listName]) {
-        if (!subName.startsWith("allow_") && subName.startsWith("deny_")) {
-          continue;
-        }
-        subInfo = {};
-        subInfo[listName] = {};
-        subInfo[listName][subName] = true;
-        Services.obs.notifyObservers(null, SUBSCRIPTION_REMOVED_TOPIC,
-            JSON.stringify(subInfo));
-      }
-    }
-
-    var newSubInfo = subscriptions.getSubscriptionInfo(newDefaultPolicy);
-    for (listName in newSubInfo) {
-      for (subName in newSubInfo[listName]) {
-        if (!subName.startsWith("allow_") && !subName.startsWith("deny_")) {
-          continue;
-        }
-        subInfo = {};
-        subInfo[listName] = {};
-        subInfo[listName][subName] = true;
-        Services.obs.notifyObservers(null, SUBSCRIPTION_ADDED_TOPIC,
-            JSON.stringify(subInfo));
-      }
-    }
-  };
-
   /**
    * Get a string representation of an endpoint (origin or dest) specification.
    *
diff --git a/src/content/settings/defaultpolicy.js b/src/content/settings/defaultpolicy.js
index aa61b5d..1fcd8f2 100644
--- a/src/content/settings/defaultpolicy.js
+++ b/src/content/settings/defaultpolicy.js
@@ -56,9 +56,6 @@
           var allow = event.target.checked;
           Prefs.set("defaultPolicy.allow", allow);
           Services.prefs.savePrefFile(null);
-          // Reload all subscriptions because it's likely that different
-          // subscriptions will now be active.
-          common.switchSubscriptionPolicies();
           updateDisplay();
           showManageSubscriptionsLink();
         });
@@ -69,9 +66,6 @@
           var deny = event.target.checked;
           Prefs.set("defaultPolicy.allow", !deny);
           Services.prefs.savePrefFile(null);
-          // Reload all subscriptions because it's likely that different
-          // subscriptions will now be active.
-          common.switchSubscriptionPolicies();
           updateDisplay();
           showManageSubscriptionsLink();
         });
diff --git a/src/content/settings/setup.js b/src/content/settings/setup.js
index 1c12ac5..4bcffc1 100644
--- a/src/content/settings/setup.js
+++ b/src/content/settings/setup.js
@@ -48,7 +48,6 @@
         $id("defaultallow").checked);
     Services.prefs.savePrefFile(null);
     setAllowSameDomainBlockDisplay();
-    handleSubscriptionsChange();
   }
 
   function handleAllowSameDomainChange() {
@@ -67,8 +66,6 @@
 
   function handleSubscriptionsChange() {
     var enableSubs = $id("enablesubs").checked;
-    var enableAllowSubs = enableSubs && $id("defaultdeny").checked;
-    var enableDenySubs = enableSubs && $id("defaultallow").checked;
     var subs = {
       "allow_embedded": {},
       "allow_extensions": {},
@@ -82,8 +79,8 @@
       var subInfo = {};
       subInfo.official = {};
       subInfo.official[subName] = true;
-      if (enableAllowSubs && subName.startsWith("allow_") ||
-          enableDenySubs && subName.startsWith("deny_")) {
+      // FIXME: Add a pref to disable subscriptions globally (#713)
+      if (enableSubs) {
         userSubs.addSubscription("official", subName);
         Services.obs.notifyObservers(null, SUBSCRIPTION_ADDED_TOPIC,
             JSON.stringify(subInfo));
diff --git a/src/content/settings/subscriptions.js b/src/content/settings/subscriptions.js
index f93887a..9640909 100644
--- a/src/content/settings/subscriptions.js
+++ b/src/content/settings/subscriptions.js
@@ -8,7 +8,6 @@
 
   var {ScriptLoader: {importModule}} = Cu.import(
       "chrome://rpcontinued/content/lib/script-loader.jsm", {});
-  var {Prefs} = importModule("models/prefs");
   var {Logger} = importModule("lib/logger");
   var {SUBSCRIPTION_ADDED_TOPIC, SUBSCRIPTION_REMOVED_TOPIC} =
       importModule("lib/subscription");
@@ -38,30 +37,6 @@
     common.localize(PAGE_STRINGS);
   });
 
-  /**
-   * @param {String} policy
-   *                 "allow" or "deny"
-   */
-  function getDefaultPolicyElements(policy) {
-    var selector = "[data-defaultpolicy=" + policy + "]";
-    var matches = document.body.querySelectorAll(selector);
-    var elements = Array.prototype.slice.call(matches);
-    return elements;
-  }
-
-  function displayDefaultPolicyElements(policy, display) {
-    // note: display could be undefined.
-    display = display === false ? false : true;
-    var elements = getDefaultPolicyElements(policy);
-    for (var i = 0, len = elements.length; i < len; i++) {
-      if (display) {
-        elements[i].removeAttribute("style");
-      } else {
-        elements[i].style.display = "none";
-      }
-    }
-  }
-
   function getInputElement(subName) {
     var elements = document.body.querySelectorAll(
         "input[name=" + subName + "]");
@@ -92,18 +67,6 @@
       var element = allSubElements[i];
       element.input.checked = element.id in subsInfo.official;
     }
-
-    var currentPolicy;
-    var otherPolicy;
-    if (Prefs.isDefaultAllow()) {
-      currentPolicy = "allow";
-      otherPolicy = "deny";
-    } else {
-      currentPolicy = "deny";
-      otherPolicy = "allow";
-    }
-    displayDefaultPolicyElements(currentPolicy, true);
-    displayDefaultPolicyElements(otherPolicy, false);
   }
 
   function handleSubscriptionCheckboxChange(event) {
@@ -145,14 +108,6 @@
       elManager.addListener(el, "change", handleSubscriptionCheckboxChange);
     }
 
-    var selector = "[data-defaultpolicy=" +
-      (Prefs.isDefaultAllow() ? "deny" : "allow") + "]";
-    var matches = document.body.querySelectorAll(selector);
-    var hideElements = Array.prototype.slice.call(matches);
-    for (var i = 0; i < hideElements.length; i++) {
-      hideElements[i].style.display = "none";
-    }
-
     // call updateDisplay() every time a subscription is added or removed
     WinEnv.obMan.observe([
       SUBSCRIPTION_ADDED_TOPIC,
diff --git a/tests/marionette/rp_puppeteer/tests/manifest.ini b/tests/marionette/rp_puppeteer/tests/manifest.ini
index 2831a72..01999f8 100644
--- a/tests/marionette/rp_puppeteer/tests/manifest.ini
+++ b/tests/marionette/rp_puppeteer/tests/manifest.ini
@@ -8,6 +8,7 @@
 [test_requests.py]
 [test_rules.py]
 [test_rules_table.py]
+[test_subscriptions_settings.py]
 [test_tabs.py]
 [test_web_utils.py]
 [test_your_policy.py]
diff --git a/tests/marionette/rp_puppeteer/tests/test_subscriptions_settings.py b/tests/marionette/rp_puppeteer/tests/test_subscriptions_settings.py
new file mode 100644
index 0000000..97d5bab
--- /dev/null
+++ b/tests/marionette/rp_puppeteer/tests/test_subscriptions_settings.py
@@ -0,0 +1,48 @@
+# 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/.
+
+from rp_ui_harness import RequestPolicyTestCase
+
+
+class TestSubscriptionsSettings(RequestPolicyTestCase):
+
+    def setUp(self):
+        super(TestSubscriptionsSettings, self).setUp()
+        self.marionette.set_context("content")
+
+    def tearDown(self):
+        try:
+            self.marionette.set_context("chrome")
+        finally:
+            super(TestSubscriptionsSettings, self).tearDown()
+
+    ################
+    # Test Methods #
+    ################
+
+    def test_open(self):
+        self.marionette.navigate("about:blank")
+        self.assertNotEqual(self.marionette.get_url(),
+                            "about:requestpolicy?subscriptions")
+        self.settings.subscriptions.open()
+        self.assertEqual(self.marionette.get_url(),
+                         "about:requestpolicy?subscriptions")
+
+    def test_enable_disable(self):
+        def test(sub_name):
+            self.assertFalse(self.settings.subscriptions.is_enabled(sub_name))
+            self.settings.subscriptions.enable(sub_name)
+            self.assertTrue(self.settings.subscriptions.is_enabled(sub_name))
+            self.settings.subscriptions.disable(sub_name)
+            self.assertFalse(self.settings.subscriptions.is_enabled(sub_name))
+
+        self.settings.subscriptions.open()
+        self.settings.subscriptions.disable_all()
+
+        test("allow_embedded")
+        test("allow_extensions")
+        test("allow_functionality")
+        test("allow_mozilla")
+        test("allow_sameorg")
+        test("deny_trackers")
diff --git a/tests/marionette/rp_puppeteer/ui/settings/__init__.py b/tests/marionette/rp_puppeteer/ui/settings/__init__.py
index a0b6a07..608bc8d 100644
--- a/tests/marionette/rp_puppeteer/ui/settings/__init__.py
+++ b/tests/marionette/rp_puppeteer/ui/settings/__init__.py
@@ -12,6 +12,10 @@ class Settings(BaseLib):
     def old_rules(self):
         pass
 
+    @use_class_as_property('ui.settings.subscriptions.SubscriptionsSettings')
+    def subscriptions(self):
+        pass
+
     @use_class_as_property('ui.settings.your_policy.YourPolicy')
     def your_policy(self):
         pass
diff --git a/tests/marionette/rp_puppeteer/ui/settings/subscriptions.py b/tests/marionette/rp_puppeteer/ui/settings/subscriptions.py
new file mode 100644
index 0000000..99976b7
--- /dev/null
+++ b/tests/marionette/rp_puppeteer/ui/settings/subscriptions.py
@@ -0,0 +1,55 @@
+# 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/.
+
+from rp_puppeteer.base import BaseLib
+import time
+
+
+class SubscriptionsSettings(BaseLib):
+
+    #################################
+    # Public Properties and Methods #
+    #################################
+
+    def open(self):
+        self.marionette.navigate("about:requestpolicy?subscriptions")
+
+    def enable(self, subscription_name):
+        if not self.is_enabled(subscription_name):
+            self.toggle(subscription_name)
+
+    def disable(self, subscription_name):
+        if self.is_enabled(subscription_name):
+            self.toggle(subscription_name)
+
+    def is_enabled(self, subscription_name):
+        return self._get(subscription_name).get_attribute("checked")
+
+    def toggle(self, subscription_name):
+        self._get(subscription_name).click()
+        # Wait for the subscriptions to be ready.
+        # FIXME: Use API for detection, as soon as there is such an API.
+        time.sleep(1)
+
+    def enable_all(self):
+        for name in self.AVAILABLE_SUBSCRIPTIONS:
+            self.enable(name)
+
+    def disable_all(self):
+        for name in self.AVAILABLE_SUBSCRIPTIONS:
+            self.disable(name)
+
+    ##################################
+    # Private Properties and Methods #
+    ##################################
+
+    AVAILABLE_SUBSCRIPTIONS = [
+        "allow_embedded", "allow_extensions", "allow_functionality",
+        "allow_mozilla", "allow_sameorg", "deny_trackers"
+    ]
+
+    def _get(self, subscription_name):
+        return (self.marionette
+                .find_element("css selector",
+                              "input[name={}]".format(subscription_name)))
diff --git a/tests/marionette/tests/settings/manifest.ini b/tests/marionette/tests/settings/manifest.ini
index 82b2450..511d4d6 100644
--- a/tests/marionette/tests/settings/manifest.ini
+++ b/tests/marionette/tests/settings/manifest.ini
@@ -1 +1,2 @@
+[test_subscriptions.py]
 [test_your_policy.py]
diff --git a/tests/marionette/tests/settings/test_subscriptions.py b/tests/marionette/tests/settings/test_subscriptions.py
new file mode 100644
index 0000000..f68f0b0
--- /dev/null
+++ b/tests/marionette/tests/settings/test_subscriptions.py
@@ -0,0 +1,54 @@
+# 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/.
+
+from rp_ui_harness import RequestPolicyTestCase
+
+
+class TestSubscriptionsSettings(RequestPolicyTestCase):
+
+    def setUp(self):
+        super(TestSubscriptionsSettings, self).setUp()
+        self.marionette.set_context("content")
+
+    def tearDown(self):
+        try:
+            self.marionette.set_context("chrome")
+        finally:
+            super(TestSubscriptionsSettings, self).tearDown()
+
+    ################
+    # Test Methods #
+    ################
+
+    def test_subscription_contains_rules(self):
+        def count_rules():
+            return self.settings.your_policy.rules_table.count_rules()
+
+        def test(sub_name):
+            # assert no rules
+            self.settings.your_policy.open()
+            self.assertEqual(0, count_rules())
+
+            # enable
+            self.settings.subscriptions.open()
+            self.settings.subscriptions.enable(sub_name)
+
+            # assert rules
+            self.settings.your_policy.open()
+            self.assertGreater(count_rules(), 0)
+
+            # disable
+            self.settings.subscriptions.open()
+            self.settings.subscriptions.disable(sub_name)
+
+            # assert no rules
+            self.settings.your_policy.open()
+            self.assertEqual(0, count_rules())
+
+        self.settings.subscriptions.open()
+        self.settings.subscriptions.disable_all()
+
+        test("allow_functionality")
+        test("allow_sameorg")
+        test("deny_trackers")

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/requestpolicy.git



More information about the Pkg-mozext-commits mailing list