Update web-platform-tests to revision a4677f682d251f7c072772973058e77777711564

This commit is contained in:
WPT Sync Bot 2020-02-26 08:20:04 +00:00
parent 0f9b04680a
commit f66cd0366a
67 changed files with 2033 additions and 208 deletions

View file

@ -1,4 +1,5 @@
[url-in-tags-revoke.window.html] [url-in-tags-revoke.window.html]
expected: TIMEOUT
[Fetching a blob URL immediately before revoking it works in an iframe.] [Fetching a blob URL immediately before revoking it works in an iframe.]
expected: FAIL expected: FAIL

View file

@ -143157,6 +143157,19 @@
], ],
{} {}
] ]
],
"grid-placement-using-named-grid-lines-002.html": [
"625401d7cfd724a069f21a1ca9ea0790c1a26a4a",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
] ]
}, },
"subgrid": { "subgrid": {
@ -143706,7 +143719,20 @@
{} {}
] ]
] ]
} },
"table-grid-item-dynamic-001.html": [
"e87a3dfe9a118841e63a8b9d886432304c957b11",
[
null,
[
[
"/css/css-grid/table-grid-item-dynamic-001-ref.html",
"=="
]
],
{}
]
]
}, },
"css-images": { "css-images": {
"css-image-fallbacks-and-annotations.html": [ "css-image-fallbacks-and-annotations.html": [
@ -152650,6 +152676,19 @@
{} {}
] ]
], ],
"overflow-ellipsis-dynamic-001.html": [
"2a9edba9308bf06009d7b9a27f21f1e0f1a231c7",
[
null,
[
[
"/css/css-overflow/reference/overflow-ellipsis-dynamic-001-ref.html",
"=="
]
],
{}
]
],
"overflow-recalc-001.html": [ "overflow-recalc-001.html": [
"9c5919a5044bdbac0e782fbb662f1ff3b81857fc", "9c5919a5044bdbac0e782fbb662f1ff3b81857fc",
[ [
@ -237151,10 +237190,6 @@
[] []
] ]
}, },
"LICENSE": [
"28fcc080cb44907fdc7c6aeb7190652c1b65d7a2",
[]
],
"LICENSE.md": [ "LICENSE.md": [
"ad4858c8745cfa1b330a52d27c621a09aa3112e0", "ad4858c8745cfa1b330a52d27c621a09aa3112e0",
[] []
@ -290825,6 +290860,10 @@
[] []
] ]
}, },
"table-grid-item-dynamic-001-ref.html": [
"362904334aaef447de9d895e413474a9b4d2c5a6",
[]
],
"test-plan": { "test-plan": {
"index.html": [ "index.html": [
"039f3a87c1a7d042af4ac043b1a5c4c4cb6c0d1e", "039f3a87c1a7d042af4ac043b1a5c4c4cb6c0d1e",
@ -292840,6 +292879,10 @@
"340bda9de92352fe1ef6633610da31e867013299", "340bda9de92352fe1ef6633610da31e867013299",
[] []
], ],
"overflow-ellipsis-dynamic-001-ref.html": [
"85f8c50a8d639b760bd981ebea6bf3481983e072",
[]
],
"overflow-recalc-001-ref.html": [ "overflow-recalc-001-ref.html": [
"b18dee8caf1864dc30fe656750fe81a8863f1e90", "b18dee8caf1864dc30fe656750fe81a8863f1e90",
[] []
@ -319686,7 +319729,7 @@
[] []
], ],
"resolve-url.js": [ "resolve-url.js": [
"77f8fff5b5701ae2b3138116429974c4e9f2608f", "cbe97edbbb3caf35f49d4f4859a263e1060d05b8",
[] []
], ],
"resource.py": [ "resource.py": [
@ -339878,6 +339921,14 @@
"1e88ac5c4e7852b4752de3af210566d010b62a86", "1e88ac5c4e7852b4752de3af210566d010b62a86",
[] []
], ],
"onactivate-waituntil-forever.js": [
"65b02b12b36017ac363d17272eeb8c0b143c3f59",
[]
],
"onfetch-waituntil-forever.js": [
"b905d555986e3ee374ae8ff74a0a9d69de44dbc8",
[]
],
"oninstall-throw-error-from-nested-event-worker.js": [ "oninstall-throw-error-from-nested-event-worker.js": [
"6729ab61a371baf701796e88d1975dc1af77adcf", "6729ab61a371baf701796e88d1975dc1af77adcf",
[] []
@ -339898,10 +339949,18 @@
"cc2f6d7e5e78fda2c74e9613897931b1eeadbb53", "cc2f6d7e5e78fda2c74e9613897931b1eeadbb53",
[] []
], ],
"oninstall-waituntil-forever.js": [
"964483f2f42732755b2400e01f66439d647a339f",
[]
],
"oninstall-waituntil-throw-error-worker.js": [ "oninstall-waituntil-throw-error-worker.js": [
"6cb8f6ede635a3e71b67feddc2efc326b8af3470", "6cb8f6ede635a3e71b67feddc2efc326b8af3470",
[] []
], ],
"onparse-infiniteloop-worker.js": [
"6f439aee94d59081111a11284aec9bfc86c950f2",
[]
],
"opaque-response-being-preloaded-xhr.html": [ "opaque-response-being-preloaded-xhr.html": [
"9c6d8bd504a1a3af4840ed36f2397f2d7253eef2", "9c6d8bd504a1a3af4840ed36f2397f2d7253eef2",
[] []
@ -340214,6 +340273,10 @@
"18a95ee892b1c9ee7ca597cb2655e6c4504a7912", "18a95ee892b1c9ee7ca597cb2655e6c4504a7912",
[] []
], ],
"unregister-immediately-helpers.js": [
"86fb24d8f988c810a2330f141ab93439d2034995",
[]
],
"update": { "update": {
"update-after-oneday.https.html": [ "update-after-oneday.https.html": [
"9d4c98272187e52947e710189c9fa1cfafbf4b22", "9d4c98272187e52947e710189c9fa1cfafbf4b22",
@ -341508,6 +341571,14 @@
}, },
"pservers": { "pservers": {
"reftests": { "reftests": {
"gradient-inheritance-not-in-rendertree-01.tentative.svg": [
"8f80b2d94456da9db42e9dee7dbf08d57d533088",
[]
],
"gradient-inheritance-not-in-rendertree-02.tentative.svg": [
"5b230f1d31ce77f3c877eba49e24261fabc2a840",
[]
],
"meshgradient-basic-001-ref.png": [ "meshgradient-basic-001-ref.png": [
"691bff6244cd0abe046536efc0a100329b62d407", "691bff6244cd0abe046536efc0a100329b62d407",
[] []
@ -341536,6 +341607,14 @@
"4ce893b827cabc5e4627060f3e5334c1b829bd30", "4ce893b827cabc5e4627060f3e5334c1b829bd30",
[] []
], ],
"pattern-inheritance-not-in-rendertree-01.tentative.svg": [
"1a6d0a0b32b69890417b27647e3de12c9d9b16af",
[]
],
"pattern-inheritance-not-in-rendertree-02.tentative.svg": [
"961d069e0864d8379c44d81aea19aebfb6eca66a",
[]
],
"radialgradient-basic-002-ref.svg": [ "radialgradient-basic-002-ref.svg": [
"26f4f508f35855ffd35baffb1aff129fe1ebf1be", "26f4f508f35855ffd35baffb1aff129fe1ebf1be",
[] []
@ -341693,6 +341772,10 @@
} }
}, },
"styling": { "styling": {
"presentation-attributes.js": [
"c9dc14ad49072cc42bfb09362f421a2f99d437f9",
[]
],
"render": { "render": {
"transform-box-ref.svg": [ "transform-box-ref.svg": [
"b41f8bb2a7baac19d907c378a0e269b9a8e914fb", "b41f8bb2a7baac19d907c378a0e269b9a8e914fb",
@ -342369,7 +342452,7 @@
} }
}, },
"test_file_lints.py": [ "test_file_lints.py": [
"08c09b6b0950b2cf548c3b5e415303597dd8c654", "43e8beb9956358fa70a80061b103243f22364677",
[] []
], ],
"test_lint.py": [ "test_lint.py": [
@ -342406,7 +342489,7 @@
[] []
], ],
"download.py": [ "download.py": [
"3736d54f15dc5e9c66c560730acd08f43e53db30", "f8be03efb2750ad754c6038f7341a9761291df22",
[] []
], ],
"item.py": [ "item.py": [
@ -342422,7 +342505,7 @@
[] []
], ],
"sourcefile.py": [ "sourcefile.py": [
"9dd26820c6decb021b86b4252bf01c8199e19c08", "580a0ab7884568c271e935d51f239eb821100dc6",
[] []
], ],
"testpaths.py": [ "testpaths.py": [
@ -342464,11 +342547,11 @@
[] []
], ],
"utils.py": [ "utils.py": [
"8e0f629dd493f0fbcd1e4ba6e8237c67064893b6", "aefc2c94f40e1ae29d3657fe4114f79f97568ba1",
[] []
], ],
"vcs.py": [ "vcs.py": [
"d4f47f6bf0ab35c9da514edb4c4b779644ff90dd", "ce31acbfb66d9b8657b0c8d32fad4c7eda0c44b7",
[] []
] ]
}, },
@ -347216,7 +347299,7 @@
[] []
], ],
"testfiles.py": [ "testfiles.py": [
"48b2767a03e946d8f3fffd7424d6c527dc34d6f6", "a9a8fe87ba50582d4cd15a6a233a372119ad265c",
[] []
], ],
"tests": { "tests": {
@ -347654,7 +347737,7 @@
[] []
], ],
"executorservo.py": [ "executorservo.py": [
"8f8e120e66da6403f256f99f279f1f5dc8008272", "4816c3df06e87f8e85301918c341bbff97817777",
[] []
], ],
"executorservodriver.py": [ "executorservodriver.py": [
@ -347801,7 +347884,7 @@
[] []
], ],
"testloader.py": [ "testloader.py": [
"6c5b5a8ea00071bcdf6820103218545992496176", "86d9de88221dff8ced44d54ce825d48393885a2f",
[] []
], ],
"testrunner.py": [ "testrunner.py": [
@ -347973,7 +348056,7 @@
} }
}, },
"wptrunner.py": [ "wptrunner.py": [
"21bdd2312bdec10678133e27c91948d4b0235d72", "3d15c6e5418e9cfb5bc6e71e1a8e4d9846974266",
[] []
], ],
"wpttest.py": [ "wpttest.py": [
@ -353625,11 +353708,7 @@
"0daf488d6f522b80c3884fb75d21df996294a18a", "0daf488d6f522b80c3884fb75d21df996294a18a",
[] []
] ]
}, }
"self.js": [
"5d3c560d49b2f010c423c4428dcea9e7d2b810d7",
[]
]
}, },
"WorkerUtils": { "WorkerUtils": {
"WindowTimers": { "WindowTimers": {
@ -375987,7 +376066,7 @@
] ]
], ],
"storage.https.html": [ "storage.https.html": [
"4ca990ff33bd4ad53dca5c2545ed9ffcd5bf4325", "1d6882d7f75fb53883cb7662afd3235400e6fa60",
[ [
null, null,
{} {}
@ -432489,45 +432568,555 @@
] ]
], ],
"utf-16be.html": [ "utf-16be.html": [
"06558fe388f08ad02ec977124dd96973dc9009dd", "ae28fb6d6a7c08ff3ccc5353139e2842492d9950",
[ [
null, "html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html?include=appcache",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html?include=base-href",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html?include=css",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html?include=eventsource",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html?include=history",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html?include=hyperlink-search",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html?include=loading",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html?include=nested-browsing",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html?include=scheme",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html?include=submit",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html?include=svg",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html?include=url",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html?include=websocket",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html?include=window-open",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html?include=workers",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html?include=xhr",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html?include=xml",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html?include=xmldocument",
{ {
"timeout": "long" "timeout": "long"
} }
] ]
], ],
"utf-16le.html": [ "utf-16le.html": [
"86510b68525af982342aeaad9e35e5a70d169044", "1d0bb574a77bb9a78cba3a8bb4a869ea780944a4",
[ [
null, "html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html?include=appcache",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html?include=base-href",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html?include=css",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html?include=eventsource",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html?include=history",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html?include=hyperlink-search",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html?include=loading",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html?include=nested-browsing",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html?include=scheme",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html?include=submit",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html?include=svg",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html?include=url",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html?include=websocket",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html?include=window-open",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html?include=workers",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html?include=xhr",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html?include=xml",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html?include=xmldocument",
{ {
"timeout": "long" "timeout": "long"
} }
] ]
], ],
"utf-8.html": [ "utf-8.html": [
"fcf43e0a9884ce82768a4c3a22cedb4494edcff8", "c521c9dc398b4c200bc357d4a66c55efd38f7ae9",
[ [
null, "html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html?include=appcache",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html?include=base-href",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html?include=css",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html?include=eventsource",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html?include=history",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html?include=hyperlink-search",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html?include=loading",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html?include=nested-browsing",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html?include=scheme",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html?include=submit",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html?include=svg",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html?include=url",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html?include=websocket",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html?include=window-open",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html?include=workers",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html?include=xhr",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html?include=xml",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html?include=xmldocument",
{ {
"timeout": "long" "timeout": "long"
} }
] ]
], ],
"windows-1251.html": [ "windows-1251.html": [
"23d33f9f73350b2a174b7becc1489da5645b406b", "e80e12403aedfdddfd1aa73ed4057316a4e5a931",
[ [
null, "html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=appcache",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=base-href",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=css",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=eventsource",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=history",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=hyperlink-search",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=loading",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=nested-browsing",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=scheme",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=submit",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=svg",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=url",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=websocket",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=window-open",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=workers",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=xhr",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=xml",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=xmldocument",
{ {
"timeout": "long" "timeout": "long"
} }
] ]
], ],
"windows-1252.html": [ "windows-1252.html": [
"642c82ab4f05a685eb75b67f654df3e13810f397", "c2c6b0adeb13df97352f37ccfef9bd6b1fce9e63",
[ [
null, "html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=appcache",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=base-href",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=css",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=eventsource",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=history",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=hyperlink-search",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=loading",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=nested-browsing",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=scheme",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=submit",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=svg",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=url",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=websocket",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=window-open",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=workers",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=xhr",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=xml",
{
"timeout": "long"
}
],
[
"html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=xmldocument",
{ {
"timeout": "long" "timeout": "long"
} }
@ -526370,6 +526959,27 @@
{} {}
] ]
], ],
"unregister-immediately-before-installed.https.html": [
"79cdaf062dc729c8029c553b485e59d510b87982",
[
null,
{}
]
],
"unregister-immediately-during-extendable-events.https.html": [
"6ba87a7ce80e198132b38b3878d069efe423b071",
[
null,
{}
]
],
"unregister-immediately.https.html": [
"54be40a545220d9d58569816feef87a0ee17f891",
[
null,
{}
]
],
"unregister-then-register-new-script.https.html": [ "unregister-then-register-new-script.https.html": [
"d046423e0c29c082c22c64c865ccb38a6a40adac", "d046423e0c29c082c22c64c865ccb38a6a40adac",
[ [
@ -536331,6 +536941,34 @@
} }
}, },
"styling": { "styling": {
"presentation-attributes-irrelevant.html": [
"f96d1d9de6f26b0d4fde11156dab87487d6cbdc8",
[
null,
{}
]
],
"presentation-attributes-relevant.html": [
"b5f9343690cc447348b54b280de4e7c27a3d2436",
[
null,
{}
]
],
"presentation-attributes-special-cases.html": [
"c544c9c7a64d8b17178c860f2f8c9ee14c0ab998",
[
null,
{}
]
],
"presentation-attributes-unknown.html": [
"487175b144b8b7a405d4d2f75aaee7b493ab7ea8",
[
null,
{}
]
],
"required-properties.svg": [ "required-properties.svg": [
"37bf0fdf7e8ead12ab5b686b56844c82625e6591", "37bf0fdf7e8ead12ab5b686b56844c82625e6591",
[ [
@ -546128,7 +546766,7 @@
] ]
], ],
"invalid-code.any.js": [ "invalid-code.any.js": [
"2b901ae0a63ade67bf7494cfc32d559f6d003104", "752519392a953fdc314d6421f2bcb91856434534",
[ [
"wasm/webapi/invalid-code.any.html", "wasm/webapi/invalid-code.any.html",
{ {
@ -550199,7 +550837,7 @@
], ],
"broadcastchannel": { "broadcastchannel": {
"basics.html": [ "basics.html": [
"ed16e32f5437dc430b5cc11b967e6538ef6cf393", "3d8ba76fb1ba35658c44702059925fe53e3fb6f6",
[ [
null, null,
{} {}
@ -559482,11 +560120,40 @@
] ]
] ]
}, },
"self.html": [ "self.any.js": [
"41522dfdd53e0a48308ddf5ab4a10581627bb20d", "a1aacc08808bcb15473977b933d29944b02def2f",
[ [
null, "workers/interfaces/WorkerGlobalScope/self.any.serviceworker.html",
{} {
"script_metadata": [
[
"global",
"!default,worker"
]
]
}
],
[
"workers/interfaces/WorkerGlobalScope/self.any.sharedworker.html",
{
"script_metadata": [
[
"global",
"!default,worker"
]
]
}
],
[
"workers/interfaces/WorkerGlobalScope/self.any.worker.html",
{
"script_metadata": [
[
"global",
"!default,worker"
]
]
}
] ]
] ]
}, },
@ -559742,10 +560409,12 @@
] ]
], ],
"dedicated-worker-import-referrer.html": [ "dedicated-worker-import-referrer.html": [
"32d3b3f53de0e22ac07feb67e57121d5d6b0354b", "855df62194369614edfe7f5172e5bfe0e8ac966b",
[ [
null, null,
{} {
"timeout": "long"
}
] ]
], ],
"dedicated-worker-import.any.js": [ "dedicated-worker-import.any.js": [

View file

@ -0,0 +1,4 @@
[hit-test-floats-002.html]
[Hit test float]
expected: FAIL

View file

@ -0,0 +1,4 @@
[hit-test-floats-005.html]
[Miss clipped float]
expected: FAIL

View file

@ -1,4 +0,0 @@
[CaretPosition-001.html]
[Element at (400, 100)]
expected: FAIL

View file

@ -8,3 +8,6 @@
[throws if handleEvent is thruthy and not callable] [throws if handleEvent is thruthy and not callable]
expected: FAIL expected: FAIL
[looks up handleEvent method on every event dispatch]
expected: FAIL

View file

@ -0,0 +1,4 @@
[elementFromPoint-001.html]
[CSSOM View - 5 - extensions to the Document interface]
expected: FAIL

View file

@ -0,0 +1,4 @@
[elementsFromPoint-invalid-cases.html]
[The root element is the last element returned for otherwise empty queries within the viewport]
expected: FAIL

View file

@ -315,15 +315,18 @@
[<iframe>: combined response Content-Type: text/html;" text/plain] [<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL expected: FAIL
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: */* text/html]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" text/plain] [<iframe>: separate response Content-Type: text/html;" text/plain]
expected: FAIL expected: FAIL
[<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 */*;charset=gbk]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain ]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL

View file

@ -11,9 +11,6 @@
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!] [X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
expected: FAIL expected: FAIL
[X-Content-Type-Options%3A%20%40%23%24%23%25%25%26%5E%26%5E*()()11!%2Cnosniff] [X-Content-Type-Options%3A%20'NosniFF']
expected: FAIL
[X-Content-Type-Options%3A%20%2Cnosniff]
expected: FAIL expected: FAIL

View file

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

View file

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

View file

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

View file

@ -1,4 +1,5 @@
[track-selection-metadata.html] [track-selection-metadata.html]
expected: TIMEOUT
[Multiple 'metadata' tracks with 'default'] [Multiple 'metadata' tracks with 'default']
expected: FAIL expected: FAIL

View file

@ -1,6 +1,6 @@
[iframe_sandbox_popups_nonescaping-3.html] [iframe_sandbox_popups_nonescaping-3.html]
type: testharness type: testharness
expected: CRASH expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox] [Check that popups from a sandboxed iframe do not escape the sandbox]
expected: NOTRUN expected: NOTRUN

