зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1369436, Load PushComponents.js after startup. r=lina
Differential Revision: https://phabricator.services.mozilla.com/D45079 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
48734d5b51
Коммит
8c1fe041e3
|
@ -36,8 +36,6 @@ const startupPhases = {
|
|||
"resource://gre/modules/MainProcessSingleton.jsm",
|
||||
"resource://gre/modules/XPCOMUtils.jsm",
|
||||
"resource://gre/modules/Services.jsm",
|
||||
// Bugs to fix: The following components shouldn't be initialized that early.
|
||||
"resource://gre/modules/PushComponents.jsm", // bug 1369436
|
||||
]),
|
||||
},
|
||||
},
|
||||
|
@ -82,6 +80,7 @@ const startupPhases = {
|
|||
components: new Set([
|
||||
"PageIconProtocolHandler.js",
|
||||
"PlacesCategoriesStarter.js",
|
||||
"PushComponents.jsm",
|
||||
"nsPlacesExpiration.js",
|
||||
]),
|
||||
modules: new Set([
|
||||
|
|
|
@ -20,6 +20,12 @@ ChromeUtils.defineModuleGetter(
|
|||
"resource://gre/modules/ActorManagerParent.jsm"
|
||||
);
|
||||
|
||||
ChromeUtils.defineModuleGetter(
|
||||
this,
|
||||
"PushService",
|
||||
"resource://gre/modules/PushService.jsm"
|
||||
);
|
||||
|
||||
const PREF_PDFJS_ENABLED_CACHE_STATE = "pdfjs.enabledCache.state";
|
||||
|
||||
let ACTORS = {
|
||||
|
@ -2001,6 +2007,11 @@ BrowserGlue.prototype = {
|
|||
Discovery.update();
|
||||
});
|
||||
|
||||
// Begin listening for incoming push messages.
|
||||
Services.tm.idleDispatchToMainThread(() => {
|
||||
PushService.ensureReady();
|
||||
});
|
||||
|
||||
Services.tm.idleDispatchToMainThread(() => {
|
||||
let enableCertErrorUITelemetry = Services.prefs.getBoolPref(
|
||||
"security.certerrors.recordEventTelemetry",
|
||||
|
|
|
@ -69,7 +69,7 @@ PushServiceBase.prototype = {
|
|||
subscriptionChangeTopic: OBSERVER_TOPIC_SUBSCRIPTION_CHANGE,
|
||||
subscriptionModifiedTopic: OBSERVER_TOPIC_SUBSCRIPTION_MODIFIED,
|
||||
|
||||
_handleReady() {},
|
||||
ensureReady() {},
|
||||
|
||||
_addListeners() {
|
||||
for (let message of this._messages) {
|
||||
|
@ -82,18 +82,9 @@ PushServiceBase.prototype = {
|
|||
},
|
||||
|
||||
observe(subject, topic, data) {
|
||||
if (topic === "app-startup") {
|
||||
Services.obs.addObserver(this, "sessionstore-windows-restored", true);
|
||||
return;
|
||||
}
|
||||
if (topic === "sessionstore-windows-restored") {
|
||||
Services.obs.removeObserver(this, "sessionstore-windows-restored");
|
||||
this._handleReady();
|
||||
return;
|
||||
}
|
||||
if (topic === "android-push-service") {
|
||||
// Load PushService immediately.
|
||||
this._handleReady();
|
||||
this.ensureReady();
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -265,7 +256,7 @@ Object.assign(PushServiceParent.prototype, {
|
|||
.catch(Cu.reportError);
|
||||
},
|
||||
|
||||
_handleReady() {
|
||||
ensureReady() {
|
||||
this.service.init();
|
||||
},
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ XPCOMUtils.defineLazyGetter(this, "gDOMBundle", () =>
|
|||
|
||||
XPCOMUtils.defineLazyGlobalGetters(this, ["crypto"]);
|
||||
|
||||
const EXPORTED_SYMBOLS = ["PushCrypto", "concatArray"];
|
||||
const EXPORTED_SYMBOLS = ["PushCrypto"];
|
||||
|
||||
const UTF8 = new TextEncoder("utf-8");
|
||||
|
||||
|
@ -603,6 +603,8 @@ class aesgcm128Decoder extends OldSchemeDecoder {
|
|||
}
|
||||
|
||||
var PushCrypto = {
|
||||
concatArray,
|
||||
|
||||
generateAuthenticationSecret() {
|
||||
return crypto.getRandomValues(new Uint8Array(16));
|
||||
},
|
||||
|
|
|
@ -20,22 +20,6 @@ const { XPCOMUtils } = ChromeUtils.import(
|
|||
|
||||
var PushServiceWebSocket, PushServiceHttp2;
|
||||
|
||||
const CONNECTION_PROTOCOLS = (function() {
|
||||
if ("android" != AppConstants.MOZ_WIDGET_TOOLKIT) {
|
||||
({ PushServiceWebSocket } = ChromeUtils.import(
|
||||
"resource://gre/modules/PushServiceWebSocket.jsm"
|
||||
));
|
||||
({ PushServiceHttp2 } = ChromeUtils.import(
|
||||
"resource://gre/modules/PushServiceHttp2.jsm"
|
||||
));
|
||||
return [PushServiceWebSocket, PushServiceHttp2];
|
||||
}
|
||||
const { PushServiceAndroidGCM } = ChromeUtils.import(
|
||||
"resource://gre/modules/PushServiceAndroidGCM.jsm"
|
||||
);
|
||||
return [PushServiceAndroidGCM];
|
||||
})();
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(
|
||||
this,
|
||||
"gPushNotifier",
|
||||
|
@ -58,6 +42,24 @@ ChromeUtils.defineModuleGetter(
|
|||
"PushCrypto",
|
||||
"resource://gre/modules/PushCrypto.jsm"
|
||||
);
|
||||
ChromeUtils.defineModuleGetter(
|
||||
this,
|
||||
"PushServiceAndroidGCM",
|
||||
"resource://gre/modules/PushServiceAndroidGCM.jsm"
|
||||
);
|
||||
|
||||
const CONNECTION_PROTOCOLS = (function() {
|
||||
if ("android" != AppConstants.MOZ_WIDGET_TOOLKIT) {
|
||||
({ PushServiceWebSocket } = ChromeUtils.import(
|
||||
"resource://gre/modules/PushServiceWebSocket.jsm"
|
||||
));
|
||||
({ PushServiceHttp2 } = ChromeUtils.import(
|
||||
"resource://gre/modules/PushServiceHttp2.jsm"
|
||||
));
|
||||
return [PushServiceWebSocket, PushServiceHttp2];
|
||||
}
|
||||
return [PushServiceAndroidGCM];
|
||||
})();
|
||||
|
||||
const EXPORTED_SYMBOLS = ["PushService"];
|
||||
|
||||
|
@ -100,6 +102,25 @@ const CHANGING_SERVICE_EVENT = 1;
|
|||
const STOPPING_SERVICE_EVENT = 2;
|
||||
const UNINIT_EVENT = 3;
|
||||
|
||||
// Returns the backend for the given server URI.
|
||||
function getServiceForServerURI(uri) {
|
||||
// Insecure server URLs are allowed for development and testing.
|
||||
let allowInsecure = prefs.get("testing.allowInsecureServerURL");
|
||||
if (AppConstants.MOZ_WIDGET_TOOLKIT == "android") {
|
||||
if (uri.scheme == "https" || (allowInsecure && uri.scheme == "http")) {
|
||||
return CONNECTION_PROTOCOLS;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
if (uri.scheme == "wss" || (allowInsecure && uri.scheme == "ws")) {
|
||||
return PushServiceWebSocket;
|
||||
}
|
||||
if (uri.scheme == "https" || (allowInsecure && uri.scheme == "http")) {
|
||||
return PushServiceHttp2;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Annotates an error with an XPCOM result code. We use this helper
|
||||
* instead of `Components.Exception` because the latter can assert in
|
||||
|
@ -408,14 +429,12 @@ var PushService = {
|
|||
_findService(serverURL) {
|
||||
console.debug("findService()");
|
||||
|
||||
let uri;
|
||||
let service;
|
||||
|
||||
if (!serverURL) {
|
||||
console.warn("findService: No dom.push.serverURL found");
|
||||
return [];
|
||||
}
|
||||
|
||||
let uri;
|
||||
try {
|
||||
uri = Services.io.newURI(serverURL);
|
||||
} catch (e) {
|
||||
|
@ -427,12 +446,7 @@ var PushService = {
|
|||
return [];
|
||||
}
|
||||
|
||||
for (let connProtocol of CONNECTION_PROTOCOLS) {
|
||||
if (connProtocol.validServerURI(uri)) {
|
||||
service = connProtocol;
|
||||
break;
|
||||
}
|
||||
}
|
||||
let service = getServiceForServerURI(uri);
|
||||
return [service, uri];
|
||||
},
|
||||
|
||||
|
|
|
@ -79,25 +79,6 @@ var PushServiceAndroidGCM = {
|
|||
);
|
||||
},
|
||||
|
||||
validServerURI(serverURI) {
|
||||
if (!serverURI) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (serverURI.scheme == "https") {
|
||||
return true;
|
||||
}
|
||||
if (serverURI.scheme == "http") {
|
||||
// Allow insecure server URLs for development and testing.
|
||||
return !!prefs.get("testing.allowInsecureServerURL");
|
||||
}
|
||||
console.info(
|
||||
"Unsupported Android GCM dom.push.serverURL scheme",
|
||||
serverURI.scheme
|
||||
);
|
||||
return false;
|
||||
},
|
||||
|
||||
observe(subject, topic, data) {
|
||||
switch (topic) {
|
||||
case "nsPref:changed":
|
||||
|
|
|
@ -425,13 +425,6 @@ var PushServiceHttp2 = {
|
|||
return this._mainPushService !== null;
|
||||
},
|
||||
|
||||
validServerURI(serverURI) {
|
||||
if (serverURI.scheme == "http") {
|
||||
return !!prefs.getBoolPref("testing.allowInsecureServerURL", false);
|
||||
}
|
||||
return serverURI.scheme == "https";
|
||||
},
|
||||
|
||||
async connect(broadcastListeners) {
|
||||
let subscriptions = await this._mainPushService.getAllUnexpired();
|
||||
this.startConnections(subscriptions);
|
||||
|
|
|
@ -254,13 +254,6 @@ var PushServiceWebSocket = {
|
|||
}
|
||||
},
|
||||
|
||||
validServerURI(serverURI) {
|
||||
if (serverURI.scheme == "ws") {
|
||||
return !!prefs.get("testing.allowInsecureServerURL");
|
||||
}
|
||||
return serverURI.scheme == "wss";
|
||||
},
|
||||
|
||||
get _UAID() {
|
||||
return prefs.get("userAgentID");
|
||||
},
|
||||
|
|
Загрузка…
Ссылка в новой задаче