mirror of
https://github.com/servo/servo.git
synced 2025-08-04 13:10:20 +01:00
Update web-platform-tests to revision fa5f0edd48aca7acfa7d35f1be31cb0dd65817c6
This commit is contained in:
parent
6659e9004d
commit
a4cebda3db
110 changed files with 1473 additions and 526 deletions
|
@ -1,4 +1,4 @@
|
|||
[hit-test-floats-004.html]
|
||||
[hit-test-floats-003.html]
|
||||
[Miss float below something else]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[border-image-shorthand-001.htm]
|
||||
expected: FAIL
|
|
@ -0,0 +1,4 @@
|
|||
[hittest-anonymous-box.html]
|
||||
[Hit-testing within an anonymous flex-item should return the flexbox as the hittest result.]
|
||||
expected: FAIL
|
||||
|
|
@ -2,6 +2,3 @@
|
|||
[Hit test intersecting scaled box]
|
||||
expected: FAIL
|
||||
|
||||
[Hit test within unscaled box]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -2,6 +2,3 @@
|
|||
[elementsFromPoint on the root document for points in iframe elements]
|
||||
expected: FAIL
|
||||
|
||||
[elementsFromPoint on inner documents]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[matchMedia-display-none-iframe.html]
|
||||
expected: ERROR
|
|
@ -1,7 +0,0 @@
|
|||
[offsetTopLeft-border-box.html]
|
||||
[container: 1]
|
||||
expected: FAIL
|
||||
|
||||
[container: 0]
|
||||
expected: FAIL
|
||||
|
|
@ -315,12 +315,6 @@
|
|||
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -330,3 +324,9 @@
|
|||
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: */* text/html]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -56,3 +56,6 @@
|
|||
[separate text/javascript x/x]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript error]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -11,9 +11,3 @@
|
|||
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%20%22nosniFF%22]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%0D%0AX-Content-Type-Options%3A%20nosniff]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[traverse_the_history_1.html]
|
||||
[Multiple history traversals from the same task]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[traverse_the_history_2.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[traverse_the_history_4.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
[cross-origin-objects-on-new-window.html]
|
||||
expected: TIMEOUT
|
|
@ -1,4 +1,5 @@
|
|||
[embedded-opener-remove-frame.html]
|
||||
expected: CRASH
|
||||
[opener of discarded nested browsing context]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[frameElement-siblings.sub.html]
|
||||
[it must give a "SecurityError" DOMException if the pages are different-origin domain]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[iframe-loading-lazy-multiple-times.tentative.html]
|
||||
[Iframes with loading='lazy' can be lazy loaded multiple times]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[iframe-loading-lazy-to-eager.tentative.html]
|
||||
[Below-viewport iframes with loading='lazy' load when set to loading='eager' or the `loading` attribute is removed]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
[iframe_sandbox_popups_escaping-1.html]
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[iframe_sandbox_popups_escaping-2.html]
|
||||
expected: TIMEOUT
|
||||
expected: CRASH
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[iframe_sandbox_popups_escaping-3.html]
|
||||
expected: CRASH
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[iframe_sandbox_popups_nonescaping-2.html]
|
||||
expected: CRASH
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[iframe_sandbox_popups_nonescaping-3.html]
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[image-loading-lazy-to-eager.html]
|
||||
[Below-viewport images with loading='lazy' load when set to loading='eager' or the `loading` attribute is removed]
|
||||
expected: FAIL
|
||||
|
|
@ -3,3 +3,6 @@
|
|||
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||
expected: TIMEOUT
|
||||
|
||||
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
[017.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, about:blank]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
[003.html]
|
||||
expected: ERROR
|
||||
[shared]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -122399,6 +122399,19 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"border-image-shorthand-001.htm": [
|
||||
"0f2c627d05b7b9ccb20ad63cbff04ecce22f25c5",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/css-backgrounds/reference/border-image-shorthand-001-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"border-image-slice-001.xht": [
|
||||
"3861dcfad939f09c6247034373e62548204bec8e",
|
||||
[
|
||||
|
@ -155234,6 +155247,19 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"multicol-fill-balance-003.html": [
|
||||
"5f8db6336bac713dfd9f2aa1263803bc63eb1874",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/reference/ref-filled-green-100px-square.xht",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"multicol-gap-000.xht": [
|
||||
"88aa17e8b488565dc40398e6e8f1d2e3bf3a97a1",
|
||||
[
|
||||
|
@ -161909,12 +161935,16 @@
|
|||
]
|
||||
],
|
||||
"marker-list-style-position.html": [
|
||||
"5b4391d4e7e43c330eb848ca29645b8c820c02de",
|
||||
"9b122bc3e9b6200fbf33c1c7d3da2ba155ff1691",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/css-pseudo/marker-list-style-position-ref.html",
|
||||
"/css/css-pseudo/marker-list-style-position-ref-001.html",
|
||||
"=="
|
||||
],
|
||||
[
|
||||
"/css/css-pseudo/marker-list-style-position-ref-002.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
|
@ -165708,6 +165738,19 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"block-aspect-ratio-019.tentative.html": [
|
||||
"56cb453514d2e84fb8739b05d192b02ac3318cbd",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/reference/ref-filled-green-100px-square.xht",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"flex-aspect-ratio-001.tentative.html": [
|
||||
"3b477e299ad763a1c0108e16f05981c76c25bb77",
|
||||
[
|
||||
|
@ -289561,6 +289604,10 @@
|
|||
"39a88e954c5c4f449be8781ca7174324d7faef24",
|
||||
[]
|
||||
],
|
||||
"border-image-shorthand-001-ref.html": [
|
||||
"fe9bf3b86abd756387dadd8e5c9c30e8915371dc",
|
||||
[]
|
||||
],
|
||||
"border-image-slice-percentage-ref.html": [
|
||||
"bfc2efbfa0bf419c13530e6c7d2ffcb324b05e35",
|
||||
[]
|
||||
|
@ -289797,6 +289844,10 @@
|
|||
"ddd4e75698bb756c09b7ce097d3d50108659c334",
|
||||
[]
|
||||
],
|
||||
"blue-and-red-diamonds-81x81.png": [
|
||||
"5b2f7e156ce34b51379b7a72e65d912ed0066171",
|
||||
[]
|
||||
],
|
||||
"blue-diamond.png": [
|
||||
"3617045efbc0ab9702af523f4999cf45247db38b",
|
||||
[]
|
||||
|
@ -303850,10 +303901,14 @@
|
|||
"bfae577499c5614d37ac3dc6ba695dbdf4457538",
|
||||
[]
|
||||
],
|
||||
"marker-list-style-position-ref.html": [
|
||||
"marker-list-style-position-ref-001.html": [
|
||||
"2593194d298fe3ee8bb14ffe9923a654a19d5c8a",
|
||||
[]
|
||||
],
|
||||
"marker-list-style-position-ref-002.html": [
|
||||
"1c21789c079d3b97f7fc8628d6918453cbd04669",
|
||||
[]
|
||||
],
|
||||
"outside-marker-paint-order-ref.html": [
|
||||
"441a354732fc6690ea0d8af93dd33d57c8049374",
|
||||
[]
|
||||
|
@ -325715,6 +325770,14 @@
|
|||
"d066b8d4cb2dc76e85fa53f28c2053f9acbfbd72",
|
||||
[]
|
||||
],
|
||||
"frameElement-sibling-accessed.html": [
|
||||
"15245981ce8b18e65fc9a5a8c34244fc624d9db7",
|
||||
[]
|
||||
],
|
||||
"frameElement-sibling-accessor.html": [
|
||||
"4b4c7a87bb81c73a94f3de9da729b6968131a38a",
|
||||
[]
|
||||
],
|
||||
"frameElement-window-post.html": [
|
||||
"d67bde26f432f03f311334f6d774d1638da15f4f",
|
||||
[]
|
||||
|
@ -325734,6 +325797,10 @@
|
|||
"c1594f637ec50699ea4b341d35ea2a43e9d0f549",
|
||||
[]
|
||||
],
|
||||
"document-domain-setter.html": [
|
||||
"3b142555713c43384cde1759287e3c05102f990d",
|
||||
[]
|
||||
],
|
||||
"echo-window-name.html": [
|
||||
"a437fecb2c443b1cfdbc8813b166c0293aec2504",
|
||||
[]
|
||||
|
@ -327261,7 +327328,11 @@
|
|||
[]
|
||||
],
|
||||
"executor.html": [
|
||||
"3b10da03739ed22b0295c82837951a30cb0ec666",
|
||||
"e97e18aca4bd6fdff1181310aa2d543110980cc9",
|
||||
[]
|
||||
],
|
||||
"try-access.js": [
|
||||
"eaf529e05647d7820b30ce8fce425ee884bc1f7f",
|
||||
[]
|
||||
]
|
||||
}
|
||||
|
@ -333260,6 +333331,10 @@
|
|||
"subframe.html": [
|
||||
"07cb999afaefe344a0f8d5ac2b792b60abcd22b4",
|
||||
[]
|
||||
],
|
||||
"unload-reporter.html": [
|
||||
"18599b2a6eb040d165b0d8b55a6d1475c451ce48",
|
||||
[]
|
||||
]
|
||||
},
|
||||
"same_origin_child.html": [
|
||||
|
@ -336873,6 +336948,10 @@
|
|||
"35121866f66eaa8b6663480d1a4cb72c1cf8fd1e",
|
||||
[]
|
||||
],
|
||||
"content-index.idl": [
|
||||
"5b4a8ead16cc6be61bf325092121638244674073",
|
||||
[]
|
||||
],
|
||||
"cookie-store.idl": [
|
||||
"bc2899bb4fc7eed67d2b76e7b83e3ec7c9c0dd60",
|
||||
[]
|
||||
|
@ -337253,6 +337332,10 @@
|
|||
"cbc17683b260708656e6e75bf801107baefd907b",
|
||||
[]
|
||||
],
|
||||
"savedata.idl": [
|
||||
"4d9e3b98d3c993cf2e95a5eaf363f38c5ec32941",
|
||||
[]
|
||||
],
|
||||
"screen-capture.idl": [
|
||||
"4936ee9a519562d27531e7a4eeb28b76322d9486",
|
||||
[]
|
||||
|
@ -337289,8 +337372,8 @@
|
|||
"0aad231d344623f91dd15c124919023297bd3867",
|
||||
[]
|
||||
],
|
||||
"storage-access-api.tentative.idl": [
|
||||
"a94be37e915e82222e03bfd5741a32b24f23a48a",
|
||||
"storage-access.idl": [
|
||||
"18dd08f7c29e73cc07876a65e30f1268d4ee158a",
|
||||
[]
|
||||
],
|
||||
"storage.idl": [
|
||||
|
@ -337369,6 +337452,10 @@
|
|||
"f2e31b7352867d39edc9c43a4f1fffb3a02cb985",
|
||||
[]
|
||||
],
|
||||
"web-otp.idl": [
|
||||
"023de3259316a7b9124a8b959b57620449677418",
|
||||
[]
|
||||
],
|
||||
"web-share.idl": [
|
||||
"c29a29d0b4ede94153a75860344ab4824e91b6d5",
|
||||
[]
|
||||
|
@ -342612,7 +342699,7 @@
|
|||
]
|
||||
},
|
||||
"idlharness.js": [
|
||||
"58d1517308ab44b242b05d11b1e1f98cac6c24b8",
|
||||
"62b003c4a7a72682b7936b32137a7732bf34db70",
|
||||
[]
|
||||
],
|
||||
"idlharness.js.headers": [
|
||||
|
@ -342753,7 +342840,7 @@
|
|||
[]
|
||||
],
|
||||
"test_operation.html": [
|
||||
"671cd9e09f5b34ac0e7a7a492a8b3a97aeacf4de",
|
||||
"1b995529d239ca09e2896d653226243b581acb2e",
|
||||
[]
|
||||
],
|
||||
"test_partial_namespace.html": [
|
||||
|
@ -361311,7 +361398,7 @@
|
|||
[]
|
||||
],
|
||||
"infinite-redirects.py": [
|
||||
"a85c410218ef3c9ccf7625942f1bc4ac9b57d85c",
|
||||
"a60942dd9a6d1d677eeb64b51c541d3de4b94468",
|
||||
[]
|
||||
],
|
||||
"init.htm": [
|
||||
|
@ -361323,15 +361410,15 @@
|
|||
[]
|
||||
],
|
||||
"invalid-utf8-html.py": [
|
||||
"72be41a45e86c3e45aabd081d2047f1de9344faf",
|
||||
"c15d17151a136974fa0838cc3b3311fde2a78fa4",
|
||||
[]
|
||||
],
|
||||
"last-modified.py": [
|
||||
"ef05a6343c16a53eaad0e0e17daf65acdd7f6487",
|
||||
"9d694817bf11f1637291e2178603263a4769da58",
|
||||
[]
|
||||
],
|
||||
"no-custom-header-on-preflight.py": [
|
||||
"f49f9f311fb72a7565b5bbf4a9049c0ae45458aa",
|
||||
"835c12813dcaf0461ab65f0528fcb398d162bf27",
|
||||
[]
|
||||
],
|
||||
"nocors": {
|
||||
|
@ -361341,7 +361428,7 @@
|
|||
]
|
||||
},
|
||||
"parse-headers.py": [
|
||||
"c661f22c3e9eb6eb8ded5c7160111221dc4ac319",
|
||||
"8520baad880fc0e6cf7cf3c8e8194c18fcfee309",
|
||||
[]
|
||||
],
|
||||
"pass.txt": [
|
||||
|
@ -361349,19 +361436,19 @@
|
|||
[]
|
||||
],
|
||||
"redirect-cors.py": [
|
||||
"27609b8bdb20828346f978d6d354ca0cf36ad3bc",
|
||||
"5d030a62277c159c37a296f4b1bdcfd40b428be4",
|
||||
[]
|
||||
],
|
||||
"redirect.py": [
|
||||
"2af9f2ee8a94c4aa108416cded7c93b08a7bf8a2",
|
||||
"9d9bb332a7098e5f7a145e38e9a5d4962cba9d2a",
|
||||
[]
|
||||
],
|
||||
"requri.py": [
|
||||
"a3f7bfda351782e4941f3955c1c7b5f32be07ba4",
|
||||
"c7f7330f11cc0acc29b0f0b7468352bd7939cc77",
|
||||
[]
|
||||
],
|
||||
"reset-token.py": [
|
||||
"5c9a577b44ce22cacc6fd9ad41cd441538f0373d",
|
||||
"257c2aae80c690652ef6762b13d1785dcdc94d73",
|
||||
[]
|
||||
],
|
||||
"responseType-document-in-worker.js": [
|
||||
|
@ -361385,7 +361472,7 @@
|
|||
[]
|
||||
],
|
||||
"shift-jis-html.py": [
|
||||
"fab78c0b3ac8315c65df3824cfcbefd70f76dcbf",
|
||||
"47c67d8ae39e96bacd97d7cb14c59151060e2683",
|
||||
[]
|
||||
],
|
||||
"status.py": [
|
||||
|
@ -379419,6 +379506,101 @@
|
|||
]
|
||||
}
|
||||
]
|
||||
],
|
||||
"idlharness.https.any.js": [
|
||||
"599aba46669acc6777d317682292770cdeca2c01",
|
||||
[
|
||||
"content-index/idlharness.https.any.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
"global",
|
||||
"window,worker"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/resources/WebIDLParser.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/resources/idlharness.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/service-workers/service-worker/resources/test-helpers.sub.js"
|
||||
]
|
||||
]
|
||||
}
|
||||
],
|
||||
[
|
||||
"content-index/idlharness.https.any.serviceworker.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
"global",
|
||||
"window,worker"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/resources/WebIDLParser.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/resources/idlharness.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/service-workers/service-worker/resources/test-helpers.sub.js"
|
||||
]
|
||||
]
|
||||
}
|
||||
],
|
||||
[
|
||||
"content-index/idlharness.https.any.sharedworker.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
"global",
|
||||
"window,worker"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/resources/WebIDLParser.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/resources/idlharness.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/service-workers/service-worker/resources/test-helpers.sub.js"
|
||||
]
|
||||
]
|
||||
}
|
||||
],
|
||||
[
|
||||
"content-index/idlharness.https.any.worker.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
"global",
|
||||
"window,worker"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/resources/WebIDLParser.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/resources/idlharness.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/service-workers/service-worker/resources/test-helpers.sub.js"
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"content-security-policy": {
|
||||
|
@ -389348,6 +389530,13 @@
|
|||
]
|
||||
]
|
||||
},
|
||||
"hittest-anonymous-box.html": [
|
||||
"06de3274999794853e96a7920623af1b1a54d3d3",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"hittest-before-pseudo.html": [
|
||||
"afba77e06dba12f229779cae6a4b6265d95461bd",
|
||||
[
|
||||
|
@ -411291,10 +411480,12 @@
|
|||
"document-policy": {
|
||||
"experimental-features": {
|
||||
"layout-animations-disabled-tentative.html": [
|
||||
"0190eaa84f75e3097b95f70adde89296d47cc1f3",
|
||||
"fd32ace78e21de9bf8a36a8ae57df9a09f47e360",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
{
|
||||
"timeout": "long"
|
||||
}
|
||||
]
|
||||
],
|
||||
"layout-animations-disabled-violation-report-js-tentative.html": [
|
||||
|
@ -435878,6 +436069,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"document-domain-removed-iframe.html": [
|
||||
"7403ebfaadc694757d1d0fec71a102a997ea83f4",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"embedded-opener-a-form.html": [
|
||||
"e1ec760b926670e610a96f02c935cf169563714a",
|
||||
[
|
||||
|
@ -435900,6 +436098,13 @@
|
|||
]
|
||||
],
|
||||
"nested-browsing-contexts": {
|
||||
"frameElement-siblings.sub.html": [
|
||||
"0c814d26d9c002dd0ca19ca93bf7f9ea3a86ec06",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"frameElement.sub.html": [
|
||||
"7ea118208110470b47b6175329ceec473f4c1208",
|
||||
[
|
||||
|
@ -453231,7 +453436,7 @@
|
|||
"cross-origin-opener-policy": {
|
||||
"access-reporting": {
|
||||
"openee-accessed_openee-coop-ro.https.html": [
|
||||
"5d4bb06453b8035db887806a23ed42cda62d6297",
|
||||
"e30619fc665a02e92f5bd4dc247d6294bb89398d",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -453240,7 +453445,7 @@
|
|||
]
|
||||
],
|
||||
"openee-accessed_openee-coop.https.html": [
|
||||
"0b68205672b7aa5a90820eaa5472cd6d2ae36bae",
|
||||
"9427c85ac8720d52f7c83932a3d1a7d0454679f2",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -453249,7 +453454,7 @@
|
|||
]
|
||||
],
|
||||
"openee-accessed_opener-coop-ro.https.html": [
|
||||
"b40aa9505fea5ee7b55f790944390cdeda171f22",
|
||||
"b3fbc6137c32bf4f4ed58bca08931909f3fbb771",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -453258,7 +453463,7 @@
|
|||
]
|
||||
],
|
||||
"openee-accessed_opener-coop.https.html": [
|
||||
"e70e5310a5a852ea3659b29edc1e20d5d8824889",
|
||||
"01184cd8a4d354d50a1a2875780132abcd22a7bc",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -453267,7 +453472,7 @@
|
|||
]
|
||||
],
|
||||
"opener-accessed_openee-coop-ro.https.html": [
|
||||
"4c3259ed570301683a99c0b2696619453720f1d4",
|
||||
"b889604e2305c7eb9b85610511e14c07394d8bee",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -453276,7 +453481,7 @@
|
|||
]
|
||||
],
|
||||
"opener-accessed_openee-coop.https.html": [
|
||||
"03dd9d86c54e4badbd36d040301230f281ec37ac",
|
||||
"a2d733048215a77c5ac4c012d9c0756a584543e3",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -453285,7 +453490,7 @@
|
|||
]
|
||||
],
|
||||
"opener-accessed_opener-coop-ro.https.html": [
|
||||
"5b72e569ce59ba1d73b3852576666ab6308766f4",
|
||||
"56db8ca1a9eae407daeac263c0ce1754e1128649",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -453294,7 +453499,16 @@
|
|||
]
|
||||
],
|
||||
"opener-accessed_opener-coop.https.html": [
|
||||
"1729f601e126726ebb7d719541b0353f0d203834",
|
||||
"ad56d560420f815c7941895ff354e056728c130f",
|
||||
[
|
||||
null,
|
||||
{
|
||||
"timeout": "long"
|
||||
}
|
||||
]
|
||||
],
|
||||
"property.https.html": [
|
||||
"c4c9ff097c5954315ff88af42c8689c5d304dd75",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -460453,6 +460667,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"iframe-loading-lazy-multiple-times.tentative.html": [
|
||||
"89e41e61bf7fcac2b5f35990f7ad70a9fdab8424",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"iframe-loading-lazy-referrerpolicy-change.sub.tentative.html": [
|
||||
"68734d5708da40b7e5e533cb2ddee41c8a3d719f",
|
||||
[
|
||||
|
@ -460460,6 +460681,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"iframe-loading-lazy-to-eager.tentative.html": [
|
||||
"371601a8c3a167e91804945fefe6db3154483cd2",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"iframe-loading-lazy.tentative.html": [
|
||||
"0a882ef25bc19ad5c3c531cd5a40eed2fa0ced03",
|
||||
[
|
||||
|
@ -461220,6 +461448,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"image-loading-lazy-to-eager.html": [
|
||||
"f74cafb106947b491d45b8640e174c5cbee90bb1",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"image-loading-lazy.html": [
|
||||
"0c1c39a8ae95f0b978f3b2a3ebd822598295372b",
|
||||
[
|
||||
|
@ -495024,6 +495259,41 @@
|
|||
]
|
||||
]
|
||||
},
|
||||
"savedata": {
|
||||
"idlharness.any.js": [
|
||||
"aad362346ca5fa9999a05a3456756d150bf0e354",
|
||||
[
|
||||
"savedata/idlharness.any.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
"script",
|
||||
"/resources/WebIDLParser.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/resources/idlharness.js"
|
||||
]
|
||||
]
|
||||
}
|
||||
],
|
||||
[
|
||||
"savedata/idlharness.any.worker.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
"script",
|
||||
"/resources/WebIDLParser.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/resources/idlharness.js"
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"screen-capture": {
|
||||
"feature-policy.https.html": [
|
||||
"90b2019ef143048c0bbe010103cd8a15a92747ef",
|
||||
|
@ -500424,10 +500694,10 @@
|
|||
}
|
||||
]
|
||||
],
|
||||
"idlharness.tentative.window.js": [
|
||||
"328e1ed4af1c9f073a75f77887d4c12f28e9cdef",
|
||||
"idlharness.window.js": [
|
||||
"41c6b84d6890363be94990359f2c3fef71494ce4",
|
||||
[
|
||||
"storage-access-api/idlharness.tentative.window.html",
|
||||
"storage-access-api/idlharness.window.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
|
@ -516297,6 +516567,26 @@
|
|||
]
|
||||
]
|
||||
},
|
||||
"web-otp": {
|
||||
"idlharness.https.window.js": [
|
||||
"ef4983b1ab6b21be19c696fd7787b1196e97ee6c",
|
||||
[
|
||||
"web-otp/idlharness.https.window.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
"script",
|
||||
"/resources/WebIDLParser.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/resources/idlharness.js"
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"web-share": {
|
||||
"canShare-files.tentative.https.html": [
|
||||
"2c2f2ff9699020b0ffcaf97c65aa75eaafe799e2",
|
||||
|
@ -516342,11 +516632,22 @@
|
|||
}
|
||||
]
|
||||
],
|
||||
"share-empty.https.html": [
|
||||
"ce7e2fefbd47e99b1083796acf3e0ddfee189ac8",
|
||||
"share-consume-activation.https.html": [
|
||||
"ba14117c1d95780e9aa4f79755f567a63f77eee5",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
{
|
||||
"testdriver": true
|
||||
}
|
||||
]
|
||||
],
|
||||
"share-empty.https.html": [
|
||||
"d0e0241ae44e51295b49245b386980d06c1d5668",
|
||||
[
|
||||
null,
|
||||
{
|
||||
"testdriver": true
|
||||
}
|
||||
]
|
||||
],
|
||||
"share-securecontext.http.html": [
|
||||
|
@ -516366,10 +516667,12 @@
|
|||
]
|
||||
],
|
||||
"share-url-invalid.https.html": [
|
||||
"ca20cf0c70cc01bd9b45f1a33b6c27377fb1ba3e",
|
||||
"e4af03d4c8822bcd8933c93ea2781915a3725603",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
{
|
||||
"testdriver": true
|
||||
}
|
||||
]
|
||||
],
|
||||
"share-without-user-gesture.https.html": [
|
||||
|
@ -551830,13 +552133,6 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"border-image-shorthand-001.htm": [
|
||||
"76ce241e512cd5086317ce6e15fa66bf566d678d",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"border-image-shorthand-002.htm": [
|
||||
"92b7f92f4370a9991514f9641bc454908a6abb71",
|
||||
[
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[hit-test-floats-004.html]
|
||||
[hit-test-floats-003.html]
|
||||
[Miss float below something else]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[border-image-shorthand-001.htm]
|
||||
expected: FAIL
|
|
@ -0,0 +1,4 @@
|
|||
[hittest-anonymous-box.html]
|
||||
[Hit-testing within an anonymous flex-item should return the flexbox as the hittest result.]
|
||||
expected: FAIL
|
||||
|
|
@ -2,6 +2,3 @@
|
|||
[Hit test intersecting scaled box]
|
||||
expected: FAIL
|
||||
|
||||
[Hit test within unscaled box]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -2,6 +2,3 @@
|
|||
[elementsFromPoint on the root document for points in iframe elements]
|
||||
expected: FAIL
|
||||
|
||||
[elementsFromPoint on inner documents]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[matchMedia-display-none-iframe.html]
|
||||
expected: ERROR
|
|
@ -1,7 +0,0 @@
|
|||
[offsetTopLeft-border-box.html]
|
||||
[container: 1]
|
||||
expected: FAIL
|
||||
|
||||
[container: 0]
|
||||
expected: FAIL
|
||||
|
|
@ -315,12 +315,6 @@
|
|||
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -330,3 +324,9 @@
|
|||
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: */* text/html]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -56,3 +56,6 @@
|
|||
[separate text/javascript x/x]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript error]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -11,9 +11,3 @@
|
|||
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%20%22nosniFF%22]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%0D%0AX-Content-Type-Options%3A%20nosniff]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[traverse_the_history_1.html]
|
||||
[Multiple history traversals from the same task]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[traverse_the_history_2.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[traverse_the_history_4.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
[cross-origin-objects-on-new-window.html]
|
||||
expected: TIMEOUT
|
|
@ -1,4 +1,5 @@
|
|||
[embedded-opener-remove-frame.html]
|
||||
expected: CRASH
|
||||
[opener and "removed" embedded documents]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[frameElement-siblings.sub.html]
|
||||
[it must give a "SecurityError" DOMException if the pages are different-origin domain]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[iframe-loading-lazy-multiple-times.tentative.html]
|
||||
[Iframes with loading='lazy' can be lazy loaded multiple times]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[iframe-loading-lazy-to-eager.tentative.html]
|
||||
[Below-viewport iframes with loading='lazy' load when set to loading='eager' or the `loading` attribute is removed]
|
||||
expected: FAIL
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
[iframe_sandbox_popups_escaping-1.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[iframe_sandbox_popups_escaping-2.html]
|
||||
expected: TIMEOUT
|
||||
expected: CRASH
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[iframe_sandbox_popups_escaping-3.html]
|
||||
type: testharness
|
||||
expected: CRASH
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[iframe_sandbox_popups_nonescaping-2.html]
|
||||
type: testharness
|
||||
expected: CRASH
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
[iframe_sandbox_popups_nonescaping-3.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[image-loading-lazy-to-eager.html]
|
||||
[Below-viewport images with loading='lazy' load when set to loading='eager' or the `loading` attribute is removed]
|
||||
expected: FAIL
|
||||
|
|
@ -4,3 +4,6 @@
|
|||
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||
expected: TIMEOUT
|
||||
|
||||
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
[017.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, about:blank]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
[003.html]
|
||||
type: testharness
|
||||
expected: ERROR
|
||||
[shared]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
// META: global=window,worker
|
||||
// META: script=/resources/WebIDLParser.js
|
||||
// META: script=/resources/idlharness.js
|
||||
// META: script=/service-workers/service-worker/resources/test-helpers.sub.js
|
||||
|
||||
'use strict';
|
||||
|
||||
// https://wicg.github.io/content-index/spec/
|
||||
|
||||
idl_test(
|
||||
['content-index'],
|
||||
['service-workers', 'html', 'dom'],
|
||||
async (idl_array, t) => {
|
||||
// TODO: Handle other worker types.
|
||||
if (self.GLOBAL.isWindow()) {
|
||||
idl_array.add_objects({
|
||||
ServiceWorkerRegistration: ['registration'],
|
||||
ContentIndex: ['registration.index'],
|
||||
});
|
||||
self.registration = await service_worker_unregister_and_register(
|
||||
t, 'resources/sw.js', 'resources/does/not/exist');
|
||||
t.add_cleanup(() => registration.unregister());
|
||||
}
|
||||
else if (self.ServiceWorkerGlobalScope) {
|
||||
idl_array.add_objects({
|
||||
ServiceWorkerGlobalScope: ['self'],
|
||||
ServiceWorkerRegistration: ['registration'],
|
||||
ContentIndex: ['registration.index'],
|
||||
ContentIndexEvent: ['new ContentIndexEvent("type", {id: "foo"})'],
|
||||
});
|
||||
}
|
||||
}
|
||||
);
|
|
@ -1,37 +1,41 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>CSS Test: The 'border-image' shorthand property</title>
|
||||
<link rel="author" title="Microsoft" href="http://www.microsoft.com/" />
|
||||
<link rel="help" href="http://www.w3.org/TR/css3-background/#the-border-image-shorthand" />
|
||||
<meta name="flags" content="image" />
|
||||
<meta name="assert" content="This test checks that setting 'border-image-source', 'border-image-slice', 'border-image-width', 'border-image-outset' and 'border-image-repeat' properties in the shorthand notation produces the same border image as setting individual properties with the same values." />
|
||||
<style type="text/css">
|
||||
#test
|
||||
<!DOCTYPE html>
|
||||
|
||||
<meta charset="UTF-8">
|
||||
|
||||
<title>CSS Background and Borders Test: The 'border-image' shorthand property</title>
|
||||
<link rel="author" title="Microsoft" href="http://www.microsoft.com/">
|
||||
<!--
|
||||
Test rehabilitated by Gérard Talbot
|
||||
2020-05-28
|
||||
-->
|
||||
<link rel="help" href="http://www.w3.org/TR/css3-background/#the-border-image">
|
||||
<link rel="match" href="reference/border-image-shorthand-001-ref.html">
|
||||
<meta name="flags" content="">
|
||||
<meta name="assert" content="This test checks that setting 'border-image-source', 'border-image-slice', 'border-image-width', 'border-image-outset' and 'border-image-repeat' properties in the shorthand notation produces the same border image as setting individual properties with the same values.">
|
||||
<style>
|
||||
div
|
||||
{
|
||||
border: 10px double red;
|
||||
border-image: url("../support/border81x81.png") 30 / 4 / 2 round stretch;
|
||||
height: 150px;
|
||||
margin: 50px;
|
||||
margin: 50px 0px 100px 50px;
|
||||
width: 150px;
|
||||
}
|
||||
|
||||
#test
|
||||
{
|
||||
border-image: url("support/blue-and-red-diamonds-81x81.png") 30 / 4 / 2 round stretch;
|
||||
}
|
||||
|
||||
#reference
|
||||
{
|
||||
border: 10px double red;
|
||||
border-image-outset: 2;
|
||||
border-image-repeat: round stretch;
|
||||
border-image-slice: 30;
|
||||
border-image-source: url("../support/border81x81.png");
|
||||
border-image-source: url("support/blue-and-red-diamonds-81x81.png");
|
||||
border-image-width: 4;
|
||||
height: 150px;
|
||||
margin: 50px;
|
||||
width: 150px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<p>Test passes if there are two identical images visible on the page.</p>
|
||||
|
||||
<p>Test passes if there are <strong>2 identical images</strong>.
|
||||
<div id="test"></div>
|
||||
<div id="reference"></div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
<!DOCTYPE html>
|
||||
|
||||
<meta charset="UTF-8">
|
||||
|
||||
<title>CSS Reference Test</title>
|
||||
|
||||
<link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
|
||||
|
||||
<style>
|
||||
div
|
||||
{
|
||||
border: 10px double red;
|
||||
border-image-outset: 2;
|
||||
border-image-repeat: round stretch;
|
||||
border-image-slice: 30;
|
||||
border-image-source: url("../support/blue-and-red-diamonds-81x81.png");
|
||||
border-image-width: 4;
|
||||
height: 150px;
|
||||
margin: 50px 0px 100px 50px;
|
||||
width: 150px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if there are <strong>2 identical images.</strong>
|
||||
|
||||
<div></div>
|
||||
|
||||
<div></div>
|
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
|
@ -0,0 +1,23 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="help" href="https://crbug.com/1097654" />
|
||||
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<style>
|
||||
#target {
|
||||
font: 20px/1 Ahem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
border: 2px solid black;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
}
|
||||
</style>
|
||||
<div id=target>X</div>
|
||||
<script>
|
||||
test(function(t) {
|
||||
const target = document.getElementById('target');
|
||||
assert_equals(target, document.elementFromPoint(30, 10));
|
||||
}, 'Hit-testing within an anonymous flex-item should return the flexbox as the hittest result.');
|
||||
</script>
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-multicol-1/#cf" title="7.1. column-fill">
|
||||
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
|
||||
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
||||
<div style="columns:2; column-fill:auto; column-gap:0; height:200px; width:100px;">
|
||||
<div style="columns:2; column-gap:0; background:red;">
|
||||
<div style="height:600px;">
|
||||
<div style="height:100px; background:green;"></div>
|
||||
<div style="height:100px; background:white;"></div>
|
||||
<div style="height:100px; background:green;"></div>
|
||||
<div style="height:100px; background:white;"></div>
|
||||
<div style="height:200px; background:green;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,26 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Reference: ::marker pseudo elements styled with 'list-style-position' property</title>
|
||||
<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
|
||||
<style>
|
||||
body { color: black; background: white; }
|
||||
#t1 > li { list-style-position: inside; }
|
||||
#t2 > li { list-style-position: outside; }
|
||||
#t3 > li { list-style-position: inside; }
|
||||
#t4 > li { list-style-position: inside; }
|
||||
|
||||
#t1, #t2, blue { color: blue; }
|
||||
black { color: black; }
|
||||
|
||||
span { font-size: 32pt; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<ol id="t1"><li></li><li><black>B</black></li><li><span><black>C</black></span></li></ol>
|
||||
<ol id="t2"><li></li><li><black>B</black></li><li><span><black>C</black></span></li></ol>
|
||||
<ol id="t3"><li></li><li><blue>B</blue></li><li><span><blue>C</blue></span></li></ol>
|
||||
<ol id="t4"><li></li><li><blue>B</blue></li><li><span><blue>C</blue></span></li></ol>
|
||||
</body>
|
||||
</html>
|
|
@ -4,7 +4,12 @@
|
|||
<meta charset="utf-8">
|
||||
<title>CSS Test: ::marker pseudo elements styled with 'list-style-position' property</title>
|
||||
<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
|
||||
<link rel="match" href="marker-list-style-position-ref.html">
|
||||
<!-- It's not clear whether inside ::marker should be affected by ::first-line.
|
||||
In the 1st reference, #t3 markers inherit the blue color (like Firefox),
|
||||
and in the 2nd reference they don't (like Chromium and WebKit).
|
||||
See https://github.com/w3c/csswg-drafts/issues/4506 -->
|
||||
<link rel="match" href="marker-list-style-position-ref-001.html">
|
||||
<link rel="match" href="marker-list-style-position-ref-002.html">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#marker-pseudo">
|
||||
<meta name="assert" content="It's the list-style-position on the list item element that decides where its ::marker is placed, not the value on the ::marker itself.">
|
||||
<style>
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
<!DOCTYPE html>
|
||||
<title>CSS aspect-ratio: div block size using intrinsic inline size</title>
|
||||
<link rel="author" title="Google LLC" href="https://www.google.com/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
|
||||
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" />
|
||||
|
||||
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
||||
|
||||
<div style="background: green; float: left; aspect-ratio: 1/1;">
|
||||
<div style="width: 100px;"></div>
|
||||
</div>
|
|
@ -1,4 +1,5 @@
|
|||
<!DOCTYPE html>
|
||||
<meta name="timeout" content="long">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/css/support/interpolation-testcommon.js"></script>
|
||||
|
|
|
@ -0,0 +1,72 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>document.domain and removed iframe interaction</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
|
||||
<!-- This is a test for https://crbug.com/1095145 where window
|
||||
properties become undefined for document.domain-using removed
|
||||
iframes -->
|
||||
|
||||
<div id="log"></div>
|
||||
|
||||
<script>
|
||||
"use strict";
|
||||
|
||||
promise_test(t => {
|
||||
return new Promise(resolve => {
|
||||
const iframe = document.createElement("iframe");
|
||||
iframe.onload = t.step_func(() => {
|
||||
const { contentWindow } = iframe;
|
||||
assert_equals(contentWindow.status, "");
|
||||
resolve();
|
||||
});
|
||||
iframe.src = "/common/blank.html";
|
||||
document.body.append(iframe);
|
||||
});
|
||||
}, "No removal, no document.domain");
|
||||
|
||||
promise_test(t => {
|
||||
return new Promise(resolve => {
|
||||
const iframe = document.createElement("iframe");
|
||||
iframe.onload = t.step_func(() => {
|
||||
const { contentWindow } = iframe;
|
||||
iframe.remove();
|
||||
assert_equals(contentWindow.status, "");
|
||||
resolve();
|
||||
});
|
||||
iframe.src = "/common/blank.html";
|
||||
document.body.append(iframe);
|
||||
});
|
||||
}, "Removal, no document.domain");
|
||||
|
||||
promise_test(t => {
|
||||
return new Promise(resolve => {
|
||||
const iframe = document.createElement("iframe");
|
||||
iframe.onload = t.step_func(() => {
|
||||
document.domain = document.domain;
|
||||
const { contentWindow } = iframe;
|
||||
assert_equals(contentWindow.status, "");
|
||||
resolve();
|
||||
});
|
||||
iframe.src = "resources/document-domain-setter.html";
|
||||
document.body.append(iframe);
|
||||
});
|
||||
}, "No removal, document.domain");
|
||||
|
||||
promise_test(t => {
|
||||
return new Promise(resolve => {
|
||||
const iframe = document.createElement("iframe");
|
||||
iframe.onload = t.step_func(() => {
|
||||
document.domain = document.domain; // technically we already did this above
|
||||
const { contentWindow } = iframe;
|
||||
iframe.remove();
|
||||
assert_equals(contentWindow.status, "");
|
||||
resolve();
|
||||
});
|
||||
iframe.src = "resources/document-domain-setter.html";
|
||||
document.body.append(iframe);
|
||||
});
|
||||
}, "Removal, document.domain");
|
||||
|
||||
</script>
|
|
@ -0,0 +1,42 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>window.frameElement access to a same-origin-domain sibling</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
|
||||
<iframe src="//{{hosts[][]}}:{{ports[http][0]}}/html/browsers/windows/nested-browsing-contexts/resources/frameElement-sibling-accessed.html"></iframe>
|
||||
<iframe src="//{{hosts[][www]}}:{{ports[http][0]}}/html/browsers/windows/nested-browsing-contexts/resources/frameElement-sibling-accessor.html"></iframe>
|
||||
|
||||
<script>
|
||||
"use strict";
|
||||
setup({ explicit_done: true });
|
||||
|
||||
window.onload = () => {
|
||||
promise_test(async () => {
|
||||
frames[1].postMessage({}, "*");
|
||||
const result = await waitForMessage();
|
||||
|
||||
assert_equals(result, "SecurityError");
|
||||
}, "it must give a \"SecurityError\" DOMException if the pages are different-origin domain");
|
||||
|
||||
promise_test(async () => {
|
||||
document.domain = document.domain;
|
||||
|
||||
frames[0].postMessage({ newDocumentDomain: document.domain }, "*");
|
||||
assert_equals(await waitForMessage(), "done");
|
||||
|
||||
frames[1].postMessage({ newDocumentDomain: document.domain }, "*");
|
||||
const result = await waitForMessage();
|
||||
|
||||
assert_equals(result, "HTMLIFrameElement");
|
||||
}, "it must return the iframe element if the pages are same-origin domain");
|
||||
|
||||
done();
|
||||
};
|
||||
|
||||
function waitForMessage() {
|
||||
return new Promise(resolve => {
|
||||
window.addEventListener("message", e => resolve(e.data), { once: true });
|
||||
});
|
||||
}
|
||||
</script>
|
|
@ -0,0 +1,16 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>This page will set its document.domain on request so that its sibling can access it</title>
|
||||
|
||||
<h1>I did get loaded</h1>
|
||||
|
||||
<script>
|
||||
"use strict";
|
||||
|
||||
window.onmessage = e => {
|
||||
const { newDocumentDomain } = e.data;
|
||||
document.domain = newDocumentDomain;
|
||||
|
||||
parent.postMessage("done", "*");
|
||||
};
|
||||
</script>
|
|
@ -0,0 +1,33 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>This page will attempt to access the frameElement of its sibling and report the results on request</title>
|
||||
|
||||
<h1>I did get loaded</h1>
|
||||
|
||||
<script>
|
||||
"use strict";
|
||||
|
||||
window.onmessage = e => {
|
||||
const { newDocumentDomain } = e.data;
|
||||
if (newDocumentDomain) {
|
||||
document.domain = newDocumentDomain;
|
||||
}
|
||||
|
||||
const siblingWindow = parent.frames[0];
|
||||
|
||||
try {
|
||||
const { frameElement } = siblingWindow;
|
||||
|
||||
let result = "something wierd happened";
|
||||
if (frameElement === null) {
|
||||
result = "null";
|
||||
} else if (frameElement.constructor) {
|
||||
result = frameElement.constructor.name;
|
||||
}
|
||||
|
||||
parent.postMessage(result, "*");
|
||||
} catch (e) {
|
||||
parent.postMessage(e.name, "*");
|
||||
}
|
||||
};
|
||||
</script>
|
|
@ -0,0 +1,7 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>Helper page that sets document.domain</title>
|
||||
<script>
|
||||
"use strict";
|
||||
document.domain = document.domain;
|
||||
</script>
|
|
@ -8,6 +8,7 @@
|
|||
<script src=/common/get-host-info.sub.js></script>
|
||||
<script src="/common/utils.js"></script>
|
||||
<script src="./resources/dispatcher.js"></script>
|
||||
<script src="./resources/try-access.js"></script>
|
||||
<script>
|
||||
|
||||
const directory = "/html/cross-origin-opener-policy/access-reporting";
|
||||
|
@ -15,66 +16,39 @@ const executor_path = directory + "/resources/executor.html?pipe=";
|
|||
const cross_origin = get_host_info().HTTPS_REMOTE_ORIGIN;
|
||||
const coep_header = '|header(Cross-Origin-Embedder-Policy,require-corp)';
|
||||
|
||||
let operation = [
|
||||
//[property , operation ] ,
|
||||
["blur" , w => w.blur() ] ,
|
||||
["close" , w => w.close() ] ,
|
||||
["closed" , w => w.closed ] ,
|
||||
["focus" , w => w.focus() ] ,
|
||||
["frames" , w => w.frames ] ,
|
||||
["indexed" , w => w[0] ] ,
|
||||
["indexed" , w => w[0] = "" ] ,
|
||||
["length" , w => w.length ] ,
|
||||
["location" , w => w.location ] ,
|
||||
["location" , w => w.location = "#" ] ,
|
||||
["named" , w => w["test"] ] ,
|
||||
["named" , w => w["test"] = "" ] ,
|
||||
["opener" , w => w.opener ] ,
|
||||
["opener" , w => w.opener = "" ] ,
|
||||
["postMessage" , w => w.postMessage("") ] ,
|
||||
["postMessage" , w => w.postMessage("", "")] ,
|
||||
["self" , w => w.self ] ,
|
||||
["top" , w => w.top ] ,
|
||||
["window" , w => w.window ] ,
|
||||
];
|
||||
promise_test(async t => {
|
||||
const report_token = token();
|
||||
const executor_token = token();
|
||||
const callback_token = token();
|
||||
|
||||
operation.forEach(([property, op]) => {
|
||||
promise_test(async t => {
|
||||
const report_token = token();
|
||||
const executor_token = token();
|
||||
const callback_token = token();
|
||||
const reportTo = reportToHeaders(report_token);
|
||||
const openee_url = cross_origin + executor_path +
|
||||
reportTo.header + reportTo.coopReportOnlySameOriginHeader + coep_header +
|
||||
`&uuid=${executor_token}`;
|
||||
const openee = window.open(openee_url);
|
||||
t.add_cleanup(() => send(executor_token, "window.close()"))
|
||||
|
||||
const reportTo = reportToHeaders(report_token);
|
||||
const openee_url = cross_origin + executor_path +
|
||||
reportTo.header + reportTo.coopReportOnlySameOriginHeader + coep_header +
|
||||
`&uuid=${executor_token}`;
|
||||
const openee = window.open(openee_url);
|
||||
t.add_cleanup(() => send(executor_token, "window.close()"))
|
||||
// 1. Make sure the new document to be loaded.
|
||||
send(executor_token, `
|
||||
send("${callback_token}", "Ready");
|
||||
`);
|
||||
let reply = await receive(callback_token);
|
||||
assert_equals(reply, "Ready");
|
||||
|
||||
// 1. Make sure the new document to be loaded.
|
||||
send(executor_token, `
|
||||
send("${callback_token}", "Ready");
|
||||
`);
|
||||
let reply = await receive(callback_token);
|
||||
assert_equals(reply, "Ready");
|
||||
// 2. Try to access the openee. A report is sent, because of COOP-RO+COEP.
|
||||
tryAccess(openee);
|
||||
|
||||
// 2. Try to access the openee. A report is sent, because of COOP-RO+COEP.
|
||||
try {op(openee)} catch(e) {}
|
||||
|
||||
// 3. Check a report is sent to the openee.
|
||||
let report = await receiveReport(report_token, "access-to-coop-page")
|
||||
assert_not_equals(report, "timeout", "Report not received");
|
||||
assert_equals(report.type, "coop");
|
||||
assert_equals(report.url, openee_url.replace(/"/g, '%22'));
|
||||
assert_equals(report.body["violation-type"], "access-to-coop-page");
|
||||
assert_equals(report.body["disposition"], "reporting");
|
||||
assert_equals(report.body["effective-policy"], "same-origin-plus-coep");
|
||||
assert_equals(report.body["property"], property);
|
||||
assert_equals(report.body["source-file"], undefined);
|
||||
assert_equals(report.body["lineno"], undefined);
|
||||
assert_equals(report.body["colno"], undefined);
|
||||
// TODO(arthursonzogni): Add check for report > body > blocked-window-url
|
||||
}, `${op}`);
|
||||
});
|
||||
// 3. Check a report is sent to the openee.
|
||||
let report = await receiveReport(report_token, "access-to-coop-page")
|
||||
assert_not_equals(report, "timeout", "Report not received");
|
||||
assert_equals(report.type, "coop");
|
||||
assert_equals(report.url, openee_url.replace(/"/g, '%22'));
|
||||
assert_equals(report.body["violation-type"], "access-to-coop-page");
|
||||
assert_equals(report.body["disposition"], "reporting");
|
||||
assert_equals(report.body["effective-policy"], "same-origin-plus-coep");
|
||||
assert_equals(report.body["property"], "blur");
|
||||
assert_source_location_missing(report);
|
||||
// TODO(arthursonzogni): Add check for report > body > blocked-window-url
|
||||
}, "Opener accesses openee (COOP-RO+COEP). Report to openee");
|
||||
|
||||
</script>
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
<script src=/common/get-host-info.sub.js></script>
|
||||
<script src="/common/utils.js"></script>
|
||||
<script src="./resources/dispatcher.js"></script>
|
||||
<script src="./resources/try-access.js"></script>
|
||||
<script>
|
||||
|
||||
const directory = "/html/cross-origin-opener-policy/access-reporting";
|
||||
|
@ -15,67 +16,39 @@ const executor_path = directory + "/resources/executor.html?pipe=";
|
|||
const cross_origin = get_host_info().HTTPS_REMOTE_ORIGIN;
|
||||
const coep_header = '|header(Cross-Origin-Embedder-Policy,require-corp)';
|
||||
|
||||
let operation = [
|
||||
//[property , operation ] ,
|
||||
["blur" , w => w.blur() ] ,
|
||||
["close" , w => w.close() ] ,
|
||||
["closed" , w => w.closed ] ,
|
||||
["focus" , w => w.focus() ] ,
|
||||
["frames" , w => w.frames ] ,
|
||||
["indexed" , w => w[0] ] ,
|
||||
["indexed" , w => w[0] = "" ] ,
|
||||
["length" , w => w.length ] ,
|
||||
["location" , w => w.location ] ,
|
||||
["location" , w => w.location = "#" ] ,
|
||||
["named" , w => w["test"] ] ,
|
||||
["named" , w => w["test"] = "" ] ,
|
||||
["opener" , w => w.opener ] ,
|
||||
["opener" , w => w.opener = "" ] ,
|
||||
["postMessage" , w => w.postMessage("") ] ,
|
||||
["postMessage" , w => w.postMessage("", "")] ,
|
||||
["self" , w => w.self ] ,
|
||||
["top" , w => w.top ] ,
|
||||
["window" , w => w.window ] ,
|
||||
];
|
||||
promise_test(async t => {
|
||||
const report_token = token();
|
||||
const executor_token = token();
|
||||
const callback_token = token();
|
||||
|
||||
operation.forEach(([property, op]) => {
|
||||
promise_test(async t => {
|
||||
const report_token = token();
|
||||
const executor_token = token();
|
||||
const callback_token = token();
|
||||
const reportTo = reportToHeaders(report_token);
|
||||
const openee_url = cross_origin + executor_path +
|
||||
reportTo.header + reportTo.coopSameOriginHeader + coep_header +
|
||||
`&uuid=${executor_token}`;
|
||||
const openee = window.open(openee_url);
|
||||
t.add_cleanup(() => send(executor_token, "window.close()"))
|
||||
|
||||
const reportTo = reportToHeaders(report_token);
|
||||
const openee_url = cross_origin + executor_path +
|
||||
reportTo.header + reportTo.coopSameOriginHeader + coep_header +
|
||||
`&uuid=${executor_token}`;
|
||||
const openee = window.open(openee_url);
|
||||
t.add_cleanup(() => send(executor_token, "window.close()"))
|
||||
// 1. Make sure the new document to be loaded.
|
||||
send(executor_token, `
|
||||
send("${callback_token}", "Ready");
|
||||
`);
|
||||
let reply = await receive(callback_token);
|
||||
assert_equals(reply, "Ready");
|
||||
|
||||
// 1. Make sure the new document to be loaded.
|
||||
send(executor_token, `
|
||||
send("${callback_token}", "Ready");
|
||||
`);
|
||||
let reply = await receive(callback_token);
|
||||
assert_equals(reply, "Ready");
|
||||
// 2. Try to access the openee. This shouldn't work because of COOP+COEP.
|
||||
tryAccess(openee);
|
||||
|
||||
// 2. Try to access the openee. This shouldn't work because of COOP+COEP.
|
||||
try {op(openee)} catch(e) {}
|
||||
|
||||
// 3. Check a report is sent to the openee.
|
||||
let report = await receiveReport(report_token, "access-to-coop-page")
|
||||
assert_not_equals(report, "timeout", "Report not received");
|
||||
assert_equals(report.type, "coop");
|
||||
assert_equals(report.url, openee_url.replace(/"/g, '%22'));
|
||||
assert_equals(report.body["violation-type"], "access-to-coop-page");
|
||||
assert_equals(report.body["disposition"], "enforce");
|
||||
assert_equals(report.body["effective-policy"], "same-origin-plus-coep");
|
||||
assert_equals(report.body["property"], property);
|
||||
assert_equals(report.body["source-file"], undefined);
|
||||
assert_equals(report.body["lineno"], undefined);
|
||||
assert_equals(report.body["colno"], undefined);
|
||||
// TODO(arthursonzogni): Add check for report > body > blocked-window-url
|
||||
|
||||
}, `${op}`);
|
||||
});
|
||||
// 3. Check a report is sent to the openee.
|
||||
let report = await receiveReport(report_token, "access-to-coop-page")
|
||||
assert_not_equals(report, "timeout", "Report not received");
|
||||
assert_equals(report.type, "coop");
|
||||
assert_equals(report.url, openee_url.replace(/"/g, '%22'));
|
||||
assert_equals(report.body["violation-type"], "access-to-coop-page");
|
||||
assert_equals(report.body["disposition"], "enforce");
|
||||
assert_equals(report.body["effective-policy"], "same-origin-plus-coep");
|
||||
assert_equals(report.body["property"], "blur");
|
||||
assert_source_location_missing(report);
|
||||
// TODO(arthursonzogni): Add check for report > body > blocked-window-url
|
||||
}, "Opener accesses openee (COOP+COEP). Report to openee");
|
||||
|
||||
</script>
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
<script src=/common/get-host-info.sub.js></script>
|
||||
<script src="/common/utils.js"></script>
|
||||
<script src="./resources/dispatcher.js"></script>
|
||||
<script src="./resources/try-access.js"></script>
|
||||
<script>
|
||||
|
||||
const directory = "/html/cross-origin-opener-policy/access-reporting";
|
||||
|
@ -39,7 +40,7 @@ promise_test(async t => {
|
|||
|
||||
// 2. The opener opens it openee.
|
||||
send(opener_token, `
|
||||
let openee = window.open("${openee_url}");
|
||||
openee = window.open("${openee_url}");
|
||||
send("${this_window_token}", "ACK 1");
|
||||
`);
|
||||
assert_equals("ACK 1", await receive(this_window_token));
|
||||
|
@ -53,7 +54,7 @@ promise_test(async t => {
|
|||
|
||||
// 4. The opener tries to access its openee.
|
||||
send(opener_token, `
|
||||
try {openee.blur()} catch(e) {}
|
||||
tryAccess(openee);
|
||||
`);
|
||||
|
||||
// 5. Check a report sent to the opener.
|
||||
|
@ -65,10 +66,8 @@ promise_test(async t => {
|
|||
assert_equals(report.body["disposition"], "reporting");
|
||||
assert_equals(report.body["effective-policy"], "same-origin-plus-coep");
|
||||
assert_equals(report.body["property"], "blur");
|
||||
assert_equals(report.body["source-file"], undefined);
|
||||
assert_equals(report.body["lineno"], undefined);
|
||||
assert_equals(report.body["colno"], undefined);
|
||||
assert_source_location_found(report);
|
||||
// TODO(arthursonzogni): Check the window-blocked-url.
|
||||
}, "Opener (COOP-RO+COEP) access cross origin openee");
|
||||
}, "Opener (COOP-RO+COEP) accesses openee. Report to opener");
|
||||
|
||||
</script>
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
<script src=/common/get-host-info.sub.js></script>
|
||||
<script src="/common/utils.js"></script>
|
||||
<script src="./resources/dispatcher.js"></script>
|
||||
<script src="./resources/try-access.js"></script>
|
||||
<script>
|
||||
|
||||
const directory = "/html/cross-origin-opener-policy/access-reporting";
|
||||
|
@ -39,7 +40,7 @@ promise_test(async t => {
|
|||
|
||||
// 2. The opener opens it openee.
|
||||
send(opener_token, `
|
||||
let openee = window.open("${openee_url}");
|
||||
openee = window.open("${openee_url}");
|
||||
send("${this_window_token}", "ACK 1");
|
||||
`);
|
||||
assert_equals("ACK 1", await receive(this_window_token));
|
||||
|
@ -53,7 +54,7 @@ promise_test(async t => {
|
|||
|
||||
// 4. The opener tries to access its openee.
|
||||
send(opener_token, `
|
||||
try {openee.blur()} catch(e) {}
|
||||
tryAccess(openee);
|
||||
`);
|
||||
|
||||
// 5. Check a report sent to the opener.
|
||||
|
@ -65,10 +66,8 @@ promise_test(async t => {
|
|||
assert_equals(report.body["disposition"], "enforce");
|
||||
assert_equals(report.body["effective-policy"], "same-origin-plus-coep");
|
||||
assert_equals(report.body["property"], "blur");
|
||||
assert_equals(report.body["source-file"], undefined);
|
||||
assert_equals(report.body["lineno"], undefined);
|
||||
assert_equals(report.body["colno"], undefined);
|
||||
assert_source_location_found(report);
|
||||
// TODO(arthursonzogni): Check the window-blocked-url.
|
||||
}, "Opener (COOP+COEP) access cross origin openee");
|
||||
}, "Opener (COOP+COEP) accesses openee. Report to opener");
|
||||
|
||||
</script>
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
<script src=/common/get-host-info.sub.js></script>
|
||||
<script src="/common/utils.js"></script>
|
||||
<script src="./resources/dispatcher.js"></script>
|
||||
<script src="./resources/try-access.js"></script>
|
||||
<script>
|
||||
|
||||
const directory = "/html/cross-origin-opener-policy/access-reporting";
|
||||
|
@ -15,70 +16,33 @@ const executor_path = directory + "/resources/executor.html?pipe=";
|
|||
const cross_origin = get_host_info().HTTPS_REMOTE_ORIGIN;
|
||||
const coep_header = '|header(Cross-Origin-Embedder-Policy,require-corp)';
|
||||
|
||||
let operation = [
|
||||
//[property , operation ] ,
|
||||
["blur" , 'opener.blur()' ] ,
|
||||
["close" , 'opener.close()' ] ,
|
||||
["closed" , 'opener.closed' ] ,
|
||||
["focus" , 'opener.focus()' ] ,
|
||||
["frames" , 'opener.frames' ] ,
|
||||
["indexed" , 'opener[0]' ] ,
|
||||
["indexed" , 'opener[0] = ""' ] ,
|
||||
["length" , 'opener.length' ] ,
|
||||
["location" , 'opener.location' ] ,
|
||||
["location" , 'opener.location = "#"' ] ,
|
||||
["named" , 'opener["test"]' ] ,
|
||||
["named" , 'opener["test"] = ""' ] ,
|
||||
["opener" , 'opener.opener' ] ,
|
||||
["opener" , 'opener.opener = ""' ] ,
|
||||
["postMessage" , 'opener.postMessage("")' ] ,
|
||||
["postMessage" , 'opener.postMessage("", "")'] ,
|
||||
["self" , 'opener.self' ] ,
|
||||
["top" , 'opener.top' ] ,
|
||||
["window" , 'opener.window' ] ,
|
||||
];
|
||||
promise_test(async t => {
|
||||
const report_token = token();
|
||||
const executor_token = token();
|
||||
const callback_token = token();
|
||||
|
||||
operation.forEach(([property, op]) => {
|
||||
promise_test(async t => {
|
||||
const report_token = token();
|
||||
const executor_token = token();
|
||||
const callback_token = token();
|
||||
const reportTo = reportToHeaders(report_token);
|
||||
const openee_url = cross_origin + executor_path +
|
||||
reportTo.header + reportTo.coopReportOnlySameOriginHeader + coep_header +
|
||||
`&uuid=${executor_token}`;
|
||||
const openee = window.open(openee_url);
|
||||
t.add_cleanup(() => send(executor_token, "window.close()"))
|
||||
|
||||
const reportTo = reportToHeaders(report_token);
|
||||
const openee_url = cross_origin + executor_path +
|
||||
reportTo.header + reportTo.coopReportOnlySameOriginHeader + coep_header +
|
||||
`&uuid=${executor_token}`;
|
||||
const openee = window.open(openee_url);
|
||||
t.add_cleanup(() => send(executor_token, "window.close()"))
|
||||
// 1. Try to access the opener. A report is sent, because of COOP-RO+COEP.
|
||||
send(executor_token, `
|
||||
tryAccess(opener);
|
||||
`);
|
||||
|
||||
// 1. Skip the first report about the opener breakage.
|
||||
let report_1 = await receive(report_token);
|
||||
assert_not_equals(report_1, "timeout",
|
||||
"Receive navigation-to-document report");
|
||||
report_1 = JSON.parse(report_1);
|
||||
assert_equals(report_1.length, 1);
|
||||
assert_equals(report_1[0].type, "coop");
|
||||
assert_equals(report_1[0].body["violation-type"], "navigation-to-document");
|
||||
assert_equals(report_1[0].body["disposition"], "reporting");
|
||||
|
||||
// 3. Try to access the opener. A report is sent, because of COOP-RO+COEP.
|
||||
send(executor_token, `
|
||||
try {${op}} catch(e) {}
|
||||
`);
|
||||
|
||||
// 3. Check a report is sent to the openee.
|
||||
let report = await receiveReport(report_token, "access-from-coop-page")
|
||||
assert_not_equals(report, "timeout", "Report not received");
|
||||
assert_equals(report.type, "coop");
|
||||
assert_equals(report.url, openee_url.replace(/"/g, '%22'));
|
||||
assert_equals(report.body["violation-type"], "access-from-coop-page");
|
||||
assert_equals(report.body["disposition"], "reporting");
|
||||
assert_equals(report.body["effective-policy"], "same-origin-plus-coep");
|
||||
assert_equals(report.body["property"], property);
|
||||
assert_equals(report.body["source-file"], undefined);
|
||||
assert_equals(report.body["lineno"], undefined);
|
||||
assert_equals(report.body["colno"], undefined);
|
||||
}, `${op})`);
|
||||
});
|
||||
// 2. Check a report is sent to the openee.
|
||||
let report = await receiveReport(report_token, "access-from-coop-page")
|
||||
assert_not_equals(report, "timeout", "Report not received");
|
||||
assert_equals(report.type, "coop");
|
||||
assert_equals(report.url, openee_url.replace(/"/g, '%22'));
|
||||
assert_equals(report.body["violation-type"], "access-from-coop-page");
|
||||
assert_equals(report.body["disposition"], "reporting");
|
||||
assert_equals(report.body["effective-policy"], "same-origin-plus-coep");
|
||||
assert_equals(report.body["property"], "blur");
|
||||
assert_source_location_found(report);
|
||||
}, "Openee (COOP-RO+COEP) accesses opener. Report to openee");
|
||||
|
||||
</script>
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
<script src=/common/get-host-info.sub.js></script>
|
||||
<script src="/common/utils.js"></script>
|
||||
<script src="./resources/dispatcher.js"></script>
|
||||
<script src="./resources/try-access.js"></script>
|
||||
<script>
|
||||
|
||||
const directory = "/html/cross-origin-opener-policy/access-reporting";
|
||||
|
@ -15,60 +16,33 @@ const executor_path = directory + "/resources/executor.html?pipe=";
|
|||
const cross_origin = get_host_info().HTTPS_REMOTE_ORIGIN;
|
||||
const coep_header = '|header(Cross-Origin-Embedder-Policy,require-corp)';
|
||||
|
||||
let operation = [
|
||||
//[property , operation ] ,
|
||||
["blur" , 'opener.blur()' ] ,
|
||||
["close" , 'opener.close()' ] ,
|
||||
["closed" , 'opener.closed' ] ,
|
||||
["focus" , 'opener.focus()' ] ,
|
||||
["frames" , 'opener.frames' ] ,
|
||||
["indexed" , 'opener[0]' ] ,
|
||||
["indexed" , 'opener[0] = ""' ] ,
|
||||
["length" , 'opener.length' ] ,
|
||||
["location" , 'opener.location' ] ,
|
||||
["location" , 'opener.location = "#"' ] ,
|
||||
["named" , 'opener["test"]' ] ,
|
||||
["named" , 'opener["test"] = ""' ] ,
|
||||
["opener" , 'opener.opener' ] ,
|
||||
["opener" , 'opener.opener = ""' ] ,
|
||||
["postMessage" , 'opener.postMessage("")' ] ,
|
||||
["postMessage" , 'opener.postMessage("", "")'] ,
|
||||
["self" , 'opener.self' ] ,
|
||||
["top" , 'opener.top' ] ,
|
||||
["window" , 'opener.window' ] ,
|
||||
];
|
||||
promise_test(async t => {
|
||||
const report_token = token();
|
||||
const executor_token = token();
|
||||
const callback_token = token();
|
||||
|
||||
operation.forEach(([property, op]) => {
|
||||
promise_test(async t => {
|
||||
const report_token = token();
|
||||
const executor_token = token();
|
||||
const callback_token = token();
|
||||
const reportTo = reportToHeaders(report_token);
|
||||
const openee_url = cross_origin + executor_path +
|
||||
reportTo.header + reportTo.coopSameOriginHeader + coep_header +
|
||||
`&uuid=${executor_token}`;
|
||||
const openee = window.open(openee_url);
|
||||
t.add_cleanup(() => send(executor_token, "window.close()"));
|
||||
|
||||
const reportTo = reportToHeaders(report_token);
|
||||
const openee_url = cross_origin + executor_path +
|
||||
reportTo.header + reportTo.coopSameOriginHeader + coep_header +
|
||||
`&uuid=${executor_token}`;
|
||||
const openee = window.open(openee_url);
|
||||
t.add_cleanup(() => send(executor_token, "window.close()"));
|
||||
// 1. Try to access the opener. A report is sent, because of COOP+COEP.
|
||||
send(executor_token, `
|
||||
tryAccess(opener);
|
||||
`);
|
||||
|
||||
// 2. Try to access the opener. A report is sent, because of COOP+COEP.
|
||||
send(executor_token, `
|
||||
try {${op}} catch(e) {}
|
||||
`);
|
||||
|
||||
// 3. Check a report is sent to the openee.
|
||||
let report = await receiveReport(report_token, "access-from-coop-page")
|
||||
assert_not_equals(report, "timeout", "Report not received");
|
||||
assert_equals(report.type, "coop");
|
||||
assert_equals(report.url, openee_url.replace(/"/g, '%22'));
|
||||
assert_equals(report.body["violation-type"], "access-from-coop-page");
|
||||
assert_equals(report.body["disposition"], "enforce");
|
||||
assert_equals(report.body["effective-policy"], "same-origin-plus-coep");
|
||||
assert_equals(report.body["property"], property);
|
||||
assert_equals(report.body["source-file"], undefined);
|
||||
assert_equals(report.body["lineno"], undefined);
|
||||
assert_equals(report.body["colno"], undefined);
|
||||
}, `${op}`);
|
||||
});
|
||||
// 2. Check a report is sent to the openee.
|
||||
let report = await receiveReport(report_token, "access-from-coop-page")
|
||||
assert_not_equals(report, "timeout", "Report not received");
|
||||
assert_equals(report.type, "coop");
|
||||
assert_equals(report.url, openee_url.replace(/"/g, '%22'));
|
||||
assert_equals(report.body["violation-type"], "access-from-coop-page");
|
||||
assert_equals(report.body["disposition"], "enforce");
|
||||
assert_equals(report.body["effective-policy"], "same-origin-plus-coep");
|
||||
assert_equals(report.body["property"], "blur");
|
||||
assert_source_location_found(report);
|
||||
}, "Openee (COOP+COEP) accesses opener. Report to openee");
|
||||
|
||||
</script>
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
<script src=/common/get-host-info.sub.js></script>
|
||||
<script src="/common/utils.js"></script>
|
||||
<script src="./resources/dispatcher.js"></script>
|
||||
<script src="./resources/try-access.js"></script>
|
||||
<script>
|
||||
|
||||
const directory = "/html/cross-origin-opener-policy/access-reporting";
|
||||
|
@ -39,7 +40,7 @@ promise_test(async t => {
|
|||
|
||||
// 2. The opener opens its openee.
|
||||
send(opener_token, `
|
||||
let openee = window.open("${openee_url}");
|
||||
openee = window.open("${openee_url}");
|
||||
send("${this_window_token}", "ACK 1");
|
||||
`);
|
||||
assert_equals("ACK 1", await receive(this_window_token));
|
||||
|
@ -47,10 +48,8 @@ promise_test(async t => {
|
|||
|
||||
// 3. The openee tries to access its opener.
|
||||
send(openee_token, `
|
||||
try {opener.blur()} catch(e) {}
|
||||
send("${this_window_token}", "ACK 3");
|
||||
tryAccess(opener);
|
||||
`);
|
||||
assert_equals("ACK 3", await receive(this_window_token));
|
||||
|
||||
// 4. Check a report sent to the opener.
|
||||
let report = await receiveReport(opener_report_token, "access-to-coop-page")
|
||||
|
@ -61,10 +60,8 @@ promise_test(async t => {
|
|||
assert_equals(report.body["disposition"], "reporting");
|
||||
assert_equals(report.body["effective-policy"], "same-origin-plus-coep");
|
||||
assert_equals(report.body["property"], "blur");
|
||||
assert_equals(report.body["source-file"], undefined);
|
||||
assert_equals(report.body["lineno"], undefined);
|
||||
assert_equals(report.body["colno"], undefined);
|
||||
assert_source_location_missing(report);
|
||||
// TODO(arthursonzogni): Check the window-blocked-url.
|
||||
}, "Opener (COOP-RO+COEP) accessed by cross origin openee");
|
||||
}, "Openee accesses opener (COOP-RO-COEP). Report to opener");
|
||||
|
||||
</script>
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
<script src=/common/get-host-info.sub.js></script>
|
||||
<script src="/common/utils.js"></script>
|
||||
<script src="./resources/dispatcher.js"></script>
|
||||
<script src="./resources/try-access.js"></script>
|
||||
<script>
|
||||
|
||||
const directory = "/html/cross-origin-opener-policy/access-reporting";
|
||||
|
@ -39,7 +40,7 @@ promise_test(async t => {
|
|||
|
||||
// 2. The opener opens its openee.
|
||||
send(opener_token, `
|
||||
let openee = window.open("${openee_url}");
|
||||
openee = window.open("${openee_url}");
|
||||
send("${this_window_token}", "ACK 1");
|
||||
`);
|
||||
assert_equals("ACK 1", await receive(this_window_token));
|
||||
|
@ -47,7 +48,7 @@ promise_test(async t => {
|
|||
|
||||
// 3. The openee tries to access its opener.
|
||||
send(openee_token, `
|
||||
try {opener.blur()} catch(e) {}
|
||||
tryAccess(opener);
|
||||
`);
|
||||
|
||||
// 4. Check a report is sent to the opener.
|
||||
|
@ -59,10 +60,8 @@ promise_test(async t => {
|
|||
assert_equals(report.body["disposition"], "enforce");
|
||||
assert_equals(report.body["effective-policy"], "same-origin-plus-coep");
|
||||
assert_equals(report.body["property"], "blur");
|
||||
assert_equals(report.body["source-file"], undefined);
|
||||
assert_equals(report.body["lineno"], undefined);
|
||||
assert_equals(report.body["colno"], undefined);
|
||||
assert_source_location_missing(report);
|
||||
// TODO(arthursonzogni): Check the window-blocked-url.
|
||||
}, "Opener (COOP+COEP) accessed by cross origin openee");
|
||||
}, "Openee accesses opener (COOP-COEP). Report to opener");
|
||||
|
||||
</script>
|
||||
|
|
|
@ -0,0 +1,72 @@
|
|||
<title> Check the "report > body > property" is properly populated.</title>
|
||||
<meta name=timeout content=long>
|
||||
<script src=/resources/testharness.js></script>
|
||||
<script src=/resources/testharnessreport.js></script>
|
||||
<script src=/common/get-host-info.sub.js></script>
|
||||
<script src="/common/utils.js"></script>
|
||||
<script src="./resources/dispatcher.js"></script>
|
||||
<script>
|
||||
|
||||
const directory = "/html/cross-origin-opener-policy/access-reporting";
|
||||
const executor_path = directory + "/resources/executor.html?pipe=";
|
||||
const coep_header = '|header(Cross-Origin-Embedder-Policy,require-corp)';
|
||||
|
||||
let origin = [
|
||||
["cross-origin" , get_host_info().HTTPS_REMOTE_ORIGIN ] ,
|
||||
["same-site" , get_host_info().HTTPS_ORIGIN ] ,
|
||||
];
|
||||
|
||||
let property= [
|
||||
["blur" , w => w.blur() ] ,
|
||||
["close" , w => w.close() ] ,
|
||||
["closed" , w => w.closed ] ,
|
||||
["focus" , w => w.focus() ] ,
|
||||
["frames" , w => w.frames ] ,
|
||||
["indexed" , w => w[0] ] ,
|
||||
["indexed" , w => w[0] = "" ] ,
|
||||
["length" , w => w.length ] ,
|
||||
["location" , w => w.location ] ,
|
||||
["location" , w => w.location = "#" ] ,
|
||||
["named" , w => w["test"] ] ,
|
||||
["named" , w => w["test"] = "" ] ,
|
||||
["opener" , w => w.opener ] ,
|
||||
["opener" , w => w.opener = "" ] ,
|
||||
["postMessage" , w => w.postMessage("") ] ,
|
||||
["postMessage" , w => w.postMessage("", "")] ,
|
||||
["self" , w => w.self ] ,
|
||||
["top" , w => w.top ] ,
|
||||
["window" , w => w.window ] ,
|
||||
];
|
||||
|
||||
origin.forEach(([origin_name, origin]) => {
|
||||
property.forEach(([property, op]) => {
|
||||
promise_test(async t => {
|
||||
const report_token = token();
|
||||
const executor_token = token();
|
||||
const callback_token = token();
|
||||
|
||||
const reportTo = reportToHeaders(report_token);
|
||||
const openee_url = origin+ executor_path +
|
||||
reportTo.header + reportTo.coopSameOriginHeader + coep_header +
|
||||
`&uuid=${executor_token}`;
|
||||
const openee = window.open(openee_url);
|
||||
t.add_cleanup(() => send(executor_token, "window.close()"))
|
||||
|
||||
// 1. Make sure the new document to be loaded.
|
||||
send(executor_token, `send("${callback_token}", "Ready");`);
|
||||
let reply = await receive(callback_token);
|
||||
assert_equals(reply, "Ready");
|
||||
|
||||
// 2. Try to access the openee. This shouldn't work because of COOP+COEP.
|
||||
try {op(openee)} catch(e) {}
|
||||
|
||||
// 3. Check a reports is sent to the opener.
|
||||
let report = await receiveReport(report_token, "access-to-coop-page")
|
||||
assert_not_equals(report, "timeout", "Report not received");
|
||||
assert_equals(report.body["property"], property);
|
||||
|
||||
}, `${origin_name} > ${op}`);
|
||||
})
|
||||
});
|
||||
|
||||
</script>
|
|
@ -1,12 +1,15 @@
|
|||
<script src=/resources/testharness.js></script>
|
||||
<script src="./dispatcher.js"></script>
|
||||
<script src="./try-access.js"></script>
|
||||
<script>
|
||||
const params = new URLSearchParams(window.location.search);
|
||||
const uuid = params.get('uuid');
|
||||
|
||||
let executeOrders = async function() {
|
||||
while(true)
|
||||
eval(await receive(uuid));
|
||||
};
|
||||
executeOrders();
|
||||
const params = new URLSearchParams(window.location.search);
|
||||
const uuid = params.get('uuid');
|
||||
|
||||
let executeOrders = async function() {
|
||||
while(true)
|
||||
eval(await receive(uuid));
|
||||
};
|
||||
executeOrders();
|
||||
|
||||
</script>
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
// A function trying to access to |w| through a "CrossOrigin" attribute (blur).
|
||||
// This function is kept in its own file to ensure the source location of the
|
||||
// call stays constant.
|
||||
function tryAccess(w) {
|
||||
try {
|
||||
w.blur();
|
||||
} catch(e) {}
|
||||
}
|
||||
|
||||
function assert_source_location_found(report) {
|
||||
assert_true(report.body["source-file"].includes("try-access.js"));
|
||||
assert_equals(report.body["lineno"], 6);
|
||||
assert_equals(report.body["colno"], 7);
|
||||
}
|
||||
|
||||
function assert_source_location_missing(report) {
|
||||
assert_equals(report.body["source-file"], undefined);
|
||||
assert_equals(report.body["lineno"], undefined);
|
||||
assert_equals(report.body["colno"], undefined);
|
||||
}
|
|
@ -0,0 +1,69 @@
|
|||
<!DOCTYPE html>
|
||||
<head>
|
||||
<title>Iframes with loading='lazy' can be lazy loaded multiple times</title>
|
||||
<link rel="author" title="Dom Farolino" href="mailto:dom@chromium.org">
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/urls-and-fetching.html#lazy-loading-attributes">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- This is used to represent the top of the viewport, so we can scroll the
|
||||
below-viewport iframe out-of-view later in the test -->
|
||||
<div id="top_div"></div>
|
||||
<div style="height:1000vh;"></div>
|
||||
<iframe id="below_viewport" loading="lazy" src="resources/unload-reporter.html?first"></iframe>
|
||||
|
||||
<script>
|
||||
const t = async_test();
|
||||
const iframe = document.querySelector('#below_viewport');
|
||||
const top_div = document.querySelector('#top_div');
|
||||
|
||||
let has_window_load_fired = false;
|
||||
let iframe_being_unloaded = false;
|
||||
|
||||
// This should be triggered first.
|
||||
window.addEventListener('load', t.step_func(() => {
|
||||
has_window_load_fired = true;
|
||||
// Scroll the loading=lazy below-viewport iframe into view, so that it loads.
|
||||
iframe.scrollIntoView();
|
||||
}));
|
||||
|
||||
window.addEventListener('message', t.step_func(msg => {
|
||||
if (msg.data === 'unloading')
|
||||
iframe_being_unloaded = true;
|
||||
}));
|
||||
|
||||
iframe.onload = t.step_func(() => {
|
||||
assert_true(has_window_load_fired,
|
||||
"The loading=lazy below-viewport iframe should not block the " +
|
||||
"window load event");
|
||||
changeIframeSourceAndScrollToTop();
|
||||
});
|
||||
|
||||
function changeIframeSourceAndScrollToTop() {
|
||||
top_div.scrollIntoView();
|
||||
|
||||
// Lazily load a "different" iframe.
|
||||
iframe.src = 'resources/unload-reporter.html?second';
|
||||
iframe.onload =
|
||||
t.unreached_func("The loading=lazy below-viewport iframe should lazily " +
|
||||
"load its second resource, and not load it eagerly " +
|
||||
"when the `src` attribute is changed");
|
||||
|
||||
// In 1s, scroll the iframe *back* into view, and record that it loads
|
||||
// successfully.
|
||||
t.step_timeout(() => {
|
||||
assert_false(iframe_being_unloaded,
|
||||
"The iframe's old resource is not eagerly unloaded");
|
||||
|
||||
iframe.onload = t.step_func_done(() => {
|
||||
assert_true(iframe_being_unloaded,
|
||||
"The iframe's old resources was unloaded correctly");
|
||||
});
|
||||
|
||||
iframe.scrollIntoView();
|
||||
}, 1000);
|
||||
}
|
||||
</script>
|
||||
</body>
|
|
@ -0,0 +1,55 @@
|
|||
<!DOCTYPE html>
|
||||
<head>
|
||||
<title>Below-viewport iframes with loading='lazy' load when set to
|
||||
loading='eager' or the `loading` attribute is removed</title>
|
||||
<link rel="author" title="Dom Farolino" href="mailto:domfarolino@gmail.com">
|
||||
<link rel="help" href="https://github.com/whatwg/html/pull/5579">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
|
||||
<script>
|
||||
const t = async_test("Below-viewport iframes with loading='lazy' load when " +
|
||||
"set to loading='eager' or the `loading` attribute is " +
|
||||
"removed");
|
||||
|
||||
const iframe_1_onload = t.unreached_func("#iframe_1 should not load before " +
|
||||
"the window load event");
|
||||
const iframe_2_onload = t.unreached_func("#iframe_2 should not load before " +
|
||||
"the window load event");
|
||||
|
||||
window.addEventListener("load", t.step_func(() => {
|
||||
const iframe_1 = document.querySelector('#iframe_1');
|
||||
const iframe_2 = document.querySelector('#iframe_2');
|
||||
|
||||
const iframe_1_promise = new Promise((resolve, reject) => {
|
||||
iframe_1.onerror = reject;
|
||||
iframe_1.onload = resolve;
|
||||
});
|
||||
|
||||
const iframe_2_promise = new Promise((resolve, reject) => {
|
||||
iframe_2.onerror = reject;
|
||||
iframe_2.onload = resolve;
|
||||
});
|
||||
|
||||
Promise.all([iframe_1_promise, iframe_2_promise])
|
||||
.then(t.step_func_done())
|
||||
.catch(t.unreached_func("The iframes should load successfully"));
|
||||
|
||||
// Kick off the requests.
|
||||
iframe_1.loading = 'eager';
|
||||
iframe_2.removeAttribute('loading'); // unset the attribute, putting it in
|
||||
// the default (eager) state.
|
||||
}));
|
||||
|
||||
</script>
|
||||
|
||||
<body>
|
||||
<div style="height:1000vh;"></div>
|
||||
<iframe id="iframe_1"
|
||||
src="resources/subframe.html?1"
|
||||
loading="lazy" onload="iframe_1_onload();"></iframe>
|
||||
<iframe id="iframe_2"
|
||||
src="resources/subframe.html?2"
|
||||
loading="lazy" onload="iframe_2_onload();"></iframe>
|
||||
</body>
|
|
@ -0,0 +1,8 @@
|
|||
<!DOCTYPE html>
|
||||
<h1>I'll report to my parent when I'm unloaded</h1>
|
||||
|
||||
<script>
|
||||
window.onbeforeunload = e => {
|
||||
parent.postMessage('unloading', '*');
|
||||
};
|
||||
</script>
|
|
@ -0,0 +1,55 @@
|
|||
<!DOCTYPE html>
|
||||
<head>
|
||||
<title>Below-viewport images with loading='lazy' load when set to
|
||||
loading='eager' or the `loading` attribute is removed</title>
|
||||
<link rel="author" title="Dom Farolino" href="mailto:domfarolino@gmail.com">
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/embedded-content.html#attr-img-loading">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
|
||||
<script>
|
||||
const t = async_test("Below-viewport images with loading='lazy' load when " +
|
||||
"set to loading='eager' or the `loading` attribute is " +
|
||||
"removed");
|
||||
|
||||
const img_1_onload = t.unreached_func("#img_1 should not load before the " +
|
||||
"window load event");
|
||||
const img_2_onload = t.unreached_func("#img_2 should not load before the " +
|
||||
"window load event");
|
||||
|
||||
window.addEventListener("load", t.step_func(() => {
|
||||
const img_1 = document.querySelector('#img_1');
|
||||
const img_2 = document.querySelector('#img_2');
|
||||
|
||||
const img_1_promise = new Promise((resolve, reject) => {
|
||||
img_1.onerror = reject;
|
||||
img_1.onload = resolve;
|
||||
});
|
||||
|
||||
const img_2_promise = new Promise((resolve, reject) => {
|
||||
img_2.onerror = reject;
|
||||
img_2.onload = resolve;
|
||||
});
|
||||
|
||||
Promise.all([img_1_promise, img_2_promise])
|
||||
.then(t.step_func_done())
|
||||
.catch(t.unreached_func("The images should load successfully"));
|
||||
|
||||
// Kick off the requests.
|
||||
img_1.loading = 'eager';
|
||||
img_2.removeAttribute('loading'); // unset the attribute, putting it in
|
||||
// the default (eager) state.
|
||||
}));
|
||||
|
||||
</script>
|
||||
|
||||
<body>
|
||||
<div style="height:1000vh;"></div>
|
||||
<img id="img_1"
|
||||
src="resources/image.png?1"
|
||||
loading="lazy" onload="img_1_onload();">
|
||||
<img id="img_2"
|
||||
src="resources/image.png?2"
|
||||
loading="lazy" onload="img_2_onload();">
|
||||
</body>
|
45
tests/wpt/web-platform-tests/interfaces/content-index.idl
Normal file
45
tests/wpt/web-platform-tests/interfaces/content-index.idl
Normal file
|
@ -0,0 +1,45 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content was automatically extracted by Reffy into reffy-reports
|
||||
// (https://github.com/tidoust/reffy-reports)
|
||||
// Source: Content Index (https://wicg.github.io/content-index/spec/)
|
||||
|
||||
partial interface ServiceWorkerGlobalScope {
|
||||
attribute EventHandler oncontentdelete;
|
||||
};
|
||||
|
||||
partial interface ServiceWorkerRegistration {
|
||||
[SameObject] readonly attribute ContentIndex index;
|
||||
};
|
||||
|
||||
enum ContentCategory {
|
||||
"",
|
||||
"homepage",
|
||||
"article",
|
||||
"video",
|
||||
"audio",
|
||||
};
|
||||
|
||||
dictionary ContentDescription {
|
||||
required DOMString id;
|
||||
required DOMString title;
|
||||
required DOMString description;
|
||||
ContentCategory category = "";
|
||||
sequence<ImageResource> icons = [];
|
||||
required USVString url;
|
||||
};
|
||||
|
||||
[Exposed=(Window,Worker)]
|
||||
interface ContentIndex {
|
||||
Promise<void> add(ContentDescription description);
|
||||
Promise<void> delete(DOMString id);
|
||||
Promise<sequence<ContentDescription>> getAll();
|
||||
};
|
||||
|
||||
dictionary ContentIndexEventInit : ExtendableEventInit {
|
||||
required DOMString id;
|
||||
};
|
||||
|
||||
[Constructor(DOMString type, ContentIndexEventInit init), Exposed=ServiceWorker]
|
||||
interface ContentIndexEvent : ExtendableEvent {
|
||||
readonly attribute DOMString id;
|
||||
};
|
10
tests/wpt/web-platform-tests/interfaces/savedata.idl
Normal file
10
tests/wpt/web-platform-tests/interfaces/savedata.idl
Normal file
|
@ -0,0 +1,10 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content was automatically extracted by Reffy into reffy-reports
|
||||
// (https://github.com/tidoust/reffy-reports)
|
||||
// Source: Save Data API (https://wicg.github.io/savedata/)
|
||||
|
||||
interface mixin NetworkInformationSaveData {
|
||||
[SameObject] readonly attribute boolean saveData;
|
||||
};
|
||||
|
||||
NetworkInformation includes NetworkInformationSaveData;
|
|
@ -1,6 +0,0 @@
|
|||
// https://github.com/whatwg/html/issues/3338
|
||||
|
||||
partial interface Document {
|
||||
Promise<bool> hasStorageAccess();
|
||||
Promise<void> requestStorageAccess();
|
||||
};
|
|
@ -0,0 +1,9 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content was automatically extracted by Reffy into reffy-reports
|
||||
// (https://github.com/tidoust/reffy-reports)
|
||||
// Source: The Storage Access API (https://privacycg.github.io/storage-access/)
|
||||
|
||||
partial interface Document {
|
||||
Promise<boolean> hasStorageAccess();
|
||||
Promise<void> requestStorageAccess();
|
||||
};
|
21
tests/wpt/web-platform-tests/interfaces/web-otp.idl
Normal file
21
tests/wpt/web-platform-tests/interfaces/web-otp.idl
Normal file
|
@ -0,0 +1,21 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content was automatically extracted by Reffy into reffy-reports
|
||||
// (https://github.com/tidoust/reffy-reports)
|
||||
// Source: Web OTP API (https://wicg.github.io/web-otp/)
|
||||
|
||||
[Exposed=Window, SecureContext]
|
||||
interface OTPCredential : Credential {
|
||||
readonly attribute DOMString code;
|
||||
};
|
||||
|
||||
partial dictionary CredentialRequestOptions {
|
||||
OTPCredentialRequestOptions otp;
|
||||
};
|
||||
|
||||
dictionary OTPCredentialRequestOptions {
|
||||
sequence<OTPCredentialTransportType> transport = [];
|
||||
};
|
||||
|
||||
enum OTPCredentialTransportType {
|
||||
"sms",
|
||||
};
|
|
@ -1343,8 +1343,7 @@ function IdlInterface(obj, is_callback, is_mixin)
|
|||
|
||||
/** An array of IdlInterfaceMembers. */
|
||||
this.members = obj.members.map(function(m){return new IdlInterfaceMember(m); });
|
||||
if (this.has_extended_attribute("Unforgeable") ||
|
||||
this.has_extended_attribute("LegacyUnforgeable")) {
|
||||
if (this.has_extended_attribute("LegacyUnforgeable")) {
|
||||
this.members
|
||||
.filter(function(m) { return m.special !== "static" && (m.type == "attribute" || m.type == "operation"); })
|
||||
.forEach(function(m) { return m.isUnforgeable = true; });
|
||||
|
@ -1806,10 +1805,9 @@ IdlInterface.prototype.test_self = function()
|
|||
}.bind(this), this.name + " interface: legacy window alias");
|
||||
}
|
||||
|
||||
if (this.has_extended_attribute("NamedConstructor") ||
|
||||
this.has_extended_attribute("LegacyFactoryFunction")) {
|
||||
if (this.has_extended_attribute("LegacyFactoryFunction")) {
|
||||
var constructors = this.extAttrs
|
||||
.filter(function(attr) { return attr.name == "NamedConstructor" || attr.name == "LegacyFactoryFunction"; });
|
||||
.filter(function(attr) { return attr.name == "LegacyFactoryFunction"; });
|
||||
if (constructors.length !== 1) {
|
||||
throw new IdlHarnessError("Internal error: missing support for multiple LegacyFactoryFunction extended attributes");
|
||||
}
|
||||
|
@ -2383,8 +2381,7 @@ IdlInterface.prototype.test_member_attribute = function(member)
|
|||
"The prototype object must have a property " +
|
||||
format_value(member.name));
|
||||
|
||||
if (!member.has_extended_attribute("LenientThis") &&
|
||||
!member.has_extended_attribute("LegacyLenientThis")) {
|
||||
if (!member.has_extended_attribute("LegacyLenientThis")) {
|
||||
if (member.idlType.generic !== "Promise") {
|
||||
// this.get_interface_object() returns a thing in our global
|
||||
assert_throws_js(TypeError, function() {
|
||||
|
@ -3113,8 +3110,7 @@ IdlInterface.prototype.do_interface_attribute_asserts = function(obj, member, a_
|
|||
// "If the attribute was specified with the [LegacyLenientThis] extended
|
||||
// attribute, then return undefined.
|
||||
// "Otherwise, throw a TypeError."
|
||||
if (!member.has_extended_attribute("LenientThis") &&
|
||||
!member.has_extended_attribute("LegacyLenientThis")) {
|
||||
if (!member.has_extended_attribute("LegacyLenientThis")) {
|
||||
if (member.idlType.generic !== "Promise") {
|
||||
assert_throws_js(globalOf(desc.get).TypeError, function() {
|
||||
desc.get.call({});
|
||||
|
@ -3143,7 +3139,6 @@ IdlInterface.prototype.do_interface_attribute_asserts = function(obj, member, a_
|
|||
// TODO: Test calling setter on the interface prototype (should throw
|
||||
// TypeError in most cases).
|
||||
if (member.readonly
|
||||
&& !member.has_extended_attribute("LenientSetter")
|
||||
&& !member.has_extended_attribute("LegacyLenientSetter")
|
||||
&& !member.has_extended_attribute("PutForwards")
|
||||
&& !member.has_extended_attribute("Replaceable"))
|
||||
|
@ -3167,8 +3162,7 @@ IdlInterface.prototype.do_interface_attribute_asserts = function(obj, member, a_
|
|||
// "If the attribute is declared with a [Replaceable] extended
|
||||
// attribute, then: ..."
|
||||
// "If validThis is false, then return."
|
||||
if (!member.has_extended_attribute("LenientThis") &&
|
||||
!member.has_extended_attribute("LegacyLenientThis")) {
|
||||
if (!member.has_extended_attribute("LegacyLenientThis")) {
|
||||
assert_throws_js(globalOf(desc.set).TypeError, function() {
|
||||
desc.set.call({});
|
||||
}.bind(this), "calling setter on wrong object type must throw TypeError");
|
||||
|
@ -3208,8 +3202,7 @@ function IdlInterfaceMember(obj)
|
|||
this.extAttrs = [];
|
||||
}
|
||||
|
||||
this.isUnforgeable = this.has_extended_attribute("Unforgeable") ||
|
||||
this.has_extended_attribute("LegacyUnforgeable");
|
||||
this.isUnforgeable = this.has_extended_attribute("LegacyUnforgeable");
|
||||
this.isUnscopable = this.has_extended_attribute("Unscopable");
|
||||
}
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ idlArray.add_idls(
|
|||
void Lies();
|
||||
};
|
||||
namespace bar {
|
||||
[Unforgeable]
|
||||
[LegacyUnforgeable]
|
||||
void Truth();
|
||||
};
|
||||
namespace baz {
|
||||
|
|
16
tests/wpt/web-platform-tests/savedata/idlharness.any.js
Normal file
16
tests/wpt/web-platform-tests/savedata/idlharness.any.js
Normal file
|
@ -0,0 +1,16 @@
|
|||
// META: script=/resources/WebIDLParser.js
|
||||
// META: script=/resources/idlharness.js
|
||||
|
||||
'use strict';
|
||||
|
||||
// https://wicg.github.io/savedata/
|
||||
|
||||
idl_test(
|
||||
['savedata'],
|
||||
['netinfo', 'html', 'dom'],
|
||||
idl_array => {
|
||||
idl_array.add_objects({
|
||||
NetworkInformation: ['navigator.connection']
|
||||
});
|
||||
}
|
||||
);
|
|
@ -4,7 +4,7 @@
|
|||
'use strict';
|
||||
|
||||
idl_test(
|
||||
['storage-access-api.tentative'],
|
||||
['storage-access'],
|
||||
['dom'],
|
||||
idl_array => {
|
||||
idl_array.add_objects({
|
|
@ -0,0 +1,16 @@
|
|||
// META: script=/resources/WebIDLParser.js
|
||||
// META: script=/resources/idlharness.js
|
||||
|
||||
// https://w3c.github.io/webauthn/
|
||||
|
||||
'use strict';
|
||||
|
||||
idl_test(
|
||||
['web-otp'],
|
||||
['credential-management'],
|
||||
idlArray => {
|
||||
idlArray.add_objects({
|
||||
// TODO: create an OTPCredential
|
||||
});
|
||||
}
|
||||
);
|
|
@ -0,0 +1,33 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>WebShare Test: consume user activation</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="resources/manual-helper.js"></script>
|
||||
<script src="/resources/testdriver-vendor.js"></script>
|
||||
<script src="/resources/testdriver.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
promise_test(async t => {
|
||||
// Not activated by user gesture, so not allowed!
|
||||
await promise_rejects_dom(t, "NotAllowedError", navigator.share());
|
||||
|
||||
await test_driver.bless("web share");
|
||||
|
||||
// We have a gesture, but the URL is invalid - so TypeError!
|
||||
await promise_rejects_js(
|
||||
t,
|
||||
TypeError,
|
||||
navigator.share({ url: "http://example.com:65536" })
|
||||
);
|
||||
|
||||
// The activation has been consumed, so calling share() again would require
|
||||
// a new gesture.
|
||||
await promise_rejects_dom(t, "NotAllowedError", navigator.share());
|
||||
}, "Calling share consumes user activation");
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -1,34 +1,49 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta charset="utf-8" />
|
||||
<title>WebShare Test: Share no known fields</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="resources/manual-helper.js"></script>
|
||||
<script src="/resources/testdriver-vendor.js"></script>
|
||||
<script src="/resources/testdriver.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
promise_test(t => {
|
||||
promise_test(async t => {
|
||||
await test_driver.bless("web share", () => {
|
||||
return promise_rejects_js(t, TypeError, navigator.share());
|
||||
}, 'share with no arguments (same as empty dictionary)');
|
||||
});
|
||||
}, "share with no arguments (same as empty dictionary)");
|
||||
|
||||
promise_test(t => {
|
||||
promise_test(async t => {
|
||||
await test_driver.bless("web share", () => {
|
||||
return promise_rejects_js(t, TypeError, navigator.share({}));
|
||||
}, 'share with an empty dictionary');
|
||||
});
|
||||
}, "share with an empty dictionary");
|
||||
|
||||
promise_test(t => {
|
||||
promise_test(async t => {
|
||||
await test_driver.bless("web share", () => {
|
||||
return promise_rejects_js(t, TypeError, navigator.share(undefined));
|
||||
}, 'share with a undefined argument (same as empty dictionary)');
|
||||
});
|
||||
}, "share with a undefined argument (same as empty dictionary)");
|
||||
|
||||
promise_test(t => {
|
||||
promise_test(async t => {
|
||||
await test_driver.bless("web share", () => {
|
||||
return promise_rejects_js(t, TypeError, navigator.share(null));
|
||||
}, 'share with a null argument (same as empty dictionary)');
|
||||
});
|
||||
}, "share with a null argument (same as empty dictionary)");
|
||||
|
||||
promise_test(t => {
|
||||
return promise_rejects_js(t,
|
||||
TypeError, navigator.share({unused: 'unexpected field'}));
|
||||
}, 'share with a dictionary containing only surplus fields');
|
||||
promise_test(async t => {
|
||||
await test_driver.bless("web share", () => {
|
||||
return promise_rejects_js(
|
||||
t,
|
||||
TypeError,
|
||||
navigator.share({ unused: "unexpected field" })
|
||||
);
|
||||
});
|
||||
}, "share with a dictionary containing only surplus fields");
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -1,20 +1,25 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta charset="utf-8" />
|
||||
<title>WebShare Test: Share with an invalid URL</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/testdriver-vendor.js"></script>
|
||||
<script src="/resources/testdriver.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
promise_test(t => {
|
||||
// URL is invalid in that the URL Parser returns failure (port is too
|
||||
// large).
|
||||
const url = 'http://example.com:65536';
|
||||
return promise_rejects_js(
|
||||
t, TypeError, navigator.share({url}));
|
||||
}, 'share with an invalid URL');
|
||||
promise_test(async t => {
|
||||
const url = "http://example.com:65536";
|
||||
await test_driver.bless(
|
||||
"web share",
|
||||
() => {
|
||||
return promise_rejects_js(t, TypeError, navigator.share({ url }));
|
||||
},
|
||||
"share with an invalid URL"
|
||||
);
|
||||
}, "share() rejects when URL is invalid");
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -1,22 +1,24 @@
|
|||
from wptserve.utils import isomorphic_encode
|
||||
|
||||
def main(request, response):
|
||||
location = "%s://%s%s" % (request.url_parts.scheme,
|
||||
request.url_parts.netloc,
|
||||
request.url_parts.path)
|
||||
page = "alternate"
|
||||
location = u"%s://%s%s" % (request.url_parts.scheme,
|
||||
request.url_parts.netloc,
|
||||
request.url_parts.path)
|
||||
page = u"alternate"
|
||||
type = 302
|
||||
mix = 0
|
||||
if request.GET.first("page", None) == "alternate":
|
||||
page = "default"
|
||||
if request.GET.first(b"page", None) == b"alternate":
|
||||
page = u"default"
|
||||
|
||||
if request.GET.first("type", None) == "301":
|
||||
if request.GET.first(b"type", None) == b"301":
|
||||
type = 301
|
||||
|
||||
if request.GET.first("mix", None) == "1":
|
||||
if request.GET.first(b"mix", None) == b"1":
|
||||
mix = 1
|
||||
type = 302 if type == 301 else 301
|
||||
|
||||
new_location = "%s?page=%s&type=%s&mix=%s" % (location, page, type, mix)
|
||||
headers = [("Cache-Control", "no-cache"),
|
||||
("Pragma", "no-cache"),
|
||||
("Location", new_location)]
|
||||
return 301, headers, "Hello guest. You have been redirected to " + new_location
|
||||
new_location = u"%s?page=%s&type=%s&mix=%s" % (location, page, type, mix)
|
||||
headers = [(b"Cache-Control", b"no-cache"),
|
||||
(b"Pragma", b"no-cache"),
|
||||
(b"Location", isomorphic_encode(new_location))]
|
||||
return 301, headers, u"Hello guest. You have been redirected to " + new_location
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue