Update web-platform-tests to revision 58eb04cecbbec2e18531ab440225e38944a9c444

This commit is contained in:
Josh Matthews 2017-04-17 12:06:02 +10:00 committed by Anthony Ramine
parent 25e8bf69e6
commit 665817d2a6
35333 changed files with 1818077 additions and 16036 deletions

View file

@ -0,0 +1,75 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>HTML: window.open `features`: negative values for legacy `innerwidth`, `innerheight`</title>
<meta name=timeout content=long>
<link rel="help" href="https://html.spec.whatwg.org/multipage/#apis-for-creating-and-navigating-browsing-contexts-by-name">
<!-- 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" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/PrefixedPostMessage.js"></script>
<script>
var windowURL = 'resources/message-opener.html';
var featuresPrefix = `top=0,left=0,`;
// https://html.spec.whatwg.org/multipage/infrastructure.html#rules-for-parsing-integers
setup (() => {
// Before running tests, open a window using features that mimic
// what would happen if the features tested here were set to invalid
// values in later tests.
// In cases where the value for `innerwidth` or `innerheight` is
// is less than the browser's minimum allowed value for that dimension,
// but NOT 0, the value affected will become the browser's minimum allowed value.
// This should result in a minimally-sized window for later comparison
var featureString = `${featuresPrefix}innerwidth=1,innerheight=1`;
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage((data, e) => {
e.source.close();
runWindowTests(data);
});
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
});
function runWindowTests (baselineDimensions) {
// Negative values for `innerwidth` should result in a window with minimum
// valid allowed width
[ 'innerwidth=-404',
'innerwidth=-404.5',
'innerwidth=-404e1'
].forEach(feature => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
var featureString = `${featuresPrefix}height=405,${feature}`;
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.width, baselineDimensions.width, `"${feature} is negative and should result in a minimally-wide window"`);
}));
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
}, `features "${feature}" should NOT set "width=404"`);
});
// Negative values for `innerheight` should result in a window with minimum
// valid allowed height
[ 'innerheight=-404',
'innerheight=-404.5',
'innerheight=-404e1'
].forEach(feature => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
var featureString = `${featuresPrefix}width=404,${feature}`;
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.height, baselineDimensions.height, `"${feature} is negative and should result in a minimal-height window"`);
}));
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
}, `features "${feature}" should NOT set "height=404"`);
});
}
</script>

View file

@ -0,0 +1,67 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>HTML: window.open `features`: negative values for legacy `screenx`, `screeny`</title>
<meta name=timeout content=long>
<link rel="help" href="https://html.spec.whatwg.org/multipage/#apis-for-creating-and-navigating-browsing-contexts-by-name">
<!-- 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" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/PrefixedPostMessage.js"></script>
<script>
var featuresPrefix = `width=401,height=404,`;
var windowURL = 'resources/message-opener.html';
// https://html.spec.whatwg.org/multipage/infrastructure.html#rules-for-parsing-integers
setup (() => {
// Before running tests, open a window using features that mimic
// what would happen if the feature tested here were set to 0
// for comparison later.
var featureString = `${featuresPrefix}top=0,left=0`;
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage((data, e) => {
e.source.close();
runWindowTests(data);
});
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
});
function runWindowTests (baselineDimensions) {
// Negative values should be interpreted as 0
[ 'screeny=-204',
'screeny=-204.5',
'screeny=-0'
].forEach(feature => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
var featureString = `${featuresPrefix}left=0,${feature}`;
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.top, baselineDimensions.top, `"${feature} is negative and should be set to 0"`);
}));
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
}, `features "${feature}" should NOT set "top=204"`);
});
// Negative values should be interpreted as 0
[ 'screenx=-204',
'screenx=-204.5',
'screenx=-0'
].forEach(feature => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
var featureString = `${featuresPrefix}top=0,${feature}`;
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.left, baselineDimensions.left, `"${feature} is negative and should be set to 0"`);
}));
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
}, `features "${feature}" should NOT set "left=204"`);
});
}
</script>

View file

