mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-21 09:15:35 +00:00
Bug 332195 - part 0: refactor tabprompts to persist per-browser, r=mconley
--HG-- extra : commitid : 8x5UBCX0429 extra : rebase_source : 78734a6a103370c426717e2ebe91d1f61107649c
This commit is contained in:
parent
9b7981b86c
commit
e3d3251eae
@ -8175,3 +8175,53 @@ var AboutPrivateBrowsingListener = {
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
function TabModalPromptBox(browser) {
|
||||
this._weakBrowserRef = Cu.getWeakReference(browser);
|
||||
}
|
||||
|
||||
TabModalPromptBox.prototype = {
|
||||
appendPrompt(args, onCloseCallback) {
|
||||
const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
|
||||
let newPrompt = document.createElementNS(XUL_NS, "tabmodalprompt");
|
||||
let browser = this.browser;
|
||||
browser.parentNode.appendChild(newPrompt);
|
||||
browser.setAttribute("tabmodalPromptShowing", true);
|
||||
|
||||
newPrompt.clientTop; // style flush to assure binding is attached
|
||||
|
||||
let tab = gBrowser.getTabForBrowser(browser);
|
||||
newPrompt.init(args, tab, onCloseCallback);
|
||||
return newPrompt;
|
||||
},
|
||||
|
||||
removePrompt(aPrompt) {
|
||||
let browser = this.browser;
|
||||
browser.parentNode.removeChild(aPrompt);
|
||||
|
||||
let prompts = this.listPrompts();
|
||||
if (prompts.length) {
|
||||
let prompt = prompts[prompts.length - 1];
|
||||
prompt.Dialog.setDefaultFocus();
|
||||
} else {
|
||||
browser.removeAttribute("tabmodalPromptShowing");
|
||||
browser.focus();
|
||||
}
|
||||
},
|
||||
|
||||
listPrompts(aPrompt) {
|
||||
// Get the nodelist, then return as an array
|
||||
const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
|
||||
let els = this.browser.parentNode.getElementsByTagNameNS(XUL_NS, "tabmodalprompt");
|
||||
return Array.from(els);
|
||||
},
|
||||
|
||||
get browser() {
|
||||
let browser = this._weakBrowserRef.get();
|
||||
if (!browser) {
|
||||
throw "Stale promptbox! The associated browser is gone.";
|
||||
}
|
||||
return browser;
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -476,46 +476,11 @@
|
||||
<parameter name="aBrowser"/>
|
||||
<body>
|
||||
<![CDATA[
|
||||
const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
|
||||
let browser = (aBrowser || this.mCurrentBrowser);
|
||||
let stack = browser.parentNode;
|
||||
let self = this;
|
||||
|
||||
let promptBox = {
|
||||
appendPrompt : function(args, onCloseCallback) {
|
||||
let newPrompt = document.createElementNS(XUL_NS, "tabmodalprompt");
|
||||
stack.appendChild(newPrompt);
|
||||
browser.setAttribute("tabmodalPromptShowing", true);
|
||||
|
||||
newPrompt.clientTop; // style flush to assure binding is attached
|
||||
|
||||
let tab = self.getTabForBrowser(browser);
|
||||
newPrompt.init(args, tab, onCloseCallback);
|
||||
return newPrompt;
|
||||
},
|
||||
|
||||
removePrompt : function(aPrompt) {
|
||||
stack.removeChild(aPrompt);
|
||||
|
||||
let prompts = this.listPrompts();
|
||||
if (prompts.length) {
|
||||
let prompt = prompts[prompts.length - 1];
|
||||
prompt.Dialog.setDefaultFocus();
|
||||
} else {
|
||||
browser.removeAttribute("tabmodalPromptShowing");
|
||||
browser.focus();
|
||||
}
|
||||
},
|
||||
|
||||
listPrompts : function(aPrompt) {
|
||||
let els = stack.getElementsByTagNameNS(XUL_NS, "tabmodalprompt");
|
||||
// NodeList --> real JS array
|
||||
let prompts = Array.slice(els);
|
||||
return prompts;
|
||||
},
|
||||
};
|
||||
|
||||
return promptBox;
|
||||
if (!browser.tabModalPromptBox) {
|
||||
browser.tabModalPromptBox = new TabModalPromptBox(browser);
|
||||
}
|
||||
return browser.tabModalPromptBox;
|
||||
]]>
|
||||
</body>
|
||||
</method>
|
||||
@ -6480,6 +6445,8 @@
|
||||
<binding id="tabbrowser-browser"
|
||||
extends="chrome://global/content/bindings/browser.xml#browser">
|
||||
<implementation>
|
||||
<field name="tabModalPromptBox">null</field>
|
||||
|
||||
<!-- throws exception for unknown schemes -->
|
||||
<method name="loadURIWithFlags">
|
||||
<parameter name="aURI"/>
|
||||
@ -6508,6 +6475,8 @@
|
||||
<binding id="tabbrowser-remote-browser"
|
||||
extends="chrome://global/content/bindings/remote-browser.xml#remote-browser">
|
||||
<implementation>
|
||||
<field name="tabModalPromptBox">null</field>
|
||||
|
||||
<!-- throws exception for unknown schemes -->
|
||||
<method name="loadURIWithFlags">
|
||||
<parameter name="aURI"/>
|
||||
|
Loading…
Reference in New Issue
Block a user