[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