View file

@ -1,2 +0,0 @@
[script-onerror-insertion-point-2.html]
expected: TIMEOUT

View file

@ -11,3 +11,6 @@
[X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 44052 more errors.\n\tMax AbsError of 1.9986611604690552e+0 at index of 23900.\n\t[23900\]\t-9.9994289875030518e-1\t9.9871826171875000e-1\t1.9986611604690552e+0\t2.0012262087101997e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 10584.\n\t[10584\]\t-5.8778524398803711e-1\t0.0000000000000000e+0\t5.8778524398803711e-1\tInfinity\t3.0517578125000000e-5\n] [X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 44052 more errors.\n\tMax AbsError of 1.9986611604690552e+0 at index of 23900.\n\t[23900\]\t-9.9994289875030518e-1\t9.9871826171875000e-1\t1.9986611604690552e+0\t2.0012262087101997e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 10584.\n\t[10584\]\t-5.8778524398803711e-1\t0.0000000000000000e+0\t5.8778524398803711e-1\tInfinity\t3.0517578125000000e-5\n]
expected: FAIL expected: FAIL
[X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 44059 more errors.\n\tMax AbsError of 1.9986916780471802e+0 at index of 29020.\n\t[29020\]\t9.9994289875030518e-1\t-9.9874877929687500e-1\t1.9986916780471802e+0\t2.0011956154322119e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 12348.\n\t[12348\]\t9.5105654001235962e-1\t0.0000000000000000e+0\t9.5105654001235962e-1\tInfinity\t3.0517578125000000e-5\n]
expected: FAIL

View file

@ -128,3 +128,9 @@
[X SNR (-109.9902709475588 dB) is not greater than or equal to 65.737. Got -109.9902709475588.] [X SNR (-109.9902709475588 dB) is not greater than or equal to 65.737. Got -109.9902709475588.]
expected: FAIL expected: FAIL
[X SNR (39.52349714889274 dB) is not greater than or equal to 65.737. Got 39.52349714889274.]
expected: FAIL
[X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[19030\]\t-7.1927757971934625e-8\t-7.3546999692916870e-1\t7.3546992500141073e-1\t9.9999990220164214e-1\t3.8985999999999999e-3\n\t[19031\]\t-3.6017334461212158e-1\t-6.9157749414443970e-1\t3.3140414953231812e-1\t4.7920030992665957e-1\t3.8985999999999999e-3\n\t[38059\]\t-1.5020843591173616e-7\t-9.8956179618835449e-1\t9.8956164597991858e-1\t9.9999984820711907e-1\t3.8985999999999999e-3\n\t[38060\]\t-8.8409073650836945e-2\t-9.9664616584777832e-1\t9.0823709219694138e-1\t9.1129341918891205e-1\t3.8985999999999999e-3\n\tMax AbsError of 9.8956164597991858e-1 at index of 38059.\n\tMax RelError of 9.9999990220164214e-1 at index of 19030.\n]
expected: FAIL

View file

@ -0,0 +1,5 @@
[018.html]
expected: TIMEOUT
[origin of the script that invoked the method, javascript:]
expected: TIMEOUT

View file

@ -0,0 +1,5 @@
[018.html]
expected: TIMEOUT
[origin of the script that invoked the method, javascript:]
expected: TIMEOUT

View file

@ -0,0 +1,7 @@
[self.any.sharedworker.html]
expected: ERROR
[self.any.serviceworker.html]
expected: ERROR
[self.any.worker.html]

View file

@ -1,5 +1,4 @@
[005.html] [005.html]
expected: ERROR
[dedicated worker in shared worker in dedicated worker] [dedicated worker in shared worker in dedicated worker]
expected: FAIL expected: FAIL

View file

@ -1,29 +0,0 @@
W3C 3-clause BSD License
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of works must retain the original copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the original copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the W3C nor the names of its contributors may be
used to endorse or promote products derived from this work without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.

View file

