home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Narzedzia / AIMP2 / aimp_2.61.583.exe / $TEMP / YandexPackSetup.msi / fil6DBD67C7DA7BF5A3EF42C97DBF5DAD7D < prev    next >
Text File  |  2010-07-12  |  6KB  |  217 lines

  1. const EXTENSION_PATH = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService).newFileURI(__LOCATION__.parent.parent).spec;
  2. Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
  3.                    .getService(Components.interfaces.mozIJSSubScriptLoader)
  4.                    .loadSubScript(EXTENSION_PATH + "modules/xb/config.js");
  5.  
  6. Cu.import(EXTENSION_PATH + "modules/xb/XPCOMUtilsEx.jsm");
  7.  
  8. function XBProtocolHandler() {
  9.     this._providers = {};
  10.     this._observerService.addObserver(this, CommonConsts.APP_ACTION_QUIT_TOPIC, false);
  11. };
  12.  
  13. XBProtocolHandler.prototype = {
  14.     version: PLATFORM_VERSION,
  15.     classDescription: "Custom Yandex.Bar protocol handler for XB-resources.",
  16.     classID: PROTOCOL_XB_CLASS_ID,
  17.     contractID: PROTOCOL_XB_CONTRACT_ID,
  18.     QueryInterface: XPCOMUtilsEx.generateQI([Ci.nsIProtocolHandler, Ci.nsISupports, Ci.nsIObserver]),
  19.     
  20.     addDataProvider: function XBProtocolHandler_addDataProvider(aProvider) {
  21.         this._providers[aProvider.providerId] = aProvider;
  22.     },
  23.     
  24.     removeDataProvider: function XBProtocolHandler_removeDataProvider(aProvider) {
  25.         delete this._providers[aProvider.providerId];
  26.     },
  27.     
  28.     get wrappedJSObject() {
  29.         return this;
  30.     },
  31.     
  32.     observe: function XBProtocolHandler_observe(aSubject, aTopic, aData) {
  33.     },
  34.     
  35.     get scheme() {
  36.         return PROTOCOL_XB_SCHEME;
  37.     },
  38.     
  39.     get protocolFlags() {
  40.         return Ci.nsIProtocolHandler.URI_DANGEROUS_TO_LOAD | Ci.nsIProtocolHandler.URI_NOAUTH;
  41.     },
  42.     
  43.     get defaultPort() {
  44.         return -1;
  45.     },
  46.     
  47.     allowPort: function XBProtocolHandler_allowPort() {
  48.         return false;
  49.     },
  50.     
  51.     newURI: function XBProtocolHandler_newURI(aSpec, aOriginalCharset, aBaseURI) {
  52.         var uri = new XBProtocolHandler.XBURI(aSpec, aOriginalCharset, aBaseURI);
  53.         if (uri.host == "toolkit") {
  54.             var ioService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
  55.             return ioService.newURI("chrome://" + APP_NAME + "/content/custombar/packages/toolkit" + uri.path, null, null);
  56.         }
  57.         return new XBProtocolHandler.XBURI(aSpec, aOriginalCharset, aBaseURI);
  58.     },
  59.     
  60.     newChannel: function XBProtocolHandler_newChannel(aURI) {
  61.         var uri = new XBProtocolHandler.XBURI(aURI.spec);
  62.         var channel = null;
  63.         var provider = this._providers[uri.provider];
  64.         if (provider)
  65.             channel = provider.newChannel(uri);
  66.         if (!channel)
  67.             throw Components.results.NS_ERROR_FAILURE;
  68.         return channel;
  69.     },
  70.     
  71.     _observerService: Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService),
  72.     
  73.     _destroy: function XBProtocolHandler__destroy() {
  74.         this._observerService.removeObserver(this, CommonConsts.APP_ACTION_QUIT_TOPIC, false);
  75.         this._providers = null;
  76.     }
  77. };
  78.  
  79. XBProtocolHandler.XBURI = function XBURI_constructor(aSpec, aOriginalCharset, aBaseURI) {
  80.     if (aBaseURI)
  81.         this.spec = aBaseURI.resolve(aSpec);
  82.     else
  83.         this.spec = aSpec;
  84.     
  85.     this._suppressRelativePathReference();
  86.     this._construct();
  87. };
  88.  
  89. XBProtocolHandler.XBURI.prototype = {
  90.     get wrappedJSObject() {
  91.         return this;
  92.     },
  93.     
  94.     QueryInterface: XPCOMUtilsEx.generateQI([Ci.nsIURI, Ci.nsISupports]),
  95.     
  96.     get provider() {
  97.         return this._provider;
  98.     },
  99.     
  100.     get spec() {
  101.         return this._spec;
  102.     },
  103.     
  104.     set spec(aSpec) {
  105.         this._spec = aSpec;
  106.         this._parse();
  107.         return this._spec;
  108.     },
  109.     
  110.     prePath: "",
  111.     scheme: PROTOCOL_XB_SCHEME,
  112.     userPass: "",
  113.     username: "",
  114.     password: "",
  115.     hostPort: "",
  116.     
  117.     get host() {
  118.         return this._host;
  119.     },
  120.     
  121.     set host(aHost) {
  122.         this._host = aHost;
  123.         this._construct();
  124.         return this._host;
  125.     },
  126.     
  127.     port: -1,
  128.     
  129.     get path() {
  130.         return this._path;
  131.     },
  132.     set path(aPath) {
  133.         this._path = aPath;
  134.         this._suppressRelativePathReference();
  135.         this._construct();
  136.         return this._path;
  137.     },
  138.     get asciiSpec() {
  139.         return this.spec;
  140.     },
  141.     get asciiHost() {
  142.         return this.host;
  143.     },
  144.     get originCharset() {
  145.         return "UTF-8";
  146.     },
  147.     
  148.     clone: function() {
  149.         return new XBProtocolHandler.XBURI(this.spec);
  150.     },
  151.     
  152.     equals: function(aUri) {
  153.         return aUri.spec == this.spec;
  154.     },
  155.     
  156.     resolve: function(aRelativePath) {
  157.         if (aRelativePath.indexOf(this.scheme + "://") == 0)
  158.             return aRelativePath;
  159.         
  160.         if (aRelativePath.indexOf("//") == 0)
  161.             return this.scheme + ":" + aRelativePath;
  162.         
  163.         if (aRelativePath[0] == "/")
  164.             return this.scheme + '://' + this.host + aRelativePath;
  165.         
  166.         return this.scheme + '://' + this.host + this.path.replace(/[^\/]*$/, "") + aRelativePath;
  167.     },
  168.     
  169.     schemeIs: function(aScheme) {
  170.         aScheme = aScheme.toLowerCase();
  171.         return aScheme == this.scheme || aScheme == "chrome";
  172.     },
  173.     
  174.     _host: "",
  175.     _path: "",
  176.     _provider: "",
  177.     _spec: "",
  178.     _reSpec: /^(\w+)\:\/\/([^\/]*)(\/[^\?\;\#]*)(;(.*))?$/,
  179.     
  180.     _parse: function() {
  181.         var components = this._spec.match(this._reSpec);
  182.         if (!components || components[1] != this.scheme)
  183.             throw Cr.NS_ERROR_MALFORMED_URI;
  184.         this._host = components[2];
  185.         this._path = components[3];
  186.         this._suppressRelativePathReference();
  187.         this._provider = components[2];
  188.     },
  189.     
  190.     _construct: function() {
  191.         this._spec = this.scheme + "://" + this.host + this.path;
  192.     },
  193.     
  194.     _suppressRelativePathReference: function() {
  195.         var path = this._path;
  196.         
  197.         var re = [
  198.             /\/\//g,
  199.             /\/\.\//g,
  200.             /\/[^\/]+\/\.\.\//g,
  201.             /\/\.\.\//g,
  202.         ];
  203.         
  204.         for each (var expression in re)
  205.             while (expression.test(path))
  206.                 path = path.replace(expression, "/");
  207.         
  208.         this._path = path;
  209.     }
  210. };
  211.  
  212. var components = [XBProtocolHandler];
  213.  
  214. function NSGetModule(compMgr, fileSpec) {
  215.     return XPCOMUtilsEx.generateModule(components);
  216. }
  217.