[Pkg-mozext-commits] [greasemonkey] 02/55: Support GM_xmlhttpRequest referer override in e10s

David Prévot taffit at moszumanska.debian.org
Thu Oct 29 15:38:01 UTC 2015


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

taffit pushed a commit to branch master
in repository greasemonkey.

commit e4a38a372c4d80e1ab5205d951691a9a310c9ef4
Author: The8472 <git at infinite-source.de>
Date:   Sun Aug 23 20:00:57 2015 +0200

    Support GM_xmlhttpRequest referer override in e10s
    
    fixes greasemonkey/greasemonkey#2103
---
 components/greasemonkey.js  |  1 +
 modules/refererSetter.js    | 28 ++++++++++++++++++++++++++++
 modules/xmlhttprequester.js | 28 +++++++---------------------
 3 files changed, 36 insertions(+), 21 deletions(-)

diff --git a/components/greasemonkey.js b/components/greasemonkey.js
index 080c75a..df8c6cc 100644
--- a/components/greasemonkey.js
+++ b/components/greasemonkey.js
@@ -16,6 +16,7 @@ Cu.import("chrome://greasemonkey-modules/content/sync.js");
 Cu.import("chrome://greasemonkey-modules/content/util.js");
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+Cu.import("chrome://greasemonkey-modules/content/refererSetter.js", {});
 
 
 var gStartupHasRun = false;
diff --git a/modules/refererSetter.js b/modules/refererSetter.js
new file mode 100644
index 0000000..470ecfe
--- /dev/null
+++ b/modules/refererSetter.js
@@ -0,0 +1,28 @@
+'use strict';
+
+const EXPORTED_SYMBOLS = [];
+
+Components.utils.import("resource://gre/modules/Services.jsm");
+
+const observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
+
+Services.obs.addObserver({
+  observe: function(subject, topic, data) {
+    if(!(subject instanceof Components.interfaces.nsIHttpChannel))
+      return;
+    if(!(subject instanceof Components.interfaces.nsIPropertyBag))
+      return;
+
+    var channel = subject; // instanceof -> automatic QI
+    var referer;
+    
+    try{
+      referer = channel.getProperty("greasemonkey:referer-override");      
+    } catch(ex) {
+      // property not found
+      return;
+    }
+    
+    channel.setRequestHeader("Referer", referer, false);
+  }
+}, "http-on-modify-request", false);
\ No newline at end of file
diff --git a/modules/xmlhttprequester.js b/modules/xmlhttprequester.js
index 28e443a..ad1aa2a 100644
--- a/modules/xmlhttprequester.js
+++ b/modules/xmlhttprequester.js
@@ -192,27 +192,13 @@ function(safeUrl, details, req) {
 GM_xmlhttpRequester.prototype.setupReferer =
 function(details, req) {
   if (!details.headers || !details.headers.Referer) return;
-
-  var observerService = Components.classes["@mozilla.org/observer-service;1"]
-      .getService(Components.interfaces.nsIObserverService);
-  var requestObserver = {};
-  requestObserver.observe = function(subject, topic, data) {
-      observerService.removeObserver(requestObserver, "http-on-modify-request");
-
-      var channel = subject.QueryInterface(Components.interfaces.nsIChannel);
-      if (channel == req.channel) {
-        dump('setting referer ' + details.headers.Referer + '\n');
-        var httpChannel = subject.QueryInterface(
-            Components.interfaces.nsIHttpChannel);
-        httpChannel.setRequestHeader("Referer", details.headers.Referer, false);
-      }
-    };
-
-  // This fails under e10s.  Ignore for now (Mar 13, 2015).
-  // TODO: Make it work!
-  try {
-    observerService.addObserver(requestObserver, "http-on-modify-request", false);
-  } catch (e) { }
+  
+  var channel = req.channel;
+  
+  if(!(channel  instanceof Components.interfaces.nsIWritablePropertyBag))
+    return;
+  
+  channel.setProperty("greasemonkey:referer-override", details.headers.Referer);  
 };
 
 // arranges for the specified 'event' on xmlhttprequest 'req' to call the

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



More information about the Pkg-mozext-commits mailing list