Update web-platform-tests to revision 887d08e63a19b14acf3217df77f12c121a792fed

This commit is contained in:
WPT Sync Bot 2019-06-18 10:23:53 +00:00
parent 97ad913dc2
commit a41065a1f4
65 changed files with 1433 additions and 463 deletions

View file

@ -34,6 +34,3 @@
[Revoke blob URL after creating Request, will fetch] [Revoke blob URL after creating Request, will fetch]
expected: FAIL expected: FAIL
[Revoke blob URL after calling fetch, fetch should succeed]
expected: FAIL

View file

@ -76677,6 +76677,18 @@
{} {}
] ]
], ],
"css/CSS2/positioning/abspos-negative-margin-001.html": [
[
"css/CSS2/positioning/abspos-negative-margin-001.html",
[
[
"/css/CSS2/positioning/abspos-negative-margin-001-ref.html",
"=="
]
],
{}
]
],
"css/CSS2/positioning/abspos-overflow-001.xht": [ "css/CSS2/positioning/abspos-overflow-001.xht": [
[ [
"css/CSS2/positioning/abspos-overflow-001.xht", "css/CSS2/positioning/abspos-overflow-001.xht",
@ -201401,6 +201413,42 @@
{} {}
] ]
], ],
"mathml/presentation-markup/operators/mo-movablelimits-default.html": [
[
"mathml/presentation-markup/operators/mo-movablelimits-default.html",
[
[
"/mathml/presentation-markup/operators/mo-movablelimits-default-ref.html",
"=="
]
],
{}
]
],
"mathml/presentation-markup/operators/mo-movablelimits-dynamic.html": [
[
"mathml/presentation-markup/operators/mo-movablelimits-dynamic.html",
[
[
"/mathml/presentation-markup/operators/mo-movablelimits-dynamic-ref.html",
"=="
]
],
{}
]
],
"mathml/presentation-markup/operators/mo-movablelimits.html": [
[
"mathml/presentation-markup/operators/mo-movablelimits.html",
[
[
"/mathml/presentation-markup/operators/mo-movablelimits-ref.html",
"=="
]
],
{}
]
],
"mathml/presentation-markup/operators/mo-paint-lspace-rspace.html": [ "mathml/presentation-markup/operators/mo-paint-lspace-rspace.html": [
[ [
"mathml/presentation-markup/operators/mo-paint-lspace-rspace.html", "mathml/presentation-markup/operators/mo-paint-lspace-rspace.html",
@ -201485,6 +201533,18 @@
{} {}
] ]
], ],
"mathml/relations/css-styling/mathsize-attribute.html": [
[
"mathml/relations/css-styling/mathsize-attribute.html",
[
[
"/mathml/relations/css-styling/mathsize-attribute-ref.html",
"=="
]
],
{}
]
],
"mathml/relations/css-styling/mathvariant-bold-fraktur.html": [ "mathml/relations/css-styling/mathvariant-bold-fraktur.html": [
[ [
"mathml/relations/css-styling/mathvariant-bold-fraktur.html", "mathml/relations/css-styling/mathvariant-bold-fraktur.html",
@ -201857,6 +201917,42 @@
{} {}
] ]
], ],
"quirks/body-fills-html-quirk-float.html": [
[
"quirks/body-fills-html-quirk-float.html",
[
[
"/quirks/body-fills-html-quirk-ref.html",
"=="
]
],
{}
]
],
"quirks/body-fills-html-quirk-inline.html": [
[
"quirks/body-fills-html-quirk-inline.html",
[
[
"/quirks/body-fills-html-quirk-ref.html",
"=="
]
],
{}
]
],
"quirks/body-fills-html-quirk-positioned.html": [
[
"quirks/body-fills-html-quirk-positioned.html",
[
[
"/quirks/body-fills-html-quirk-ref.html",
"=="
]
],
{}
]
],
"quirks/historical/list-item-bullet-size.html": [ "quirks/historical/list-item-bullet-size.html": [
[ [
"quirks/historical/list-item-bullet-size.html", "quirks/historical/list-item-bullet-size.html",
@ -201905,6 +202001,18 @@
{} {}
] ]
], ],
"quirks/table-cell-width-calculation-abspos.html": [
[
"quirks/table-cell-width-calculation-abspos.html",
[
[
"/quirks/reference/table-cell-width-calculation-abspos-ref.html",
"=="
]
],
{}
]
],
"quirks/text-decoration-doesnt-propagate-into-tables/quirks.html": [ "quirks/text-decoration-doesnt-propagate-into-tables/quirks.html": [
[ [
"quirks/text-decoration-doesnt-propagate-into-tables/quirks.html", "quirks/text-decoration-doesnt-propagate-into-tables/quirks.html",
@ -233980,6 +234088,9 @@
"css/CSS2/positioning/abspos-inline-007-ref.xht": [ "css/CSS2/positioning/abspos-inline-007-ref.xht": [
[] []
], ],
"css/CSS2/positioning/abspos-negative-margin-001-ref.html": [
[]
],
"css/CSS2/positioning/abspos-overflow-001-ref.xht": [ "css/CSS2/positioning/abspos-overflow-001-ref.xht": [
[] []
], ],
@ -248050,6 +248161,9 @@
"css/css-lists/add-inline-child-after-marker-001-ref.html": [ "css/css-lists/add-inline-child-after-marker-001-ref.html": [
[] []
], ],
"css/css-lists/change-list-style-type-ref.html": [
[]
],
"css/css-lists/content-property/marker-text-matches-armenian-ref.html": [ "css/css-lists/content-property/marker-text-matches-armenian-ref.html": [
[] []
], ],
@ -270760,6 +270874,15 @@
"mathml/presentation-markup/operators/mo-form-ref.html": [ "mathml/presentation-markup/operators/mo-form-ref.html": [
[] []
], ],
"mathml/presentation-markup/operators/mo-movablelimits-default-ref.html": [
[]
],
"mathml/presentation-markup/operators/mo-movablelimits-dynamic-ref.html": [
[]
],
"mathml/presentation-markup/operators/mo-movablelimits-ref.html": [
[]
],
"mathml/presentation-markup/operators/mo-paint-lspace-rspace-ref.html": [ "mathml/presentation-markup/operators/mo-paint-lspace-rspace-ref.html": [
[] []
], ],
@ -270781,6 +270904,9 @@
"mathml/relations/css-styling/lengths-1-ref.html": [ "mathml/relations/css-styling/lengths-1-ref.html": [
[] []
], ],
"mathml/relations/css-styling/mathsize-attribute-ref.html": [
[]
],
"mathml/relations/css-styling/mathvariant-bold-fraktur-ref.html": [ "mathml/relations/css-styling/mathvariant-bold-fraktur-ref.html": [
[] []
], ],
@ -272485,6 +272611,9 @@
"quirks/META.yml": [ "quirks/META.yml": [
[] []
], ],
"quirks/body-fills-html-quirk-ref.html": [
[]
],
"quirks/hashless-hex-color/support/common.js": [ "quirks/hashless-hex-color/support/common.js": [
[] []
], ],
@ -272500,6 +272629,9 @@
"quirks/reference/green-100px-square-no-red.html": [ "quirks/reference/green-100px-square-no-red.html": [
[] []
], ],
"quirks/reference/table-cell-width-calculation-abspos-ref.html": [
[]
],
"quirks/support/test-ref-iframe.js": [ "quirks/support/test-ref-iframe.js": [
[] []
], ],
@ -312768,6 +312900,12 @@
{} {}
] ]
], ],
"css/css-position/position-absolute-chrome-bug-002.html": [
[
"css/css-position/position-absolute-chrome-bug-002.html",
{}
]
],
"css/css-position/position-absolute-container-dynamic-002.html": [ "css/css-position/position-absolute-container-dynamic-002.html": [
[ [
"css/css-position/position-absolute-container-dynamic-002.html", "css/css-position/position-absolute-container-dynamic-002.html",
@ -316812,6 +316950,12 @@
{} {}
] ]
], ],
"css/css-text/white-space/append-whitespace-only-node-crash-001.html": [
[
"css/css-text/white-space/append-whitespace-only-node-crash-001.html",
{}
]
],
"css/css-text/white-space/nowrap-wbr-and-space-crash.html": [ "css/css-text/white-space/nowrap-wbr-and-space-crash.html": [
[ [
"css/css-text/white-space/nowrap-wbr-and-space-crash.html", "css/css-text/white-space/nowrap-wbr-and-space-crash.html",
@ -320936,6 +321080,12 @@
{} {}
] ]
], ],
"css/cssom-view/elementFromPoint-subpixel.html": [
[
"css/cssom-view/elementFromPoint-subpixel.html",
{}
]
],
"css/cssom-view/elementFromPoint.html": [ "css/cssom-view/elementFromPoint.html": [
[ [
"css/cssom-view/elementFromPoint.html", "css/cssom-view/elementFromPoint.html",
@ -321694,6 +321844,12 @@
{} {}
] ]
], ],
"css/cssom/cssstyledeclaration-setter-form-controls.html": [
[
"css/cssom/cssstyledeclaration-setter-form-controls.html",
{}
]
],
"css/cssom/cssstyledeclaration-setter-logical.html": [ "css/cssom/cssstyledeclaration-setter-logical.html": [
[ [
"css/cssom/cssstyledeclaration-setter-logical.html", "css/cssom/cssstyledeclaration-setter-logical.html",
@ -351264,6 +351420,12 @@
{} {}
] ]
], ],
"html/semantics/scripting-1/the-script-element/module/inactive-context-import.html": [
[
"html/semantics/scripting-1/the-script-element/module/inactive-context-import.html",
{}
]
],
"html/semantics/scripting-1/the-script-element/module/inline-async-execorder.html": [ "html/semantics/scripting-1/the-script-element/module/inline-async-execorder.html": [
[ [
"html/semantics/scripting-1/the-script-element/module/inline-async-execorder.html", "html/semantics/scripting-1/the-script-element/module/inline-async-execorder.html",
@ -387178,30 +387340,6 @@
{} {}
] ]
], ],
"sms/constructor.tentative.https.any.js": [
[
"sms/constructor.tentative.https.any.html",
{
"script_metadata": [
[
"title",
"SMS Receiver API: Constructor"
]
]
}
],
[
"sms/constructor.tentative.https.any.worker.html",
{
"script_metadata": [
[
"title",
"SMS Receiver API: Constructor"
]
]
}
]
],
"sms/idlharness.https.any.js": [ "sms/idlharness.https.any.js": [
[ [
"sms/idlharness.https.any.html", "sms/idlharness.https.any.html",
@ -429381,6 +429519,12 @@
{} {}
] ]
], ],
"css/css-lists/change-list-style-type.html": [
[
"css/css-lists/change-list-style-type.html",
{}
]
],
"css/css-lists/list-style-type-armenian-002.xht": [ "css/css-lists/list-style-type-armenian-002.xht": [
[ [
"css/css-lists/list-style-type-armenian-002.xht", "css/css-lists/list-style-type-armenian-002.xht",
@ -502970,6 +503114,14 @@
"9233b4373e5e4dc5beb6713a9af1de861c5cf4d9", "9233b4373e5e4dc5beb6713a9af1de861c5cf4d9",
"reftest" "reftest"
], ],
"css/CSS2/positioning/abspos-negative-margin-001-ref.html": [
"e6f9bd6f9ad302edca80f34b70ebfcaf1d22e68c",
"support"
],
"css/CSS2/positioning/abspos-negative-margin-001.html": [
"6b6246eb195d102e23b8d4c7a9407235b6cc14c1",
"reftest"
],
"css/CSS2/positioning/abspos-overflow-001-ref.xht": [ "css/CSS2/positioning/abspos-overflow-001-ref.xht": [
"ba7e87c6a7c18a9335b51e07052ab47631299c9b", "ba7e87c6a7c18a9335b51e07052ab47631299c9b",
"support" "support"
@ -550914,6 +551066,14 @@
"228604ee357d22027c1691bf2baf27a52729222b", "228604ee357d22027c1691bf2baf27a52729222b",
"reftest" "reftest"
], ],
"css/css-lists/change-list-style-type-ref.html": [
"033af1333132a2696d1a80ceacfc91f1ebf67a08",
"support"
],
"css/css-lists/change-list-style-type.html": [
"3d68ca4a7eaa0fe9bbc94c94fa290ce6026272c6",
"visual"
],
"css/css-lists/content-property/marker-text-matches-armenian-ref.html": [ "css/css-lists/content-property/marker-text-matches-armenian-ref.html": [
"f21dfff69608a6a1201bd586c2a6e1e24d5fd915", "f21dfff69608a6a1201bd586c2a6e1e24d5fd915",
"support" "support"
@ -555562,6 +555722,10 @@
"3e8899a94099983b147f0877a6d45a17341a0364", "3e8899a94099983b147f0877a6d45a17341a0364",
"testharness" "testharness"
], ],
"css/css-position/position-absolute-chrome-bug-002.html": [
"5fef5205f94576cc4834f98a2cb1f2007df94974",
"testharness"
],
"css/css-position/position-absolute-container-dynamic-002.html": [ "css/css-position/position-absolute-container-dynamic-002.html": [
"91d862835e6d1351deefb26f7e2b71a9539bbd6c", "91d862835e6d1351deefb26f7e2b71a9539bbd6c",
"testharness" "testharness"
@ -567790,6 +567954,10 @@
"9d6b2c2bc7d0cde02d992f741884bf702c0398a4", "9d6b2c2bc7d0cde02d992f741884bf702c0398a4",
"reftest" "reftest"
], ],
"css/css-text/white-space/append-whitespace-only-node-crash-001.html": [
"b32555b18876898beb1b3b7b4559268d64ae9c1c",
"testharness"
],
"css/css-text/white-space/break-spaces-001.html": [ "css/css-text/white-space/break-spaces-001.html": [
"f3b881afc1074db7511acbc419e5083ebde3413e", "f3b881afc1074db7511acbc419e5083ebde3413e",
"reftest" "reftest"
@ -587270,6 +587438,10 @@
"899e411bdd302f2995a9d337ac5a3f89bd1c709b", "899e411bdd302f2995a9d337ac5a3f89bd1c709b",
"testharness" "testharness"
], ],
"css/cssom-view/elementFromPoint-subpixel.html": [
"ff67aa2e7f32aa56cc316a11302882caccfe69b6",
"testharness"
],
"css/cssom-view/elementFromPoint.html": [ "css/cssom-view/elementFromPoint.html": [
"466fb5cb0a004e35cd74638a5187b01da9ca0a4d", "466fb5cb0a004e35cd74638a5187b01da9ca0a4d",
"testharness" "testharness"
@ -588010,6 +588182,10 @@
"e66466e7a11b7883f9ad9de84d9cedc27ac3ea61", "e66466e7a11b7883f9ad9de84d9cedc27ac3ea61",
"testharness" "testharness"
], ],
"css/cssom/cssstyledeclaration-setter-form-controls.html": [
"ae556ed1cbec68c757188518e2cf6cd4ebd5cd05",
"testharness"
],
"css/cssom/cssstyledeclaration-setter-logical.html": [ "css/cssom/cssstyledeclaration-setter-logical.html": [
"13d68e9a70229861dc1109972caa541147adb859", "13d68e9a70229861dc1109972caa541147adb859",
"testharness" "testharness"
@ -602143,7 +602319,7 @@
"support" "support"
], ],
"docs/writing-tests/index.md": [ "docs/writing-tests/index.md": [
"20292fd33a3db279316355f8b5012070d41bc3b7", "9680a359b27197f4acc8c08a786ddb1823b90a7a",
"support" "support"
], ],
"docs/writing-tests/lint-tool.md": [ "docs/writing-tests/lint-tool.md": [
@ -604587,7 +604763,7 @@
"testharness" "testharness"
], ],
"element-timing/background-image-multiple-elements.html": [ "element-timing/background-image-multiple-elements.html": [
"24f72a67c34d0cc5323c6d4a0acb2e25085ec87a", "084bb9ca0205815a1c7ad7764ce1979485e88435",
"testharness" "testharness"
], ],
"element-timing/background-image-stretched.html": [ "element-timing/background-image-stretched.html": [
@ -604687,7 +604863,7 @@
"testharness" "testharness"
], ],
"element-timing/observe-text.html": [ "element-timing/observe-text.html": [
"a9a0e30adf353f342ad8bb6a2300ea90beb5d9fa", "16382edaa9da45c246f34443ce3e70b7177f9203",
"testharness" "testharness"
], ],
"element-timing/observe-video-poster.html": [ "element-timing/observe-video-poster.html": [
@ -627102,6 +627278,10 @@
"ca6900744dcf3a07d98ddaa17b4173fd4bed5fb9", "ca6900744dcf3a07d98ddaa17b4173fd4bed5fb9",
"testharness" "testharness"
], ],
"html/semantics/scripting-1/the-script-element/module/inactive-context-import.html": [
"ce88c0a1528613e6586f2188e583d44d5c89fe67",
"testharness"
],
"html/semantics/scripting-1/the-script-element/module/inline-async-execorder.html": [ "html/semantics/scripting-1/the-script-element/module/inline-async-execorder.html": [
"db03612e82b42b6bd3294ced7468bb6c8b702520", "db03612e82b42b6bd3294ced7468bb6c8b702520",
"testharness" "testharness"
@ -631867,7 +632047,7 @@
"support" "support"
], ],
"interfaces/webxr.idl": [ "interfaces/webxr.idl": [
"f9bfdce58425350d1404c4beaac719e04c94a498", "4af1c96a1847445c7559dabba20cb8a3a1de5c60",
"support" "support"
], ],
"interfaces/worklets.idl": [ "interfaces/worklets.idl": [
@ -632391,7 +632571,7 @@
"testharness" "testharness"
], ],
"lint.whitelist": [ "lint.whitelist": [
"be52aa67c00b9484180e316d6594e31d4918087d", "9966d7c307b5520ab251d69f231526df762dc4ba",
"support" "support"
], ],
"loading/preloader-css-import-no-quote.tentative.html": [ "loading/preloader-css-import-no-quote.tentative.html": [
@ -632423,7 +632603,7 @@
"support" "support"
], ],
"longtask-timing/idlharness.window.js": [ "longtask-timing/idlharness.window.js": [
"96d939f04e7fbba348bf1edccf64c17c7af0535d", "0ef7e85440ee1fc99c05ef5be0fc1fe61f818118",
"testharness" "testharness"
], ],
"longtask-timing/longtask-attributes.html": [ "longtask-timing/longtask-attributes.html": [
@ -632738,6 +632918,30 @@
"7c11c14691162b69c1a2e854734ae6ac37db10e2", "7c11c14691162b69c1a2e854734ae6ac37db10e2",
"reftest" "reftest"
], ],
"mathml/presentation-markup/operators/mo-movablelimits-default-ref.html": [
"8328637397962e973130c6d8544bda90690cc471",
"support"
],
"mathml/presentation-markup/operators/mo-movablelimits-default.html": [
"cd01fe47682ff1be6a09551589875088476f22c4",
"reftest"
],
"mathml/presentation-markup/operators/mo-movablelimits-dynamic-ref.html": [
"ee5bce2ca82066424da481e8b6ecebd80c4a2e19",
"support"
],
"mathml/presentation-markup/operators/mo-movablelimits-dynamic.html": [
"a92c6c01dc9da3aed4012843eb156b36f877d050",
"reftest"
],
"mathml/presentation-markup/operators/mo-movablelimits-ref.html": [
"cb868d2400e8b8e536e3103a06a5d4502b1dbfba",
"support"
],
"mathml/presentation-markup/operators/mo-movablelimits.html": [
"0855594100b2b5cac13fb464108bf130288c0e32",
"reftest"
],
"mathml/presentation-markup/operators/mo-paint-lspace-rspace-ref.html": [ "mathml/presentation-markup/operators/mo-paint-lspace-rspace-ref.html": [
"da0b79ff9a67cbe53daeb141aaa2efd4f2eb96ad", "da0b79ff9a67cbe53daeb141aaa2efd4f2eb96ad",
"support" "support"
@ -632862,6 +633066,14 @@
"aa38e9729de8569151b98307395ec8a2a5fe4b7f", "aa38e9729de8569151b98307395ec8a2a5fe4b7f",
"testharness" "testharness"
], ],
"mathml/relations/css-styling/mathsize-attribute-ref.html": [
"7a0450e51edf24d52a09b1ea4463483d7704bb75",
"support"
],
"mathml/relations/css-styling/mathsize-attribute.html": [
"00d12e4839cb91e5294409af03d3ad3847eb4213",
"reftest"
],
"mathml/relations/css-styling/mathvariant-bold-fraktur-ref.html": [ "mathml/relations/css-styling/mathvariant-bold-fraktur-ref.html": [
"b883b12b57dbc99c0049ba98c8d3574524c42505", "b883b12b57dbc99c0049ba98c8d3574524c42505",
"support" "support"
@ -646002,6 +646214,22 @@
"608a7c15c7996b5ed3cf534379417c3c077c4e82", "608a7c15c7996b5ed3cf534379417c3c077c4e82",
"testharness" "testharness"
], ],
"quirks/body-fills-html-quirk-float.html": [
"19438bc1bf35b2c4fe674ccaabb7ef32331c50a1",
"reftest"
],
"quirks/body-fills-html-quirk-inline.html": [
"4f15bb97c94219e566ad3c992ad37894f9d40e62",
"reftest"
],
"quirks/body-fills-html-quirk-positioned.html": [
"3ce416dd95cbc288318079c70890f5febc59a174",
"reftest"
],
"quirks/body-fills-html-quirk-ref.html": [
"180afbb84f8444aa4d83342e5679dfda26754acb",
"support"
],
"quirks/classname-query-after-sibling-adoption.html": [ "quirks/classname-query-after-sibling-adoption.html": [
"0fcad36776d5a7fe160244dc342f227b76083798", "0fcad36776d5a7fe160244dc342f227b76083798",
"testharness" "testharness"
@ -646062,6 +646290,10 @@
"159d9a52a01a0b328680a530603cb496ab2d5fcf", "159d9a52a01a0b328680a530603cb496ab2d5fcf",
"support" "support"
], ],
"quirks/reference/table-cell-width-calculation-abspos-ref.html": [
"3d365d25ad669f145a7e2ef5e4e6d0552713546a",
"support"
],
"quirks/support/test-ref-iframe.js": [ "quirks/support/test-ref-iframe.js": [
"e5df41d4249bc93b7458774524bf90f0a6f36be7", "e5df41d4249bc93b7458774524bf90f0a6f36be7",
"support" "support"
@ -646074,6 +646306,10 @@
"2ff00b9ee794c07309c05f2500b4be1b326afd7e", "2ff00b9ee794c07309c05f2500b4be1b326afd7e",
"testharness" "testharness"
], ],
"quirks/table-cell-width-calculation-abspos.html": [
"f26d06040775c8e2447ade4230fcf28ec06dee3b",
"reftest"
],
"quirks/table-cell-width-calculation.html": [ "quirks/table-cell-width-calculation.html": [
"eeb726627b78fdcbf81d3c29b9205f771bd0aca8", "eeb726627b78fdcbf81d3c29b9205f771bd0aca8",
"testharness" "testharness"
@ -661806,20 +662042,16 @@
"43b340dbb79f2585ef4acc4361ee94c6f22003f0", "43b340dbb79f2585ef4acc4361ee94c6f22003f0",
"testharness" "testharness"
], ],
"sms/constructor.tentative.https.any.js": [
"a624934ceeeace186038b15332d1c3c73968fbc7",
"testharness"
],
"sms/idlharness.https.any.js": [ "sms/idlharness.https.any.js": [
"c030a5073a0a376a1b337e563c955f78bdad41dc", "0c31744937c6dbc9b292586ab8ce5f10b268f3ed",
"testharness" "testharness"
], ],
"sms/interceptor.https.html": [ "sms/interceptor.https.html": [
"417120a12174859110f48a99a11405b7f2c0316e", "4a6772f4416ab0550e451c710da1b48bbd9303d6",
"testharness" "testharness"
], ],
"sms/resources/iframe.html": [ "sms/resources/iframe.html": [
"44410e805f7b2857809794f582a97df0d1b0ac14", "9a00e84c63b9321d9e29c10aeb266ff5c0b1d5e1",
"support" "support"
], ],
"sms/sms-top-level-frame-only.https.html": [ "sms/sms-top-level-frame-only.https.html": [
@ -661827,11 +662059,11 @@
"testharness" "testharness"
], ],
"sms/sms_provider.js": [ "sms/sms_provider.js": [
"dd3af9b747a3207d02c596b4fb6434772f3c44e3", "a4759419a88670ec6e3f1cbd4ac3dcb3500ad57a",
"support" "support"
], ],
"sms/sms_receiver.idl": [ "sms/sms_receiver.idl": [
"bc6fb1dc1037fc263a5a2da35d03449fee4db48b", "b71b6a3e0db2b74b127e4332cd83f218bb39d6aa",
"support" "support"
], ],
"speech-api/META.yml": [ "speech-api/META.yml": [
@ -666655,7 +666887,7 @@
"support" "support"
], ],
"tools/ci/website_build.sh": [ "tools/ci/website_build.sh": [
"f91975719be21e7c1461e4f8603c4f34639b840f", "aadfcbd6a212574fa5462447072b996ae214de6b",
"support" "support"
], ],
"tools/conftest.py": [ "tools/conftest.py": [
@ -675463,7 +675695,7 @@
"manual" "manual"
], ],
"web-nfc/NFCReadingEvent_constructor.https.html": [ "web-nfc/NFCReadingEvent_constructor.https.html": [
"460e92b2508ba438a058d5ce9ab34db0d24349cf", "da3e4c071d1e48a43be5ee27d775721d2af88e07",
"testharness" "testharness"
], ],
"web-nfc/NFCWriter_push.https.html": [ "web-nfc/NFCWriter_push.https.html": [
@ -678423,7 +678655,7 @@
"testharness" "testharness"
], ],
"webrtc/RTCPeerConnection-helper.js": [ "webrtc/RTCPeerConnection-helper.js": [
"d859ac736ae6bf0187640dbe2148d8e0d64d9345", "6a4ce854db70573a368ced9889e0623b15311f72",
"support" "support"
], ],
"webrtc/RTCPeerConnection-iceConnectionState-disconnected.https.html": [ "webrtc/RTCPeerConnection-iceConnectionState-disconnected.https.html": [
@ -678431,7 +678663,7 @@
"testharness" "testharness"
], ],
"webrtc/RTCPeerConnection-iceConnectionState.https.html": [ "webrtc/RTCPeerConnection-iceConnectionState.https.html": [
"6d4ab50b0e266c30d6ce329e1f587886f33ae5fb", "385bb51719e6ee5049f700f783d0faa6753cdff7",
"testharness" "testharness"
], ],
"webrtc/RTCPeerConnection-iceGatheringState.html": [ "webrtc/RTCPeerConnection-iceGatheringState.html": [
@ -678719,7 +678951,7 @@
"support" "support"
], ],
"webrtc/protocol/candidate-exchange.https.html": [ "webrtc/protocol/candidate-exchange.https.html": [
"2603a02cddf3f026b09b8a233d17ff3f92bd43a1", "d1bc35819cee8e13485765e6f70836521dc5e7e7",
"testharness" "testharness"
], ],
"webrtc/protocol/dtls-fingerprint-validation.html": [ "webrtc/protocol/dtls-fingerprint-validation.html": [

View file

@ -0,0 +1,2 @@
[abspos-negative-margin-001.html]
expected: FAIL

View file

@ -74,3 +74,6 @@
[opacity end] [opacity end]
expected: FAIL expected: FAIL
[outline-width end]
expected: FAIL

View file

@ -0,0 +1,4 @@
[elementFromPoint-subpixel.html]
[Hit test top left corner of box]
expected: FAIL

View file

@ -0,0 +1,2 @@
[matchMedia-display-none-iframe.html]
expected: ERROR

View file

@ -2,6 +2,7 @@
type: testharness type: testharness
[single-byte-decoder.html?document] [single-byte-decoder.html?document]
expected: TIMEOUT
[ISO-8859-4: iso_8859-4:1988 (document.characterSet and document.inputEncoding)] [ISO-8859-4: iso_8859-4:1988 (document.characterSet and document.inputEncoding)]
expected: FAIL expected: FAIL

View file

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

View file

@ -38,9 +38,6 @@
[combined text/javascript;charset=windows-1252 x/x text/javascript] [combined text/javascript;charset=windows-1252 x/x text/javascript]
expected: FAIL expected: FAIL
[separate text/javascript;charset=windows-1252 text/javascript]
expected: FAIL
[separate x/x;" x/y;\\" text/javascript;charset=windows-1252;" text/javascript] [separate x/x;" x/y;\\" text/javascript;charset=windows-1252;" text/javascript]
expected: FAIL expected: FAIL

View file

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

View file

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

View file

@ -1,24 +1,5 @@
[open-features-negative-innerwidth-innerheight.html] [open-features-negative-innerwidth-innerheight.html]
type: testharness type: testharness
expected: TIMEOUT
[HTML: window.open `features`: negative values for legacy `innerwidth`, `innerheight`] [HTML: window.open `features`: negative values for legacy `innerwidth`, `innerheight`]
expected: FAIL expected: FAIL
[features "innerheight=-404.5" should NOT set "height=404"]
expected: TIMEOUT
[features "innerwidth=-404.5" should NOT set "width=404"]
expected: TIMEOUT
[features "innerwidth=-404" should NOT set "width=404"]
expected: TIMEOUT
[features "innerheight=-404e1" should NOT set "height=404"]
expected: TIMEOUT
[features "innerheight=-404" should NOT set "height=404"]
expected: TIMEOUT
[features "innerwidth=-404e1" should NOT set "width=404"]
expected: TIMEOUT

View file

@ -1,24 +1,5 @@
[open-features-negative-screenx-screeny.html] [open-features-negative-screenx-screeny.html]
type: testharness type: testharness
expected: TIMEOUT
[HTML: window.open `features`: negative values for legacy `screenx`, `screeny`] [HTML: window.open `features`: negative values for legacy `screenx`, `screeny`]
expected: FAIL expected: FAIL
[features "screenx=-204" should NOT set "left=204"]
expected: TIMEOUT
[features "screeny=-204" should NOT set "top=204"]
expected: TIMEOUT
[features "screeny=-204.5" should NOT set "top=204"]
expected: TIMEOUT
[features "screeny=-0" should NOT set "top=204"]
expected: TIMEOUT
[features "screenx=-0" should NOT set "left=204"]
expected: TIMEOUT
[features "screenx=-204.5" should NOT set "left=204"]
expected: TIMEOUT

View file

@ -1,24 +1,5 @@
[open-features-negative-top-left.html] [open-features-negative-top-left.html]
type: testharness type: testharness
expected: TIMEOUT
[HTML: window.open `features`: negative values for `top`, `left`] [HTML: window.open `features`: negative values for `top`, `left`]
expected: FAIL expected: FAIL
[features "top=-204" should NOT set "top=204"]
expected: TIMEOUT
[features "top=-204.5" should NOT set "top=204"]
expected: TIMEOUT
[features "left=-204" should NOT set "left=204"]
expected: TIMEOUT
[features "top=-0" should NOT set "top=204"]
expected: TIMEOUT
[features "left=-204.5" should NOT set "left=204"]
expected: TIMEOUT
[features "left=-0" should NOT set "left=204"]
expected: TIMEOUT

View file

@ -1,24 +1,5 @@
[open-features-negative-width-height.html] [open-features-negative-width-height.html]
type: testharness type: testharness
expected: TIMEOUT
[HTML: window.open `features`: negative values for `width`, `height`] [HTML: window.open `features`: negative values for `width`, `height`]
expected: FAIL expected: FAIL
[features "height=-404" should NOT set "height=404"]
expected: TIMEOUT
[features "height=-404e1" should NOT set "height=404"]
expected: TIMEOUT
[features "height=-404.5" should NOT set "height=404"]
expected: TIMEOUT
[features "width=-404" should NOT set "width=404"]
expected: TIMEOUT
[features "width=-404e1" should NOT set "width=404"]
expected: TIMEOUT
[features "width=-404.5" should NOT set "width=404"]
expected: TIMEOUT

View file

@ -1,48 +1,32 @@
[open-features-non-integer-height.html] [open-features-non-integer-height.html]
type: testharness type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for feature `height`] [HTML: window.open `features`: non-integer values for feature `height`]
expected: FAIL expected: FAIL
[features "height=405*3" should set "height=405"] [features "height=405*3" should set "height=405"]
expected: TIMEOUT expected: FAIL
[features "height=405.32" should set "height=405"] [features "height=405.32" should set "height=405"]
expected: TIMEOUT expected: FAIL
[features "height=405e1" should set "height=405"] [features "height=405e1" should set "height=405"]
expected: TIMEOUT expected: FAIL
[features "height=405/5" should set "height=405"] [features "height=405/5" should set "height=405"]
expected: TIMEOUT expected: FAIL
[features "height=405^4" should set "height=405"] [features "height=405^4" should set "height=405"]
expected: TIMEOUT expected: FAIL
[features "height=405.5" should set "height=405"] [features "height=405.5" should set "height=405"]
expected: TIMEOUT expected: FAIL
[features "height=405e-1" should set "height=405"] [features "height=405e-1" should set "height=405"]
expected: TIMEOUT expected: FAIL
[features "height=405 " should set "height=405"] [features "height=405 " should set "height=405"]
expected: TIMEOUT expected: FAIL
[features "height=405LLl" should set "height=405"] [features "height=405LLl" should set "height=405"]
expected: TIMEOUT expected: FAIL
[features "height=/404" should NOT set "height=404"]
expected: TIMEOUT
[top=0,left=0,width=401,: absence of feature "height" should be treated same as "height=0"]
expected: TIMEOUT
[top=0,left=0: absence of feature "height" should be treated same as "height=0"]
expected: TIMEOUT
[features "height=_404" should NOT set "height=404"]
expected: TIMEOUT
[features "height=L404" should NOT set "height=404"]
expected: TIMEOUT

View file

@ -1,42 +1,32 @@
[open-features-non-integer-innerheight.html] [open-features-non-integer-innerheight.html]
type: testharness type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `innerheight`] [HTML: window.open `features`: non-integer values for legacy feature `innerheight`]
expected: FAIL expected: FAIL
[features "innerheight=405e-1" should set "height=405"] [features "innerheight=405e-1" should set "height=405"]
expected: TIMEOUT expected: FAIL
[features "innerheight=405LLl" should set "height=405"] [features "innerheight=405LLl" should set "height=405"]
expected: TIMEOUT expected: FAIL
[features "innerheight=405^4" should set "height=405"] [features "innerheight=405^4" should set "height=405"]
expected: TIMEOUT expected: FAIL
[features "innerheight=405e1" should set "height=405"] [features "innerheight=405e1" should set "height=405"]
expected: TIMEOUT expected: FAIL
[features "innerheight=405 " should set "height=405"] [features "innerheight=405 " should set "height=405"]
expected: TIMEOUT expected: FAIL
[features "innerheight=405/5" should set "height=405"] [features "innerheight=405/5" should set "height=405"]
expected: TIMEOUT expected: FAIL
[features "innerheight=405.32" should set "height=405"] [features "innerheight=405.32" should set "height=405"]
expected: TIMEOUT expected: FAIL
[features "innerheight=405.5" should set "height=405"] [features "innerheight=405.5" should set "height=405"]
expected: TIMEOUT expected: FAIL
[features "innerheight=405*3" should set "height=405"] [features "innerheight=405*3" should set "height=405"]
expected: TIMEOUT expected: FAIL
[features "innerheight=_404" should NOT set "height=404"]
expected: TIMEOUT
[features "innerheight=L404" should NOT set "height=404"]
expected: TIMEOUT
[features "innerheight=/404" should NOT set "height=404"]
expected: TIMEOUT

View file

@ -1,42 +1,32 @@
[open-features-non-integer-innerwidth.html] [open-features-non-integer-innerwidth.html]
type: testharness type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `innerwidth`] [HTML: window.open `features`: non-integer values for legacy feature `innerwidth`]
expected: FAIL expected: FAIL
[features "innerwidth=405e-1" should set "width=405"] [features "innerwidth=405e-1" should set "width=405"]
expected: TIMEOUT expected: FAIL
[features "innerwidth=405*3" should set "width=405"] [features "innerwidth=405*3" should set "width=405"]
expected: TIMEOUT expected: FAIL
[features "innerwidth=405.5" should set "width=405"] [features "innerwidth=405.5" should set "width=405"]
expected: TIMEOUT expected: FAIL
[features "innerwidth=405e1" should set "width=405"] [features "innerwidth=405e1" should set "width=405"]
expected: TIMEOUT expected: FAIL
[features "innerwidth=405.32" should set "width=405"] [features "innerwidth=405.32" should set "width=405"]
expected: TIMEOUT expected: FAIL
[features "innerwidth=405 " should set "width=405"] [features "innerwidth=405 " should set "width=405"]
expected: TIMEOUT expected: FAIL
[features "innerwidth=405LLl" should set "width=405"] [features "innerwidth=405LLl" should set "width=405"]
expected: TIMEOUT expected: FAIL
[features "innerwidth=405/5" should set "width=405"] [features "innerwidth=405/5" should set "width=405"]
expected: TIMEOUT expected: FAIL
[features "innerwidth=405^4" should set "width=405"] [features "innerwidth=405^4" should set "width=405"]
expected: TIMEOUT expected: FAIL
[features "innerwidth=/404" should NOT set "width=404"]
expected: TIMEOUT
[features "innerwidth=_404" should NOT set "width=404"]
expected: TIMEOUT
[features "innerwidth=L404" should NOT set "width=404"]
expected: TIMEOUT

View file

@ -1,42 +1,32 @@
[open-features-non-integer-left.html] [open-features-non-integer-left.html]
type: testharness type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for feature `left`] [HTML: window.open `features`: non-integer values for feature `left`]
expected: FAIL expected: FAIL
[features "left=105e1" should set "left=105"] [features "left=105e1" should set "left=105"]
expected: TIMEOUT expected: FAIL
[features "left=105 " should set "left=105"] [features "left=105 " should set "left=105"]
expected: TIMEOUT expected: FAIL
[features "left=105/5" should set "left=105"] [features "left=105/5" should set "left=105"]
expected: TIMEOUT expected: FAIL
[features "left=105e-1" should set "left=105"] [features "left=105e-1" should set "left=105"]
expected: TIMEOUT expected: FAIL
[features "left=105^4" should set "left=105"] [features "left=105^4" should set "left=105"]
expected: TIMEOUT expected: FAIL
[features "left=105LLl" should set "left=105"] [features "left=105LLl" should set "left=105"]
expected: TIMEOUT expected: FAIL
[features "left=105.32" should set "left=105"] [features "left=105.32" should set "left=105"]
expected: TIMEOUT expected: FAIL
[features "left=105*3" should set "left=105"] [features "left=105*3" should set "left=105"]
expected: TIMEOUT expected: FAIL
[features "left=105.5" should set "left=105"] [features "left=105.5" should set "left=105"]
expected: TIMEOUT expected: FAIL
[features "left=L104" should NOT set "left=104"]
expected: TIMEOUT
[features "left=/104" should NOT set "left=104"]
expected: TIMEOUT
[features "left=_104" should NOT set "left=104"]
expected: TIMEOUT