@ -0,0 +1,68 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>HTML: window.open `features`: negative values for `top`, `left`</title>
<meta name=timeout content=long>
<link rel="help" href="https://html.spec.whatwg.org/multipage/#apis-for-creating-and-navigating-browsing-contexts-by-name">
<!-- 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" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/PrefixedPostMessage.js"></script>
<script>
var featuresPrefix = `width=401,height=404,`;
var windowURL = 'resources/message-opener.html';
// https://html.spec.whatwg.org/multipage/infrastructure.html#rules-for-parsing-integers
setup (() => {
// Before running tests, open a window using features that mimic
// what would happen if the feature tested here were set to 0
// for comparison later.
var featureString = `${featuresPrefix}top=0,left=0`;
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage((data, e) => {
e.source.close();
runWindowTests(data);
});
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
});
function runWindowTests (baselineDimensions) {
// Negative values for `top`, `left` should be interpreted as 0
[ 'top=-204',
'top=-204.5',
'top=-0'
].forEach(feature => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
var featureString = `${featuresPrefix}left=0,${feature}`;
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.top, baselineDimensions.top, `"${feature} is negative and should be set to 0"`);
}));
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
}, `features "${feature}" should NOT set "top=204"`);
});
// Negative values for `top`, `left` should be interpreted as 0
[ 'left=-204',
'left=-204.5',
'left=-0'
].forEach(feature => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
var featureString = `${featuresPrefix}top=0,${feature}`;
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.left, baselineDimensions.left, `"${feature} is negative and should be set to 0"`);
}));
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
}, `features "${feature}" should NOT set "left=204"`);
});
}
</script>

View file

@ -0,0 +1,75 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>HTML: window.open `features`: negative values for `width`, `height`</title>
<meta name=timeout content=long>
<link rel="help" href="https://html.spec.whatwg.org/multipage/#apis-for-creating-and-navigating-browsing-contexts-by-name">
<!-- 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" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/PrefixedPostMessage.js"></script>
<script>
var featuresPrefix = `top=0,left=0,`;
var windowURL = 'resources/message-opener.html';
// https://html.spec.whatwg.org/multipage/infrastructure.html#rules-for-parsing-integers
setup (() => {
// Before running tests, open a window using features that mimic
// what would happen if the features tested here were set to invalid
// values in later tests.
// In cases where the value for `width` or `height` is
// is less than the browser's minimum allowed value for that dimension,
// but NOT 0, the value affected will become the browser's minimum allowed value.
// This should result in a minimally-sized window for later comparison
var featureString = `${featuresPrefix}width=1,height=1`;
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage((data, e) => {
e.source.close();
runWindowTests(data);
});
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
});
function runWindowTests (baselineDimensions) {
// Negative values for `width` should result in a window with minimum
// valid allowed width
[ 'width=-404',
'width=-404.5',
'width=-404e1'
].forEach(feature => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
var featureString = `${featuresPrefix}height=405,${feature}`;
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.width, baselineDimensions.width, `"${feature} is negative and should result in a minimally-wide window"`);
}));
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
}, `features "${feature}" should NOT set "width=404"`);
});
// Negative values for `height` should result in a window with minimum
// valid allowed height
[ 'height=-404',
'height=-404.5',
'height=-404e1'
].forEach(feature => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
var featureString = `${featuresPrefix}width=404,${feature}`;
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.height, baselineDimensions.height, `"${feature} is negative and should result in a minimal-height window"`);
}));
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
}, `features "${feature}" should NOT set "height=404"`);
});
}
</script>

View file

@ -0,0 +1,91 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>HTML: window.open `features`: non-integer values for feature `height`</title>
<meta name=timeout content=long>
<link rel="help" href="https://html.spec.whatwg.org/multipage/#apis-for-creating-and-navigating-browsing-contexts-by-name">
<!-- 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" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/PrefixedPostMessage.js"></script>
<script>
var featuresPrefix = `top=0,left=0,width=401,`;
var windowURL = 'resources/message-opener.html';
// https://html.spec.whatwg.org/multipage/infrastructure.html#rules-for-parsing-integers
setup (() => {
// Before running tests, open a window using features that mimic
// what would happen if the feature tested here were set to 0
// for comparison later.
var featureString = `${featuresPrefix}height=0`;
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage((data, e) => {
e.source.close();
runWindowTests(data);
});
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
});
function runWindowTests (baselineDimensions) {
// The absence of the sizing feature should have the same behavior
// as that feature set to 0
[ featuresPrefix,
'top=0,left=0',
].forEach(feature => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.width, baselineDimensions.width);
}));
var win = window.open(prefixedMessage.url(windowURL), '', feature);
}, `${feature}: absence of feature "height" should be treated same as "height=0"`);
});
// When code point in first position is not an ASCII digit, "+" or "-",
// that's an error and the value becomes 0
[ 'height=/404',
'height=_404',
'height=L404'
].forEach(feature => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
var featureString = `${featuresPrefix}${feature}`;
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.height, baselineDimensions.height, `"${feature} begins with an invalid character and should be ignored"`);
}));
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
}, `features "${feature}" should NOT set "height=404"`);
});
// Codepoints that are valid ASCII digits should be collected
// Non-ASCII digits and subsequent code points are ignored
[ 'height=405.5',
'height=405.32',
'height=405LLl',
'height=405^4',
'height=405*3',
'height=405/5',
'height=405 ',
'height=405e1',
'height=405e-1'
].forEach(feature => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
var featureString = `${featuresPrefix}${feature}`;
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.height, 405, `"${featureString} value after first non-digit will be ignored"`);
}));
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
}, `features "${feature}" should set "height=405"`);
});
}
</script>

