dom/datastore/DataStoreServiceInternal.jsm

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/dom/datastore/DataStoreServiceInternal.jsm	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,68 @@
     1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public
     1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this file,
     1.6 + * You can obtain one at http://mozilla.org/MPL/2.0/. */
     1.7 +
     1.8 +"use strict"
     1.9 +
    1.10 +const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
    1.11 +
    1.12 +this.EXPORTED_SYMBOLS = ["DataStoreServiceInternal"];
    1.13 +
    1.14 +function debug(s) {
    1.15 +  //dump('DEBUG DataStoreServiceInternal: ' + s + '\n');
    1.16 +}
    1.17 +
    1.18 +Cu.import("resource://gre/modules/XPCOMUtils.jsm");
    1.19 +Cu.import("resource://gre/modules/Services.jsm");
    1.20 +
    1.21 +XPCOMUtils.defineLazyServiceGetter(this, "ppmm",
    1.22 +                                   "@mozilla.org/parentprocessmessagemanager;1",
    1.23 +                                   "nsIMessageBroadcaster");
    1.24 +
    1.25 +XPCOMUtils.defineLazyServiceGetter(this, "dataStoreService",
    1.26 +                                   "@mozilla.org/datastore-service;1",
    1.27 +                                   "nsIDataStoreService");
    1.28 +
    1.29 +this.DataStoreServiceInternal = {
    1.30 +  init: function() {
    1.31 +    debug("init");
    1.32 +
    1.33 +    let inParent = Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime)
    1.34 +                      .processType == Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT;
    1.35 +    if (inParent) {
    1.36 +      ppmm.addMessageListener("DataStore:Get", this);
    1.37 +    }
    1.38 +  },
    1.39 +
    1.40 +  receiveMessage: function(aMessage) {
    1.41 +    debug("receiveMessage");
    1.42 +
    1.43 +    if (aMessage.name != 'DataStore:Get') {
    1.44 +      return;
    1.45 +    }
    1.46 +
    1.47 +    let prefName = 'dom.testing.datastore_enabled_for_hosted_apps';
    1.48 +    if ((Services.prefs.getPrefType(prefName) == Services.prefs.PREF_INVALID ||
    1.49 +         !Services.prefs.getBoolPref(prefName)) &&
    1.50 +        !aMessage.target.assertAppHasStatus(Ci.nsIPrincipal.APP_STATUS_CERTIFIED)) {
    1.51 +      return;
    1.52 +    }
    1.53 +
    1.54 +    let msg = aMessage.data;
    1.55 +
    1.56 +    if (!aMessage.principal ||
    1.57 +        aMessage.principal.appId == Ci.nsIScriptSecurityManager.UNKNOWN_APP_ID) {
    1.58 +      aMessage.target.sendAsyncMessage("DataStore:Get:Return:KO");
    1.59 +      return;
    1.60 +    }
    1.61 +
    1.62 +    msg.stores = dataStoreService.getDataStoresInfo(msg.name, aMessage.principal.appId);
    1.63 +    if (msg.stores === null) {
    1.64 +      aMessage.target.sendAsyncMessage("DataStore:Get:Return:KO");
    1.65 +      return;
    1.66 +    }
    1.67 +    aMessage.target.sendAsyncMessage("DataStore:Get:Return:OK", msg);
    1.68 +  }
    1.69 +}
    1.70 +
    1.71 +DataStoreServiceInternal.init();

mercurial