toolkit/mozapps/plugins/content/pluginInstallerDatasource.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this
     3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     5 const PFS_NS = "http://www.mozilla.org/2004/pfs-rdf#";
     7 function nsRDFItemUpdater(aClientOS, aChromeLocale) {
     8   this._rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"]
     9                                .getService(Components.interfaces.nsIRDFService);
    10   this._os = Components.classes["@mozilla.org/observer-service;1"]
    11                        .getService(Components.interfaces.nsIObserverService);
    13   var app = Components.classes["@mozilla.org/xre/app-info;1"]
    14                       .getService(Components.interfaces.nsIXULAppInfo);
    15   this.appID = app.ID;
    16   this.buildID = app.platformBuildID;
    17   this.appRelease = app.version;
    19   this.clientOS = aClientOS;
    20   this.chromeLocale = aChromeLocale;
    22   var prefBranch = Components.classes["@mozilla.org/preferences-service;1"]
    23                              .getService(Components.interfaces.nsIPrefBranch);
    24   this.dsURI = prefBranch.getCharPref("pfs.datasource.url");
    25 }
    27 nsRDFItemUpdater.prototype = {
    28   checkForPlugin: function (aPluginRequestItem) {
    29     var dsURI = this.dsURI;
    30     // escape the mimetype as mimetypes can contain '+', which will break pfs.
    31     dsURI = dsURI.replace(/%PLUGIN_MIMETYPE%/g, encodeURIComponent(aPluginRequestItem.mimetype));
    32     dsURI = dsURI.replace(/%APP_ID%/g, this.appID);
    33     dsURI = dsURI.replace(/%APP_VERSION%/g, this.buildID);
    34     dsURI = dsURI.replace(/%APP_RELEASE%/g, this.appRelease);
    35     dsURI = dsURI.replace(/%CLIENT_OS%/g, this.clientOS);
    36     dsURI = dsURI.replace(/%CHROME_LOCALE%/g, this.chromeLocale);
    38     var ds = this._rdfService.GetDataSource(dsURI);
    39     var rds = ds.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource)
    40     if (rds.loaded)
    41       this.onDatasourceLoaded(ds, aPluginRequestItem);
    42     else {
    43       var sink = ds.QueryInterface(Components.interfaces.nsIRDFXMLSink);
    44       sink.addXMLSinkObserver(new nsPluginXMLRDFDSObserver(this, aPluginRequestItem));
    45     }
    46   },
    48   onDatasourceLoaded: function pfs_onDatasourceLoaded (aDatasource, aPluginRequestItem) {
    49     var container = Components.classes["@mozilla.org/rdf/container;1"]
    50                               .createInstance(Components.interfaces.nsIRDFContainer);
    51     var resultRes = this._rdfService.GetResource("urn:mozilla:plugin-results:" + aPluginRequestItem.mimetype);
    52     var pluginList = aDatasource.GetTarget(resultRes, this._rdfService.GetResource(PFS_NS+"plugins"), true);
    54     var pluginInfo = null;
    56     try {
    57       container.Init(aDatasource, pluginList);
    59       var children = container.GetElements();
    60       var target;
    62       // get the first item
    63       var child = children.getNext();
    64       if (child instanceof Components.interfaces.nsIRDFResource) {
    65         var name = this._rdfService.GetResource("http://www.mozilla.org/2004/pfs-rdf#updates");
    66         target = aDatasource.GetTarget(child, name, true);
    67       }
    69       try {
    70         container.Init(aDatasource, target);
    71         target = null;
    72         children = container.GetElements();
    74         var child = children.getNext();
    75         if (child instanceof Components.interfaces.nsIRDFResource) {
    76           target = child;
    77         }
    79         var rdfs = this._rdfService;
    81         function getPFSValueFromRDF(aValue) {
    82           var rv = null;
    84           var myTarget = aDatasource.GetTarget(target, rdfs.GetResource(PFS_NS + aValue), true);
    85           if (myTarget)
    86             rv = myTarget.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
    88           return rv;
    89         }
    91         pluginInfo = {
    92           name: getPFSValueFromRDF("name"),
    93           pid: getPFSValueFromRDF("guid"),
    94           version: getPFSValueFromRDF("version"),
    95           IconUrl: getPFSValueFromRDF("IconUrl"),
    96           InstallerLocation: getPFSValueFromRDF("InstallerLocation"),
    97           InstallerHash: getPFSValueFromRDF("InstallerHash"),
    98           XPILocation: getPFSValueFromRDF("XPILocation"),
    99           XPIHash: getPFSValueFromRDF("XPIHash"),
   100           InstallerShowsUI: getPFSValueFromRDF("InstallerShowsUI"),
   101           manualInstallationURL: getPFSValueFromRDF("manualInstallationURL"),
   102           requestedMimetype: getPFSValueFromRDF("requestedMimetype"),
   103           licenseURL: getPFSValueFromRDF("licenseURL"),
   104           needsRestart: getPFSValueFromRDF("needsRestart")
   105         };
   106       }
   107       catch (ex) {
   108         Components.utils.reportError(ex);
   109       }
   110     }
   111     catch (ex) {
   112       Components.utils.reportError(ex);
   113     }
   115     gPluginInstaller.pluginInfoReceived(aPluginRequestItem, pluginInfo);
   116   },
   118   onDatasourceError: function pfs_onDatasourceError (aPluginRequestItem, aError) {
   119     this._os.notifyObservers(aPluginRequestItem, "error", aError);
   120     Components.utils.reportError(aError);
   121     gPluginInstaller.pluginInfoReceived(aPluginRequestItem, null);
   122   }
   123 };
   125 function nsPluginXMLRDFDSObserver(aUpdater, aPluginRequestItem) {
   126   this._updater = aUpdater;
   127   this._item    = aPluginRequestItem;
   128 }
   130 nsPluginXMLRDFDSObserver.prototype = 
   131 { 
   132   _updater  : null,
   133   _item     : null,
   135   // nsIRDFXMLSinkObserver
   136   onBeginLoad: function(aSink) {},
   137   onInterrupt: function(aSink) {},
   138   onResume: function(aSink) {},
   139   onEndLoad: function(aSink) {
   140     aSink.removeXMLSinkObserver(this);
   142     var ds = aSink.QueryInterface(Components.interfaces.nsIRDFDataSource);
   143     this._updater.onDatasourceLoaded(ds, this._item);
   144   },
   146   onError: function(aSink, aStatus, aErrorMsg) {  
   147     aSink.removeXMLSinkObserver(this);   
   148     this._updater.onDatasourceError(this._item, aStatus.toString());
   149   }
   150 };

mercurial