gecko-dev/dom/messages/SystemMessageCache.js
Kan-Ru Chen (陳侃如) 80f3601ac3 Bug 1137722 - Ensure that system message cache is refreshed before openapp. r=fabrice
--HG--
extra : rebase_source : e987e1c469da3175a15155a164130b2f0e9b3de4
2015-03-05 22:28:00 -05:00

84 lines
2.4 KiB
JavaScript

/* 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 Ci = Components.interfaces;
const Cu = Components.utils;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");
XPCOMUtils.defineLazyServiceGetter(this, "cpmm",
"@mozilla.org/childprocessmessagemanager;1",
"nsISyncMessageSender");
function debug(aMsg) {
// dump("-- SystemMessageCache " + Date.now() + " : " + aMsg + "\n");
}
const kMessages = ["SystemMessageCache:RefreshCache"];
function SystemMessageCache() {
debug("init");
this._pagesCache = [];
Services.obs.addObserver(this, "xpcom-shutdown", false);
kMessages.forEach(function(aMessage) {
cpmm.addMessageListener(aMessage, this);
}, this);
}
SystemMessageCache.prototype = {
observe: function(aSubject, aTopic, aData) {
switch (aTopic) {
case "xpcom-shutdown":
debug("received xpcom-shutdown");
kMessages.forEach(function(aMessage) {
cpmm.removeMessageListener(aMessage, this);
}, this);
Services.obs.removeObserver(this, "xpcom-shutdown");
cpmm = null;
break;
default:
break;
}
},
receiveMessage: function(aMessage) {
switch (aMessage.name) {
case "SystemMessageCache:RefreshCache":
this._pagesCache = aMessage.data;
debug("received RefreshCache");
break;
default:
debug("received unknown message " + aMessage.name);
break;
}
},
hasPendingMessage: function(aType, aPageURL, aManifestURL) {
let hasMessage = this._pagesCache.some(function(aPage) {
if (aPage.type === aType &&
aPage.pageURL === aPageURL &&
aPage.manifestURL === aManifestURL) {
return true;
}
return false;
}, this);
debug("hasPendingMessage " + aType + " " + aPageURL + " " +
aManifestURL + ": " + hasMessage);
return hasMessage;
},
classID: Components.ID("{5a19d86a-21e5-4ac8-9634-8c364c73f87f}"),
QueryInterface: XPCOMUtils.generateQI([Ci.nsISystemMessageCache,
Ci.nsIMessageListener,
Ci.nsIObserver])
};
this.NSGetFactory = XPCOMUtils.generateNSGetFactory([SystemMessageCache]);