mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-16 23:05:42 +00:00
Bug 1367077 - 3. Move form fill event listeners out of browser.js; r=sebastian
Move the form fill event listeners out of browser.js and into BrowserCLH.js, and update them to support chrome windows, so we can handle form fill events for Fennec, custom tabs, and PWAs. MozReview-Commit-ID: Fb5gWmGvxfE --HG-- extra : rebase_source : 1ecb7f83bc8022cb3fef1a5ffa9d9d084b837bf4
This commit is contained in:
parent
a8bb402821
commit
f28e8f36e0
@ -46,12 +46,6 @@ XPCOMUtils.defineLazyModuleGetter(this, "Downloads",
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "UserAgentOverrides",
|
||||
"resource://gre/modules/UserAgentOverrides.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "LoginManagerContent",
|
||||
"resource://gre/modules/LoginManagerContent.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "LoginManagerParent",
|
||||
"resource://gre/modules/LoginManagerParent.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "Task", "resource://gre/modules/Task.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "OS", "resource://gre/modules/osfile.jsm");
|
||||
|
||||
@ -556,9 +550,6 @@ var BrowserApp = {
|
||||
// Bug 778855 - Perf regression if we do this here. To be addressed in bug 779008.
|
||||
InitLater(() => SafeBrowsing.init(), window, "SafeBrowsing");
|
||||
|
||||
InitLater(() => Cc["@mozilla.org/login-manager;1"].getService(Ci.nsILoginManager));
|
||||
InitLater(() => LoginManagerParent.init(), window, "LoginManagerParent");
|
||||
|
||||
}, {once: true});
|
||||
|
||||
// Pass caret StateChanged events to ActionBarHandler.
|
||||
@ -3774,7 +3765,6 @@ Tab.prototype = {
|
||||
|
||||
this.browser.removeEventListener("DOMContentLoaded", this, true);
|
||||
this.browser.removeEventListener("DOMFormHasPassword", this, true);
|
||||
this.browser.removeEventListener("DOMInputPasswordAdded", this, true);
|
||||
this.browser.removeEventListener("DOMLinkAdded", this, true);
|
||||
this.browser.removeEventListener("DOMLinkChanged", this, true);
|
||||
this.browser.removeEventListener("DOMMetaAdded", this);
|
||||
@ -3783,8 +3773,6 @@ Tab.prototype = {
|
||||
this.browser.removeEventListener("DOMAudioPlaybackStopped", this, true);
|
||||
this.browser.removeEventListener("DOMWindowClose", this, true);
|
||||
this.browser.removeEventListener("DOMWillOpenModalDialog", this, true);
|
||||
this.browser.removeEventListener("DOMAutoComplete", this, true);
|
||||
this.browser.removeEventListener("blur", this, true);
|
||||
this.browser.removeEventListener("pageshow", this, true);
|
||||
this.browser.removeEventListener("MozApplicationManifest", this, true);
|
||||
this.browser.removeEventListener("TabPreZombify", this, true);
|
||||
@ -4144,9 +4132,6 @@ Tab.prototype = {
|
||||
}
|
||||
|
||||
case "DOMFormHasPassword": {
|
||||
LoginManagerContent.onDOMFormHasPassword(aEvent,
|
||||
this.browser.contentWindow);
|
||||
|
||||
// Send logins for this hostname to Java.
|
||||
let hostname = aEvent.target.baseURIObject.prePath;
|
||||
let foundLogins = Services.logins.findLogins({}, hostname, "", "");
|
||||
@ -4162,11 +4147,6 @@ Tab.prototype = {
|
||||
break;
|
||||
}
|
||||
|
||||
case "DOMInputPasswordAdded": {
|
||||
LoginManagerContent.onDOMInputPasswordAdded(aEvent,
|
||||
this.browser.contentWindow);
|
||||
}
|
||||
|
||||
case "DOMMetaAdded":
|
||||
let target = aEvent.originalTarget;
|
||||
let browser = BrowserApp.getBrowserForDocument(target.ownerDocument);
|
||||
@ -4296,12 +4276,6 @@ Tab.prototype = {
|
||||
break;
|
||||
}
|
||||
|
||||
case "DOMAutoComplete":
|
||||
case "blur": {
|
||||
LoginManagerContent.onUsernameInput(aEvent);
|
||||
break;
|
||||
}
|
||||
|
||||
case "VideoBindingAttached": {
|
||||
CastingApps.handleVideoBindingAttached(this, aEvent);
|
||||
break;
|
||||
@ -4327,8 +4301,6 @@ Tab.prototype = {
|
||||
}
|
||||
|
||||
case "pageshow": {
|
||||
LoginManagerContent.onPageShow(aEvent, this.browser.contentWindow);
|
||||
|
||||
// The rest of this only handles pageshow for the top-level document.
|
||||
if (aEvent.originalTarget.defaultView != this.browser.contentWindow)
|
||||
return;
|
||||
|
@ -8,6 +8,7 @@ Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(this, {
|
||||
AppConstants: "resource://gre/modules/AppConstants.jsm",
|
||||
DelayedInit: "resource://gre/modules/DelayedInit.jsm",
|
||||
GeckoViewUtils: "resource://gre/modules/GeckoViewUtils.jsm",
|
||||
Services: "resource://gre/modules/Services.jsm",
|
||||
});
|
||||
@ -74,6 +75,33 @@ BrowserCLH.prototype = {
|
||||
GeckoViewUtils.addLazyGetter(this, "InputWidgetHelper", {
|
||||
script: "chrome://browser/content/InputWidgetHelper.js",
|
||||
});
|
||||
|
||||
GeckoViewUtils.addLazyGetter(this, "LoginManagerParent", {
|
||||
module: "resource://gre/modules/LoginManagerParent.jsm",
|
||||
mm: [
|
||||
// PLEASE KEEP THIS LIST IN SYNC WITH THE DESKTOP LIST IN nsBrowserGlue.js
|
||||
"RemoteLogins:findLogins",
|
||||
"RemoteLogins:findRecipes",
|
||||
"RemoteLogins:onFormSubmit",
|
||||
"RemoteLogins:autoCompleteLogins",
|
||||
"RemoteLogins:removeLogin",
|
||||
"RemoteLogins:insecureLoginFormPresent",
|
||||
// PLEASE KEEP THIS LIST IN SYNC WITH THE DESKTOP LIST IN nsBrowserGlue.js
|
||||
],
|
||||
});
|
||||
GeckoViewUtils.addLazyGetter(this, "LoginManagerContent", {
|
||||
module: "resource://gre/modules/LoginManagerContent.jsm",
|
||||
});
|
||||
|
||||
// Once the first chrome window is loaded, schedule a list of startup
|
||||
// tasks to be performed on idle.
|
||||
GeckoViewUtils.addLazyGetter(this, "DelayedStartup", {
|
||||
observers: ["chrome-document-loaded"],
|
||||
once: true,
|
||||
handler: _ => DelayedInit.scheduleList([
|
||||
_ => Services.logins,
|
||||
], 10000 /* 10 seconds maximum wait. */),
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
@ -92,11 +120,48 @@ BrowserCLH.prototype = {
|
||||
mozSystemGroup: true,
|
||||
},
|
||||
});
|
||||
|
||||
this._initLoginManagerEvents(win);
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
_initLoginManagerEvents: function(aWindow) {
|
||||
let options = {
|
||||
capture: true,
|
||||
mozSystemGroup: true,
|
||||
};
|
||||
|
||||
aWindow.addEventListener("DOMFormHasPassword", event => {
|
||||
this.LoginManagerContent.onDOMFormHasPassword(event, event.target.ownerGlobal.top);
|
||||
}, options);
|
||||
|
||||
aWindow.addEventListener("DOMInputPasswordAdded", event => {
|
||||
this.LoginManagerContent.onDOMInputPasswordAdded(event, event.target.ownerGlobal.top);
|
||||
}, options);
|
||||
|
||||
aWindow.addEventListener("DOMAutoComplete", event => {
|
||||
this.LoginManagerContent.onUsernameInput(event);
|
||||
}, options);
|
||||
|
||||
aWindow.addEventListener("blur", event => {
|
||||
let win = event.target && event.target.ownerGlobal;
|
||||
if (win && win.HTMLDocument &&
|
||||
event.target instanceof win.HTMLInputElement) {
|
||||
this.LoginManagerContent.onUsernameInput(event);
|
||||
}
|
||||
}, options);
|
||||
|
||||
aWindow.addEventListener("pageshow", event => {
|
||||
let win = event.target && event.target.defaultView;
|
||||
if (win && win.HTMLDocument &&
|
||||
event.target instanceof win.HTMLDocument) {
|
||||
this.LoginManagerContent.onPageShow(event, win.top);
|
||||
}
|
||||
}, options);
|
||||
},
|
||||
|
||||
// QI
|
||||
QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver]),
|
||||
|
||||
|
@ -52,6 +52,12 @@ var DelayedInit = {
|
||||
schedule: function(fn, object, name, maxWait) {
|
||||
return Impl.scheduleInit(fn, object, name, maxWait);
|
||||
},
|
||||
|
||||
scheduleList: function(fns, maxWait) {
|
||||
for (let fn of fns) {
|
||||
Impl.scheduleInit(fn, null, null, maxWait);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
// Maximum duration for each idling period. Pending inits are run until this
|
||||
|
Loading…
Reference in New Issue
Block a user