home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2007 December / PCWDEC07.iso / Software / Freeware / FlashGot 0.6.4 / chrome / flashgot.jar / content / flashgot / referrerSpoofer.js < prev   
Encoding:
Text File  |  2007-08-29  |  1.8 KB  |  55 lines

  1. var gReferrerSpoofer = null;
  2.  
  3. function ReferrerSpoofer() {
  4.   this.osrv = Components.classes["@mozilla.org/observer-service;1"]
  5.                         .getService(Components.interfaces.nsIObserverService);
  6.   this.osrv.addObserver(this, "http-on-modify-request", false);
  7.   gReferrerSpoofer = this;
  8. }
  9.  
  10. ReferrerSpoofer.prototype = {
  11.   map: {},
  12.   add: function(realURL, spoofedURL) {
  13.     
  14.     var obj = (realURL in this.map) ? this.map[realURL] : this.map[realURL]={ count: 0 };
  15.     obj.referrer = spoofedURL;
  16.     obj.count++;
  17.   },
  18.   remove: function(realURL) {
  19.     if((realURL in this.map) && !(--(this.map[realURL].count)) ) delete this.map[realURL];
  20.   },
  21.   observe: function(channel, aTopic, aData) {
  22.     channel.QueryInterface(Components.interfaces.nsIHttpChannel);
  23.     if(channel.referrer && channel.referrer.spec in this.map) {
  24.       channel.referrer.spec = this.map[channel.referrer.spec].referrer;
  25.     }
  26.   },
  27.   dispose: function() {
  28.     this.osrv.removeObserver(this, "http-on-modify-request");
  29.   },
  30.   QueryInterface: function(iid) {
  31.     if (!iid.equals(Components.interfaces.nsISupports) &&
  32.       !iid.equals(Components.interfaces.nsIObserver))
  33.       throw Components.results.NS_ERROR_NO_INTERFACE;
  34.     return this;
  35.   },
  36.   connect: function(browser) {
  37.     if(!("gFlashGotReferrerSpoofer" in browser)) {
  38.       browser.gFlashGotReferrerSpoofer = true;
  39.       browser.addEventListener("load", this.onLoad, true);
  40.       browser.addEventListener("unload", this.onUnload, true);
  41.     }
  42.   },
  43.   getReferrer: function(doc) {
  44.     return doc._flashgotGB && doc._flashgotGB.referrer;
  45.   },
  46.   onLoad: function(ev) {
  47.     var ref = gReferrerSpoofer.getReferrer(ev.target);
  48.     if(ref) gReferrerSpoofer.add(ev.target.URL, ref);
  49.   },
  50.   onUnload: function(ev) {
  51.     var ref = gReferrerSpoofer.getReferrer(ev.target);
  52.     if(ref) gReferrerSpoofer.remove(ev.URL);
  53.   }
  54. }
  55.