View file

@ -1,42 +1,32 @@
[open-features-non-integer-screenx.html] [open-features-non-integer-screenx.html]
type: testharness type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `screenx`] [HTML: window.open `features`: non-integer values for legacy feature `screenx`]
expected: FAIL expected: FAIL
[features "screenx=105.5" should set "left=105"] [features "screenx=105.5" should set "left=105"]
expected: TIMEOUT expected: FAIL
[features "screenx=105e1" should set "left=105"] [features "screenx=105e1" should set "left=105"]
expected: TIMEOUT expected: FAIL
[features "screenx=105 " should set "left=105"] [features "screenx=105 " should set "left=105"]
expected: TIMEOUT expected: FAIL
[features "screenx=105*3" should set "left=105"] [features "screenx=105*3" should set "left=105"]
expected: TIMEOUT expected: FAIL
[features "screenx=105e-1" should set "left=105"] [features "screenx=105e-1" should set "left=105"]
expected: TIMEOUT expected: FAIL
[features "screenx=105^4" should set "left=105"] [features "screenx=105^4" should set "left=105"]
expected: TIMEOUT expected: FAIL
[features "screenx=105LLl" should set "left=105"] [features "screenx=105LLl" should set "left=105"]
expected: TIMEOUT expected: FAIL
[features "screenx=105/5" should set "left=105"] [features "screenx=105/5" should set "left=105"]
expected: TIMEOUT expected: FAIL
[features "screenx=105.32" should set "left=105"] [features "screenx=105.32" should set "left=105"]
expected: TIMEOUT expected: FAIL
[features "screenx=_104" should NOT set "left=104"]
expected: TIMEOUT
[features "screenx=L104" should NOT set "left=104"]
expected: TIMEOUT
[features "screenx=/104" should NOT set "left=104"]
expected: TIMEOUT

