Bug 1472491: Part 5t - Add ThumbnailsChild actor. r=Mossop
MozReview-Commit-ID: 31V11KaJj4D
new file mode 100644
--- /dev/null
+++ b/toolkit/actors/ThumbnailsChild.jsm
@@ -0,0 +1,66 @@
+/* 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 = ["ThumbnailsChild"];
+
+ChromeUtils.import("resource://gre/modules/ActorChild.jsm");
+ChromeUtils.import("resource://gre/modules/Services.jsm");
+
+ChromeUtils.defineModuleGetter(this, "PageThumbUtils",
+ "resource://gre/modules/PageThumbUtils.jsm");
+
+class ThumbnailsChild extends ActorChild {
+ receiveMessage(message) {
+ if (message.name == "Browser:Thumbnail:Request") {
+ /**
+ * Remote thumbnail request handler for PageThumbs thumbnails.
+ */
+ let snapshot;
+ let args = message.data.additionalArgs;
+ let fullScale = args ? args.fullScale : false;
+ if (fullScale) {
+ snapshot = PageThumbUtils.createSnapshotThumbnail(this.content, null, args);
+ } else {
+ let snapshotWidth = message.data.canvasWidth;
+ let snapshotHeight = message.data.canvasHeight;
+ snapshot =
+ PageThumbUtils.createCanvas(this.content, snapshotWidth, snapshotHeight);
+ PageThumbUtils.createSnapshotThumbnail(this.content, snapshot, args);
+ }
+
+ snapshot.toBlob((aBlob) => {
+ this.mm.sendAsyncMessage("Browser:Thumbnail:Response", {
+ thumbnail: aBlob,
+ id: message.data.id
+ });
+ });
+ } else if (message.name == "Browser:Thumbnail:CheckState") {
+ /**
+ * Remote isSafeForCapture request handler for PageThumbs.
+ */
+ Services.tm.idleDispatchToMainThread(() => {
+ let result = PageThumbUtils.shouldStoreContentThumbnail(this.content, this.mm.docShell);
+ this.mm.sendAsyncMessage("Browser:Thumbnail:CheckState:Response", {
+ result
+ });
+ });
+ } else if (message.name == "Browser:Thumbnail:GetOriginalURL") {
+ /**
+ * Remote GetOriginalURL request handler for PageThumbs.
+ */
+ let channel = this.mm.docShell.currentDocumentChannel;
+ let channelError = PageThumbUtils.isChannelErrorResponse(channel);
+ let originalURL;
+ try {
+ originalURL = channel.originalURI.spec;
+ } catch (ex) {}
+ this.mm.sendAsyncMessage("Browser:Thumbnail:GetOriginalURL:Response", {
+ channelError,
+ originalURL,
+ });
+ }
+ }
+}
--- a/toolkit/actors/moz.build
+++ b/toolkit/actors/moz.build
@@ -5,10 +5,11 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
FINAL_TARGET_FILES.actors += [
'AudioPlaybackChild.jsm',
'ExtFindChild.jsm',
'FindBarChild.jsm',
'PrintingChild.jsm',
'SelectChild.jsm',
+ 'ThumbnailsChild.jsm',
'ZoomChild.jsm',
]
--- a/toolkit/content/browser-child.js
+++ b/toolkit/content/browser-child.js
@@ -5,19 +5,16 @@
/* 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");
-ChromeUtils.defineModuleGetter(this, "PageThumbUtils",
- "resource://gre/modules/PageThumbUtils.jsm");
-
this.WebProgress = new WebProgressChild(this);
this.WebNavigation = new WebNavigationChild(this);
var ControllerCommands = {
init() {
addMessageListener("ControllerCommands:Do", this);
addMessageListener("ControllerCommands:DoWithParams", this);
@@ -71,69 +68,16 @@ addEventListener("ImageContentLoaded", f
if (!req.image)
return;
sendAsyncMessage("ImageDocumentLoaded", { width: req.image.width,
height: req.image.height });
}
}, false);
/**
- * Remote thumbnail request handler for PageThumbs thumbnails.
- */
-addMessageListener("Browser:Thumbnail:Request", function(aMessage) {
- let snapshot;
- let args = aMessage.data.additionalArgs;
- let fullScale = args ? args.fullScale : false;
- if (fullScale) {
- snapshot = PageThumbUtils.createSnapshotThumbnail(content, null, args);
- } else {
- let snapshotWidth = aMessage.data.canvasWidth;
- let snapshotHeight = aMessage.data.canvasHeight;
- snapshot =
- PageThumbUtils.createCanvas(content, snapshotWidth, snapshotHeight);
- PageThumbUtils.createSnapshotThumbnail(content, snapshot, args);
- }
-
- snapshot.toBlob(function(aBlob) {
- sendAsyncMessage("Browser:Thumbnail:Response", {
- thumbnail: aBlob,
- id: aMessage.data.id
- });
- });
-});
-
-/**
- * Remote isSafeForCapture request handler for PageThumbs.
- */
-addMessageListener("Browser:Thumbnail:CheckState", function(aMessage) {
- Services.tm.idleDispatchToMainThread(() => {
- let result = PageThumbUtils.shouldStoreContentThumbnail(content, docShell);
- sendAsyncMessage("Browser:Thumbnail:CheckState:Response", {
- result
- });
- });
-});
-
-/**
- * Remote GetOriginalURL request handler for PageThumbs.
- */
-addMessageListener("Browser:Thumbnail:GetOriginalURL", function(aMessage) {
- let channel = docShell.currentDocumentChannel;
- let channelError = PageThumbUtils.isChannelErrorResponse(channel);
- let originalURL;
- try {
- originalURL = channel.originalURI.spec;
- } catch (ex) {}
- sendAsyncMessage("Browser:Thumbnail:GetOriginalURL:Response", {
- channelError,
- originalURL,
- });
-});
-
-/**
* 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);
--- a/toolkit/modules/ActorManagerParent.jsm
+++ b/toolkit/modules/ActorManagerParent.jsm
@@ -153,16 +153,27 @@ let ACTORS = {
module: "resource://gre/actors/SelectChild.jsm",
events: {
"mozshowdropdown": {},
"mozshowdropdown-sourcetouch": {},
},
},
},
+ Thumbnails: {
+ child: {
+ module: "resource://gre/actors/ThumbnailsChild.jsm",
+ messages: [
+ "Browser:Thumbnail:Request",
+ "Browser:Thumbnail:CheckState",
+ "Browser:Thumbnail:GetOriginalURL",
+ ],
+ },
+ },
+
Zoom: {
child: {
module: "resource://gre/actors/ZoomChild.jsm",
events: {
"FullZoomChange": {},
"TextZoomChange": {},
"ZoomChangeUsingMouseWheel": {},
},