View file

@ -0,0 +1,76 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>HTML: window.open `features`: non-integer values for legacy feature `innerheight`</title>
<meta name=timeout content=long>
<link rel="help" href="https://html.spec.whatwg.org/multipage/#apis-for-creating-and-navigating-browsing-contexts-by-name">
<!-- 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" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/PrefixedPostMessage.js"></script>
<script>
var featuresPrefix = `top=0,left=0,width=401,`;
var windowURL = 'resources/message-opener.html';
// https://html.spec.whatwg.org/multipage/infrastructure.html#rules-for-parsing-integers
setup (() => {
// Before running tests, open a window using features that mimic
// what would happen if the feature tested here were set to 0
// for comparison later.
var featureString = `${featuresPrefix}height=0`;
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage((data, e) => {
e.source.close();
runWindowTests(data);
});
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
});
function runWindowTests (baselineDimensions) {
// When code point in first position is not an ASCII digit, "+" or "-",
// that's an error and the value becomes 0
[ 'innerheight=/404',
'innerheight=_404',
'innerheight=L404'
].forEach(feature => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
var featureString = `${featuresPrefix}${feature}`;
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.height, baselineDimensions.height, `"${feature} begins with an invalid character and should be ignored"`);
}));
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
}, `features "${feature}" should NOT set "height=404"`);
});
// Codepoints that are valid ASCII digits should be collected
// Non-ASCII digits and subsequent code points are ignored
[ 'innerheight=405.5',
'innerheight=405.32',
'innerheight=405LLl',
'innerheight=405^4',
'innerheight=405*3',
'innerheight=405/5',
'innerheight=405 ',
'innerheight=405e1',
'innerheight=405e-1'
].forEach(feature => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
var featureString = `${featuresPrefix}${feature}`;
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.height, 405, `"${featureString} value after first non-digit will be ignored"`);
}));
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
}, `features "${feature}" should set "height=405"`);
});
}
</script>

View file

@ -0,0 +1,75 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>HTML: window.open `features`: non-integer values for legacy feature `innerwidth`</title>
<meta name=timeout content=long>
<link rel="help" href="https://html.spec.whatwg.org/multipage/#apis-for-creating-and-navigating-browsing-contexts-by-name">
<!-- 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" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/PrefixedPostMessage.js"></script>
<script>
var featuresPrefix = `top=0,left=0,height=401,`;
var windowURL = 'resources/message-opener.html';
// https://html.spec.whatwg.org/multipage/infrastructure.html#rules-for-parsing-integers
setup (() => {
// Before running tests, open a window using features that mimic
// what would happen if the feature tested here were set to 0
// for comparison later.
var featureString = `${featuresPrefix}width=0`;
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage((data, e) => {
e.source.close();
runWindowTests(data);
});
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
});
function runWindowTests (baselineDimensions) {
// When code point in first position is not an ASCII digit, "+" or "-",
// that's an error and the value becomes 0
[ 'innerwidth=/404',
'innerwidth=_404',
'innerwidth=L404'
].forEach(feature => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
var featureString = `${featuresPrefix}${feature}`;
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.width, baselineDimensions.width, `"${feature} begins with an invalid character and should be ignored"`);
}));
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
}, `features "${feature}" should NOT set "width=404"`);
});
// Codepoints that are valid ASCII digits should be collected
// Non-ASCII digits and subsequent code points are ignored
[ 'innerwidth=405.5',
'innerwidth=405.32',
'innerwidth=405LLl',
'innerwidth=405^4',
'innerwidth=405*3',
'innerwidth=405/5',
'innerwidth=405 ',
'innerwidth=405e1',
'innerwidth=405e-1'
].forEach(feature => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
var featureString = `${featuresPrefix}${feature}`;
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.width, 405, `"${featureString} value after first non-digit will be ignored"`);
}));
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
}, `features "${feature}" should set "width=405"`);
});
}
</script>

