Update web-platform-tests to revision fa5f0edd48aca7acfa7d35f1be31cb0dd65817c6

This commit is contained in:
WPT Sync Bot 2020-06-25 08:21:34 +00:00
parent 6659e9004d
commit a4cebda3db
110 changed files with 1473 additions and 526 deletions

View file

@ -1,4 +1,4 @@
[hit-test-floats-004.html]
[hit-test-floats-003.html]
[Miss float below something else]
expected: FAIL

View file

@ -0,0 +1,2 @@
[border-image-shorthand-001.htm]
expected: FAIL

View file

@ -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

View file

@ -2,6 +2,3 @@
[Hit test intersecting scaled box]
expected: FAIL
[Hit test within unscaled box]
expected: FAIL

View file

@ -2,6 +2,3 @@
[elementsFromPoint on the root document for points in iframe elements]
expected: FAIL
[elementsFromPoint on inner documents]
expected: FAIL

View file

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

View file

@ -1,7 +0,0 @@
[offsetTopLeft-border-box.html]
[container: 1]
expected: FAIL
[container: 0]
expected: FAIL

View file

@ -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

View file

@ -56,3 +56,6 @@
[separate text/javascript x/x]
expected: FAIL
[separate text/javascript error]
expected: FAIL

View file

@ -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

View file

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

View file

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

View file

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

View file

@ -1,2 +0,0 @@
[cross-origin-objects-on-new-window.html]
expected: TIMEOUT

View file

@ -1,4 +1,5 @@
[embedded-opener-remove-frame.html]
expected: CRASH
[opener of discarded nested browsing context]
expected: FAIL

View file

@ -0,0 +1,4 @@
[frameElement-siblings.sub.html]
[it must give a "SecurityError" DOMException if the pages are different-origin domain]
expected: FAIL

View file

@ -0,0 +1,4 @@
[iframe-loading-lazy-multiple-times.tentative.html]
[Iframes with loading='lazy' can be lazy loaded multiple times]
expected: FAIL

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

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

View file

@ -1,4 +1,5 @@
[003.html]
expected: ERROR
[shared]
expected: FAIL

View file

@ -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",
[

View file

@ -1,4 +1,4 @@
[hit-test-floats-004.html]
[hit-test-floats-003.html]
[Miss float below something else]
expected: FAIL

View file

@ -0,0 +1,2 @@
[border-image-shorthand-001.htm]
expected: FAIL

View file

@ -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

View file

@ -2,6 +2,3 @@
[Hit test intersecting scaled box]
expected: FAIL
[Hit test within unscaled box]
expected: FAIL

View file

@ -2,6 +2,3 @@
[elementsFromPoint on the root document for points in iframe elements]
expected: FAIL
[elementsFromPoint on inner documents]
expected: FAIL

View file

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

View file

@ -1,7 +0,0 @@
[offsetTopLeft-border-box.html]
[container: 1]
expected: FAIL
[container: 0]
expected: FAIL

View file

@ -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

View file

@ -56,3 +56,6 @@
[separate text/javascript x/x]
expected: FAIL
[separate text/javascript error]
expected: FAIL

View file

@ -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

View file

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

View file

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

View file

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

View file

@ -1,2 +0,0 @@
[cross-origin-objects-on-new-window.html]
expected: TIMEOUT

View file

@ -1,4 +1,5 @@
[embedded-opener-remove-frame.html]
expected: CRASH
[opener and "removed" embedded documents]
expected: FAIL

View file

@ -0,0 +1,4 @@
[frameElement-siblings.sub.html]
[it must give a "SecurityError" DOMException if the pages are different-origin domain]
expected: FAIL

View file

@ -0,0 +1,4 @@
[iframe-loading-lazy-multiple-times.tentative.html]
[Iframes with loading='lazy' can be lazy loaded multiple times]
expected: FAIL

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

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

View file

@ -1,5 +1,6 @@
[003.html]
type: testharness
expected: ERROR
[shared]
expected: FAIL

View file

@ -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"})'],
});
}
}
);

View file

@ -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>

View file

@ -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

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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);
}

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View 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;
};

View 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;

View file

@ -1,6 +0,0 @@
// https://github.com/whatwg/html/issues/3338
partial interface Document {
Promise<bool> hasStorageAccess();
Promise<void> requestStorageAccess();
};

View file

@ -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();
};

View 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",
};

View file

@ -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");
}

View file

@ -45,7 +45,7 @@ idlArray.add_idls(
void Lies();
};
namespace bar {
[Unforgeable]
[LegacyUnforgeable]
void Truth();
};
namespace baz {

View 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']
});
}
);

View file

@ -4,7 +4,7 @@
'use strict';
idl_test(
['storage-access-api.tentative'],
['storage-access'],
['dom'],
idl_array => {
idl_array.add_objects({

View file

@ -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
});
}
);

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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