mirror of
https://github.com/servo/servo.git
synced 2025-08-09 07:25:35 +01:00
Update web-platform-tests to revision 58eb04cecbbec2e18531ab440225e38944a9c444
This commit is contained in:
parent
25e8bf69e6
commit
665817d2a6
35333 changed files with 1818077 additions and 16036 deletions
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -0,0 +1,3 @@
|
|||
<script>
|
||||
window.close();
|
||||
</script>
|
|
@ -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>
|
|
@ -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>
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue