diff --git a/components/do.js b/components/do.js
index a7bbf54..1bc0d53 100644
--- a/components/do.js
+++ b/components/do.js
@@ -10,129 +10,121 @@
* 0. You just DO WHAT THE FUCK YOU WANT TO.
*********************************************************************/
-
function SmartRefererSpoofer () { }
SmartRefererSpoofer.prototype = (function () {
- var Observer = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
- var NetworkIO = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
- var ScriptSecurityManager = Components.classes["@mozilla.org/scriptsecuritymanager;1"].getService(Components.interfaces.nsIScriptSecurityManager);
- var EffectiveTLDService = Components.classes["@mozilla.org/network/effective-tld-service;1"].getService(Components.interfaces.nsIEffectiveTLDService);
-
- var Interfaces = {
- Channel: Components.interfaces.nsIChannel,
- HTTPChannel: Components.interfaces.nsIHttpChannel,
- Supports: Components.interfaces.nsISupports,
- Observer: Components.interfaces.nsIObserver,
- SupportsWeakReference: Components.interfaces.nsISupportsWeakReference
- };
-
- function log (what) {
- what = what.toString();
-
- dump(what);
- dump("\n");
- }
-
- function modify (http) {
- try {
- http.QueryInterface(Interfaces.Channel);
-
- var referer = NetworkIO.newURI(http.getRequestHeader("Referer"), null, null);
- }
- catch (e) {
- return false;
- }
-
- try {
- var [fromURI, toURI] = [http.URI.clone(), referer.clone()];
-
- try {
- var isIP = false;
-
- EffectiveTLDService.getPublicSuffix(fromURI);
- EffectiveTLDService.getPublicSuffix(toURI);
- }
- catch (e) {
- if (e == NS_ERROR_HOST_IS_IP_ADDRESS) {
- isIP = true;
- }
- }
-
- if (!isIP) {
- let [from, to] = [fromURI, toURI].map(function (x) x.host.split('.').reverse());
- let index = 0;
-
- while (from[index] || to[index]) {
- if (from[index] == to[index]) {
- index++;
- }
- else {
- from.splice(index);
- to.splice(index);
- }
- }
-
- if (from.length == 0) {
- throw Components.results.NS_ERROR_DOM_BAD_URI;
- }
-
- fromURI.host = from.reverse().join('.');
- toURI.host = to.reverse().join('.');
-
- try {
- if (EffectiveTLDService.getPublicSuffix(fromURI) == fromURI.host) {
- throw Components.results.NS_ERROR_DOM_BAD_URI;
- }
- }
- catch (e) {
- if (e == Components.results.NS_ERROR_DOM_BAD_URI) {
- throw e;
- }
- }
- }
-
- ScriptSecurityManager.checkSameOriginURI(fromURI, toURI, false);
-
- return false;
- }
- catch (e) {
- http.referrer = null;
- http.setRequestHeader("Referer", null, false);
-
- return true;
- }
- }
-
- function observe (subject, topic, data) {
- switch (topic) {
- case "http-on-modify-request":
- modify(subject.QueryInterface(Interfaces.HTTPChannel));
- break;
-
- case "profile-after-change":
- Observer.addObserver(this, "http-on-modify-request", false);
- break;
- }
- }
-
- return {
- observe: observe,
-
- QueryInterface: function (id) {
- if (!id.equals(Interfaces.Supports) && !id.equals(Interfaces.Observer) && !id.equals(Interfaces.SupportsWeakReference)) {
- throw Components.results.NS_ERROR_NO_INTERFACE;
- }
-
- return this;
- },
-
- classID: Components.ID("55fbf7cd-18ab-4f94-a9ff-4cf21192bcd8"),
- contractID: "smart-referer@meh.paranoid.pk/do;1",
- classDescription: "Smart Referer Spoofer",
-
- _xpcom_categories: [{ category: "profile-after-change" }]
- };
+ var Observer = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
+ var NetworkIO = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
+ var ScriptSecurityManager = Components.classes["@mozilla.org/scriptsecuritymanager;1"].getService(Components.interfaces.nsIScriptSecurityManager);
+ var EffectiveTLDService = Components.classes["@mozilla.org/network/effective-tld-service;1"].getService(Components.interfaces.nsIEffectiveTLDService);
+
+ var Interfaces = {
+ Channel: Components.interfaces.nsIChannel,
+ HTTPChannel: Components.interfaces.nsIHttpChannel,
+ Supports: Components.interfaces.nsISupports,
+ Observer: Components.interfaces.nsIObserver,
+ SupportsWeakReference: Components.interfaces.nsISupportsWeakReference
+ };
+
+ function modify (http) {
+ try {
+ http.QueryInterface(Interfaces.Channel);
+
+ var referer = NetworkIO.newURI(http.getRequestHeader("Referer"), null, null);
+ }
+ catch (e) {
+ return false;
+ }
+
+ try {
+ var [fromURI, toURI] = [http.URI.clone(), referer.clone()];
+
+ try {
+ var isIP = false;
+
+ EffectiveTLDService.getPublicSuffix(fromURI);
+ EffectiveTLDService.getPublicSuffix(toURI);
+ }
+ catch (e) {
+ if (e == NS_ERROR_HOST_IS_IP_ADDRESS) {
+ isIP = true;
+ }
+ }
+
+ if (!isIP) {
+ let [from, to] = [fromURI, toURI].map(function (x) x.host.split('.').reverse());
+ let index = 0;
+
+ while (from[index] || to[index]) {
+ if (from[index] == to[index]) {
+ index++;
+ }
+ else {
+ from.splice(index);
+ to.splice(index);
+ }
+ }
+
+ if (from.length == 0) {
+ throw Components.results.NS_ERROR_DOM_BAD_URI;
+ }
+
+ fromURI.host = from.reverse().join('.');
+ toURI.host = to.reverse().join('.');
+
+ try {
+ if (EffectiveTLDService.getPublicSuffix(fromURI) == fromURI.host) {
+ throw Components.results.NS_ERROR_DOM_BAD_URI;
+ }
+ }
+ catch (e) {
+ if (e == Components.results.NS_ERROR_DOM_BAD_URI) {
+ throw e;
+ }
+ }
+ }
+
+ ScriptSecurityManager.checkSameOriginURI(fromURI, toURI, false);
+
+ return false;
+ }
+ catch (e) {
+ http.referrer = null;
+ http.setRequestHeader("Referer", null, false);
+
+ return true;
+ }
+ }
+
+ function observe (subject, topic, data) {
+ switch (topic) {
+ case "http-on-modify-request":
+ modify(subject.QueryInterface(Interfaces.HTTPChannel));
+ break;
+
+ case "profile-after-change":
+ Observer.addObserver(this, "http-on-modify-request", false);
+ break;
+ }
+ }
+
+ return {
+ observe: observe,
+
+ QueryInterface: function (id) {
+ if (!id.equals(Interfaces.Supports) && !id.equals(Interfaces.Observer) && !id.equals(Interfaces.SupportsWeakReference)) {
+ throw Components.results.NS_ERROR_NO_INTERFACE;
+ }
+
+ return this;
+ },
+
+ classID: Components.ID("55fbf7cd-18ab-4f94-a9ff-4cf21192bcd8"),
+ contractID: "smart-referer@meh.paranoid.pk/do;1",
+ classDescription: "Smart Referer Spoofer",
+
+ _xpcom_categories: [{ category: "profile-after-change" }]
+ };
})();
/**
@@ -142,8 +134,8 @@ SmartRefererSpoofer.prototype = (function () {
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
if (XPCOMUtils.generateNSGetFactory) {
- var NSGetFactory = XPCOMUtils.generateNSGetFactory([SmartRefererSpoofer]);
+ var NSGetFactory = XPCOMUtils.generateNSGetFactory([SmartRefererSpoofer]);
}
else {
- var NSGetModule = XPCOMUtils.generateNSGetModule([SmartRefererSpoofer]);
+ var NSGetModule = XPCOMUtils.generateNSGetModule([SmartRefererSpoofer]);
}
diff --git a/install.rdf b/install.rdf
index b69464b..11d859a 100644
--- a/install.rdf
+++ b/install.rdf
@@ -7,21 +7,21 @@
smart-referer@meh.paranoid.pk
0.0.3.1
2
-
+
{ec8030f7-c20a-464f-9b0e-13a3a9e97384}
3.0
- 8.0
+ 10.0
-
+
Smart Referer
Enable smart referers everywhere (send referer only on same domain)
meh.
http://github.com/meh/smart-referer
-
+