@ -17,7 +17,7 @@
var serviceWorkerTestPageIFrame; var serviceWorkerTestPageIFrame;
function fetchFromIFrame() { function fetchFromIFrame() {
return serviceWorkerTestPageIFrame.contentWindow return serviceWorkerTestPageIFrame.contentWindow
.fetch('support/controlled-endpoint.py') .fetch('controlled-endpoint.py')
.then((result) => { .then((result) => {
return result.text(); return result.text();
}); });

View file

@ -0,0 +1,25 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Grid Layout Test: Grid item placement with named line and auto repeat()</title>
<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
<link rel="help" href="http://www.w3.org/TR/css-grid-1/#line-placement">
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
<meta name="assert" content="Grid placement algorithm is able to select the 1st line by name when the 1st track is defined with auto repeat().">
<style>
.grid {
display: grid;
width: 100px;
height: 100px;
background: red;
grid-template-columns: [area-start] repeat(auto-fill, 10px) [area-end];
grid-template-rows: [area-start] repeat(auto-fill, 10px [area-start]) [area-end];
}
.grid > div {
grid-area: area;
background: green;
}
</style>
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div class="grid">
<div></div>
</div>

View file

@ -0,0 +1,26 @@
<!doctype html>
<meta charset="utf-8">
<title>CSS Test Reference</title>
<style>
html,body {
color:black; background-color:white; font:16px/1 monospace; padding:0; margin:0;
}
div {
display: grid;
background-color: lime;
}
table {
margin-top: 100px;
}
</style>
<div>
<table>
<thead>
<tr>
<th>Relayout shouldn't grow this table</th>
</tr>
</thead>
</table>
</div>

View file

@ -0,0 +1,44 @@
<!doctype html>
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<meta charset="utf-8">
<title>Table grid items with margins don't grow on incremental relayout</title>
<link rel="author" href="mailto:mats@mozilla.com">
<link rel="author" href="mailto:emilio@crisal.io">
<link rel="author" href="https://mozilla.org">
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1492315">
<link rel="match" href="table-grid-item-dynamic-001-ref.html">
<style>
html,body {
color:black; background-color:white; font:16px/1 monospace; padding:0; margin:0;
}
div {
display: grid;
background-color: lime;
}
table {
margin-top: 100px;
}
</style>
<div>
<table>
<thead>
<tr>
<th>Relayout shouldn't grow this table</th>
</tr>
</thead>
</table>
</div>
<script>
onload = function() {
let grid = document.querySelector("div");
grid.getBoundingClientRect();
document.body.style.width = "50vw";
grid.getBoundingClientRect();
document.body.style.width = "";
}
</script>

View file

@ -0,0 +1,26 @@
<!doctype html>
<html class="reftest-wait">
<title>CSS Overflow Test: text-overflow: ellipsis after dynamic test change</title>
<link rel="help" href="https://drafts.csswg.org/css-overflow-3/#text-overflow">
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1615811">
<link rel="author" href="mailto:emilio@crisal.io" name="Emilio Cobos Álvarez">
<link rel="author" href="https://mozilla.org" name="Mozilla">
<link rel="match" href="reference/overflow-ellipsis-dynamic-001-ref.html">
<style>
p {
width: 40ch;
font: 16px/1 monospace;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
</style>
<p>longtext longtext longtext longtext longtext longtext longtext longtext</p>
<script>
onload = function() {
requestAnimationFrame(() => requestAnimationFrame(() => {
document.querySelector("p").firstChild.nodeValue = "short";
document.documentElement.className = "";
}));
}
</script>

View file

@ -0,0 +1,12 @@
<!doctype html>
<title>CSS test reference</title>
<style>
p {
width: 40ch;
font: 16px/1 monospace;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
</style>
<p>short<p>

View file

@ -51,7 +51,7 @@ onload = function() {
// loading html (or actually svg to support <embed>) // loading html (or actually svg to support <embed>)
function test_load_nested_browsing_context(tag, attr, spec_url) { function test_load_nested_browsing_context(tag, attr, spec_url) {
async_test(function() { subsetTestByKey('nested-browsing', async_test, function() {
var id = 'test_load_nested_browsing_context_'+tag; var id = 'test_load_nested_browsing_context_'+tag;
var elm = document.createElement(tag); var elm = document.createElement(tag);
elm.setAttribute(attr, input_url_svg); elm.setAttribute(attr, input_url_svg);
@ -81,7 +81,7 @@ onload = function() {
}); });
// loading css with <link> // loading css with <link>
async_test(function() { subsetTestByKey('loading', async_test, function() {
var elm = document.createElement('link'); var elm = document.createElement('link');
elm.href = input_url_css; elm.href = input_url_css;
elm.rel = 'stylesheet'; elm.rel = 'stylesheet';
@ -99,7 +99,7 @@ onload = function() {
'https://html.spec.whatwg.org/multipage/#styling']}); 'https://html.spec.whatwg.org/multipage/#styling']});
// loading js // loading js
async_test(function() { subsetTestByKey('loading-css', async_test, function() {
var elm = document.createElement('script'); var elm = document.createElement('script');
elm.src = input_url_js + '&var=test_load_js_got'; elm.src = input_url_js + '&var=test_load_js_got';
document.head.appendChild(elm); // no cleanup document.head.appendChild(elm); // no cleanup
@ -111,7 +111,7 @@ onload = function() {
// loading image // loading image
function test_load_image(tag, attr, spec_url) { function test_load_image(tag, attr, spec_url) {
async_test(function() { subsetTestByKey('loading', async_test, function() {
var elm = document.createElement(tag); var elm = document.createElement(tag);
if (tag == 'input') { if (tag == 'input') {
elm.type = 'image'; elm.type = 'image';
@ -173,7 +173,7 @@ onload = function() {
// loading video // loading video
function test_load_video(tag, use_source_element) { function test_load_video(tag, use_source_element) {
async_test(function() { subsetTestByKey('loading', async_test, function() {
var elm = document.createElement(tag); var elm = document.createElement(tag);
var video_ext = ''; var video_ext = '';
if (elm.canPlayType('video/ogg; codecs="theora,flac"')) { if (elm.canPlayType('video/ogg; codecs="theora,flac"')) {
@ -229,7 +229,7 @@ onload = function() {
}); });
// loading webvtt // loading webvtt
async_test(function() { subsetTestByKey('loading', async_test, function() {
var video = document.createElement('video'); var video = document.createElement('video');
var track = document.createElement('track'); var track = document.createElement('track');
video.appendChild(track); video.appendChild(track);
@ -248,7 +248,7 @@ onload = function() {
// submit forms // submit forms
function test_submit_form(tag, attr) { function test_submit_form(tag, attr) {
async_test(function(){ subsetTestByKey('submit', async_test, function(){
var elm = document.createElement(tag); var elm = document.createElement(tag);
elm.setAttribute(attr, input_url_html); elm.setAttribute(attr, input_url_html);
var form; var form;
@ -291,7 +291,7 @@ onload = function() {
}); });
// <base href> // <base href>
async_test(function() { subsetTestByKey('base-href', async_test, function() {
var iframe = document.createElement('iframe'); var iframe = document.createElement('iframe');
iframe.src = blank; iframe.src = blank;
document.body.appendChild(iframe); document.body.appendChild(iframe);
@ -315,7 +315,7 @@ onload = function() {
// XXX drag and drop (<a href> or <img src>) seems hard to automate // XXX drag and drop (<a href> or <img src>) seems hard to automate
// Worker() // Worker()
async_test(function() { subsetTestByKey('workers', async_test, function() {
var worker = new Worker(input_url_worker); var worker = new Worker(input_url_worker);
worker.onmessage = this.step_func_done(function(e) { worker.onmessage = this.step_func_done(function(e) {
assert_equals(e.data, expected_current); assert_equals(e.data, expected_current);
@ -324,7 +324,7 @@ onload = function() {
{help:'https://html.spec.whatwg.org/multipage/#dom-worker'}); {help:'https://html.spec.whatwg.org/multipage/#dom-worker'});
// SharedWorker() // SharedWorker()
async_test(function() { subsetTestByKey('workers', async_test, function() {
var worker = new SharedWorker(input_url_sharedworker); var worker = new SharedWorker(input_url_sharedworker);
worker.port.onmessage = this.step_func_done(function(e) { worker.port.onmessage = this.step_func_done(function(e) {
assert_equals(e.data, expected_current); assert_equals(e.data, expected_current);
@ -333,7 +333,7 @@ onload = function() {
{help:'https://html.spec.whatwg.org/multipage/#dom-sharedworker'}); {help:'https://html.spec.whatwg.org/multipage/#dom-sharedworker'});
// EventSource() // EventSource()
async_test(function() { subsetTestByKey('eventsource', async_test, function() {
var source = new EventSource(input_url_eventstream); var source = new EventSource(input_url_eventstream);
this.add_cleanup(function() { this.add_cleanup(function() {
source.close(); source.close();
@ -345,7 +345,7 @@ onload = function() {
{help:'https://html.spec.whatwg.org/multipage/#dom-eventsource'}); {help:'https://html.spec.whatwg.org/multipage/#dom-eventsource'});
// EventSource#url // EventSource#url
test(function() { subsetTestByKey('eventsource', test, function() {
var source = new EventSource(input_url_eventstream); var source = new EventSource(input_url_eventstream);
source.close(); source.close();
var got = source.url; var got = source.url;
@ -354,7 +354,7 @@ onload = function() {
{help:'https://html.spec.whatwg.org/multipage/#dom-eventsource'}); {help:'https://html.spec.whatwg.org/multipage/#dom-eventsource'});
// XMLDocument#load() // XMLDocument#load()
async_test(function() { subsetTestByKey('xmldocument', async_test, function() {
var doc = document.implementation.createDocument(null, "x"); var doc = document.implementation.createDocument(null, "x");
doc.load(input_url_svg); doc.load(input_url_svg);
doc.onload = this.step_func_done(function() { doc.onload = this.step_func_done(function() {
@ -364,7 +364,7 @@ onload = function() {
{help:'https://html.spec.whatwg.org/multipage/#dom-xmldocument-load'}); {help:'https://html.spec.whatwg.org/multipage/#dom-xmldocument-load'});
// window.open // window.open
async_test(function() { subsetTestByKey('window-open', async_test, function() {
var id = 'test_window_open'; var id = 'test_window_open';
var iframe = document.createElement('iframe'); var iframe = document.createElement('iframe');
iframe.name = id; iframe.name = id;
@ -385,7 +385,7 @@ onload = function() {
// a.search, area.search // a.search, area.search
function test_hyperlink_search(tag) { function test_hyperlink_search(tag) {
test(function() { subsetTestByKey('hyperlink-search', test, function() {
var elm = document.createElement(tag); var elm = document.createElement(tag);
var input_arr = input_url_html.split('?'); var input_arr = input_url_html.split('?');
elm.href = input_arr[0]; elm.href = input_arr[0];
@ -405,7 +405,7 @@ onload = function() {
// history.pushState // history.pushState
// history.replaceState // history.replaceState
function test_history(prop) { function test_history(prop) {
async_test(function() { subsetTestByKey('history', async_test, function() {
var iframe = document.createElement('iframe'); var iframe = document.createElement('iframe');
iframe.src = blank; iframe.src = blank;
document.body.appendChild(iframe); document.body.appendChild(iframe);
@ -429,7 +429,7 @@ onload = function() {
// SVG // SVG
var ns = {svg:'http://www.w3.org/2000/svg', xlink:'http://www.w3.org/1999/xlink'}; var ns = {svg:'http://www.w3.org/2000/svg', xlink:'http://www.w3.org/1999/xlink'};
// a // a
async_test(function() { subsetTestByKey('svg', async_test, function() {
SVGAElement; // check support SVGAElement; // check support
var iframe = document.createElement('iframe'); var iframe = document.createElement('iframe');
var id = 'test_svg_a'; var id = 'test_svg_a';
@ -458,7 +458,7 @@ onload = function() {
// feImage, image, use // feImage, image, use
function test_svg(func, tag) { function test_svg(func, tag) {
async_test(function() { subsetTestByKey('svg', async_test, function() {
var uuid = token(); var uuid = token();
var id = 'test_svg_'+tag; var id = 'test_svg_'+tag;
var svg = document.createElementNS(ns.svg, 'svg'); var svg = document.createElementNS(ns.svg, 'svg');
@ -492,7 +492,7 @@ onload = function() {
// UTF-8: // UTF-8:
// XHR // XHR
async_test(function() { subsetTestByKey('xhr', async_test, function() {
var xhr = new XMLHttpRequest(); var xhr = new XMLHttpRequest();
xhr.open('GET', input_url_html); xhr.open('GET', input_url_html);
xhr.onload = this.step_func_done(function() { xhr.onload = this.step_func_done(function() {
@ -503,7 +503,7 @@ onload = function() {
{help:'https://xhr.spec.whatwg.org/#the-open()-method'}); {help:'https://xhr.spec.whatwg.org/#the-open()-method'});
// in a worker // in a worker
async_test(function() { subsetTestByKey('workers', async_test, function() {
var worker = new Worker(input_url_worker_importScripts); var worker = new Worker(input_url_worker_importScripts);
worker.onmessage = this.step_func_done(function(e) { worker.onmessage = this.step_func_done(function(e) {
assert_equals(e.data, expected_utf8); assert_equals(e.data, expected_utf8);
@ -512,7 +512,7 @@ onload = function() {
{help:['https://html.spec.whatwg.org/multipage/#set-up-a-worker-script-settings-object', {help:['https://html.spec.whatwg.org/multipage/#set-up-a-worker-script-settings-object',
'https://html.spec.whatwg.org/multipage/#dom-workerglobalscope-importscripts']}); 'https://html.spec.whatwg.org/multipage/#dom-workerglobalscope-importscripts']});
async_test(function() { subsetTestByKey('workers', async_test, function() {
var worker = new Worker(input_url_worker_worker); var worker = new Worker(input_url_worker_worker);
worker.onmessage = this.step_func_done(function(e) { worker.onmessage = this.step_func_done(function(e) {
assert_equals(e.data, expected_utf8); assert_equals(e.data, expected_utf8);
@ -521,7 +521,7 @@ onload = function() {
{help:['https://html.spec.whatwg.org/multipage/#set-up-a-worker-script-settings-object', {help:['https://html.spec.whatwg.org/multipage/#set-up-a-worker-script-settings-object',
'https://html.spec.whatwg.org/multipage/#dom-worker']}); 'https://html.spec.whatwg.org/multipage/#dom-worker']});
async_test(function() { subsetTestByKey('workers', async_test, function() {
var worker = new Worker(input_url_worker_sharedworker); var worker = new Worker(input_url_worker_sharedworker);
worker.onmessage = this.step_func_done(function(e) { worker.onmessage = this.step_func_done(function(e) {
assert_equals(e.data, expected_utf8); assert_equals(e.data, expected_utf8);
@ -530,7 +530,7 @@ onload = function() {
{help:['https://html.spec.whatwg.org/multipage/#set-up-a-worker-script-settings-object', {help:['https://html.spec.whatwg.org/multipage/#set-up-a-worker-script-settings-object',
'https://html.spec.whatwg.org/multipage/#dom-sharedworker']}); 'https://html.spec.whatwg.org/multipage/#dom-sharedworker']});
async_test(function() { subsetTestByKey('workers', async_test, function() {
var worker = new SharedWorker(input_url_sharedworker_importScripts); var worker = new SharedWorker(input_url_sharedworker_importScripts);
worker.port.onmessage = this.step_func_done(function(e) { worker.port.onmessage = this.step_func_done(function(e) {
assert_equals(e.data, expected_utf8); assert_equals(e.data, expected_utf8);
@ -539,7 +539,7 @@ onload = function() {
{help:['https://html.spec.whatwg.org/multipage/#set-up-a-worker-script-settings-object', {help:['https://html.spec.whatwg.org/multipage/#set-up-a-worker-script-settings-object',
'https://html.spec.whatwg.org/multipage/#dom-workerglobalscope-importscripts']}); 'https://html.spec.whatwg.org/multipage/#dom-workerglobalscope-importscripts']});
async_test(function() { subsetTestByKey('workers', async_test, function() {
var worker = new SharedWorker(input_url_sharedworker_worker); var worker = new SharedWorker(input_url_sharedworker_worker);
worker.port.onmessage = this.step_func_done(function(e) { worker.port.onmessage = this.step_func_done(function(e) {
assert_equals(e.data, expected_utf8); assert_equals(e.data, expected_utf8);
@ -548,7 +548,7 @@ onload = function() {
{help:['https://html.spec.whatwg.org/multipage/#set-up-a-worker-script-settings-object', {help:['https://html.spec.whatwg.org/multipage/#set-up-a-worker-script-settings-object',
'https://html.spec.whatwg.org/multipage/#dom-worker']}); 'https://html.spec.whatwg.org/multipage/#dom-worker']});
async_test(function() { subsetTestByKey('workers', async_test, function() {
var worker = new SharedWorker(input_url_sharedworker_sharedworker); var worker = new SharedWorker(input_url_sharedworker_sharedworker);
worker.port.onmessage = this.step_func_done(function(e) { worker.port.onmessage = this.step_func_done(function(e) {
assert_equals(e.data, expected_utf8); assert_equals(e.data, expected_utf8);
@ -558,7 +558,7 @@ onload = function() {
'https://html.spec.whatwg.org/multipage/#dom-sharedworker']}); 'https://html.spec.whatwg.org/multipage/#dom-sharedworker']});
// WebSocket() // WebSocket()
async_test(function(){ subsetTestByKey('websocket', async_test, function() {
var ws = new WebSocket('ws://{{host}}:{{ports[ws][0]}}/echo-query?\u00E5'); var ws = new WebSocket('ws://{{host}}:{{ports[ws][0]}}/echo-query?\u00E5');
this.add_cleanup(function() { this.add_cleanup(function() {
ws.close(); ws.close();
@ -570,7 +570,7 @@ onload = function() {
{help:'https://html.spec.whatwg.org/multipage/#parse-a-websocket-url\'s-components'}); {help:'https://html.spec.whatwg.org/multipage/#parse-a-websocket-url\'s-components'});
// WebSocket#url // WebSocket#url
test(function(){ subsetTestByKey('websocket', test, function() {
var ws = new WebSocket('ws://{{host}}:{{ports[ws][0]}}/echo-query?\u00E5'); var ws = new WebSocket('ws://{{host}}:{{ports[ws][0]}}/echo-query?\u00E5');
ws.close(); ws.close();
var got = ws.url; var got = ws.url;
@ -580,7 +580,7 @@ onload = function() {
// Parsing cache manifest // Parsing cache manifest
function test_cache_manifest(mode) { function test_cache_manifest(mode) {
async_test(function() { subsetTestByKey('appcache', async_test, function() {
var iframe = document.createElement('iframe'); var iframe = document.createElement('iframe');
var uuid = token(); var uuid = token();
iframe.src = 'resources/page-using-manifest.py?id='+uuid+'&encoding='+encoding+'&mode='+mode; iframe.src = 'resources/page-using-manifest.py?id='+uuid+'&encoding='+encoding+'&mode='+mode;
@ -600,7 +600,7 @@ onload = function() {
// CSS // CSS
function test_css(tmpl, expected_cssom, encoding, use_style_element) { function test_css(tmpl, expected_cssom, encoding, use_style_element) {
var desc = ['CSS', (use_style_element ? '<style>' : '<link> (' + encoding + ')'), tmpl].join(' '); var desc = ['CSS', (use_style_element ? '<style>' : '<link> (' + encoding + ')'), tmpl].join(' ');
async_test(function(){ subsetTestByKey('css', async_test, function(){
css_is_supported(tmpl, expected_cssom, this); css_is_supported(tmpl, expected_cssom, this);
var uuid = token(); var uuid = token();
var id = 'test_css_' + uuid; var id = 'test_css_' + uuid;
@ -672,7 +672,7 @@ onload = function() {
// image() (not implemented?) // image() (not implemented?)
// <?xml-stylesheet?> // <?xml-stylesheet?>
async_test(function() { subsetTestByKey('xml', async_test, function() {
var iframe = document.createElement('iframe'); var iframe = document.createElement('iframe');
iframe.src = input_url_xmlstylesheet_css; iframe.src = input_url_xmlstylesheet_css;
document.body.appendChild(iframe); document.body.appendChild(iframe);
@ -686,7 +686,7 @@ onload = function() {
{help:'http://dev.w3.org/csswg/cssom/#requirements-on-user-agents-implementing-the-xml-stylesheet-processing-instruction'}); {help:'http://dev.w3.org/csswg/cssom/#requirements-on-user-agents-implementing-the-xml-stylesheet-processing-instruction'});
// new URL() // new URL()
test(function() { subsetTestByKey('url', test, function() {
var url = new URL('http://example.org/'+input_url); var url = new URL('http://example.org/'+input_url);
var expected = expected_utf8; var expected = expected_utf8;
assert_true(url.href.indexOf(expected) > -1, 'url.href '+msg(expected, url.href)); assert_true(url.href.indexOf(expected) > -1, 'url.href '+msg(expected, url.href));
@ -694,7 +694,7 @@ onload = function() {
}, 'URL constructor, url', }, 'URL constructor, url',
{help:'http://url.spec.whatwg.org/#dom-url'}); {help:'http://url.spec.whatwg.org/#dom-url'});
test(function() { subsetTestByKey('url', test, function() {
var url = new URL('', 'http://example.org/'+input_url); var url = new URL('', 'http://example.org/'+input_url);
var expected = expected_utf8; var expected = expected_utf8;
assert_true(url.href.indexOf(expected) > -1, 'url.href '+msg(expected, url.href)); assert_true(url.href.indexOf(expected) > -1, 'url.href '+msg(expected, url.href));
@ -704,7 +704,7 @@ onload = function() {
// Test different schemes // Test different schemes
function test_scheme(url, utf8) { function test_scheme(url, utf8) {
test(function() { subsetTestByKey('scheme', test, function() {
var a = document.createElement('a'); var a = document.createElement('a');
a.setAttribute('href', url); a.setAttribute('href', url);
var got = a.href; var got = a.href;

View file

@ -2,8 +2,27 @@
<meta charset=utf-8> <meta charset=utf-8>
<title>Resolving URLs, URL character encoding, utf-8</title> <title>Resolving URLs, URL character encoding, utf-8</title>
<meta name="timeout" content="long"> <meta name="timeout" content="long">
<meta name="variant" content="?include=nested-browsing">
<meta name="variant" content="?include=loading">
<meta name="variant" content="?include=submit">
<meta name="variant" content="?include=base-href">
<meta name="variant" content="?include=workers">
<meta name="variant" content="?include=eventsource">
<meta name="variant" content="?include=xmldocument">
<meta name="variant" content="?include=window-open">
<meta name="variant" content="?include=hyperlink-search">
<meta name="variant" content="?include=history">
<meta name="variant" content="?include=svg">
<meta name="variant" content="?include=xhr">
<meta name="variant" content="?include=websocket">
<meta name="variant" content="?include=appcache">
<meta name="variant" content="?include=css">
<meta name="variant" content="?include=xml">
<meta name="variant" content="?include=url">
<meta name="variant" content="?include=scheme">
<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="/common/subset-tests-by-key.js"></script>
<script src="/common/utils.js"></script> <script src="/common/utils.js"></script>
<div id=log></div> <div id=log></div>
<script src="resources/resolve-url.js?encoding=utf-8&pipe=sub"></script> <script src="resources/resolve-url.js?encoding=utf-8&pipe=sub"></script>

View file

@ -2,8 +2,27 @@
<meta charset=windows-1251> <meta charset=windows-1251>
<title>Resolving URLs, URL character encoding, windows-1251</title> <title>Resolving URLs, URL character encoding, windows-1251</title>
<meta name="timeout" content="long"> <meta name="timeout" content="long">
<meta name="variant" content="?include=nested-browsing">
<meta name="variant" content="?include=loading">
<meta name="variant" content="?include=submit">
<meta name="variant" content="?include=base-href">
<meta name="variant" content="?include=workers">
<meta name="variant" content="?include=eventsource">
<meta name="variant" content="?include=xmldocument">
<meta name="variant" content="?include=window-open">
<meta name="variant" content="?include=hyperlink-search">
<meta name="variant" content="?include=history">
<meta name="variant" content="?include=svg">
<meta name="variant" content="?include=xhr">
<meta name="variant" content="?include=websocket">
<meta name="variant" content="?include=appcache">
<meta name="variant" content="?include=css">
<meta name="variant" content="?include=xml">
<meta name="variant" content="?include=url">
<meta name="variant" content="?include=scheme">
<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="/common/subset-tests-by-key.js"></script>
<script src="/common/utils.js"></script> <script src="/common/utils.js"></script>
<div id=log></div> <div id=log></div>
<script src="resources/resolve-url.js?encoding=windows-1251&pipe=sub"></script> <script src="resources/resolve-url.js?encoding=windows-1251&pipe=sub"></script>

View file

@ -2,8 +2,27 @@
<meta charset=windows-1252> <meta charset=windows-1252>
<title>Resolving URLs, URL character encoding, windows-1252</title> <title>Resolving URLs, URL character encoding, windows-1252</title>
<meta name="timeout" content="long"> <meta name="timeout" content="long">
<meta name="variant" content="?include=nested-browsing">
<meta name="variant" content="?include=loading">
<meta name="variant" content="?include=submit">
<meta name="variant" content="?include=base-href">
<meta name="variant" content="?include=workers">
<meta name="variant" content="?include=eventsource">
<meta name="variant" content="?include=xmldocument">
<meta name="variant" content="?include=window-open">
<meta name="variant" content="?include=hyperlink-search">
<meta name="variant" content="?include=history">
<meta name="variant" content="?include=svg">
<meta name="variant" content="?include=xhr">
<meta name="variant" content="?include=websocket">
<meta name="variant" content="?include=appcache">
<meta name="variant" content="?include=css">
<meta name="variant" content="?include=xml">
<meta name="variant" content="?include=url">
<meta name="variant" content="?include=scheme">
<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="/common/subset-tests-by-key.js"></script>
<script src="/common/utils.js"></script> <script src="/common/utils.js"></script>
<div id=log></div> <div id=log></div>
<script src="resources/resolve-url.js?encoding=windows-1252&pipe=sub"></script> <script src="resources/resolve-url.js?encoding=windows-1252&pipe=sub"></script>

View file

@ -0,0 +1,8 @@
'use strict';
self.addEventListener('activate', event => {
event.waitUntil(new Promise(() => {
// Use a promise that never resolves to prevent this service worker from
// advancing past the 'activating' state.
}));
});

View file

@ -0,0 +1,10 @@
'use strict';
self.addEventListener('fetch', event => {
if (event.request.url.endsWith('waituntil-forever')) {
event.respondWith(new Promise(() => {
// Use a promise that never resolves to prevent this fetch from
// completing.
}));
}
});

View file

@ -0,0 +1,8 @@
'use strict';
self.addEventListener('install', event => {
event.waitUntil(new Promise(() => {
// Use a promise that never resolves to prevent this service worker from
// advancing past the 'installing' state.
}));
});

View file

@ -0,0 +1,8 @@
'use strict';
// Use an infinite loop to prevent this service worker from advancing past the
// 'parsed' state.
let i = 0;
while (true) {
++i;
}

View file

@ -0,0 +1,19 @@
'use strict';
// Returns a promise for a network response that contains the Clear-Site-Data:
// "storage" header.
function clear_site_data() {
return fetch('resources/blank.html?pipe=header(Clear-Site-Data,"storage")');
}
async function assert_no_registrations_exist() {
const registrations = await navigator.serviceWorker.getRegistrations();
assert_equals(registrations.length, 0);
}
async function add_controlled_iframe(test, url) {
const frame = await with_iframe(url);
test.add_cleanup(() => { frame.remove(); });
assert_true(frame.contentWindow.navigator.serviceWorker.controller !== null);
return frame;
}

View file

@ -0,0 +1,57 @@
<!doctype html>
<meta charset=utf-8>
<title>Use Clear-Site-Data to immediately unregister service workers</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/test-helpers.sub.js"></script>
<script src="resources/unregister-immediately-helpers.js"></script>
<body>
<script>
'use strict';
// These tests use the Clear-Site-Data network response header to immediately
// unregister a service worker registration with a worker whose state is
// 'installing' or 'parsed'. Clear-Site-Data must delete the registration,
// abort the installation and then clear the registration by setting the
// worker's state to 'redundant'.
promise_test(async test => {
// This test keeps the the service worker in the 'parsed' state by using a
// script with an infinite loop.
const script_url = 'resources/onparse-infiniteloop-worker.js';
const scope_url =
'resources/scope-for-unregister-immediately-with-parsed-worker';
await service_worker_unregister(test, /*scope=*/script_url);
// Clear-Site-Data must cause register() to fail.
const register_promise = promise_rejects_dom(test, 'AbortError',
navigator.serviceWorker.register(script_url, { scope: scope_url}));;
await Promise.all([clear_site_data(), register_promise]);
await assert_no_registrations_exist();
}, 'Clear-Site-Data must abort service worker registration.');
promise_test(async test => {
// This test keeps the the service worker in the 'installing' state by using a
// script with an install event waitUntil() promise that never resolves.
const script_url = 'resources/oninstall-waituntil-forever.js';
const scope_url =
'resources/scope-for-unregister-immediately-with-installing-worker';
const registration = await service_worker_unregister_and_register(
test, script_url, scope_url);
const service_worker = registration.installing;
// Clear-Site-Data must cause install to fail.
await Promise.all([
clear_site_data(),
wait_for_state(test, service_worker, 'redundant')]);
await assert_no_registrations_exist();
}, 'Clear-Site-Data must unregister a registration with a worker '
+ 'in the "installing" state.');
</script>
</body>

View file

@ -0,0 +1,50 @@
<!doctype html>
<meta charset=utf-8>
<title>Use Clear-Site-Data to immediately unregister service workers</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/test-helpers.sub.js"></script>
<script src="resources/unregister-immediately-helpers.js"></script>
<body>
<script>
'use strict';
// These tests use the Clear-Site-Data network response header to immediately
// unregister a service worker registration with a worker that has pending
// extendable events. Clear-Site-Data must delete the registration,
// abort all pending extendable events and then clear the registration by
// setting the worker's state to 'redundant'
promise_test(async test => {
// Use a service worker script that can produce fetch events with pending
// respondWith() promises that never resolve.
const script_url = 'resources/onfetch-waituntil-forever.js';
const scope_url =
'resources/blank.html?unregister-immediately-with-fetch-event';
const registration = await service_worker_unregister_and_register(
test, script_url, scope_url);
await wait_for_state(test, registration.installing, 'activated');
const frame = await add_controlled_iframe(test, scope_url);
// Clear-Site-Data must cause the pending fetch promise to reject.
const fetch_promise = promise_rejects_js(
test, TypeError, frame.contentWindow.fetch('waituntil-forever'));
const event_watcher = new EventWatcher(
test, frame.contentWindow.navigator.serviceWorker, 'controllerchange');
await Promise.all([
clear_site_data(),
fetch_promise,
event_watcher.wait_for('controllerchange'),
wait_for_state(test, registration.active, 'redundant'),]);
assert_equals(frame.contentWindow.navigator.serviceWorker.controller, null);
await assert_no_registrations_exist();
}, 'Clear-Site-Data must fail pending subresource fetch events.');
</script>
</body>

View file

@ -0,0 +1,134 @@
<!doctype html>
<meta charset=utf-8>
<title>Use Clear-Site-Data to immediately unregister service workers</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/test-helpers.sub.js"></script>
<script src="resources/unregister-immediately-helpers.js"></script>
<body>
<script>
'use strict';
// These tests use the Clear-Site-Data network response header to immediately
// unregister a service worker registration with a worker whose state is
// 'installed', 'waiting', 'activating' or 'activated'. Immediately
// unregistering runs the "Clear Registration" algorithm without waiting for the
// active worker's controlled clients to unload.
promise_test(async test => {
// This test keeps the the service worker in the 'activating' state by using a
// script with an activate event waitUntil() promise that never resolves.
const script_url = 'resources/onactivate-waituntil-forever.js';
const scope_url =
'resources/scope-for-unregister-immediately-with-waiting-worker';
const registration = await service_worker_unregister_and_register(
test, script_url, scope_url);
const service_worker = registration.installing;
await wait_for_state(test, service_worker, 'activating');
// Clear-Site-Data must cause activation to fail.
await Promise.all([
clear_site_data(),
wait_for_state(test, service_worker, 'redundant')]);
await assert_no_registrations_exist();
}, 'Clear-Site-Data must unregister a registration with a worker '
+ 'in the "activating" state.');
promise_test(async test => {
// Create an registration with two service workers: one activated and one
// installed.
const script_url = 'resources/update_shell.py';
const scope_url =
'resources/scope-for-unregister-immediately-with-with-update';
const registration = await service_worker_unregister_and_register(
test, script_url, scope_url);
const first_service_worker = registration.installing;
await wait_for_state(test, first_service_worker, 'activated');
registration.update();
const event_watcher = new EventWatcher(test, registration, 'updatefound');
await event_watcher.wait_for('updatefound');
const second_service_worker = registration.installing;
await wait_for_state(test, second_service_worker, 'installed');
// Clear-Site-Data must clear both workers from the registration.
await Promise.all([
clear_site_data(),
wait_for_state(test, first_service_worker, 'redundant'),
wait_for_state(test, second_service_worker, 'redundant')]);
await assert_no_registrations_exist();
}, 'Clear-Site-Data must unregister an activated registration with '
+ 'an update waiting.');
promise_test(async test => {
const script_url = 'resources/empty.js';
const scope_url =
'resources/blank.html?unregister-immediately-with-controlled-client';
const registration = await service_worker_unregister_and_register(
test, script_url, scope_url);
const service_worker = registration.installing;
await wait_for_state(test, service_worker, 'activated');
const frame = await add_controlled_iframe(test, scope_url);
const frame_registration =
await frame.contentWindow.navigator.serviceWorker.ready;
const event_watcher = new EventWatcher(
test, frame.contentWindow.navigator.serviceWorker, 'controllerchange');
// Clear-Site-Data must remove the iframe's controller.
await Promise.all([
clear_site_data(),
event_watcher.wait_for('controllerchange'),
wait_for_state(test, service_worker, 'redundant')]);
assert_equals(frame.contentWindow.navigator.serviceWorker.controller, null);
await assert_no_registrations_exist();
// The ready promise must continue to resolve with the unregistered
// registration.
assert_equals(frame_registration,
await frame.contentWindow.navigator.serviceWorker.ready);
}, 'Clear-Site-Data must unregister an activated registration with controlled '
+ 'clients.');
promise_test(async test => {
const script_url = 'resources/empty.js';
const scope_url =
'resources/blank.html?unregister-immediately-while-waiting-to-clear';
const registration = await service_worker_unregister_and_register(
test, script_url, scope_url);
const service_worker = registration.installing;
await wait_for_state(test, service_worker, 'activated');
const frame = await add_controlled_iframe(test, scope_url);
const event_watcher = new EventWatcher(
test, frame.contentWindow.navigator.serviceWorker, 'controllerchange');
// Unregister waits to clear the registration until no controlled clients
// exist.
await registration.unregister();
// Clear-Site-Data must clear the unregistered registration immediately.
await Promise.all([
clear_site_data(),
event_watcher.wait_for('controllerchange'),
wait_for_state(test, service_worker, 'redundant')]);
assert_equals(frame.contentWindow.navigator.serviceWorker.controller, null);
await assert_no_registrations_exist();
}, 'Clear-Site-Data must clear an unregistered registration waiting for '
+ ' controlled clients to unload.');
</script>
</body>

View file

@ -0,0 +1,15 @@
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:h="http:/www.w3.org/1999/xhtml">
<title>&#x3c;linearGradient&#x3e; (without content) inheriting from a &#x3c;linearGradient&#x3e; in an invalid context</title>
<h:link rel="help" href="https://svgwg.org/svg2-draft/pservers.html#StopNotes"/>
<h:link rel="match" href="reference/green-100x100.svg"/>
<linearGradient id="linearGradient1" xlink:href="#linearGradient0"/>
<rect width="100" height="100" fill="green"/>
<rect width="100" height="100" fill="url(#linearGradient1) yellow"/>
<text>
<linearGradient id="linearGradient0">
<stop stop-color="orange"/>
</linearGradient>
</text>
</svg>

After

Width:  |  Height:  |  Size: 717 B

View file

@ -0,0 +1,16 @@
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:h="http:/www.w3.org/1999/xhtml">
<title>&#x3c;linearGradient&#x3e; (with content) inheriting from a &#x3c;linearGradient&#x3e; in an invalid context</title>
<h:link rel="help" href="https://svgwg.org/svg2-draft/pservers.html#StopNotes"/>
<h:link rel="match" href="reference/green-100x100.svg"/>
<linearGradient id="linearGradient1" xlink:href="#linearGradient0">
<stop stop-color="green"/>
</linearGradient>
<rect width="100" height="100" fill="url(#linearGradient1) yellow"/>
<text>
<linearGradient id="linearGradient0">
<stop stop-color="orange"/>
</linearGradient>
</text>
</svg>

After

Width:  |  Height:  |  Size: 716 B

View file

@ -0,0 +1,13 @@
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:h="http:/www.w3.org/1999/xhtml">
<title>&#x3c;pattern&#x3e; (without content) inheriting from a &#x3c;pattern&#x3e; in an invalid context</title>
<h:link rel="match" href="reference/green-100x100.svg"/>
<pattern id="pattern1" xlink:href="#pattern0" width="1" height="1"/>
<rect width="100" height="100" fill="url(#pattern1) green"/>
<text>
<pattern id="pattern0">
<rect width="100" height="100" fill="orange"/>
</pattern>
</text>
</svg>

After

Width:  |  Height:  |  Size: 562 B

View file

@ -0,0 +1,15 @@
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:h="http:/www.w3.org/1999/xhtml">
<title>&#x3c;pattern&#x3e; (with content) inheriting from a &#x3c;pattern&#x3e; in an invalid context</title>
<h:link rel="match" href="reference/green-100x100.svg"/>
<pattern id="pattern1" xlink:href="#pattern0" width="1" height="1">
<rect width="100" height="100" fill="green"/>
</pattern>
<rect width="100" height="100" fill="url(#pattern1) yellow"/>
<text>
<pattern id="pattern0">
<rect width="100" height="100" fill="orange"/>
</pattern>
</text>
</svg>

After

Width:  |  Height:  |  Size: 622 B

View file

@ -0,0 +1,21 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>SVG presentation attributes - on irrelevant elements</title>
<link rel="help" href="https://svgwg.org/svg2-draft/styling.html#PresentationAttributes">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="presentation-attributes.js"></script>
<svg id="svg"></svg>
<script>
// Test that all of the presentation attributes with no special rules are
// also supported on elements that the corresponding property does not
// apply to.
for (let p in PROPERTIES) {
if (CSS.supports(p, "initial") && PROPERTIES[p].irrelevantElement) {
test(function() {
assertPresentationAttributeIsSupported(PROPERTIES[p].irrelevantElement, p, PROPERTIES[p].value, p);
}, `${p} presentation attribute supported on an irrelevant element`);
}
}
</script>

View file

@ -0,0 +1,20 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>SVG presentation attributes - on relevant elements</title>
<link rel="help" href="https://svgwg.org/svg2-draft/styling.html#PresentationAttributes">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="presentation-attributes.js"></script>
<svg id="svg"></svg>
<script>
// Test that all of the presentation attributes with no special rules are
// supported on elements that the corresponding properties apply to.
for (let p in PROPERTIES) {
if (CSS.supports(p, "initial")) {
test(function() {
assertPresentationAttributeIsSupported(PROPERTIES[p].relevantElement, p, PROPERTIES[p].value, p);
}, `${p} presentation attribute supported on a relevant element`);
}
}
</script>

View file

@ -0,0 +1,149 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>SVG presentation attributes - special cases</title>
<link rel="help" href="https://svgwg.org/svg2-draft/styling.html#PresentationAttributes">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="presentation-attributes.js"></script>
<svg id="svg"></svg>
<script>
// 1. Test the special cases where presentation attributes are only allowed on
// a specific set of elements.
if (propertiesAreSupported(["cx", "cy"])) {
for (let e of ["circle", "ellipse"]) {
test(function() {
for (let p of ["cx", "cy"]) {
assertPresentationAttributeIsSupported(e, p, "1", p);
}
}, `cx and cy presentation attributes supported on ${e} element`);
}
}
if (propertiesAreSupported(["x", "y", "width", "height"])) {
for (let e of ["foreignObject", "image", "rect", "svg", "symbol", "use"]) {
test(function() {
for (let p of ["x", "y", "width", "height"]) {
assertPresentationAttributeIsSupported(e, p, "1", p);
}
}, `x, y, width, and height presentation attributes supported on ${e} element`);
}
}
if (CSS.supports("r", "initial")) {
test(function() {
assertPresentationAttributeIsSupported("circle", "r", "1", "r");
}, `r presentation attribute supported on circle element`);
}
if (propertiesAreSupported(["rx", "ry"])) {
for (let e of ["ellipse", "rect"]) {
test(function() {
for (let p of ["rx", "ry"]) {
assertPresentationAttributeIsSupported(e, p, "1", p);
}
}, `rx and ry presentation attributes supported on ${e} element`);
}
}
if (CSS.supports("d", "initial")) {
test(function() {
assertPresentationAttributeIsSupported("path", "d", "M0,0 L1,1", "d");
}, `d presentation attribute supported on path element`);
}
// 2. Test that for those presentation attributes only allowed on a specific
// set of elements, that they are not supported on some other SVG element.
// (We use 'g' as that element for testing.)
if (propertiesAreSupported(["cx", "cy"])) {
test(function() {
for (let p of ["cx", "cy"]) {
assertPresentationAttributeIsNotSupported("g", p, "1", p);
}
}, `cx and cy presentation attributes not supported on other elements`);
}
if (propertiesAreSupported(["x", "y", "width", "height"])) {
test(function() {
for (let p of ["x", "y", "width", "height"]) {
assertPresentationAttributeIsNotSupported("g", p, "1", p);
}
}, `x, y, width, and height presentation attributes not supported on other elements`);
}
if (CSS.supports("r", "initial")) {
test(function() {
assertPresentationAttributeIsNotSupported("g", "r", "1", "r");
}, `r presentation attribute not supported on other elements`);
}
if (propertiesAreSupported(["rx", "ry"])) {
test(function() {
for (let p of ["rx", "ry"]) {
assertPresentationAttributeIsNotSupported("g", p, "1", p);
}
}, `rx and ry presentation attributes not supported on other elements`);
}
if (CSS.supports("d", "initial")) {
test(function() {
assertPresentationAttributeIsSupported("g", "d", "M0,0 L1,1", "d");
}, `d presentation attribute not supported on other elements`);
}
// 3. Test that the fill presentation attribute is not supported on any
// animation elements.
if (CSS.supports("fill", "initial")) {
test(function() {
for (let e of ["animate", "animateMotion", "animateTransform", "discard", "set"]) {
assertPresentationAttributeIsNotSupported(e, "fill", "blue", "fill");
}
}, `fill presentation attribute not supported on animation elements`);
}
if (CSS.supports("transform", "initial")) {
// 4. Test support for the presentation attributes of the transform property,
// which have a different spelling depending on which element they're on.
test(function() {
assertPresentationAttributeIsSupported("g", "transform", "scale(2)", "transform");
}, `transform presentation attribute supported on g`);
test(function() {
assertPresentationAttributeIsSupported("pattern", "patternTransform", "scale(2)", "transform");
}, `patternTransform presentation attribute supported on pattern`);
for (let e of ["linearGradient", "radialGradient"]) {
test(function() {
assertPresentationAttributeIsSupported(e, "gradientTransform", "scale(2)", "transform");
}, `patternTransform presentation attribute supported on ${e}`);
}
// 5. Test that the wrong spellings of the presentation attributes of the
// transform property are not supported.
test(function() {
for (let e of ["pattern", "linearGradient", "radialGradient"]) {
assertPresentationAttributeIsNotSupported(e, "transform", "scale(2)", "transform");
}
}, `transform presentation attribute not supported on pattern or gradient elements`);
test(function() {
for (let e of ["g", "linearGradient", "radialGradient"]) {
assertPresentationAttributeIsNotSupported(e, "patternTransform", "scale(2)", "transform");
}
}, `patternTransform presentation attribute not supported on g or gradient elements`);
test(function() {
for (let e of ["g", "pattern"]) {
assertPresentationAttributeIsNotSupported(e, "gradientTransform", "scale(2)", "transform");
}
}, `gradientTransform presentation attribute not supported on g or pattern elements`);
}
</script>

View file

@ -0,0 +1,20 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>SVG presentation attributes - on unknown SVG elements</title>
<link rel="help" href="https://svgwg.org/svg2-draft/styling.html#PresentationAttributes">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="presentation-attributes.js"></script>
<svg id="svg"></svg>
<script>
// Test that all of the presentation attributes with no special
// rules are supported on unknown SVG elements.
for (let p in PROPERTIES) {
if (CSS.supports(p, "initial") && PROPERTIES[p].irrelevantElement) {
test(function() {
assertPresentationAttributeIsSupported("unknown", p, PROPERTIES[p].value, p);
}, `${p} presentation attribute supported on an unknown SVG element`);
}
}
</script>

View file

@ -0,0 +1,385 @@
const PROPERTIES = {
"alignment-baseline": {
value: "middle",
relevantElement: "text",
irrelevantElement: "rect",
},
"baseline-shift": {
value: "1",
relevantElement: "text",
irrelevantElement: "rect",
},
"clip-path": {
value: "url(#e)",
relevantElement: "g",
irrelevantElement: "linearGradient",
},
"clip-rule": {
value: "evenodd",
relevantElement: "g",
irrelevantElement: "linearGradient",
},
"color": {
value: "blue",
relevantElement: "g",
irrelevantElement: "image",
},
"color-interpolation-filters": {
value: "sRGB",
relevantElement: "filter",
irrelevantElement: "linearGradient",
},
"color-interpolation": {
value: "linearRGB",
relevantElement: "linearGradient",
irrelevantElement: "image",
},
"cursor": {
value: "pointer",
relevantElement: "g",
irrelevantElement: "defs",
},
"cx": {
value: "1",
relevantElement: "circle",
irrelevantElement: null,
},
"cy": {
value: "1",
relevantElement: "circle",
irrelevantElement: null,
},
"direction": {
value: "rtl",
relevantElement: "text",
irrelevantElement: "rect",
},
"display": {
value: "block",
relevantElement: "g",
irrelevantElement: "linearGradient",
},
"d": {
value: "M0,0 L1,1",
relevantElement: "path",
irrelevantElement: "image",
},
"dominant-baseline": {
value: "middle",
relevantElement: "text",
irrelevantElement: "rect",
},
"fill": {
value: "blue",
relevantElement: "g",
irrelevantElement: "image",
},
"fill-opacity": {
value: "0.5",
relevantElement: "g",
irrelevantElement: "image",
},
"fill-rule": {
value: "evenodd",
relevantElement: "path",
irrelevantElement: "image",
},
"filter": {
value: "url(#e)",
relevantElement: "g",
irrelevantElement: "linearGradient",
},
"flood-color": {
value: "blue",
relevantElement: "feFlood",
irrelevantElement: "rect",
},
"flood-opacity": {
value: "0.5",
relevantElement: "feFlood",
irrelevantElement: "rect",
},
"font-family": {
value: "Test Family",
relevantElement: "text",
irrelevantElement: "rect",
},
"font-size": {
value: "50",
relevantElement: "text",
irrelevantElement: "rect",
},
"font-size-adjust": {
value: "0.5",
relevantElement: "text",
irrelevantElement: "rect",
},
"font-stretch": {
value: "expanded",
relevantElement: "text",
irrelevantElement: "rect",
},
"font-style": {
value: "italic",
relevantElement: "text",
irrelevantElement: "rect",
},
"font-variant": {
value: "small-caps",
relevantElement: "text",
irrelevantElement: "rect",
},
"font-weight": {
value: "900",
relevantElement: "text",
irrelevantElement: "rect",
},
"glyph-orientation-vertical": {
value: "90",
relevantElement: "text",
irrelevantElement: "rect",
},
"height": {
value: "1",
relevantElement: "rect",
irrelevantElement: "path",
},
"image-rendering": {
value: "optimizeSpeed",
relevantElement: "image",
irrelevantElement: "path",
},
"letter-spacing": {
value: "1px",
relevantElement: "text",
irrelevantElement: "rect",
},
"lighting-color": {
value: "blue",
relevantElement: "feDiffuseLighting",
irrelevantElement: "rect",
},
"marker-end": {
value: "url(#e)",
relevantElement: "path",
irrelevantElement: "image",
},
"marker-mid": {
value: "url(#e)",
relevantElement: "path",
irrelevantElement: "image",
},
"marker-start": {
value: "url(#e)",
relevantElement: "path",
irrelevantElement: "image",
},
"mask-type": {
value: "alpha",
relevantElement: "mask",
irrelevantElement: "rect",
},
"mask": {
value: "url(#e)",
relevantElement: "g",
irrelevantElement: "linearGradient",
},
"opacity": {
value: "0.5",
relevantElement: "g",
irrelevantElement: "linearGradient",
},
"overflow": {
value: "scroll",
relevantElement: "svg",
irrelevantElement: "rect",
},
"paint-order": {
value: "fill stroke",
relevantElement: "path",
irrelevantElement: "image",
},
"pointer-events": {
value: "none",
relevantElement: "g",
irrelevantElement: "linearGradient",
},
"r": {
value: "1",
relevantElement: "circle",
irrelevantElement: "rect",
},
"rx": {
value: "1",
relevantElement: "rect",
irrelevantElement: "path",
},
"ry": {
value: "1",
relevantElement: "rect",
irrelevantElement: "path",
},
"shape-rendering": {
value: "geometricPrecision",
relevantElement: "path",
irrelevantElement: "image",
},
"stop-color": {
value: "blue",
relevantElement: "stop",
irrelevantElement: "rect",
},
"stop-opacity": {
value: "0.5",
relevantElement: "stop",
irrelevantElement: "rect",
},
"stroke": {
value: "blue",
relevantElement: "path",
irrelevantElement: "image",
},
"stroke-dasharray": {
value: "1 1",
relevantElement: "path",
irrelevantElement: "image",
},
"stroke-dashoffset": {
value: "1",
relevantElement: "path",
irrelevantElement: "image",
},
"stroke-linecap": {
value: "round",
relevantElement: "path",
irrelevantElement: "image",
},
"stroke-linejoin": {
value: "round",
relevantElement: "path",
irrelevantElement: "image",
},
"stroke-miterlimit": {
value: "1",
relevantElement: "path",
irrelevantElement: "image",
},
"stroke-opacity": {
value: "0.5",
relevantElement: "path",
irrelevantElement: "image",
},
"stroke-width": {
value: "2",
relevantElement: "path",
irrelevantElement: "image",
},
"text-anchor": {
value: "middle",
relevantElement: "text",
irrelevantElement: "rect",
},
"text-decoration": {
value: "underline",
relevantElement: "text",
irrelevantElement: "rect",
},
"text-overflow": {
value: "ellipsis",
relevantElement: "text",
irrelevantElement: "rect",
},
"text-rendering": {
value: "geometricPrecision",
relevantElement: "text",
irrelevantElement: "rect",
},
"transform-origin": {
value: "1px 1px",
relevantElement: "g",
irrelevantElement: "linearGradient",
},
"transform": {
value: "scale(2)",
relevantElement: "g",
irrelevantElement: "linearGradient",
},
"unicode-bidi": {
value: "embed",
relevantElement: "text",
irrelevantElement: "rect",
},
"vector-effect": {
value: "non-scaling-stroke",
relevantElement: "g",
irrelevantElement: "linearGradient",
},
"visibility": {
value: "hidden",
relevantElement: "g",
irrelevantElement: "linearGradient",
},
"white-space": {
value: "pre",
relevantElement: "text",
irrelevantElement: "rect",
},
"width": {
value: "1",
relevantElement: "rect",
irrelevantElement: "path",
},
"word-spacing": {
value: "1",
relevantElement: "text",
irrelevantElement: "rect",
},
"writing-mode": {
value: "vertical-rl",
relevantElement: "text",
irrelevantElement: "rect",
},
"x": {
value: "1",
relevantElement: "rect",
irrelevantElement: "path",
},
"y": {
value: "1",
relevantElement: "rect",
irrelevantElement: "path",
},
};
function presentationAttributeIsSupported(element, attribute, value, property) {
let e = document.createElementNS("http://www.w3.org/2000/svg", element);
svg.append(e);
let propertyValueBefore = getComputedStyle(e).getPropertyValue(property);
e.setAttribute(attribute, value);
let propertyValueAfter = getComputedStyle(e).getPropertyValue(property);
e.remove();
return propertyValueBefore != propertyValueAfter;
}
function assertPresentationAttributeIsSupported(element, attribute, value, property) {
assert_true(
presentationAttributeIsSupported(element, attribute, value, property),
`Presentation attribute ${attribute}="${value}" should be supported on ${element} element`
);
}
function assertPresentationAttributeIsNotSupported(element, attribute, value, property) {
assert_false(
presentationAttributeIsSupported(element, attribute, value, property),
`Presentation attribute ${attribute}="${value}" should be supported on ${element} element`
);
}
function propertiesAreSupported(properties) {
for (let p of properties) {
if (!CSS.supports(p, "initial")) {
return false;
}
}
return true;
}

View file

@ -633,9 +633,8 @@ def test_late_timeout():
] ]
@pytest.mark.skipif(six.PY3, reason="Cannot parse print statements from python 3")
def test_print_statement(): def test_print_statement():
error_map = check_with_files(b"def foo():\n print 'statement'\n print\n") error_map = check_with_files(b"def foo():\n print('statement')\n print\n")
for (filename, (errors, kind)) in error_map.items(): for (filename, (errors, kind)) in error_map.items():
check_errors(errors) check_errors(errors)

View file

@ -26,6 +26,7 @@ if MYPY:
from typing import Callable from typing import Callable
from typing import List from typing import List
from typing import Optional from typing import Optional
from typing import Text
here = os.path.dirname(__file__) here = os.path.dirname(__file__)
@ -50,9 +51,9 @@ def should_download(manifest_path, rebuild_time=timedelta(days=5)):
def merge_pr_tags(repo_root, max_count=50): def merge_pr_tags(repo_root, max_count=50):
# type: (str, int) -> List[str] # type: (str, int) -> List[Text]
gitfunc = git(repo_root) gitfunc = git(repo_root)
tags = [] # type: List[str] tags = [] # type: List[Text]
if gitfunc is None: if gitfunc is None:
return tags return tags
for line in gitfunc("log", "--format=%D", "--max-count=%s" % max_count).split("\n"): for line in gitfunc("log", "--format=%D", "--max-count=%s" % max_count).split("\n"):
@ -79,7 +80,7 @@ def score_name(name):
def github_url(tags): def github_url(tags):
# type: (List[str]) -> Optional[List[str]] # type: (List[Text]) -> Optional[List[Text]]
for tag in tags: for tag in tags:
url = "https://api.github.com/repos/web-platform-tests/wpt/releases/tags/%s" % tag url = "https://api.github.com/repos/web-platform-tests/wpt/releases/tags/%s" % tag
try: try:
@ -111,8 +112,8 @@ def github_url(tags):
def download_manifest( def download_manifest(
manifest_path, # type: str manifest_path, # type: str
tags_func, # type: Callable[[], List[str]] tags_func, # type: Callable[[], List[Text]]
url_func, # type: Callable[[List[str]], Optional[List[str]]] url_func, # type: Callable[[List[Text]], Optional[List[Text]]]
force=False # type: bool force=False # type: bool
): ):
# type: (...) -> bool # type: (...) -> bool

View file

@ -2,7 +2,7 @@ import hashlib
import re import re
import os import os
from collections import deque from collections import deque
from six import binary_type, PY3 from six import binary_type, PY3, iteritems
from six.moves.urllib.parse import urljoin from six.moves.urllib.parse import urljoin
from fnmatch import fnmatch from fnmatch import fnmatch
@ -195,7 +195,7 @@ class SourceFile(object):
("css", "common")} # type: Set[Tuple[bytes, ...]] ("css", "common")} # type: Set[Tuple[bytes, ...]]
def __init__(self, tests_root, rel_path, url_base, hash=None, contents=None): def __init__(self, tests_root, rel_path, url_base, hash=None, contents=None):
# type: (AnyStr, AnyStr, Text, Optional[bytes], Optional[bytes]) -> None # type: (AnyStr, AnyStr, Text, Optional[Text], Optional[bytes]) -> None
"""Object representing a file in a source tree. """Object representing a file in a source tree.
:param tests_root: Path to the root of the source tree :param tests_root: Path to the root of the source tree
@ -242,9 +242,7 @@ class SourceFile(object):
if "__cached_properties__" in rv: if "__cached_properties__" in rv:
cached_properties = rv["__cached_properties__"] cached_properties = rv["__cached_properties__"]
for key in rv.keys(): rv = {key:value for key, value in iteritems(rv) if key not in cached_properties}
if key in cached_properties:
del rv[key]
del rv["__cached_properties__"] del rv["__cached_properties__"]
return rv return rv
@ -304,7 +302,7 @@ class SourceFile(object):
@cached_property @cached_property
def hash(self): def hash(self):
# type: () -> bytes # type: () -> Text
if not self._hash: if not self._hash:
with self.open() as f: with self.open() as f:
content = f.read() content = f.read()

View file

@ -55,16 +55,16 @@ def to_os_path(path):
def git(path): def git(path):
# type: (bytes) -> Optional[Callable[..., bytes]] # type: (bytes) -> Optional[Callable[..., Text]]
def gitfunc(cmd, *args): def gitfunc(cmd, *args):
# type: (bytes, *bytes) -> bytes # type: (bytes, *bytes) -> Text
full_cmd = ["git", cmd] + list(args) full_cmd = ["git", cmd] + list(args)
try: try:
return subprocess.check_output(full_cmd, cwd=path, stderr=subprocess.STDOUT) return subprocess.check_output(full_cmd, cwd=path, stderr=subprocess.STDOUT).decode('utf8')
except Exception as e: except Exception as e:
if platform.uname()[0] == "Windows" and isinstance(e, WindowsError): if platform.uname()[0] == "Windows" and isinstance(e, WindowsError):
full_cmd[0] = "git.bat" full_cmd[0] = "git.bat"
return subprocess.check_output(full_cmd, cwd=path, stderr=subprocess.STDOUT) return subprocess.check_output(full_cmd, cwd=path, stderr=subprocess.STDOUT).decode('utf8')
else: else:
raise raise

View file

@ -33,7 +33,7 @@ def get_tree(tests_root, manifest, manifest_path, cache_root,
# type: (bytes, Manifest, Optional[bytes], Optional[bytes], bool, bool) -> FileSystem # type: (bytes, Manifest, Optional[bytes], Optional[bytes], bool, bool) -> FileSystem
tree = None tree = None
if cache_root is None: if cache_root is None:
cache_root = os.path.join(tests_root, b".wptcache") cache_root = os.path.join(tests_root, ".wptcache")
if not os.path.exists(cache_root): if not os.path.exists(cache_root):
try: try:
os.makedirs(cache_root) os.makedirs(cache_root)
@ -58,21 +58,21 @@ class GitHasher(object):
self.git = git(path) self.git = git(path)
def _local_changes(self): def _local_changes(self):
# type: () -> Set[bytes] # type: () -> Set[Text]
"""get a set of files which have changed between HEAD and working copy""" """get a set of files which have changed between HEAD and working copy"""
assert self.git is not None assert self.git is not None
# note that git runs the command with tests_root as the cwd, which may # note that git runs the command with tests_root as the cwd, which may
# not be the root of the git repo (e.g., within a browser repo) # not be the root of the git repo (e.g., within a browser repo)
cmd = [b"diff-index", b"--relative", b"--no-renames", b"--name-only", b"-z", b"HEAD"] cmd = [b"diff-index", b"--relative", b"--no-renames", b"--name-only", b"-z", b"HEAD"]
data = self.git(*cmd) data = self.git(*cmd)
return set(data.split(b"\0")) return set(data.split("\0"))
def hash_cache(self): def hash_cache(self):
# type: () -> Dict[bytes, Optional[bytes]] # type: () -> Dict[Text, Optional[Text]]
""" """
A dict of rel_path -> current git object id if the working tree matches HEAD else None A dict of rel_path -> current git object id if the working tree matches HEAD else None
""" """
hash_cache = {} # type: Dict[bytes, Optional[bytes]] hash_cache = {} # type: Dict[Text, Optional[Text]]
if self.git is None: if self.git is None:
return hash_cache return hash_cache
@ -81,9 +81,9 @@ class GitHasher(object):
# not be the root of the git repo (e.g., within a browser repo) # not be the root of the git repo (e.g., within a browser repo)
cmd = ["ls-tree", "-r", "-z", "HEAD"] cmd = ["ls-tree", "-r", "-z", "HEAD"]
local_changes = self._local_changes() local_changes = self._local_changes()
for result in self.git(*cmd).split(b"\0")[:-1]: # type: bytes for result in self.git(*cmd).split("\0")[:-1]: # type: Text
data, rel_path = result.rsplit(b"\t", 1) data, rel_path = result.rsplit("\t", 1)
hash_cache[rel_path] = None if rel_path in local_changes else data.split(b" ", 3)[2] hash_cache[rel_path] = None if rel_path in local_changes else data.split(" ", 3)[2]
return hash_cache return hash_cache
@ -174,7 +174,7 @@ class CacheFile(with_metaclass(abc.ABCMeta)):
class MtimeCache(CacheFile): class MtimeCache(CacheFile):
file_name = b"mtime.json" file_name = "mtime.json"
def __init__(self, cache_root, tests_root, manifest_path, rebuild=False): def __init__(self, cache_root, tests_root, manifest_path, rebuild=False):
# type: (bytes, bytes, bytes, bool) -> None # type: (bytes, bytes, bytes, bool) -> None
@ -222,7 +222,7 @@ class MtimeCache(CacheFile):
class GitIgnoreCache(CacheFile, MutableMapping): # type: ignore class GitIgnoreCache(CacheFile, MutableMapping): # type: ignore
file_name = b"gitignore.json" file_name = "gitignore.json"
def check_valid(self, data): def check_valid(self, data):
# type: (Dict[Any, Any]) -> Dict[Any, Any] # type: (Dict[Any, Any]) -> Dict[Any, Any]
@ -286,7 +286,7 @@ def walk(root):
relpath = os.path.relpath relpath = os.path.relpath
root = os.path.abspath(root) root = os.path.abspath(root)
stack = deque([(root, b"")]) stack = deque([(root, "")])
while stack: while stack:
dir_path, rel_path = stack.popleft() dir_path, rel_path = stack.popleft()

View file

@ -299,7 +299,7 @@ def affected_testfiles(files_changed, # type: Iterable[Text]
def affected_by_interfaces(file_contents): def affected_by_interfaces(file_contents):
# type: (Union[bytes, Text]) -> bool # type: (Union[bytes, Text]) -> bool
if len(interfaces_changed_names) > 0: if len(interfaces_changed) > 0:
if 'idlharness.js' in file_contents: if 'idlharness.js' in file_contents:
for interface in interfaces_changed_names: for interface in interfaces_changed_names:
regex = '[\'"]' + interface + '(\\.idl)?[\'"]' regex = '[\'"]' + interface + '(\\.idl)?[\'"]'
@ -324,9 +324,9 @@ def affected_testfiles(files_changed, # type: Iterable[Text]
with open(test_full_path, "rb") as fh: with open(test_full_path, "rb") as fh:
raw_file_contents = fh.read() # type: bytes raw_file_contents = fh.read() # type: bytes
if raw_file_contents.startswith("\xfe\xff"): if raw_file_contents.startswith(b"\xfe\xff"):
file_contents = raw_file_contents.decode("utf-16be", "replace") # type: Text file_contents = raw_file_contents.decode("utf-16be", "replace") # type: Text
elif raw_file_contents.startswith("\xff\xfe"): elif raw_file_contents.startswith(b"\xff\xfe"):
file_contents = raw_file_contents.decode("utf-16le", "replace") file_contents = raw_file_contents.decode("utf-16le", "replace")
else: else:
file_contents = raw_file_contents.decode("utf8", "replace") file_contents = raw_file_contents.decode("utf8", "replace")

View file

@ -332,6 +332,8 @@ class ServoCrashtestExecutor(ProcessTestExecutor):
self.test = test self.test = test
success, data = ServoTimedRunner(self.logger, self.do_crashtest, self.protocol, success, data = ServoTimedRunner(self.logger, self.do_crashtest, self.protocol,
test_url, timeout, self.extra_timeout).run() test_url, timeout, self.extra_timeout).run()
# Ensure that no processes hang around if they timeout.
self.proc.kill()
if success: if success:
return self.convert_result(test, data) return self.convert_result(test, data)

View file

@ -26,12 +26,13 @@ def do_delayed_imports():
class TestChunker(object): class TestChunker(object):
def __init__(self, total_chunks, chunk_number): def __init__(self, total_chunks, chunk_number, **kwargs):
self.total_chunks = total_chunks self.total_chunks = total_chunks
self.chunk_number = chunk_number self.chunk_number = chunk_number
assert self.chunk_number <= self.total_chunks assert self.chunk_number <= self.total_chunks
self.logger = structured.get_default_logger() self.logger = structured.get_default_logger()
assert self.logger assert self.logger
self.kwargs = kwargs
def __call__(self, manifest): def __call__(self, manifest):
raise NotImplementedError raise NotImplementedError
@ -42,7 +43,7 @@ class Unchunked(TestChunker):
TestChunker.__init__(self, *args, **kwargs) TestChunker.__init__(self, *args, **kwargs)
assert self.total_chunks == 1 assert self.total_chunks == 1
def __call__(self, manifest): def __call__(self, manifest, **kwargs):
for item in manifest: for item in manifest:
yield item yield item
@ -64,8 +65,13 @@ class DirectoryHashChunker(TestChunker):
""" """
def __call__(self, manifest): def __call__(self, manifest):
chunk_index = self.chunk_number - 1 chunk_index = self.chunk_number - 1
depth = self.kwargs.get("depth")
for test_type, test_path, tests in manifest: for test_type, test_path, tests in manifest:
h = int(hashlib.md5(ensure_binary(os.path.dirname(test_path))).hexdigest(), 16) if depth:
hash_path = os.path.sep.join(os.path.dirname(test_path).split(os.path.sep, depth)[:depth])
else:
hash_path = os.path.dirname(test_path)
h = int(hashlib.md5(ensure_binary(hash_path)).hexdigest(), 16)
if h % self.total_chunks == chunk_index: if h % self.total_chunks == chunk_index:
yield test_type, test_path, tests yield test_type, test_path, tests
@ -161,7 +167,8 @@ class TestLoader(object):
total_chunks=1, total_chunks=1,
chunk_number=1, chunk_number=1,
include_https=True, include_https=True,
skip_timeout=False): skip_timeout=False,
chunker_kwargs=None):
self.test_types = test_types self.test_types = test_types
self.run_info = run_info self.run_info = run_info
@ -178,10 +185,13 @@ class TestLoader(object):
self.total_chunks = total_chunks self.total_chunks = total_chunks
self.chunk_number = chunk_number self.chunk_number = chunk_number
if chunker_kwargs is None:
chunker_kwargs = {}
self.chunker = {"none": Unchunked, self.chunker = {"none": Unchunked,
"hash": HashChunker, "hash": HashChunker,
"dir_hash": DirectoryHashChunker}[chunk_type](total_chunks, "dir_hash": DirectoryHashChunker}[chunk_type](total_chunks,
chunk_number) chunk_number,
**chunker_kwargs)
self._test_ids = None self._test_ids = None

View file

@ -45,7 +45,7 @@ def setup_logging(*args, **kwargs):
return logger return logger
def get_loader(test_paths, product, debug=None, run_info_extras=None, **kwargs): def get_loader(test_paths, product, debug=None, run_info_extras=None, chunker_kwargs=None, **kwargs):
if run_info_extras is None: if run_info_extras is None:
run_info_extras = {} run_info_extras = {}
@ -78,7 +78,8 @@ def get_loader(test_paths, product, debug=None, run_info_extras=None, **kwargs):
total_chunks=kwargs["total_chunks"], total_chunks=kwargs["total_chunks"],
chunk_number=kwargs["this_chunk"], chunk_number=kwargs["this_chunk"],
include_https=ssl_enabled, include_https=ssl_enabled,
skip_timeout=kwargs["skip_timeout"]) skip_timeout=kwargs["skip_timeout"],
chunker_kwargs=chunker_kwargs)
return run_info, test_loader return run_info, test_loader
@ -162,18 +163,23 @@ def run_tests(config, test_paths, product, **kwargs):
)) ))
recording.set(["startup", "load_tests"]) recording.set(["startup", "load_tests"])
run_info, test_loader = get_loader(test_paths,
product.name,
run_info_extras=product.run_info_extras(**kwargs),
**kwargs)
test_source_kwargs = {"processes": kwargs["processes"]} test_source_kwargs = {"processes": kwargs["processes"]}
chunker_kwargs = {}
if kwargs["run_by_dir"] is False: if kwargs["run_by_dir"] is False:
test_source_cls = testloader.SingleTestSource test_source_cls = testloader.SingleTestSource
else: else:
# A value of None indicates infinite depth # A value of None indicates infinite depth
test_source_cls = testloader.PathGroupedSource test_source_cls = testloader.PathGroupedSource
test_source_kwargs["depth"] = kwargs["run_by_dir"] test_source_kwargs["depth"] = kwargs["run_by_dir"]
chunker_kwargs["depth"] = kwargs["run_by_dir"]
run_info, test_loader = get_loader(test_paths,
product.name,
run_info_extras=product.run_info_extras(**kwargs),
chunker_kwargs=chunker_kwargs,
**kwargs)
logger.info("Using %i client processes" % kwargs["processes"]) logger.info("Using %i client processes" % kwargs["processes"])

View file

@ -8,7 +8,7 @@ setup(() => {
for (const method of ["compileStreaming", "instantiateStreaming"]) { for (const method of ["compileStreaming", "instantiateStreaming"]) {
promise_test(t => { promise_test(t => {
const buffer = new Uint8Array(Array.from(emptyModuleBinary).concat([0, 0])); const buffer = new Uint8Array(Array.from(emptyModuleBinary).concat([0xCA, 0xFE]));
const response = new Response(buffer, { headers: { "Content-Type": "application/wasm" } }); const response = new Response(buffer, { headers: { "Content-Type": "application/wasm" } });
return promise_rejects_js(t, WebAssembly.CompileError, WebAssembly[method](response)); return promise_rejects_js(t, WebAssembly.CompileError, WebAssembly[method](response));
}, `Invalid code: ${method}`); }, `Invalid code: ${method}`);

View file

@ -69,6 +69,17 @@ async_test(t => {
c1.postMessage('test'); c1.postMessage('test');
}, 'messages aren\'t delivered to a closed port'); }, 'messages aren\'t delivered to a closed port');
async_test(t => {
let c1 = new BroadcastChannel('closed');
let c2 = new BroadcastChannel('closed');
let c3 = new BroadcastChannel('closed');
c2.onmessage = t.unreached_func();
c3.onmessage = t.step_func(() => t.done());
c1.postMessage('test');
c2.close();
}, 'messages aren\'t delivered to a port closed after calling postMessage.');
async_test(t => { async_test(t => {
let c1 = new BroadcastChannel('create-in-onmessage'); let c1 = new BroadcastChannel('create-in-onmessage');
let c2 = new BroadcastChannel('create-in-onmessage'); let c2 = new BroadcastChannel('create-in-onmessage');
@ -87,8 +98,6 @@ async_test(t => {
c2.postMessage('second'); c2.postMessage('second');
}, 'closing and creating channels during message delivery works correctly'); }, 'closing and creating channels during message delivery works correctly');
// TODO(mek): Depending on https://github.com/whatwg/html/issues/1371 adjust
// this test to match the correct behavior.
async_test(t => { async_test(t => {
let c1 = new BroadcastChannel('close-in-onmessage'); let c1 = new BroadcastChannel('close-in-onmessage');
let c2 = new BroadcastChannel('close-in-onmessage'); let c2 = new BroadcastChannel('close-in-onmessage');
@ -108,13 +117,12 @@ async_test(t => {
assert_array_equals(events, [ assert_array_equals(events, [
'c2: first', 'c2: first',
'c3: first', 'c3: first',
'c2: done',
'c3: done']); 'c3: done']);
t.done(); t.done();
} }
})); }));
c1.postMessage('first'); c1.postMessage('first');
c1.postMessage('done'); c1.postMessage('done');
}, 'Closing a channel in onmessage doesn\'t cancel already queued events'); }, 'Closing a channel in onmessage prevents already queued tasks from firing onmessage events');
</script> </script>

View file

@ -0,0 +1,19 @@
// META: global=!default,worker
test(function() {
assert_equals(self, self);
}, 'self === self');
test(function() {
assert_true(self instanceof WorkerGlobalScope);
}, 'self instanceof WorkerGlobalScope');
test(function() {
assert_true('self' in self);
}, '\'self\' in self');
test(function() {
var x = self;
self = 1;
assert_equals(self, x);
}, 'self = 1');

View file

@ -1,16 +0,0 @@
<!doctype html>
<title>self</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
async_test(function() {
var worker = new Worker('self.js');
worker.onmessage = this.step_func(function(e) {
for (var i = 0; i < e.data.length; ++i) {
assert_true(e.data[i][0], e.data[i][1]);
}
this.done();
});
});
</script>

View file

@ -1,17 +0,0 @@
var results = [];
function check(func, msg) {
try {
results.push([func(), msg]);
} catch(ex) {
results.push([String(ex), msg]);
}
}
check(function() { return self === self; }, 'self === self');
check(function() { return self instanceof WorkerGlobalScope; }, 'self instanceof WorkerGlobalScope');
check(function() { return 'self' in self; }, '\'self\' in self');
check(function() {
var x = self;
self = 1;
return x === self;
}, 'self = 1');
postMessage(results);

View file

@ -1,5 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<title>DedicatedWorker: Referrer</title> <title>DedicatedWorker: Referrer</title>
<meta name="timeout" content="long">
<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> <script>