[tor-commits] [torbutton/master] Decouple SafeCache from browser cookie prefs.

mikeperry at torproject.org mikeperry at torproject.org
Fri Jul 1 00:58:04 UTC 2011


commit 75b7efe1a9d0faf6b824d2394175bf1b3970ce20
Author: Mike Perry <mikeperry-git at fscked.org>
Date:   Thu Jun 30 11:53:37 2011 -0700

    Decouple SafeCache from browser cookie prefs.
    
    Make it always on.
    
    Also, give 'SafeCookie' its own pref and make it off by default.
---
 src/chrome/content/stanford-safecache.js |   61 ++++++++++++------------------
 src/defaults/preferences/preferences.js  |    3 +-
 2 files changed, 26 insertions(+), 38 deletions(-)

diff --git a/src/chrome/content/stanford-safecache.js b/src/chrome/content/stanford-safecache.js
index 4c6c155..e739656 100644
--- a/src/chrome/content/stanford-safecache.js
+++ b/src/chrome/content/stanford-safecache.js
@@ -24,9 +24,9 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 // Constants
 
 const kSSC_ENABLED_PREF = "extensions.torbutton.safecache";
+const kSSC_SC_ENABLED_PREF = "extensions.torbutton.dual_key_cookies";
 const kSSC_TORBUTTON_PREF = "extensions.torbutton.tor_enabled";
 const kSSC_COOKIE_JS_PREF = "extensions.torbutton.cookie_js_allow";
-const kSSC_COOKIE_BEHAVIOR_PREF = "network.cookie.cookieBehavior";
 
 ////////////////////////////////////////////////////////////////////////////
 // Debug stuff
@@ -96,18 +96,18 @@ SSC_RequestListener.prototype =
   },
 
   onModifyRequest: function(channel) {
-    
     var parent = window.content.location;
     if (channel.documentURI && channel.documentURI == channel.URI) {
       parent = null;  // first party interaction
     }
-    
 
-    var cookie;
-    try{
-        cookie = channel.getRequestHeader("Cookie");
-        //SSC_dump("Cookie: " + cookie);
-    } catch(e) {cookie = null;}
+    var cookie = null;
+    if (this.controller.getSafeCookieEnabled()) {
+        try{
+            cookie = channel.getRequestHeader("Cookie");
+            //SSC_dump("Cookie: " + cookie);
+        } catch(e) {cookie = null;}
+    }
 
     // Same-origin policy
     var referrer;
@@ -188,24 +188,10 @@ SSC_RequestListener.prototype =
         channel.setRequestHeader("Cookie", newHeader, false);
     }
 
-    // Third-party blocking policy
-    switch(this.controller.getCookieBehavior()) {
-      case this.controller.ACCEPT_COOKIES:
-        break;
-      case this.controller.NO_FOREIGN_COOKIES:
-        if(parent && parent.hostname != channel.URI.host) {
-          //SSC_dump("Third party cache blocked for " + channel.URI.spec +
-                   //" content loaded by " + parent.spec);
-          this.bypassCache(channel);
-        }
-        break;
-      case this.controller.REJECT_COOKIES:
+    if(parent && parent.hostname != channel.URI.host) {
+        //SSC_dump("Third party cache blocked for " + channel.URI.spec +
+        //" content loaded by " + parent.spec);
         this.bypassCache(channel);
-        break;
-      default:
-        SSC_dump(controller.getCookieBehavior() + 
-                 " is not a valid cookie behavior.");
-        break;
     }
   },
 
@@ -298,6 +284,12 @@ SSC_Controller.prototype = {
                      .getIntPref(kSSC_ENABLED_PREF));
   },
 
+  getSafeCookieEnabled: function() {
+    return (Components.classes["@mozilla.org/preferences-service;1"]
+                     .getService(Components.interfaces.nsIPrefService)
+                     .getBoolPref(kSSC_SC_ENABLED_PREF));
+  },
+
   getTorButton: function() {
     return (Components.classes["@mozilla.org/preferences-service;1"]
                      .getService(Components.interfaces.nsIPrefBranch)
@@ -310,22 +302,15 @@ SSC_Controller.prototype = {
                      .getBoolPref(kSSC_COOKIE_JS_PREF));  
   },
 
-  // Returns the value of the network.cookie.cookieBehavior pref
-  ACCEPT_COOKIES: 0,
-  NO_FOREIGN_COOKIES: 1,
-  REJECT_COOKIES: 2,
-  getCookieBehavior: function() {
-    return Components.classes["@mozilla.org/preferences-service;1"]
-                     .getService(Components.interfaces.nsIPrefService)
-                     .getIntPref(kSSC_COOKIE_BEHAVIOR_PREF);
-  },
-
   addListener: function(listener) {
     var observerService = 
       Components.classes["@mozilla.org/observer-service;1"]
         .getService(Components.interfaces.nsIObserverService);
     observerService.addObserver(listener, "http-on-modify-request", false);
-    observerService.addObserver(listener, "http-on-examine-response", false);
+    // XXX: We need an observer to add this listener when the pref gets set
+    if (this.getSafeCookieEnabled()) {
+      observerService.addObserver(listener, "http-on-examine-response", false);
+    }
   },
 
   removeListener: function(listener) {
@@ -333,7 +318,9 @@ SSC_Controller.prototype = {
       Components.classes["@mozilla.org/observer-service;1"]
         .getService(Components.interfaces.nsIObserverService);
     observerService.removeObserver(listener, "http-on-modify-request");
-    observerService.removeObserver(listener, "http-on-examine-response");
+    if (this.getSafeCookieEnabled()) {
+      observerService.removeObserver(listener, "http-on-examine-response");
+    }
   },
 }
 
diff --git a/src/defaults/preferences/preferences.js b/src/defaults/preferences/preferences.js
index a6d565a..efca607 100644
--- a/src/defaults/preferences/preferences.js
+++ b/src/defaults/preferences/preferences.js
@@ -214,4 +214,5 @@ pref("extensions.torbutton.useragent_vendor", "");
 pref("extensions.torbutton.useragent_vendorSub","");
 
 pref("extensions.torbutton.safecache",1); // 0=always, 1=during tor, 2=never
-pref("extensions.torbutton.cookie_js_allow", true);
\ No newline at end of file
+pref("extensions.torbutton.dual_key_cookies",false);
+pref("extensions.torbutton.cookie_js_allow", true);





More information about the tor-commits mailing list