View file

@ -0,0 +1,76 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>HTML: window.open `features`: non-integer values for feature `left`</title>
<meta name=timeout content=long>
<link rel="help" href="https://html.spec.whatwg.org/multipage/#apis-for-creating-and-navigating-browsing-contexts-by-name">
<!-- 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" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/PrefixedPostMessage.js"></script>
<script>
var featuresPrefix = `width=401,height=204,top=0,`;
var windowURL = 'resources/message-opener.html';
// https://html.spec.whatwg.org/multipage/infrastructure.html#rules-for-parsing-integers
setup (() => {
// Before running tests, open a window using features that mimic
// what would happen if the feature tested here were set to 0
// for comparison later.
var featureString = `${featuresPrefix}left=0`;
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage((data, e) => {
e.source.close();
runWindowTests(data);
});
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
});
function runWindowTests (baselineDimensions) {
// When code point in first position is not an ASCII digit, "+" or "-",
// that's an error and the value becomes 0
[ 'left=/104',
'left=_104',
'left=L104'
].forEach(feature => {
async_test(t => {
var featureString = `${featuresPrefix}${feature}`;
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.left, baselineDimensions.left, `"${feature} begins with an invalid character and should be ignored"`);
}));
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
}, `features "${feature}" should NOT set "left=104"`);
});
// Codepoints that are valid ASCII digits should be collected
// Non-ASCII digits and subsequent code points are ignored
[ 'left=105.5',
'left=105.32',
'left=105LLl',
'left=105^4',
'left=105*3',
'left=105/5',
'left=105 ',
'left=105e1',
'left=105e-1'
].forEach(feature => {
async_test(t => {
var featureString = `${featuresPrefix}${feature}`;
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.left, 105, `"${featureString} value after first non-digit will be ignored"`);
}));
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
}, `features "${feature}" should set "left=105"`);
});
}
</script>

View file

@ -0,0 +1,75 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>HTML: window.open `features`: non-integer values for legacy feature `screenx`</title>
<meta name=timeout content=long>
<link rel="help" href="https://html.spec.whatwg.org/multipage/#apis-for-creating-and-navigating-browsing-contexts-by-name">
<!-- 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" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/PrefixedPostMessage.js"></script>
<script>
var featuresPrefix = `width=401,height=204,top=0,`;
var windowURL = 'resources/message-opener.html';
// https://html.spec.whatwg.org/multipage/infrastructure.html#rules-for-parsing-integers
setup (() => {
// Before running tests, open a window using features that mimic
// what would happen if the feature tested here were set to 0
// for comparison later.
var featureString = `${featuresPrefix}left=0`;
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage((data, e) => {
e.source.close();
runWindowTests(data);
});
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
});
function runWindowTests (baselineDimensions) {
// When code point in first position is not an ASCII digit, "+" or "-",
// that's an error and the value becomes 0
[ 'screenx=/104',
'screenx=_104',
'screenx=L104'
].forEach(feature => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
var featureString = `${featuresPrefix}${feature}`;
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.left, baselineDimensions.left, `"${feature} begins with an invalid character and should be ignored"`);
}));
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
}, `features "${feature}" should NOT set "left=104"`);
});
// Codepoints that are valid ASCII digits should be collected
// Non-ASCII digits and subsequent code points are ignored
[ 'screenx=105.5',
'screenx=105.32',
'screenx=105LLl',
'screenx=105^4',
'screenx=105*3',
'screenx=105/5',
'screenx=105 ',
'screenx=105e1',
'screenx=105e-1'
].forEach(feature => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
var featureString = `${featuresPrefix}${feature}`;
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.left, 105, `"${featureString} value after first non-digit will be ignored"`);
}));
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
}, `features "${feature}" should set "left=105"`);
});
}
</script>

View file

@ -0,0 +1,76 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>HTML: window.open `features`: non-integer values for legacy feature `screeny`</title>
<meta name=timeout content=long>
<link rel="help" href="https://html.spec.whatwg.org/multipage/#apis-for-creating-and-navigating-browsing-contexts-by-name">
<!-- 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" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/PrefixedPostMessage.js"></script>
<script>
var featuresPrefix = `height=401,width=402,left=0,`;
var windowURL = 'resources/message-opener.html';
// https://html.spec.whatwg.org/multipage/infrastructure.html#rules-for-parsing-integers
setup (() => {
// Before running tests, open a window using features that mimic
// what would happen if the feature tested here were set to 0
// for comparison later.
var featureString = `${featuresPrefix}top=0`;
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage((data, e) => {
e.source.close();
runWindowTests(data);
});
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
});
function runWindowTests (baselineDimensions) {
// When code point in first position is not an ASCII digit, "+" or "-",
// that's an error and the value becomes 0
[ 'screeny=/404',
'screeny=_404',
'screeny=L404'
].forEach(feature => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
var featureString = `${featuresPrefix}${feature}`;
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.top, baselineDimensions.top, `"${feature} begins with an invalid character and should be ignored"`);
}));
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
}, `features "${feature}" should NOT set "height=404"`);
});
// Codepoints that are valid ASCII digits should be collected
// Non-ASCII digits and subsequent code points are ignored
[ 'screeny=405.5',
'screeny=405.32',
'screeny=405LLl',
'screeny=405^4',
'screeny=405*3',
'screeny=405/5',
'screeny=405 ',
'screeny=405e1',
'screeny=405e-1'
].forEach(feature => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
var featureString = `${featuresPrefix}${feature}`;
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.top, 405, `"${featureString} value after first non-digit will be ignored"`);
}));
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
}, `features "${feature}" should set "height=405"`);
});
}
</script>

View file

@ -0,0 +1,73 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>HTML: window.open `features`: non-integer values for feature `top`</title>
<meta name=timeout content=long>
<link rel="help" href="https://html.spec.whatwg.org/multipage/#apis-for-creating-and-navigating-browsing-contexts-by-name">
<!-- 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" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/PrefixedPostMessage.js"></script>
<script>
var windowURL = 'resources/message-opener.html';
var featuresPrefix = `width=401,height=204,left=0,`;
setup (() => {
// Before running tests, open a window using features that mimic
// what would happen if the feature tested here were set to 0
// for comparison later.
var featureString = `${featuresPrefix}top=0`;
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage((data, e) => {
e.source.close();
runWindowTests(data);
});
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
});
function runWindowTests (baselineDimensions) {
// When code point in first position is not an ASCII digit, "+" or "-",
// that's an error and the value becomes 0
[ 'top=/104',
'top=_104',
'top=L104'
].forEach(feature => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
var featureString = `${featuresPrefix}${feature}`;
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.top, baselineDimensions.top, `"${feature} begins with an invalid character and should be ignored"`);
}));
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
}, `features "${feature}" should NOT set "top=104"`);
});
// Codepoints that are valid ASCII digits should be collected
// Non-ASCII digits and subsequent code points are ignored
[ 'top=105.5',
'top=105.32',
'top=105LLl',
'top=105^4',
'top=105*3',
'top=105/5',
'top=105 ',
'top=105e1',
'top=105e-1'
].forEach(feature => {
async_test(t => {
var featureString = `${featuresPrefix}${feature}`;
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.top, 105, `"${feature} value after first non-digit will be ignored"`);
}));
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
}, `features "${feature}" should set "top=105"`);
});
}
</script>

View file

@ -0,0 +1,91 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>HTML: window.open `features`: non-integer values for feature `width`</title>
<meta name=timeout content=long>
<link rel="help" href="https://html.spec.whatwg.org/multipage/#apis-for-creating-and-navigating-browsing-contexts-by-name">
<!-- 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" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/PrefixedPostMessage.js"></script>
<script>
var featuresPrefix = `top=0,left=0,height=401,`;
var windowURL = 'resources/message-opener.html';
// https://html.spec.whatwg.org/multipage/infrastructure.html#rules-for-parsing-integers
setup (() => {
// Before running tests, open a window using features that mimic
// what would happen if the feature tested here were set to 0
// for comparison later.
var featureString = `${featuresPrefix}width=0`;
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage((data, e) => {
e.source.close();
runWindowTests(data);
});
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
});
function runWindowTests (baselineDimensions) {
// The absence of the sizing feature should have the same behavior
// as that feature set to 0
[ featuresPrefix,
'top=0,left=0',
].forEach(feature => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.width, baselineDimensions.width);
}));
var win = window.open(prefixedMessage.url(windowURL), '', feature);
}, `${feature}: absence of feature "width" should be treated same as "width=0"`);
});
// When code point in first position is not an ASCII digit, "+" or "-",
// that's an error and the value becomes 0
[ 'width=/404',
'width=_404',
'width=L404'
].forEach(feature => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
var featureString = `${featuresPrefix}${feature}`;
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.width, baselineDimensions.width, `"${feature} begins with an invalid character and should be ignored"`);
}));
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
}, `features "${feature}" should NOT set "width=404"`);
});
// Codepoints that are valid ASCII digits should be collected
// Non-ASCII digits and subsequent code points are ignored
[ 'width=405.5',
'width=405.32',
'width=405LLl',
'width=405^4',
'width=405*3',
'width=405/5',
'width=405 ',
'width=405e1',
'width=405e-1'
].forEach(feature => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
var featureString = `${featuresPrefix}${feature}`;
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.width, 405, `"${featureString} value after first non-digit will be ignored"`);
}));
var win = window.open(prefixedMessage.url(windowURL), '', featureString);
}, `features "${feature}" should set "width=405"`);
});
}
</script>

View file

@ -0,0 +1,55 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>HTML: window.open `features`: tokenization -- legacy size features `innerheight`, `innerwidth`</title>
<meta name=timeout content=long>
<link rel="help" href="https://html.spec.whatwg.org/multipage/#apis-for-creating-and-navigating-browsing-contexts-by-name">
<!-- 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" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/PrefixedPostMessage.js"></script>
<script>
var windowURL = 'resources/message-opener.html';
var width = 'width=401,';
var height = 'height=402,';
[ 'innerwidth=401',
' innerwidth = 401',
'innerwidth==401',
'\ninnerwidth= 401',
',innerwidth=401,,',
'INNERWIDTH=401',
'innerWidth=401'
].forEach((features, idx, arr) => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.width, 401);
}));
var win = window.open(prefixedMessage.url(windowURL), '', height + features);
}, `${format_value(features)} should set width of opened window`);
});
[ 'innerheight=402',
' innerheight = 402',
'innerheight==402',
'\ninnerheight= 402',
',innerheight=402,,',
'INNERHEIGHT=402',
'innerHeight=402'
].forEach((features, idx, arr) => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.height, 402);
}));
var win = window.open(prefixedMessage.url(windowURL), '', width + features);
}, `${format_value(features)} should set height of opened window`);
});
</script>

View file

@ -0,0 +1,149 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>HTML: window.open `features`: tokenization -- `noopener`</title>
<meta name=timeout content=long>
<link rel="help" href="https://html.spec.whatwg.org/multipage/#apis-for-creating-and-navigating-browsing-contexts-by-name">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
var windowURL = 'resources/close-self.html';
// Tests for how windows features are tokenized into 'name', 'value'
// window features separators are ASCII whitespace, '=' and ','
test (t => {
// Tokenizing `name`: initial window features separators are ignored
// Each of these variants should tokenize to ('noopener', '')
var featureVariants = [
' noopener',
'=noopener',
',,noopener',
',=, noopener',
'\n=noopener=',
'\tnoopener',
'\r,,,=noopener',
'\u000Cnoopener'
];
featureVariants.forEach(feature => {
var win = window.open(windowURL, '', feature);
assert_equals(win, null, `"${feature}" should activate feature "noopener"`);
});
}, 'tokenization should skip window features separators before `name`');
test (t => {
// Tokenizing `name`: lowercase conversion
// Each of these variants should tokenize as feature ('noopener', '')
// except where indicated
// Note also that `value` is lowercased during tokenization
var featureVariants = [
'NOOPENER',
'noOpenER',
' NOopener',
'=NOOPENER',
'noopener=NOOPENER', // => ('noopener', 'noopener')
'NOOPENER=noopener' // => ('noopener', 'noopener')
];
featureVariants.forEach(feature => {
var win = window.open(windowURL, '', feature);
assert_equals(win, null, `"${feature}" should activate feature "noopener"`);
});
}, 'feature `name` should be converted to ASCII lowercase');
test (t => {
// After `name` has been collected, ignore any window features separators until '='
// except ',' OR a non-window-features-separator — break in those cases
// i.e. ignore whitespace until '=' unless a ',' is encountered first
// Each of these variants should tokenize as feature ('noopener', '')
var featureVariants = [
'noopener',
' noopener\r',
'noopener\n =',
'noopener,',
'noopener =,',
', noopener =',
'noopener,=',
'noopener foo', // => ('noopener', ''), ('foo', '')
'foo noopener=1', // => ('foo', ''), ('noopener', '1')
'foo=\u000Cnoopener' // => ('foo', ''), ('noopener', '')
];
featureVariants.forEach(feature => {
var win = window.open(windowURL, '', feature);
assert_equals(win, null, `"${feature}" should activate feature "noopener"`);
});
}, 'after `name`, tokenization should skip window features separators that are not "=" or ","');
test (t => {
// After initial '=', tokenizing should ignore all separators except ','
// before collecting `value`
// Each of these variants should tokenize as feature ('noopener', '')
// Except where indicated
var featureVariants = [
'noopener= yes', // => ('noopener', 'yes')
'noopener==,',
'noopener=\n ,',
'noopener = \t ,',
'noopener\n=\r noopener,', // => ('noopener', 'noopener')
'noopener=,yes', // => ('noopener'), ('yes')
'noopener= foo=,', // => ('noopener', 'foo')
'noopener = \u000Cyes' // => ('noopener', 'yes')
];
featureVariants.forEach(feature => {
var win = window.open(windowURL, '', feature);
assert_equals(win, null, `"${feature}" should activate feature "noopener"`);
});
}, 'Tokenizing should ignore window feature separators except "," after initial "=" and before value');
test (t => {
// Tokenizing `value` should collect any non-separator code points until first separator
var featureVariants = [
'noopener=noopener', // => ('noopener', 'noopener')
'noopener=yes', // => ('noopener', 'yes')
'noopener = yes ,', // => ('noopener', 'yes')
'noopener=\nyes ,', // => ('noopener', 'yes')
'noopener=yes yes', // => ('noopener', 'yes'), ('yes', '')
'noopener=yes\ts', // => ('noopener', 'yes'), ('s', '')
'noopener==', // => ('noopener', '')
'noopener=0\n,', // => ('noopener', '0')
'==noopener===', // => ('noopener', '')
'noopener==\u000C' // => ('noopener', '')
];
featureVariants.forEach(feature => {
var win = window.open(windowURL, '', feature);
assert_equals(win, null, `"${feature}" should set "noopener"`);
});
}, 'Tokenizing should read characters until first window feature separator as `value`');
test (t => {
// If tokenizedFeatures contains an entry with the key "noopener"...disown opener
// i.e. `value` should be irrelevant
var featureVariants = [
'noopener=false',
',noopener=0, ',
'foo=bar,noopener=noopener,',
'noopener=true',
'noopener=foo\nbar\t'
];
featureVariants.forEach(feature => {
var win = window.open(windowURL, '', feature);
assert_equals(win, null, `"${feature}" should activate feature "noopener"`);
});
}, '"noopener" should be based on name (key), not value');
test (t => {
var invalidFeatureVariants = [
'-noopener', // => ('-noopener', '')
'NOOPENERRRR', // => ('noopenerrr', '')
'noOpenErR', // => ('noopenerr', '')
'no_opener', // => ('no_opener', '')
' no opener', // => ('no', ''), ('opener', '')
'no\nopener', // => ('no', ''), ('opener', '')
'no,opener', // => ('no', ''), ('opener', '')
'\0noopener', // => ('\0noopener', '')
'noopener\u0000=yes' // => ('noopener\0', 'yes')
];
invalidFeatureVariants.forEach(feature => {
var win = window.open(windowURL, '', feature);
assert_not_equals(win, null, `"${feature}" should NOT activate feature "noopener"`);
});
}, 'invalid feature names should not tokenize as "noopener"');
</script>

View file

@ -0,0 +1,55 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>HTML: window.open `features`: tokenization -- legacy position features `screenx`, `screeny`</title>
<meta name=timeout content=long>
<link rel="help" href="https://html.spec.whatwg.org/multipage/#apis-for-creating-and-navigating-browsing-contexts-by-name">
<!-- 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" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/PrefixedPostMessage.js"></script>
<script>
var windowURL = 'resources/message-opener.html';
var width = 'width=401,';
var height = 'height=402,';
[ 'screenx=141',
' screenx = 141',
'screenx==141',
'\nscreenx= 141',
',screenx=141,,',
'SCREENX=141',
'screenX=141'
].forEach((features, idx, arr) => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.left, 141);
}));
var win = window.open(prefixedMessage.url(windowURL), '', width + height + features);
}, `${format_value(features)} should set left position of opened window`);
});
[ 'screeny=142',
' screeny = 142',
'screeny==142',
'\nscreeny= 142',
',screeny=142,,',
'SCREENY=142',
'screenY=142'
].forEach((features, idx, arr) => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.top, 142);
}));
var win = window.open(prefixedMessage.url(windowURL), '', width + height + features);
}, `${format_value(features)} should set top position of opened window`);
});
</script>

View file

@ -0,0 +1,69 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>HTML: window.open `features`: tokenization -- position features `top` and `left`</title>
<meta name=timeout content=long>
<link rel="help" href="https://html.spec.whatwg.org/multipage/#apis-for-creating-and-navigating-browsing-contexts-by-name">
<!-- 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" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/PrefixedPostMessage.js"></script>
<script>
var windowURL = 'resources/message-opener.html';
var width = 'width=401,';
var height = 'height=402,';
[ 'left=141',
' left = 141',
'left==141',
'\nleft= 141',
',left=141,,',
'LEFT=141'
].forEach((features, idx, arr) => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.left, 141);
}));
var win = window.open(prefixedMessage.url(windowURL), '', width + height + features);
}, `"${features}" should set left position of opened window`);
});
[ 'top=142',
' top = 142',
'top==142',
'\ttop= 142',
',top=142,,',
'TOP=142'
].forEach((features, idx, arr) => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.top, 142);
}));
var win = window.open(prefixedMessage.url(windowURL), '', width + height + features);
}, `${format_value(features)} should set top position of opened window`);
});
[ 'top=152,left=152',
'top=152,,left=152,',
'top=152==left=152',
',,top= 152, left=152'
].forEach((features, idx, arr) => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.top, 152);
assert_equals(data.left, 152);
}));
var win = window.open(prefixedMessage.url(windowURL), '', width + height + features);
}, `${format_value(features)} should set top and left position of opened window`);
});
</script>

View file

@ -0,0 +1,71 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>HTML: window.open `features`: tokenization -- size features `width` and `height`</title>
<meta name=timeout content=long>
<link rel="help" href="https://html.spec.whatwg.org/multipage/#apis-for-creating-and-navigating-browsing-contexts-by-name">
<!-- 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" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/PrefixedPostMessage.js"></script>
<script>
var windowURL = 'resources/message-opener.html';
var width = 'width=401,';
var height = 'height=402,';
[ 'width=401',
' width = 401',
'width==401',
'\nwidth= 401',
',width=401,,',
'WIDTH=401'
].forEach((features, idx, arr) => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.width, 401);
}));
var win = window.open(prefixedMessage.url(windowURL), '', height + features);
}, `${format_value(features)} should set width of opened window`);
});
[ 'height=402',
' height = 402',
'height==402',
'\nheight= 402',
',height=402,,',
'HEIGHT=402'
].forEach((features, idx, arr) => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.height, 402);
}));
var win = window.open(prefixedMessage.url(windowURL), '', width + features);
}, `${format_value(features)} should set height of opened window`);
});
[ 'height=402,width=401',
' height = 402 , width = 401 ,',
'height==402 width = 401',
'\nheight= 402,,width=\n401',
',height=402,,width==401',
'HEIGHT=402, WIDTH=401'
].forEach((features, idx, arr) => {
async_test(t => {
var prefixedMessage = new PrefixedMessageTest();
prefixedMessage.onMessage(t.step_func_done((data, e) => {
e.source.close();
assert_equals(data.height, 402);
assert_equals(data.width, 401)
}));
var win = window.open(prefixedMessage.url(windowURL), '', features);
}, `${format_value(features)} should set height and width of opened window`);
});
</script>

View file

@ -0,0 +1,12 @@
<script src="/common/PrefixedPostMessage.js"></script>
<script>
var prefixedMessage = new PrefixedMessageResource();
window.addEventListener('load', () => {
prefixedMessage.postToOpener({
left: window.screenX,
top: window.screenY,
width: window.innerWidth,
height: window.innerHeight
});
});
</script>

View file

@ -4,5 +4,12 @@
var channel = new BroadcastChannel(channelName);
channel.postMessage({ name: window.name,
haveOpener: window.opener !== null });
window.close();
// Because messages are not delivered synchronously and because closing a
// browsing context prompts the eventual clearing of all task sources, this
// document should not be closed until the opener document has confirmed
// receipt.
channel.onmessage = function() {
window.close();
};
</script>

View file

@ -64,7 +64,10 @@ for (var i = 0; i < testData.length; ++i) {
} else {
t.step(function() {
var w1;
this.add_cleanup(function() { w1.close(); });
this.add_cleanup(function() {
w1.close();
channel.postMessage(null);
});
var windowName = this.windowName;
var channel = new BroadcastChannel(windowName);