diff -r 000000000000 -r 6474c204b198 dom/datastore/DataStoreServiceInternal.jsm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dom/datastore/DataStoreServiceInternal.jsm Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,68 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict" + +const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components; + +this.EXPORTED_SYMBOLS = ["DataStoreServiceInternal"]; + +function debug(s) { + //dump('DEBUG DataStoreServiceInternal: ' + s + '\n'); +} + +Cu.import("resource://gre/modules/XPCOMUtils.jsm"); +Cu.import("resource://gre/modules/Services.jsm"); + +XPCOMUtils.defineLazyServiceGetter(this, "ppmm", + "@mozilla.org/parentprocessmessagemanager;1", + "nsIMessageBroadcaster"); + +XPCOMUtils.defineLazyServiceGetter(this, "dataStoreService", + "@mozilla.org/datastore-service;1", + "nsIDataStoreService"); + +this.DataStoreServiceInternal = { + init: function() { + debug("init"); + + let inParent = Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime) + .processType == Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT; + if (inParent) { + ppmm.addMessageListener("DataStore:Get", this); + } + }, + + receiveMessage: function(aMessage) { + debug("receiveMessage"); + + if (aMessage.name != 'DataStore:Get') { + return; + } + + let prefName = 'dom.testing.datastore_enabled_for_hosted_apps'; + if ((Services.prefs.getPrefType(prefName) == Services.prefs.PREF_INVALID || + !Services.prefs.getBoolPref(prefName)) && + !aMessage.target.assertAppHasStatus(Ci.nsIPrincipal.APP_STATUS_CERTIFIED)) { + return; + } + + let msg = aMessage.data; + + if (!aMessage.principal || + aMessage.principal.appId == Ci.nsIScriptSecurityManager.UNKNOWN_APP_ID) { + aMessage.target.sendAsyncMessage("DataStore:Get:Return:KO"); + return; + } + + msg.stores = dataStoreService.getDataStoresInfo(msg.name, aMessage.principal.appId); + if (msg.stores === null) { + aMessage.target.sendAsyncMessage("DataStore:Get:Return:KO"); + return; + } + aMessage.target.sendAsyncMessage("DataStore:Get:Return:OK", msg); + } +} + +DataStoreServiceInternal.init();