Auto merge of #23871 - servo-wpt-sync:wpt_update_27-07-2019, r=servo-wpt-sync

Sync WPT with upstream (27-07-2019)

Automated downstream sync of changes from upstream as of 27-07-2019.
[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/23871)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2019-07-27 14:41:35 -04:00 committed by GitHub
commit b52bfbe68a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
47 changed files with 888 additions and 163 deletions

View file

@ -14,6 +14,9 @@
[Revoke blob URL after creating Request, will fetch]
expected: FAIL
[Revoke blob URL after calling fetch, fetch should succeed]
expected: FAIL
[url-with-fetch.any.html]
[Untitled]

View file

@ -178473,6 +178473,30 @@
{}
]
],
"css/css-writing-modes/wm-propagation-001.html": [
[
"css/css-writing-modes/wm-propagation-001.html",
[
[
"/css/css-writing-modes/wm-propagation-001-ref.html",
"=="
]
],
{}
]
],
"css/css-writing-modes/wm-propagation-002.html": [
[
"css/css-writing-modes/wm-propagation-002.html",
[
[
"/css/css-writing-modes/wm-propagation-002-ref.html",
"=="
]
],
{}
]
],
"css/css-writing-modes/wm-propagation-body-006.xht": [
[
"css/css-writing-modes/wm-propagation-body-006.xht",
@ -259062,6 +259086,12 @@
"css/css-writing-modes/vertical-alignment-vrl-026-ref.xht": [
[]
],
"css/css-writing-modes/wm-propagation-001-ref.html": [
[]
],
"css/css-writing-modes/wm-propagation-002-ref.html": [
[]
],
"css/css-writing-modes/wm-propagation-body-003-ref.xht": [
[]
],
@ -273582,6 +273612,9 @@
"mathml/support/feature-detection.js": [
[]
],
"mathml/support/mathml-fragments.js": [
[]
],
"mathml/tools/axisheight.py": [
[]
],
@ -308588,6 +308621,12 @@
{}
]
],
"cookies/cookie-enabled-noncookie-frame.html": [
[
"cookies/cookie-enabled-noncookie-frame.html",
{}
]
],
"cookies/http-state/attribute-tests.html": [
[
"cookies/http-state/attribute-tests.html",
@ -329144,6 +329183,12 @@
{}
]
],
"dom/nodes/remove-and-adopt-crash.html": [
[
"dom/nodes/remove-and-adopt-crash.html",
{}
]
],
"dom/nodes/remove-unscopable.html": [
[
"dom/nodes/remove-unscopable.html",
@ -360783,6 +360828,12 @@
{}
]
],
"largest-contentful-paint/image-TAO.sub.html": [
[
"largest-contentful-paint/image-TAO.sub.html",
{}
]
],
"largest-contentful-paint/image-src-change.html": [
[
"largest-contentful-paint/image-src-change.html",
@ -361283,6 +361334,18 @@
{}
]
],
"mathml/relations/css-styling/attribute-mapping-001.html": [
[
"mathml/relations/css-styling/attribute-mapping-001.html",
{}
]
],
"mathml/relations/css-styling/attribute-mapping-002.html": [
[
"mathml/relations/css-styling/attribute-mapping-002.html",
{}
]
],
"mathml/relations/css-styling/displaystyle-1.html": [
[
"mathml/relations/css-styling/displaystyle-1.html",
@ -391357,11 +391420,15 @@
{}
]
],
"shape-detection/idlharness.any.js": [
"shape-detection/idlharness.https.any.js": [
[
"shape-detection/idlharness.any.html",
"shape-detection/idlharness.https.any.html",
{
"script_metadata": [
[
"global",
"window,worker"
],
[
"script",
"/resources/WebIDLParser.js"
@ -391378,9 +391445,59 @@
}
],
[
"shape-detection/idlharness.any.worker.html",
"shape-detection/idlharness.https.any.serviceworker.html",
{
"script_metadata": [
[
"global",
"window,worker"
],
[
"script",
"/resources/WebIDLParser.js"
],
[
"script",
"/resources/idlharness.js"
],
[
"script",
"/shape-detection/resources/shapedetection-helpers.js"
]
]
}
],
[
"shape-detection/idlharness.https.any.sharedworker.html",
{
"script_metadata": [
[
"global",
"window,worker"
],
[
"script",
"/resources/WebIDLParser.js"
],
[
"script",
"/resources/idlharness.js"
],
[
"script",
"/shape-detection/resources/shapedetection-helpers.js"
]
]
}
],
[
"shape-detection/idlharness.https.any.worker.html",
{
"script_metadata": [
[
"global",
"window,worker"
],
[
"script",
"/resources/WebIDLParser.js"
@ -469914,6 +470031,10 @@
"ed86aebf1837646e2808619e446d03bfe5b86000",
"support"
],
"cookies/cookie-enabled-noncookie-frame.html": [
"539d715ebd5344de4cf02b6485462b31bc167525",
"testharness"
],
"cookies/http-state/attribute-tests.html": [
"8cb820564f455ea545ce0124bb477a211141bc5d",
"testharness"
@ -593890,6 +594011,22 @@
"35560e940b3abdad4e67f92e173798f634b00785",
"reftest"
],
"css/css-writing-modes/wm-propagation-001-ref.html": [
"2e8df84f21ef494f99f356b056396c7d6d39d940",
"support"
],
"css/css-writing-modes/wm-propagation-001.html": [
"d313cacf38dac06ec5be6377a7cc9055dc4e2d07",
"reftest"
],
"css/css-writing-modes/wm-propagation-002-ref.html": [
"cd692dbffdf397bf362cd17602131a506ae6f75a",
"support"
],
"css/css-writing-modes/wm-propagation-002.html": [
"42f5b1b3fdc903d9f6812bcab81866e6029eee69",
"reftest"
],
"css/css-writing-modes/wm-propagation-body-003-ref.xht": [
"1f83fdaea6ef98786ce7c9769dcb4cd8dd4750a5",
"support"
@ -610746,6 +610883,10 @@
"7eb1baf15f05f95545a563fe216eac0655c38a74",
"support"
],
"dom/nodes/remove-and-adopt-crash.html": [
"d37015ec9f923bfc74319631723defa0b222654d",
"testharness"
],
"dom/nodes/remove-unscopable.html": [
"0238b0fa97a40dd9e5058d4153d1483553552033",
"testharness"
@ -611731,7 +611872,7 @@
"testharness"
],
"element-timing/image-TAO.sub.html": [
"032ae6b12198b76107ab3dfcc2ab3b7f92b13c00",
"0906b361394ae74cef3f8f2720844a7365ea5926",
"testharness"
],
"element-timing/image-carousel.html": [
@ -611827,7 +611968,7 @@
"testharness"
],
"element-timing/resources/TAOImage.py": [
"1e0afb3827898d4aad7d29ce5649ac00948ff492",
"6969166c67ce367b5c35626d5695d543f60bb20f",
"support"
],
"element-timing/resources/circle.svg": [
@ -638915,7 +639056,7 @@
"support"
],
"interfaces/shape-detection-api.idl": [
"72fce2001cad5a465440ef996150e38ddee609cf",
"83b7f893552e8f290f677e63547b2c133abf1404",
"support"
],
"interfaces/speech-api.idl": [
@ -639515,11 +639656,11 @@
"testharness"
],
"largest-contentful-paint/contracted-image.html": [
"7dc9e7a899d4d81074e842396b494a733668e278",
"e099a5e42f6d3fd7982a7e298c53b860258f8c70",
"testharness"
],
"largest-contentful-paint/cross-origin-image.sub.html": [
"88775b861a6b98b1af0fb5163222a1025a6df02e",
"7669d4647802f54f4d04b7b7a6b0a9ccc19b9f11",
"testharness"
],
"largest-contentful-paint/element-only-when-fully-active.html": [
@ -639527,19 +639668,23 @@
"testharness"
],
"largest-contentful-paint/expanded-image.html": [
"766b61d013da2cefddb9e35398648d4fa2a2bded",
"9f64189eda60bc74b41d2526e577dcd0e0cf88d2",
"testharness"
],
"largest-contentful-paint/idlharness.html": [
"273fef80ce2d855075781512a9a8ab0a736af420",
"testharness"
],
"largest-contentful-paint/image-TAO.sub.html": [
"9409fd8fc05c338dc74a3c7bf8fe94d356679633",
"testharness"
],
"largest-contentful-paint/image-src-change.html": [
"3e083625bdc1812a2c344b8eefaaa10d3b31e623",
"84a49f7ea2220c43c083f91057763ae161035532",
"testharness"
],
"largest-contentful-paint/loadTime-after-appendChild.html": [
"fb0eddb220ec660d529a43b112c576bf146a87e8",
"43ec9f6085d605098faeddce311b5ccbc626b073",
"testharness"
],
"largest-contentful-paint/observe-after-untrusted-scroll.html": [
@ -639547,15 +639692,15 @@
"testharness"
],
"largest-contentful-paint/observe-image.html": [
"16b3502eb340cbce179bf440c245cafafe4beea4",
"a9556ebaa60d04c154c8043fe7c48fbd7ec38700",
"testharness"
],
"largest-contentful-paint/observe-text.html": [
"2cf1344f2557d5bddd22eaf4ae4fed99d89267a1",
"a2a376fde335cb2b9e05c8923998bfc15c2695f1",
"testharness"
],
"largest-contentful-paint/repeated-image.html": [
"94406b20d62b417a690ce6a96d909bb29c791081",
"d25d4735c9747cb27bffdd640e1127f9fb9c075c",
"testharness"
],
"largest-contentful-paint/resources/iframe-stores-entry.html": [
@ -640206,6 +640351,14 @@
"3eaf9c8fff483232eb6794b603f270bb86c47d3d",
"testharness"
],
"mathml/relations/css-styling/attribute-mapping-001.html": [
"347b571b1d681640cabec6c0ce7e940e523fa66b",
"testharness"
],
"mathml/relations/css-styling/attribute-mapping-002.html": [
"1a8b7ca16d10ef191276f3dcbbe209eda14111f0",
"testharness"
],
"mathml/relations/css-styling/color-001-ref.html": [
"0efca480eec5a3da684fe79a429982b139b202e4",
"support"
@ -640423,7 +640576,7 @@
"reftest"
],
"mathml/relations/css-styling/padding-border-margin/border-001.html": [
"38922118edd8f22596f388aceab7af63192577b0",
"8efb6a5ab0e6759fccbd9775da700d5065a3fdd7",
"testharness"
],
"mathml/relations/css-styling/padding-border-margin/helper.js": [
@ -640594,6 +640747,10 @@
"50ca926d25ea810177068a5f5de29f39749db7e6",
"support"
],
"mathml/support/mathml-fragments.js": [
"5de537ca42af4a4763c5acf9307d2017214680db",
"support"
],
"mathml/tools/axisheight.py": [
"43827e7031665bdd57ee54e208ea0f875a9a60ec",
"support"
@ -641347,7 +641504,7 @@
"testharness"
],
"mediacapture-image/ImageCapture-MediaTrackSupportedConstraints.https.html": [
"9ec5261b9dc48ea143c60946d72233a9eb5d7261",
"fddeb60d0c24d9ceebd8f9df324467ae1cc32550",
"testharness"
],
"mediacapture-image/ImageCapture-creation.https.html": [
@ -641371,7 +641528,7 @@
"testharness"
],
"mediacapture-image/MediaStreamTrack-applyConstraints-getSettings.html": [
"4900336549f4a92f449233d24abf97f84f055102",
"9d985de66de4a476ddb68802603b212efd7c40b6",
"testharness"
],
"mediacapture-image/MediaStreamTrack-applyConstraints-reject.html": [
@ -641379,7 +641536,7 @@
"testharness"
],
"mediacapture-image/MediaStreamTrack-applyConstraints.html": [
"c87f954c682cb6869040ebc67f6245902cec1267",
"da3de3ec0f90cbad2563e41c9aa228c1297945e6",
"testharness"
],
"mediacapture-image/MediaStreamTrack-getCapabilities-fast.html": [
@ -641387,11 +641544,11 @@
"testharness"
],
"mediacapture-image/MediaStreamTrack-getCapabilities.html": [
"9e34f2389cc4e446767df2aa4991cb43b8c95c7a",
"e7b196f510a0baee4096f58f0fce7d868a977d88",
"testharness"
],
"mediacapture-image/MediaStreamTrack-getConstraints-fast.html": [
"16f869cf119faa7eaa043ff6d65fa31b2998315b",
"3b1e2e0f2ca51e74222b36cb1d98a32a67e2a20b",
"testharness"
],
"mediacapture-image/MediaStreamTrack-getSettings-fast.html": [
@ -641399,7 +641556,7 @@
"testharness"
],
"mediacapture-image/MediaStreamTrack-getSettings.html": [
"8535f298bfab2ebca9dd3b37a0cc4f8538623203",
"a1a864c2445d844c5d6fd88dd48e1f6839ae9528",
"testharness"
],
"mediacapture-image/detached-HTMLCanvasElement.html": [
@ -652683,7 +652840,7 @@
"testharness"
],
"pointerevents/pointerlock/pointerevent_pointermove_in_pointerlock.html": [
"b2251d660e7176627204e4d48dc591033501554e",
"5ad3de354574d4bde5668dfc3dec479fe252a385",
"testharness"
],
"pointerevents/pointerlock/pointerevent_pointermove_on_chorded_mouse_button_when_locked.html": [
@ -663191,7 +663348,7 @@
"support"
],
"resources/chromium/image_capture.mojom.js": [
"50428ffcb80c736c1f63f8a91e0c65ff472ef463",
"f145d7a3402543a18229629da0133dea81dd3755",
"support"
],
"resources/chromium/mock-barcodedetection.js": [
@ -663211,7 +663368,7 @@
"support"
],
"resources/chromium/mock-imagecapture.js": [
"329cbc3a761dc5720b7a67ed09ef68aec6a8bc3d",
"eec414bd032a2dd01f27e18de64df0bde4e4a459",
"support"
],
"resources/chromium/mojo_bindings.js": [
@ -668038,12 +668195,12 @@
"52540271d27ecf76cfe68ca0502630eac8c5d0a3",
"testharness"
],
"shape-detection/idlharness.any.js": [
"dab7de99d2d1f15ed72f562a0fb7fbfb3367eeac",
"shape-detection/idlharness.https.any.js": [
"8886e356baa94b4a0a3b320efd3d14405efb4189",
"testharness"
],
"shape-detection/resources/shapedetection-helpers.js": [
"91d36658aab0bf9435cfc9d283be45ef1292e2ed",
"de1e681de9fb8520d97381b3e6a844bcfc84b1f2",
"support"
],
"shape-detection/shapedetection-cross-origin.sub.html": [
@ -690183,7 +690340,7 @@
"support"
],
"webxr/resources/webxr_util.js": [
"022aca8c93e232f00c2d76de5580231af59ff487",
"f8c7f0f81c7014dad1f5292836f3ee208a5b6830",
"support"
],
"webxr/webGLCanvasContext_create_xrcompatible.https.html": [

View file

@ -0,0 +1,4 @@
[remove-and-adopt-crash.html]
[Check that removing a node and then adopting its parent into a different window/document doesn't crash.]
expected: FAIL

View file

@ -312,9 +312,6 @@
[<iframe>: separate response Content-Type: */* text/html]
expected: FAIL
[<iframe>: combined response Content-Type: text/html */*]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL
@ -324,12 +321,15 @@
[<iframe>: combined response Content-Type: */* text/html]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" text/plain]
[<iframe>: separate response Content-Type: text/plain */*]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
expected: FAIL

View file

@ -56,6 +56,6 @@
[separate text/javascript x/x]
expected: FAIL
[separate text/javascript;charset=windows-1252 text/javascript]
[separate text/javascript;charset=windows-1252 error text/javascript]
expected: FAIL

View file

@ -11,9 +11,6 @@
[X-Content-Type-Options%3A%20nosniff%0C]
expected: FAIL
[X-Content-Type-Options%3A%20'NosniFF']
expected: FAIL
[X-Content-Type-Options%3A%0D%0AX-Content-Type-Options%3A%20nosniff]
[X-Content-Type-Options%3A%20%2Cnosniff]
expected: FAIL

View file

@ -0,0 +1,4 @@
[traverse_the_history_1.html]
[Multiple history traversals from the same task]
expected: FAIL

View file

@ -0,0 +1,4 @@
[traverse_the_history_2.html]
[Multiple history traversals, last would be aborted]
expected: FAIL

View file

@ -1,4 +1,5 @@
[creating_browsing_context_test_01.html]
expected: TIMEOUT
[first argument: absolute url]
expected: FAIL
expected: TIMEOUT

View file

@ -1,4 +0,0 @@
[DOMContentLoaded-defer.html]
[The end: DOMContentLoaded and defer scripts]
expected: FAIL

View file

@ -1,5 +1,5 @@
[ignore-opens-during-unload.window.html]
expected: TIMEOUT
expected: CRASH
[ignore-opens-during-unload]
expected: FAIL

View file

@ -1,5 +1,4 @@
[realtimeanalyser-fft-scaling.html]
expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL

View file

@ -134,3 +134,9 @@
[X SNR (-195.93871551689728 dB) is not greater than or equal to 65.737. Got -195.93871551689728.]
expected: FAIL
[X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[30\]\t9.4836157560348511e-1\t9.5236867666244507e-1\t4.0071010589599609e-3\t4.2075103446311962e-3\t3.8985999999999999e-3\n\t[31\]\t9.2646563053131104e-1\t9.3139332532882690e-1\t4.9276947975158691e-3\t5.2906700783754857e-3\t3.8985999999999999e-3\n\t[32\]\t9.0087991952896118e-1\t9.0675884485244751e-1\t5.8789253234863281e-3\t6.4834496590358351e-3\t3.8985999999999999e-3\n\t[33\]\t8.7170630693435669e-1\t8.7856203317642212e-1\t6.8557262420654297e-3\t7.8033490899654511e-3\t3.8985999999999999e-3\n\t[34\]\t8.3906102180480957e-1\t8.4691369533538818e-1\t7.8526735305786133e-3\t9.2721059699818163e-3\t3.8985999999999999e-3\n\t...and 31037 more errors.\n\tMax AbsError of 3.5199477452039719e+2 at index of 39267.\n\t[39267\]\t-3.5297753906250000e+2\t-9.8276454210281372e-1\t3.5199477452039719e+2\t3.5816796337323757e+2\t3.8985999999999999e-3\n\tMax RelError of 3.5816796337323757e+2 at index of 39267.\n\t[39267\]\t-3.5297753906250000e+2\t-9.8276454210281372e-1\t3.5199477452039719e+2\t3.5816796337323757e+2\t3.8985999999999999e-3\n]
expected: FAIL
[X SNR (-7.533841891306955 dB) is not greater than or equal to 65.737. Got -7.533841891306955.]
expected: FAIL

View file

@ -0,0 +1,31 @@
<!DOCTYPE html>
<head>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<script>
var t = async_test("navigator.cookieEnabled behavior on frames without cookie access");
window.onmessage = function(ev) {
// Surprisingly, the legacy behavior here is to return true; this actually
// does match the spec definition since false is supposed to be returned
// when a document.cookie write is ignored --- and here it would throw
// a security exception, not be ignored.
assert_equals(ev.data, true);
t.done();
}
t.step(function() {
var iframe = document.createElement("iframe");
iframe.sandbox = "allow-scripts";
iframe.srcdoc = "<scr" + "ipt>" +
"window.onmessage = function() {" +
" parent.postMessage(navigator.cookieEnabled, '*'); " +
"}</scr" + "ipt>";
iframe.onload = function() {
iframe.contentWindow.postMessage({}, "*");
}
document.body.appendChild(iframe);
});
</script>
</body>

View file

@ -0,0 +1,22 @@
<html>
<meta chartset=utf-8>
<title>Test Reference</title>
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
<style>
html {
writing-mode: vertical-rl;
}
body {
writing-mode: vertical-rl;
width: 0; height: 0;
}
html::before {
content: "This text must be vertical.";
}
html::after {
content: "This text must be horizontal.";
display: block;
writing-mode: horizontal-tb;
}
</style>
<body></body>

View file

@ -0,0 +1,30 @@
<html>
<meta chartset=utf-8>
<title>CSS-Writing Modes Test: propagation of the writing-mode property from body to root</title>
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
<link rel=help href="https://drafts.csswg.org/css-writing-modes-3/#principal-flow">
<link rel="match" href="wm-propagation-001-ref.html">
<meta name=assert content="the writing mode of the body must be propagated to the root, but the computed value must not change.">
<style>
html {
writing-mode: horizontal-tb;
}
body {
writing-mode: vertical-rl;
width: 0; height: 0;
}
html::before {
content: "This text must be vertical.";
/* This is inline content of the root,
and should therefore be vertical,
as the root's used value is vertical */
}
html::after {
content: "This text must be horizontal.";
display: block;
/* This is a block level element,
with it's own writing mode inherited from the root,
horizontal since the root's computed value should be horizontal*/
}
</style>
<body></body>

View file

@ -0,0 +1,21 @@
<html>
<meta chartset=utf-8>
<title>Test reference</title>
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
<style>
html {
direction: rtl;
}
body {
height: 0;
}
html::before {
content: "This text must be on the right";
}
html::after {
content: "This text must be on the left";
display: block;
direction: ltr;
}
</style>
<body></body>

View file

@ -0,0 +1,21 @@
<html>
<meta chartset=utf-8>
<title>CSS-Writing Modes Test: propagation of the direction property from body to root</title>
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
<link rel=help href="https://drafts.csswg.org/css-writing-modes-3/#principal-flow">
<link rel="match" href="wm-propagation-002-ref.html">
<meta name=assert content="the 'direction' of the body must be propagated to the root, but the computed value must not change.">
<style>
body {
direction: rtl;
height: 0;
}
html::before {
content: "This text must be on the right";
}
html::after {
content: "This text must be on the left";
display: block;
}
</style>
<body></body>

View file

@ -0,0 +1,18 @@
<!doctype html>
<title>Test for a Chrome crash when adopting a node into another document</title>
<link rel="help" href="https://crbug.com/981384">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="d1"></div>
<div id="d2"></div>
<script>
test(() => {
d1.appendChild(document.createElement("iframe"));
d2.remove();
const adopted_div = d1;
const popup = window.open();
assert_equals(adopted_div.ownerDocument, document);
popup.document.body.appendChild(document.body);
assert_equals(adopted_div.ownerDocument, popup.document);
}, "Check that removing a node and then adopting its parent into a different window/document doesn't crash.");
</script>

View file

@ -45,7 +45,7 @@
else {
assert_unreached('Should be in one of valid_tao OR invalid_tao');
}
checkNaturalSize(entry, 20, 20);
checkNaturalSize(entry, 100, 100);
if (img_count == total_images)
t.done();
});

View file

@ -41,5 +41,5 @@ def main(request, response):
else:
pass
response.headers.set("Cache-Control", "no-cache, must-revalidate");
image_path = os.path.join(os.path.dirname(__file__), "square20.png");
image_path = os.path.join(os.path.dirname(__file__), "square100.png");
response.content = open(image_path, mode='rb').read();

View file

@ -4,6 +4,7 @@
// Source: Accelerated Shape Detection in Images (https://wicg.github.io/shape-detection-api/)
[Exposed=(Window,Worker),
SecureContext,
Constructor(optional FaceDetectorOptions faceDetectorOptions)]
interface FaceDetector {
Promise<sequence<DetectedFace>> detect(ImageBitmapSource image);
@ -14,7 +15,9 @@ dictionary FaceDetectorOptions {
boolean fastMode;
};
[Serializable]
[Exposed=(Window,Worker),
SecureContext,
Serializable]
interface DetectedFace {
[SameObject] readonly attribute DOMRectReadOnly boundingBox;
[SameObject] readonly attribute FrozenArray<Landmark>? landmarks;
@ -32,6 +35,7 @@ enum LandmarkType {
};
[Exposed=(Window,Worker),
SecureContext,
Constructor(optional BarcodeDetectorOptions barcodeDetectorOptions)]
interface BarcodeDetector {
static Promise<sequence<BarcodeFormat>> getSupportedFormats();
@ -43,7 +47,9 @@ dictionary BarcodeDetectorOptions {
sequence<BarcodeFormat> formats;
};
[Serializable]
[Exposed=(Window,Worker),
SecureContext,
Serializable]
interface DetectedBarcode {
[SameObject] readonly attribute DOMRectReadOnly boundingBox;
[SameObject] readonly attribute DOMString rawValue;

View file

@ -25,7 +25,7 @@
'The rendering timestamp should occur after script starts running.');
assert_greater_than_equal(performance.now(), entry.renderTime,
'The rendering timestamp should occur before the entry is dispatched to the observer.');
assert_equals(entry.startTime, 0);
assert_equals(entry.startTime, entry.renderTime, 'startTime should equal renderTime');
assert_equals(entry.duration, 0);
// black-rectangle.png is 100 x 50. It occupies 50 x 50 so size will be bounded by the displayed size.
assert_equals(entry.size, 2500);

View file

@ -16,7 +16,7 @@
const entry = entryList.getEntries()[0];
assert_equals(entry.entryType, 'largest-contentful-paint');
assert_equals(entry.renderTime, 0, 'The renderTime value should be 0 for a cross origin image.');
assert_equals(entry.startTime, 0);
assert_equals(entry.startTime, entry.loadTime, 'startTime should equal loadTime');
assert_equals(entry.duration, 0);
// blue.png is 133 x 106.
assert_equals(entry.size, 14098);

View file

@ -25,7 +25,7 @@
'The rendering timestamp should occur after script starts running.');
assert_greater_than_equal(performance.now(), entry.renderTime,
'The rendering timestamp should occur before the entry is dispatched to the observer.');
assert_equals(entry.startTime, 0);
assert_equals(entry.startTime, entry.renderTime, 'startTime should equal renderTime');
assert_equals(entry.duration, 0);
// black-rectangle.png is 100 x 50. It occupies 300 x 300 so size will be bounded by the intrinsic size.
assert_equals(entry.size, 5000);

View file

@ -0,0 +1,60 @@
<!DOCTYPE HTML>
<meta charset=utf-8>
<title>Largest Contentful Paint: observe cross origin images with various Timing-Allow-Origin headers</title>
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/element-timing-helpers.js"></script>
<div id='my_div'></div>
<script>
async_test(t => {
if (!window.PerformanceElementTiming) {
assert_unreached("PerformanceElementTiming is not implemented");
}
const remote_img = 'http://{{domains[www]}}:{{ports[http][1]}}/element-timing/resources/TAOImage.py?'
+ 'origin=' + window.location.origin +'&tao=';
const valid_tao = ['wildcard', 'origin', 'multi', 'multi_wildcard', 'match_origin', 'match_wildcard'];
const invalid_tao = ['null', 'space', 'uppercase'];
const div = document.getElementById('my_div');
let img_size = 20;
function addImage(tao) {
const img = document.createElement('img');
img.src = remote_img + tao;
img.id = tao;
img.height = img_size;
img.width = img_size;
// Set increasing size so that largest-contentful-paint captures all of them.
img_size += 1;
div.appendChild(img);
}
let img_count = 0;
const total_images = valid_tao.length + invalid_tao.length;
new PerformanceObserver(
t.step_func(entryList => {
assert_equals(entryList.getEntries().length, 1);
const entry = entryList.getEntries()[0];
assert_greater_than(entry.loadTime, 0);
const tao = entry.id;
if (valid_tao.includes(tao))
assert_greater_than(entry.renderTime, 0, 'Image with valid TAO should have renderTime');
else if (invalid_tao.includes(tao))
assert_equals(entry.renderTime, 0, 'Image with invalid TAO should not have renderTime');
else
assert_unreached('Should be in one of valid_tao OR invalid_tao');
img_count++;
// Process valid TAO images first.
if (img_count < valid_tao.length)
addImage(valid_tao[img_count]);
// Then add invalid TAO images.
else if (img_count < total_images)
addImage(invalid_tao[img_count - valid_tao.length]);
// Once we've seen all the images, end the test.
else
t.done();
})
).observe({type: 'largest-contentful-paint'});
// Add first image, the rest will be added on each observer callback.
addImage(valid_tao[0]);
}, 'Cross-origin elements with valid TAO have correct renderTime, with invalid TAO have renderTime set to 0.');
</script>
</body>

View file

@ -21,7 +21,7 @@
'The rendering timestamp should occur after script starts running.');
assert_greater_than_equal(performance.now(), entry.renderTime,
'The rendering timestamp should occur before the entry is dispatched to the observer.');
assert_equals(entry.startTime, 0);
assert_equals(entry.startTime, entry.renderTime, 'startTime should equal renderTime');
assert_equals(entry.duration, 0);
if (firstCallback) {
// blue.png is 133 x 106.

View file

@ -15,7 +15,7 @@
assert_equals(entryList.getEntries().length, 1);
const entry = entryList.getEntries()[0];
assert_equals(entry.entryType, 'largest-contentful-paint');
assert_equals(entry.startTime, 0);
assert_equals(entry.startTime, entry.renderTime, 'startTime should equal renderTime');
assert_equals(entry.duration, 0);
assert_equals(entry.url, window.location.origin + '/images/black-rectangle.png');
assert_greater_than(entry.renderTime, entry.loadTime,

View file

@ -19,7 +19,7 @@
'The rendering timestamp should occur after script starts running.');
assert_greater_than_equal(performance.now(), entry.renderTime,
'The rendering timestamp should occur before the entry is dispatched to the observer.');
assert_equals(entry.startTime, 0);
assert_equals(entry.startTime, entry.renderTime, 'startTime should equal renderTime');
assert_equals(entry.duration, 0);
// blue.png is 133 x 106.
assert_equals(entry.size, 14098);

View file

@ -22,7 +22,7 @@ p {
assert_equals(entry.entryType, 'largest-contentful-paint');
assert_greater_than_equal(entry.renderTime, beforeRender);
assert_greater_than_equal(performance.now(), entry.renderTime);
assert_equals(entry.startTime, 0);
assert_equals(entry.startTime, entry.renderTime, 'startTime should equal renderTime');
assert_equals(entry.duration, 0);
// Some lower bound: height of at least 12 px.
// Width of at least 100 px.

View file

@ -24,7 +24,7 @@
assert_equals(entryList.getEntries().length, 1);
const entry = entryList.getEntries()[0];
assert_equals(entry.entryType, 'largest-contentful-paint');
assert_equals(entry.startTime, 0);
assert_equals(entry.startTime, entry.renderTime, 'startTime should equal renderTime');
assert_equals(entry.duration, 0);
assert_equals(entry.url, path);
assert_less_than(entry.renderTime, performance.now(),

View file

@ -0,0 +1,65 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Attribute mapping</title>
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#legacy-mathml-style-attributes">
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#attributes-common-to-html-and-mathml-elements">
<meta name="assert" content="Verify that dir, mathcolor, mathbackground and mathsize are mapped to CSS">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/mathml/support/mathml-fragments.js"></script>
<style>
#container {
color: blue;
font-size: 50px;
}
</style>
<script>
setup({ explicit_done: true });
window.addEventListener("load", runTests);
function runTests() {
var container = document.getElementById("container");
for (tag in MathMLFragments) {
container.insertAdjacentHTML("beforeend", `<math>${MathMLFragments[tag]}</math>`);
}
Array.from(document.getElementsByClassName("element")).forEach(element => {
var tag = element.tagName;
var style = window.getComputedStyle(element);
test(function() {
assert_equals(style.getPropertyValue("direction"), "ltr", "no attribute");
element.setAttribute("dir", "rtl");
assert_equals(style.getPropertyValue("direction"), "rtl", "attribute specified");
}, `dir on the ${tag} element is mapped to CSS direction`)
test(function() {
assert_equals(style.getPropertyValue("color"), "rgb(0, 0, 255)", "no attribute");
element.setAttribute("mathcolor", "black");
assert_equals(style.getPropertyValue("color"), "rgb(0, 0, 0)", "attribute specified");
}, `mathcolor on the ${tag} element is mapped to CSS color`);
test(function() {
assert_equals(style.getPropertyValue("background-color"), "rgba(0, 0, 0, 0)", "no attribute");
element.setAttribute("mathbackground", "lightblue");
assert_equals(style.getPropertyValue("background-color"), "rgb(173, 216, 230)", "attribute specified");
}, `mathbackground on the ${tag} element is mapped to CSS background-color`);
test(function() {
assert_equals(style.getPropertyValue("font-size"), "50px", "no attribute");
element.setAttribute("mathsize", "20px");
assert_equals(style.getPropertyValue("font-size"), "20px", "attribute specified");
}, `mathsize on the ${tag} element is mapped to CSS font-size`);
});
done();
}
</script>
</head>
<body>
<div id="log"></div>
<div id="container">
<math class="element"></math>
</div>
</body>
</html>

View file

@ -0,0 +1,53 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Attribute mapping</title>
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-mathvariant-attribute">
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-displaystyle-and-scriptlevel-attributes">
<meta name="assert" content="Verify that mathvariant, scriptlevel, displaystyle are mapped to CSS">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/mathml/support/mathml-fragments.js"></script>
<script>
setup({ explicit_done: true });
window.addEventListener("load", runTests);
function runTests() {
var container = document.getElementById("container");
for (tag in MathMLFragments) {
container.insertAdjacentHTML("beforeend", `<math>${MathMLFragments[tag]}</math>`);
}
Array.from(document.getElementsByClassName("element")).forEach(element => {
var tag = element.tagName;
var style = window.getComputedStyle(element);
test(function() {
assert_equals(style.getPropertyValue("text-transform"), "none", "no attribute");
element.setAttribute("mathvariant", "fraktur");
assert_equals(style.getPropertyValue("text-transform"), "math-fraktur", "attribute specified");
}, `mathvariant on the ${tag} element is mapped to CSS text-transform`)
test(function() {
assert_equals(style.getPropertyValue("math-script-level"), "0", "no attribute");
element.setAttribute("scriptlevel", "10");
assert_equals(style.getPropertyValue("math-script-level"), "10", "attribute specified");
}, `scriptlevel on the ${tag} element is mapped to CSS math-script-level`);
test(function() {
assert_equals(style.getPropertyValue("math-style"), "inline", "no attribute");
element.setAttribute("displaystyle", "true");
assert_equals(style.getPropertyValue("math-style"), "display", "attribute specified");
}, `displaystyle on the ${tag} element is mapped to CSS math-style`);
});
done();
}
</script>
</head>
<body>
<div id="log"></div>
<div id="container">
<math class="element"></math>
</div>
</body>
</html>

View file

@ -57,10 +57,10 @@
<math>
<mrow>
<mrow id="mrow-border"
style="border-left: 20px;
border-right: 30px;
border-top: 40px;
border-bottom: 50px;">
style="border-left: 20px solid transparent;
border-right: 30px solid transparent;
border-top: 40px solid transparent;
border-bottom: 50px solid transparent;">
<mspace width="50px" height="50px"></mspace>
</mrow>
</mrow>
@ -70,7 +70,7 @@
<math>
<mrow>
<mrow id="mrow-border-shorthand"
style="border: 20px;">
style="border: 20px solid transparent;">
<mspace width="50px" height="50px"></mspace>
</mrow>
</mrow>
@ -80,10 +80,10 @@
<math>
<mrow>
<mrow id="mrow-border-logical"
style="border-inline-start: 20px;
border-inline-end: 30px;
border-block-start: 40px;
border-block-end: 50px;">
style="border-inline-start: 20px solid transparent;
border-inline-end: 30px solid transparent;
border-block-start: 40px solid transparent;
border-block-end: 50px solid transparent;">
<mspace width="50px" height="50px"></mspace>
</mrow>
</mrow>
@ -93,8 +93,8 @@
<math>
<mrow>
<mrow id="mrow-border-logical-shorthand"
style="border-inline: 20px;
border-block: 30px;">
style="border-inline: 20px solid transparent;
border-block: 30px solid transparent;">
<mspace width="50px" height="50px"></mspace>
</mrow>
</mrow>

View file

@ -0,0 +1,117 @@
var MathMLFragments = {
"annotation": "\
<semantics>\
<mrow></mrow>\
<annotation class='element text-container'></annotation>\
</semantics>",
"annotation-xml": "\
<semantics>\
<mrow></mrow>\
<annotation-xml class='element text-container foreign-container'></annotation-xml>\
</semantics>",
"maction": "\
<maction class='element' actiontype='statusline'>\
<mrow class='mathml-container'></mrow>\
<mtext class='text-container'></mtext>\
</maction>",
"menclose": "<menclose class='element mathml-container'></menclose>",
"merror": "<merror class='element mathml-container'></merror>",
"mfrac": "\
<mfrac class='element'>\
<mrow class='mathml-container'></mrow>\
<mrow class='mathml-container'></mrow>\
</mfrac>",
"mi": "<mi class='element text-container foreign-container'></mi>",
"mmultiscripts": "\
<mmultiscripts class='element'>\
<mrow class='mathml-container'></mrow>\
<mrow class='mathml-container'></mrow>\
<mrow class='mathml-container'></mrow>\
</mmultiscripts>",
"mn": "<mn class='element text-container foreign-container'></mn>",
"mo": "<mo class='element text-container foreign-container'></mo>",
"mover": "\
<mover class='element'>\
<mrow class='mathml-container'></mrow>\
<mrow class='mathml-container'></mrow>\
</mover>",
"mpadded": "<mpadded class='element mathml-container'></mpadded>",
"mphantom": "<mphantom class='element mathml-container'></mphantom>",
"mprescripts": "\
<mmultiscripts>\
<mrow class='mathml-container'></mrow>\
<mprescripts class='element'/>\
<mrow class='mathml-container'></mrow>\
<mrow class='mathml-container'></mrow>\
</mmultiscripts>",
"mroot": "\
<mroot class='element'>\
<mrow class='mathml-container'></mrow>\
<mrow class='mathml-container'></mrow>\
</mroot>",
"mrow": "<mrow class='element mathml-container'></mrow>",
"ms": "<ms class='element text-container foreign-container'></ms>",
"mspace": "<mspace class='element'></mspace>",
"msqrt": "<msqrt class='element mathml-container'></msqrt>",
"mstyle": "<mstyle class='element mathml-container'></mstyle>",
"msub": "\
<msub class='element mathml-container'>\
<mrow class='mathml-container'></mrow>\
<mrow class='mathml-container'></mrow>\
</msub>",
"msubsup": "\
<msubsup class='element mathml-container'>\
<mrow class='mathml-container'></mrow>\
<mrow class='mathml-container'></mrow>\
<mrow class='mathml-container'></mrow>\
</msubsup>",
"msup": "\
<msup class='element mathml-container'>\
<mrow class='mathml-container'></mrow>\
<mrow class='mathml-container'></mrow>\
</msup>",
"mtable": "\
<mtable class='element'>\
<mtr>\
<mtd class='mathml-container'>\
</mtd>\
</mtr>\
</mtable>",
"mtd": "\
<mtable>\
<mtr>\
<mtd class='element mathml-container'>\
</mtd>\
</mtr>\
</mtable>",
"mtext": "<mtext class='element text-container foreign-container'></mtext>",
"mtr": "\
<mtable>\
<mtr class='element'>\
<mtd class='mathml-container'>\
</mtd>\
</mtr>\
</mtable>",
"munder": "\
<munder class='element'>\
<mrow class='mathml-container'></mrow>\
<mrow class='mathml-container'></mrow>\
</munder>",
"munderover": "\
<munderover class='element'>\
<mrow class='mathml-container'></mrow>\
<mrow class='mathml-container'></mrow>\
<mrow class='mathml-container'></mrow>\
</munderover>",
"none": "\
<mmultiscripts>\
<mrow class='mathml-container'></mrow>\
<none class='element'/>\
<mrow class='mathml-container'></mrow>\
</mmultiscripts>",
"semantics": "\
<semantics class='element>\
<mrow class='mathml-container'></mrow>\
<annotation class='text-container'></annotation>\
</semantics>"
};

View file

@ -20,6 +20,8 @@ test(function() {
assert_true(supported_constraints.saturation);
assert_true(supported_constraints.sharpness);
assert_true(supported_constraints.focusDistance);
assert_true(supported_constraints.pan);
assert_true(supported_constraints.tilt);
assert_true(supported_constraints.zoom);
assert_true(supported_constraints.torch);
}, 'Image Capture supported constraints');

View file

@ -35,6 +35,8 @@ image_capture_test(async t => {
sharpness : 6,
focusDistance : 7,
pan : 8,
tilt : 9,
zoom : 3.141592,
torch : true
@ -89,6 +91,9 @@ image_capture_test(async t => {
assert_equals(constraints.advanced[0].focusDistance, settings.focusDistance,
'focusDistance');
assert_equals(constraints.advanced[0].pan, settings.pan, 'pan');
assert_equals(constraints.advanced[0].tilt, settings.tilt, 'tilt');
assert_equals(constraints.advanced[0].zoom, settings.zoom, 'zoom');
assert_equals(constraints.advanced[0].torch, settings.torch, 'torch');

View file

@ -36,6 +36,8 @@ image_capture_test(async (t, imageCaptureTest) => {
sharpness : 6,
focusDistance : 7,
pan : 8,
tilt : 9,
zoom : 3.141592,
torch : true
@ -109,6 +111,8 @@ image_capture_test(async (t, imageCaptureTest) => {
assert_equals(constraintsDict.focusDistance, theMock.options().focusDistance
,'focusDistance');
assert_equals(constraintsDict.pan, theMock.options().pan, 'pan');
assert_equals(constraintsDict.tilt, theMock.options().tilt, 'tilt');
assert_equals(constraintsDict.torch, theMock.options().torch, 'torch');

View file

@ -141,6 +141,16 @@ image_capture_test(async (t, imageCaptureTest) => {
assert_equals(capabilities.focusDistance.step,
mockCapabilities.focusDistance.step);
assert_true(capabilities.pan instanceof MediaSettingsRange);
assert_equals(capabilities.pan.max, mockCapabilities.pan.max);
assert_equals(capabilities.pan.min, mockCapabilities.pan.min);
assert_equals(capabilities.pan.step, mockCapabilities.pan.step);
assert_true(capabilities.tilt instanceof MediaSettingsRange);
assert_equals(capabilities.tilt.max, mockCapabilities.tilt.max);
assert_equals(capabilities.tilt.min, mockCapabilities.tilt.min);
assert_equals(capabilities.tilt.step, mockCapabilities.tilt.step);
assert_true(capabilities.zoom instanceof MediaSettingsRange);
assert_equals(capabilities.zoom.max, mockCapabilities.zoom.max);
assert_equals(capabilities.zoom.min, mockCapabilities.zoom.min);

View file

@ -21,6 +21,9 @@ const constraints = { whiteBalanceMode : "manual",
sharpness : 6,
focusDistance : 7,
pan : 8,
tilt : 9,
zoom : 3.141592
// TODO: torch https://crbug.com/700607.
};

View file

@ -61,6 +61,9 @@ image_capture_test(async (t, imageCaptureTest) => {
assert_equals(settings.sharpness, mockSettings.sharpness.current);
assert_equals(settings.focusDistance, mockSettings.focusDistance.current);
assert_equals(settings.pan, mockSettings.pan.current);
assert_equals(settings.tilt, mockSettings.tilt.current);
assert_equals(settings.zoom, mockSettings.zoom.current);
assert_equals(settings.torch, mockSettings.torch, 'torch');

View file

@ -27,61 +27,76 @@
<script>
window.name="outerframe";
var test_pointermove = async_test("pointermove event received");
PhaseEnum = {
Start: 0,
Lock1: 1,
Lock2: 2,
Done: 3,
};
function run() {
var target0 = document.getElementById("target0");
var innerframe = document.getElementById('innerframe');
var target1 = innerframe.contentDocument.getElementById('target1');
innerframe.contentWindow.name = "innerframe";
on_event(document, "pointerlockchange", function(event) {
if (document.pointerLockElement == target0) {
on_event(target0, "pointermove", function (event) {
test_pointermove.step(function() {
assert_equals(event.view.name, "outerframe", "View attribute of pointermove should be the target frame.");
}, "View attribute of pointermove should be the target frame.");
document.exitPointerLock();
on_event(target1, "click", function(event) {
target1.requestPointerLock();
});
on_event(innerframe.contentDocument, "pointerlockchange", function(event) {
if (innerframe.contentDocument.pointerLockElement == target1) {
on_event(target1, "pointermove", function (event) {
innerframe_pointermoveReceived = true;
test_pointermove.step(function() {
assert_equals(event.view.name, "innerframe", "View attribute of pointermove should be the target frame.");
}, "View attribute of pointermove should be the target frame.");
innerframe.contentDocument.exitPointerLock();
test_pointermove.done();
});
}
});
});
}
});
phase = PhaseEnum.Start;
on_event(target0, "click", function(event) {
target0.requestPointerLock();
});
var x = innerframe.getBoundingClientRect().x + target1.getBoundingClientRect().x;
var y = innerframe.getBoundingClientRect().y + target1.getBoundingClientRect().y;
// Inject mouse input
new test_driver.Actions()
.pointerMove(5, 5, {origin: target0})
.pointerDown()
.pointerUp()
.pointerMove(100, 300, {origin: target0})
.pointerMove(x+10, y+10)
.pointerDown()
.pointerUp()
.pointerMove(5, 5, {origin: target0})
.send();
on_event(target1, "click", function(event) {
target1.requestPointerLock();
});
on_event(target0, "pointermove", function (event) {
if (phase == PhaseEnum.Lock1) {
assert_equals(document.pointerLockElement, target0);
test_pointermove.step(function() {
assert_equals(event.view.name, "outerframe", "View attribute of pointermove should be the target frame.");
}, "View attribute of pointermove should be the target frame.");
document.exitPointerLock();
// Click the inner frame target to lock.
clickInTarget("mouse", target1);
}
});
on_event(target1, "pointermove", function (event) {
if (phase == PhaseEnum.Lock2) {
assert_equals(innerframe.contentDocument.pointerLockElement, target1);
test_pointermove.step(function() {
assert_equals(event.view.name, "innerframe", "View attribute of pointermove should be the target frame.");
}, "View attribute of pointermove should be the target frame.");
innerframe.contentDocument.exitPointerLock();
test_pointermove.done();
}
});
on_event(document, "pointerlockchange", function(event) {
if (phase == PhaseEnum.Start) {
assert_equals(document.pointerLockElement, target0);
phase++;
// Send moves in main frame target
new test_driver.Actions()
.pointerMove(10, 30, {origin: target0})
.send();
}
});
on_event(innerframe.contentDocument, "pointerlockchange", function(event) {
if (phase == PhaseEnum.Lock1) {
assert_equals(innerframe.contentDocument.pointerLockElement, target1);
phase++;
// Send moves in inner frame target
new test_driver.Actions()
.pointerMove(10, 30, {origin: target0})
.send();
}
});
// Click the outer frame target to lock.
clickInTarget("mouse", target0);
}
</script>
<div id="complete-notice">
</div>

View file

@ -24,6 +24,8 @@
MeteringMode.MANUAL = MeteringMode.NONE + 1;
MeteringMode.SINGLE_SHOT = MeteringMode.MANUAL + 1;
MeteringMode.CONTINUOUS = MeteringMode.SINGLE_SHOT + 1;
MeteringMode.MIN_VALUE = 0,
MeteringMode.MAX_VALUE = 3,
MeteringMode.isKnownEnumValue = function(value) {
switch (value) {
@ -47,6 +49,8 @@
RedEyeReduction.NEVER = 0;
RedEyeReduction.ALWAYS = RedEyeReduction.NEVER + 1;
RedEyeReduction.CONTROLLABLE = RedEyeReduction.ALWAYS + 1;
RedEyeReduction.MIN_VALUE = 0,
RedEyeReduction.MAX_VALUE = 2,
RedEyeReduction.isKnownEnumValue = function(value) {
switch (value) {
@ -69,6 +73,8 @@
FillLightMode.OFF = 0;
FillLightMode.AUTO = FillLightMode.OFF + 1;
FillLightMode.FLASH = FillLightMode.AUTO + 1;
FillLightMode.MIN_VALUE = 0,
FillLightMode.MAX_VALUE = 2,
FillLightMode.isKnownEnumValue = function(value) {
switch (value) {
@ -175,6 +181,8 @@
this.saturation = null;
this.sharpness = null;
this.focusDistance = null;
this.pan = null;
this.tilt = null;
this.zoom = null;
this.redEyeReduction = 0;
this.height = null;
@ -195,7 +203,7 @@
return err;
var kVersionSizes = [
{version: 0, numBytes: 168}
{version: 0, numBytes: 184}
];
err = messageValidator.validateStructVersion(offset, kVersionSizes);
if (err !== validator.validationError.NONE)
@ -298,41 +306,53 @@
return err;
// validate PhotoState.zoom
// validate PhotoState.pan
err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 120, Range, false);
if (err !== validator.validationError.NONE)
return err;
// validate PhotoState.tilt
err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 128, Range, false);
if (err !== validator.validationError.NONE)
return err;
// validate PhotoState.zoom
err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 136, Range, false);
if (err !== validator.validationError.NONE)
return err;
// validate PhotoState.redEyeReduction
err = messageValidator.validateEnum(offset + codec.kStructHeaderSize + 128, RedEyeReduction);
err = messageValidator.validateEnum(offset + codec.kStructHeaderSize + 144, RedEyeReduction);
if (err !== validator.validationError.NONE)
return err;
// validate PhotoState.height
err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 136, Range, false);
err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 152, Range, false);
if (err !== validator.validationError.NONE)
return err;
// validate PhotoState.width
err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 144, Range, false);
err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 160, Range, false);
if (err !== validator.validationError.NONE)
return err;
// validate PhotoState.fillLightMode
err = messageValidator.validateArrayPointer(offset + codec.kStructHeaderSize + 152, 4, new codec.Enum(FillLightMode), false, [0], 0);
err = messageValidator.validateArrayPointer(offset + codec.kStructHeaderSize + 168, 4, new codec.Enum(FillLightMode), false, [0], 0);
if (err !== validator.validationError.NONE)
return err;
return validator.validationError.NONE;
};
PhotoState.encodedSize = codec.kStructHeaderSize + 160;
PhotoState.encodedSize = codec.kStructHeaderSize + 176;
PhotoState.decode = function(decoder) {
var packed;
@ -361,6 +381,8 @@
val.saturation = decoder.decodeStructPointer(Range);
val.sharpness = decoder.decodeStructPointer(Range);
val.focusDistance = decoder.decodeStructPointer(Range);
val.pan = decoder.decodeStructPointer(Range);
val.tilt = decoder.decodeStructPointer(Range);
val.zoom = decoder.decodeStructPointer(Range);
val.redEyeReduction = decoder.decodeStruct(codec.Int32);
decoder.skip(1);
@ -400,6 +422,8 @@
encoder.encodeStructPointer(Range, val.saturation);
encoder.encodeStructPointer(Range, val.sharpness);
encoder.encodeStructPointer(Range, val.focusDistance);
encoder.encodeStructPointer(Range, val.pan);
encoder.encodeStructPointer(Range, val.tilt);
encoder.encodeStructPointer(Range, val.zoom);
encoder.encodeStruct(codec.Int32, val.redEyeReduction);
encoder.skip(1);
@ -483,6 +507,8 @@
this.hasSaturation = false;
this.hasSharpness = false;
this.hasFocusDistance = false;
this.hasPan = false;
this.hasTilt = false;
this.hasZoom = false;
this.hasTorch = false;
this.torch = false;
@ -504,6 +530,8 @@
this.saturation = 0;
this.sharpness = 0;
this.focusDistance = 0;
this.pan = 0;
this.tilt = 0;
this.zoom = 0;
this.fillLightMode = 0;
this.width = 0;
@ -523,7 +551,7 @@
return err;
var kVersionSizes = [
{version: 0, numBytes: 136}
{version: 0, numBytes: 152}
];
err = messageValidator.validateStructVersion(offset, kVersionSizes);
if (err !== validator.validationError.NONE)
@ -575,13 +603,17 @@
// validate PhotoSettings.fillLightMode
err = messageValidator.validateEnum(offset + codec.kStructHeaderSize + 104, FillLightMode);
err = messageValidator.validateEnum(offset + codec.kStructHeaderSize + 120, FillLightMode);
if (err !== validator.validationError.NONE)
return err;
@ -594,7 +626,7 @@
return validator.validationError.NONE;
};
PhotoSettings.encodedSize = codec.kStructHeaderSize + 128;
PhotoSettings.encodedSize = codec.kStructHeaderSize + 144;
PhotoSettings.decode = function(decoder) {
var packed;
@ -615,15 +647,17 @@
val.hasSaturation = (packed >> 1) & 1 ? true : false;
val.hasSharpness = (packed >> 2) & 1 ? true : false;
val.hasFocusDistance = (packed >> 3) & 1 ? true : false;
val.hasZoom = (packed >> 4) & 1 ? true : false;
val.hasTorch = (packed >> 5) & 1 ? true : false;
val.torch = (packed >> 6) & 1 ? true : false;
val.hasFillLightMode = (packed >> 7) & 1 ? true : false;
val.hasPan = (packed >> 4) & 1 ? true : false;
val.hasTilt = (packed >> 5) & 1 ? true : false;
val.hasZoom = (packed >> 6) & 1 ? true : false;
val.hasTorch = (packed >> 7) & 1 ? true : false;
packed = decoder.readUint8();
val.hasWidth = (packed >> 0) & 1 ? true : false;
val.hasHeight = (packed >> 1) & 1 ? true : false;
val.hasRedEyeReduction = (packed >> 2) & 1 ? true : false;
val.redEyeReduction = (packed >> 3) & 1 ? true : false;
val.torch = (packed >> 0) & 1 ? true : false;
val.hasFillLightMode = (packed >> 1) & 1 ? true : false;
val.hasWidth = (packed >> 2) & 1 ? true : false;
val.hasHeight = (packed >> 3) & 1 ? true : false;
val.hasRedEyeReduction = (packed >> 4) & 1 ? true : false;
val.redEyeReduction = (packed >> 5) & 1 ? true : false;
decoder.skip(1);
val.whiteBalanceMode = decoder.decodeStruct(codec.Int32);
val.exposureMode = decoder.decodeStruct(codec.Int32);
@ -638,6 +672,8 @@
val.saturation = decoder.decodeStruct(codec.Double);
val.sharpness = decoder.decodeStruct(codec.Double);
val.focusDistance = decoder.decodeStruct(codec.Double);
val.pan = decoder.decodeStruct(codec.Double);
val.tilt = decoder.decodeStruct(codec.Double);
val.zoom = decoder.decodeStruct(codec.Double);
val.fillLightMode = decoder.decodeStruct(codec.Int32);
decoder.skip(1);
@ -668,16 +704,18 @@
packed |= (val.hasSaturation & 1) << 1
packed |= (val.hasSharpness & 1) << 2
packed |= (val.hasFocusDistance & 1) << 3
packed |= (val.hasZoom & 1) << 4
packed |= (val.hasTorch & 1) << 5
packed |= (val.torch & 1) << 6
packed |= (val.hasFillLightMode & 1) << 7
packed |= (val.hasPan & 1) << 4
packed |= (val.hasTilt & 1) << 5
packed |= (val.hasZoom & 1) << 6
packed |= (val.hasTorch & 1) << 7
encoder.writeUint8(packed);
packed = 0;
packed |= (val.hasWidth & 1) << 0
packed |= (val.hasHeight & 1) << 1
packed |= (val.hasRedEyeReduction & 1) << 2
packed |= (val.redEyeReduction & 1) << 3
packed |= (val.torch & 1) << 0
packed |= (val.hasFillLightMode & 1) << 1
packed |= (val.hasWidth & 1) << 2
packed |= (val.hasHeight & 1) << 3
packed |= (val.hasRedEyeReduction & 1) << 4
packed |= (val.redEyeReduction & 1) << 5
encoder.writeUint8(packed);
encoder.skip(1);
encoder.encodeStruct(codec.Int32, val.whiteBalanceMode);
@ -693,6 +731,8 @@
encoder.encodeStruct(codec.Double, val.saturation);
encoder.encodeStruct(codec.Double, val.sharpness);
encoder.encodeStruct(codec.Double, val.focusDistance);
encoder.encodeStruct(codec.Double, val.pan);
encoder.encodeStruct(codec.Double, val.tilt);
encoder.encodeStruct(codec.Double, val.zoom);
encoder.encodeStruct(codec.Int32, val.fillLightMode);
encoder.skip(1);

View file

@ -91,6 +91,20 @@ var ImageCaptureTest = (() => {
step: 1.0
},
pan: {
min: 0.0,
max: 10.0,
current: 5.0,
step: 2.0
},
tilt: {
min: 0.0,
max: 10.0,
current: 5.0,
step: 2.0
},
zoom: {
min: 0.0,
max: 10.0,
@ -140,6 +154,10 @@ var ImageCaptureTest = (() => {
this.state_.state.height.current = settings.height;
if (settings.hasWidth)
this.state_.state.width.current = settings.width;
if (settings.hasPan)
this.state_.state.pan.current = settings.pan;
if (settings.hasTilt)
this.state_.state.tilt.current = settings.tilt;
if (settings.hasZoom)
this.state_.state.zoom.current = settings.zoom;
if (settings.hasFocusMode)

View file

@ -1,3 +1,4 @@
// META: global=window,worker
// META: script=/resources/WebIDLParser.js
// META: script=/resources/idlharness.js
// META: script=/shape-detection/resources/shapedetection-helpers.js
@ -10,36 +11,45 @@ idl_test(
['shape-detection-api'],
['dom', 'geometry'],
async idl_array => {
let faceDetectionTest, barcodeDetectionTest;
try {
faceDetectionTest =
await initialize_detection_tests("FaceDetectionTest");
barcodeDetectionTest =
await initialize_detection_tests("BarcodeDetectionTest");
const img = createTestImage();
const theImageBitmap = await createImageBitmap(img);
self.faceDetector = new FaceDetector();
const faceDetectionResult = await faceDetector.detect(theImageBitmap);
self.detectedFace = faceDetectionResult[0];
self.barcodeDetector = new BarcodeDetector();
const barcodeDetectionResult =
await barcodeDetector.detect(theImageBitmap);
self.detectedBarcode = barcodeDetectionResult[0];
} catch (e) {
// Surfaced in idlharness.js's test_object below.
} finally {
faceDetectionTest.reset();
barcodeDetectionTest.reset();
}
idl_array.add_objects({
FaceDetector: ['faceDetector'],
DetectedFace: ['detectedFace'],
BarcodeDetector: ['barcodeDetector'],
DetectedBarcode: ['detectedBarcode']
});
let faceDetectionTest;
try {
faceDetectionTest =
await initialize_detection_tests("FaceDetectionTest");
const img = createTestImage();
const theImageBitmap = await createImageBitmap(img);
self.faceDetector = new FaceDetector();
const faceDetectionResult = await faceDetector.detect(theImageBitmap);
self.detectedFace = faceDetectionResult[0];
} catch (e) {
// Surfaced in idlharness.js's test_object.
} finally {
faceDetectionTest && faceDetectionTest.reset();
}
let barcodeDetectionTest;
try {
barcodeDetectionTest =
await initialize_detection_tests("BarcodeDetectionTest");
const img = createTestImage();
const theImageBitmap = await createImageBitmap(img);
self.barcodeDetector = new BarcodeDetector();
const barcodeDetectionResult =
await barcodeDetector.detect(theImageBitmap);
self.detectedBarcode = barcodeDetectionResult[0];
} catch (e) {
// Surface in idlharness.js's test_object.
} finally {
barcodeDetectionTest && barcodeDetectionTest.reset();
}
}
);

View file

@ -23,7 +23,7 @@ let loadChromiumResources = Promise.resolve().then(() => {
'/gen/mojo/public/mojom/base/big_buffer.mojom.js',
'/gen/skia/public/interfaces/image_info.mojom.js',
'/gen/skia/public/interfaces/bitmap.mojom.js',
'/gen/ui/gfx/geometry/mojo/geometry.mojom.js',
'/gen/ui/gfx/geometry/mojom/geometry.mojom.js',
`${prefix}/barcodedetection.mojom.js`,
`${prefix}/barcodedetection_provider.mojom.js`,
`${prefix}/facedetection.mojom.js`,

View file

@ -137,7 +137,7 @@ let loadChromiumResources = Promise.resolve().then(() => {
'/gen/gpu/ipc/common/mailbox_holder.mojom.js',
'/gen/gpu/ipc/common/sync_token.mojom.js',
'/gen/ui/display/mojom/display.mojom.js',
'/gen/ui/gfx/geometry/mojo/geometry.mojom.js',
'/gen/ui/gfx/geometry/mojom/geometry.mojom.js',
'/gen/ui/gfx/mojo/gpu_fence_handle.mojom.js',
'/gen/ui/gfx/mojo/transform.mojom.js',
'/gen/device/vr/public/mojom/vr_service.mojom.js',