mirror of
https://github.com/servo/servo.git
synced 2025-06-27 02:23:41 +01:00
Update web-platform-tests to revision 887d08e63a19b14acf3217df77f12c121a792fed
This commit is contained in:
parent
97ad913dc2
commit
a41065a1f4
65 changed files with 1433 additions and 463 deletions
|
@ -34,6 +34,3 @@
|
|||
[Revoke blob URL after creating Request, will fetch]
|
||||
expected: FAIL
|
||||
|
||||
[Revoke blob URL after calling fetch, fetch should succeed]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -233980,6 +234088,9 @@
|
|||
"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": [
|
||||
[]
|
||||
],
|
||||
|
@ -248050,6 +248161,9 @@
|
|||
"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": [
|
||||
[]
|
||||
],
|
||||
|
@ -270760,6 +270874,15 @@
|
|||
"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": [
|
||||
[]
|
||||
],
|
||||
|
@ -270781,6 +270904,9 @@
|
|||
"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": [
|
||||
[]
|
||||
],
|
||||
|
@ -272485,6 +272611,9 @@
|
|||
"quirks/META.yml": [
|
||||
[]
|
||||
],
|
||||
"quirks/body-fills-html-quirk-ref.html": [
|
||||
[]
|
||||
],
|
||||
"quirks/hashless-hex-color/support/common.js": [
|
||||
[]
|
||||
],
|
||||
|
@ -272500,6 +272629,9 @@
|
|||
"quirks/reference/green-100px-square-no-red.html": [
|
||||
[]
|
||||
],
|
||||
"quirks/reference/table-cell-width-calculation-abspos-ref.html": [
|
||||
[]
|
||||
],
|
||||
"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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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.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",
|
||||
|
@ -502970,6 +503114,14 @@
|
|||
"9233b4373e5e4dc5beb6713a9af1de861c5cf4d9",
|
||||
"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": [
|
||||
"ba7e87c6a7c18a9335b51e07052ab47631299c9b",
|
||||
"support"
|
||||
|
@ -550914,6 +551066,14 @@
|
|||
"228604ee357d22027c1691bf2baf27a52729222b",
|
||||
"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": [
|
||||
"f21dfff69608a6a1201bd586c2a6e1e24d5fd915",
|
||||
"support"
|
||||
|
@ -555562,6 +555722,10 @@
|
|||
"3e8899a94099983b147f0877a6d45a17341a0364",
|
||||
"testharness"
|
||||
],
|
||||
"css/css-position/position-absolute-chrome-bug-002.html": [
|
||||
"5fef5205f94576cc4834f98a2cb1f2007df94974",
|
||||
"testharness"
|
||||
],
|
||||
"css/css-position/position-absolute-container-dynamic-002.html": [
|
||||
"91d862835e6d1351deefb26f7e2b71a9539bbd6c",
|
||||
"testharness"
|
||||
|
@ -567790,6 +567954,10 @@
|
|||
"9d6b2c2bc7d0cde02d992f741884bf702c0398a4",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-text/white-space/append-whitespace-only-node-crash-001.html": [
|
||||
"b32555b18876898beb1b3b7b4559268d64ae9c1c",
|
||||
"testharness"
|
||||
],
|
||||
"css/css-text/white-space/break-spaces-001.html": [
|
||||
"f3b881afc1074db7511acbc419e5083ebde3413e",
|
||||
"reftest"
|
||||
|
@ -587270,6 +587438,10 @@
|
|||
"899e411bdd302f2995a9d337ac5a3f89bd1c709b",
|
||||
"testharness"
|
||||
],
|
||||
"css/cssom-view/elementFromPoint-subpixel.html": [
|
||||
"ff67aa2e7f32aa56cc316a11302882caccfe69b6",
|
||||
"testharness"
|
||||
],
|
||||
"css/cssom-view/elementFromPoint.html": [
|
||||
"466fb5cb0a004e35cd74638a5187b01da9ca0a4d",
|
||||
"testharness"
|
||||
|
@ -588010,6 +588182,10 @@
|
|||
"e66466e7a11b7883f9ad9de84d9cedc27ac3ea61",
|
||||
"testharness"
|
||||
],
|
||||
"css/cssom/cssstyledeclaration-setter-form-controls.html": [
|
||||
"ae556ed1cbec68c757188518e2cf6cd4ebd5cd05",
|
||||
"testharness"
|
||||
],
|
||||
"css/cssom/cssstyledeclaration-setter-logical.html": [
|
||||
"13d68e9a70229861dc1109972caa541147adb859",
|
||||
"testharness"
|
||||
|
@ -602143,7 +602319,7 @@
|
|||
"support"
|
||||
],
|
||||
"docs/writing-tests/index.md": [
|
||||
"20292fd33a3db279316355f8b5012070d41bc3b7",
|
||||
"9680a359b27197f4acc8c08a786ddb1823b90a7a",
|
||||
"support"
|
||||
],
|
||||
"docs/writing-tests/lint-tool.md": [
|
||||
|
@ -604587,7 +604763,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"element-timing/background-image-multiple-elements.html": [
|
||||
"24f72a67c34d0cc5323c6d4a0acb2e25085ec87a",
|
||||
"084bb9ca0205815a1c7ad7764ce1979485e88435",
|
||||
"testharness"
|
||||
],
|
||||
"element-timing/background-image-stretched.html": [
|
||||
|
@ -604687,7 +604863,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"element-timing/observe-text.html": [
|
||||
"a9a0e30adf353f342ad8bb6a2300ea90beb5d9fa",
|
||||
"16382edaa9da45c246f34443ce3e70b7177f9203",
|
||||
"testharness"
|
||||
],
|
||||
"element-timing/observe-video-poster.html": [
|
||||
|
@ -627102,6 +627278,10 @@
|
|||
"ca6900744dcf3a07d98ddaa17b4173fd4bed5fb9",
|
||||
"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": [
|
||||
"db03612e82b42b6bd3294ced7468bb6c8b702520",
|
||||
"testharness"
|
||||
|
@ -631867,7 +632047,7 @@
|
|||
"support"
|
||||
],
|
||||
"interfaces/webxr.idl": [
|
||||
"f9bfdce58425350d1404c4beaac719e04c94a498",
|
||||
"4af1c96a1847445c7559dabba20cb8a3a1de5c60",
|
||||
"support"
|
||||
],
|
||||
"interfaces/worklets.idl": [
|
||||
|
@ -632391,7 +632571,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"lint.whitelist": [
|
||||
"be52aa67c00b9484180e316d6594e31d4918087d",
|
||||
"9966d7c307b5520ab251d69f231526df762dc4ba",
|
||||
"support"
|
||||
],
|
||||
"loading/preloader-css-import-no-quote.tentative.html": [
|
||||
|
@ -632423,7 +632603,7 @@
|
|||
"support"
|
||||
],
|
||||
"longtask-timing/idlharness.window.js": [
|
||||
"96d939f04e7fbba348bf1edccf64c17c7af0535d",
|
||||
"0ef7e85440ee1fc99c05ef5be0fc1fe61f818118",
|
||||
"testharness"
|
||||
],
|
||||
"longtask-timing/longtask-attributes.html": [
|
||||
|
@ -632738,6 +632918,30 @@
|
|||
"7c11c14691162b69c1a2e854734ae6ac37db10e2",
|
||||
"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": [
|
||||
"da0b79ff9a67cbe53daeb141aaa2efd4f2eb96ad",
|
||||
"support"
|
||||
|
@ -632862,6 +633066,14 @@
|
|||
"aa38e9729de8569151b98307395ec8a2a5fe4b7f",
|
||||
"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": [
|
||||
"b883b12b57dbc99c0049ba98c8d3574524c42505",
|
||||
"support"
|
||||
|
@ -646002,6 +646214,22 @@
|
|||
"608a7c15c7996b5ed3cf534379417c3c077c4e82",
|
||||
"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": [
|
||||
"0fcad36776d5a7fe160244dc342f227b76083798",
|
||||
"testharness"
|
||||
|
@ -646062,6 +646290,10 @@
|
|||
"159d9a52a01a0b328680a530603cb496ab2d5fcf",
|
||||
"support"
|
||||
],
|
||||
"quirks/reference/table-cell-width-calculation-abspos-ref.html": [
|
||||
"3d365d25ad669f145a7e2ef5e4e6d0552713546a",
|
||||
"support"
|
||||
],
|
||||
"quirks/support/test-ref-iframe.js": [
|
||||
"e5df41d4249bc93b7458774524bf90f0a6f36be7",
|
||||
"support"
|
||||
|
@ -646074,6 +646306,10 @@
|
|||
"2ff00b9ee794c07309c05f2500b4be1b326afd7e",
|
||||
"testharness"
|
||||
],
|
||||
"quirks/table-cell-width-calculation-abspos.html": [
|
||||
"f26d06040775c8e2447ade4230fcf28ec06dee3b",
|
||||
"reftest"
|
||||
],
|
||||
"quirks/table-cell-width-calculation.html": [
|
||||
"eeb726627b78fdcbf81d3c29b9205f771bd0aca8",
|
||||
"testharness"
|
||||
|
@ -661806,20 +662042,16 @@
|
|||
"43b340dbb79f2585ef4acc4361ee94c6f22003f0",
|
||||
"testharness"
|
||||
],
|
||||
"sms/constructor.tentative.https.any.js": [
|
||||
"a624934ceeeace186038b15332d1c3c73968fbc7",
|
||||
"testharness"
|
||||
],
|
||||
"sms/idlharness.https.any.js": [
|
||||
"c030a5073a0a376a1b337e563c955f78bdad41dc",
|
||||
"0c31744937c6dbc9b292586ab8ce5f10b268f3ed",
|
||||
"testharness"
|
||||
],
|
||||
"sms/interceptor.https.html": [
|
||||
"417120a12174859110f48a99a11405b7f2c0316e",
|
||||
"4a6772f4416ab0550e451c710da1b48bbd9303d6",
|
||||
"testharness"
|
||||
],
|
||||
"sms/resources/iframe.html": [
|
||||
"44410e805f7b2857809794f582a97df0d1b0ac14",
|
||||
"9a00e84c63b9321d9e29c10aeb266ff5c0b1d5e1",
|
||||
"support"
|
||||
],
|
||||
"sms/sms-top-level-frame-only.https.html": [
|
||||
|
@ -661827,11 +662059,11 @@
|
|||
"testharness"
|
||||
],
|
||||
"sms/sms_provider.js": [
|
||||
"dd3af9b747a3207d02c596b4fb6434772f3c44e3",
|
||||
"a4759419a88670ec6e3f1cbd4ac3dcb3500ad57a",
|
||||
"support"
|
||||
],
|
||||
"sms/sms_receiver.idl": [
|
||||
"bc6fb1dc1037fc263a5a2da35d03449fee4db48b",
|
||||
"b71b6a3e0db2b74b127e4332cd83f218bb39d6aa",
|
||||
"support"
|
||||
],
|
||||
"speech-api/META.yml": [
|
||||
|
@ -666655,7 +666887,7 @@
|
|||
"support"
|
||||
],
|
||||
"tools/ci/website_build.sh": [
|
||||
"f91975719be21e7c1461e4f8603c4f34639b840f",
|
||||
"aadfcbd6a212574fa5462447072b996ae214de6b",
|
||||
"support"
|
||||
],
|
||||
"tools/conftest.py": [
|
||||
|
@ -675463,7 +675695,7 @@
|
|||
"manual"
|
||||
],
|
||||
"web-nfc/NFCReadingEvent_constructor.https.html": [
|
||||
"460e92b2508ba438a058d5ce9ab34db0d24349cf",
|
||||
"da3e4c071d1e48a43be5ee27d775721d2af88e07",
|
||||
"testharness"
|
||||
],
|
||||
"web-nfc/NFCWriter_push.https.html": [
|
||||
|
@ -678423,7 +678655,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"webrtc/RTCPeerConnection-helper.js": [
|
||||
"d859ac736ae6bf0187640dbe2148d8e0d64d9345",
|
||||
"6a4ce854db70573a368ced9889e0623b15311f72",
|
||||
"support"
|
||||
],
|
||||
"webrtc/RTCPeerConnection-iceConnectionState-disconnected.https.html": [
|
||||
|
@ -678431,7 +678663,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"webrtc/RTCPeerConnection-iceConnectionState.https.html": [
|
||||
"6d4ab50b0e266c30d6ce329e1f587886f33ae5fb",
|
||||
"385bb51719e6ee5049f700f783d0faa6753cdff7",
|
||||
"testharness"
|
||||
],
|
||||
"webrtc/RTCPeerConnection-iceGatheringState.html": [
|
||||
|
@ -678719,7 +678951,7 @@
|
|||
"support"
|
||||
],
|
||||
"webrtc/protocol/candidate-exchange.https.html": [
|
||||
"2603a02cddf3f026b09b8a233d17ff3f92bd43a1",
|
||||
"d1bc35819cee8e13485765e6f70836521dc5e7e7",
|
||||
"testharness"
|
||||
],
|
||||
"webrtc/protocol/dtls-fingerprint-validation.html": [
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[abspos-negative-margin-001.html]
|
||||
expected: FAIL
|
|
@ -74,3 +74,6 @@
|
|||
[opacity end]
|
||||
expected: FAIL
|
||||
|
||||
[outline-width end]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[elementFromPoint-subpixel.html]
|
||||
[Hit test top left corner of box]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[matchMedia-display-none-iframe.html]
|
||||
expected: ERROR
|
|
@ -2,6 +2,7 @@
|
|||
type: testharness
|
||||
|
||||
[single-byte-decoder.html?document]
|
||||
expected: TIMEOUT
|
||||
[ISO-8859-4: iso_8859-4:1988 (document.characterSet and document.inputEncoding)]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -309,15 +309,9 @@
|
|||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain;charset=gbk text/html]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -330,3 +324,9 @@
|
|||
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -38,9 +38,6 @@
|
|||
[combined text/javascript;charset=windows-1252 x/x text/javascript]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript;charset=windows-1252 text/javascript]
|
||||
expected: FAIL
|
||||
|
||||
[separate x/x;" x/y;\\" text/javascript;charset=windows-1252;" text/javascript]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -11,9 +11,6 @@
|
|||
[X-Content-Type-Options%3A%20nosniff%0C]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%20no%0D%0AX-Content-Type-Options%3A%20nosniff]
|
||||
expected: FAIL
|
||||
|
||||
[Content-Type-Options%3A%20nosniff]
|
||||
[X-Content-Type-Options%3A%20%2Cnosniff]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[traverse_the_history_3.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -1,24 +1,5 @@
|
|||
[open-features-negative-innerwidth-innerheight.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: negative values for legacy `innerwidth`, `innerheight`]
|
||||
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
|
||||
|
||||
|
|
|
@ -1,24 +1,5 @@
|
|||
[open-features-negative-screenx-screeny.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: negative values for legacy `screenx`, `screeny`]
|
||||
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
|
||||
|
||||
|
|
|
@ -1,24 +1,5 @@
|
|||
[open-features-negative-top-left.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: negative values for `top`, `left`]
|
||||
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
|
||||
|
||||
|
|
|
@ -1,24 +1,5 @@
|
|||
[open-features-negative-width-height.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: negative values for `width`, `height`]
|
||||
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
|
||||
|
||||
|
|
|
@ -1,48 +1,32 @@
|
|||
[open-features-non-integer-height.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: non-integer values for feature `height`]
|
||||
expected: FAIL
|
||||
|
||||
[features "height=405*3" should set "height=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "height=405.32" should set "height=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "height=405e1" should set "height=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "height=405/5" should set "height=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "height=405^4" should set "height=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "height=405.5" should set "height=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "height=405e-1" should set "height=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "height=405 " should set "height=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "height=405LLl" should set "height=405"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[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
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,42 +1,32 @@
|
|||
[open-features-non-integer-innerheight.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: non-integer values for legacy feature `innerheight`]
|
||||
expected: FAIL
|
||||
|
||||
[features "innerheight=405e-1" should set "height=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "innerheight=405LLl" should set "height=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "innerheight=405^4" should set "height=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "innerheight=405e1" should set "height=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "innerheight=405 " should set "height=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "innerheight=405/5" should set "height=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "innerheight=405.32" should set "height=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "innerheight=405.5" should set "height=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "innerheight=405*3" should set "height=405"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[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
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,42 +1,32 @@
|
|||
[open-features-non-integer-innerwidth.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: non-integer values for legacy feature `innerwidth`]
|
||||
expected: FAIL
|
||||
|
||||
[features "innerwidth=405e-1" should set "width=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "innerwidth=405*3" should set "width=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "innerwidth=405.5" should set "width=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "innerwidth=405e1" should set "width=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "innerwidth=405.32" should set "width=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "innerwidth=405 " should set "width=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "innerwidth=405LLl" should set "width=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "innerwidth=405/5" should set "width=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "innerwidth=405^4" should set "width=405"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[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
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,42 +1,32 @@
|
|||
[open-features-non-integer-left.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: non-integer values for feature `left`]
|
||||
expected: FAIL
|
||||
|
||||
[features "left=105e1" should set "left=105"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "left=105 " should set "left=105"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "left=105/5" should set "left=105"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "left=105e-1" should set "left=105"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "left=105^4" should set "left=105"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "left=105LLl" should set "left=105"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "left=105.32" should set "left=105"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "left=105*3" should set "left=105"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "left=105.5" should set "left=105"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[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
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,42 +1,32 @@
|
|||
[open-features-non-integer-screenx.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: non-integer values for legacy feature `screenx`]
|
||||
expected: FAIL
|
||||
|
||||
[features "screenx=105.5" should set "left=105"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "screenx=105e1" should set "left=105"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "screenx=105 " should set "left=105"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "screenx=105*3" should set "left=105"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "screenx=105e-1" should set "left=105"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "screenx=105^4" should set "left=105"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "screenx=105LLl" should set "left=105"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "screenx=105/5" should set "left=105"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "screenx=105.32" should set "left=105"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[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
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,42 +1,32 @@
|
|||
[open-features-non-integer-screeny.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: non-integer values for legacy feature `screeny`]
|
||||
expected: FAIL
|
||||
|
||||
[features "screeny=405^4" should set "height=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "screeny=405e-1" should set "height=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "screeny=405LLl" should set "height=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "screeny=405e1" should set "height=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "screeny=405 " should set "height=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "screeny=405/5" should set "height=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "screeny=405*3" should set "height=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "screeny=405.32" should set "height=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "screeny=405.5" should set "height=405"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[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
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,48 +1,32 @@
|
|||
[open-features-non-integer-width.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: non-integer values for feature `width`]
|
||||
expected: FAIL
|
||||
|
||||
[features "width=405^4" should set "width=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "width=405.5" should set "width=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "width=405e1" should set "width=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "width=405 " should set "width=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "width=405.32" should set "width=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "width=405LLl" should set "width=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "width=405*3" should set "width=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "width=405e-1" should set "width=405"]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[features "width=405/5" should set "width=405"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[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
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
[non-active-document.html]
|
||||
[DOMParser]
|
||||
expected: FAIL
|
||||
|
||||
[createHTMLDocument]
|
||||
expected: FAIL
|
||||
|
||||
[<template>]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -40,3 +40,7 @@
|
|||
|
||||
[test_height_width_larger_than_max]
|
||||
expected: FAIL
|
||||
|
||||
[test_negative_x_y]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -22,6 +22,8 @@ There's also a load of [general guidelines](general-guidelines) that apply to al
|
|||
rendering
|
||||
server-features
|
||||
submission-process
|
||||
testdriver
|
||||
testdriver-tutorial
|
||||
testharness
|
||||
visual
|
||||
wdspec
|
||||
|
|
|
@ -61,6 +61,8 @@ body {
|
|||
observedDiv2Txt = true;
|
||||
checkTextElement(entry, 'et2', 'div2', beforeRender,
|
||||
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 {
|
||||
|
|
|
@ -2,6 +2,14 @@
|
|||
<meta charset=utf-8>
|
||||
<title>Element Timing: observe text</title>
|
||||
<body>
|
||||
<style>
|
||||
body {
|
||||
margin: 20px;
|
||||
}
|
||||
p {
|
||||
font-size: 12px;
|
||||
}
|
||||
</style>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="resources/element-timing-helpers.js"></script>
|
||||
|
@ -15,7 +23,14 @@
|
|||
const observer = new PerformanceObserver(
|
||||
t.step_func_done((entryList) => {
|
||||
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']});
|
||||
|
|
|
@ -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>
|
|
@ -203,8 +203,6 @@ dictionary XRWebGLLayerInit {
|
|||
optional XRWebGLLayerInit layerInit)]
|
||||
interface XRWebGLLayer {
|
||||
// Attributes
|
||||
[SameObject] readonly attribute XRWebGLRenderingContext context;
|
||||
|
||||
readonly attribute boolean antialias;
|
||||
readonly attribute boolean ignoreDepthValues;
|
||||
|
||||
|
|
|
@ -813,10 +813,6 @@ LAYOUTTESTS APIS: permissions/test-background-fetch-permission.html
|
|||
LAYOUTTESTS APIS: resources/chromium/generic_sensor_mocks.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
|
||||
WEB-PLATFORM.TEST:signed-exchange/resources/*.sxg
|
||||
WEB-PLATFORM.TEST:signed-exchange/appcache/resources/*.sxg
|
||||
|
|
|
@ -1,21 +1,20 @@
|
|||
// META: script=/resources/WebIDLParser.js
|
||||
// META: script=/resources/idlharness.js
|
||||
|
||||
// https://w3c.github.io/longtask-timing/
|
||||
// https://w3c.github.io/longtasks/
|
||||
|
||||
'use strict';
|
||||
|
||||
promise_test(async t => {
|
||||
const srcs = ['longtasks', 'performance-timeline'];
|
||||
const [idl, perf] = await Promise.all(
|
||||
srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text())));
|
||||
idl_test(
|
||||
['longtasks'],
|
||||
['performance-timeline'],
|
||||
(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 entries = Array.from(entryList.getEntries());
|
||||
const attribution = entries.reduce(
|
||||
|
@ -24,28 +23,12 @@ promise_test(async t => {
|
|||
PerformanceLongTaskTiming: entries,
|
||||
TaskAttributionTiming: attribution,
|
||||
});
|
||||
idl_array.test();
|
||||
resolve();
|
||||
});
|
||||
observer.observe({entryTypes: ['longtask']});
|
||||
} catch (e) {
|
||||
// Will be surfaces in idlharness.js's test_object below.
|
||||
}
|
||||
});
|
||||
|
||||
const longTask = () => {
|
||||
var begin = self.performance.now();
|
||||
while (self.performance.now() < begin + 100);
|
||||
}
|
||||
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');
|
||||
t.step_timeout(() => {
|
||||
reject('longtask entry was not observed');
|
||||
}, 1000);
|
||||
})
|
||||
);
|
||||
|
|
|
@ -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>
|
|
@ -0,0 +1,22 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<title><mo> 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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -0,0 +1,29 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<title><mo> 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>
|
|
@ -0,0 +1,32 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<title><mo> 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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -0,0 +1,2 @@
|
|||
<!DOCTYPE html>
|
||||
<div style="width: 100px; height: 100px; border: solid; background: green;"></div>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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');
|
|
@ -19,12 +19,12 @@ promise_test(async (t) => {
|
|||
idl_array.add_dependency_idls(dom);
|
||||
idl_array.add_dependency_idls(html);
|
||||
|
||||
self.receiver = new SMSReceiver({timeout: 60});
|
||||
|
||||
idl_array.add_objects({
|
||||
SmsReceiver: ['receiver'],
|
||||
SmsReceiver: ['navigator.sms'],
|
||||
});
|
||||
|
||||
idl_array.add_objects({ Navigator: ['navigator'] })
|
||||
|
||||
idl_array.test();
|
||||
}, 'Test IDL implementation of the SMS Receiver API');
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
await expect(getNextMessage).andReturn((timeout) => {
|
||||
// mock behavior
|
||||
})
|
||||
3) Call new SMSReceiver().start();
|
||||
3) Call navigator.sms.receive()
|
||||
4) Verify results
|
||||
|
||||
The mocking API is browser agnostic and is designed such that other engines
|
||||
|
@ -25,7 +25,7 @@
|
|||
per engine:
|
||||
|
||||
- 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.
|
||||
|
||||
-->
|
||||
|
@ -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"]);
|
||||
|
||||
await receiver.start();
|
||||
|
||||
// Waits for the first event.
|
||||
await watcher.wait_for("change");
|
||||
|
||||
assert_equals(receiver.sms.content, "hello");
|
||||
assert_equals(sms.content, "hello");
|
||||
}, 'Basic usage');
|
||||
|
||||
promise_test(async t => {
|
||||
await expect(getNextMessage).andReturn((timeout) => {
|
||||
return Promise.resolve({
|
||||
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,
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
let receiver = new SMSReceiver();
|
||||
|
||||
let watcher = new EventWatcher(t, receiver, ["timeout"]);
|
||||
|
||||
await receiver.start();
|
||||
|
||||
// Waits for the first event.
|
||||
await watcher.wait_for("timeout");
|
||||
try {
|
||||
await navigator.sms.receive();
|
||||
assert_unreached('Expected TimeoutError to be thrown.');
|
||||
} catch (error) {
|
||||
assert_equals(error.name, "TimeoutError");
|
||||
assert_equals(error.message, "SMSReceiver timed out.");
|
||||
}
|
||||
}, '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>
|
|
@ -1,7 +1,7 @@
|
|||
<script>
|
||||
'use strict';
|
||||
|
||||
new SMSReceiver().start().catch(error => {
|
||||
navigator.sms.receive().catch(error => {
|
||||
window.parent.postMessage({errorType: error.name}, '*');
|
||||
});
|
||||
|
||||
|
|
|
@ -20,38 +20,34 @@ let interceptor = (async function() {
|
|||
})();
|
||||
|
||||
class SmsProvider {
|
||||
constructor() {
|
||||
this.returnValues = {}
|
||||
}
|
||||
|
||||
getNextMessage(timeout) {
|
||||
return this.handler.getNextMessage(timeout);
|
||||
let call = this.returnValues.getNextMessage.shift();
|
||||
if (!call) {
|
||||
throw new Error("Unexpected call.");
|
||||
}
|
||||
setHandler(handler) {
|
||||
this.handler = handler;
|
||||
return call(timeout);
|
||||
}
|
||||
|
||||
pushReturnValues(callName, returnValues) {
|
||||
this.returnValues[callName] = this.returnValues[callName] || [];
|
||||
this.returnValues[callName].push(returnValues);
|
||||
return this;
|
||||
}
|
||||
setBinding(binding) {
|
||||
this.binding = binding;
|
||||
return this;
|
||||
}
|
||||
close() {
|
||||
this.binding.close();
|
||||
}
|
||||
}
|
||||
|
||||
function getNextMessage(timeout, callback) {
|
||||
throw new Error("expected to be overriden by tests");
|
||||
}
|
||||
|
||||
async function close() {
|
||||
let provider = await interceptor;
|
||||
provider.close();
|
||||
}
|
||||
|
||||
function expect(call) {
|
||||
return {
|
||||
async andReturn(callback) {
|
||||
let handler = {};
|
||||
handler[call.name] = callback;
|
||||
let provider = await interceptor;
|
||||
provider.setHandler(handler);
|
||||
provider.pushReturnValues(call.name, callback);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -61,7 +57,8 @@ const Status = {};
|
|||
function intercept() {
|
||||
let provider = new SmsProvider();
|
||||
|
||||
let interceptor = new MojoInterfaceInterceptor(blink.mojom.SmsManager.$interfaceName);
|
||||
let interceptor = new MojoInterfaceInterceptor(
|
||||
blink.mojom.SmsManager.$interfaceName);
|
||||
interceptor.oninterfacerequest = (e) => {
|
||||
let impl = new blink.mojom.SmsManager(provider);
|
||||
impl.bindHandle(e.handle);
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
[SecureContext]
|
||||
interface mixin NavigatorSMS {
|
||||
readonly attribute SMSReceiver sms;
|
||||
};
|
||||
|
||||
Navigator includes NavigatorSMS;
|
||||
|
||||
[
|
||||
SecureContext,
|
||||
Exposed=(Window,DedicatedWorker)]
|
||||
|
@ -11,10 +18,7 @@ dictionary SMSReceiverOptions {
|
|||
|
||||
[
|
||||
SecureContext,
|
||||
Exposed=(Window,DedicatedWorker),
|
||||
Constructor(optional SMSReceiverOptions options)
|
||||
] interface SMSReceiver : EventTarget {
|
||||
readonly attribute SMS sms;
|
||||
attribute EventHandler onchange;
|
||||
Promise<void> start();
|
||||
Exposed=Window
|
||||
] interface SMSReceiver {
|
||||
Promise<SMS> receive(optional SMSReceiverOptions options);
|
||||
};
|
||||
|
|
|
@ -32,18 +32,6 @@ function modifies_relevant_files {
|
|||
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
|
||||
echo No files related to the website have been modified. Exiting without
|
||||
echo building.
|
||||
|
@ -78,6 +66,18 @@ touch .nojekyll
|
|||
# Publish the website by pushing the built contents to the `gh-pages` branch
|
||||
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
|
||||
echo No change to the website contents. Exiting without publishing.
|
||||
|
||||
|
|
|
@ -26,9 +26,17 @@
|
|||
non_strings.forEach(invalid_serialNumber => {
|
||||
assert_throws(new TypeError, () => new NFCReadingEvent(
|
||||
'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>
|
||||
|
|
|
@ -254,6 +254,9 @@ async function doSignalingHandshake(localPc, remotePc, options={}) {
|
|||
// This should work for RTCSctpTransport, RTCDtlsTransport and RTCIceTransport.
|
||||
function waitForState(transport, state) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (transport.state == state) {
|
||||
resolve();
|
||||
}
|
||||
const eventHandler = () => {
|
||||
if (transport.state == state) {
|
||||
transport.removeEventListener('statechange', eventHandler, false);
|
||||
|
|
|
@ -277,4 +277,41 @@ async_test(t => {
|
|||
closed
|
||||
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>
|
||||
|
|
|
@ -26,15 +26,36 @@ function iceGatheringCompleteWaiter(pc) {
|
|||
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 => {
|
||||
const pc1 = new RTCPeerConnection();
|
||||
const pc2 = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc1.close());
|
||||
t.add_cleanup(() => pc2.close());
|
||||
pc1.createDataChannel('datachannel');
|
||||
pc1IceStates = new IceStateLogger(pc1);
|
||||
pc2IceStates = new IceStateLogger(pc1);
|
||||
coupleIceCandidates(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');
|
||||
|
||||
promise_test(async t => {
|
||||
|
@ -42,6 +63,8 @@ promise_test(async t => {
|
|||
const pc2 = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc1.close());
|
||||
t.add_cleanup(() => pc2.close());
|
||||
pc1IceStates = new IceStateLogger(pc1);
|
||||
pc2IceStates = new IceStateLogger(pc1);
|
||||
let candidates = [];
|
||||
pc1.createDataChannel('datachannel');
|
||||
pc1.onicecandidate = e => {
|
||||
|
@ -62,6 +85,8 @@ promise_test(async t => {
|
|||
const candidate_pair = pc1.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 only caller -> callee candidates gives a connection');
|
||||
|
||||
promise_test(async t => {
|
||||
|
@ -69,6 +94,8 @@ promise_test(async t => {
|
|||
const pc2 = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc1.close());
|
||||
t.add_cleanup(() => pc2.close());
|
||||
pc1IceStates = new IceStateLogger(pc1);
|
||||
pc2IceStates = new IceStateLogger(pc1);
|
||||
let candidates = [];
|
||||
pc1.createDataChannel('datachannel');
|
||||
pc2.onicecandidate = e => {
|
||||
|
@ -89,8 +116,92 @@ promise_test(async t => {
|
|||
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 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>
|
||||
</body>
|
||||
</html>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue