Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HTML: the condition for opening a popup by window.open, and BarProp values for each case #28243

Merged
merged 2 commits into from Oct 29, 2021
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
@@ -0,0 +1,140 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>HTML: window.open `features`: condition for is popup</title>
<meta name="variant" content="?single-1">
<meta name="variant" content="?single-2">
<meta name="variant" content="?position">
<meta name="variant" content="?combination">
<meta name=timeout content=long>
<link rel="help" href="https://html.spec.whatwg.org/multipage/window-object.html#window-open-steps">

<!-- user agents are not required to support open features other than `noopener`
and on some platforms position and size features don't make sense -->
<meta name="flags" content="may" />
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think user agents are required to support everything in this test now?


<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/PrefixedPostMessage.js"></script>
<script>
var windowURL = 'resources/is-popup-barprop.html';

var target = document.location.search.substring(1);

// features, visible
// NOTE: visible == !isPopup
var tests = {
"single-1": [
// Empty feature results in non-popup.
[undefined, true],

// The explicit popup feature.
["popup", false],
["popup=1", false],
["popup=0", true],

// Other feature alone results in popup.
["location", false],
["location=yes", false],
["location=no", false],

["toolbar", false],
["toolbar=yes", false],
["toolbar=no", false],

["menubar", false],
["menubar=yes", false],
["menubar=no", false],

["resizable", false],
["resizable=yes", false],
["resizable=no", false],
],
"single-2": [
["scrollbars", false],
["scrollbars=yes", false],
["scrollbars=no", false],

["status", false],
["status=yes", false],
["status=no", false],

["titlebar", false],
["titlebar=yes", false],
["titlebar=no", false],

["close", false],
["close=yes", false],
["close=no", false],

["minimizable", false],
["minimizable=yes", false],
["minimizable=no", false],

["personalbar", false],
["personalbar=yes", false],
["personalbar=no", false],
],
"position": [
["left=500", false],
["screenX=500", false],

["top=500", false],
["screenY=500", false],

["width=500", false],
["innerWidth=500", false],

["outerWidth=500", false],

["height=500", false],
["innerHeight=500", false],

["outerHeight=500", false],
],
"combination": [
// The following combination results in non-popup.
["location,toolbar,menubar,resizable,scrollbars,status", true],

// Either location or toolbar is required for non-popup.
["location,menubar,resizable,scrollbars,status", true],
["toolbar,menubar,resizable,scrollbars,status", true],

["resizable,scrollbars,status", false],
["location=no,menubar=no,resizable,scrollbars,status", false],

// menubar is required for non-popup.
["location,toolbar,resizable,scrollbars,status", false],

// resizable is required for non-popup, but defaults to true
["location,toolbar,menubar,scrollbars,status", true],
["location,toolbar,menubar,resizable=no,scrollbars,status", false],

// scrollbars is required for non-popup.
["location,toolbar,menubar,resizable,status", false],

// status is required for non-popup.
["location,toolbar,menubar,resizable,scrollbars", false],

// The explicit popup feature has priority than others.
["popup=1,location,toolbar,menubar,resizable,scrollbars,status", false],
["popup=0,location,toolbar,menubar,resizable,scrollbars", true],
],
};

tests[target].forEach(([features, visible]) => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.locationbar, visible, `window.locationbar.visible`);
assert_equals(data.menubar, visible, `window.menubar.visible`);
assert_equals(data.personalbar, visible, `window.personalbar.visible`);
assert_equals(data.scrollbars, visible, `window.scrollbars.visible`);
assert_equals(data.statusbar, visible, `window.statusbar.visible`);
assert_equals(data.toolbar, visible, `window.toolbar.visible`);
}));
var win = window.open(prefixedMessage.url(windowURL), '', features);
}, `${format_value(features)} should set BarProp visibility to ${visible}`);
});

</script>
@@ -0,0 +1,15 @@
<script src="/common/PrefixedPostMessage.js"></script>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is neat, didn't know about this.

<script>
var prefixedMessage = new PrefixedMessageResource();
function sendBarProps() {
prefixedMessage.postToOpener({
locationbar: window.locationbar.visible,
menubar: window.menubar.visible,
personalbar: window.personalbar.visible,
scrollbars: window.scrollbars.visible,
statusbar: window.statusbar.visible,
toolbar: window.toolbar.visible,
});
}
window.addEventListener('load', sendBarProps);
</script>