View file

@ -1,42 +1,32 @@
[open-features-non-integer-screeny.html] [open-features-non-integer-screeny.html]
type: testharness type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `screeny`] [HTML: window.open `features`: non-integer values for legacy feature `screeny`]
expected: FAIL expected: FAIL
[features "screeny=405^4" should set "height=405"] [features "screeny=405^4" should set "height=405"]
expected: TIMEOUT expected: FAIL
[features "screeny=405e-1" should set "height=405"] [features "screeny=405e-1" should set "height=405"]
expected: TIMEOUT expected: FAIL
[features "screeny=405LLl" should set "height=405"] [features "screeny=405LLl" should set "height=405"]
expected: TIMEOUT expected: FAIL
[features "screeny=405e1" should set "height=405"] [features "screeny=405e1" should set "height=405"]
expected: TIMEOUT expected: FAIL
[features "screeny=405 " should set "height=405"] [features "screeny=405 " should set "height=405"]
expected: TIMEOUT expected: FAIL
[features "screeny=405/5" should set "height=405"] [features "screeny=405/5" should set "height=405"]
expected: TIMEOUT expected: FAIL
[features "screeny=405*3" should set "height=405"] [features "screeny=405*3" should set "height=405"]
expected: TIMEOUT expected: FAIL
[features "screeny=405.32" should set "height=405"] [features "screeny=405.32" should set "height=405"]
expected: TIMEOUT expected: FAIL
[features "screeny=405.5" should set "height=405"] [features "screeny=405.5" should set "height=405"]
expected: TIMEOUT expected: FAIL
[features "screeny=_404" should NOT set "height=404"]
expected: TIMEOUT
[features "screeny=L404" should NOT set "height=404"]
expected: TIMEOUT
[features "screeny=/404" should NOT set "height=404"]
expected: TIMEOUT

