home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 9866 / 9866.xpi / modules / samfind_modcookie.jsm < prev    next >
Encoding:
Text File  |  2009-09-30  |  4.2 KB  |  150 lines

  1. //-------------------------------------------------------------------------------------------
  2. // Cookie module.
  3. //-------------------------------------------------------------------------------------------
  4.  
  5. const Cc = Components.classes;
  6. const Ci = Components.interfaces;
  7.  
  8. var EXPORTED_SYMBOLS = ["samfind_modcookie"];
  9.  
  10. Components.utils.import("resource://samfind/samfind_modutils.jsm");
  11.  
  12. var samfind_modcookie =
  13. {
  14.     _manager : null,
  15.     _service : null,
  16.     _nc_branch : null,
  17.  
  18.     _init : function()
  19.     {
  20.         samfind_modcookie._manager = Cc["@mozilla.org/cookiemanager;1"].getService(Ci.nsICookieManager);
  21.         samfind_modcookie._service = Cc["@mozilla.org/cookieService;1"].getService(Ci.nsICookieService);
  22.         //
  23.         samfind_modcookie._nc_branch = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).getBranch("network.cookie.");
  24.         samfind_modcookie._nc_branch.QueryInterface(Ci.nsIPrefBranch2);
  25.         samfind_modcookie._nc_branch.addObserver("", samfind_modcookie, false);
  26.       },
  27.  
  28.     getCookie : function(name)
  29.     {
  30.         for (var e=samfind_modcookie._manager.enumerator; e.hasMoreElements();)
  31.         {
  32.               var cookie = e.getNext().QueryInterface(Ci.nsICookie); 
  33.             if (cookie.host == "samfind.com" && cookie.name == name)
  34.             {
  35.                 return cookie.value;
  36.             }
  37.         }
  38.         return "";
  39.     },
  40.  
  41.     setCookie : function(name, value)
  42.     {
  43.         var cookie_uri = samfind_modutils._io_service.newURI("http://samfind.com/", null, null);
  44.         samfind_modcookie._service.setCookieString(cookie_uri, null, name + "=" + value + ";expires=Wed, 01 Jan 2025 15:24:55 GMTo", null);
  45.     },
  46.  
  47.     removeCookie : function(name)
  48.     {
  49.         var cookie_uri = samfind_modutils._io_service.newURI("http://samfind.com/", null, null);
  50.         samfind_modcookie._service.setCookieString(cookie_uri, null, name + "=;expires=Wed, 01 Jan 1970 00:00:00 GMTo", null);
  51.     },
  52.  
  53.     getSamfindUserCookie : function()
  54.     {
  55.         var samfind_user = samfind_modcookie.getCookie("samfinduser");
  56.         if (samfind_user.length)
  57.         {
  58.             samfind_modutils._pref_branch.setCharPref("cookie", samfind_user);
  59.         }
  60.         else
  61.         {
  62.             samfind_user = samfind_modutils._pref_branch.getCharPref("cookie");
  63.             if (samfind_user.length)
  64.             {
  65.                 samfind_modcookie.setCookie("samfinduser", samfind_user);
  66.             }
  67.         }
  68.         return samfind_user;
  69.     },
  70.  
  71.     loadSamfindUserCookie : function(retry, observer)
  72.     {
  73.         try
  74.         {
  75.             var xhr = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Ci.nsIXMLHttpRequest);
  76.             xhr.open("GET", "http://samfind.com/cookie_bar.php", true);
  77.             xhr.channel.loadFlags |= Ci.nsIRequest.LOAD_BYPASS_CACHE;
  78.             xhr.setRequestHeader("User-Agent", "samfind Toolbar");
  79.             var timeout = samfind_modutils.setXhrAbortTimeout(xhr, 10000);
  80.             xhr.onreadystatechange = function(e)
  81.             {
  82.                 if (xhr.readyState == 4)
  83.                 {
  84.                     timeout.cancel();
  85.                     timeout = null;
  86.                     try
  87.                     {
  88.                         if (xhr.status == 200)
  89.                         {
  90.                             observer.cookieLoaded(xhr.responseText);
  91.                         }
  92.                         else if (++retry < 3)
  93.                         {
  94.                             samfind_modutils.setTimeoutWithParams(window, samfind_modcookie.loadSamfindUserCookie, 5000, retry, observer);
  95.                         }
  96.                         else
  97.                         {
  98.                             observer.cookieLoaded(null);
  99.                         }
  100.                     }
  101.                     catch (e)
  102.                     {
  103.                         if (++retry < 3)
  104.                         {
  105.                             samfind_modutils.setTimeoutWithParams(window, samfind_modcookie.loadSamfindUserCookie, 5000, retry, observer);
  106.                         }
  107.                         else
  108.                         {
  109.                             observer.cookieLoaded(null);
  110.                         }
  111.                     }
  112.                     xhr = null;
  113.                 }
  114.             };
  115.             xhr.send(null);
  116.         }
  117.         catch (e)
  118.         {
  119.             if (++retry < 3)
  120.             {
  121.                 samfind_modutils.setTimeoutWithParams(window, samfind_modcookie.loadSamfindUserCookie, 5000, retry, observer);
  122.             }
  123.             else
  124.             {
  125.                 observer.cookieLoaded(null);
  126.             }
  127.         }
  128.     },
  129.  
  130.     observe : function(aSubject, aTopic, aData)
  131.     {
  132.         if (aTopic != "nsPref:changed" || aData != "cookieBehavior")
  133.         {
  134.             return;
  135.         }
  136.         if (samfind_modcookie._nc_branch.getIntPref(aData) != 2 && samfind_modcookie.getCookie("samfinduser") == "")
  137.         {
  138.             var samfind_user = samfind_modutils._pref_branch.getCharPref("cookie");
  139.             if (samfind_user.length)
  140.             {
  141.                 samfind_modcookie.setCookie("samfinduser", samfind_user);
  142.             }
  143.         }
  144.     }
  145. };
  146.  
  147. /**
  148.  * Constructor.
  149.  */
  150. (function() { this._init(); }).apply(samfind_modcookie);