[Pkg-mozext-commits] [requestpolicy] 118/280: RP Menu: Hide permanent rules in Private Windows

David Prévot taffit at moszumanska.debian.org
Sat May 2 20:30:09 UTC 2015


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

taffit pushed a commit to branch master
in repository requestpolicy.

commit e17c52d45afaa1f64d8b81da1e05cc113d29b22e
Author: Martin Kimmerle <dev at 256k.de>
Date:   Tue Jan 6 14:48:36 2015 +0100

    RP Menu: Hide permanent rules in Private Windows
    
    for details see #533
---
 src/content/lib/utils/windows.jsm          | 33 ++++++++++++++++++++++++++
 src/content/main/requestpolicy-service.jsm | 37 ++++++++++--------------------
 src/content/ui/menu.js                     | 32 ++++++++++++++++----------
 3 files changed, 65 insertions(+), 37 deletions(-)

diff --git a/src/content/lib/utils/windows.jsm b/src/content/lib/utils/windows.jsm
index 52197a1..ce38ef9 100644
--- a/src/content/lib/utils/windows.jsm
+++ b/src/content/lib/utils/windows.jsm
@@ -55,6 +55,39 @@ let WindowUtils = (function() {
                     .getInterface(Ci.nsIDOMWindow);
   };
 
+  //
+  // Private Browsing
+  //
+
+  // depending on the Firefox vesion, create the `isWindowPrivate` function
+  self.isWindowPrivate = (function() {
+    try {
+      // Firefox 20+
+      Components.utils.import("resource://gre/modules/PrivateBrowsingUtils.jsm");
+
+      return (function(aWindow) {
+        return PrivateBrowsingUtils.isWindowPrivate(aWindow)
+      });
+    } catch(e) {
+      // pre Firefox 20
+      try {
+        let pbs = Cc["@mozilla.org/privatebrowsing;1"]
+            .getService(Ci.nsIPrivateBrowsingService);
+
+        return (function(aWindow) {
+          return pbs.privateBrowsingEnabled;
+        });
+      } catch(e) {
+        Components.utils.reportError(e);
+        // It's uncertain if private browsing is possible at all, so assume
+        // that Private Browsing is not possible.
+        return (function(aWindow) {
+          return true;
+        });
+      }
+    }
+  }());
+
 
   //
   // Window & DOM utilities
diff --git a/src/content/main/requestpolicy-service.jsm b/src/content/main/requestpolicy-service.jsm
index 5eefc4d..2179cc8 100644
--- a/src/content/main/requestpolicy-service.jsm
+++ b/src/content/main/requestpolicy-service.jsm
@@ -116,17 +116,7 @@ let rpService = (function() {
     subscriptions.update(updateCompleted, serials, defaultPolicy);
   }
 
-  // TODO: fix this
-  function initializePrivateBrowsing() {
-    try {
-      var pbs = Cc["@mozilla.org/privatebrowsing;1"].
-          getService(Ci.nsIPrivateBrowsingService);
-      self._privateBrowsingEnabled = pbs.privateBrowsingEnabled;
-    } catch (e) {
-      // Ignore exceptions from browsers that do not support private browsing.
-    }
-  }
-
+  // TODO: move to window manager
   function showWelcomeWindow() {
     if (!rpPrefBranch.getBoolPref("welcomeWindowShown")) {
       var url = "about:requestpolicy?setup";
@@ -165,10 +155,14 @@ let rpService = (function() {
   ProcessEnvironment.enqueueStartupFunction(function() {
     ProcessEnvironment.obMan.observe({
       "sessionstore-windows-restored": self.observe,
-      "private-browsing": self.observe,
       SUBSCRIPTION_UPDATED_TOPIC: self.observe,
       SUBSCRIPTION_ADDED_TOPIC: self.observe,
-      SUBSCRIPTION_REMOVED_TOPIC: self.observe
+      SUBSCRIPTION_REMOVED_TOPIC: self.observe,
+
+      // support for old browsers (Firefox <20)
+      // TODO: support per-window temporary rules
+      //       see https://github.com/RequestPolicyContinued/requestpolicy/issues/533#issuecomment-68851396
+      "private-browsing": self.observe
     });
   });
 
@@ -186,13 +180,6 @@ let rpService = (function() {
 
 
   self = {
-    // TODO: private windows instead.
-    _privateBrowsingEnabled : false,
-
-
-    isPrivateBrowsingEnabled: function() {
-      return self._privateBrowsingEnabled;
-    },
     getSubscriptions: function() {
       return subscriptions;
     },
@@ -250,16 +237,16 @@ let rpService = (function() {
         case "sessionstore-windows-restored":
           showWelcomeWindow();
           break;
+
+        // support for old browsers (Firefox <20)
         case "private-browsing" :
-          if (data == "enter") {
-            self._privateBrowsingEnabled = true;
-          } else if (data == "exit") {
-            self._privateBrowsingEnabled = false;
+          if (data == "exit") {
             PolicyManager.revokeTemporaryRules();
           }
           break;
+
         default :
-          Logger.warning(Logger.TYPE_ERROR, "uknown topic observed: " + topic);
+          Logger.warning(Logger.TYPE_ERROR, "unknown topic observed: " + topic);
       }
     },
   };
diff --git a/src/content/ui/menu.js b/src/content/ui/menu.js
index f1cb44f..d50cad7 100644
--- a/src/content/ui/menu.js
+++ b/src/content/ui/menu.js
@@ -47,6 +47,7 @@ requestpolicy.menu = (function() {
        GUILocation, GUILocationProperties} = iMod("lib/gui-location");
   let {StringUtils} = iMod("lib/utils/strings");
   let {DOMUtils} = iMod("lib/utils/dom");
+  let {WindowUtils} = iMod("lib/utils/windows");
   let {rpService} = iMod("main/requestpolicy-service");
   let {C} = iMod("lib/utils/constants");
 
@@ -97,6 +98,16 @@ requestpolicy.menu = (function() {
     }
   };
 
+
+  /**
+   * „Should be permanent rules be displayed or hidden?“
+   */
+  function mayPermRulesBeDisplayed() {
+    return WindowUtils.isWindowPrivate(window) &&
+        !rpPrefBranch.getBoolPref("privateBrowsingPermanentWhitelisting");
+  }
+
+
   self.prepareMenu = function() {
     try {
       var disabled = Prefs.isBlockingDisabled();
@@ -145,9 +156,6 @@ requestpolicy.menu = (function() {
             .getAllRequestsInBrowser(gBrowser.selectedBrowser);
       self._allRequestsOnDocument.print("_allRequestsOnDocument");
 
-      self._privateBrowsingEnabled = rpService.isPrivateBrowsingEnabled()
-          && !rpPrefBranch.getBoolPref("privateBrowsingPermanentWhitelisting");
-
       self._setPrivateBrowsingStyles();
 
   //      var hidePrefetchInfo = !Prefs.isPrefetchEnabled();
@@ -349,13 +357,13 @@ requestpolicy.menu = (function() {
       if (Prefs.isDefaultAllow()) {
         // It seems pretty rare that someone will want to add a rule to block all
         // requests from a given origin.
-        //if (!self._privateBrowsingEnabled) {
+        //if (mayPermRulesBeDisplayed() === true) {
         //  var item = self._addMenuItemDenyOrigin(
         //    self._addRulesList, ruleData);
         //}
         //var item = self._addMenuItemTempDenyOrigin(self._addRulesList, ruleData);
       } else {
-        if (!self._privateBrowsingEnabled) {
+        if (mayPermRulesBeDisplayed() === true) {
           var item = self._addMenuItemAllowOrigin(self._addRulesList, ruleData);
         }
         var item = self._addMenuItemTempAllowOrigin(self._addRulesList, ruleData);
@@ -380,7 +388,7 @@ requestpolicy.menu = (function() {
         //  -- this enables support for blacklisting.
         if (!PolicyManager.ruleExists(C.RULE_ACTION_ALLOW, ruleData) &&
             !PolicyManager.ruleExists(C.RULE_ACTION_DENY, ruleData)) {
-          if (!self._privateBrowsingEnabled) {
+          if (mayPermRulesBeDisplayed() === true) {
               var item = self._addMenuItemDenyOriginToDest(
                   self._addRulesList, ruleData);
           }
@@ -390,7 +398,7 @@ requestpolicy.menu = (function() {
 
         if (!PolicyManager.ruleExists(C.RULE_ACTION_ALLOW, destOnlyRuleData) &&
             !PolicyManager.ruleExists(C.RULE_ACTION_DENY, destOnlyRuleData)) {
-          if (!self._privateBrowsingEnabled) {
+          if (mayPermRulesBeDisplayed() === true) {
             var item = self._addMenuItemDenyDest(
                 self._addRulesList, destOnlyRuleData);
           }
@@ -406,7 +414,7 @@ requestpolicy.menu = (function() {
         //  -- this enables support for whitelisting.
         if (!PolicyManager.ruleExists(C.RULE_ACTION_ALLOW, ruleData) &&
             !PolicyManager.ruleExists(C.RULE_ACTION_DENY, ruleData)) {
-          if (!self._privateBrowsingEnabled) {
+          if (mayPermRulesBeDisplayed() === true) {
             var item = self._addMenuItemAllowOriginToDest(
                 self._addRulesList, ruleData);
           }
@@ -416,7 +424,7 @@ requestpolicy.menu = (function() {
 
         if (!PolicyManager.ruleExists(C.RULE_ACTION_ALLOW, destOnlyRuleData) &&
             !PolicyManager.ruleExists(C.RULE_ACTION_DENY, destOnlyRuleData)) {
-          if (!self._privateBrowsingEnabled) {
+          if (mayPermRulesBeDisplayed() === true) {
             var item = self._addMenuItemAllowDest(
                 self._addRulesList, destOnlyRuleData);
           }
@@ -466,7 +474,7 @@ requestpolicy.menu = (function() {
 
   self._setPrivateBrowsingStyles = function() {
     document.getElementById('rp-details').setAttribute(
-      'class', self._privateBrowsingEnabled ? 'privatebrowsing' : '');
+      'class', mayPermRulesBeDisplayed() === true ? '' : 'privatebrowsing');
   };
 
   self._resetSelectedOrigin = function() {
@@ -1181,7 +1189,7 @@ requestpolicy.menu = (function() {
       };
       if (!PolicyManager.ruleExists(C.RULE_ACTION_ALLOW, ruleData) &&
           !PolicyManager.ruleExists(C.RULE_ACTION_DENY, ruleData)) {
-        if (!self._privateBrowsingEnabled) {
+        if (mayPermRulesBeDisplayed() === true) {
           var item = self._addMenuItemAllowOriginToDest(list, ruleData);
         }
         var item = self._addMenuItemTempAllowOriginToDest(list, ruleData);
@@ -1194,7 +1202,7 @@ requestpolicy.menu = (function() {
       };
       if (!PolicyManager.ruleExists(C.RULE_ACTION_ALLOW, destOnlyRuleData) &&
           !PolicyManager.ruleExists(C.RULE_ACTION_DENY, destOnlyRuleData)) {
-        if (!self._privateBrowsingEnabled) {
+        if (mayPermRulesBeDisplayed() === true) {
           var item = self._addMenuItemAllowDest(list, destOnlyRuleData);
         }
         var item = self._addMenuItemTempAllowDest(list, destOnlyRuleData);

-- 
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