View file

@ -1,48 +1,32 @@
[open-features-non-integer-width.html] [open-features-non-integer-width.html]
type: testharness type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for feature `width`] [HTML: window.open `features`: non-integer values for feature `width`]
expected: FAIL expected: FAIL
[features "width=405^4" should set "width=405"] [features "width=405^4" should set "width=405"]
expected: TIMEOUT expected: FAIL
[features "width=405.5" should set "width=405"] [features "width=405.5" should set "width=405"]
expected: TIMEOUT expected: FAIL
[features "width=405e1" should set "width=405"] [features "width=405e1" should set "width=405"]
expected: TIMEOUT expected: FAIL
[features "width=405 " should set "width=405"] [features "width=405 " should set "width=405"]
expected: TIMEOUT expected: FAIL
[features "width=405.32" should set "width=405"] [features "width=405.32" should set "width=405"]
expected: TIMEOUT expected: FAIL
[features "width=405LLl" should set "width=405"] [features "width=405LLl" should set "width=405"]
expected: TIMEOUT expected: FAIL
[features "width=405*3" should set "width=405"] [features "width=405*3" should set "width=405"]
expected: TIMEOUT expected: FAIL
[features "width=405e-1" should set "width=405"] [features "width=405e-1" should set "width=405"]
expected: TIMEOUT expected: FAIL
[features "width=405/5" should set "width=405"] [features "width=405/5" should set "width=405"]
expected: TIMEOUT expected: FAIL
[top=0,left=0: absence of feature "width" should be treated same as "width=0"]
expected: TIMEOUT
[features "width=_404" should NOT set "width=404"]
expected: TIMEOUT
[top=0,left=0,height=401,: absence of feature "width" should be treated same as "width=0"]
expected: TIMEOUT
[features "width=/404" should NOT set "width=404"]
expected: TIMEOUT
[features "width=L404" should NOT set "width=404"]
expected: TIMEOUT

View file

@ -1,10 +0,0 @@
[non-active-document.html]
[DOMParser]
expected: FAIL
[createHTMLDocument]
expected: FAIL
[<template>]
expected: FAIL

View file

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

View file

@ -40,3 +40,7 @@
[test_height_width_larger_than_max] [test_height_width_larger_than_max]
expected: FAIL expected: FAIL
[test_negative_x_y]
expected: FAIL

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<style>
div {
font-size: 10px;
line-height: 1;
}
.blue {
display: inline-block;
vertical-align: bottom;
width: 10px;
height: 10px;
background: blue;
}
</style>
<body>
<div>x<span class="blue"></span></div>
<div>x<br><span class="blue"></span></div>
</body>

View file

@ -0,0 +1,33 @@
<!DOCTYPE html>
<title>CSS Test: Absolutely positioned object in a negative margin box</title>
<link rel="author" title="Koji Ishii" href="mailto:kojii@chromium.org">
<link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#comp-abspos">
<link rel="match" href="abspos-negative-margin-001-ref.html">
<style>
html {
font-size: 10px;
line-height: 1;
}
.abspos {
position:absolute;
width: 10px;
height: 10px;
background: blue;
}
</style>
<body>
<div>
<span>
<span style="margin-right: -10px;">
x<span class="abspos"></span>
</span>
</span>
</div>
<div>
<span>
<span style="margin-right: -10px;">
x<div class="abspos"></div>
</span>
</span>
</div>
</body>

View file

@ -0,0 +1,45 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Lists: test the change of list-style-type</title>
<link rel=help href="https://www.w3.org/TR/CSS22/generate.html#lists">
<link rel=help href="https://bugs.chromium.org/p/chromium/issues/detail?id=966750">
<style type="text/css">
.inside {
list-style-position: inside;
}
.none2symbol {
list-style-type: square;
}
.symbol2none {
list-style-type: none;
}
.symbol2symbol {
list-style-type: square;
}
.symbol2ordinal {
list-style-type: upper-roman;
}
.ordinal2ordinal {
list-style-type: decimal;
}
</style>
<ul class="inside"><li class="none2symbol">inside: none to square</li></ul>
<ul><li class="none2symbol">outside: none to square</li></ul>
<ul class="inside"><li class="symbol2none">inside: square to none</li></ul>
<ul><li class="symbol2none">outside: square to none</li></ul>
<ul class="inside"><li class="symbol2symbol">inside: disc to square</li></ul>
<ul><li class="symbol2symbol">outside: disc to square</li></ul>
<ul class="inside"><li class="symbol2ordinal">inside: disc to upper-roman</li></ul>
<ul><li class="symbol2ordinal">outside: disc to upper-roman</li></ul>
<ul class="inside"><li class="ordinal2ordinal">inside: upper-roman to decimal</li></ul>
<ul><li class="ordinal2ordinal">outside: upper-roman to decimal</li></ul>

View file

@ -0,0 +1,71 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Lists: test the change of list-style-type</title>
<link rel=help href="https://www.w3.org/TR/CSS22/generate.html#lists">
<link rel=help href="https://bugs.chromium.org/p/chromium/issues/detail?id=966750">
<style type="text/css">
.inside {
list-style-position: inside;
}
.none2symbol {
list-style-type: none;
}
.symbol2none {
list-style-type: square;
}
.symbol2symbol {
list-style-type: disc;
}
.symbol2ordinal {
list-style-type: disc;
}
.ordinal2ordinal {
list-style-type: upper-roman;
}
</style>
<ul class="inside"><li class="none2symbol">inside: none to square</li></ul>
<ul><li class="none2symbol">outside: none to square</li></ul>
<ul class="inside"><li class="symbol2none">inside: square to none</li></ul>
<ul><li class="symbol2none">outside: square to none</li></ul>
<ul class="inside"><li class="symbol2symbol">inside: disc to square</li></ul>
<ul><li class="symbol2symbol">outside: disc to square</li></ul>
<ul class="inside"><li class="symbol2ordinal">inside: disc to upper-roman</li></ul>
<ul><li class="symbol2ordinal">outside: disc to upper-roman</li></ul>
<ul class="inside"><li class="ordinal2ordinal">inside: upper-roman to decimal</li></ul>
<ul><li class="ordinal2ordinal">outside: upper-roman to decimal</li></ul>
<script>
document.body.offsetLeft;
</script>
<style type="text/css">
.none2symbol {
list-style-type: square;
}
.symbol2none {
list-style-type: none;
}
.symbol2symbol {
list-style-type: square;
}
.symbol2ordinal {
list-style-type: upper-roman;
}
.ordinal2ordinal {
list-style-type: decimal;
}
</style>

View file

@ -0,0 +1,39 @@
<!DOCTYPE html>
<link rel="author" href="mailto:atotic@google.com">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<link rel="help" href="https://crbug.com/970166">
<meta name="assert" content="simplified layout calculates correct abspos position with floats">
<style>
#container {
position: relative;
background: gray;
}
#container::after {
content: '';
display: table;
clear:both;
}
#target {
position: absolute;
right: 0;
background: green;
}
</style>
<div id="container">
<div style="float:left">floatleft</div>
<div id="target">
<div>text</div>
<div id="toggle">toggle</div>
</div>
</div>
<script>
test(() => {
document.body.offsetTop;
let el = document.querySelector("#toggle");
el.style.display = "none";
document.body.offsetTop;
assert_equals(document.querySelector("#target").offsetTop, 0);
}, '#target position is recalculated correctly.');
</script>

View file

@ -0,0 +1,36 @@
<!DOCTYPE html>
<link rel="help" href="https://crbug.com/971811">
<link rel="author" title="Koji Ishii" href="mailto:kojii@chromium.org">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<div id="log"></div>
<script>
const strings = [' ', '\t', '\n', '\f', '\r'];
const whitespace_values = ['normal', 'pre', 'nowrap', 'pre-wrap', 'break-spaces', 'pre-line'];
const container = document.body;
for (let whitespace_value of whitespace_values) {
for (let string of strings) {
test(() => {
let div = document.createElement('div');
div.style.whiteSpace = whitespace_value;
div.textContent = 'test';
container.appendChild(div);
container.offsetTop; // Force layout
div.appendChild(document.createTextNode(string));
container.offsetTop; // Force layout
}, `Append ${toCodePoints(string)} to 'white-space: ${whitespace_value}'`);
}
}
function toCodePoints(string) {
let results = [];
for (let ch of string) {
let hex = ch.codePointAt(0).toString(16).toUpperCase();
hex = ('000' + hex).substr(-4)
results.push('U+' + hex);
}
return results.join(' ');
}
</script>
</body>

View file

@ -0,0 +1,59 @@
<!DOCTYPE html>
<html>
<head>
<title>CSSOM View - extensions to the Document interface</title>
<link rel="author" title="Xiaocheng Hu" href="mailto:xiaochengh@chromium.org">
<link rel="help" href="http://www.w3.org/TR/cssom-view/#extensions-to-the-document-interface">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
.container {
display: flex;
width: 500px;
height: 100px;
}
.map {
flex: 1 1 auto;
position: relative;
}
.box {
flex: 0 0 auto;
}
.child {
width: 183.66px;
}
</style>
</head>
<body>
<div class="container">
<div class="map"></div>
<div class="box" id="box">
<div class="child"></div>
</div>
</div>
<script>
const box = document.getElementById('box');
const rect = box.getBoundingClientRect();
test(() => {
assert_equals(document.elementFromPoint(rect.x, rect.y), box);
}, 'Hit test top left corner of box');
test(() => {
assert_equals(document.elementFromPoint(rect.x + rect.width - 1, rect.y), box);
}, 'Hit test top right corner of box');
test(() => {
assert_equals(document.elementFromPoint(rect.x, rect.y + rect.height - 1), box);
}, 'Hit test bottom left corner of box');
test(() => {
assert_equals(document.elementFromPoint(rect.x + rect.width - 1, rect.y + rect.height - 1), box);
}, 'Hit test lower left corner of box');
</script>
</body>
</html>

View file

@ -0,0 +1,103 @@
<!doctype html>
<title>CSSOM test: no side effects from setting "height"</title>
<link rel="help" href="https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-setproperty">
<link rel="help" href="https://bugs.webkit.org/show_bug.cgi?id=107380">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<p>
Historically, the Apple Safari web browser has added an "intrinsic margin" to
form controls which do not specify a `height`. It removed this margin following
modification of the `height`. <a
href="https://bugs.webkit.org/show_bug.cgi?id=107380">This non-standard
behavior was identified as a source of confusion for web developers.</a>
</p>
<script>
function makeElement(tagName) {
var element = document.createElement(tagName);
document.body.appendChild(element);
return element;
}
function makeInputElement(type) {
var element = makeElement('input');
element.setAttribute('type', type);
return element;
}
function measure(element) {
var computed = getComputedStyle(element);
return [computed.marginTop, computed.marginBottom];
}
test(function() {
var element = makeInputElement('text');
var initial = measure(element);
element.style.setProperty('height', '12px');
assert_array_equals(measure(element), initial);
}, 'text input element');
test(function() {
var element = makeInputElement('button');
var initial = measure(element);
element.style.setProperty('height', '12px');
assert_array_equals(measure(element), initial);
}, 'button input element');
test(function() {
var element = makeInputElement('submit');
var initial = measure(element);
element.style.setProperty('height', '12px');
assert_array_equals(measure(element), initial);
}, 'submit input element');
test(function() {
var element = makeInputElement('radio');
var initial = measure(element);
element.style.setProperty('height', '12px');
assert_array_equals(measure(element), initial);
}, 'radio input element');
test(function() {
var element = makeInputElement('checkbox');
var initial = measure(element);
element.style.setProperty('height', '12px');
assert_array_equals(measure(element), initial);
}, 'checkbox input element');
test(function() {
var element = makeElement('textarea');
var initial = measure(element);
element.style.setProperty('height', '12px');
assert_array_equals(measure(element), initial);
}, 'textarea element');
test(function() {
var element = makeElement('select');
var initial = measure(element);
element.style.setProperty('height', '12px');
assert_array_equals(measure(element), initial);
}, 'select element');
test(function() {
var element = makeElement('button')
var initial = measure(element);
element.style.setProperty('height', '12px');
assert_array_equals(measure(element), initial);
}, 'button element');
</script>

View file

@ -22,6 +22,8 @@ There's also a load of [general guidelines](general-guidelines) that apply to al
rendering rendering
server-features server-features
submission-process submission-process
testdriver
testdriver-tutorial
testharness testharness
visual visual
wdspec wdspec

View file

