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:
Emma Malysz 2019-09-12 16:53:55 +00:00
Родитель 48734d5b51
Коммит 8c1fe041e3
8 изменённых файлов: 57 добавлений и 73 удалений

Просмотреть файл

@ -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");
},