Bug 1294502 - Make content in non-e10s use the same nsIFormAutoComplete as e10s. r?MattN
MozReview-Commit-ID: 7JmkKsbbTYw
--- a/browser/base/content/tabbrowser.xml
+++ b/browser/base/content/tabbrowser.xml
@@ -1717,21 +1717,18 @@
this._preloadedBrowser = null;
// Attach the nsIFormFillController now that we know the browser
// will be used. If we do that before and the preloaded browser
// won't be consumed until shutdown then we leak a docShell.
// Also, we do not need to take care of attaching nsIFormFillControllers
// in the case that the browser is remote, as remote browsers take
// care of that themselves.
- if (browser &&
- this.hasAttribute("autocompletepopup") &&
- !browser.isRemoteBrowser) {
+ if (browser && this.hasAttribute("autocompletepopup")) {
browser.setAttribute("autocompletepopup", this.getAttribute("autocompletepopup"));
- browser.attachFormFill();
}
return browser;
]]>
</body>
</method>
<method name="_isPreloadingEnabled">
@@ -4061,32 +4058,16 @@
<parameter name="aIndex"/>
<body>
<![CDATA[
return this.mCurrentBrowser.gotoIndex(aIndex);
]]>
</body>
</method>
- <method name="attachFormFill">
- <body><![CDATA[
- for (let browser of this.browsers) {
- browser.attachFormFill();
- }
- ]]></body>
- </method>
-
- <method name="detachFormFill">
- <body><![CDATA[
- for (let browser of this.browsers) {
- browser.detachFormFill();
- }
- ]]></body>
- </method>
-
<property name="currentURI"
onget="return this.mCurrentBrowser.currentURI;"
readonly="true"/>
<property name="finder"
onget="return this.mCurrentBrowser.finder"
readonly="true"/>
--- a/toolkit/content/widgets/browser.xml
+++ b/toolkit/content/widgets/browser.xml
@@ -581,49 +581,16 @@
<parameter name="aListener"/>
<body>
<![CDATA[
this.webProgress.removeProgressListener(aListener);
]]>
</body>
</method>
- <method name="attachFormFill">
- <body>
- <![CDATA[
- if (!this.mFormFillAttached && this.hasAttribute("autocompletepopup")) {
- // hoop up the form fill autocomplete controller
- var controller = Components.classes["@mozilla.org/satchel/form-fill-controller;1"].
- getService(Components.interfaces.nsIFormFillController);
-
- var popup = document.getElementById(this.getAttribute("autocompletepopup"));
- if (popup) {
- controller.attachToBrowser(this.docShell, popup.QueryInterface(Components.interfaces.nsIAutoCompletePopup));
- this.mFormFillAttached = true;
- }
- }
- ]]>
- </body>
- </method>
-
- <method name="detachFormFill">
- <body>
- <![CDATA[
- if (this.mFormFillAttached) {
- // hoop up the form fill autocomplete controller
- var controller = Components.classes["@mozilla.org/satchel/form-fill-controller;1"].
- getService(Components.interfaces.nsIFormFillController);
- controller.detachFromBrowser(this.docShell);
-
- this.mFormFillAttached = false;
- }
- ]]>
- </body>
- </method>
-
<method name="findChildShell">
<parameter name="aDocShell"/>
<parameter name="aSoughtURI"/>
<body>
<![CDATA[
if (aDocShell.QueryInterface(Components.interfaces.nsIWebNavigation)
.currentURI.spec == aSoughtURI.spec)
return aDocShell;
@@ -635,25 +602,16 @@
if (docShell)
return docShell;
}
return null;
]]>
</body>
</method>
- <method name="onPageShow">
- <parameter name="aEvent"/>
- <body>
- <![CDATA[
- this.attachFormFill();
- ]]>
- </body>
- </method>
-
<method name="onPageHide">
<parameter name="aEvent"/>
<body>
<![CDATA[
// Delete the feeds cache if we're hiding the topmost page
// (as opposed to one of its iframes).
if (this.feeds && aEvent.target == this.contentDocument)
this.feeds = null;
@@ -923,21 +881,17 @@
Components.utils.reportError(e);
}
try {
var securityUI = this.securityUI;
}
catch (e) {
}
- // Listen for first load for lazy attachment to form fill controller
- // (But we don't want to do this for remote browsers - the test infra
- // might fire these events when they normally wouldn't.)
if (!this.isRemoteBrowser) {
- this.addEventListener("pageshow", this.onPageShow, true);
this.addEventListener("pagehide", this.onPageHide, true);
}
if (this.messageManager) {
this.messageManager.addMessageListener("PopupBlocking:UpdateBlockedPopups", this);
this.messageManager.addMessageListener("Autoscroll:Start", this);
this.messageManager.addMessageListener("Autoscroll:Cancel", this);
this.messageManager.addMessageListener("AudioPlayback:Start", this);
@@ -969,28 +923,25 @@
.getService(Components.interfaces.nsIObserverService);
try {
os.removeObserver(this, "browser:purge-session-history");
} catch (ex) {
// It's not clear why this sometimes throws an exception.
}
}
- this.detachFormFill();
-
this._fastFind = null;
this._webBrowserFind = null;
// The feeds cache can keep the document inside this browser alive.
this.feeds = null;
this.lastURI = null;
if (!this.isRemoteBrowser) {
- this.removeEventListener("pageshow", this.onPageShow, true);
this.removeEventListener("pagehide", this.onPageHide, true);
}
if (this._autoScrollNeedsCleanup) {
// we polluted the global scope, so clean it up
this._autoScrollPopup.parentNode.removeChild(this._autoScrollPopup);
}
]]>
@@ -1282,33 +1233,22 @@
try {
this.QueryInterface(Components.interfaces.nsIFrameLoaderOwner)
.swapFrameLoaders(aOtherBrowser);
} catch (ex) {
// This may not be implemented for browser elements that are not
// attached to a BrowserDOMWindow.
}
- // Before we swap the actual docShell property we need to detach the
- // form fill controller from those docShells.
- if (!this.isRemoteBrowser) {
- this.detachFormFill();
- aOtherBrowser.detachFormFill();
- }
-
for (let field of fieldsToSwap) {
this[field] = otherFieldValues[field];
aOtherBrowser[field] = ourFieldValues[field];
}
- // Re-attach the docShells to the form fill controller.
if (!this.isRemoteBrowser) {
- this.attachFormFill();
- aOtherBrowser.attachFormFill();
-
// Null the current nsITypeAheadFind instances so that they're
// lazily re-created on access. We need to do this because they
// might have attached the wrong docShell.
this._fastFind = aOtherBrowser._fastFind = null;
}
else {
// Rewire the remote listeners
this._remoteWebNavigationImpl.swapBrowser(this);