forked from mirrors/gecko-dev
This introduces a new toolkit module, ContentDOMReference, which can generate identifiers for DOM elements that can be safely passed across the process boundary without having to use the CPOW infrastructure. The Password Manager code seemed to be the only thing using the original CPOW, so this has been updated to use the ContentDOMReference identifier instead. Differential Revision: https://phabricator.services.mozilla.com/D32758 --HG-- extra : moz-landing-system : lando
68 lines
2.5 KiB
JavaScript
68 lines
2.5 KiB
JavaScript
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
/* 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/. */
|
|
|
|
/* This content script should work in any browser or iframe and should not
|
|
* depend on the frame being contained in tabbrowser. */
|
|
|
|
/* eslint-env mozilla/frame-script */
|
|
/* eslint no-unused-vars: ["error", {args: "none"}] */
|
|
|
|
var {XPCOMUtils} = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
|
|
|
|
// BrowserChildGlobal
|
|
var global = this;
|
|
|
|
XPCOMUtils.defineLazyModuleGetters(this, {
|
|
ContentMetaHandler: "resource:///modules/ContentMetaHandler.jsm",
|
|
LoginFormFactory: "resource://gre/modules/LoginFormFactory.jsm",
|
|
InsecurePasswordUtils: "resource://gre/modules/InsecurePasswordUtils.jsm",
|
|
});
|
|
|
|
XPCOMUtils.defineLazyGetter(this, "LoginManagerContent", () => {
|
|
let tmp = {};
|
|
ChromeUtils.import("resource://gre/modules/LoginManagerContent.jsm", tmp);
|
|
tmp.LoginManagerContent.setupEventListeners(global);
|
|
return tmp.LoginManagerContent;
|
|
});
|
|
|
|
// NOTE: Much of this logic is duplicated in BrowserCLH.js for Android.
|
|
addMessageListener("PasswordManager:fillForm", function(message) {
|
|
// intercept if ContextMenu.jsm had sent a plain object for remote targets
|
|
LoginManagerContent.receiveMessage(message, content);
|
|
});
|
|
|
|
function shouldIgnoreLoginManagerEvent(event) {
|
|
// If we have a null principal then prevent any more password manager code from running and
|
|
// incorrectly using the document `location`.
|
|
return event.target.nodePrincipal.isNullPrincipal;
|
|
}
|
|
|
|
addEventListener("DOMFormBeforeSubmit", function(event) {
|
|
if (shouldIgnoreLoginManagerEvent(event)) {
|
|
return;
|
|
}
|
|
LoginManagerContent.onDOMFormBeforeSubmit(event);
|
|
});
|
|
addEventListener("DOMFormHasPassword", function(event) {
|
|
if (shouldIgnoreLoginManagerEvent(event)) {
|
|
return;
|
|
}
|
|
LoginManagerContent.onDOMFormHasPassword(event);
|
|
let formLike = LoginFormFactory.createFromForm(event.originalTarget);
|
|
InsecurePasswordUtils.reportInsecurePasswords(formLike);
|
|
});
|
|
addEventListener("DOMInputPasswordAdded", function(event) {
|
|
if (shouldIgnoreLoginManagerEvent(event)) {
|
|
return;
|
|
}
|
|
LoginManagerContent.onDOMInputPasswordAdded(event, content);
|
|
let formLike = LoginFormFactory.createFromField(event.originalTarget);
|
|
InsecurePasswordUtils.reportInsecurePasswords(formLike);
|
|
});
|
|
|
|
ContentMetaHandler.init(this);
|
|
|
|
// This is a temporary hack to prevent regressions (bug 1471327).
|
|
void content;
|