@ -61,6 +61,8 @@ body {
observedDiv2Txt = true; observedDiv2Txt = true;
checkTextElement(entry, 'et2', 'div2', beforeRender, checkTextElement(entry, 'et2', 'div2', beforeRender,
document.getElementById('div2')); document.getElementById('div2'));
assert_greater_than_equal(entry.intersectionRect.right - entry.intersectionRect.left, 50);
assert_greater_than_equal(entry.intersectionRect.bottom - entry.intersectionRect.top, 10);
} }
} }
else { else {

View file

@ -2,6 +2,14 @@
<meta charset=utf-8> <meta charset=utf-8>
<title>Element Timing: observe text</title> <title>Element Timing: observe text</title>
<body> <body>
<style>
body {
margin: 20px;
}
p {
font-size: 12px;
}
</style>
<script src="/resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<script src="resources/element-timing-helpers.js"></script> <script src="resources/element-timing-helpers.js"></script>
@ -15,7 +23,14 @@
const observer = new PerformanceObserver( const observer = new PerformanceObserver(
t.step_func_done((entryList) => { t.step_func_done((entryList) => {
assert_equals(entryList.getEntries().length, 1); assert_equals(entryList.getEntries().length, 1);
checkTextElement(entryList.getEntries()[0], 'my_text', 'text_id', beforeRender, paragraph); const entry = entryList.getEntries()[0];
checkTextElement(entry, 'my_text', 'text_id', beforeRender, paragraph);
assert_equals(entry.intersectionRect.left, 20);
// Text box size will vary from device to device, so try lower bounding height by 12, width by 100.
assert_greater_than_equal(entry.intersectionRect.right, 120);
assert_equals(entry.intersectionRect.top, 20);
assert_greater_than_equal(entry.intersectionRect.bottom, 32);
}) })
); );
observer.observe({entryTypes: ['element']}); observer.observe({entryTypes: ['element']});

View file

@ -0,0 +1,20 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Dynamic import triggered from inactive context should not crash</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="container">
<iframe></iframe>
</div>
<script>
test(() => {
const iframe = document.querySelector('iframe');
const otherWindow = iframe.contentWindow;
iframe.remove();
// Below should not crash
otherWindow.eval(`import('foobar');`);
}, 'dynamic import from inactive context should not crash');
</script>

View file

@ -203,8 +203,6 @@ dictionary XRWebGLLayerInit {
optional XRWebGLLayerInit layerInit)] optional XRWebGLLayerInit layerInit)]
interface XRWebGLLayer { interface XRWebGLLayer {
// Attributes // Attributes
[SameObject] readonly attribute XRWebGLRenderingContext context;
readonly attribute boolean antialias; readonly attribute boolean antialias;
readonly attribute boolean ignoreDepthValues; readonly attribute boolean ignoreDepthValues;

View file

@ -813,10 +813,6 @@ LAYOUTTESTS APIS: permissions/test-background-fetch-permission.html
LAYOUTTESTS APIS: resources/chromium/generic_sensor_mocks.js LAYOUTTESTS APIS: resources/chromium/generic_sensor_mocks.js
LAYOUTTESTS APIS: resources/chromium/webxr-test.js LAYOUTTESTS APIS: resources/chromium/webxr-test.js
# Gecko additons to remove
CSS-COLLIDING-REF-NAME: css/css-contain/reference/contain-size-fieldset-001-ref.html
CSS-COLLIDING-REF-NAME: css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-001-ref.html
# Signed Exchange files have hard-coded URLs in the certUrl field # Signed Exchange files have hard-coded URLs in the certUrl field
WEB-PLATFORM.TEST:signed-exchange/resources/*.sxg WEB-PLATFORM.TEST:signed-exchange/resources/*.sxg
WEB-PLATFORM.TEST:signed-exchange/appcache/resources/*.sxg WEB-PLATFORM.TEST:signed-exchange/appcache/resources/*.sxg

View file

@ -1,21 +1,20 @@
// META: script=/resources/WebIDLParser.js // META: script=/resources/WebIDLParser.js
// META: script=/resources/idlharness.js // META: script=/resources/idlharness.js
// https://w3c.github.io/longtask-timing/ // https://w3c.github.io/longtasks/
'use strict'; 'use strict';
promise_test(async t => { idl_test(
const srcs = ['longtasks', 'performance-timeline']; ['longtasks'],
const [idl, perf] = await Promise.all( ['performance-timeline'],
srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text()))); (idl_array, t) => new Promise((resolve, reject) => {
const longTask = () => {
const begin = self.performance.now();
while (self.performance.now() < begin + 100);
}
t.step_timeout(longTask, 0);
const idl_array = new IdlArray();
idl_array.add_idls(idl);
idl_array.add_dependency_idls(perf);
const testIdls = new Promise(resolve => {
try {
const observer = new PerformanceObserver(entryList => { const observer = new PerformanceObserver(entryList => {
const entries = Array.from(entryList.getEntries()); const entries = Array.from(entryList.getEntries());
const attribution = entries.reduce( const attribution = entries.reduce(
@ -24,28 +23,12 @@ promise_test(async t => {
PerformanceLongTaskTiming: entries, PerformanceLongTaskTiming: entries,
TaskAttributionTiming: attribution, TaskAttributionTiming: attribution,
}); });
idl_array.test();
resolve(); resolve();
}); });
observer.observe({entryTypes: ['longtask']}); observer.observe({entryTypes: ['longtask']});
} catch (e) {
// Will be surfaces in idlharness.js's test_object below.
}
});
const longTask = () => { t.step_timeout(() => {
var begin = self.performance.now(); reject('longtask entry was not observed');
while (self.performance.now() < begin + 100); }, 1000);
} })
t.step_timeout(longTask, 0); );
const timeout = new Promise(
(_, reject) => t.step_timeout(reject, 1000));
return Promise.race([testIdls, timeout])
.then(
t.step_func_done(),
() => {
idl_array.test(); // Rejected, but test what we can.
return Promise.reject('LongTask was not observed');
});
}, 'longtasks interfaces');

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<html>
<head>
<title>mo movablelimits default value</title>
<meta charset="utf-8"/></head>
<body>
<math>
<munder>
<mo movablelimits="true"></mo>
<mi>x</mi>
</munder>
<munder>
<mo movablelimits="false"></mo>
<mi>x</mi>
</munder>
</math>
</body>
</html>

View file

@ -0,0 +1,22 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>&lt;mo&gt; movablelimits default value</title>
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#tokenmo">
<meta name="assert" content="Verifies default value of movablelimits for some operators.">
<link rel="match" href="mo-movablelimits-default-ref.html">
</head>
<body>
<math>
<munder>
<mo></mo> <!-- This has movablelimits="true" in the operator dictionary -->
<mi>x</mi>
</munder>
<munder>
<mo></mo> <!-- This has movablelimits="false" in the operator dictionary -->
<mi>x</mi>
</munder>
</math>
</body>
</html>

View file

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Test dynamically removing movablelimits attribute</title>
</head>
<body>
<math>
<munder>
<mo></mo>
<mi>x</mi>
</munder>
</math>
</body>
</html>

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<html class="reftest-wait">
<head>
<meta charset="utf-8"/>
<title>Test dynamically removing movablelimits attribute</title>
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#tokenmo">
<meta name="assert" content="Verifies dynamically removing movablelimits.">
<link rel="match" href="mo-movablelimits-dynamic-ref.html">
<script>
window.addEventListener("load", () => {
document.getElementById('a').removeAttribute('movablelimits');
document.documentElement.classList.remove('reftest-wait');
});
</script>
</head>
<body>
<math>
<munder>
<mo id="a" movablelimits="false"></mo>
<mi>x</mi>
</munder>
</math>
</body>
</html>

View file

@ -0,0 +1,29 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>&lt;mo&gt; movablelimits</title>
</head>
<body>
<math>
<msub>
<mtext>A</mtext>
<mi>B</mi>
</msub>
<munder>
<mtext>A</mtext>
<mi>B</mi>
</munder>
</math>
<math displaystyle="true">
<munder>
<mtext>A</mtext>
<mi>B</mi>
</munder>
<munder>
<mtext>A</mtext>
<mi>B</mi>
</munder>
</math>
</body>
</html>

View file

@ -0,0 +1,32 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>&lt;mo&gt; movablelimits</title>
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#tokenmo">
<meta name="assert" content="Verifies effect of movablelimits on mo in both displaystyle modes.">
<link rel="match" href="mo-movablelimits-ref.html">
</head>
<body>
<math>
<munder>
<mo lspace="0px" rspace="0px" movablelimits="true">A</mo>
<mi>B</mi>
</munder>
<munder>
<mo lspace="0px" rspace="0px" movablelimits="false">A</mo>
<mi>C</mi>
</munder>
</math>
<math displaystyle="true">
<munder>
<mo lspace="0px" rspace="0px" movablelimits="true">A</mo>
<mi>B</mi>
</munder>
<munder>
<mo lspace="0px" rspace="0px" movablelimits="false">A</mo>
<mi>B</mi>
</munder>
</math>
</body>
</html>

View file

@ -0,0 +1,19 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Verify mathsize attribute</title>
</head>
<body>
<!-- The style attribute should have the same effect as the mathsize
attribute. -->
<div>
<math>
<mi style="font-size: 200%;">x</mi>
<mi style="font-size: 3em;">x</mi>
</math>
</div>
</body>
</html>

View file

@ -0,0 +1,21 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Verify mathsize attribute</title>
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#legacy-mathml-style-attributes">
<meta name="assert" content="Verify mathsize attribute values.">
<link rel="match" href="mathsize-attribute-ref.html">
</head>
<body>
<!-- This verifies the effect of the mathsize attribute. -->
<div>
<math>
<mi mathsize="200%">x</mi>
<mi mathsize="3em">x</mi>
</math>
</div>
</body>
</html>

View file

@ -0,0 +1,18 @@
<!DOCTYPE quirks-mode>
<link rel="help" href="https://quirks.spec.whatwg.org/#the-body-element-fills-the-html-element-quirk">
<link rel="match" href="body-fills-html-quirk-ref.html">
<style>
body {
border: solid;
float: left;
}
span {
display: inline-block;
width: 100px;
height: 100px;
background: green;
}
</style>
<body>
<span></span>
</body>

View file

@ -0,0 +1,18 @@
<!DOCTYPE quirks-mode>
<link rel="help" href="https://quirks.spec.whatwg.org/#the-body-element-fills-the-html-element-quirk">
<link rel="match" href="body-fills-html-quirk-ref.html">
<style>
body {
border: solid;
display: inline-block;
}
span {
display: inline-block;
width: 100px;
height: 100px;
background: green;
}
</style>
<body>
<span></span>
</body>

View file

@ -0,0 +1,18 @@
<!DOCTYPE quirks-mode>
<link rel="help" href="https://quirks.spec.whatwg.org/#the-body-element-fills-the-html-element-quirk">
<link rel="match" href="body-fills-html-quirk-ref.html">
<style>
body {
border: solid;
position: absolute;
}
span {
display: inline-block;
width: 100px;
height: 100px;
background: green;
}
</style>
<body>
<span></span>
</body>

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<div style="width: 100px; height: 100px; border: solid; background: green;"></div>

View file

@ -0,0 +1,17 @@
<style>
table {
font-size: 10px;
font-family: Ahem;
}
img {
vertical-align: bottom;
width: 10px;
height: 10px;
background: black;
}
</style>
<table>
<tr>
<td id="td">1234567<img id="img" src=""></td>
</tr>
</table>

View file

@ -0,0 +1,20 @@
<title>An out-of-flow imagef in the table cell width calculation quirk</title>
<link rel="match" href="reference/table-cell-width-calculation-abspos-ref.html">
<link rel="author" title="Koji Ishii" href="mailto:kojii@chromium.org">
<style>
table {
font-size: 10px;
font-family: Ahem;
}
img {
position: absolute;
width: 10px;
height: 10px;
background: black;
}
</style>
<table>
<tr>
<td id="td">1234567<img id="img" src=""></td>
</tr>
</table>

View file

@ -1,52 +0,0 @@
// META: title=SMS Receiver API: Constructor
'use strict';
test(function() {
let used = false;
new SMSReceiver({
get timeout() {
used = true;
return 60;
}
});
assert_true(used, 'constructor options "timeout" member was used');
}, 'constructor uses timeout property');
test(function() {
assert_throws(new TypeError(), function () {
new SMSReceiver({timeout: 0});
assert_unreached('Timeout 0 should reject');
});
}, 'constructor throws with invalid timeout (0)');
test(function() {
assert_throws(new TypeError(), function () {
new SMSReceiver({timeout: null});
assert_unreached('Timeout of null should reject');
});
}, 'constructor throws with invalid timeout (null)');
test(function() {
assert_throws(new TypeError(), function () {
new SMSReceiver({timeout: -1});
assert_unreached('Timeout negative numbers should reject');
});
}, 'constructor throws with invalid timeout (-1)');
test(function() {
assert_throws(new TypeError(), function () {
new SMSReceiver({timeout: NaN});
assert_unreached('Timeout of NaN should reject');
});
}, 'constructor throws with invalid timeout (NaN)');
test(function() {
new SMSReceiver();
}, 'constructor uses a default value for the timeout when none is passed');
test(function() {
new SMSReceiver({timeout: undefined});
}, 'constructor uses a default value for the timeout');

View file

@ -19,12 +19,12 @@ promise_test(async (t) => {
idl_array.add_dependency_idls(dom); idl_array.add_dependency_idls(dom);
idl_array.add_dependency_idls(html); idl_array.add_dependency_idls(html);
self.receiver = new SMSReceiver({timeout: 60});
idl_array.add_objects({ idl_array.add_objects({
SmsReceiver: ['receiver'], SmsReceiver: ['navigator.sms'],
}); });
idl_array.add_objects({ Navigator: ['navigator'] })
idl_array.test(); idl_array.test();
}, 'Test IDL implementation of the SMS Receiver API'); }, 'Test IDL implementation of the SMS Receiver API');

View file

@ -15,7 +15,7 @@
await expect(getNextMessage).andReturn((timeout) => { await expect(getNextMessage).andReturn((timeout) => {
// mock behavior // mock behavior
}) })
3) Call new SMSReceiver().start(); 3) Call navigator.sms.receive()
4) Verify results 4) Verify results
The mocking API is browser agnostic and is designed such that other engines The mocking API is browser agnostic and is designed such that other engines
@ -25,7 +25,7 @@
per engine: per engine:
- function getNextMessage(): the main/only function that can be mocked. - function getNextMessage(): the main/only function that can be mocked.
- function expect(): the main/only function that enables us to mock it. - function expect(): the main/only function that enables us to mock it
- enum State {kSuccess, kTimeout}: allows you to mock success/failures. - enum State {kSuccess, kTimeout}: allows you to mock success/failures.
--> -->
@ -43,37 +43,140 @@ promise_test(async t => {
}); });
}); });
let receiver = new SMSReceiver(); let sms = await navigator.sms.receive();
let watcher = new EventWatcher(t, receiver, ["change"]); assert_equals(sms.content, "hello");
await receiver.start();
// Waits for the first event.
await watcher.wait_for("change");
assert_equals(receiver.sms.content, "hello");
}, 'Basic usage'); }, 'Basic usage');
promise_test(async t => { promise_test(async t => {
await expect(getNextMessage).andReturn((timeout) => { await expect(getNextMessage).andReturn((timeout) => {
return Promise.resolve({ return Promise.resolve({
sms: { sms: {
content: "", content: "hello1",
status: Status.kSuccess,
}
});
});
await expect(getNextMessage).andReturn((timeout) => {
return Promise.resolve({
sms: {
content: "hello2",
status: Status.kSuccess,
}
});
});
let sms1 = navigator.sms.receive();
let sms2 = navigator.sms.receive();
let msg2 = await sms2;
let msg1 = await sms1;
assert_equals(msg1.content, "hello1");
assert_equals(msg2.content, "hello2");
}, 'Handle multiple requests in different order.');
promise_test(async t => {
await expect(getNextMessage).andReturn((timeout) => {
return Promise.resolve({
sms: {
status: Status.kTimeout
}
});
});
await expect(getNextMessage).andReturn((timeout) => {
return Promise.resolve({
sms: {
content: "success",
status: Status.kSuccess
}
});
});
let timeout_sms = navigator.sms.receive();
let successful_sms = navigator.sms.receive();
let successful_msg = await successful_sms;
assert_equals(successful_msg.content, "success");
try {
await timeout_sms;
assert_unreached('Expected TimeoutError to be thrown.');
} catch (error) {
assert_equals(error.name, "TimeoutError");
assert_equals(error.message, "SMSReceiver timed out.");
}
}, 'Handle multiple requests with success and error.');
promise_test(async t => {
await expect(getNextMessage).andReturn((timeout) => {
return Promise.resolve({
sms: {
status: Status.kTimeout, status: Status.kTimeout,
} }
}); });
}); });
let receiver = new SMSReceiver(); try {
await navigator.sms.receive();
let watcher = new EventWatcher(t, receiver, ["timeout"]); assert_unreached('Expected TimeoutError to be thrown.');
} catch (error) {
await receiver.start(); assert_equals(error.name, "TimeoutError");
assert_equals(error.message, "SMSReceiver timed out.");
// Waits for the first event. }
await watcher.wait_for("timeout");
}, 'Deal with timeouts'); }, 'Deal with timeouts');
promise_test(async t => {
try {
await navigator.sms.receive({timeout: 0});
assert_unreached('Expected NotSupportedError to be thrown.');
} catch (error) {
assert_equals(error.name, "NotSupportedError");
assert_equals(error.message, "Invalid timeout.");
}
}, 'Should throw error with invalid timeout (0)');
promise_test(async t => {
try {
await navigator.sms.receive({timeout: null});
assert_unreached('Expected NotSupportedError to be thrown.');
} catch (error) {
assert_equals(error.name, "NotSupportedError");
assert_equals(error.message, "Invalid timeout.");
}
}, 'Should throw error with invalid timeout (null)');
promise_test(async t => {
try {
await navigator.sms.receive({timeout: -1});
assert_unreached('Expected NotSupportedError to be thrown.');
} catch (error) {
assert_equals(error.name, "NotSupportedError");
assert_equals(error.message, "Invalid timeout.");
}
}, 'Should throw error with invalid timeout (-1)');
promise_test(async t => {
try {
await navigator.sms.receive({timeout: NaN});
assert_unreached('Expected NotSupportedError to be thrown.');
} catch (error) {
assert_equals(error.name, "NotSupportedError");
assert_equals(error.message, "Invalid timeout.");
}
}, 'Should throw error with invalid timeout (NaN)');
promise_test(async t => {
await expect(getNextMessage).andReturn((timeout) => {
return Promise.resolve({
sms: {
content: "hello",
status: Status.kSuccess,
}
});
});
let sms = await navigator.sms.receive({timeout: undefined});
assert_equals(sms.content, "hello");
}, 'Should use default value for timeout (undefined)');
</script> </script>

View file

@ -1,7 +1,7 @@
<script> <script>
'use strict'; 'use strict';
new SMSReceiver().start().catch(error => { navigator.sms.receive().catch(error => {
window.parent.postMessage({errorType: error.name}, '*'); window.parent.postMessage({errorType: error.name}, '*');
}); });

View file

@ -20,38 +20,34 @@ let interceptor = (async function() {
})(); })();
class SmsProvider { class SmsProvider {
constructor() {
this.returnValues = {}
}
getNextMessage(timeout) { getNextMessage(timeout) {
return this.handler.getNextMessage(timeout); let call = this.returnValues.getNextMessage.shift();
if (!call) {
throw new Error("Unexpected call.");
} }
setHandler(handler) { return call(timeout);
this.handler = handler; }
pushReturnValues(callName, returnValues) {
this.returnValues[callName] = this.returnValues[callName] || [];
this.returnValues[callName].push(returnValues);
return this; return this;
} }
setBinding(binding) {
this.binding = binding;
return this;
}
close() {
this.binding.close();
}
} }
function getNextMessage(timeout, callback) { function getNextMessage(timeout, callback) {
throw new Error("expected to be overriden by tests"); throw new Error("expected to be overriden by tests");
} }
async function close() {
let provider = await interceptor;
provider.close();
}
function expect(call) { function expect(call) {
return { return {
async andReturn(callback) { async andReturn(callback) {
let handler = {};
handler[call.name] = callback;
let provider = await interceptor; let provider = await interceptor;
provider.setHandler(handler); provider.pushReturnValues(call.name, callback);
} }
} }
} }
@ -61,7 +57,8 @@ const Status = {};
function intercept() { function intercept() {
let provider = new SmsProvider(); let provider = new SmsProvider();
let interceptor = new MojoInterfaceInterceptor(blink.mojom.SmsManager.$interfaceName); let interceptor = new MojoInterfaceInterceptor(
blink.mojom.SmsManager.$interfaceName);
interceptor.oninterfacerequest = (e) => { interceptor.oninterfacerequest = (e) => {
let impl = new blink.mojom.SmsManager(provider); let impl = new blink.mojom.SmsManager(provider);
impl.bindHandle(e.handle); impl.bindHandle(e.handle);

View file

@ -1,3 +1,10 @@
[SecureContext]
interface mixin NavigatorSMS {
readonly attribute SMSReceiver sms;
};
Navigator includes NavigatorSMS;
[ [
SecureContext, SecureContext,
Exposed=(Window,DedicatedWorker)] Exposed=(Window,DedicatedWorker)]
@ -11,10 +18,7 @@ dictionary SMSReceiverOptions {
[ [
SecureContext, SecureContext,
Exposed=(Window,DedicatedWorker), Exposed=Window
Constructor(optional SMSReceiverOptions options) ] interface SMSReceiver {
] interface SMSReceiver : EventTarget { Promise<SMS> receive(optional SMSReceiverOptions options);
readonly attribute SMS sms;
attribute EventHandler onchange;
Promise<void> start();
}; };

View file

@ -32,18 +32,6 @@ function modifies_relevant_files {
grep -E --silent '^(docs|tools)/' grep -E --silent '^(docs|tools)/'
} }
if is_pull_request ; then
echo Submission comes from a pull request. Exiting without building.
exit ${neutral_status}
fi
if ! targets_master ; then
echo Submission does not target the 'master' branch. Exiting without building.
exit ${neutral_status}
fi
if ! modifies_relevant_files ; then if ! modifies_relevant_files ; then
echo No files related to the website have been modified. Exiting without echo No files related to the website have been modified. Exiting without
echo building. echo building.
@ -78,6 +66,18 @@ touch .nojekyll
# Publish the website by pushing the built contents to the `gh-pages` branch # Publish the website by pushing the built contents to the `gh-pages` branch
git add . git add .
if is_pull_request ; then
echo Submission comes from a pull request. Exiting without publishing.
exit ${neutral_status}
fi
if ! targets_master ; then
echo Submission does not target the 'master' branch. Exiting without publishing.
exit ${neutral_status}
fi
if git diff --exit-code --quiet --staged ; then if git diff --exit-code --quiet --staged ; then
echo No change to the website contents. Exiting without publishing. echo No change to the website contents. Exiting without publishing.

View file

@ -26,9 +26,17 @@
non_strings.forEach(invalid_serialNumber => { non_strings.forEach(invalid_serialNumber => {
assert_throws(new TypeError, () => new NFCReadingEvent( assert_throws(new TypeError, () => new NFCReadingEvent(
'message', 'message',
{invalid_serialNumber, message} {serialNumber: invalid_serialNumber, message: message}
)); ));
}); });
}, 'NFCReadingEvent constructor with non-string serialNumber'); }, 'NFCReadingEvent constructor with invalid serialNumber');
test(() => {
const message = createMessage([createJsonRecord(test_json_data)]);
const event = new NFCReadingEvent('type', {serialNumber: '', message: message});
assert_equals(event.type, 'type', 'type');
assert_equals(event.serialNumber, '', 'serialNumber');
assertWebNDEFMessagesEqual(event.message, message, 'message');
}, 'NFCReadingEvent constructor with valid parameters');
</script> </script>

View file

@ -254,6 +254,9 @@ async function doSignalingHandshake(localPc, remotePc, options={}) {
// This should work for RTCSctpTransport, RTCDtlsTransport and RTCIceTransport. // This should work for RTCSctpTransport, RTCDtlsTransport and RTCIceTransport.
function waitForState(transport, state) { function waitForState(transport, state) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (transport.state == state) {
resolve();
}
const eventHandler = () => { const eventHandler = () => {
if (transport.state == state) { if (transport.state == state) {
transport.removeEventListener('statechange', eventHandler, false); transport.removeEventListener('statechange', eventHandler, false);

View file

@ -277,4 +277,41 @@ async_test(t => {
closed closed
The RTCIceTransport has shut down and is no longer responding to STUN requests. The RTCIceTransport has shut down and is no longer responding to STUN requests.
*/ */
for (let bundle_policy of ['balanced', 'max-bundle', 'max-compat']) {
promise_test(async t => {
const caller = new RTCPeerConnection({bundlePolicy: bundle_policy});
t.add_cleanup(() => caller.close());
const stream = await navigator.mediaDevices.getUserMedia(
{audio: true, video:true});
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
const [track1, track2] = stream.getTracks();
const sender1 = caller.addTrack(track1);
const sender2 = caller.addTrack(track2);
caller.createDataChannel('datachannel');
const callee = new RTCPeerConnection();
t.add_cleanup(() => callee.close());
coupleIceCandidates(caller, callee);
const offer = await caller.createOffer();
await caller.setLocalDescription(offer);
const [caller_transceiver1, caller_transceiver2] = caller.getTransceivers();
assert_equals(sender1.transport, caller_transceiver1.sender.transport);
await callee.setRemoteDescription(offer);
const [callee_transceiver1, callee_transceiver2] = callee.getTransceivers();
const answer = await callee.createAnswer();
await callee.setLocalDescription(answer);
await caller.setRemoteDescription(answer);
// At this point, we should have a single ICE transport, and it
// should eventually get to the "connected" state.
await waitForState(caller_transceiver1.receiver.transport.iceTransport,
'connected');
// The PeerConnection's iceConnectionState should therefore be 'connected'
assert_equals(caller.iceConnectionState, 'connected',
'PC.iceConnectionState:');
}, 'iceConnectionState changes at the right time, with bundle policy ' +
bundle_policy);
}
</script> </script>

View file

@ -26,15 +26,36 @@ function iceGatheringCompleteWaiter(pc) {
return waiter; return waiter;
} }
class StateLogger {
constructor(source, eventname, field) {
source.addEventListener(eventname, event => {
this.events.push(source[field]);
});
this.events = [source[field]];
}
}
class IceStateLogger extends StateLogger {
constructor(source) {
super(source, 'iceconnectionstatechange', 'iceConnectionState');
}
}
promise_test(async t => { promise_test(async t => {
const pc1 = new RTCPeerConnection(); const pc1 = new RTCPeerConnection();
const pc2 = new RTCPeerConnection(); const pc2 = new RTCPeerConnection();
t.add_cleanup(() => pc1.close()); t.add_cleanup(() => pc1.close());
t.add_cleanup(() => pc2.close()); t.add_cleanup(() => pc2.close());
pc1.createDataChannel('datachannel'); pc1.createDataChannel('datachannel');
pc1IceStates = new IceStateLogger(pc1);
pc2IceStates = new IceStateLogger(pc1);
coupleIceCandidates(pc1, pc2); coupleIceCandidates(pc1, pc2);
await doSignalingHandshake(pc1, pc2); await doSignalingHandshake(pc1, pc2);
await waitForIceStateChange(pc1, ['connected', 'completed']); // Note - it's been claimed that this state sometimes jumps straight
// to "completed". If so, this test should be flaky.
await waitForIceStateChange(pc1, ['connected']);
assert_array_equals(pc1IceStates.events, ['new', 'checking', 'connected']);
assert_array_equals(pc2IceStates.events, ['new', 'checking', 'connected']);
}, 'Two way ICE exchange works'); }, 'Two way ICE exchange works');
promise_test(async t => { promise_test(async t => {
@ -42,6 +63,8 @@ promise_test(async t => {
const pc2 = new RTCPeerConnection(); const pc2 = new RTCPeerConnection();
t.add_cleanup(() => pc1.close()); t.add_cleanup(() => pc1.close());
t.add_cleanup(() => pc2.close()); t.add_cleanup(() => pc2.close());
pc1IceStates = new IceStateLogger(pc1);
pc2IceStates = new IceStateLogger(pc1);
let candidates = []; let candidates = [];
pc1.createDataChannel('datachannel'); pc1.createDataChannel('datachannel');
pc1.onicecandidate = e => { pc1.onicecandidate = e => {
@ -62,6 +85,8 @@ promise_test(async t => {
const candidate_pair = pc1.sctp.transport.iceTransport.getSelectedCandidatePair(); const candidate_pair = pc1.sctp.transport.iceTransport.getSelectedCandidatePair();
assert_equals(candidate_pair.local.type, 'host'); assert_equals(candidate_pair.local.type, 'host');
assert_equals(candidate_pair.remote.type, 'prflx'); assert_equals(candidate_pair.remote.type, 'prflx');
assert_array_equals(pc1IceStates.events, ['new', 'checking', 'connected']);
assert_array_equals(pc2IceStates.events, ['new', 'checking', 'connected']);
}, 'Adding only caller -> callee candidates gives a connection'); }, 'Adding only caller -> callee candidates gives a connection');
promise_test(async t => { promise_test(async t => {
@ -69,6 +94,8 @@ promise_test(async t => {
const pc2 = new RTCPeerConnection(); const pc2 = new RTCPeerConnection();
t.add_cleanup(() => pc1.close()); t.add_cleanup(() => pc1.close());
t.add_cleanup(() => pc2.close()); t.add_cleanup(() => pc2.close());
pc1IceStates = new IceStateLogger(pc1);
pc2IceStates = new IceStateLogger(pc1);
let candidates = []; let candidates = [];
pc1.createDataChannel('datachannel'); pc1.createDataChannel('datachannel');
pc2.onicecandidate = e => { pc2.onicecandidate = e => {
@ -89,8 +116,92 @@ promise_test(async t => {
const candidate_pair = pc2.sctp.transport.iceTransport.getSelectedCandidatePair(); const candidate_pair = pc2.sctp.transport.iceTransport.getSelectedCandidatePair();
assert_equals(candidate_pair.local.type, 'host'); assert_equals(candidate_pair.local.type, 'host');
assert_equals(candidate_pair.remote.type, 'prflx'); assert_equals(candidate_pair.remote.type, 'prflx');
assert_array_equals(pc1IceStates.events, ['new', 'checking', 'connected']);
assert_array_equals(pc2IceStates.events, ['new', 'checking', 'connected']);
}, 'Adding only callee -> caller candidates gives a connection'); }, 'Adding only callee -> caller candidates gives a connection');
promise_test(async t => {
const pc1 = new RTCPeerConnection();
const pc2 = new RTCPeerConnection();
t.add_cleanup(() => pc1.close());
t.add_cleanup(() => pc2.close());
pc1IceStates = new IceStateLogger(pc1);
pc2IceStates = new IceStateLogger(pc1);
let pc2ToPc1Candidates = [];
pc1.createDataChannel('datachannel');
pc2.onicecandidate = e => {
pc2ToPc1Candidates.push(e.candidate);
// This particular test verifies that candidates work
// properly if added from the pc2 onicecandidate event.
if (!e.candidate) {
for (const candidate of pc2ToPc1Candidates) {
if (candidate) {
pc1.addIceCandidate(candidate);
}
}
}
}
// Candidates from |pc1| are not delivered to |pc2|. |pc2| will use
// peer-reflexive candidates.
await doSignalingHandshake(pc1, pc2);
await Promise.all([waitForIceStateChange(pc1, ['connected', 'completed']),
waitForIceStateChange(pc2, ['connected', 'completed'])]);
const candidate_pair = pc2.sctp.transport.iceTransport.getSelectedCandidatePair();
assert_equals(candidate_pair.local.type, 'host');
assert_equals(candidate_pair.remote.type, 'prflx');
assert_array_equals(pc1IceStates.events, ['new', 'checking', 'connected']);
assert_array_equals(pc2IceStates.events, ['new', 'checking', 'connected']);
}, 'Adding callee -> caller candidates from end-of-candidates gives a connection');
promise_test(async t => {
const pc1 = new RTCPeerConnection();
const pc2 = new RTCPeerConnection();
t.add_cleanup(() => pc1.close());
t.add_cleanup(() => pc2.close());
pc1IceStates = new IceStateLogger(pc1);
pc2IceStates = new IceStateLogger(pc1);
let pc1ToPc2Candidates = [];
let pc2ToPc1Candidates = [];
pc1.createDataChannel('datachannel');
pc1.onicecandidate = e => {
pc1ToPc2Candidates.push(e.candidate);
}
pc2.onicecandidate = e => {
pc2ToPc1Candidates.push(e.candidate);
}
const offer = await pc1.createOffer();
await Promise.all([pc1.setLocalDescription(offer),
pc2.setRemoteDescription(offer)]);
const answer = await pc2.createAnswer();
await iceGatheringCompleteWaiter(pc1);
await pc2.setLocalDescription(answer).then(() => {
for (const candidate of pc1ToPc2Candidates) {
if (candidate) {
pc2.addIceCandidate(candidate);
}
}
});
await iceGatheringCompleteWaiter(pc2);
pc1.setRemoteDescription(answer).then(async () => {
for (const candidate of pc2ToPc1Candidates) {
if (candidate) {
await pc1.addIceCandidate(candidate);
}
}
});
await Promise.all([waitForIceStateChange(pc1, ['connected', 'completed']),
waitForIceStateChange(pc2, ['connected', 'completed'])]);
const candidate_pair =
pc1.sctp.transport.iceTransport.getSelectedCandidatePair();
assert_equals(candidate_pair.local.type, 'host');
// When we supply remote candidates, we expect a jump to the 'host' candidate,
// but it might also remain as 'prflx'.
assert_true(candidate_pair.remote.type == 'host' ||
candidate_pair.remote.type == 'prflx');
assert_array_equals(pc1IceStates.events, ['new', 'checking', 'connected']);
assert_array_equals(pc2IceStates.events, ['new', 'checking', 'connected']);
}, 'Explicit offer/answer exchange gives a connection');
</script> </script>
</body> </body>
</html> </html>