Bug 1472491: Part 5η - Add BrowserChild actor. r?florian f=mconley
MozReview-Commit-ID: D1d4hFGNKXj
--- a/browser/base/content/test/performance/browser_startup_content.js
+++ b/browser/base/content/test/performance/browser_startup_content.js
@@ -50,17 +50,16 @@ const whitelist = {
// Browser front-end
"resource:///modules/AboutReaderChild.jsm",
"resource:///modules/BrowserTabChild.jsm",
"resource:///modules/ContentLinkHandler.jsm",
"resource:///modules/ContentMetaHandler.jsm",
"resource:///modules/PageStyleChild.jsm",
"resource://gre/modules/ActorChild.jsm",
"resource://gre/modules/ActorManagerChild.jsm",
- "resource://gre/modules/BrowserUtils.jsm",
"resource://gre/modules/E10SUtils.jsm",
"resource://gre/modules/PrivateBrowsingUtils.jsm",
"resource://gre/modules/ReaderMode.jsm",
"resource://gre/modules/WebProgressChild.jsm",
"resource://gre/modules/WebNavigationChild.jsm",
"resource://gre/modules/ZoomChild.jsm",
// Pocket
new file mode 100644
--- /dev/null
+++ b/toolkit/actors/BrowserChild.jsm
@@ -0,0 +1,49 @@
+/* vim: set ts=2 sw=2 sts=2 et tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+"use strict";
+
+var EXPORTED_SYMBOLS = ["BrowserChild"];
+
+ChromeUtils.import("resource://gre/modules/ActorChild.jsm");
+
+ChromeUtils.defineModuleGetter(this, "BrowserUtils",
+ "resource://gre/modules/BrowserUtils.jsm");
+
+class BrowserChild extends ActorChild {
+ handleEvent(event) {
+ if (event.type == "DOMWindowClose") {
+ this.mm.sendAsyncMessage("DOMWindowClose");
+ }
+ }
+
+ receiveMessage(message) {
+ switch (message.name) {
+ case "Browser:CreateAboutBlank":
+ if (!this.content.document || this.content.document.documentURI != "about:blank") {
+ throw new Error("Can't create a content viewer unless on about:blank");
+ }
+ let principal = message.data;
+ principal = BrowserUtils.principalWithMatchingOA(principal, this.content.document.nodePrincipal);
+ this.mm.docShell.createAboutBlankContentViewer(principal);
+ break;
+
+ case "InPermitUnload":
+ let inPermitUnload = this.mm.docShell.contentViewer && this.mm.docShell.contentViewer.inPermitUnload;
+ this.mm.sendAsyncMessage("InPermitUnload", {id: message.data.id, inPermitUnload});
+ break;
+
+ case "PermitUnload":
+ this.mm.sendAsyncMessage("PermitUnload", {id: message.data.id, kind: "start"});
+
+ let permitUnload = true;
+ if (this.mm.docShell && this.mm.docShell.contentViewer) {
+ permitUnload = this.mm.docShell.contentViewer.permitUnload(message.data.aPermitUnloadFlags);
+ }
+
+ this.mm.sendAsyncMessage("PermitUnload", {id: message.data.id, kind: "end", permitUnload});
+ break;
+ }
+ }
+}
--- a/toolkit/actors/moz.build
+++ b/toolkit/actors/moz.build
@@ -1,16 +1,17 @@
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
FINAL_TARGET_FILES.actors += [
'AudioPlaybackChild.jsm',
+ 'BrowserChild.jsm',
'ControllersChild.jsm',
'DateTimePickerChild.jsm',
'ExtFindChild.jsm',
'FindBarChild.jsm',
'PopupBlockingChild.jsm',
'PrintingChild.jsm',
'PurgeSessionHistoryChild.jsm',
'SelectChild.jsm',
--- a/toolkit/content/browser-child.js
+++ b/toolkit/content/browser-child.js
@@ -1,69 +1,34 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/* eslint-env mozilla/frame-script */
-ChromeUtils.import("resource://gre/modules/BrowserUtils.jsm");
ChromeUtils.import("resource://gre/modules/Services.jsm");
ChromeUtils.import("resource://gre/modules/Timer.jsm");
ChromeUtils.import("resource://gre/modules/WebNavigationChild.jsm");
ChromeUtils.import("resource://gre/modules/WebProgressChild.jsm");
this.WebProgress = new WebProgressChild(this);
this.WebNavigation = new WebNavigationChild(this);
addEventListener("DOMTitleChanged", function(aEvent) {
if (!aEvent.isTrusted || aEvent.target.defaultView != content)
return;
sendAsyncMessage("DOMTitleChanged", { title: content.document.title });
}, false);
-addEventListener("DOMWindowClose", function(aEvent) {
- if (!aEvent.isTrusted)
- return;
- sendAsyncMessage("DOMWindowClose");
-}, false);
-
addEventListener("ImageContentLoaded", function(aEvent) {
if (content.document instanceof Ci.nsIImageDocument) {
let req = content.document.imageRequest;
if (!req.image)
return;
sendAsyncMessage("ImageDocumentLoaded", { width: req.image.width,
height: req.image.height });
}
}, false);
-/**
- * Remote createAboutBlankContentViewer request handler.
- */
-addMessageListener("Browser:CreateAboutBlank", function(aMessage) {
- if (!content.document || content.document.documentURI != "about:blank") {
- throw new Error("Can't create a content viewer unless on about:blank");
- }
- let principal = aMessage.data;
- principal = BrowserUtils.principalWithMatchingOA(principal, content.document.nodePrincipal);
- docShell.createAboutBlankContentViewer(principal);
-});
-
-addMessageListener("InPermitUnload", msg => {
- let inPermitUnload = docShell.contentViewer && docShell.contentViewer.inPermitUnload;
- sendAsyncMessage("InPermitUnload", {id: msg.data.id, inPermitUnload});
-});
-
-addMessageListener("PermitUnload", msg => {
- sendAsyncMessage("PermitUnload", {id: msg.data.id, kind: "start"});
-
- let permitUnload = true;
- if (docShell && docShell.contentViewer) {
- permitUnload = docShell.contentViewer.permitUnload(msg.data.aPermitUnloadFlags);
- }
-
- sendAsyncMessage("PermitUnload", {id: msg.data.id, kind: "end", permitUnload});
-});
-
// We may not get any responses to Browser:Init if the browser element
// is torn down too quickly.
var outerWindowID = content.windowUtils.outerWindowID;
sendAsyncMessage("Browser:Init", {outerWindowID});
--- a/toolkit/modules/ActorManagerParent.jsm
+++ b/toolkit/modules/ActorManagerParent.jsm
@@ -106,16 +106,31 @@ let ACTORS = {
"AudioPlayback",
],
observers: [
"audio-playback",
],
},
},
+ Browser: {
+ child: {
+ module: "resource://gre/actors/BrowserChild.jsm",
+ events: {
+ "DOMWindowClose": {},
+ },
+
+ messages: [
+ "Browser:CreateAboutBlank",
+ "InPermitUnload",
+ "PermitUnload",
+ ],
+ },
+ },
+
Controllers: {
child: {
module: "resource://gre/actors/ControllersChild.jsm",
messages: [
"ControllerCommands:Do",
"ControllerCommands:DoWithParams",
],
},