Bug 1472491: Part 5t - Add ThumbnailsChild actor. r=Mossop draft
authorKris Maglione <maglione.k@gmail.com>
Sun, 29 Jul 2018 22:25:48 -0700
changeset 828455 fab2ba86bb392f4deb6a28fa8a6701f39ca95281
parent 828454 a093da4b78ed4c165956b150d415f3ab247b018e
child 828456 4781eff0b24e5e425c46f905da301dc420e989e4
push id118680
push usermaglione.k@gmail.com
push dateFri, 10 Aug 2018 23:04:22 +0000
reviewersMossop
bugs1472491
milestone63.0a1
Bug 1472491: Part 5t - Add ThumbnailsChild actor. r=Mossop MozReview-Commit-ID: 31V11KaJj4D
toolkit/actors/ThumbnailsChild.jsm
toolkit/actors/moz.build
toolkit/content/browser-child.js
toolkit/modules/ActorManagerParent.jsm
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": {},
       },