Bug 1472491: Part 5ι - Add LoginManagerChild actor. r?MattN f=mconley
MozReview-Commit-ID: Baga8mM9DxD
--- 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},
},
},
},