gecko-dev/dom/tests/browser/browser_test_toolbars_visibility.js
Gijs Kruitbosch 30a0ac0ed8 Bug 1253673, r=bz
MozReview-Commit-ID: eyZ0XvZkfM

--HG--
rename : browser/base/content/test/general/dummy_page.html => dom/tests/browser/dummy.html
extra : amend_source : 0ceb77aae62ed163362e794b9aed8f92849e3e6d
extra : histedit_source : 60dbd015a6909a0023dc26613530c89a16de6ea7%2Ca5ea96457b370e57e3a73c19bea08e157f16ac4f
2016-04-19 09:56:19 +01:00

225 lines
7.8 KiB
JavaScript

// Tests that toolbars have proper visibility when opening a new window
// in either content or chrome context.
const ROOT = "http://www.example.com/browser/dom/tests/browser/";
const CONTENT_PAGE = ROOT + "test_new_window_from_content_child.html";
const TARGET_PAGE = ROOT + "dummy.html";
/**
* This function retrieves the visibility state of the toolbars of a
* window within the content context.
*
* @param aBrowser (<xul:browser>)
* The browser to query for toolbar visibility states
* @returns Promise
* A promise that resolves when the toolbar state is retrieved
* within the content context, which value is an object that holds
* the visibility state of the toolbars
*/
function getToolbarsFromBrowserContent(aBrowser) {
return ContentTask.spawn(aBrowser, {}, function*() {
return {
toolbar: content.toolbar.visible,
menubar: content.menubar.visible,
personalbar: content.personalbar.visible,
statusbar: content.statusbar.visible,
locationbar: content.locationbar.visible,
};
});
}
/**
* This function retrieves the visibility state of the toolbars of a
* window within the chrome context.
*
* @param win
* the chrome privileged window
* @returns object
* an object that holds the visibility state of the toolbars
*/
function getToolbarsFromWindowChrome(win) {
return {
toolbar: win.toolbar.visible,
menubar: win.menubar.visible,
personalbar: win.personalbar.visible,
statusbar: win.statusbar.visible,
locationbar: win.locationbar.visible,
}
}
/**
* Tests toolbar visibility when opening a window with default parameters.
*
* @param toolbars
* the visibility state of the toolbar elements
*/
function testDefaultToolbars(toolbars) {
ok(toolbars.locationbar,
"locationbar should be visible on default window.open()");
ok(toolbars.menubar,
"menubar be visible on default window.open()");
ok(toolbars.personalbar,
"personalbar should be visible on default window.open()");
ok(toolbars.statusbar,
"statusbar should be visible on default window.open()");
ok(toolbars.toolbar,
"toolbar should be visible on default window.open()");
}
/**
* Tests toolbar visibility when opening a window with non default parameters
* on the content context.
*
* Ensure that locationbar can't be hidden in the content context, see bug#337344.
*
* @param toolbars
* the visibility state of the toolbar elements
*/
function testNonDefaultContentToolbars(toolbars) {
// Locationbar should always be visible on content context
ok(toolbars.locationbar,
"locationbar should be visible even with location=no");
ok(!toolbars.menubar,
"menubar shouldn't be visible when menubar=no");
ok(!toolbars.personalbar,
"personalbar shouldn't be visible when personalbar=no");
// statusbar will report visible=true even when it's hidden because of bug#55820
todo(!toolbars.statusbar,
"statusbar shouldn't be visible when status=no");
ok(!toolbars.toolbar,
"toolbar shouldn't be visible when toolbar=no");
}
/**
* Tests toolbar visibility when opening a window with non default parameters
* on the chrome context.
*
* @param toolbars
* the visibility state of the toolbar elements
*/
function testNonDefaultChromeToolbars(toolbars) {
// None of the toolbars should be visible if hidden with chrome privileges
ok(!toolbars.locationbar,
"locationbar should not be visible with location=no");
ok(!toolbars.menubar,
"menubar should not be visible with menubar=no");
ok(!toolbars.personalbar,
"personalbar should not be visible with personalbar=no");
ok(!toolbars.statusbar,
"statusbar should not be visible with status=no");
ok(!toolbars.toolbar,
"toolbar should not be visible with toolbar=no");
}
/**
* Ensure that toolbars of a window opened in the content context have the
* correct visibility.
*
* A window opened with default parameters should have all toolbars visible.
*
* A window opened with "location=no, personalbar=no, toolbar=no, scrollbars=no,
* menubar=no, status=no", should only have location visible.
*/
add_task(function*() {
yield BrowserTestUtils.withNewTab({
gBrowser,
url: CONTENT_PAGE,
}, function*(browser) {
// First, call the default window.open() which will open a new tab
let newTabPromise = BrowserTestUtils.waitForNewTab(gBrowser);
yield BrowserTestUtils.synthesizeMouseAtCenter("#winOpenDefault", {}, browser);
let tab = yield newTabPromise;
// Check that all toolbars are visible
let toolbars = yield getToolbarsFromBrowserContent(gBrowser.selectedBrowser);
testDefaultToolbars(toolbars);
// Cleanup
yield BrowserTestUtils.removeTab(tab);
// Now let's open a window with toolbars hidden
let winPromise = BrowserTestUtils.waitForNewWindow();
yield BrowserTestUtils.synthesizeMouseAtCenter("#winOpenNonDefault", {}, browser);
let popupWindow = yield winPromise;
let popupBrowser = popupWindow.gBrowser.selectedBrowser;
yield BrowserTestUtils.browserLoaded(popupBrowser);
// Test toolbars visibility
let popupToolbars = yield getToolbarsFromBrowserContent(popupBrowser);
testNonDefaultContentToolbars(popupToolbars);
// Ensure that chrome toolbars agree with content
let chromeToolbars = getToolbarsFromWindowChrome(popupWindow);
testNonDefaultContentToolbars(chromeToolbars);
// Close the new window
yield BrowserTestUtils.closeWindow(popupWindow);
});
});
/**
* Ensure that toolbars of a window opened to about:blank in the content context
* have the correct visibility.
*
* A window opened with "location=no, personalbar=no, toolbar=no, scrollbars=no,
* menubar=no, status=no", should only have location visible.
*/
add_task(function*() {
yield BrowserTestUtils.withNewTab({
gBrowser,
url: CONTENT_PAGE,
}, function*(browser) {
// Open a blank window with toolbars hidden
let winPromise = BrowserTestUtils.waitForNewWindow();
yield BrowserTestUtils.synthesizeMouseAtCenter("#winOpenNoURLNonDefault", {}, browser);
let popupWindow = yield winPromise;
// No need to wait for this window to load, since it's loading about:blank
let popupBrowser = popupWindow.gBrowser.selectedBrowser;
let popupToolbars = yield getToolbarsFromBrowserContent(popupBrowser);
testNonDefaultContentToolbars(popupToolbars);
// Ensure that chrome toolbars agree with content
let chromeToolbars = getToolbarsFromWindowChrome(popupWindow);
testNonDefaultContentToolbars(chromeToolbars);
// Close the new window
yield BrowserTestUtils.closeWindow(popupWindow);
});
});
/**
* Ensure that toolbars of a window opened in the chrome context have the
* correct visibility.
*
* A window opened with default parameters should have all toolbars visible.
*
* A window opened with "location=no, personalbar=no, toolbar=no, scrollbars=no,
* menubar=no, status=no", should not have any toolbar visible.
*/
add_task(function* () {
// First open a default window from this chrome context
let defaultWindowPromise = BrowserTestUtils.waitForNewWindow();
window.open(TARGET_PAGE, "_blank");
let defaultWindow = yield defaultWindowPromise;
// Check that all toolbars are visible
let toolbars = getToolbarsFromWindowChrome(defaultWindow);
testDefaultToolbars(toolbars);
// Now lets open a window with toolbars hidden from this chrome context
let features = "location=no, personalbar=no, toolbar=no, scrollbars=no, menubar=no, status=no";
let popupWindowPromise = BrowserTestUtils.waitForNewWindow();
window.open(TARGET_PAGE, "_blank", features);
let popupWindow = yield popupWindowPromise;
// Test none of the tooolbars are visible
let hiddenToolbars = getToolbarsFromWindowChrome(popupWindow);
testNonDefaultChromeToolbars(hiddenToolbars);
// Cleanup
yield BrowserTestUtils.closeWindow(defaultWindow);
yield BrowserTestUtils.closeWindow(popupWindow);
});