Bug 1358921: Lazily load webrtcUI.jsm when first needed. r=florian

MozReview-Commit-ID: LRtpyBaRCMA
This commit is contained in:
Kris Maglione
2017-05-02 19:50:20 -07:00
parent 44cdf21293
commit e50f27bd6b
3 changed files with 82 additions and 41 deletions

View File

@@ -41,6 +41,8 @@ XPCOMUtils.defineLazyServiceGetter(this, "AlertsService", "@mozilla.org/alerts-s
* XXX Bug 1325373 is for making eslint detect these automatically.
*/
let initializedModules = {};
[
["AboutHome", "resource:///modules/AboutHome.jsm"],
["AboutNewTab", "resource:///modules/AboutNewTab.jsm"],
@@ -87,9 +89,19 @@ XPCOMUtils.defineLazyServiceGetter(this, "AlertsService", "@mozilla.org/alerts-s
["UITour", "resource:///modules/UITour.jsm"],
["WebChannel", "resource://gre/modules/WebChannel.jsm"],
["WindowsRegistry", "resource://gre/modules/WindowsRegistry.jsm"],
["webrtcUI", "resource:///modules/webrtcUI.jsm"],
["webrtcUI", "resource:///modules/webrtcUI.jsm", "init"],
["UserAgentOverrides", "resource://gre/modules/UserAgentOverrides.jsm"],
].forEach(([name, resource]) => XPCOMUtils.defineLazyModuleGetter(this, name, resource));
].forEach(([name, resource, init]) => {
if (init) {
XPCOMUtils.defineLazyGetter(this, name, () => {
Cu.import(resource, initializedModules);
initializedModules[name][init]();
return initializedModules[name];
});
} else {
XPCOMUtils.defineLazyModuleGetter(this, name, resource);
}
});
if (AppConstants.MOZ_CRASHREPORTER) {
XPCOMUtils.defineLazyModuleGetter(this, "PluginCrashReporter",
@@ -108,6 +120,63 @@ XPCOMUtils.defineLazyGetter(this, "gBrowserBundle", function() {
return Services.strings.createBundle("chrome://browser/locale/browser.properties");
});
const global = this;
const listeners = {
observers: {
},
ppmm: {
"webrtc:UpdateGlobalIndicators": ["webrtcUI"],
"webrtc:UpdatingIndicators": ["webrtcUI"],
},
mm: {
"rtcpeer:CancelRequest": ["webrtcUI"],
"rtcpeer:Request": ["webrtcUI"],
"webrtc:CancelRequest": ["webrtcUI"],
"webrtc:Request": ["webrtcUI"],
"webrtc:StopRecording": ["webrtcUI"],
"webrtc:UpdateBrowserIndicators": ["webrtcUI"],
},
observe(subject, topic, data) {
for (let module of this.observers[topic]) {
try {
this[module].observe(subject, topic, data);
} catch (e) {
Cu.reportError(e);
}
}
},
receiveMessage(modules, data) {
for (let module of modules[data.name]) {
try {
global[module].receiveMessage(data);
} catch (e) {
Cu.reportError(e);
}
}
},
init() {
for (let observer of Object.keys(this.observers)) {
Services.obs.addObserver(this, observer);
}
let receiveMessageMM = this.receiveMessage.bind(this, this.mm);
for (let message of Object.keys(this.mm)) {
Services.mm.addMessageListener(message, receiveMessageMM);
}
let receiveMessagePPMM = this.receiveMessage.bind(this, this.ppmm);
for (let message of Object.keys(this.ppmm)) {
Services.ppmm.addMessageListener(message, receiveMessagePPMM);
}
}
};
// Seconds of idle before trying to create a bookmarks backup.
const BOOKMARKS_BACKUP_IDLE_TIME_SEC = 8 * 60;
// Minimum interval between backups. We try to not create more than one backup
@@ -499,8 +568,10 @@ BrowserGlue.prototype = {
// handle any UI migration
this._migrateUI();
listeners.init();
PageThumbs.init();
webrtcUI.init();
AboutHome.init();
DirectoryLinksProvider.init();
@@ -890,12 +961,17 @@ BrowserGlue.prototype = {
delete this._bookmarksBackupIdleTime;
}
for (let mod of Object.values(initializedModules)) {
if (mod.uninit) {
mod.uninit();
}
}
BrowserUsageTelemetry.uninit();
SelfSupportBackend.uninit();
PageThumbs.uninit();
AboutNewTab.uninit();
NewTabUtils.uninit();
webrtcUI.uninit();
FormValidationHandler.uninit();
AutoCompletePopup.uninit();
DateTimePickerHelper.uninit();