Bug 1358921: Lazily load webrtcUI.jsm when first needed. r=florian
MozReview-Commit-ID: LRtpyBaRCMA
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user