зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1276738 - Ensure that .open() on web content called with chrome privileges results in a new window with the appropriate principal. r=Gijs
MozReview-Commit-ID: IG9ioQLTI78 --HG-- extra : rebase_source : 0ba3de736ba4fd80a7444c9246a8c2bf77308570 extra : source : ea2da46bde0a4a3039d69e198ad40afefc92a5ec
This commit is contained in:
Родитель
c3144863d0
Коммит
cb9696f49a
|
@ -3,5 +3,6 @@ tags = openwindow
|
|||
|
||||
[browser_new_remote_window_flags.js]
|
||||
run-if = e10s
|
||||
[browser_new_content_window_from_chrome_principal.js]
|
||||
[browser_new_sized_window.js]
|
||||
skip-if = os == 'win' # Bug 1276802 - Opening windows from content on Windows might not get the size right
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
"use strict";
|
||||
|
||||
/**
|
||||
* Tests that if chrome-privileged code calls .open() on an
|
||||
* unprivileged window, that the principal in the newly
|
||||
* opened window is appropriately set.
|
||||
*/
|
||||
add_task(function* test_chrome_opens_window() {
|
||||
// This magic value of 2 means that by default, when content tries
|
||||
// to open a new window, it'll actually open in a new window instead
|
||||
// of a new tab.
|
||||
yield SpecialPowers.pushPrefEnv({"set": [
|
||||
["browser.link.open_newwindow", 2],
|
||||
]});
|
||||
|
||||
let newWinPromise = BrowserTestUtils.waitForNewWindow(true, "http://example.com/");
|
||||
|
||||
yield ContentTask.spawn(gBrowser.selectedBrowser, null, function*() {
|
||||
content.open("http://example.com/", "_blank");
|
||||
});
|
||||
|
||||
let win = yield newWinPromise;
|
||||
let browser = win.gBrowser.selectedBrowser;
|
||||
|
||||
yield ContentTask.spawn(browser, null, function*() {
|
||||
Assert.ok(!content.document.nodePrincipal.isSystemPrincipal,
|
||||
"We should not have a system principal.")
|
||||
Assert.equal(content.document.nodePrincipal.origin,
|
||||
"http://example.com",
|
||||
"Should have the example.com principal");
|
||||
});
|
||||
|
||||
yield BrowserTestUtils.closeWindow(win);
|
||||
});
|
|
@ -279,15 +279,47 @@ this.BrowserTestUtils = {
|
|||
/**
|
||||
* Waits for the next browser window to open and be fully loaded.
|
||||
*
|
||||
* @param {bool} delayedStartup (optional)
|
||||
* Whether or not to wait for the browser-delayed-startup-finished
|
||||
* observer notification before resolving. Defaults to true.
|
||||
* @param {string} initialBrowserLoaded (optional)
|
||||
* If set, we will wait until the initial browser in the new
|
||||
* window has loaded a particular page. If unset, the initial
|
||||
* browser may or may not have finished loading its first page
|
||||
* when the resulting Promise resolves.
|
||||
* @return {Promise}
|
||||
* A Promise which resolves the next time that a DOM window
|
||||
* opens and the delayed startup observer notification fires.
|
||||
*/
|
||||
waitForNewWindow: Task.async(function* (delayedStartup=true) {
|
||||
waitForNewWindow: Task.async(function* (delayedStartup=true,
|
||||
initialBrowserLoaded=null) {
|
||||
let win = yield this.domWindowOpened();
|
||||
|
||||
yield TestUtils.topicObserved("browser-delayed-startup-finished",
|
||||
subject => subject == win);
|
||||
let promises = [
|
||||
TestUtils.topicObserved("browser-delayed-startup-finished",
|
||||
subject => subject == win),
|
||||
];
|
||||
|
||||
if (initialBrowserLoaded) {
|
||||
yield this.waitForEvent(win, "DOMContentLoaded");
|
||||
|
||||
let browser = win.gBrowser.selectedBrowser;
|
||||
|
||||
// Retrieve the given browser's current process type.
|
||||
let process =
|
||||
browser.isRemoteBrowser ? Ci.nsIXULRuntime.PROCESS_TYPE_CONTENT
|
||||
: Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT;
|
||||
if (win.gMultiProcessBrowser &&
|
||||
!E10SUtils.canLoadURIInProcess(initialBrowserLoaded, process)) {
|
||||
yield this.waitForEvent(browser, "XULFrameLoaderCreated");
|
||||
}
|
||||
|
||||
let loadPromise = this.browserLoaded(browser, false, initialBrowserLoaded);
|
||||
promises.push(loadPromise);
|
||||
}
|
||||
|
||||
yield Promise.all(promises);
|
||||
|
||||
return win;
|
||||
}),
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче