mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
Auto merge of #21037 - servo-wpt-sync:wpt_update_11-06-2018, r=jdm
Sync WPT with upstream (11-06-2018) Automated downstream sync of changes from upstream as of 11-06-2018. [no-wpt-sync] <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/21037) <!-- Reviewable:end -->
This commit is contained in:
commit
fc3c558cbf
171 changed files with 2434 additions and 907 deletions
|
@ -0,0 +1,4 @@
|
|||
[2d.scrollPathIntoView.basic.html]
|
||||
[scrollPathIntoView() works]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[2d.scrollPathIntoView.path.html]
|
||||
[scrollPathIntoView() with path argument works]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[2d.scrollPathIntoView.verticalLR.html]
|
||||
[scrollPathIntoView() works in vertical-lr writing mode]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[2d.scrollPathIntoView.verticalRL.html]
|
||||
[scrollPathIntoView() works in vertical-rl writing mode]
|
||||
expected: FAIL
|
||||
|
File diff suppressed because it is too large
Load diff
|
@ -1,3 +1,6 @@
|
|||
[window-name-after-cross-origin-main-frame-navigation.sub.html]
|
||||
type: testharness
|
||||
expected: ERROR
|
||||
[window.name should equal "" after a cross-origin main frame navigation]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[scroll-position-vertical-rl.html]
|
||||
[Fragment Navigation: Scroll to block start position in vertical-rl writing mode]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
[document_domain.html]
|
||||
[new Document()]
|
||||
expected: FAIL
|
||||
|
||||
[XMLHttpRequest's response document]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[sandboxed-document_domain.html]
|
||||
[Sandboxed document.domain]
|
||||
expected: FAIL
|
||||
|
|
@ -32,3 +32,6 @@
|
|||
[RegisterPtotocolHandler URL: unpaired surrogate codepoint should not make any exceptions.]
|
||||
expected: FAIL
|
||||
|
||||
[USVString test relate to url]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
[rapid-resizing.html]
|
||||
expected: TIMEOUT
|
||||
[Overall test]
|
||||
expected: NOTRUN
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
[shader-with-non-reserved-words.html]
|
||||
expected: TIMEOUT
|
||||
[Overall test]
|
||||
expected: NOTRUN
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
<!DOCTYPE html>
|
||||
<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
|
||||
<title>Canvas test: 2d.scrollPathIntoView.basic</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/common/canvas-tests.js"></script>
|
||||
<link rel="stylesheet" href="/common/canvas-tests.css">
|
||||
<body class="show_output">
|
||||
|
||||
<h1>2d.scrollPathIntoView.basic</h1>
|
||||
<p class="desc">scrollPathIntoView() works</p>
|
||||
|
||||
|
||||
<p class="output">Actual output:</p>
|
||||
<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
|
||||
|
||||
<ul id="d"></ul>
|
||||
<script>
|
||||
var t = async_test("scrollPathIntoView() works");
|
||||
_addTest(function(canvas, ctx) {
|
||||
|
||||
var div = document.createElement('div');
|
||||
div.style.cssText = 'width: 200vw; height: 200vh';
|
||||
document.body.appendChild(div);
|
||||
canvas.style.cssText = 'position: absolute; top: 100px; left: 200px; border: none;';
|
||||
window.scrollTo(0, 0);
|
||||
|
||||
ctx.beginPath();
|
||||
ctx.rect(4, 8, 16, 32);
|
||||
ctx.scrollPathIntoView();
|
||||
var rect = canvas.getBoundingClientRect();
|
||||
_assertSame(Math.round(rect.top), -8, "Math.round(rect.top)", "-8");
|
||||
_assertSame(Math.round(rect.left), 200, "Math.round(rect.left)", "200");
|
||||
|
||||
|
||||
});
|
||||
</script>
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
<!DOCTYPE html>
|
||||
<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
|
||||
<title>Canvas test: 2d.scrollPathIntoView.path</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/common/canvas-tests.js"></script>
|
||||
<link rel="stylesheet" href="/common/canvas-tests.css">
|
||||
<body class="show_output">
|
||||
|
||||
<h1>2d.scrollPathIntoView.path</h1>
|
||||
<p class="desc">scrollPathIntoView() with path argument works</p>
|
||||
|
||||
|
||||
<p class="output">Actual output:</p>
|
||||
<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
|
||||
|
||||
<ul id="d"></ul>
|
||||
<script>
|
||||
var t = async_test("scrollPathIntoView() with path argument works");
|
||||
_addTest(function(canvas, ctx) {
|
||||
|
||||
var div = document.createElement('div');
|
||||
div.style.cssText = 'width: 200vw; height: 200vh';
|
||||
document.body.appendChild(div);
|
||||
canvas.style.cssText = 'position: absolute; top: 100px; left: 200px; border: none;';
|
||||
window.scrollTo(0, 0);
|
||||
|
||||
var path = new Path2D();
|
||||
path.rect(4, 8, 16, 32);
|
||||
ctx.scrollPathIntoView(path);
|
||||
var rect = canvas.getBoundingClientRect();
|
||||
_assertSame(Math.round(rect.top), -8, "Math.round(rect.top)", "-8");
|
||||
_assertSame(Math.round(rect.left), 200, "Math.round(rect.left)", "200");
|
||||
|
||||
|
||||
});
|
||||
</script>
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
<!DOCTYPE html>
|
||||
<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
|
||||
<title>Canvas test: 2d.scrollPathIntoView.verticalLR</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/common/canvas-tests.js"></script>
|
||||
<link rel="stylesheet" href="/common/canvas-tests.css">
|
||||
<body class="show_output">
|
||||
|
||||
<h1>2d.scrollPathIntoView.verticalLR</h1>
|
||||
<p class="desc">scrollPathIntoView() works in vertical-lr writing mode</p>
|
||||
|
||||
|
||||
<p class="output">Actual output:</p>
|
||||
<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
|
||||
|
||||
<ul id="d"></ul>
|
||||
<script>
|
||||
var t = async_test("scrollPathIntoView() works in vertical-lr writing mode");
|
||||
_addTest(function(canvas, ctx) {
|
||||
|
||||
document.documentElement.style.cssText = 'writing-mode: vertical-lr';
|
||||
var div = document.createElement('div');
|
||||
div.style.cssText = 'width: 200vw; height: 200vh';
|
||||
document.body.appendChild(div);
|
||||
canvas.style.cssText = 'position: absolute; top: 100px; left: 200px; border: none;';
|
||||
window.scrollTo(0, 0);
|
||||
|
||||
ctx.beginPath();
|
||||
ctx.rect(4, 8, 16, 32);
|
||||
ctx.scrollPathIntoView();
|
||||
var rect = canvas.getBoundingClientRect();
|
||||
_assertSame(Math.round(rect.top), 100, "Math.round(rect.top)", "100");
|
||||
_assertSame(Math.round(rect.left), -4, "Math.round(rect.left)", "-4");
|
||||
|
||||
|
||||
});
|
||||
</script>
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
<!DOCTYPE html>
|
||||
<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
|
||||
<title>Canvas test: 2d.scrollPathIntoView.verticalRL</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/common/canvas-tests.js"></script>
|
||||
<link rel="stylesheet" href="/common/canvas-tests.css">
|
||||
<body class="show_output">
|
||||
|
||||
<h1>2d.scrollPathIntoView.verticalRL</h1>
|
||||
<p class="desc">scrollPathIntoView() works in vertical-rl writing mode</p>
|
||||
|
||||
|
||||
<p class="output">Actual output:</p>
|
||||
<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
|
||||
|
||||
<ul id="d"></ul>
|
||||
<script>
|
||||
var t = async_test("scrollPathIntoView() works in vertical-rl writing mode");
|
||||
_addTest(function(canvas, ctx) {
|
||||
|
||||
document.documentElement.style.cssText = 'writing-mode: vertical-rl';
|
||||
var div = document.createElement('div');
|
||||
div.style.cssText = 'width: 200vw; height: 200vh';
|
||||
document.body.appendChild(div);
|
||||
canvas.style.cssText = 'position: absolute; top: 100px; right: 200px; border: none;';
|
||||
window.scrollTo(0, 0);
|
||||
|
||||
ctx.beginPath();
|
||||
ctx.rect(4, 8, 16, 32);
|
||||
ctx.scrollPathIntoView();
|
||||
var rect = canvas.getBoundingClientRect();
|
||||
var viewportWidth = document.scrollingElement.clientWidth;
|
||||
var canvasWidth = canvas.width;
|
||||
_assertSame(Math.round(rect.top), 100, "Math.round(rect.top)", "100");
|
||||
_assertSame(Math.round(rect.right), viewportWidth + (canvasWidth - 4 - 16), "Math.round(rect.right)", "viewportWidth + (canvasWidth - 4 - 16)");
|
||||
|
||||
|
||||
});
|
||||
</script>
|
||||
|
|
@ -32,6 +32,7 @@
|
|||
2d.text.draw.space.collapse.space: "text-styles"
|
||||
2d.text.draw.space.collapse.start: "text-styles"
|
||||
2d.state: "the-canvas-state"
|
||||
2d.scrollPathIntoView: "scroll"
|
||||
2d.canvas: "../html/semantics/embedded-content/the-canvas-element"
|
||||
2d.getcontext: "../html/semantics/embedded-content/the-canvas-element"
|
||||
2d.scaled: "../html/semantics/embedded-content/the-canvas-element"
|
||||
|
|
|
@ -687,6 +687,9 @@ assertions:
|
|||
- id: 2d.colorspace.img.noinfo
|
||||
text: "Furthermore, the rendering of images that have no color correction information (such as those returned by the toDataURL() method) *must* be rendered with no color correction<^>."
|
||||
|
||||
- id: 2d.scrollPathIntoView.basic
|
||||
text: "The scrollPathIntoView() method, when invoked, *must* run these steps<^>:"
|
||||
|
||||
- id: security.start
|
||||
text: "All canvas elements *must* start with their origin-clean set to true<^>."
|
||||
- id: security.drawImage.image
|
||||
|
|
|
@ -10153,3 +10153,79 @@
|
|||
ctx.fill();
|
||||
@assert pixel 50,25 ==~ 0,255,0,255;
|
||||
expected: green
|
||||
|
||||
- name: 2d.scrollPathIntoView.basic
|
||||
desc: scrollPathIntoView() works
|
||||
testing:
|
||||
- 2d.scrollPathIntoView.basic
|
||||
code: |
|
||||
var div = document.createElement('div');
|
||||
div.style.cssText = 'width: 200vw; height: 200vh';
|
||||
document.body.appendChild(div);
|
||||
canvas.style.cssText = 'position: absolute; top: 100px; left: 200px; border: none;';
|
||||
window.scrollTo(0, 0);
|
||||
|
||||
ctx.beginPath();
|
||||
ctx.rect(4, 8, 16, 32);
|
||||
ctx.scrollPathIntoView();
|
||||
var rect = canvas.getBoundingClientRect();
|
||||
@assert Math.round(rect.top) === -8;
|
||||
@assert Math.round(rect.left) === 200;
|
||||
|
||||
- name: 2d.scrollPathIntoView.verticalLR
|
||||
desc: scrollPathIntoView() works in vertical-lr writing mode
|
||||
testing:
|
||||
- 2d.scrollPathIntoView.basic
|
||||
code: |
|
||||
document.documentElement.style.cssText = 'writing-mode: vertical-lr';
|
||||
var div = document.createElement('div');
|
||||
div.style.cssText = 'width: 200vw; height: 200vh';
|
||||
document.body.appendChild(div);
|
||||
canvas.style.cssText = 'position: absolute; top: 100px; left: 200px; border: none;';
|
||||
window.scrollTo(0, 0);
|
||||
|
||||
ctx.beginPath();
|
||||
ctx.rect(4, 8, 16, 32);
|
||||
ctx.scrollPathIntoView();
|
||||
var rect = canvas.getBoundingClientRect();
|
||||
@assert Math.round(rect.top) === 100;
|
||||
@assert Math.round(rect.left) === -4;
|
||||
|
||||
- name: 2d.scrollPathIntoView.verticalRL
|
||||
desc: scrollPathIntoView() works in vertical-rl writing mode
|
||||
testing:
|
||||
- 2d.scrollPathIntoView.basic
|
||||
code: |
|
||||
document.documentElement.style.cssText = 'writing-mode: vertical-rl';
|
||||
var div = document.createElement('div');
|
||||
div.style.cssText = 'width: 200vw; height: 200vh';
|
||||
document.body.appendChild(div);
|
||||
canvas.style.cssText = 'position: absolute; top: 100px; right: 200px; border: none;';
|
||||
window.scrollTo(0, 0);
|
||||
|
||||
ctx.beginPath();
|
||||
ctx.rect(4, 8, 16, 32);
|
||||
ctx.scrollPathIntoView();
|
||||
var rect = canvas.getBoundingClientRect();
|
||||
var viewportWidth = document.scrollingElement.clientWidth;
|
||||
var canvasWidth = canvas.width;
|
||||
@assert Math.round(rect.top) === 100;
|
||||
@assert Math.round(rect.right) === viewportWidth + (canvasWidth - 4 - 16);
|
||||
|
||||
- name: 2d.scrollPathIntoView.path
|
||||
desc: scrollPathIntoView() with path argument works
|
||||
testing:
|
||||
- 2d.scrollPathIntoView.basic
|
||||
code: |
|
||||
var div = document.createElement('div');
|
||||
div.style.cssText = 'width: 200vw; height: 200vh';
|
||||
document.body.appendChild(div);
|
||||
canvas.style.cssText = 'position: absolute; top: 100px; left: 200px; border: none;';
|
||||
window.scrollTo(0, 0);
|
||||
|
||||
var path = new Path2D();
|
||||
path.rect(4, 8, 16, 32);
|
||||
ctx.scrollPathIntoView(path);
|
||||
var rect = canvas.getBoundingClientRect();
|
||||
@assert Math.round(rect.top) === -8;
|
||||
@assert Math.round(rect.left) === 200;
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>Accelerometer iframe test</title>
|
||||
<link rel="author" title="Intel" href="http://www.intel.com">
|
||||
<link rel="help" href="https://www.w3.org/TR/accelerometer/">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/generic-sensor/generic-sensor-tests.js"></script>
|
||||
<script src="/generic-sensor/generic-sensor-iframe-tests.sub.js"></script>
|
||||
<script src="/generic-sensor/generic-sensor-feature-policy-test.sub.js"></script>
|
||||
<div id="log"></div>
|
||||
<script>
|
||||
run_generic_sensor_iframe_tests('Accelerometer');
|
||||
run_generic_sensor_iframe_tests('LinearAccelerationSensor');
|
||||
run_generic_sensor_iframe_tests('GravitySensor');
|
||||
</script>
|
|
@ -11,14 +11,9 @@ promise_test(async () => {
|
|||
const idl = await fetch('/interfaces/budget-api.idl').then(r => r.text());
|
||||
|
||||
const idlArray = new IdlArray();
|
||||
idlArray.add_untested_idls(html, { only: [
|
||||
'Navigator',
|
||||
'NavigatorContentUtils',
|
||||
'NavigatorCookies',
|
||||
'NavigatorPlugins',
|
||||
] });
|
||||
idlArray.add_untested_idls(workers);
|
||||
idlArray.add_idls(idl);
|
||||
idlArray.add_dependency_idls(html);
|
||||
idlArray.add_dependency_idls(workers);
|
||||
idlArray.test();
|
||||
done();
|
||||
}, 'budget-api interfaces.');
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
|
||||
<p>The yellow box should be in the top right corner of the hotpink box.</p>
|
||||
<div style="width:30em; height:30em; background:hotpink;">
|
||||
<div style="float:right; writing-mode:vertical-rl; background:yellow;">
|
||||
<div style="visibility:hidden;">
|
||||
Roses are red,<br>
|
||||
violets are blue.<br>
|
||||
All my base<br>
|
||||
are belong to you.<br>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,8 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Two levels of writing mode roots with text inside, fixed available inline size for inner on outer</title>
|
||||
<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
|
||||
<div style="width:10em; border:solid; background:yellow;">
|
||||
<div style="padding:3px;">
|
||||
This text should be inside a box with a yellow background and a black border. There should be no red.
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,11 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Two levels of writing mode roots with text inside, percentage inline size on inner</title>
|
||||
<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
|
||||
<p>There should be three lines below. The middle line should have a yellow
|
||||
background that takes up about 50% of the viewport width (but otherwise be
|
||||
exactly like the two others, i.e. no extra height or anything like that).</p>
|
||||
A B C D E F G
|
||||
<div style="width:50vw; background:yellow;">
|
||||
A B C D E F G
|
||||
</div>
|
||||
A B C D E F G
|
|
@ -0,0 +1,13 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Two levels of writing mode roots with text inside, no constraints</title>
|
||||
<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-sizing-3/#intrinsic" title="4. Intrinsic Size Determination">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#orthogonal-auto" title="7.3.1. Available Space in Orthogonal Flows">
|
||||
<p>There should be three lines below. The middle line should have a
|
||||
yellow background (but otherwise be exactly like the two others,
|
||||
i.e. no extra height or anything like that)</p>
|
||||
A B C D E F G
|
||||
<div style="width:fit-content; background:yellow;">
|
||||
A B C D E F G
|
||||
</div>
|
||||
A B C D E F G
|
|
@ -0,0 +1,19 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Three levels of writing mode roots with text inside, no constraints</title>
|
||||
<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-sizing-3/#intrinsic" title="4. Intrinsic Size Determination">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#orthogonal-auto" title="7.3.1. Available Space in Orthogonal Flows">
|
||||
<link rel="match" href="reference/three-levels-of-orthogonal-flows.html">
|
||||
<p>The yellow box should be in the top right corner of the hotpink box.</p>
|
||||
<div style="writing-mode:vertical-rl; width:30em; height:30em; background:hotpink;">
|
||||
<div style="writing-mode:horizontal-tb;">
|
||||
<div style="writing-mode:vertical-rl; background:yellow;">
|
||||
<div style="visibility:hidden;">
|
||||
Roses are red,<br>
|
||||
violets are blue.<br>
|
||||
All my base<br>
|
||||
are belong to you.<br>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,11 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Two levels of writing mode roots with text inside, fixed available inline size for inner on outer</title>
|
||||
<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-sizing-3/#intrinsic" title="4. Intrinsic Size Determination">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#orthogonal-auto" title="7.3.1. Available Space in Orthogonal Flows">
|
||||
<link rel="match" href="reference/two-levels-of-orthogonal-flows-fixed.html">
|
||||
<div style="writing-mode:vertical-rl; width:10em; border:solid; background:red;">
|
||||
<div style="writing-mode:horizontal-tb; padding:3px; background:yellow;">
|
||||
This text should be inside a box with a yellow background and a black border. There should be no red.
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,16 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Two levels of writing mode roots with text inside, percentage inline size on inner</title>
|
||||
<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-sizing-3/#intrinsic" title="4. Intrinsic Size Determination">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#orthogonal-auto" title="7.3.1. Available Space in Orthogonal Flows">
|
||||
<link rel="match" href="reference/two-levels-of-orthogonal-flows-percentage.html">
|
||||
<p>There should be three lines below. The middle line should have a yellow
|
||||
background that takes up about 50% of the viewport width (but otherwise be
|
||||
exactly like the two others, i.e. no extra height or anything like that).</p>
|
||||
A B C D E F G
|
||||
<div style="writing-mode:vertical-rl; background:yellow;">
|
||||
<div style="writing-mode:horizontal-tb; width:50%;">
|
||||
A B C D E F G
|
||||
</div>
|
||||
</div>
|
||||
A B C D E F G
|
|
@ -0,0 +1,16 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Two levels of writing mode roots with text inside, no constraints</title>
|
||||
<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-sizing-3/#intrinsic" title="4. Intrinsic Size Determination">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#orthogonal-auto" title="7.3.1. Available Space in Orthogonal Flows">
|
||||
<link rel="match" href="reference/two-levels-of-orthogonal-flows.html">
|
||||
<p>There should be three lines below. The middle line should have a
|
||||
yellow background (but otherwise be exactly like the two others,
|
||||
i.e. no extra height or anything like that)</p>
|
||||
A B C D E F G
|
||||
<div style="writing-mode:vertical-rl; background:yellow;">
|
||||
<div style="writing-mode:horizontal-tb;">
|
||||
A B C D E F G
|
||||
</div>
|
||||
</div>
|
||||
A B C D E F G
|
|
@ -44,7 +44,7 @@
|
|||
<p>
|
||||
To report bugs or feedback about a specific test file,
|
||||
search for the filename (without extension) in
|
||||
<a href="https://github.com/w3c/web-platform-tests/issues">Web Platform Tests Issues</a>,
|
||||
<a href="https://github.com/web-platform-tests/wpt/issues">web-platform-tests issues</a>,
|
||||
and file a new issue if necessary with suggested label "wg-css".
|
||||
More information on the contribution process and test guidelines is
|
||||
available on the <a href="http://wiki.csswg.org/test">wiki
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
</title>
|
||||
<link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
|
||||
<link rel="help" href="http://www.w3.org/TR/css-flexbox-1/#abspos-items">
|
||||
<link rel="match" href="flexbox-abspos-child-001-ref.html">
|
||||
<link rel="match" href="flexbox-abspos-child-002-ref.html">
|
||||
<style>
|
||||
.flex {
|
||||
display: flex;
|
||||
|
|
|
@ -17,6 +17,10 @@ const cross_origin_src =
|
|||
"https://{{domains[www]}}:{{ports[https][0]}}" + same_origin_src;
|
||||
const base_src = "/feature-policy/resources/redirect-on-load.html#";
|
||||
|
||||
function get_feature_policies_for_sensor(sensorType) {
|
||||
return feature_policies[sensorType];
|
||||
}
|
||||
|
||||
function run_fp_tests_disabled(sensorName) {
|
||||
const sensorType = self[sensorName];
|
||||
const featureNameList = feature_policies[sensorName];
|
||||
|
|
|
@ -0,0 +1,122 @@
|
|||
async function send_message_to_iframe(iframe, message, reply) {
|
||||
if (reply === undefined) {
|
||||
reply = 'success';
|
||||
}
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
let messageHandler = e => {
|
||||
|
||||
if (e.data.command !== message.command) {
|
||||
return;
|
||||
}
|
||||
window.removeEventListener('message', messageHandler);
|
||||
if (e.data.result === reply) {
|
||||
resolve();
|
||||
} else {
|
||||
reject();
|
||||
}
|
||||
}
|
||||
window.addEventListener('message', messageHandler);
|
||||
iframe.contentWindow.postMessage(message, '*');
|
||||
});
|
||||
}
|
||||
|
||||
function run_generic_sensor_iframe_tests(sensorName) {
|
||||
const sensorType = self[sensorName];
|
||||
const featurePolicies = get_feature_policies_for_sensor(sensorName);
|
||||
|
||||
sensor_test(async t => {
|
||||
assert_true(sensorName in self);
|
||||
const iframe = document.createElement('iframe');
|
||||
iframe.allow = featurePolicies.join(';') + ';';
|
||||
iframe.src = 'https://{{domains[www1]}}:{{ports[https][0]}}/generic-sensor/resources/iframe_sensor_handler.html';
|
||||
|
||||
// Create sensor inside cross-origin nested browsing context.
|
||||
const iframeLoadWatcher = new EventWatcher(t, iframe, 'load');
|
||||
document.body.appendChild(iframe);
|
||||
await iframeLoadWatcher.wait_for('load');
|
||||
await send_message_to_iframe(iframe, {command: 'create_sensor',
|
||||
type: sensorName});
|
||||
|
||||
// Focus on the main frame and test that sensor recieves readings.
|
||||
window.focus();
|
||||
const sensor = new sensorType();
|
||||
const sensorWatcher = new EventWatcher(t, sensor, ['reading']);
|
||||
sensor.start();
|
||||
|
||||
await sensorWatcher.wait_for('reading');
|
||||
const cachedTimeStamp = sensor.timestamp;
|
||||
|
||||
// Focus on the cross-origin frame and verify that sensor reading updates in
|
||||
// the top level browsing context are suspended.
|
||||
iframe.contentWindow.focus();
|
||||
await send_message_to_iframe(iframe, {command: 'start_sensor'});
|
||||
assert_equals(cachedTimeStamp, sensor.timestamp);
|
||||
|
||||
// Focus on the main frame, verify that sensor reading updates are resumed.
|
||||
window.focus();
|
||||
await sensorWatcher.wait_for('reading');
|
||||
assert_greater_than(sensor.timestamp, cachedTimeStamp);
|
||||
sensor.stop();
|
||||
|
||||
// Verify that sensor in cross-origin frame is suspended.
|
||||
await send_message_to_iframe(iframe, {command: 'is_sensor_suspended'}, true);
|
||||
await send_message_to_iframe(iframe, {command: 'reset_sensor_backend'});
|
||||
|
||||
// Remove iframe from main document.
|
||||
iframe.parentNode.removeChild(iframe);
|
||||
}, `${sensorName}: sensor is suspended and resumed when focus traverses from\
|
||||
to cross-origin frame`);
|
||||
|
||||
sensor_test(async t => {
|
||||
assert_true(sensorName in self);
|
||||
const iframe = document.createElement('iframe');
|
||||
iframe.allow = featurePolicies.join(';') + ';';
|
||||
iframe.src = 'https://{{host}}:{{ports[https][0]}}/generic-sensor/resources/iframe_sensor_handler.html';
|
||||
|
||||
// Create sensor inside same-origin nested browsing context.
|
||||
const iframeLoadWatcher = new EventWatcher(t, iframe, 'load');
|
||||
document.body.appendChild(iframe);
|
||||
await iframeLoadWatcher.wait_for('load');
|
||||
await send_message_to_iframe(iframe, {command: 'create_sensor',
|
||||
type: sensorName});
|
||||
|
||||
// Focus on main frame and test that sensor recieves readings.
|
||||
window.focus();
|
||||
const sensor = new sensorType();
|
||||
const sensorWatcher = new EventWatcher(t, sensor, ['reading']);
|
||||
sensor.start();
|
||||
await sensorWatcher.wait_for('reading');
|
||||
let cachedTimeStamp = sensor.timestamp;
|
||||
|
||||
// Stop sensor in main frame, so that sensorWatcher would not receive
|
||||
// readings while sensor in iframe is started. Sensors that are active
|
||||
// and belong to the same-origin context are not suspended, therefore,
|
||||
// we might get unexpeted 'reading' event, thus, failing the test.
|
||||
sensor.stop();
|
||||
iframe.contentWindow.focus();
|
||||
await send_message_to_iframe(iframe, {command: 'start_sensor'});
|
||||
|
||||
// Start sensor on main frame, verify that readings are updated.
|
||||
window.focus();
|
||||
sensor.start();
|
||||
await sensorWatcher.wait_for('reading');
|
||||
assert_greater_than(sensor.timestamp, cachedTimeStamp);
|
||||
cachedTimeStamp = sensor.timestamp;
|
||||
|
||||
// Verify that sensor in nested browsing context is not suspended.
|
||||
await send_message_to_iframe(iframe, {command: 'is_sensor_suspended'}, false);
|
||||
|
||||
// Verify that sensor in top level browsing context is receiving readings.
|
||||
iframe.contentWindow.focus();
|
||||
sensor.start();
|
||||
await sensorWatcher.wait_for('reading');
|
||||
assert_greater_than(sensor.timestamp, cachedTimeStamp);
|
||||
sensor.stop();
|
||||
await send_message_to_iframe(iframe, {command: 'reset_sensor_backend'});
|
||||
|
||||
// Remove iframe from main document.
|
||||
iframe.parentNode.removeChild(iframe);
|
||||
}, `${sensorName}: sensor is not suspended when focus traverses from\
|
||||
to same-origin frame`);
|
||||
}
|
|
@ -33,14 +33,19 @@ let loadChromiumResources = Promise.resolve().then(() => {
|
|||
return chain;
|
||||
});
|
||||
|
||||
async function initialize_generic_sensor_tests() {
|
||||
if (typeof GenericSensorTest === 'undefined') {
|
||||
await loadChromiumResources;
|
||||
}
|
||||
assert_true(typeof GenericSensorTest !== 'undefined');
|
||||
let sensorTest = new GenericSensorTest();
|
||||
await sensorTest.initialize();
|
||||
return sensorTest;
|
||||
}
|
||||
|
||||
function sensor_test(func, name, properties) {
|
||||
promise_test(async (t) => {
|
||||
if (typeof GenericSensorTest === 'undefined') {
|
||||
await loadChromiumResources;
|
||||
}
|
||||
assert_true(typeof GenericSensorTest !== 'undefined');
|
||||
let sensorTest = new GenericSensorTest();
|
||||
await sensorTest.initialize();
|
||||
let sensorTest = await initialize_generic_sensor_tests();
|
||||
try {
|
||||
await func(t);
|
||||
} finally {
|
||||
|
|
|
@ -0,0 +1,63 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>iframe sensor tester</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/generic-sensor/generic-sensor-tests.js"></script>
|
||||
<script>
|
||||
let mockBackend = null;
|
||||
// Minimum frequency supported by the mock backend is 5Hz. Using 200ms
|
||||
// update period + 50ms threshold.
|
||||
const maxUpdatePeriod = 250;
|
||||
let sensor = null;
|
||||
let lastTimestamp = null;
|
||||
|
||||
window.onmessage = (e) => {
|
||||
if (e.data.command === 'create_sensor') {
|
||||
assert_equals(sensor, null);
|
||||
initialize_generic_sensor_tests().then((backend) => {
|
||||
mockBackend = backend;
|
||||
try {
|
||||
sensor = new self[e.data.type]();
|
||||
e.source.postMessage({command: e.data.command,
|
||||
result: 'success'}, '*');
|
||||
} catch (e) {
|
||||
e.source.postMessage({command: e.data.command, result: ''}, '*');
|
||||
}
|
||||
});
|
||||
} else if (e.data.command === 'start_sensor') {
|
||||
assert_not_equals(sensor, null);
|
||||
try {
|
||||
sensor.start();
|
||||
sensor.onreading = () => lastTimestamp = sensor.timestamp;
|
||||
let onReadingListener = () => {
|
||||
e.source.postMessage({command: e.data.command,
|
||||
result: 'success'}, '*');
|
||||
}
|
||||
sensor.addEventListener('reading', onReadingListener, {once: true});
|
||||
} catch (e) {
|
||||
e.source.postMessage({command: e.data.command, result: ''}, '*');
|
||||
}
|
||||
} else if (e.data.command === 'is_sensor_suspended') {
|
||||
let cachedTimestamp = lastTimestamp;
|
||||
let timeoutId = setTimeout(() => {
|
||||
e.source.postMessage({command: e.data.command,
|
||||
result: cachedTimestamp === lastTimestamp}, '*');
|
||||
}, maxUpdatePeriod);
|
||||
|
||||
let suspendListener = () => {
|
||||
clearTimeout(timeoutId);
|
||||
e.source.postMessage({command: e.data.command,
|
||||
result: cachedTimestamp === lastTimestamp}, '*');
|
||||
}
|
||||
sensor.addEventListener('reading', suspendListener, {once: true});
|
||||
} else if (e.data.command === 'reset_sensor_backend') {
|
||||
if (sensor) {
|
||||
sensor.stop();
|
||||
}
|
||||
mockBackend.reset().then(() => {
|
||||
e.source.postMessage({command: e.data.command,
|
||||
result: 'success'}, '*');
|
||||
});
|
||||
}
|
||||
}
|
||||
</script>
|
|
@ -0,0 +1,15 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>Gyroscope iframe test</title>
|
||||
<link rel="author" title="Intel" href="http://www.intel.com">
|
||||
<link rel="help" href="https://www.w3.org/TR/gyroscope/">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/generic-sensor/generic-sensor-tests.js"></script>
|
||||
<script src="/generic-sensor/generic-sensor-iframe-tests.sub.js"></script>
|
||||
<script src="/generic-sensor/generic-sensor-feature-policy-test.sub.js"></script>
|
||||
<div id="log"></div>
|
||||
<script>
|
||||
|
||||
run_generic_sensor_iframe_tests('Gyroscope');
|
||||
</script>
|
|
@ -0,0 +1,10 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
document.location = "window-name-navigation.sub.html?hostname={{domains[www1]}}&shouldhavename=false&sendmessage=true";
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -1,6 +1,7 @@
|
|||
<script src='/resources/testharness.js'></script>
|
||||
<script src='/resources/testharnessreport.js'></script>
|
||||
<script>
|
||||
setup({explicit_done: true})
|
||||
function process_test_result(passed, test_name) {
|
||||
if ({{GET[sendmessage]}}) {
|
||||
if (window.opener) {
|
||||
|
@ -12,6 +13,7 @@
|
|||
test(function(t) {
|
||||
assert_equals(passed, true);
|
||||
}, test_name);
|
||||
done();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,13 +1,24 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<!-- window.name should equal "" after a cross-origin main frame navigation. -->
|
||||
<script src='/resources/testharness.js'></script>
|
||||
<script src='/resources/testharnessreport.js'></script>
|
||||
</head>
|
||||
<body>
|
||||
<button id="button" onclick="popup();">open popup</button>
|
||||
<script>
|
||||
document.location = "support/window-name-navigation.sub.html?hostname={{domains[www1]}}&shouldhavename=false&sendmessage=false";
|
||||
function popup() {
|
||||
window.popupWin = window.open('support/window-name-after-cross-origin-main-frame-navigation-popup.sub.html', '_blank');
|
||||
}
|
||||
async_test(t => {
|
||||
t.add_cleanup(() => {
|
||||
popupWin.close();
|
||||
})
|
||||
document.getElementById('button').click();
|
||||
onmessage = t.step_func(e => {
|
||||
assert_true(e.data);
|
||||
});
|
||||
}, 'window.name should equal "" after a cross-origin main frame navigation');
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
<!DOCTYPE html>
|
||||
<html style="writing-mode: vertical-lr;">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Fragment Navigation: Scroll to block start position in vertical-lr writing mode</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="test" style="position: absolute; top: 5px; left: 7px; margin: 5px 7px; border-style: solid; border-width: 5px 7px; padding: 5px 7px; height: 5px; width: 7px;"></div>
|
||||
<div style="width: 200vw;"></div>
|
||||
<script>
|
||||
async_test(function (t) {
|
||||
on_event(window, 'load', function () {
|
||||
t.step(function () {
|
||||
window.scrollTo(0, 0);
|
||||
location.hash = 'test';
|
||||
assert_equals(window.scrollX, 14, 'Scroll to the left border edge of #test');
|
||||
});
|
||||
t.done();
|
||||
});
|
||||
}, '');
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,25 @@
|
|||
<!DOCTYPE html>
|
||||
<html style="writing-mode: vertical-rl;">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Fragment Navigation: Scroll to block start position in vertical-rl writing mode</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="test" style="position: absolute; top: 5px; right: 7px; margin: 5px 7px; border-style: solid; border-width: 5px 7px; padding: 5px 7px; height: 5px; width: 7px;"></div>
|
||||
<div style="width: 200vw;"></div>
|
||||
<script>
|
||||
async_test(function (t) {
|
||||
on_event(window, 'load', function () {
|
||||
t.step(function () {
|
||||
window.scrollTo(0, 0);
|
||||
location.hash = 'test';
|
||||
assert_equals(window.scrollX, -14, 'Scroll to the right border edge of #test');
|
||||
});
|
||||
t.done();
|
||||
});
|
||||
}, '');
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,25 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Fragment Navigation: Scroll to block start position</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="test" style="position: absolute; top: 5px; left: 7px; margin: 5px 7px; border-style: solid; border-width: 5px 7px; padding: 5px 7px; height: 5px; width: 7px;"></div>
|
||||
<div style="height: 200vh;"></div>
|
||||
<script>
|
||||
async_test(function (t) {
|
||||
on_event(window, 'load', function () {
|
||||
t.step(function () {
|
||||
window.scrollTo(0, 0);
|
||||
location.hash = 'test';
|
||||
assert_equals(window.scrollY, 10, 'Scroll to the top border edge of #test');
|
||||
});
|
||||
t.done();
|
||||
});
|
||||
}, '');
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -13,16 +13,13 @@
|
|||
clearTimeout(timer);
|
||||
timer = setTimeout(t.step_func(
|
||||
function() {
|
||||
try {
|
||||
assert_array_equals(pages, [4, 2], "Pages opened during history navigation");
|
||||
t.done();
|
||||
} finally {
|
||||
// win.close();
|
||||
}
|
||||
assert_array_equals(pages, [4, 2], "Pages opened during history navigation");
|
||||
t.done();
|
||||
}
|
||||
), 500);
|
||||
}
|
||||
);
|
||||
t.step(function() {win = window.open("history_entry.html&urls=history_entry.html,history_entry.html,traverse_the_history_1-1.html");
|
||||
t.step(function() {win = window.open("history_entry.html?urls=history_entry.html,history_entry.html,traverse_the_history_1-1.html");
|
||||
t.add_cleanup(() => { win.close() });
|
||||
});
|
||||
</script>
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<title></title>
|
||||
<title>document.domain's getter</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script>
|
||||
test(function() {
|
||||
assert_equals(typeof document.domain, "string", "document.domain is a string");
|
||||
assert_not_equals(document.domain, "", "document.domain is not empty");
|
||||
}, "sanity checks");
|
||||
}, "basics");
|
||||
|
||||
test(function() {
|
||||
assert_equals(document.domain, window.location.hostname, "equals location.hostname");
|
||||
|
@ -16,8 +16,18 @@
|
|||
|
||||
test(function() {
|
||||
var doc = new Document();
|
||||
assert_equals(doc.domain, "", "new document has empty domain");
|
||||
}, "new document");
|
||||
assert_equals(doc.domain, window.location.hostname, "equals location.hostname");
|
||||
}, "new Document()");
|
||||
|
||||
async_test(t => {
|
||||
const client = new XMLHttpRequest();
|
||||
client.open("GET", "/common/blank.html");
|
||||
client.responseType = "document"
|
||||
client.send();
|
||||
client.onload = t.step_func_done(() => {
|
||||
assert_equals(client.response.domain, window.location.hostname);
|
||||
});
|
||||
}, "XMLHttpRequest's response document");
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<title></title>
|
||||
<title>document.domain's setter</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/common/get-host-info.sub.js"></script>
|
||||
|
@ -18,12 +18,14 @@
|
|||
var iframe_url = new URL("support/document_domain_setter_iframe.html", document.location);
|
||||
iframe_url.hostname = REMOTE_HOST;
|
||||
iframe.src = iframe_url;
|
||||
|
||||
test(function() {
|
||||
assert_throws("SecurityError", function() { document.domain = SUFFIX_HOST; });
|
||||
assert_throws("SecurityError", function() { document.domain = "." + SUFFIX_HOST; });
|
||||
assert_throws("SecurityError", function() { document.domain = REMOTE_HOST; });
|
||||
assert_throws("SecurityError", function() { document.domain = "example.com"; });
|
||||
}, "failed setting of document.domain");
|
||||
|
||||
async_test(function(t) {
|
||||
iframe.addEventListener("load", t.step_func_done(function() {
|
||||
// Before setting document.domain, the iframe is not
|
||||
|
@ -62,6 +64,12 @@
|
|||
assert_throws("SecurityError", function() { iframe.contentDocument.open(); });
|
||||
}));
|
||||
}, "same-origin-domain iframe");
|
||||
|
||||
test(() => {
|
||||
assert_throws("SecurityError", () => { (new Document).domain = document.domain });
|
||||
assert_throws("SecurityError", () => { document.implementation.createHTMLDocument().domain = document.domain });
|
||||
assert_throws("SecurityError", () => { document.implementation.createDocument(null, "").domain = document.domain });
|
||||
}, "failed setting of document.domain for documents without browsing context");
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
<!doctype html>
|
||||
<title>Sandboxed document.domain</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script>
|
||||
test(() => {
|
||||
assert_throws("SecurityError", () => { document.domain = document.domain });
|
||||
});
|
||||
test(() => {
|
||||
assert_throws("SecurityError", () => { (new Document).domain = document.domain });
|
||||
});
|
||||
test(() => {
|
||||
assert_throws("SecurityError", () => { document.implementation.createHTMLDocument().domain = document.domain });
|
||||
});
|
||||
test(() => {
|
||||
assert_throws("SecurityError", () => { document.implementation.createDocument(null, "").domain = document.domain });
|
||||
});
|
||||
test(() => {
|
||||
assert_throws("SecurityError", () => { document.createElement("template").content.ownerDocument.domain = document.domain });
|
||||
});
|
||||
</script>
|
|
@ -0,0 +1 @@
|
|||
Content-Security-Policy: sandbox allow-scripts allow-same-origin
|
|
@ -8,7 +8,7 @@
|
|||
<script>
|
||||
async_test(function(t) {
|
||||
var img = document.getElementById("brokenurl");
|
||||
img.src = "http://also a broken url";
|
||||
img.src = "http://[";
|
||||
var errorevent = false;
|
||||
|
||||
// The errors should be queued in the event loop, so they should only trigger
|
||||
|
@ -17,7 +17,7 @@ async_test(function(t) {
|
|||
img.addEventListener('loadend', t.step_func_done(function() {
|
||||
assert_true(errorevent, "error event fired");
|
||||
}));
|
||||
}, 'src="http://also a broken url"');
|
||||
}, 'src="http://["');
|
||||
|
||||
async_test(function(t) {
|
||||
var img = document.getElementById("emptysrc");
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content of this file was automatically extracted from the Web Background Synchronization spec.
|
||||
// See https://wicg.github.io/BackgroundSync/spec/
|
||||
// Content of this file was automatically extracted from the
|
||||
// "Web Background Synchronization" spec.
|
||||
// See: https://wicg.github.io/BackgroundSync/spec/
|
||||
|
||||
partial interface ServiceWorkerRegistration {
|
||||
readonly attribute SyncManager sync;
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content of this file was automatically extracted from the
|
||||
// "Accelerometer" spec.
|
||||
// See: https://w3c.github.io/accelerometer/
|
||||
|
||||
[Constructor(optional AccelerometerSensorOptions options), SecureContext,
|
||||
Exposed=Window]
|
||||
interface Accelerometer : Sensor {
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content of this file was automatically extracted from the
|
||||
// "Ambient Light Sensor" spec.
|
||||
// See: https://w3c.github.io/ambient-light/
|
||||
|
||||
[Constructor(optional SensorOptions sensorOptions), SecureContext, Exposed=Window]
|
||||
interface AmbientLightSensor : Sensor {
|
||||
readonly attribute double? illuminance;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content of this file was automatically extracted from the budget-api spec.
|
||||
// See https://wicg.github.io/budget-api/
|
||||
// Content of this file was automatically extracted from the
|
||||
// "Web Budget API" spec.
|
||||
// See: https://wicg.github.io/budget-api/
|
||||
|
||||
[Exposed=Window]
|
||||
partial interface Navigator {
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content of this file was automatically extracted from the
|
||||
// "Clipboard API and events" spec.
|
||||
// See: https://w3c.github.io/clipboard-apis/
|
||||
|
||||
dictionary ClipboardEventInit : EventInit {
|
||||
DataTransfer? clipboardData = null;
|
||||
};
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content of this file was automatically extracted from the compat spec.
|
||||
// See https://compat.spec.whatwg.org/
|
||||
// Content of this file was automatically extracted from the
|
||||
// "Compatibility Standard" spec.
|
||||
// See: https://compat.spec.whatwg.org/
|
||||
|
||||
partial interface Window {
|
||||
readonly attribute short orientation;
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content of this file was automatically extracted from the
|
||||
// "CSS Font Loading Module Level 3" spec.
|
||||
// See: https://drafts.csswg.org/css-font-loading/
|
||||
|
||||
typedef (ArrayBuffer or ArrayBufferView) BinaryData;
|
||||
|
||||
dictionary FontFaceDescriptors {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content of this file was automatically extracted from the File and Directory Entries API spec.
|
||||
// See https://wicg.github.io/entries-api/
|
||||
// Content of this file was automatically extracted from the
|
||||
// "File and Directory Entries API" spec.
|
||||
// See: https://wicg.github.io/entries-api/
|
||||
|
||||
partial interface File {
|
||||
readonly attribute USVString webkitRelativePath;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content of this file was automatically extracted from the Feature Policy spec.
|
||||
// See https://wicg.github.io/feature-policy/
|
||||
// Content of this file was automatically extracted from the
|
||||
// "Feature Policy" spec.
|
||||
// See: https://wicg.github.io/feature-policy/
|
||||
|
||||
partial interface HTMLIFrameElement {
|
||||
[CEReactions] attribute DOMString allow;
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content of this file was automatically extracted from the
|
||||
// "Fetch Standard" spec.
|
||||
// See: https://fetch.spec.whatwg.org/
|
||||
|
||||
typedef (sequence<sequence<ByteString>> or record<ByteString, ByteString>) HeadersInit;
|
||||
|
||||
[Constructor(optional HeadersInit init),
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content of this file was automatically extracted from the
|
||||
// "Fullscreen API Standard" spec.
|
||||
// See: https://fullscreen.spec.whatwg.org/
|
||||
|
||||
partial interface Element {
|
||||
Promise<void> requestFullscreen();
|
||||
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content of this file was automatically extracted from the
|
||||
// "Geolocation Sensor" spec.
|
||||
// See: https://wicg.github.io/geolocation-sensor/
|
||||
|
||||
[Constructor(optional GeolocationSensorOptions options), SecureContext, Exposed=Window]
|
||||
interface GeolocationSensor : Sensor {
|
||||
static Promise<GeolocationSensorReading> read(optional ReadOptions readOptions);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content of this file was automatically extracted from the Geometry Interfaces spec.
|
||||
// See https://drafts.fxtf.org/geometry/
|
||||
// Content of this file was automatically extracted from the
|
||||
// "Geometry Interfaces Module Level 1" spec.
|
||||
// See: https://drafts.fxtf.org/geometry/
|
||||
|
||||
[Constructor(optional unrestricted double x = 0, optional unrestricted double y = 0,
|
||||
optional unrestricted double z = 0, optional unrestricted double w = 1),
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content of this file was automatically extracted from the
|
||||
// "Gyroscope" spec.
|
||||
// See: https://w3c.github.io/gyroscope/
|
||||
|
||||
[Constructor(optional GyroscopeSensorOptions sensorOptions), SecureContext, Exposed=Window]
|
||||
interface Gyroscope : Sensor {
|
||||
readonly attribute double? x;
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content of this file was automatically extracted from the
|
||||
// "Keyboard Lock" spec.
|
||||
// See: https://w3c.github.io/keyboard-lock/
|
||||
|
||||
partial interface Navigator {
|
||||
[SecureContext, SameObject] readonly attribute Keyboard keyboard;
|
||||
};
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content of this file was automatically extracted from the
|
||||
// "Magnetometer" spec.
|
||||
// See: https://w3c.github.io/magnetometer/
|
||||
|
||||
[Constructor(optional MagnetometerSensorOptions sensorOptions), SecureContext,
|
||||
Exposed=Window]
|
||||
interface Magnetometer : Sensor {
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content of this file was automatically extracted from the
|
||||
// "Proximity Sensor" spec.
|
||||
// See: https://w3c.github.io/proximity/
|
||||
|
||||
[Constructor(optional SensorOptions sensorOptions), SecureContext, Exposed=Window]
|
||||
interface ProximitySensor : Sensor {
|
||||
readonly attribute double? distance;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content of this file was automatically extracted from the Storage spec.
|
||||
// See https://storage.spec.whatwg.org/
|
||||
// Content of this file was automatically extracted from the
|
||||
// "Storage Standard" spec.
|
||||
// See: https://storage.spec.whatwg.org/
|
||||
|
||||
[SecureContext]
|
||||
interface mixin NavigatorStorage {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content of this file was automatically extracted from the UI Events spec.
|
||||
// See https://w3c.github.io/uievents/
|
||||
// Content of this file was automatically extracted from the
|
||||
// "UI Events" spec.
|
||||
// See: https://w3c.github.io/uievents/
|
||||
|
||||
[Constructor(DOMString type, optional UIEventInit eventInitDict), Exposed=Window]
|
||||
interface UIEvent : Event {
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content of this file was automatically extracted from the
|
||||
// "URL Standard" spec.
|
||||
// See: https://url.spec.whatwg.org/
|
||||
|
||||
[Constructor(USVString url, optional USVString base),
|
||||
Exposed=(Window,Worker),
|
||||
LegacyWindowAlias=webkitURL]
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content of this file was automatically extracted from the Web Animations spec.
|
||||
// See https://drafts.csswg.org/web-animations/
|
||||
// Content of this file was automatically extracted from the
|
||||
// "Web Animations" spec.
|
||||
// See: https://w3c.github.io/web-animations/
|
||||
|
||||
[Exposed=Window]
|
||||
interface AnimationTimeline {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content of this file was automatically extracted from the WebVTT spec.
|
||||
// See https://w3c.github.io/webvtt/
|
||||
// Content of this file was automatically extracted from the
|
||||
// "WebVTT: The Web Video Text Tracks Format" spec.
|
||||
// See: https://w3c.github.io/webvtt/
|
||||
|
||||
enum AutoKeyword { "auto" };
|
||||
typedef (double or AutoKeyword) LineAndPositionSetting;
|
||||
|
|
|
@ -144,6 +144,7 @@ SET TIMEOUT: encrypted-media/polyfill/clearkey-polyfill.js
|
|||
SET TIMEOUT: encrypted-media/scripts/playback-temporary-events.js
|
||||
SET TIMEOUT: eventsource/eventsource-close.htm
|
||||
SET TIMEOUT: eventsource/eventsource-request-cancellation.htm
|
||||
SET TIMEOUT: generic-sensor/resources/iframe_sensor_handler.html
|
||||
SET TIMEOUT: html/browsers/browsing-the-web/history-traversal/*
|
||||
SET TIMEOUT: html/browsers/browsing-the-web/navigating-across-documents/*
|
||||
SET TIMEOUT: html/browsers/browsing-the-web/scroll-to-fragid/*
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>Magnetometer iframe test</title>
|
||||
<link rel="author" title="Intel" href="http://www.intel.com">
|
||||
<link rel="help" href="https://www.w3.org/TR/magnetometer/">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/generic-sensor/generic-sensor-tests.js"></script>
|
||||
<script src="/generic-sensor/generic-sensor-iframe-tests.sub.js"></script>
|
||||
<script src="/generic-sensor/generic-sensor-feature-policy-test.sub.js"></script>
|
||||
<div id="log"></div>
|
||||
<script>
|
||||
|
||||
run_generic_sensor_iframe_tests('Magnetometer');
|
||||
run_generic_sensor_iframe_tests('UncalibratedMagnetometer');
|
||||
</script>
|
|
@ -112,10 +112,11 @@ self.onmessage = function(e) {
|
|||
</script>
|
||||
|
||||
<script>
|
||||
function makeWorker(script)
|
||||
{
|
||||
var blob = new Blob([script]);
|
||||
return new Worker(URL.createObjectURL(blob));
|
||||
function makeWorker(test) {
|
||||
var blob = new Blob([document.getElementById("myWorker").textContent]);
|
||||
var worker = new Worker(URL.createObjectURL(blob));
|
||||
worker.onerror = test.unreached_func("error");
|
||||
return worker;
|
||||
}
|
||||
|
||||
function drawCanvas(ctx)
|
||||
|
@ -190,7 +191,7 @@ function compareWithToBlob(t, typeVal, qualityVal, blob2)
|
|||
}
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func(function(msg) {
|
||||
compareWithToBlob(t, "empty", "empty", msg.data);
|
||||
}));
|
||||
|
@ -198,7 +199,7 @@ async_test(function(t) {
|
|||
}, "Test that convertToBlob with default arguments produces correct result in a worker");
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func(function(msg) {
|
||||
compareWithToBlob(t, "empty", 1.0, msg.data);
|
||||
}));
|
||||
|
@ -206,7 +207,7 @@ async_test(function(t) {
|
|||
}, "Test that convertToBlob with default type/1.0 quality produces correct result in a worker");
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func(function(msg) {
|
||||
compareWithToBlob(t, "empty", 0.2, msg.data);
|
||||
}));
|
||||
|
@ -214,7 +215,7 @@ async_test(function(t) {
|
|||
}, "Test that convertToBlob with default type/0.2 quality produces correct result in a worker");
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func(function(msg) {
|
||||
compareWithToBlob(t, "image/png", "empty", msg.data);
|
||||
}));
|
||||
|
@ -222,7 +223,7 @@ async_test(function(t) {
|
|||
}, "Test that convertToBlob with png/default quality produces correct result in a worker");
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func(function(msg) {
|
||||
compareWithToBlob(t, "image/png", 1.0, msg.data);
|
||||
}));
|
||||
|
@ -230,7 +231,7 @@ async_test(function(t) {
|
|||
}, "Test that convertToBlob with png/1.0 quality produces correct result in a worker");
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func(function(msg) {
|
||||
compareWithToBlob(t, "image/png", 0.2, msg.data);
|
||||
}));
|
||||
|
@ -238,7 +239,7 @@ async_test(function(t) {
|
|||
}, "Test that convertToBlob with png/0.2 quality produces correct result in a worker");
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func(function(msg) {
|
||||
compareWithToBlob(t, "image/jpeg", "empty", msg.data);
|
||||
}));
|
||||
|
@ -246,7 +247,7 @@ async_test(function(t) {
|
|||
}, "Test that convertToBlob with jpeg/default quality produces correct result in a worker");
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func(function(msg) {
|
||||
compareWithToBlob(t, "image/jpeg", 1.0, msg.data);
|
||||
}));
|
||||
|
@ -254,7 +255,7 @@ async_test(function(t) {
|
|||
}, "Test that convertToBlob with jpeg/1.0 quality produces correct result in a worker");
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func(function(msg) {
|
||||
compareWithToBlob(t, "image/jpeg", 0.2, msg.data);
|
||||
}));
|
||||
|
@ -262,7 +263,7 @@ async_test(function(t) {
|
|||
}, "Test that convertToBlob with jpeg/0.2 quality produces correct result in a worker");
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func(function(msg) {
|
||||
compareWithToBlob(t, "image/webp", "empty", msg.data);
|
||||
}));
|
||||
|
@ -270,7 +271,7 @@ async_test(function(t) {
|
|||
}, "Test that convertToBlob with webp/default quality produces correct result in a worker");
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func(function(msg) {
|
||||
compareWithToBlob(t, "image/webp", 1.0, msg.data);
|
||||
}));
|
||||
|
@ -278,7 +279,7 @@ async_test(function(t) {
|
|||
}, "Test that convertToBlob with webp/1.0 quality produces correct result in a worker");
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func(function(msg) {
|
||||
compareWithToBlob(t, "image/webp", 0.2, msg.data);
|
||||
}));
|
||||
|
@ -286,7 +287,7 @@ async_test(function(t) {
|
|||
}, "Test that convertToBlob with webp/0.2 quality produces correct result in a worker");
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func_done(function(msg) {
|
||||
if (msg.data == true || msg.data == false)
|
||||
assert_true(msg.data);
|
||||
|
@ -295,7 +296,7 @@ async_test(function(t) {
|
|||
}, "Test that call convertToBlob on a detached OffscreenCanvas throws exception in a worker");
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func_done(function(msg) {
|
||||
if (msg.data == true || msg.data == false)
|
||||
assert_true(msg.data);
|
||||
|
|
|
@ -49,16 +49,18 @@ function verifyPlaceholder(placeholder) {
|
|||
_assertPixel(canvas, 5,5, 0,255,0,255, "5,5", "0,255,0,255");
|
||||
}
|
||||
|
||||
function makeWorker(script) {
|
||||
var blob = new Blob([script]);
|
||||
return new Worker(URL.createObjectURL(blob));
|
||||
function makeWorker(test) {
|
||||
var blob = new Blob([document.getElementById("myWorker").textContent]);
|
||||
var worker = new Worker(URL.createObjectURL(blob));
|
||||
worker.onerror = test.unreached_func("error");
|
||||
return worker;
|
||||
}
|
||||
|
||||
async_test(function(t) {
|
||||
var placeholder = document.createElement('canvas');
|
||||
placeholder.width = placeholder.height = 10;
|
||||
var offscreenCanvas = placeholder.transferControlToOffscreen();
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func_done(function(msg) {
|
||||
assert_true(msg.data);
|
||||
verifyPlaceholder(placeholder);
|
||||
|
@ -67,7 +69,7 @@ async_test(function(t) {
|
|||
}, "Test that calling OffscreenCanvas's commit pushes its contents to its placeholder.");
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func_done(function(msg) {
|
||||
assert_true(msg.data);
|
||||
}));
|
||||
|
|
|
@ -109,10 +109,11 @@ self.onmessage = function(e) {
|
|||
</script>
|
||||
|
||||
<script>
|
||||
function makeWorker(script)
|
||||
{
|
||||
var blob = new Blob([script]);
|
||||
return new Worker(URL.createObjectURL(blob));
|
||||
function makeWorker(test) {
|
||||
var blob = new Blob([document.getElementById("myWorker").textContent]);
|
||||
var worker = new Worker(URL.createObjectURL(blob));
|
||||
worker.onerror = test.unreached_func("error");
|
||||
return worker;
|
||||
}
|
||||
|
||||
function drawImageBitmap(image, x, y)
|
||||
|
@ -126,7 +127,7 @@ function drawImageBitmap(image, x, y)
|
|||
}
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker();
|
||||
worker.addEventListener('message', t.step_func_done(function(msg) {
|
||||
assert_true(msg.data);
|
||||
}));
|
||||
|
@ -134,7 +135,7 @@ async_test(function(t) {
|
|||
}, "Test that transferToImageBitmap returns an ImageBitmap with correct width and height in a worker");
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func_done(function(msg) {
|
||||
var clr = drawImageBitmap(msg.data, 50, 25);
|
||||
assert_array_equals(clr, [0, 255, 0, 255]);
|
||||
|
@ -143,7 +144,7 @@ async_test(function(t) {
|
|||
}, "Test that transferToImageBitmap returns an ImageBitmap with correct color in a worker");
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func_done(function(msg) {
|
||||
var clr = drawImageBitmap(msg.data, 50, 25);
|
||||
assert_array_equals(clr, [0, 0, 0, 0]);
|
||||
|
@ -152,7 +153,7 @@ async_test(function(t) {
|
|||
}, "Test that call transferToImageBitmap twice returns an ImageBitmap with correct color in a worker");
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func_done(function(msg) {
|
||||
var clr = drawImageBitmap(msg.data, 50, 25);
|
||||
assert_array_equals(clr, [0, 0, 0, 255]);
|
||||
|
@ -161,7 +162,7 @@ async_test(function(t) {
|
|||
}, "Test that call transferToImageBitmap twice on a alpha-disabled context returns an ImageBitmap with correct color in a worker");
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func_done(function(msg) {
|
||||
assert_true(msg.data);
|
||||
}));
|
||||
|
@ -169,7 +170,7 @@ async_test(function(t) {
|
|||
}, "Test that transferToImageBitmap won't change context's property in a worker");
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func_done(function(msg) {
|
||||
var clr1 = drawImageBitmap(msg.data, 23, 25);
|
||||
assert_array_equals(clr1, [0, 255, 0, 255]);
|
||||
|
@ -180,7 +181,7 @@ async_test(function(t) {
|
|||
}, "Test that call transferToImageBitmap preserves transform in a worker");
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func_done(function(msg) {
|
||||
if (msg.data == true || msg.data == false)
|
||||
assert_true(msg.data);
|
||||
|
@ -189,7 +190,7 @@ async_test(function(t) {
|
|||
}, "Test that call transferToImageBitmap on a detached OffscreenCanvas throws an exception in a worker");
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func_done(function(msg) {
|
||||
assert_true(msg.data);
|
||||
}));
|
||||
|
|
|
@ -79,14 +79,15 @@ self.onmessage = function(e) {
|
|||
</script>
|
||||
|
||||
<script>
|
||||
function makeWorker(script)
|
||||
{
|
||||
var blob = new Blob([script]);
|
||||
return new Worker(URL.createObjectURL(blob));
|
||||
function makeWorker(test) {
|
||||
var blob = new Blob([document.getElementById("myWorker").textContent]);
|
||||
var worker = new Worker(URL.createObjectURL(blob));
|
||||
worker.onerror = test.unreached_func("error");
|
||||
return worker;
|
||||
}
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func_done(function(msg) {
|
||||
assert_equals(msg.data.width, 10);
|
||||
assert_equals(msg.data.height, 10);
|
||||
|
@ -95,7 +96,7 @@ async_test(function(t) {
|
|||
}, "Test that OffscreenCanvas's size is correct after being transferred from a worker.");
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func_done(function(msg) {
|
||||
assert_true(msg.data);
|
||||
}));
|
||||
|
@ -103,7 +104,7 @@ async_test(function(t) {
|
|||
}, "Test that transfer an OffscreenCanvas that has a 2d context throws exception in a worker.");
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func_done(function(msg) {
|
||||
assert_true(msg.data);
|
||||
}));
|
||||
|
@ -111,7 +112,7 @@ async_test(function(t) {
|
|||
}, "Test that transfer an OffscreenCanvas that has a webgl context throws exception in a worker.");
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func_done(function(msg) {
|
||||
if (msg.data == true || msg.data == false)
|
||||
assert_true(msg.data);
|
||||
|
@ -120,7 +121,7 @@ async_test(function(t) {
|
|||
}, "Test that transfer an OffscreenCanvas twice throws exception in a worker.");
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func_done(function(msg) {
|
||||
if (msg.data == true || msg.data == false)
|
||||
assert_true(msg.data);
|
||||
|
@ -129,7 +130,7 @@ async_test(function(t) {
|
|||
}, "Test that calling getContext('2d') on a detached OffscreenCanvas throws exception in a worker.");
|
||||
|
||||
async_test(function(t) {
|
||||
var worker = makeWorker(document.getElementById("myWorker").textContent);
|
||||
var worker = makeWorker(t);
|
||||
worker.addEventListener('message', t.step_func_done(function(msg) {
|
||||
if (msg.data == true || msg.data == false)
|
||||
assert_true(msg.data);
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>AbsoluteOrientationSensor iframe test</title>
|
||||
<link rel="author" title="Intel" href="http://www.intel.com">
|
||||
<link rel="help" href="https://www.w3.org/TR/orientation-sensor/">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/generic-sensor/generic-sensor-tests.js"></script>
|
||||
<script src="/generic-sensor/generic-sensor-iframe-tests.sub.js"></script>
|
||||
<script src="/generic-sensor/generic-sensor-feature-policy-test.sub.js"></script>
|
||||
<div id="log"></div>
|
||||
<script>
|
||||
|
||||
run_generic_sensor_iframe_tests('AbsoluteOrientationSensor');
|
||||
</script>
|
|
@ -0,0 +1,15 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>RelativeOrientationSensor iframe test</title>
|
||||
<link rel="author" title="Intel" href="http://www.intel.com">
|
||||
<link rel="help" href="https://www.w3.org/TR/orientation-sensor/">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/generic-sensor/generic-sensor-tests.js"></script>
|
||||
<script src="/generic-sensor/generic-sensor-iframe-tests.sub.js"></script>
|
||||
<script src="/generic-sensor/generic-sensor-feature-policy-test.sub.js"></script>
|
||||
<div id="log"></div>
|
||||
<script>
|
||||
|
||||
run_generic_sensor_iframe_tests('RelativeOrientationSensor');
|
||||
</script>
|
|
@ -81,3 +81,10 @@ must include a summary of the expected results as a JSON string within a
|
|||
"type": "complete"
|
||||
}
|
||||
</script>
|
||||
|
||||
`testharness.js` is expected to function consistently in a number of
|
||||
distinct environments. In order to verify this expectation, each functional
|
||||
test may be executed under a number of distinct conditions. These conditions
|
||||
are applied using WPT's "test variants" pattern. The available variants are
|
||||
defined in the `variants.js` file; this file must be included before
|
||||
`testharness.js`. Every test must specify at least one variant.
|
||||
|
|
|
@ -12,6 +12,7 @@ ENC = 'utf8'
|
|||
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
WPT_ROOT = os.path.normpath(os.path.join(HERE, '..', '..'))
|
||||
HARNESS = os.path.join(HERE, 'harness.html')
|
||||
TEST_TYPES = ('functional', 'unit')
|
||||
|
||||
def pytest_addoption(parser):
|
||||
parser.addoption("--binary", action="store", default=None, help="path to browser binary")
|
||||
|
@ -32,12 +33,23 @@ def pytest_configure(config):
|
|||
config.add_cleanup(config.server.stop)
|
||||
config.add_cleanup(config.driver.quit)
|
||||
|
||||
def resolve_uri(context, uri):
|
||||
if uri.startswith('/'):
|
||||
base = WPT_ROOT
|
||||
path = uri[1:]
|
||||
else:
|
||||
base = os.path.dirname(context)
|
||||
path = uri
|
||||
|
||||
return os.path.exists(os.path.join(base, path))
|
||||
|
||||
class HTMLItem(pytest.Item, pytest.Collector):
|
||||
def __init__(self, filename, test_type, parent):
|
||||
self.filename = filename
|
||||
self.type = test_type
|
||||
self.variants = []
|
||||
|
||||
if test_type not in ('functional', 'unit'):
|
||||
if test_type not in TEST_TYPES:
|
||||
raise ValueError('Unrecognized test type: "%s"' % test_type)
|
||||
|
||||
with io.open(filename, encoding=ENC) as f:
|
||||
|
@ -45,20 +57,36 @@ class HTMLItem(pytest.Item, pytest.Collector):
|
|||
|
||||
parsed = html5lib.parse(markup, namespaceHTMLElements=False)
|
||||
name = None
|
||||
includes_variants_script = False
|
||||
self.expected = None
|
||||
|
||||
for element in parsed.getiterator():
|
||||
if not name and element.tag == 'title':
|
||||
name = element.text
|
||||
continue
|
||||
if element.attrib.get('id') == 'expected':
|
||||
self.expected = json.loads(unicode(element.text))
|
||||
if element.tag == 'meta' and element.attrib.get('name') == 'variant':
|
||||
self.variants.append(element.attrib.get('content'))
|
||||
continue
|
||||
if element.tag == 'script':
|
||||
if element.attrib.get('id') == 'expected':
|
||||
self.expected = json.loads(unicode(element.text))
|
||||
|
||||
src = element.attrib.get('src', '')
|
||||
|
||||
if 'variants.js' in src:
|
||||
includes_variants_script = True
|
||||
if not resolve_uri(filename, src):
|
||||
raise ValueError('Could not resolve path "%s" from %s' % (src, filename))
|
||||
|
||||
if not name:
|
||||
raise ValueError('No name found in file: %s' % filename)
|
||||
elif self.type == 'functional' and not self.expected:
|
||||
raise ValueError('Functional tests must specify expected report data')
|
||||
elif self.type == 'functional':
|
||||
if not self.expected:
|
||||
raise ValueError('Functional tests must specify expected report data')
|
||||
if not includes_variants_script:
|
||||
raise ValueError('No variants script found in file: %s' % filename)
|
||||
if len(self.variants) == 0:
|
||||
raise ValueError('No test variants specified in file %s' % filename)
|
||||
elif self.type == 'unit' and self.expected:
|
||||
raise ValueError('Unit tests must not specify expected report data')
|
||||
|
||||
|
@ -95,12 +123,17 @@ class HTMLItem(pytest.Item, pytest.Collector):
|
|||
assert test[u'status_string'] == u'PASS', msg
|
||||
|
||||
def _run_functional_test(self):
|
||||
for variant in self.variants:
|
||||
self._run_functional_test_variant(variant)
|
||||
|
||||
def _run_functional_test_variant(self, variant):
|
||||
driver = self.session.config.driver
|
||||
server = self.session.config.server
|
||||
|
||||
driver.get(server.url(HARNESS))
|
||||
|
||||
actual = driver.execute_async_script('runTest("%s", "foo", arguments[0])' % server.url(str(self.filename)))
|
||||
test_url = server.url(str(self.filename) + variant)
|
||||
actual = driver.execute_async_script('runTest("%s", "foo", arguments[0])' % test_url)
|
||||
|
||||
# Test object ordering is not guaranteed. This weak assertion verifies
|
||||
# that the indices are unique and sequential
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="variant" content="">
|
||||
<meta name="variant" content="?keep-promise">
|
||||
<title>Test#add_cleanup</title>
|
||||
<script src="../../variants.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="variant" content="?keep-promise">
|
||||
<title>Test#add_cleanup reported count</title>
|
||||
<script src="../../variants.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="variant" content="">
|
||||
<meta name="variant" content="?keep-promise">
|
||||
<title>Test#add_cleanup: error</title>
|
||||
<script src="../../variants.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="variant" content="">
|
||||
<meta name="variant" content="?keep-promise">
|
||||
<title>Test#add_cleanup: multiple functions with one in error</title>
|
||||
<script src="../../variants.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="variant" content="">
|
||||
<meta name="variant" content="?keep-promise">
|
||||
<title>Sample HTML5 API Tests</title>
|
||||
<script src="../../variants.js"></script>
|
||||
<meta name="timeout" content="6000">
|
||||
</head>
|
||||
<body onload="load_test_attr.done()">
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="variant" content="">
|
||||
<meta name="variant" content="?keep-promise">
|
||||
<title>Sample HTML5 API Tests</title>
|
||||
<script src="../../variants.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Sample HTML5 API Tests</h1>
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="variant" content="">
|
||||
<meta name="variant" content="?keep-promise">
|
||||
<title>Sample HTML5 API Tests</title>
|
||||
<script src="../../variants.js"></script>
|
||||
</head>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="variant" content="?keep-promise">
|
||||
<title>Test#force_timeout</title>
|
||||
<script src="../../variants.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Test#force_timeout</h1>
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="variant" content="">
|
||||
<meta name="variant" content="?keep-promise">
|
||||
<title>Sample for using generate_tests to create a series of tests that share the same callback.</title>
|
||||
<script src="../../variants.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
|
|
|
@ -3,7 +3,10 @@
|
|||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="variant" content="">
|
||||
<meta name="variant" content="?keep-promise">
|
||||
<title>idlharness: Partial dictionary</title>
|
||||
<script src="/resources/test/variants.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/WebIDLParser.js"></script>
|
||||
|
|
|
@ -2,7 +2,10 @@
|
|||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="variant" content="">
|
||||
<meta name="variant" content="?keep-promise">
|
||||
<title>idlharness: Immutable prototypes</title>
|
||||
<script src="../../../../variants.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/WebIDLParser.js"></script>
|
||||
|
|
|
@ -3,7 +3,10 @@
|
|||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="variant" content="">
|
||||
<meta name="variant" content="?keep-promise">
|
||||
<title>idlharness: Partail interface</title>
|
||||
<script src="/resources/test/variants.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/WebIDLParser.js"></script>
|
||||
|
|
|
@ -2,7 +2,10 @@
|
|||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="variant" content="">
|
||||
<meta name="variant" content="?keep-promise">
|
||||
<title>idlharness: Primary interface</title>
|
||||
<script src="../../../../variants.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/WebIDLParser.js"></script>
|
||||
|
|
|
@ -2,7 +2,10 @@
|
|||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="variant" content="">
|
||||
<meta name="variant" content="?keep-promise">
|
||||
<title>IdlInterface.prototype.test_to_json_operation()</title>
|
||||
<script src="../../../../variants.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/WebIDLParser.js"></script>
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="variant" content="">
|
||||
<meta name="variant" content="?keep-promise">
|
||||
<title>Example with iframe that notifies containing document via callbacks</title>
|
||||
<script src="../../variants.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="variant" content="">
|
||||
<meta name="variant" content="?keep-promise">
|
||||
<title>Example with iframe that consolidates errors via fetch_tests_from_window</title>
|
||||
<script src="../../variants.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script>
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="variant" content="">
|
||||
<meta name="variant" content="?keep-promise">
|
||||
<title>Example with iframe that consolidates tests via fetch_tests_from_window</title>
|
||||
<script src="../../variants.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script>
|
||||
|
@ -16,7 +19,7 @@ tests from an <tt>iframe</tt> into the primary document.</p>
|
|||
executing</p>
|
||||
<div id="log"></div>
|
||||
|
||||
<iframe id="childContext" src="promise-async.html" style="display:none"></iframe>
|
||||
<iframe id="childContext" src="promise-async.html?keep-promise" style="display:none"></iframe>
|
||||
<!-- promise-async.html has async tests with promises -->
|
||||
|
||||
<script>
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="variant" content="">
|
||||
<meta name="variant" content="?keep-promise">
|
||||
<title>Example with iframe that notifies containing document via cross document messaging</title>
|
||||
<script src="../../variants.js"></script>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="variant" content="">
|
||||
<meta name="variant" content="?keep-promise">
|
||||
<title>Ordering</title>
|
||||
<script src="../../variants.js"></script>
|
||||
<meta name="timeout" content="6000">
|
||||
</head>
|
||||
<body>
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="variant" content="?keep-promise">
|
||||
<title>Async Tests and Promises</title>
|
||||
<script src="../../variants.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Async Tests and Promises</h1>
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue