diff --git a/browser/components/nsBrowserGlue.js b/browser/components/nsBrowserGlue.js index 76c3cdd17391..0a3cf4463132 100644 --- a/browser/components/nsBrowserGlue.js +++ b/browser/components/nsBrowserGlue.js @@ -16,6 +16,9 @@ Cu.import("resource://gre/modules/AsyncPrefs.jsm"); XPCOMUtils.defineLazyServiceGetter(this, "WindowsUIUtils", "@mozilla.org/windows-ui-utils;1", "nsIWindowsUIUtils"); XPCOMUtils.defineLazyServiceGetter(this, "AlertsService", "@mozilla.org/alerts-service;1", "nsIAlertsService"); +XPCOMUtils.defineLazyGetter(this, "WeaveService", () => + Cc["@mozilla.org/weave/service;1"].getService().wrappedJSObject +); // lazy module getters @@ -973,6 +976,10 @@ BrowserGlue.prototype = { AutoCompletePopup.init(); DateTimePickerHelper.init(); + // Check if Sync is configured + if (Services.prefs.prefHasUserValue("services.sync.username")) { + WeaveService.init(); + } this._firstWindowTelemetry(aWindow); this._firstWindowLoaded(); diff --git a/services/sync/SyncComponents.manifest b/services/sync/SyncComponents.manifest index 6493bb2242ef..faeafd8b6d4b 100644 --- a/services/sync/SyncComponents.manifest +++ b/services/sync/SyncComponents.manifest @@ -1,18 +1,6 @@ -# WeaveService has to restrict its registration for the app-startup category -# to the specific list of apps that use it so it doesn't get loaded in xpcshell. -# Thus we restrict it to these apps: -# -# b2g: {3c2e2abc-06d4-11e1-ac3b-374f68613e61} -# browser: {ec8030f7-c20a-464f-9b0e-13a3a9e97384} -# mobile/android: {aa3c5121-dab2-40e2-81ca-7ea25febc110} -# mobile/xul: {a23983c0-fd0e-11dc-95ff-0800200c9a66} -# suite (comm): {92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a} -# graphene: {d1bfe7d9-c01e-4237-998b-7b5f960a4314} - # Weave.js component {74b89fb0-f200-4ae8-a3ec-dd164117f6de} Weave.js contract @mozilla.org/weave/service;1 {74b89fb0-f200-4ae8-a3ec-dd164117f6de} -category app-startup WeaveService service,@mozilla.org/weave/service;1 application={3c2e2abc-06d4-11e1-ac3b-374f68613e61} application={ec8030f7-c20a-464f-9b0e-13a3a9e97384} application={aa3c5121-dab2-40e2-81ca-7ea25febc110} application={a23983c0-fd0e-11dc-95ff-0800200c9a66} application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a} application={99bceaaa-e3c6-48c1-b981-ef9b46b67d60} application={d1bfe7d9-c01e-4237-998b-7b5f960a4314} component {d28f8a0b-95da-48f4-b712-caf37097be41} Weave.js contract @mozilla.org/network/protocol/about;1?what=sync-log {d28f8a0b-95da-48f4-b712-caf37097be41} diff --git a/services/sync/Weave.js b/services/sync/Weave.js index 2375ccc587a9..966e94888124 100644 --- a/services/sync/Weave.js +++ b/services/sync/Weave.js @@ -94,6 +94,32 @@ WeaveService.prototype = { return onReadyPromise; }, + init() { + // Force Weave service to load if it hasn't triggered from overlays + this.timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); + this.timer.initWithCallback({ + notify: () => { + let isConfigured = false; + // We only load more if it looks like Sync is configured. + if (this.enabled) { + // We have an associated FxAccount. So, do a more thorough check. + // This will import a number of modules and thus increase memory + // accordingly. We could potentially copy code performed by + // this check into this file if our above code is yielding too + // many false positives. + Components.utils.import("resource://services-sync/main.js"); + isConfigured = Weave.Status.checkSetup() != Weave.CLIENT_NOT_CONFIGURED; + } + let getHistogramById = Services.telemetry.getHistogramById; + getHistogramById("WEAVE_CONFIGURED").add(isConfigured); + if (isConfigured) { + getHistogramById("WEAVE_CONFIGURED_MASTER_PASSWORD").add(Utils.mpEnabled()); + this.ensureLoaded(); + } + } + }, 10000, Ci.nsITimer.TYPE_ONE_SHOT); + }, + /** * Whether Sync appears to be enabled. * @@ -105,42 +131,6 @@ WeaveService.prototype = { get enabled() { let prefs = Services.prefs.getBranch(SYNC_PREFS_BRANCH); return prefs.prefHasUserValue("username"); - }, - - observe(subject, topic, data) { - switch (topic) { - case "app-startup": - let os = Cc["@mozilla.org/observer-service;1"]. - getService(Ci.nsIObserverService); - os.addObserver(this, "final-ui-startup", true); - break; - - case "final-ui-startup": - // Force Weave service to load if it hasn't triggered from overlays - this.timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); - this.timer.initWithCallback({ - notify: () => { - let isConfigured = false; - // We only load more if it looks like Sync is configured. - if (this.enabled) { - // We have an associated FxAccount. So, do a more thorough check. - // This will import a number of modules and thus increase memory - // accordingly. We could potentially copy code performed by - // this check into this file if our above code is yielding too - // many false positives. - Components.utils.import("resource://services-sync/main.js"); - isConfigured = Weave.Status.checkSetup() != Weave.CLIENT_NOT_CONFIGURED; - } - let getHistogramById = Services.telemetry.getHistogramById; - getHistogramById("WEAVE_CONFIGURED").add(isConfigured); - if (isConfigured) { - getHistogramById("WEAVE_CONFIGURED_MASTER_PASSWORD").add(Utils.mpEnabled()); - this.ensureLoaded(); - } - } - }, 10000, Ci.nsITimer.TYPE_ONE_SHOT); - break; - } } };