Bug 1472491: Part 5ι - Add LoginManagerChild actor. r?MattN f=mconley draft
authorKris Maglione <maglione.k@gmail.com>
Mon, 30 Jul 2018 11:36:26 -0700
changeset 828470 0cc992586b1bf9fff37b562d76bc73b86a1511f3
parent 828469 3a9a3aa60db74cf9f5aea93e6e93da0f82deadf8
child 828471 ffc1d3dce2eb7b5819220fddd7ecbe00dbb168a4
push id118680
push usermaglione.k@gmail.com
push dateFri, 10 Aug 2018 23:04:22 +0000
reviewersMattN
bugs1472491
milestone63.0a1
Bug 1472491: Part 5ι - Add LoginManagerChild actor. r?MattN f=mconley MozReview-Commit-ID: Baga8mM9DxD
browser/base/content/content.js
toolkit/components/passwordmgr/LoginManagerChild.jsm
toolkit/components/passwordmgr/moz.build
toolkit/modules/ActorManagerParent.jsm
--- a/browser/base/content/content.js
+++ b/browser/base/content/content.js
@@ -7,64 +7,31 @@
  * depend on the frame being contained in tabbrowser. */
 
 /* eslint-env mozilla/frame-script */
 /* eslint no-unused-vars: ["error", {args: "none"}] */
 
 ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
 ChromeUtils.import("resource://gre/modules/Services.jsm");
 
-// TabChildGlobal
-var global = this;
-
 XPCOMUtils.defineLazyModuleGetters(this, {
   ContentLinkHandler: "resource:///modules/ContentLinkHandler.jsm",
   ContentMetaHandler: "resource:///modules/ContentMetaHandler.jsm",
-  LoginFormFactory: "resource://gre/modules/LoginManagerContent.jsm",
-  InsecurePasswordUtils: "resource://gre/modules/InsecurePasswordUtils.jsm",
   FormSubmitObserver: "resource:///modules/FormSubmitObserver.jsm",
-  ContextMenuChild: "resource:///modules/ContextMenuChild.jsm",
-});
-
-XPCOMUtils.defineLazyGetter(this, "LoginManagerContent", () => {
-  let tmp = {};
-  ChromeUtils.import("resource://gre/modules/LoginManagerContent.jsm", tmp);
-  tmp.LoginManagerContent.setupEventListeners(global);
-  return tmp.LoginManagerContent;
 });
 
 XPCOMUtils.defineLazyProxy(this, "formSubmitObserver", () => {
   return new FormSubmitObserver(content, this);
 }, {
   // stub QI
   QueryInterface: ChromeUtils.generateQI([Ci.nsIFormSubmitObserver, Ci.nsISupportsWeakReference])
 });
 
 Services.obs.addObserver(formSubmitObserver, "invalidformsubmit", true);
 
-// NOTE: Much of this logic is duplicated in BrowserCLH.js for Android.
-addMessageListener("RemoteLogins:fillForm", function(message) {
-  // intercept if ContextMenu.jsm had sent a plain object for remote targets
-  message.objects.inputElement = ContextMenuChild.getTarget(global, message, "inputElement");
-  LoginManagerContent.receiveMessage(message, content);
-});
-addEventListener("DOMFormHasPassword", function(event) {
-  LoginManagerContent.onDOMFormHasPassword(event, content);
-  let formLike = LoginFormFactory.createFromForm(event.originalTarget);
-  InsecurePasswordUtils.reportInsecurePasswords(formLike);
-});
-addEventListener("DOMInputPasswordAdded", function(event) {
-  LoginManagerContent.onDOMInputPasswordAdded(event, content);
-  let formLike = LoginFormFactory.createFromField(event.originalTarget);
-  InsecurePasswordUtils.reportInsecurePasswords(formLike);
-});
-addEventListener("DOMAutoComplete", function(event) {
-  LoginManagerContent.onUsernameInput(event);
-});
-
 new ContentLinkHandler(this);
 ContentMetaHandler.init(this);
 
 // This is a temporary hack to prevent regressions (bug 1471327).
 void content;
 
 addEventListener("DOMWindowFocus", function(event) {
   sendAsyncMessage("DOMWindowFocus", {});
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/LoginManagerChild.jsm
@@ -0,0 +1,61 @@
+/* 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 = ["LoginManagerChild"];
+
+ChromeUtils.import("resource://gre/modules/ActorChild.jsm");
+ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
+
+ChromeUtils.defineModuleGetter(this, "ContextMenuChild",
+                               "resource:///modules/ContextMenuChild.jsm");
+ChromeUtils.defineModuleGetter(this, "InsecurePasswordUtils",
+                               "resource://gre/modules/InsecurePasswordUtils.jsm");
+ChromeUtils.defineModuleGetter(this, "LoginFormFactory",
+                               "resource://gre/modules/LoginManagerContent.jsm");
+
+class LoginManagerChild extends ActorChild {
+  constructor(mm) {
+    super(mm);
+
+    XPCOMUtils.defineLazyGetter(this, "LoginManagerContent", () => {
+      let tmp = {};
+      ChromeUtils.import("resource://gre/modules/LoginManagerContent.jsm", tmp);
+      tmp.LoginManagerContent.setupEventListeners(mm);
+      return tmp.LoginManagerContent;
+    });
+  }
+
+  handleEvent(event) {
+    switch (event.type) {
+      case "DOMFormHasPassword": {
+        this.LoginManagerContent.onDOMFormHasPassword(event, this.content);
+        let formLike = LoginFormFactory.createFromForm(event.originalTarget);
+        InsecurePasswordUtils.reportInsecurePasswords(formLike);
+        break;
+      }
+      case "DOMInputPasswordAdded": {
+        this.LoginManagerContent.onDOMInputPasswordAdded(event, this.content);
+        let formLike = LoginFormFactory.createFromField(event.originalTarget);
+        InsecurePasswordUtils.reportInsecurePasswords(formLike);
+        break;
+      }
+      case "DOMAutoComplete": {
+        this.LoginManagerContent.onUsernameInput(event);
+        break;
+      }
+    }
+  }
+
+  receiveMessage(message) {
+    switch (message.name) {
+    case "RemoteLogins:fillForm":
+      // intercept if ContextMenu.jsm had sent a plain object for remote targets
+      message.objects.inputElement = ContextMenuChild.getTarget(this.mm, message, "inputElement");
+      this.LoginManagerContent.receiveMessage(message, this.content);
+      break;
+    }
+  }
+}
--- a/toolkit/components/passwordmgr/moz.build
+++ b/toolkit/components/passwordmgr/moz.build
@@ -38,16 +38,17 @@ EXTRA_COMPONENTS += [
 
 EXTRA_PP_COMPONENTS += [
     'passwordmgr.manifest',
 ]
 
 EXTRA_JS_MODULES += [
     'InsecurePasswordUtils.jsm',
     'LoginHelper.jsm',
+    'LoginManagerChild.jsm',
     'LoginManagerContent.jsm',
     'LoginManagerParent.jsm',
     'LoginRecipes.jsm',
     'OSCrypto.jsm',
 ]
 
 if CONFIG['OS_TARGET'] == 'Android':
     EXTRA_COMPONENTS += [
--- a/toolkit/modules/ActorManagerParent.jsm
+++ b/toolkit/modules/ActorManagerParent.jsm
@@ -160,16 +160,30 @@ let ACTORS = {
     child: {
       module: "resource://gre/actors/FindBarChild.jsm",
       events: {
         "keypress": {mozSystemGroup: true},
       },
     },
   },
 
+  LoginManager: {
+    child: {
+      module: "resource://gre/modules/LoginManagerChild.jsm",
+      messages: [
+        "RemoteLogins:fillForm",
+      ],
+      events: {
+        "DOMAutoComplete": {},
+        "DOMFormHasPassword": {},
+        "DOMInputPasswordAdded": {},
+      },
+    },
+  },
+
   PopupBlocking: {
     child: {
       module: "resource://gre/actors/PopupBlockingChild.jsm",
       events: {
         "DOMPopupBlocked": {capture: true},
       },
     },
   },