Update web-platform-tests to revision 4adce83d1f2b08fa2e92427c4687d0cf535aee53

This commit is contained in:
WPT Sync Bot 2019-01-08 20:47:25 -05:00
parent d3763452b5
commit 3e4ec1724a
102 changed files with 3019 additions and 1309 deletions

View file

@ -14,6 +14,9 @@
[Revoke blob URL after creating Request, will fetch]
expected: FAIL
[Revoke blob URL after calling fetch, fetch should succeed]
expected: FAIL
[url-with-fetch.any.html]
[Untitled]

View file

@ -104515,6 +104515,18 @@
{}
]
],
"css/css-backgrounds/background-image-first-line.html": [
[
"/css/css-backgrounds/background-image-first-line.html",
[
[
"/css/css-backgrounds/reference/background-image-first-line-ref.html",
"=="
]
],
{}
]
],
"css/css-backgrounds/background-image-none-gradient-repaint.html": [
[
"/css/css-backgrounds/background-image-none-gradient-repaint.html",
@ -125499,6 +125511,18 @@
{}
]
],
"css/css-lists/add-inline-child-after-marker-001.html": [
[
"/css/css-lists/add-inline-child-after-marker-001.html",
[
[
"/css/css-lists/add-inline-child-after-marker-001-ref.html",
"=="
]
],
{}
]
],
"css/css-lists/content-property/marker-text-matches-armenian.html": [
[
"/css/css-lists/content-property/marker-text-matches-armenian.html",
@ -125715,6 +125739,66 @@
{}
]
],
"css/css-lists/li-with-overflow-hidden-change-list-style-position-001.html": [
[
"/css/css-lists/li-with-overflow-hidden-change-list-style-position-001.html",
[
[
"/css/css-lists/li-with-overflow-hidden-change-list-style-position-001-ref.html",
"=="
]
],
{}
]
],
"css/css-lists/list-and-flex-001.html": [
[
"/css/css-lists/list-and-flex-001.html",
[
[
"/css/css-lists/list-and-flex-001-ref.html",
"=="
]
],
{}
]
],
"css/css-lists/list-and-grid-001.html": [
[
"/css/css-lists/list-and-grid-001.html",
[
[
"/css/css-lists/list-and-grid-001-ref.html",
"=="
]
],
{}
]
],
"css/css-lists/list-marker-with-lineheight-and-overflow-hidden-001.html": [
[
"/css/css-lists/list-marker-with-lineheight-and-overflow-hidden-001.html",
[
[
"/css/css-lists/list-marker-with-lineheight-and-overflow-hidden-001-ref.html",
"=="
]
],
{}
]
],
"css/css-lists/list-with-image-display-changed-001.html": [
[
"/css/css-lists/list-with-image-display-changed-001.html",
[
[
"/css/css-lists/list-with-image-display-changed-001-ref.html",
"=="
]
],
{}
]
],
"css/css-logical/cascading-001.html": [
[
"/css/css-logical/cascading-001.html",
@ -127107,6 +127191,18 @@
{}
]
],
"css/css-masking/clip-path/clip-path-fixed-nested.html": [
[
"/css/css-masking/clip-path/clip-path-fixed-nested.html",
[
[
"/css/css-masking/clip-path/clip-path-fixed-nested-ref.html",
"=="
]
],
{}
]
],
"css/css-masking/clip-path/clip-path-inline-001.html": [
[
"/css/css-masking/clip-path/clip-path-inline-001.html",
@ -253152,6 +253248,11 @@
{}
]
],
"css/css-backgrounds/reference/background-image-first-line-ref.html": [
[
{}
]
],
"css/css-backgrounds/reference/background-origin-002-ref.html": [
[
{}
@ -265402,6 +265503,11 @@
{}
]
],
"css/css-lists/add-inline-child-after-marker-001-ref.html": [
[
{}
]
],
"css/css-lists/content-property/marker-text-matches-armenian-ref.html": [
[
{}
@ -265472,6 +265578,36 @@
{}
]
],
"css/css-lists/li-with-overflow-hidden-change-list-style-position-001-ref.html": [
[
{}
]
],
"css/css-lists/list-and-flex-001-ref.html": [
[
{}
]
],
"css/css-lists/list-and-grid-001-ref.html": [
[
{}
]
],
"css/css-lists/list-marker-with-lineheight-and-overflow-hidden-001-ref.html": [
[
{}
]
],
"css/css-lists/list-with-image-display-changed-001-ref.html": [
[
{}
]
],
"css/css-lists/resources/white.gif": [
[
{}
]
],
"css/css-logical/META.yml": [
[
{}
@ -265632,6 +265768,11 @@
{}
]
],
"css/css-masking/clip-path/clip-path-fixed-nested-ref.html": [
[
{}
]
],
"css/css-masking/clip-path/reference/clip-path-circle-2-ref.html": [
[
{}
@ -297692,6 +297833,11 @@
{}
]
],
"html/semantics/forms/form-submission-0/resources/targetted-form.js": [
[
{}
]
],
"html/semantics/forms/form-submission-target/form-target-iframe-helper.py": [
[
{}
@ -307212,6 +307358,16 @@
{}
]
],
"resources/chromium/big_buffer.mojom.js": [
[
{}
]
],
"resources/chromium/big_buffer.mojom.js.headers": [
[
{}
]
],
"resources/chromium/device.mojom.js": [
[
{}
@ -307222,12 +307378,22 @@
{}
]
],
"resources/chromium/device_manager.mojom.js": [
"resources/chromium/device_enumeration_options.mojom.js": [
[
{}
]
],
"resources/chromium/device_manager.mojom.js.headers": [
"resources/chromium/device_enumeration_options.mojom.js.headers": [
[
{}
]
],
"resources/chromium/device_manager_client.mojom.js": [
[
{}
]
],
"resources/chromium/device_manager_client.mojom.js.headers": [
[
{}
]
@ -344165,6 +344331,24 @@
{}
]
],
"css/css-lists/list-and-block-textarea-001.html": [
[
"/css/css-lists/list-and-block-textarea-001.html",
{}
]
],
"css/css-lists/list-and-margin-collapse-001.html": [
[
"/css/css-lists/list-and-margin-collapse-001.html",
{}
]
],
"css/css-lists/list-and-writing-mode-001.html": [
[
"/css/css-lists/list-and-writing-mode-001.html",
{}
]
],
"css/css-logical/animation-001.html": [
[
"/css/css-logical/animation-001.html",
@ -344867,6 +345051,12 @@
{}
]
],
"css/css-position/position-absolute-in-inline-crash.html": [
[
"/css/css-position/position-absolute-in-inline-crash.html",
{}
]
],
"css/css-position/position-sticky-bottom.html": [
[
"/css/css-position/position-sticky-bottom.html",
@ -345329,6 +345519,12 @@
{}
]
],
"css/css-scroll-anchoring/exclude-inline.html": [
[
"/css/css-scroll-anchoring/exclude-inline.html",
{}
]
],
"css/css-scroll-anchoring/inheritance.html": [
[
"/css/css-scroll-anchoring/inheritance.html",
@ -367287,6 +367483,14 @@
}
]
],
"fetch/http-cache/post-patch.html": [
[
"/fetch/http-cache/post-patch.html",
{
"timeout": "long"
}
]
],
"fetch/http-cache/status.html": [
[
"/fetch/http-cache/status.html",
@ -371087,6 +371291,12 @@
{}
]
],
"html/rendering/non-replaced-elements/tables/table-attribute.html": [
[
"/html/rendering/non-replaced-elements/tables/table-attribute.html",
{}
]
],
"html/rendering/non-replaced-elements/tables/table-vspace-hspace-s.html": [
[
"/html/rendering/non-replaced-elements/tables/table-vspace-hspace-s.html",
@ -375025,6 +375235,12 @@
{}
]
],
"html/semantics/forms/form-submission-0/FormDataEvent.window.js": [
[
"/html/semantics/forms/form-submission-0/FormDataEvent.window.html",
{}
]
],
"html/semantics/forms/form-submission-0/constructing-form-data-set.html": [
[
"/html/semantics/forms/form-submission-0/constructing-form-data-set.html",
@ -375043,6 +375259,12 @@
{}
]
],
"html/semantics/forms/form-submission-0/form-submission-algorithm.html": [
[
"/html/semantics/forms/form-submission-0/form-submission-algorithm.html",
{}
]
],
"html/semantics/forms/form-submission-0/getactionurl.html": [
[
"/html/semantics/forms/form-submission-0/getactionurl.html",
@ -411937,6 +412159,12 @@
{}
]
],
"svg/animations/scripted/end-element-on-inactive-element.svg": [
[
"/svg/animations/scripted/end-element-on-inactive-element.svg",
{}
]
],
"svg/extensibility/foreignObject/containing-block.html": [
[
"/svg/extensibility/foreignObject/containing-block.html",
@ -417645,6 +417873,12 @@
{}
]
],
"webrtc/RTCDtlsTransport-state.html": [
[
"/webrtc/RTCDtlsTransport-state.html",
{}
]
],
"webrtc/RTCIceCandidate-constructor.html": [
[
"/webrtc/RTCIceCandidate-constructor.html",
@ -455735,7 +455969,7 @@
"testharness"
],
"bluetooth/resources/bluetooth-helpers.js": [
"c01fc9fcf168056b319c18ca40a92df73665b12a",
"83643232ae5f5c86b7d180b52c681bef57e27ece",
"support"
],
"bluetooth/resources/bluetooth-scanning-helpers.js": [
@ -476875,7 +477109,7 @@
"testharness"
],
"content-security-policy/unsafe-hashes/javascript_src_allowed-href_blank.html": [
"30d05ee04f5cda2de1b8fcc577872a7f639cb95e",
"d1c2b38f247a0a11ecff8ead40eff2152545f461",
"testharness"
],
"content-security-policy/unsafe-hashes/javascript_src_allowed-window_location.html": [
@ -540502,6 +540736,10 @@
"f78460b90708223616a019aa48aaaa4fe8b2ce43",
"reftest"
],
"css/css-backgrounds/background-image-first-line.html": [
"c8dee7050b6241279d5f462263b9fdead50004fc",
"reftest"
],
"css/css-backgrounds/background-image-none-gradient-repaint.html": [
"3f39fb8d850d7561703f791135ea7dd4b3aa9fe8",
"reftest"
@ -543082,6 +543320,10 @@
"304be71fbace6a964566e2a24dc8ab802cdec7e3",
"support"
],
"css/css-backgrounds/reference/background-image-first-line-ref.html": [
"82fd9a2d3d0e3c886835168283ec3f32270c0356",
"support"
],
"css/css-backgrounds/reference/background-origin-002-ref.html": [
"88d61225a623d112e5f54505899a21dd4d929a5b",
"support"
@ -562150,6 +562392,14 @@
"05e60af1d8a558ec87a6c6f8acdeecdc0c7bb78d",
"support"
],
"css/css-lists/add-inline-child-after-marker-001-ref.html": [
"0c1d2397d75c34f7238c65b8762d5d206c36bf73",
"support"
],
"css/css-lists/add-inline-child-after-marker-001.html": [
"228604ee357d22027c1691bf2baf27a52729222b",
"reftest"
],
"css/css-lists/content-property/marker-text-matches-armenian-ref.html": [
"f21dfff69608a6a1201bd586c2a6e1e24d5fd915",
"support"
@ -562282,6 +562532,50 @@
"ad2ac65e179714dd5fb85de6b67a6f097823a507",
"reftest"
],
"css/css-lists/li-with-overflow-hidden-change-list-style-position-001-ref.html": [
"a3ea8b66ee0d3bf329f2b03caf8ff8cab745216e",
"support"
],
"css/css-lists/li-with-overflow-hidden-change-list-style-position-001.html": [
"992ed83cedaa50208a3870707ecbcb18da337bbc",
"reftest"
],
"css/css-lists/list-and-block-textarea-001.html": [
"96af38a8adb236bd5004a55fa59a830fbb6576eb",
"testharness"
],
"css/css-lists/list-and-flex-001-ref.html": [
"d7be687125aad54054338694ae35866a94380251",
"support"
],
"css/css-lists/list-and-flex-001.html": [
"98ab9c400b683932021d84127438d564b0b49bfc",
"reftest"
],
"css/css-lists/list-and-grid-001-ref.html": [
"b6e777428df55c9a1c93e38c54dd748b7452ab41",
"support"
],
"css/css-lists/list-and-grid-001.html": [
"562961d5a98cfc53f6bfc8daa7f912b174eecc73",
"reftest"
],
"css/css-lists/list-and-margin-collapse-001.html": [
"e267b839083b4dfb343c92118f93d73a7e8d019f",
"testharness"
],
"css/css-lists/list-and-writing-mode-001.html": [
"df54e8fb0df8146f896c2abd136d63d930d92d1c",
"testharness"
],
"css/css-lists/list-marker-with-lineheight-and-overflow-hidden-001-ref.html": [
"ae6486147e28502db80f6b887b1a6b16c30184f2",
"support"
],
"css/css-lists/list-marker-with-lineheight-and-overflow-hidden-001.html": [
"d78743facb53bf622b217e3118cb7a609faadede",
"reftest"
],
"css/css-lists/list-style-type-armenian-002.xht": [
"02e06b707f709870b30e810e4b1a4ec330ada296",
"visual"
@ -562290,6 +562584,18 @@
"4852e423273efe6ee99a832b141f943e7a3c4bca",
"visual"
],
"css/css-lists/list-with-image-display-changed-001-ref.html": [
"bfe0eb60f8dfbc30311fdec49490f7ecf2dc0b1c",
"support"
],
"css/css-lists/list-with-image-display-changed-001.html": [
"d4b3e300f8ea5011249e433b925a9a8f32e8c935",
"reftest"
],
"css/css-lists/resources/white.gif": [
"3aa2098dc8817f5360d13440f3d6245a030dc31d",
"support"
],
"css/css-logical/META.yml": [
"98d838c04e110e484cae63998cf4ee6c2dd559ed",
"support"
@ -563006,6 +563312,14 @@
"5806e75d536cc34a4610630782e5cdfd4b5e552d",
"reftest"
],
"css/css-masking/clip-path/clip-path-fixed-nested-ref.html": [
"b860304f04fe22498eb5b43d9de00d7e261353bb",
"support"
],
"css/css-masking/clip-path/clip-path-fixed-nested.html": [
"5090bc2aed43e0619eb7b966c2ed46cd43057e40",
"reftest"
],
"css/css-masking/clip-path/clip-path-inline-001.html": [
"21acae0ee7e06da76a6b5830e5aaa6b5e0d2e6a6",
"reftest"
@ -565986,6 +566300,10 @@
"3d1ffa01507dfd8397d8ae6b52766dfadfebee1c",
"testharness"
],
"css/css-position/position-absolute-in-inline-crash.html": [
"5d36710b6fe694b256d9841b3e7a0fff4535c85b",
"testharness"
],
"css/css-position/position-relative-table-left-ref.html": [
"7c1193b80007d8e7f89b35400a6d2ea2266cb3ac",
"support"
@ -569118,6 +569436,10 @@
"99686bdee440ab511acc55d7cb5c7a5ce97b07ad",
"testharness"
],
"css/css-scroll-anchoring/exclude-inline.html": [
"cea6b61dfe8b60754f656c860fe4d6f2dfff0c18",
"testharness"
],
"css/css-scroll-anchoring/inheritance.html": [
"035d4ffd2e2c8955d4e8f80af3aff5db9285c8ae",
"testharness"
@ -614907,7 +615229,7 @@
"reftest"
],
"fetch/corb/img-mime-types-coverage.tentative.sub.html": [
"65c5b846d5348a065fb935cc9426fb07a5df1e77",
"223a0a375c333511b72bcc3e276edee6519bf615",
"testharness"
],
"fetch/corb/img-png-mislabeled-as-html-nosniff.tentative.sub-ref.html": [
@ -614915,7 +615237,7 @@
"support"
],
"fetch/corb/img-png-mislabeled-as-html-nosniff.tentative.sub.html": [
"82adc47b0cf31c779637d2a55f9c3b9b532aceca",
"46403b0b18107c7943575c424773348a11e39cb2",
"reftest"
],
"fetch/corb/img-png-mislabeled-as-html.sub-ref.html": [
@ -614927,7 +615249,7 @@
"reftest"
],
"fetch/corb/preload-image-png-mislabeled-as-html-nosniff.tentative.sub.html": [
"cea80f2f89fac47e0ec8b3ac53f8b15d0ccfb76d",
"2fc93f8317e6bc0188ebe52e3587d37290fed18e",
"testharness"
],
"fetch/corb/resources/css-mislabeled-as-html-nosniff.css": [
@ -615031,7 +615353,7 @@
"support"
],
"fetch/corb/script-html-correctly-labeled.tentative.sub.html": [
"8f4d7679e3d749b3cd402997f607b7358fe98c28",
"407cef9158444d4fd19bfc8c09ed73d663d55fba",
"testharness"
],
"fetch/corb/script-html-js-polyglot.sub.html": [
@ -615051,7 +615373,7 @@
"testharness"
],
"fetch/corb/script-resource-with-json-parser-breaker.tentative.sub.html": [
"cabc7b09c458ca1f3852c633c9cd47680ab6e89d",
"03924cdad0dbad0e5fb2bc05cdd8ac19b619fa13",
"testharness"
],
"fetch/corb/style-css-mislabeled-as-html-nosniff.sub.html": [
@ -615194,8 +615516,12 @@
"8f0b528e8ce396c90a87fc76b64f930e99700068",
"testharness"
],
"fetch/http-cache/post-patch.html": [
"9025a96e4e3503830d3df69e6e0035e3217df1eb",
"testharness"
],
"fetch/http-cache/resources/http-cache.py": [
"b22dadada3beb8b9c689c4ac645431d6e8aba4ee",
"e64fe6dfea0e5e9d0bd267f464aa828a0bd35342",
"support"
],
"fetch/http-cache/resources/securedimage.py": [
@ -620475,7 +620801,7 @@
"testharness"
],
"html/dom/interfaces.https.html": [
"3848837cb2b7c37d23d3eefa3cb54e344f4ffaf1",
"47254a4361c46ad5fdc46efd2165da1bbab4c9b5",
"testharness"
],
"html/dom/interfaces.worker.js": [
@ -625290,6 +625616,10 @@
"f06c3dc9b4f101faa253b8b1d980510475894992",
"testharness"
],
"html/rendering/non-replaced-elements/tables/table-attribute.html": [
"54acff0350eaee7fced7869c566bfb780b26cfd0",
"testharness"
],
"html/rendering/non-replaced-elements/tables/table-border-1-ref.html": [
"ceac88e9a3c82013165b1a64e7acd3d3841271fb",
"support"
@ -626195,7 +626525,7 @@
"support"
],
"html/semantics/document-metadata/the-link-element/resources/link-style-error.js": [
"d1fa5ac2d6fcb4d94561c18b2d2e22a5a2afd6e3",
"7ebc39ba6cc5b25e6743684c1e2975049ed8fcd1",
"support"
],
"html/semantics/document-metadata/the-link-element/resources/stylesheet.css": [
@ -629782,8 +630112,12 @@
"db70b34b1adb81f197013175dc131a8aa361ac52",
"testharness"
],
"html/semantics/forms/form-submission-0/FormDataEvent.window.js": [
"145b5dd3727f995fba56407f07e158d1fb80ba5a",
"testharness"
],
"html/semantics/forms/form-submission-0/constructing-form-data-set.html": [
"afd75d87e95a6344bb3cb004c5af9973b63d645e",
"914d61b07898867f2728c2d3cf9d7ad7bdd6aa1b",
"testharness"
],
"html/semantics/forms/form-submission-0/contains.json": [
@ -629806,6 +630140,10 @@
"a7f0dc87efd2d3bf8798919649873cb81fc25ade",
"support"
],
"html/semantics/forms/form-submission-0/form-submission-algorithm.html": [
"bf9f9ce330a3a8ffbeb3b67b81e451dbcf064bdf",
"testharness"
],
"html/semantics/forms/form-submission-0/getactionurl.html": [
"83de220267e7c37374bcd4d4490f27e4488e1126",
"testharness"
@ -629814,6 +630152,10 @@
"5fc67faa880ffa9300a093aa0ef1f67c3a76eb0c",
"support"
],
"html/semantics/forms/form-submission-0/resources/targetted-form.js": [
"74d0f8c81eeeb46c16ba9c640484d99ea7e87ceb",
"support"
],
"html/semantics/forms/form-submission-0/submission-checks.window.js": [
"e242ce830a618cb1bff17c80a6c6559250c1a16d",
"testharness"
@ -636087,7 +636429,7 @@
"manual"
],
"input-events/input-events-exec-command.html": [
"d4dea0859e26e024b363dfcc1ee2ab2d263fb062",
"9ba423f4bade15ee47a099b611306b0e941af459",
"testharness"
],
"input-events/input-events-get-target-ranges-manual.html": [
@ -636359,7 +636701,7 @@
"support"
],
"interfaces/html.idl": [
"fa3cd4f56ac2c1b7eb60eeb3cc172e8854a165ba",
"3a513c5b9dbb47dc0b7a29af5efcf36259b22ef0",
"support"
],
"interfaces/image-capture.idl": [
@ -659854,20 +660196,36 @@
"b53c6a8c4232dbe9c787b0ea17f0ed1a49f1e386",
"support"
],
"resources/chromium/big_buffer.mojom.js": [
"f09706eebb82285184cdc27ad9a369f0bef54193",
"support"
],
"resources/chromium/big_buffer.mojom.js.headers": [
"6c61a34a4ec2e75096db0eb9f7748b142f0db7bb",
"support"
],
"resources/chromium/device.mojom.js": [
"495971c23192ece2b832392baea4f7af97a4d557",
"436d3038b85e4d6f92fa25cd93a41af667e85d26",
"support"
],
"resources/chromium/device.mojom.js.headers": [
"6805c323df5a975231648b830e33ce183c3cbbd3",
"support"
],
"resources/chromium/device_manager.mojom.js": [
"2d76263ba9b7a3608e05c72a8ae2666e20bb376f",
"resources/chromium/device_enumeration_options.mojom.js": [
"5a775ad36878f2c2a3cf05db55697b851e2a4db7",
"support"
],
"resources/chromium/device_manager.mojom.js.headers": [
"6805c323df5a975231648b830e33ce183c3cbbd3",
"resources/chromium/device_enumeration_options.mojom.js.headers": [
"6c61a34a4ec2e75096db0eb9f7748b142f0db7bb",
"support"
],
"resources/chromium/device_manager_client.mojom.js": [
"439f646574dfa785d8f4d15994597ed156dae695",
"support"
],
"resources/chromium/device_manager_client.mojom.js.headers": [
"6c61a34a4ec2e75096db0eb9f7748b142f0db7bb",
"support"
],
"resources/chromium/fake_bluetooth.mojom.js": [
@ -659907,7 +660265,7 @@
"support"
],
"resources/chromium/mojo_bindings.js": [
"67d6a8828551c1f703ef29831592f2e4d8a42485",
"70f6cad5e5f06f4f64a0fd4cdcd693fcea12bb78",
"support"
],
"resources/chromium/mojo_bindings.js.headers": [
@ -659931,7 +660289,7 @@
"support"
],
"resources/chromium/string16.mojom.js": [
"9dbb35664fabc2c8d9ace357927960785a531287",
"25377e66571b145907a490d17c673a5abd023171",
"support"
],
"resources/chromium/string16.mojom.js.headers": [
@ -659939,7 +660297,7 @@
"support"
],
"resources/chromium/url.mojom.js": [
"abe7d00e7f9ce659c925baeebea94b535ae7a5d3",
"c5eee1f2aeb4069c595914ee022a9e509b9da545",
"support"
],
"resources/chromium/uuid.mojom.js": [
@ -659959,7 +660317,7 @@
"support"
],
"resources/chromium/web_usb_service.mojom.js": [
"bacad8fa39095760aff4f67654ef6cc8ff723153",
"a4a017b1de178c0c51addb878d257b8b1a740334",
"support"
],
"resources/chromium/web_usb_service.mojom.js.headers": [
@ -666154,6 +666512,10 @@
"ee86b537ae987483687cc8ba6181db82f99ab162",
"support"
],
"svg/animations/scripted/end-element-on-inactive-element.svg": [
"34be9b9781f707d488e284c3285b82009557366b",
"testharness"
],
"svg/coordinate-systems/abspos.html": [
"fb37bbe7f3ae4a61d1c216970c8a263673aed0dc",
"reftest"
@ -670363,7 +670725,7 @@
"support"
],
"tools/manifest/manifest.py": [
"7333a2e63d67b5850cd93f98af291c5b6e2f3793",
"127d45dbc66632c1b5131e88ad58ec2abb9c5543",
"support"
],
"tools/manifest/sourcefile.py": [
@ -670383,7 +670745,7 @@
"support"
],
"tools/manifest/tests/test_manifest.py": [
"f398c7e1d8758c316de867f3fe3f59763d27c8f8",
"010a0c0a00a176bdabb561cc2a141aa0d1bbf139",
"support"
],
"tools/manifest/tests/test_sourcefile.py": [
@ -670883,7 +671245,7 @@
"support"
],
"tools/serve/serve.py": [
"4eee732443bdb9e38a7fba290f63e407cfe06a98",
"53f81457be1948936b1e4f161b7d2b1c221ab759",
"support"
],
"tools/serve/test_functional.py": [
@ -670891,7 +671253,7 @@
"support"
],
"tools/serve/test_serve.py": [
"1c089b506738ee73e2f1e29cf1729a1abc1e0c0b",
"62a6e74f980427ab88b05774f18b769b2f48702e",
"support"
],
"tools/third_party/atomicwrites/.gitignore": [
@ -675755,7 +676117,7 @@
"support"
],
"tools/wptserve/tests/test_config.py": [
"2ee8287710e91ed6908f94c3fb0a44cf1eae808b",
"45f138f131d3bcb754fcd4605d5e3a101cf8d6e8",
"support"
],
"tools/wptserve/tests/test_replacement_tokenizer.py": [
@ -675771,7 +676133,7 @@
"support"
],
"tools/wptserve/wptserve/config.py": [
"aadcbb9b5a635d9b254352f07dda96be6d3cb006",
"e11cae137b9c51d86774001ead71938fd55c0555",
"support"
],
"tools/wptserve/wptserve/constants.py": [
@ -681614,6 +681976,10 @@
"0614364e9756ec933ca842b97b1dbd31489b35ee",
"testharness"
],
"webrtc/RTCDtlsTransport-state.html": [
"283ab087f703e5cd43df92d6240ad7d7babe4f2c",
"testharness"
],
"webrtc/RTCIceCandidate-constructor.html": [
"9842593a83c5330e0ed19bedac9f6c9908362c41",
"testharness"
@ -683259,7 +683625,7 @@
"support"
],
"webusb/resources/usb-helpers.js": [
"0abca1691a3aa320a82672a5f776abbfe19775b1",
"67d907d2c2f8ea056590a3735feb6044814de952",
"support"
],
"webusb/usb-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html": [
@ -688411,7 +688777,7 @@
"testharness"
],
"xhr/formdata.htm": [
"4390af4a00f21f201bd4db9e4e7197bd27decac3",
"1f69de4e2813a1bbcca9ed37cb76d783d575c7c6",
"testharness"
],
"xhr/getallresponseheaders-cookies.htm": [

View file

@ -0,0 +1,2 @@
[floats-in-table-caption-001.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[line-height-204.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[mix-blend-mode-paragraph.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[background-image-first-line.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[background-repeat-round-roundup.xht]
expected: FAIL

View file

@ -0,0 +1,2 @@
[line-break-normal-018.xht]
expected: FAIL

View file

@ -0,0 +1,2 @@
[line-break-strict-018.xht]
expected: FAIL

View file

@ -0,0 +1,2 @@
[text-transform-full-size-kana-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[trailing-ideographic-space-004.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[word-break-keep-all-006.html]
expected: FAIL

View file

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

View file

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

View file

@ -1,4 +1,5 @@
[elementsFromPoint-iframes.html]
expected: CRASH
[elementsFromPoint on the root document for points in iframe elements]
expected: FAIL

View file

@ -2,6 +2,3 @@
[The root element is the last element returned for valid queries]
expected: FAIL
[The root element is the last element returned for otherwise empty queries within the viewport]
expected: FAIL

View file

@ -1,2 +1,2 @@
[parser-sets-attributes-and-children.html]
expected: CRASH
expected: TIMEOUT

View file

@ -0,0 +1,7 @@
[post-patch.html]
[HTTP cache uses content after POST request with response containing Content-Location and cache-allowing header]
expected: FAIL
[HTTP cache uses content after PATCH request with response containing Content-Location and cache-allowing header]
expected: FAIL

View file

@ -1,4 +0,0 @@
[006.html]
[Link with onclick form submit and href navigation ]
expected: FAIL

View file

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

View file

@ -6079,6 +6079,21 @@
[html interfaces]
expected: FAIL
[Window interface: attribute onformdata]
expected: FAIL
[Window interface: window must inherit property "onformdata" with the proper type]
expected: FAIL
[Document interface: new Document() must inherit property "onformdata" with the proper type]
expected: FAIL
[Document interface: iframe.contentDocument must inherit property "onformdata" with the proper type]
expected: FAIL
[Document interface: attribute onformdata]
expected: FAIL
[interfaces.https.html?include=HTML.*]
[HTML IDL tests]
@ -6774,12 +6789,6 @@
[HTMLMediaElement interface: document.createElement("video") must inherit property "getStartDate()" with the proper type]
expected: FAIL
[HTMLMediaElement interface: document.createElement("video") must inherit property "defaultPlaybackRate" with the proper type]
expected: PASS
[HTMLMediaElement interface: document.createElement("video") must inherit property "playbackRate" with the proper type]
expected: PASS
[HTMLMediaElement interface: document.createElement("video") must inherit property "seekable" with the proper type]
expected: FAIL
@ -6816,12 +6825,6 @@
[HTMLMediaElement interface: document.createElement("audio") must inherit property "getStartDate()" with the proper type]
expected: FAIL
[HTMLMediaElement interface: document.createElement("audio") must inherit property "defaultPlaybackRate" with the proper type]
expected: PASS
[HTMLMediaElement interface: document.createElement("audio") must inherit property "playbackRate" with the proper type]
expected: PASS
[HTMLMediaElement interface: document.createElement("audio") must inherit property "seekable" with the proper type]
expected: FAIL
@ -6858,12 +6861,6 @@
[HTMLMediaElement interface: new Audio() must inherit property "getStartDate()" with the proper type]
expected: FAIL
[HTMLMediaElement interface: new Audio() must inherit property "defaultPlaybackRate" with the proper type]
expected: PASS
[HTMLMediaElement interface: new Audio() must inherit property "playbackRate" with the proper type]
expected: PASS
[HTMLMediaElement interface: new Audio() must inherit property "seekable" with the proper type]
expected: FAIL
@ -6897,12 +6894,6 @@
[HTMLMediaElement interface: operation getStartDate()]
expected: FAIL
[HTMLMediaElement interface: attribute defaultPlaybackRate]
expected: PASS
[HTMLMediaElement interface: attribute playbackRate]
expected: PASS
[HTMLMediaElement interface: attribute seekable]
expected: FAIL
@ -9396,6 +9387,12 @@
[html interfaces]
expected: FAIL
[HTMLElement interface: attribute onformdata]
expected: FAIL
[HTMLElement interface: document.createElement("noscript") must inherit property "onformdata" with the proper type]
expected: FAIL
[interfaces.https.html?exclude=(Document|Window|HTML.*)]
[HTML IDL tests]
@ -10970,3 +10967,33 @@
[ImageData interface: new ImageData(10, 10) must inherit property "data" with the proper type]
expected: FAIL
[FormDataEvent interface object name]
expected: FAIL
[FormDataEvent interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
[FormDataEvent interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
[FormDataEvent interface: attribute formData]
expected: FAIL
[Stringification of new FormDataEvent("formdata", { formData: new FormData() })]
expected: FAIL
[FormDataEvent interface: new FormDataEvent("formdata", { formData: new FormData() }) must inherit property "formData" with the proper type]
expected: FAIL
[FormDataEvent interface: existence and properties of interface object]
expected: FAIL
[FormDataEvent interface object length]
expected: FAIL
[FormDataEvent must be primary interface of new FormDataEvent("formdata", { formData: new FormData() })]
expected: FAIL
[FormDataEvent interface: existence and properties of interface prototype object]
expected: FAIL

View file

@ -0,0 +1,166 @@
[table-attribute.html]
[table tfoot align attribute center is correct]
expected: FAIL
[table th align attribute middle is correct]
expected: FAIL
[thead background attribute is correct]
expected: FAIL
[table thead align attribute right is correct]
expected: FAIL
[table td align attribute justify is correct]
expected: FAIL
[table thead align attribute justify is correct]
expected: FAIL
[tr height attribute pixel is correct]
expected: FAIL
[table thead align attribute middle is correct]
expected: FAIL
[table tr align attribute center is correct]
expected: FAIL
[table tbody align attribute justify is correct]
expected: FAIL
[table_th height attribute percentage is correct]
expected: FAIL
[tbody bgcolor attribute is correct]
expected: FAIL
[thead bgcolor attribute is correct]
expected: FAIL
[tr bgcolor attribute is correct]
expected: FAIL
[table th align attribute left is correct]
expected: FAIL
[table tbody align attribute right is correct]
expected: FAIL
[table thead align attribute left is correct]
expected: FAIL
[table bgcolor attribute is correct]
expected: FAIL
[table tr align attribute justify is correct]
expected: FAIL
[th default align attribute is center]
expected: FAIL
[th background attribute is correct]
expected: FAIL
[td bgcolor attribute is correct]
expected: FAIL
[table height attribute 110% is correct]
expected: FAIL
[th height attribute pixel is correct]
expected: FAIL
[table th align attribute center is correct]
expected: FAIL
[table tr align attribute middle is correct]
expected: FAIL
[table tfoot align attribute middle is correct]
expected: FAIL
[table bordercolor attribute is correct]
expected: FAIL
[table th align attribute right is correct]
expected: FAIL
[table cellpadding attribute is correct]
expected: FAIL
[table_td height attribute percentage is correct]
expected: FAIL
[tr background attribute is correct]
expected: FAIL
[table tr align attribute left is correct]
expected: FAIL
[th bgcolor attribute is correct]
expected: FAIL
[table height attribute pixel is correct]
expected: FAIL
[table col width attribute is correct]
expected: FAIL
[td height attribute pixel is correct]
expected: FAIL
[table tfoot align attribute left is correct]
expected: FAIL
[td background attribute is correct]
expected: FAIL
[table tfoot align attribute right is correct]
expected: FAIL
[table tfoot align attribute justify is correct]
expected: FAIL
[table thead align attribute center is correct]
expected: FAIL
[table tbody align attribute middle is correct]
expected: FAIL
[table tbody align attribute left is correct]
expected: FAIL
[tbody background attribute is correct]
expected: FAIL
[table tbody align attribute center is correct]
expected: FAIL
[table th align attribute justify is correct]
expected: FAIL
[table td align attribute middle is correct]
expected: FAIL
[tfoot background attribute is correct]
expected: FAIL
[table cellspacing attribute is correct]
expected: FAIL
[tfoot bgcolor attribute is correct]
expected: FAIL
[table height attribute 90% is correct]
expected: FAIL
[table tr align attribute right is correct]
expected: FAIL
[table_tr height attribute percentage is correct]
expected: FAIL
[table background attribute is correct]
expected: FAIL

View file

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

View file

@ -16,18 +16,9 @@
[picture: source (max-width:500px) broken image, img valid image, resize to narrow]
expected: FAIL
[img (srcset 1 cand) valid image, resize to wide]
expected: FAIL
[picture: same URL in source (max-width:500px) and img, resize to wide]
expected: FAIL
[img (srcset 1 cand) valid image, resize to narrow]
expected: FAIL
[picture: source (max-width:500px) valid image, img broken image, resize to wide]
expected: FAIL
[picture: same URL in source (max-width:500px) and img, resize to narrow]
expected: FAIL

View file

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

View file

@ -0,0 +1,7 @@
[FormDataEvent.window.html]
[Successful FormDataEvent constructor]
expected: FAIL
[Failing FormDataEvent constructor]
expected: FAIL

View file

@ -8,3 +8,15 @@
[The button cannot be setted if it is not a submitter.]
expected: FAIL
[Entries added to "formData" IDL attribute should be submitted.]
expected: FAIL
["formData" IDL attribute should have entries for form-associated elements in the first event handler, and the second handler can read entries set by the first handler.]
expected: FAIL
["formdata" event bubbles, and is not cancelable.]
expected: FAIL
["formdata" event bubbles in an orphan tree.]
expected: FAIL

View file

@ -0,0 +1,4 @@
[form-submission-algorithm.html]
[If constructing entry list flag of form is true, then return]
expected: FAIL

View file

@ -0,0 +1,7 @@
[toggleEvent.html]
[Calling open twice on 'details' fires only one toggle event]
expected: FAIL
[Setting open=true to opened 'details' element should not fire a toggle event at the 'details' element]
expected: FAIL

View file

@ -1,4 +0,0 @@
[077.html]
[ adding several types of scripts through the DOM and removing some of them confuses scheduler ]
expected: FAIL

View file

@ -1,4 +0,0 @@
[aborted-parser.window.html]
[document.open() after parser is aborted]
expected: FAIL

View file

@ -378,3 +378,12 @@
[onwaiting: the default value must be null]
expected: FAIL
[onformdata: the content attribute must be compiled into a function as the corresponding property]
expected: FAIL
[onformdata: must be on the appropriate locations for GlobalEventHandlers]
expected: FAIL
[onformdata: the default value must be null]
expected: FAIL

View file

@ -69,3 +69,12 @@
[shadowed error (window)]
expected: FAIL
[not shadowed formdata (window)]
expected: FAIL
[not shadowed formdata (document.body)]
expected: FAIL
[not shadowed formdata (document.createElement("body"))]
expected: FAIL

View file

@ -62,3 +62,12 @@
[not shadowed auxclick (document.createElement("frameset"))]
expected: FAIL
[not shadowed formdata (document.body)]
expected: FAIL
[not shadowed formdata (document.createElement("frameset"))]
expected: FAIL
[not shadowed formdata (window)]
expected: FAIL

View file

@ -25,3 +25,10 @@
[securitypolicyviolation is unaffected on a windowless frameset]
expected: FAIL
[formdata is unaffected on a windowless frameset]
expected: FAIL
[formdata is unaffected on a windowless body]
expected: FAIL

View file

@ -0,0 +1,5 @@
[promise-rejection-events.html]
expected: TIMEOUT
[rejectionhandled is dispatched from a queued task, and not immediately]
expected: TIMEOUT

View file

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

View file

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

View file

@ -0,0 +1,7 @@
[formdata.htm]
[|new FormData()| in formdata event handler should throw]
expected: FAIL
[Newly created FormData contains entries added to "formData" IDL attribute of FormDataEvent.]
expected: FAIL

View file

@ -263,8 +263,9 @@ function requestDeviceWithTrustedClick() {
// Calls requestLEScan() in a context that's 'allowed to show a popup'.
function requestLEScanWithTrustedClick() {
let args = arguments;
return callWithTrustedClick(
() => navigator.bluetooth.requestLEScan.apply(navigator.bluetooth));
() => navigator.bluetooth.requestLEScan.apply(navigator.bluetooth, args));
}
// errorUUID(alias) returns a UUID with the top 32 bits of

View file

@ -3,9 +3,9 @@
<head>
<meta http-equiv="Content-Security-Policy" content="script-src 'unsafe-hashes' 'nonce-abc'
'sha256-r5W8SQIDMTbMxAjJ7KzCzFT38dwBy7Y5KF5B+20009g=';">
'sha256-WZYVPzLjoxd1Cbc8gcx07ChlPmT3WP+KxkOiY0s4h8g=';">
<!--
'sha256-r5W8SQIDMTbMxAjJ7KzCzFT38dwBy7Y5KF5B+20009g=' ==> 'javascript:t1.done();'
'sha256-WZYVPzLjoxd1Cbc8gcx07ChlPmT3WP+KxkOiY0s4h8g=' ==> 'javascript:opener.t1.done();'
-->
<script src='/resources/testharness.js' nonce='abc'></script>
<script src='/resources/testharnessreport.js' nonce='abc'></script>
@ -13,7 +13,7 @@
<body>
<div id='log'></div>
<a target="_blank" href='javascript:t1.done();' id='test'>
<a target="_blank" href='javascript:opener.t1.done();' id='test'>
<script nonce='abc'>
var t1 = async_test("Test that the javascript: src is allowed to run");

View file

@ -0,0 +1,19 @@
<!DOCTYPE html>
<title>CSS Test: background-image applicability to ::first-letter</title>
<link rel="help" href="http://www.w3.org/TR/css3-background/">
<link rel="help" href="http://www.w3.org/TR/CSS21/selector.html#first-line-pseudo">
<link rel="match" href="reference/background-image-first-line-ref.html">
<meta name="flags" content="ahem image">
<meta name="assert" content="background-image applicability to ::first-line">
<style type="text/css">
#content {
color: transparent;
font: 100px Ahem;
}
#content::first-line {
background-image: url("support/cat.png"); /* 98 w. by 99px h. */
background-repeat: no-repeat;
}
</style>
<p>Test passes if cat image is visible.</p>
<div id="content">X</div>

View file

@ -0,0 +1,12 @@
<!DOCTYPE html>
<meta name="flags" content="ahem image">
<style type="text/css">
#content {
color: transparent;
font: 100px Ahem;
background-image: url("../support/cat.png"); /* 98 w. by 99px h. */
background-repeat: no-repeat;
}
</style>
<p>Test passes if cat image is visible.</p>
<div id="content">X</div>

View file

@ -0,0 +1,14 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Lists: Add inline child after marker</title>
<p>The test passes if you see the list marker followed by the text "inline" and "axxx" in a line below.</p>
<ul>
<li>
<span>inline</span>
<div style="overflow:hidden;">
<span>a</span>xxx
</div>
</li>
</ul>

View file

@ -0,0 +1,26 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Lists: Add inline child after marker</title>
<link rel=help href="https://www.w3.org/TR/CSS22/generate.html#lists">
<link rel=match href="add-inline-child-after-marker-001-ref.html">
<!-- https://bugs.chromium.org/p/chromium/issues/detail?id=344941 -->
<p>The test passes if you see the list marker followed by the text "inline" and "axxx" in a line below.</p>
<ul>
<li id="liTarget">
<div id="divTarget" style="overflow:hidden;">
<span>a</span>xxx
</div>
</li>
</ul>
<script>
document.body.offsetHeight;
var new_span=document.createElement("span");
var text_node=document.createTextNode("inline");
new_span.appendChild(text_node);
var div_target=document.getElementById("divTarget");
var li_target=document.getElementById("liTarget");
li_target.insertBefore(new_span,div_target);
</script>

View file

@ -0,0 +1,21 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Lists: test inside and outside switch</title>
<p>The test passes if the first li is inside and the second one is outside.</p>
<ul>
<li style="list-style-position: inside;">
<div style="overflow:hidden;">
outside to inside
</div>
</li>
</ul>
<ul>
<li style="list-style-position: outside;">
<div style="overflow:hidden;">
inside to outside
</div>
</li>
</ul>

View file

@ -0,0 +1,36 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Lists: test inside and outside switch</title>
<link rel=help href="https://www.w3.org/TR/CSS22/generate.html#lists">
<link rel=match href="li-with-overflow-hidden-change-list-style-position-001-ref.html">
<!-- https://bugs.chromium.org/p/chromium/issues/detail?id=344941 -->
<p>The test passes if the first li is inside and the second one is outside.</p>
<ul>
<li id="outSide" style="list-style-position: outside;">
<div style="overflow:hidden;">
outside to inside
</div>
</li>
</ul>
<ul>
<li id="inSide" style="list-style-position: inside;">
<div style="overflow:hidden;">
inside to outside
</div>
</li>
</ul>
<script>
document.body.offsetHeight;
var outside_li=document.getElementById("outSide");
outside_li.style.listStylePosition = "inside";
document.body.offsetHeight;
var inside_li=document.getElementById("inSide");
inside_li.style.listStylePosition = "outside";
document.body.offsetHeight;
</script>

View file

@ -0,0 +1,33 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Lists: test list with textarea as its first child</title>
<link rel=help href="https://www.w3.org/TR/CSS22/generate.html#lists">
<!-- https://bugs.chromium.org/p/chromium/issues/detail?id=767408 -->
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
textarea {
border: 0px;
padding: 0px;
}
</style>
<div id="log"></div>
<ul>
<li id="target">
<textarea rows="3" cols="20" style="display:block; height:45px">
hello
</textarea>
</li>
</ul>
<script>
test(function() {
var height = document.getElementById("target").offsetHeight;
assert_equals(height, 45, "the height of li should be 45px, and no extra line generated")
}, "list and block textarea");
</script>

View file

@ -0,0 +1,15 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Lists: test list with flex as its first child</title>
<p>There should be no extra line generated between the marker and the flex.</p>
<ul>
<li>
<div style="border: 1px black solid;">
<div style="display: inline-flex; align-items: flex-end; height: 200px;">
<span style="line-height: 50px">text</span>
</div>
</div>
</li>
</ul>

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Lists: test list with flex as its first child</title>
<link rel=help href="https://www.w3.org/TR/CSS22/generate.html#lists">
<link rel=match href="list-and-flex-001-ref.html">
<!-- https://bugs.chromium.org/p/chromium/issues/detail?id=767408 -->
<p>There should be no extra line generated between the marker and the flex.</p>
<ul>
<li>
<div style="border: 1px black solid;">
<div style="display: flex; align-items: flex-end; height: 200px;">
<span style="line-height: 50px">text</span>
</div>
</div>
</li>
</ul>

View file

@ -0,0 +1,14 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Lists: test list with grid as its first child</title>
<p>There should be no extra line generated between the marker and the grid.</p>
<ul>
<li>
<div style="display: inline-grid; grid-template-rows: 100px; align-items: center;">
<div>grid</div>
</div>
</li>
</ul>

View file

@ -0,0 +1,16 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Lists: test list with grid as its first child</title>
<link rel=help href="https://www.w3.org/TR/CSS22/generate.html#lists">
<link rel=match href="list-and-grid-001-ref.html">
<!-- https://bugs.chromium.org/p/chromium/issues/detail?id=767408 -->
<p>There should be no extra line generated between the marker and the grid.</p>
<ul>
<li>
<div style="display: grid; grid-template-rows: 100px; align-items: center;">
<div>grid</div>
</div>
</li>
</ul>

View file

@ -0,0 +1,23 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Lists: test the margin collapse of marker</title>
<link rel=help href="https://www.w3.org/TR/CSS22/generate.html#lists">
<!-- https://bugs.chromium.org/p/chromium/issues/detail?id=767408 -->
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<ul id="target" style="margin-top:100px;">
<li>
<div style="overflow:hidden; margin-top:100px; height:25px;"><a href="#">xxx</a></div>
</li>
</ul>
<script>
test(function() {
var height = document.getElementById("target").clientHeight;
assert_equals(height, 25, "the height of ul should be 25px")
}, "list and margin collapse");
</script>

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Lists: test list with root writing-mode as its first child</title>
<link rel=help href="https://www.w3.org/TR/CSS22/generate.html#lists">
<!-- https://bugs.chromium.org/p/chromium/issues/detail?id=767408 -->
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<ul>
<li id="target">
<div style="writing-mode: vertical-lr; height: 45px;">a b c</div>
</li>
</ul>
<script>
test(function() {
var height = document.getElementById("target").offsetHeight;
assert_equals(height, 45, "the height of li should be 45px, and no extra line generated")
}, "list and writing-mode");
</script>

View file

@ -0,0 +1,19 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Lists: test list with overflow:hidden and line-height firstchild</title>
<p>This test passes if there is a marker for each li and followed by "text" in the same line.</p>
<ul>
<li>
<div style="line-height:100px;">
<span>text</span>
</div>
</li>
</ul>
<ul>
<li style="list-style-image: url(resources/white.gif);">
<div style="line-height:100px;">text</div>
</li>
</ul>

View file

@ -0,0 +1,22 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Lists: test list with overflow:hidden and line-height firstchild</title>
<link rel=help href="https://www.w3.org/TR/CSS22/generate.html#lists">
<link rel=match href="list-marker-with-lineheight-and-overflow-hidden-001-ref.html">
<!-- https://bugs.chromium.org/p/chromium/issues/detail?id=344941 -->
<p>This test passes if there is a marker for each li and followed by "text" in the same line.</p>
<ul>
<li>
<div style="overflow:hidden; line-height:100px;">
<span>text</span>
</div>
</li>
</ul>
<ul>
<li style="list-style-image: url(resources/white.gif);">
<div style="overflow:hidden; line-height:100px;">text</div>
</li>
</ul>

View file

@ -0,0 +1,15 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Lists: test list with firstchild changing display</title>
<style>
li { border: 3px solid black; margin: 3px; }
img { display: block; }
</style>
<ul>
<li>
<a href="#"><img src="./resources/white.gif" width=32 height=32 /></a>
Some other text
</li>
</ul>

View file

@ -0,0 +1,29 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Lists: test list with firstchild changing display</title>
<link rel=help href="https://github.com/w3c/csswg-drafts/issues/2787">
<link rel=match href="list-with-image-display-changed-001-ref.html">
<!-- https://bugs.chromium.org/p/chromium/issues/detail?id=715288 -->
<meta name="assert" content="
After the display of img being changed from block to inline, then back to block,
the final position of marker should be the same as the beginning." />
<style>
li { border: 3px solid black; margin: 3px; }
img { display: block; }
</style>
<ul>
<li>
<a href="#"><img src="./resources/white.gif" width=32 height=32 /></a>
Some other text
</li>
</ul>
<script>
document.body.offsetTop;
var img = document.querySelector('a img');
img.style.display = 'inline';
img.offsetWidth;
img.style.display = 'block';
</script>

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 B

View file

@ -0,0 +1,17 @@
<!doctype html>
<title>CSS Test Reference</title>
<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
<style>
body, html {
margin: 0;
padding: 0;
background: green;
}
.purple-square {
background: purple;
width: 50px;
height: 50px;
}
</style>
<div class="purple-square"></div>

View file

@ -0,0 +1,38 @@
<!doctype html>
<title>CSS Test: nested clip-path() inside the same reference frame with position: fixed</title>
<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
<link rel="author" href="https://mozilla.org" title="Mozilla">
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1501111">
<link rel="help" href="https://drafts.fxtf.org/css-masking/#the-clip-path">
<link rel="match" href="clip-path-fixed-nested-ref.html">
<style>
body, html {
margin: 0;
padding: 0;
}
.outer-clip {
height: 100vh;
clip-path: inset(0 0 0 0);
background: green;
}
.fixed {
position: fixed;
}
.inner-clip {
height: 50px;
width: 50px;
clip-path: inset(0 0 0 0);
}
.inner-clip-contents {
height: 100px;
width: 100px;
background: purple;
}
</style>
<div class="outer-clip">
<div class="fixed">
<div class="inner-clip">
<div class="inner-clip-contents"></div>
</div>
</div>
</div>

View file

@ -0,0 +1,23 @@
<!doctype html>
<html>
<head>
<title>Should not crash with split inline abspos container, and flex ancestor</title>
<link rel="help" href="https://www.w3.org/TR/css-position-3/#def-cb">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>test(()=>{})</script>
</head>
<!-- There should be a green square below -->
<body style="font-family: Ahem;font-size: 20px;">
<div id="container">
<span id="split" style="position:relative;color:green">
AAA
<div style="display:flex">
<a>
<span id="target" style="position:absolute;color:green;top:20px">XXX</span></a>
</div>
ZZZ
</span>
</div>
</body>
</html>

View file

@ -0,0 +1,34 @@
<!DOCTYPE html>
<link rel="help" href="https://drafts.csswg.org/css-scroll-anchoring/">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
#expander {
margin-bottom: 50px;
}
#no {
overflow-anchor: none;
}
#spacing {
margin-bottom: 300vh;
}
</style>
<span>out of view</span>
<div id="expander"></div>
<span id="no">excluded subtree <span>[nested inline]</span></span>
<div id="spacing"></div>
<script>
// Tests that an inline element can be an excluded subtree.
test(() => {
scrollTo(0, 50);
document.querySelector('#expander').style = "margin-bottom: 100px";
assert_equals(document.scrollingElement.scrollTop, 50,
"Scroll anchoring should not anchor within the span.");
scrollTo(0, 0);
});
</script>

View file

@ -45,7 +45,12 @@
const get_url = (mime) => {
// www1 is cross-origin, so the HTTP response is CORB-eligible -->
url = "http://{{domains[www1]}}:{{ports[http][0]}}"
//
// TODO(lukasza@chromium.org): Once https://crbug.com/888079 and
// https://crbug.com/891872 are fixed, we should use a cross-*origin*
// rather than cross-*site* URL below (e.g. s/hosts[alt]/domains/g).
// See also https://crbug.com/918660 for more context.
url = "http://{{hosts[alt][www1]}}:{{ports[http][0]}}"
url = url + "/fetch/nosniff/resources/image.py"
if (mime != null) {
url += "?type=" + encodeURIComponent(mime)

View file

@ -7,5 +7,11 @@
<meta charset="utf-8">
<!-- Reference page uses same-origin resources, which are not CORB-eligible. -->
<link rel="match" href="img-png-mislabeled-as-html-nosniff.tentative.sub-ref.html">
<!-- www1 is cross-origin, so the HTTP response is CORB-eligible -->
<img src="http://{{domains[www1]}}:{{ports[http][0]}}/fetch/corb/resources/png-mislabeled-as-html-nosniff.png">
<!-- www1 is cross-origin, so the HTTP response is CORB-eligible
TODO(lukasza@chromium.org): Once https://crbug.com/888079 and
https://crbug.com/891872 are fixed, we should use a cross-*origin*
rather than cross-*site* URL below (e.g. s/hosts[alt]/domains/g).
See also https://crbug.com/918660 for more context.
-->
<img src="http://{{hosts[alt][www1]}}:{{ports[http][0]}}/fetch/corb/resources/png-mislabeled-as-html-nosniff.png">

View file

@ -17,8 +17,14 @@ async_test(function(t) {
});
</script>
<!-- www1 is cross-origin, so the HTTP response is CORB-eligible -->
<!-- www1 is cross-origin, so the HTTP response is CORB-eligible
TODO(lukasza@chromium.org): Once https://crbug.com/888079 and
https://crbug.com/891872 are fixed, we should use a cross-*origin*
rather than cross-*site* URL below (e.g. s/hosts[alt]/domains/g).
See also https://crbug.com/918660 for more context.
-->
<link rel="preload" as="image"
onerror="window.preloadErrorEvent()"
onload="window.preloadLoadEvent()"
href="http://{{domains[www1]}}:{{ports[http][0]}}/fetch/corb/resources/png-mislabeled-as-html-nosniff.png">
href="http://{{hosts[alt][www1]}}:{{ports[http][0]}}/fetch/corb/resources/png-mislabeled-as-html-nosniff.png">

View file

@ -24,7 +24,12 @@ async_test(function(t) {
});
// www1 is cross-origin, so the HTTP response is CORB-eligible.
script.src = 'http://{{domains[www1]}}:{{ports[http][0]}}/fetch/corb/resources/html-correctly-labeled.html';
//
// TODO(lukasza@chromium.org): Once https://crbug.com/888079 and
// https://crbug.com/891872 are fixed, we should use a cross-*origin*
// rather than cross-*site* URL below (e.g. s/hosts[alt]/domains/g).
// See also https://crbug.com/918660 for more context.
script.src = 'http://{{hosts[alt][www1]}}:{{ports[http][0]}}/fetch/corb/resources/html-correctly-labeled.html';
document.body.appendChild(script)
}, "CORB-blocked script has no syntax errors");
</script>

View file

@ -68,7 +68,12 @@ function test(mime_type, body) {
});
// www1 is cross-origin, so the HTTP response is CORB-eligible.
var src_prefix = "http://{{domains[www1]}}:{{ports[http][0]}}/fetch/corb/resources/sniffable-resource.py";
//
// TODO(lukasza@chromium.org): Once https://crbug.com/888079 and
// https://crbug.com/891872 are fixed, we should use a cross-*origin*
// rather than cross-*site* URL below (e.g. s/hosts[alt]/domains/g).
// See also https://crbug.com/918660 for more context.
var src_prefix = "http://{{hosts[alt][www1]}}:{{ports[http][0]}}/fetch/corb/resources/sniffable-resource.py";
script.src = src_prefix + "?type=" + mime_type + "&body=" + encodeURIComponent(body);
document.body.appendChild(script)
}, "CORB-blocks '" + mime_type + "' that starts with the following JSON parser breaker: " + body);

View file

@ -0,0 +1,57 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>HTTP Cache - Caching POST and PATCH responses</title>
<meta name="help" href="https://fetch.spec.whatwg.org/#request">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/utils.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<script src="http-cache.js"></script>
</head>
<body>
<script>
var tests = [
{
name: "HTTP cache uses content after PATCH request with response containing Content-Location and cache-allowing header",
requests: [
{
request_method: "PATCH",
request_body: "abc",
response_status: [200, "OK"],
response_headers: [
['Cache-Control', "private, max-age=1000"],
['Content-Location', ""]
],
response_body: "abc"
},
{
expected_type: "cached"
}
]
},
{
name: "HTTP cache uses content after POST request with response containing Content-Location and cache-allowing header",
requests: [
{
request_method: "POST",
request_body: "abc",
response_status: [200, "OK"],
response_headers: [
['Cache-Control', "private, max-age=1000"],
['Content-Location', ""]
],
response_body: "abc"
},
{
expected_type: "cached"
}
]
}
];
run_tests(tests);
</script>
</body>
</html>

View file

@ -46,7 +46,10 @@ def handle_test(uuid, request, response):
now = time.time()
for header in config.get('response_headers', []):
if header[0].lower() in LOCATIONHDRS: # magic locations
if (len(header[1]) > 0):
header[1] = "%s&target=%s" % (request.url, header[1])
else:
header[1] = request.url
if header[0].lower() in DATEHDRS and isinstance(header[1], int): # magic dates
header[1] = http_date(now, header[1])
response.headers.set(header[0], header[1])

View file

@ -37,7 +37,7 @@ const waitForLoad = new Promise(resolve => { addEventListener('load', resolve);
idl_test(
['html'],
['SVG', 'cssom', 'touch-events', 'uievents', 'dom'],
['SVG', 'cssom', 'touch-events', 'uievents', 'dom', 'xhr'],
async idlArray => {
idlArray.add_objects({
NodeList: ['document.getElementsByName("name")'],
@ -174,6 +174,7 @@ idl_test(
HTMLProgressElement: ['document.createElement("progress")'],
HTMLMeterElement: ['document.createElement("meter")'],
ValidityState: ['document.createElement("input").validity'],
FormDataEvent: ['new FormDataEvent("formdata", { formData: new FormData() })'],
HTMLDetailsElement: ['document.createElement("details")'],
HTMLMenuElement: ['document.createElement("menu")'],
Window: ['window'],

View file

@ -0,0 +1,194 @@
<!DOCTYPE html>
<meta charset=utf-8>
<title>Table attribute test</title>
<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#tables-2">
<link rel="author" title="Intel" href="http://www.intel.com">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
.div_tbl table {
width: 400px;
height: 300px;
border-spacing: 0px;
}
.div_tbl td {
padding: 0px;
}
.div_tbl th {
padding: 0px;
}
.div_200 {
height: 200px;
}
</style>
<div id="div">
<table id="table">
<thead id="thead">
<tr>
<th id="th">Month</th>
<th>Savings</th>
</tr>
</thead>
<tbody id="tbody">
<tr id="tr">
<td>January</td>
<td>$60</td>
</tr>
<tr>
<td id="td">February</td>
<td>$80</td>
</tr>
</tbody>
<tfoot id="tfoot">
<tr>
<td>Sum</td>
<td>$140</td>
</tr>
</tfoot>
</table>
</div>
<script>
const ids = ["table", "thead", "tbody", "tfoot", "tr", "td", "th"];
const alignIds = ["thead", "tbody", "tfoot", "tr", "td", "th"];
const heightIds = ["tr", "td", "th"];
const div = document.getElementById("div");
const table = document.getElementById("table");
const aligns = [
["center", "center"],
["middle", "center"],
["left", "left"],
["right", "right"],
["justify", "justify"]
];
function commonTest(id, attr, value, cssProp, expected) {
test(t => {
let elem = document.getElementById(id);
t.add_cleanup(() => {
elem.removeAttribute(attr);
});
elem.setAttribute(attr, value);
let css = window.getComputedStyle(elem, null).getPropertyValue(cssProp);
assert_equals(css, expected);
}, `${id} ${attr} attribute is correct`);
}
function commonAlignTest(id, attr, value, cssProp, expected) {
test(t => {
let elem = document.getElementById(id);
t.add_cleanup(() => {
elem.removeAttribute(attr);
});
elem.setAttribute(attr, value);
let css = window.getComputedStyle(elem, null).getPropertyValue(cssProp);
assert_equals(css, expected);
}, `table ${id} align attribute ${value} is correct`);
}
function commonHeightTest(id, attr, value, cssProp, expected, type="", divClass) {
test(t => {
let elem = document.getElementById(id);
t.add_cleanup(() => {
elem.removeAttribute(attr);
div.classList.remove(divClass);
});
elem.setAttribute(attr, value);
div.classList.add(divClass);
let css = window.getComputedStyle(elem, null).getPropertyValue(cssProp);
assert_equals(css, expected);
}, `${id} ${attr} attribute ${type} is correct`);
}
// table#bordercolor
commonTest("table", "bordercolor", "red", "border-color", "rgb(255, 0, 0)");
// table#cellspacing
commonTest("table", "cellspacing", "10", "border-spacing", "10px 10px", "10");
// {table, thead, body, tfoot, tr, td, th}#background
// {table, thead, body, tfoot, tr, td, th}#bgcolor
const url = new URL('/images/threecolors.png', window.location.href).href;
for (let id of ids) {
commonTest(id, "background", "/images/threecolors.png", "background-image", `url(\"${url}\")`);
commonTest(id, "bgcolor", "red", "background-color", "rgb(255, 0, 0)");
}
// {thead, body, tfoot, tr, td, th}#align#{center, middle, left, right, justify}
for (let id of alignIds) {
for (let [value, expected] of aligns) {
commonAlignTest(id, "align", value, "text-align", expected);
}
}
// {tr, td, th}#height#pixel
for (let id of heightIds) {
commonHeightTest(id, "height", "60", "height", "60px", "pixel", "div_tbl");
}
// {tr, td, th}#height#percentage
let tbl = document.createElement("table");
tbl.innerHTML = '<tr id="table_tr"><th id="table_th"></th></tr><tr><td id="table_td"></td></tr>';
div.appendChild(tbl);
const heightPercIds = ["table_tr", "table_td", "table_th"];
for (let id of heightPercIds) {
commonHeightTest(id, "height", "20%", "height", "60px", "percentage", "div_tbl");
}
div.removeChild(tbl);
// table#height#{pixel, percentage}
commonHeightTest("table", "height", "180", "height", "180px", "pixel", "div_200");
commonHeightTest("table", "height", "90%", "height", "180px", "90%", "div_200");
commonHeightTest("table", "height", "110%", "height", "220px", "110%", "div_200");
// table#cellpadding
test(t => {
t.add_cleanup(() => {
table.removeAttribute("cellpadding");
});
table.setAttribute("cellpadding", "10");
let th = document.getElementById("th");
let th_css = window.getComputedStyle(th, null).getPropertyValue("padding");
assert_equals(th_css, "10px");
let td = document.getElementById("td");
let td_css = window.getComputedStyle(td, null).getPropertyValue("padding");
assert_equals(td_css, "10px");
}, "table cellpadding attribute is correct");
// th default text-align property is center
test(t => {
let elem = document.getElementById("th");
let css = window.getComputedStyle(elem, null).getPropertyValue("text-align");
assert_equals(css, "center");
}, "th default align attribute is center");
// col#width#{pixel, percentage}
test(t => {
let colgroup = document.createElement("colgroup");
let col1 = document.createElement("col");
let col2 = document.createElement("col");
t.add_cleanup(() => {
table.removeChild(colgroup);
div.classList.remove("div_tbl");
});
colgroup.appendChild(col1);
colgroup.appendChild(col2);
table.insertBefore(colgroup, table.firstChild);
div.classList.add("div_tbl");
col1.setAttribute("width", "100");
let td = document.getElementById("td");
let css = window.getComputedStyle(td, null).getPropertyValue("width");
assert_equals(css, "100px");
col1.setAttribute("width", "50%");
css = window.getComputedStyle(td, null).getPropertyValue("width");
assert_equals(css, "200px");
}, "table col width attribute is correct");
</script>

View file

@ -1,7 +1,13 @@
["<link>", "@import"].forEach(linkType => {
[
["same-origin", "resources/css.py"],
["cross-origin", get_host_info().HTTP_REMOTE_ORIGIN + "/html/semantics/document-metadata/the-link-element/resources/css.py"]
// TODO(lukasza@chromium.org): Once https://crbug.com/888079 and
// https://crbug.com/891872 are fixed, we should use a cross-*origin* rather
// than cross-*site* URL below (e.g. s/ HTTP_NOTSAMESITE_ORIGIN /
// HTTP_REMOTE_ORIGIN /g). See also https://crbug.com/918660 for more
// context.
["cross-origin", get_host_info().HTTP_NOTSAMESITE_ORIGIN + "/html/semantics/document-metadata/the-link-element/resources/css.py"]
].forEach(originType => {
["no Content-Type", "wrong Content-Type", "broken Content-Type"].forEach(contentType => {
["no nosniff", "nosniff"].forEach(nosniff => {

View file

@ -0,0 +1,21 @@
// https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#the-formdataevent-interface
test(() => {
let fd = new FormData();
let typeError = new TypeError();
assert_throws(typeError, () => { new FormDataEvent() }, '0 arguments');
assert_throws(typeError, () => { new FormDataEvent('foo') }, '1 argument');
assert_throws(typeError, () => { new FormDataEvent(fd, fd) }, '2 invalid arguments');
assert_throws(typeError, () => { new FormDataEvent('foo', null) }, 'Null dictionary');
assert_throws(typeError, () => { new FormDataEvent('foo', undefined) }, 'Undefined dictionary');
assert_throws(typeError, () => { new FormDataEvent('foo', { formData: null }) }, 'Null formData');
assert_throws(typeError, () => { new FormDataEvent('foo', { formData: undefined }) }, 'Undefined formData');
assert_throws(typeError, () => { new FormDataEvent('foo', { formData: 'bar' }) }, 'Wrong type of formData');
}, 'Failing FormDataEvent constructor');
test(() => {
let fd = new FormData();
let event = new FormDataEvent('bar', { formData: fd, bubbles: true });
assert_equals(event.formData, fd);
assert_true(event.bubbles);
}, 'Successful FormDataEvent constructor');

View file

@ -5,6 +5,7 @@
<link rel="help" href="https://fetch.spec.whatwg.org/#concept-bodyinit-extract">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="./resources/targetted-form.js"></script>
<iframe name="frame1" id="frame1"></iframe>
<form accept-charset="iso-8859-1" target="frame1" action="/common/blank.html" id="form1">
@ -46,4 +47,64 @@ async_test(t => {
form2.submit.click();
}, 'The button cannot be setted if it is not a submitter.');
test(() => {
let didCallHandler = false;
let wasBubbles = false;
let wasCancelable = true;
let form = populateForm();
document.addEventListener('formdata', e => {
didCallHandler = true;
wasBubbles = e.bubbles;
wasCancelable = e.cancelable;
});
new FormData(form);
assert_true(didCallHandler);
assert_true(wasBubbles);
assert_false(wasCancelable);
}, '"formdata" event bubbles, and is not cancelable.');
test(() => {
let didCallHandler = false;
let form = populateForm();
let orphanRoot = document.createElement('div');
orphanRoot.appendChild(form);
orphanRoot.addEventListener('formdata', e => {
didCallHandler = true;
});
new FormData(form);
assert_true(didCallHandler);
}, '"formdata" event bubbles in an orphan tree.');
test(() => {
let listener1ok = false;
let listeern2ok = false;
let form = populateForm('<input name=n1 value=v1>');
form.addEventListener('formdata', e => {
listener1ok = e.formData.get('n1') == 'v1';
e.formData.append('h1', 'vh1');
e.formData.append('h2', 'vh2');
});
form.addEventListener('formdata', e => {
if (e.formData.get('h1') == 'vh1' && e.formData.get('h2') == 'vh2')
listener2ok = true;
});
form.submit();
assert_true(listener1ok);
assert_true(listener2ok);
}, '"formData" IDL attribute should have entries for form-associated elements' +
' in the first event handler, and the second handler can read entries ' +
'set by the first handler.');
let t1 = async_test('Entries added to "formData" IDL attribute should be submitted.');
t1.step(() => {
let form = populateForm('<input name=n1 value=v1>');
form.addEventListener('formdata', e => {
e.formData.append('h1', 'vh1');
});
let iframe = form.previousSibling;
iframe.onload = t1.step_func_done(() => {
assert_true(iframe.contentWindow.location.search.indexOf('n1=v1&h1=vh1') != -1);
});
form.submit();
});
</script>

View file

@ -0,0 +1,39 @@
<!DOCTYPE html>
<link rel="help" href="https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#form-submission-algorithm">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="./resources/targetted-form.js"></script>
<body>
<script>
test(() => {
let form = populateForm('<input name=n10 value=v10>');
let counter = 0;
form.addEventListener('formdata', e => {
++counter;
form.submit();
});
form.submit();
assert_equals(counter, 1);
new FormData(form);
assert_equals(counter, 2);
}, 'If constructing entry list flag of form is true, then return');
let test10 = async_test('Cannot navigate (after constructing the entry list)');
test10.step(() => {
let form = populateForm('<input name=n1 value=v1>');
form.onformdata = (e) => { e.target.remove(); };
let wasLoaded = false;
let iframe = form.previousSibling;
// Request to load '/common/dummy.xhtml', and immediately submit the form to
// the same frame. If the form submission is aborted, the first request
// will be completed.
iframe.onload = test10.step_func_done(() => {
wasLoaded = true;
assert_true(iframe.contentWindow.location.search.indexOf('n1=v1') == -1);
});
iframe.src = '/common/dummy.xhtml';
assert_false(wasLoaded, 'Make sure the first loading is ongoing.');
form.submit();
});
</script>
</body>

View file

@ -0,0 +1,13 @@
let frameCounter = 0;
function populateForm(optionalContentHtml) {
if (!optionalContentHtml)
optionalContentHtml = '';
document.body.insertAdjacentHTML(
'afterbegin',
`<iframe name="form-test-target-${frameCounter}"></iframe>` +
`<form action="/common/blank.html" target="` +
`form-test-target-${frameCounter}">${optionalContentHtml}</form>`);
++frameCounter;
return document.body.firstChild.nextSibling;
}

View file

@ -3,9 +3,9 @@
<title>execCommand() should only trigger 'input'</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<p id="txt" contenteditable></p>
<div id="txt" contenteditable></div>
<script>
test(function() {
(function() {
let lastBeforeInputType = '';
let lastInputType = '';
const txt = document.getElementById('txt');
@ -22,24 +22,41 @@ test(function() {
const NO_INPUT_EVENT_FIRED = 'NO_INPUT_EVENT_FIRED';
function testExecCommandInputType(command, args, inputType) {
const description = `Calling execCommand("${command}", false, ${args})`;
test(function() {
lastBeforeInputType = NO_INPUT_EVENT_FIRED;
lastInputType = NO_INPUT_EVENT_FIRED;
try {
document.execCommand(command, false, args);
assert_equals(lastBeforeInputType, NO_INPUT_EVENT_FIRED, `execCommand(${command}, false, ${args}) shouldn't fire beforeinput`);
assert_equals(lastInputType, inputType, `execCommand(${command}, false, ${args}) should produce inputType: ${inputType}`);
} catch (e) {
assert(false, `execCommand shouldn't cause any exception: ${e}`);
}
assert_equals(lastBeforeInputType, NO_INPUT_EVENT_FIRED,
`${description} shouldn't fire beforeinput`);
assert_equals(lastInputType, inputType,
`${description} should produce inputType: ${inputType}`);
}, description);
}
txt.focus();
// InsertText
testExecCommandInputType('insertText', 'a', 'insertText');
testExecCommandInputType('insertText', 'bc', 'insertText');
test(function() {
assert_equals(txt.innerHTML, 'abc');
}, "execCommand(\"insertText\") should insert \"abc\" into the editor");
testExecCommandInputType('insertOrderedList', null, 'insertOrderedList');
test(function() {
assert_equals(txt.innerHTML, '<ol><li>abc</li></ol>');
}, "execCommand(\"insertOrderedList\") should make <ol> and wrap the text with it");
testExecCommandInputType('insertUnorderedList', null, 'insertUnorderedList');
test(function() {
assert_equals(txt.innerHTML, '<ul><li>abc</li></ul>');
}, "execCommand(\"insertUnorderedList\") should make <ul> and wrap the text with it");
testExecCommandInputType('insertLineBreak', null, 'insertLineBreak');
testExecCommandInputType('insertParagraph', null, 'insertParagraph');
txt.innerHTML = '';
testExecCommandInputType('insertHorizontalRule', null, 'insertHorizontalRule');
// Styling
txt.innerHTML = 'abc';
@ -47,40 +64,84 @@ test(function() {
selection.collapse(txt, 0);
selection.extend(txt, 1);
testExecCommandInputType('bold', null, 'formatBold');
test(function() {
assert_equals(txt.innerHTML, '<b>abc</b>');
}, "execCommand(\"bold\") should wrap selected text with <b> element");
testExecCommandInputType('italic', null, 'formatItalic');
test(function() {
assert_equals(txt.innerHTML, '<b><i>abc</i></b>');
}, "execCommand(\"italic\") should wrap selected text with <i> element");
testExecCommandInputType('underline', null, 'formatUnderline');
test(function() {
assert_equals(txt.innerHTML, '<b><i><u>abc</u></i></b>');
}, "execCommand(\"underline\") should wrap selected text with <u> element");
testExecCommandInputType('strikeThrough', null, 'formatStrikeThrough');
test(function() {
assert_equals(txt.innerHTML, '<b><i><u><strike>abc</strike></u></i></b>');
}, "execCommand(\"strikeThrough\") should wrap selected text with <strike> element");
testExecCommandInputType('superscript', null, 'formatSuperscript');
test(function() {
assert_equals(txt.innerHTML, '<b><i><u><strike><sup>abc</sup></strike></u></i></b>');
}, "execCommand(\"superscript\") should wrap selected text with <sup> element");
testExecCommandInputType('subscript', null, 'formatSubscript');
test(function() {
assert_equals(txt.innerHTML, '<b><i><u><strike><sub>abc</sub></strike></u></i></b>');
}, "execCommand(\"subscript\") should wrap selected text with <sub> element");
txt.innerHTML = 'abc';
selection.collapse(txt, 0);
selection.extend(txt, 1);
testExecCommandInputType('backColor', '#000000', 'formatBackColor');
testExecCommandInputType('foreColor', '#FFFFFF', 'formatFontColor');
testExecCommandInputType('hiliteColor', '#FFFF00', 'formatBackColor');
testExecCommandInputType('fontName', 'monospace', 'formatFontName');
// Formating
txt.innerHTML = 'abc';
testExecCommandInputType('justifyCenter', null, 'formatJustifyCenter');
test(function() {
assert_equals(txt.innerHTML, '<div style="text-align: center;">abc</div>');
}, "execCommand(\"justifyCenter\") should wrap the text with <div> element whose text-align is center");
testExecCommandInputType('justifyFull', null, 'formatJustifyFull');
test(function() {
assert_equals(txt.innerHTML, '<div style="text-align: justify;">abc</div>');
}, "execCommand(\"justifyFull\") should wrap the text with <div> element whose text-align is justify");
testExecCommandInputType('justifyRight', null, 'formatJustifyRight');
test(function() {
assert_equals(txt.innerHTML, '<div style="text-align: right;">abc</div>');
}, "execCommand(\"justifyRight\") should wrap the text with <div> element whose text-align is right");
testExecCommandInputType('justifyLeft', null, 'formatJustifyLeft');
test(function() {
assert_equals(txt.innerHTML, '<div style="text-align: left;">abc</div>');
}, "execCommand(\"justifyLeft\") should wrap the text with <div> element whose text-align is left");
selection.collapse(txt, 0);
selection.extend(txt, 1);
testExecCommandInputType('removeFormat', null, 'formatRemove');
test(function() {
assert_equals(txt.innerHTML, '<div style="">abc</div>');
}, "execCommand(\"removeFormat\") should remove the style of current block");
testExecCommandInputType('indent', null, 'formatIndent');
testExecCommandInputType('outdent', null, 'formatOutdent');
test(function() {
assert_equals(txt.innerHTML, '<div style="">abc</div>');
}, "Set of execCommand(\"indent\") and execCommand(\"outdent\") should keep same DOM tree");
// Copy shouldn't fire 'input'.
testExecCommandInputType('copy', null, NO_INPUT_EVENT_FIRED);
// Cut/Paste should fire 'input'.
testExecCommandInputType('cut', null, 'deleteByCut');
testExecCommandInputType('paste', null, 'insertFromPaste');
});
// Link and Unlink
txt.innerHTML = 'abc';
selection.collapse(txt.firstChild, 1);
selection.extend(txt.firstChild, 2);
testExecCommandInputType('createLink', 'https://example.com/', 'insertLink');
test(function() {
assert_equals(txt.innerHTML, 'a<a href="https://example.com/">b</a>c');
}, "execCommand(\"createLink\") should create a link");
testExecCommandInputType('unlink', null, '');
test(function() {
assert_equals(txt.innerHTML, 'abc');
}, "execCommand(\"createLink\") should remove the link");
})();
</script>

View file

@ -1081,6 +1081,16 @@ interface ValidityState {
readonly attribute boolean valid;
};
[Exposed=Window,
Constructor(DOMString type, optional FormDataEventInit eventInitDict)]
interface FormDataEvent : Event {
readonly attribute FormData formData;
};
dictionary FormDataEventInit : EventInit {
required FormData formData;
};
[Exposed=Window,
HTMLConstructor]
interface HTMLDetailsElement : HTMLElement {
@ -1735,6 +1745,7 @@ interface mixin GlobalEventHandlers {
attribute EventHandler onended;
attribute OnErrorEventHandler onerror;
attribute EventHandler onfocus;
attribute EventHandler onformdata;
attribute EventHandler oninput;
attribute EventHandler oninvalid;
attribute EventHandler onkeydown;

View file

@ -0,0 +1,263 @@
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
'use strict';
(function() {
var mojomId = 'mojo/public/mojom/base/big_buffer.mojom';
if (mojo.internal.isMojomLoaded(mojomId)) {
console.warn('The following mojom is loaded multiple times: ' + mojomId);
return;
}
mojo.internal.markMojomLoaded(mojomId);
var bindings = mojo;
var associatedBindings = mojo;
var codec = mojo.internal;
var validator = mojo.internal;
var exports = mojo.internal.exposeNamespace('mojoBase.mojom');
function BigBufferSharedMemoryRegion(values) {
this.initDefaults_();
this.initFields_(values);
}
BigBufferSharedMemoryRegion.prototype.initDefaults_ = function() {
this.bufferHandle = null;
this.size = 0;
};
BigBufferSharedMemoryRegion.prototype.initFields_ = function(fields) {
for(var field in fields) {
if (this.hasOwnProperty(field))
this[field] = fields[field];
}
};
BigBufferSharedMemoryRegion.validate = function(messageValidator, offset) {
var err;
err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
if (err !== validator.validationError.NONE)
return err;
var kVersionSizes = [
{version: 0, numBytes: 16}
];
err = messageValidator.validateStructVersion(offset, kVersionSizes);
if (err !== validator.validationError.NONE)
return err;
// validate BigBufferSharedMemoryRegion.bufferHandle
err = messageValidator.validateHandle(offset + codec.kStructHeaderSize + 0, false)
if (err !== validator.validationError.NONE)
return err;
return validator.validationError.NONE;
};
BigBufferSharedMemoryRegion.encodedSize = codec.kStructHeaderSize + 8;
BigBufferSharedMemoryRegion.decode = function(decoder) {
var packed;
var val = new BigBufferSharedMemoryRegion();
var numberOfBytes = decoder.readUint32();
var version = decoder.readUint32();
val.bufferHandle = decoder.decodeStruct(codec.Handle);
val.size = decoder.decodeStruct(codec.Uint32);
return val;
};
BigBufferSharedMemoryRegion.encode = function(encoder, val) {
var packed;
encoder.writeUint32(BigBufferSharedMemoryRegion.encodedSize);
encoder.writeUint32(0);
encoder.encodeStruct(codec.Handle, val.bufferHandle);
encoder.encodeStruct(codec.Uint32, val.size);
};
function BigBuffer(value) {
this.initDefault_();
this.initValue_(value);
}
BigBuffer.Tags = {
bytes: 0,
sharedMemory: 1,
invalidBuffer: 2,
};
BigBuffer.prototype.initDefault_ = function() {
this.$data = null;
this.$tag = undefined;
}
BigBuffer.prototype.initValue_ = function(value) {
if (value == undefined) {
return;
}
var keys = Object.keys(value);
if (keys.length == 0) {
return;
}
if (keys.length > 1) {
throw new TypeError("You may set only one member on a union.");
}
var fields = [
"bytes",
"sharedMemory",
"invalidBuffer",
];
if (fields.indexOf(keys[0]) < 0) {
throw new ReferenceError(keys[0] + " is not a BigBuffer member.");
}
this[keys[0]] = value[keys[0]];
}
Object.defineProperty(BigBuffer.prototype, "bytes", {
get: function() {
if (this.$tag != BigBuffer.Tags.bytes) {
throw new ReferenceError(
"BigBuffer.bytes is not currently set.");
}
return this.$data;
},
set: function(value) {
this.$tag = BigBuffer.Tags.bytes;
this.$data = value;
}
});
Object.defineProperty(BigBuffer.prototype, "sharedMemory", {
get: function() {
if (this.$tag != BigBuffer.Tags.sharedMemory) {
throw new ReferenceError(
"BigBuffer.sharedMemory is not currently set.");
}
return this.$data;
},
set: function(value) {
this.$tag = BigBuffer.Tags.sharedMemory;
this.$data = value;
}
});
Object.defineProperty(BigBuffer.prototype, "invalidBuffer", {
get: function() {
if (this.$tag != BigBuffer.Tags.invalidBuffer) {
throw new ReferenceError(
"BigBuffer.invalidBuffer is not currently set.");
}
return this.$data;
},
set: function(value) {
this.$tag = BigBuffer.Tags.invalidBuffer;
this.$data = value;
}
});
BigBuffer.encode = function(encoder, val) {
if (val == null) {
encoder.writeUint64(0);
encoder.writeUint64(0);
return;
}
if (val.$tag == undefined) {
throw new TypeError("Cannot encode unions with an unknown member set.");
}
encoder.writeUint32(16);
encoder.writeUint32(val.$tag);
switch (val.$tag) {
case BigBuffer.Tags.bytes:
encoder.encodeArrayPointer(codec.Uint8, val.bytes);
break;
case BigBuffer.Tags.sharedMemory:
encoder.encodeStructPointer(BigBufferSharedMemoryRegion, val.sharedMemory);
break;
case BigBuffer.Tags.invalidBuffer:
encoder.writeUint8(val.invalidBuffer ? 1 : 0);
break;
}
encoder.align();
};
BigBuffer.decode = function(decoder) {
var size = decoder.readUint32();
if (size == 0) {
decoder.readUint32();
decoder.readUint64();
return null;
}
var result = new BigBuffer();
var tag = decoder.readUint32();
switch (tag) {
case BigBuffer.Tags.bytes:
result.bytes = decoder.decodeArrayPointer(codec.Uint8);
break;
case BigBuffer.Tags.sharedMemory:
result.sharedMemory = decoder.decodeStructPointer(BigBufferSharedMemoryRegion);
break;
case BigBuffer.Tags.invalidBuffer:
result.invalidBuffer = decoder.readUint8() ? true : false;
break;
}
decoder.align();
return result;
};
BigBuffer.validate = function(messageValidator, offset) {
var size = messageValidator.decodeUnionSize(offset);
if (size != 16) {
return validator.validationError.INVALID_UNION_SIZE;
}
var tag = messageValidator.decodeUnionTag(offset);
var data_offset = offset + 8;
var err;
switch (tag) {
case BigBuffer.Tags.bytes:
// validate BigBuffer.bytes
err = messageValidator.validateArrayPointer(data_offset, 1, codec.Uint8, false, [0], 0);
if (err !== validator.validationError.NONE)
return err;
break;
case BigBuffer.Tags.sharedMemory:
// validate BigBuffer.sharedMemory
err = messageValidator.validateStructPointer(data_offset, BigBufferSharedMemoryRegion, false);
if (err !== validator.validationError.NONE)
return err;
break;
case BigBuffer.Tags.invalidBuffer:
break;
}
return validator.validationError.NONE;
};
BigBuffer.encodedSize = 16;
exports.BigBufferSharedMemoryRegion = BigBufferSharedMemoryRegion;
exports.BigBuffer = BigBuffer;
})();

View file

@ -0,0 +1 @@
Content-Type: text/javascript; charset=utf-8

View file

@ -18,7 +18,7 @@
var exports = mojo.internal.exposeNamespace('device.mojom');
var string16$ =
mojo.internal.exposeNamespace('mojo.common.mojom');
mojo.internal.exposeNamespace('mojoBase.mojom');
if (mojo.config.autoLoadMojomDeps) {
mojo.internal.loadMojomIfNecessary(
'mojo/public/mojom/base/string16.mojom', '../../../../mojo/public/mojom/base/string16.mojom.js');
@ -35,6 +35,8 @@
UsbOpenDeviceError.OK = 0;
UsbOpenDeviceError.ACCESS_DENIED = UsbOpenDeviceError.OK + 1;
UsbOpenDeviceError.ALREADY_OPEN = UsbOpenDeviceError.ACCESS_DENIED + 1;
UsbOpenDeviceError.MIN_VALUE = 0,
UsbOpenDeviceError.MAX_VALUE = 2,
UsbOpenDeviceError.isKnownEnumValue = function(value) {
switch (value) {
@ -56,6 +58,8 @@
var UsbTransferDirection = {};
UsbTransferDirection.INBOUND = 0;
UsbTransferDirection.OUTBOUND = UsbTransferDirection.INBOUND + 1;
UsbTransferDirection.MIN_VALUE = 0,
UsbTransferDirection.MAX_VALUE = 1,
UsbTransferDirection.isKnownEnumValue = function(value) {
switch (value) {
@ -78,6 +82,8 @@
UsbControlTransferType.CLASS = UsbControlTransferType.STANDARD + 1;
UsbControlTransferType.VENDOR = UsbControlTransferType.CLASS + 1;
UsbControlTransferType.RESERVED = UsbControlTransferType.VENDOR + 1;
UsbControlTransferType.MIN_VALUE = 0,
UsbControlTransferType.MAX_VALUE = 3,
UsbControlTransferType.isKnownEnumValue = function(value) {
switch (value) {
@ -102,6 +108,8 @@
UsbControlTransferRecipient.INTERFACE = UsbControlTransferRecipient.DEVICE + 1;
UsbControlTransferRecipient.ENDPOINT = UsbControlTransferRecipient.INTERFACE + 1;
UsbControlTransferRecipient.OTHER = UsbControlTransferRecipient.ENDPOINT + 1;
UsbControlTransferRecipient.MIN_VALUE = 0,
UsbControlTransferRecipient.MAX_VALUE = 3,
UsbControlTransferRecipient.isKnownEnumValue = function(value) {
switch (value) {
@ -126,6 +134,8 @@
UsbTransferType.ISOCHRONOUS = UsbTransferType.CONTROL + 1;
UsbTransferType.BULK = UsbTransferType.ISOCHRONOUS + 1;
UsbTransferType.INTERRUPT = UsbTransferType.BULK + 1;
UsbTransferType.MIN_VALUE = 0,
UsbTransferType.MAX_VALUE = 3,
UsbTransferType.isKnownEnumValue = function(value) {
switch (value) {
@ -155,6 +165,8 @@
UsbTransferStatus.BABBLE = UsbTransferStatus.DISCONNECT + 1;
UsbTransferStatus.SHORT_PACKET = UsbTransferStatus.BABBLE + 1;
UsbTransferStatus.PERMISSION_DENIED = UsbTransferStatus.SHORT_PACKET + 1;
UsbTransferStatus.MIN_VALUE = 0,
UsbTransferStatus.MAX_VALUE = 8,
UsbTransferStatus.isKnownEnumValue = function(value) {
switch (value) {
@ -516,6 +528,8 @@
this.subclassCode = 0;
this.protocolCode = 0;
this.vendorId = 0;
this.busNumber = 0;
this.portNumber = 0;
this.productId = 0;
this.deviceVersionMajor = 0;
this.deviceVersionMinor = 0;
@ -541,7 +555,7 @@
return err;
var kVersionSizes = [
{version: 0, numBytes: 72}
{version: 0, numBytes: 80}
];
err = messageValidator.validateStructVersion(offset, kVersionSizes);
if (err !== validator.validationError.NONE)
@ -565,40 +579,42 @@
// validate UsbDeviceInfo.manufacturerName
err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 24, string16$.String16, true);
if (err !== validator.validationError.NONE)
return err;
// validate UsbDeviceInfo.productName
err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 32, string16$.String16, true);
if (err !== validator.validationError.NONE)
return err;
// validate UsbDeviceInfo.serialNumber
// validate UsbDeviceInfo.productName
err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 40, string16$.String16, true);
if (err !== validator.validationError.NONE)
return err;
// validate UsbDeviceInfo.serialNumber
err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 48, string16$.String16, true);
if (err !== validator.validationError.NONE)
return err;
// validate UsbDeviceInfo.webusbLandingPage
err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 48, url$.Url, true);
err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 56, url$.Url, true);
if (err !== validator.validationError.NONE)
return err;
// validate UsbDeviceInfo.configurations
err = messageValidator.validateArrayPointer(offset + codec.kStructHeaderSize + 56, 8, new codec.PointerTo(UsbConfigurationInfo), false, [0], 0);
err = messageValidator.validateArrayPointer(offset + codec.kStructHeaderSize + 64, 8, new codec.PointerTo(UsbConfigurationInfo), false, [0], 0);
if (err !== validator.validationError.NONE)
return err;
return validator.validationError.NONE;
};
UsbDeviceInfo.encodedSize = codec.kStructHeaderSize + 64;
UsbDeviceInfo.encodedSize = codec.kStructHeaderSize + 72;
UsbDeviceInfo.decode = function(decoder) {
var packed;
@ -613,6 +629,8 @@
val.subclassCode = decoder.decodeStruct(codec.Uint8);
val.protocolCode = decoder.decodeStruct(codec.Uint8);
val.vendorId = decoder.decodeStruct(codec.Uint16);
val.busNumber = decoder.decodeStruct(codec.Uint32);
val.portNumber = decoder.decodeStruct(codec.Uint32);
val.productId = decoder.decodeStruct(codec.Uint16);
val.deviceVersionMajor = decoder.decodeStruct(codec.Uint8);
val.deviceVersionMinor = decoder.decodeStruct(codec.Uint8);
@ -640,6 +658,8 @@
encoder.encodeStruct(codec.Uint8, val.subclassCode);
encoder.encodeStruct(codec.Uint8, val.protocolCode);
encoder.encodeStruct(codec.Uint16, val.vendorId);
encoder.encodeStruct(codec.Uint32, val.busNumber);
encoder.encodeStruct(codec.Uint32, val.portNumber);
encoder.encodeStruct(codec.Uint16, val.productId);
encoder.encodeStruct(codec.Uint8, val.deviceVersionMajor);
encoder.encodeStruct(codec.Uint8, val.deviceVersionMinor);

View file

@ -0,0 +1,184 @@
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
'use strict';
(function() {
var mojomId = 'device/usb/public/mojom/device_enumeration_options.mojom';
if (mojo.internal.isMojomLoaded(mojomId)) {
console.warn('The following mojom is loaded multiple times: ' + mojomId);
return;
}
mojo.internal.markMojomLoaded(mojomId);
var bindings = mojo;
var associatedBindings = mojo;
var codec = mojo.internal;
var validator = mojo.internal;
var exports = mojo.internal.exposeNamespace('device.mojom');
var string16$ =
mojo.internal.exposeNamespace('mojoBase.mojom');
if (mojo.config.autoLoadMojomDeps) {
mojo.internal.loadMojomIfNecessary(
'mojo/public/mojom/base/string16.mojom', '../../../../mojo/public/mojom/base/string16.mojom.js');
}
function UsbDeviceFilter(values) {
this.initDefaults_();
this.initFields_(values);
}
UsbDeviceFilter.prototype.initDefaults_ = function() {
this.hasVendorId = false;
this.hasProductId = false;
this.hasClassCode = false;
this.hasSubclassCode = false;
this.hasProtocolCode = false;
this.classCode = 0;
this.vendorId = 0;
this.productId = 0;
this.subclassCode = 0;
this.protocolCode = 0;
this.serialNumber = null;
};
UsbDeviceFilter.prototype.initFields_ = function(fields) {
for(var field in fields) {
if (this.hasOwnProperty(field))
this[field] = fields[field];
}
};
UsbDeviceFilter.validate = function(messageValidator, offset) {
var err;
err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
if (err !== validator.validationError.NONE)
return err;
var kVersionSizes = [
{version: 0, numBytes: 24}
];
err = messageValidator.validateStructVersion(offset, kVersionSizes);
if (err !== validator.validationError.NONE)
return err;
// validate UsbDeviceFilter.serialNumber
err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 8, string16$.String16, true);
if (err !== validator.validationError.NONE)
return err;
return validator.validationError.NONE;
};
UsbDeviceFilter.encodedSize = codec.kStructHeaderSize + 16;
UsbDeviceFilter.decode = function(decoder) {
var packed;
var val = new UsbDeviceFilter();
var numberOfBytes = decoder.readUint32();
var version = decoder.readUint32();
packed = decoder.readUint8();
val.hasVendorId = (packed >> 0) & 1 ? true : false;
val.hasProductId = (packed >> 1) & 1 ? true : false;
val.hasClassCode = (packed >> 2) & 1 ? true : false;
val.hasSubclassCode = (packed >> 3) & 1 ? true : false;
val.hasProtocolCode = (packed >> 4) & 1 ? true : false;
val.classCode = decoder.decodeStruct(codec.Uint8);
val.vendorId = decoder.decodeStruct(codec.Uint16);
val.productId = decoder.decodeStruct(codec.Uint16);
val.subclassCode = decoder.decodeStruct(codec.Uint8);
val.protocolCode = decoder.decodeStruct(codec.Uint8);
val.serialNumber = decoder.decodeStructPointer(string16$.String16);
return val;
};
UsbDeviceFilter.encode = function(encoder, val) {
var packed;
encoder.writeUint32(UsbDeviceFilter.encodedSize);
encoder.writeUint32(0);
packed = 0;
packed |= (val.hasVendorId & 1) << 0
packed |= (val.hasProductId & 1) << 1
packed |= (val.hasClassCode & 1) << 2
packed |= (val.hasSubclassCode & 1) << 3
packed |= (val.hasProtocolCode & 1) << 4
encoder.writeUint8(packed);
encoder.encodeStruct(codec.Uint8, val.classCode);
encoder.encodeStruct(codec.Uint16, val.vendorId);
encoder.encodeStruct(codec.Uint16, val.productId);
encoder.encodeStruct(codec.Uint8, val.subclassCode);
encoder.encodeStruct(codec.Uint8, val.protocolCode);
encoder.encodeStructPointer(string16$.String16, val.serialNumber);
};
function UsbEnumerationOptions(values) {
this.initDefaults_();
this.initFields_(values);
}
UsbEnumerationOptions.prototype.initDefaults_ = function() {
this.filters = null;
};
UsbEnumerationOptions.prototype.initFields_ = function(fields) {
for(var field in fields) {
if (this.hasOwnProperty(field))
this[field] = fields[field];
}
};
UsbEnumerationOptions.validate = function(messageValidator, offset) {
var err;
err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
if (err !== validator.validationError.NONE)
return err;
var kVersionSizes = [
{version: 0, numBytes: 16}
];
err = messageValidator.validateStructVersion(offset, kVersionSizes);
if (err !== validator.validationError.NONE)
return err;
// validate UsbEnumerationOptions.filters
err = messageValidator.validateArrayPointer(offset + codec.kStructHeaderSize + 0, 8, new codec.PointerTo(UsbDeviceFilter), false, [0], 0);
if (err !== validator.validationError.NONE)
return err;
return validator.validationError.NONE;
};
UsbEnumerationOptions.encodedSize = codec.kStructHeaderSize + 8;
UsbEnumerationOptions.decode = function(decoder) {
var packed;
var val = new UsbEnumerationOptions();
var numberOfBytes = decoder.readUint32();
var version = decoder.readUint32();
val.filters = decoder.decodeArrayPointer(new codec.PointerTo(UsbDeviceFilter));
return val;
};
UsbEnumerationOptions.encode = function(encoder, val) {
var packed;
encoder.writeUint32(UsbEnumerationOptions.encodedSize);
encoder.writeUint32(0);
encoder.encodeArrayPointer(new codec.PointerTo(UsbDeviceFilter), val.filters);
};
exports.UsbDeviceFilter = UsbDeviceFilter;
exports.UsbEnumerationOptions = UsbEnumerationOptions;
})();

View file

@ -0,0 +1 @@
Content-Type: text/javascript; charset=utf-8

View file

@ -1,843 +0,0 @@
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
'use strict';
(function() {
var mojomId = 'device/usb/public/mojom/device_manager.mojom';
if (mojo.internal.isMojomLoaded(mojomId)) {
console.warn('The following mojom is loaded multiple times: ' + mojomId);
return;
}
mojo.internal.markMojomLoaded(mojomId);
var bindings = mojo;
var associatedBindings = mojo;
var codec = mojo.internal;
var validator = mojo.internal;
var exports = mojo.internal.exposeNamespace('device.mojom');
var device$ =
mojo.internal.exposeNamespace('device.mojom');
if (mojo.config.autoLoadMojomDeps) {
mojo.internal.loadMojomIfNecessary(
'device/usb/public/mojom/device.mojom', 'device.mojom.js');
}
var string16$ =
mojo.internal.exposeNamespace('mojo.common.mojom');
if (mojo.config.autoLoadMojomDeps) {
mojo.internal.loadMojomIfNecessary(
'mojo/public/mojom/base/string16.mojom', '../../../../mojo/public/mojom/base/string16.mojom.js');
}
function UsbDeviceFilter(values) {
this.initDefaults_();
this.initFields_(values);
}
UsbDeviceFilter.prototype.initDefaults_ = function() {
this.hasVendorId = false;
this.hasProductId = false;
this.hasClassCode = false;
this.hasSubclassCode = false;
this.hasProtocolCode = false;
this.classCode = 0;
this.vendorId = 0;
this.productId = 0;
this.subclassCode = 0;
this.protocolCode = 0;
this.serialNumber = null;
};
UsbDeviceFilter.prototype.initFields_ = function(fields) {
for(var field in fields) {
if (this.hasOwnProperty(field))
this[field] = fields[field];
}
};
UsbDeviceFilter.validate = function(messageValidator, offset) {
var err;
err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
if (err !== validator.validationError.NONE)
return err;
var kVersionSizes = [
{version: 0, numBytes: 24}
];
err = messageValidator.validateStructVersion(offset, kVersionSizes);
if (err !== validator.validationError.NONE)
return err;
// validate UsbDeviceFilter.serialNumber
err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 8, string16$.String16, true);
if (err !== validator.validationError.NONE)
return err;
return validator.validationError.NONE;
};
UsbDeviceFilter.encodedSize = codec.kStructHeaderSize + 16;
UsbDeviceFilter.decode = function(decoder) {
var packed;
var val = new UsbDeviceFilter();
var numberOfBytes = decoder.readUint32();
var version = decoder.readUint32();
packed = decoder.readUint8();
val.hasVendorId = (packed >> 0) & 1 ? true : false;
val.hasProductId = (packed >> 1) & 1 ? true : false;
val.hasClassCode = (packed >> 2) & 1 ? true : false;
val.hasSubclassCode = (packed >> 3) & 1 ? true : false;
val.hasProtocolCode = (packed >> 4) & 1 ? true : false;
val.classCode = decoder.decodeStruct(codec.Uint8);
val.vendorId = decoder.decodeStruct(codec.Uint16);
val.productId = decoder.decodeStruct(codec.Uint16);
val.subclassCode = decoder.decodeStruct(codec.Uint8);
val.protocolCode = decoder.decodeStruct(codec.Uint8);
val.serialNumber = decoder.decodeStructPointer(string16$.String16);
return val;
};
UsbDeviceFilter.encode = function(encoder, val) {
var packed;
encoder.writeUint32(UsbDeviceFilter.encodedSize);
encoder.writeUint32(0);
packed = 0;
packed |= (val.hasVendorId & 1) << 0
packed |= (val.hasProductId & 1) << 1
packed |= (val.hasClassCode & 1) << 2
packed |= (val.hasSubclassCode & 1) << 3
packed |= (val.hasProtocolCode & 1) << 4
encoder.writeUint8(packed);
encoder.encodeStruct(codec.Uint8, val.classCode);
encoder.encodeStruct(codec.Uint16, val.vendorId);
encoder.encodeStruct(codec.Uint16, val.productId);
encoder.encodeStruct(codec.Uint8, val.subclassCode);
encoder.encodeStruct(codec.Uint8, val.protocolCode);
encoder.encodeStructPointer(string16$.String16, val.serialNumber);
};
function UsbEnumerationOptions(values) {
this.initDefaults_();
this.initFields_(values);
}
UsbEnumerationOptions.prototype.initDefaults_ = function() {
this.filters = null;
};
UsbEnumerationOptions.prototype.initFields_ = function(fields) {
for(var field in fields) {
if (this.hasOwnProperty(field))
this[field] = fields[field];
}
};
UsbEnumerationOptions.validate = function(messageValidator, offset) {
var err;
err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
if (err !== validator.validationError.NONE)
return err;
var kVersionSizes = [
{version: 0, numBytes: 16}
];
err = messageValidator.validateStructVersion(offset, kVersionSizes);
if (err !== validator.validationError.NONE)
return err;
// validate UsbEnumerationOptions.filters
err = messageValidator.validateArrayPointer(offset + codec.kStructHeaderSize + 0, 8, new codec.PointerTo(UsbDeviceFilter), false, [0], 0);
if (err !== validator.validationError.NONE)
return err;
return validator.validationError.NONE;
};
UsbEnumerationOptions.encodedSize = codec.kStructHeaderSize + 8;
UsbEnumerationOptions.decode = function(decoder) {
var packed;
var val = new UsbEnumerationOptions();
var numberOfBytes = decoder.readUint32();
var version = decoder.readUint32();
val.filters = decoder.decodeArrayPointer(new codec.PointerTo(UsbDeviceFilter));
return val;
};
UsbEnumerationOptions.encode = function(encoder, val) {
var packed;
encoder.writeUint32(UsbEnumerationOptions.encodedSize);
encoder.writeUint32(0);
encoder.encodeArrayPointer(new codec.PointerTo(UsbDeviceFilter), val.filters);
};
function UsbDeviceManager_GetDevices_Params(values) {
this.initDefaults_();
this.initFields_(values);
}
UsbDeviceManager_GetDevices_Params.prototype.initDefaults_ = function() {
this.options = null;
};
UsbDeviceManager_GetDevices_Params.prototype.initFields_ = function(fields) {
for(var field in fields) {
if (this.hasOwnProperty(field))
this[field] = fields[field];
}
};
UsbDeviceManager_GetDevices_Params.validate = function(messageValidator, offset) {
var err;
err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
if (err !== validator.validationError.NONE)
return err;
var kVersionSizes = [
{version: 0, numBytes: 16}
];
err = messageValidator.validateStructVersion(offset, kVersionSizes);
if (err !== validator.validationError.NONE)
return err;
// validate UsbDeviceManager_GetDevices_Params.options
err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 0, UsbEnumerationOptions, true);
if (err !== validator.validationError.NONE)
return err;
return validator.validationError.NONE;
};
UsbDeviceManager_GetDevices_Params.encodedSize = codec.kStructHeaderSize + 8;
UsbDeviceManager_GetDevices_Params.decode = function(decoder) {
var packed;
var val = new UsbDeviceManager_GetDevices_Params();
var numberOfBytes = decoder.readUint32();
var version = decoder.readUint32();
val.options = decoder.decodeStructPointer(UsbEnumerationOptions);
return val;
};
UsbDeviceManager_GetDevices_Params.encode = function(encoder, val) {
var packed;
encoder.writeUint32(UsbDeviceManager_GetDevices_Params.encodedSize);
encoder.writeUint32(0);
encoder.encodeStructPointer(UsbEnumerationOptions, val.options);
};
function UsbDeviceManager_GetDevices_ResponseParams(values) {
this.initDefaults_();
this.initFields_(values);
}
UsbDeviceManager_GetDevices_ResponseParams.prototype.initDefaults_ = function() {
this.results = null;
};
UsbDeviceManager_GetDevices_ResponseParams.prototype.initFields_ = function(fields) {
for(var field in fields) {
if (this.hasOwnProperty(field))
this[field] = fields[field];
}
};
UsbDeviceManager_GetDevices_ResponseParams.validate = function(messageValidator, offset) {
var err;
err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
if (err !== validator.validationError.NONE)
return err;
var kVersionSizes = [
{version: 0, numBytes: 16}
];
err = messageValidator.validateStructVersion(offset, kVersionSizes);
if (err !== validator.validationError.NONE)
return err;
// validate UsbDeviceManager_GetDevices_ResponseParams.results
err = messageValidator.validateArrayPointer(offset + codec.kStructHeaderSize + 0, 8, new codec.PointerTo(device$.UsbDeviceInfo), false, [0], 0);
if (err !== validator.validationError.NONE)
return err;
return validator.validationError.NONE;
};
UsbDeviceManager_GetDevices_ResponseParams.encodedSize = codec.kStructHeaderSize + 8;
UsbDeviceManager_GetDevices_ResponseParams.decode = function(decoder) {
var packed;
var val = new UsbDeviceManager_GetDevices_ResponseParams();
var numberOfBytes = decoder.readUint32();
var version = decoder.readUint32();
val.results = decoder.decodeArrayPointer(new codec.PointerTo(device$.UsbDeviceInfo));
return val;
};
UsbDeviceManager_GetDevices_ResponseParams.encode = function(encoder, val) {
var packed;
encoder.writeUint32(UsbDeviceManager_GetDevices_ResponseParams.encodedSize);
encoder.writeUint32(0);
encoder.encodeArrayPointer(new codec.PointerTo(device$.UsbDeviceInfo), val.results);
};
function UsbDeviceManager_GetDevice_Params(values) {
this.initDefaults_();
this.initFields_(values);
}
UsbDeviceManager_GetDevice_Params.prototype.initDefaults_ = function() {
this.guid = null;
this.deviceRequest = new bindings.InterfaceRequest();
};
UsbDeviceManager_GetDevice_Params.prototype.initFields_ = function(fields) {
for(var field in fields) {
if (this.hasOwnProperty(field))
this[field] = fields[field];
}
};
UsbDeviceManager_GetDevice_Params.validate = function(messageValidator, offset) {
var err;
err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
if (err !== validator.validationError.NONE)
return err;
var kVersionSizes = [
{version: 0, numBytes: 24}
];
err = messageValidator.validateStructVersion(offset, kVersionSizes);
if (err !== validator.validationError.NONE)
return err;
// validate UsbDeviceManager_GetDevice_Params.guid
err = messageValidator.validateStringPointer(offset + codec.kStructHeaderSize + 0, false)
if (err !== validator.validationError.NONE)
return err;
// validate UsbDeviceManager_GetDevice_Params.deviceRequest
err = messageValidator.validateInterfaceRequest(offset + codec.kStructHeaderSize + 8, false)
if (err !== validator.validationError.NONE)
return err;
return validator.validationError.NONE;
};
UsbDeviceManager_GetDevice_Params.encodedSize = codec.kStructHeaderSize + 16;
UsbDeviceManager_GetDevice_Params.decode = function(decoder) {
var packed;
var val = new UsbDeviceManager_GetDevice_Params();
var numberOfBytes = decoder.readUint32();
var version = decoder.readUint32();
val.guid = decoder.decodeStruct(codec.String);
val.deviceRequest = decoder.decodeStruct(codec.InterfaceRequest);
decoder.skip(1);
decoder.skip(1);
decoder.skip(1);
decoder.skip(1);
return val;
};
UsbDeviceManager_GetDevice_Params.encode = function(encoder, val) {
var packed;
encoder.writeUint32(UsbDeviceManager_GetDevice_Params.encodedSize);
encoder.writeUint32(0);
encoder.encodeStruct(codec.String, val.guid);
encoder.encodeStruct(codec.InterfaceRequest, val.deviceRequest);
encoder.skip(1);
encoder.skip(1);
encoder.skip(1);
encoder.skip(1);
};
function UsbDeviceManager_SetClient_Params(values) {
this.initDefaults_();
this.initFields_(values);
}
UsbDeviceManager_SetClient_Params.prototype.initDefaults_ = function() {
this.client = new UsbDeviceManagerClientPtr();
};
UsbDeviceManager_SetClient_Params.prototype.initFields_ = function(fields) {
for(var field in fields) {
if (this.hasOwnProperty(field))
this[field] = fields[field];
}
};
UsbDeviceManager_SetClient_Params.validate = function(messageValidator, offset) {
var err;
err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
if (err !== validator.validationError.NONE)
return err;
var kVersionSizes = [
{version: 0, numBytes: 16}
];
err = messageValidator.validateStructVersion(offset, kVersionSizes);
if (err !== validator.validationError.NONE)
return err;
// validate UsbDeviceManager_SetClient_Params.client
err = messageValidator.validateInterface(offset + codec.kStructHeaderSize + 0, false);
if (err !== validator.validationError.NONE)
return err;
return validator.validationError.NONE;
};
UsbDeviceManager_SetClient_Params.encodedSize = codec.kStructHeaderSize + 8;
UsbDeviceManager_SetClient_Params.decode = function(decoder) {
var packed;
var val = new UsbDeviceManager_SetClient_Params();
var numberOfBytes = decoder.readUint32();
var version = decoder.readUint32();
val.client = decoder.decodeStruct(new codec.Interface(UsbDeviceManagerClientPtr));
return val;
};
UsbDeviceManager_SetClient_Params.encode = function(encoder, val) {
var packed;
encoder.writeUint32(UsbDeviceManager_SetClient_Params.encodedSize);
encoder.writeUint32(0);
encoder.encodeStruct(new codec.Interface(UsbDeviceManagerClientPtr), val.client);
};
function UsbDeviceManagerClient_OnDeviceAdded_Params(values) {
this.initDefaults_();
this.initFields_(values);
}
UsbDeviceManagerClient_OnDeviceAdded_Params.prototype.initDefaults_ = function() {
this.deviceInfo = null;
};
UsbDeviceManagerClient_OnDeviceAdded_Params.prototype.initFields_ = function(fields) {
for(var field in fields) {
if (this.hasOwnProperty(field))
this[field] = fields[field];
}
};
UsbDeviceManagerClient_OnDeviceAdded_Params.validate = function(messageValidator, offset) {
var err;
err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
if (err !== validator.validationError.NONE)
return err;
var kVersionSizes = [
{version: 0, numBytes: 16}
];
err = messageValidator.validateStructVersion(offset, kVersionSizes);
if (err !== validator.validationError.NONE)
return err;
// validate UsbDeviceManagerClient_OnDeviceAdded_Params.deviceInfo
err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 0, device$.UsbDeviceInfo, false);
if (err !== validator.validationError.NONE)
return err;
return validator.validationError.NONE;
};
UsbDeviceManagerClient_OnDeviceAdded_Params.encodedSize = codec.kStructHeaderSize + 8;
UsbDeviceManagerClient_OnDeviceAdded_Params.decode = function(decoder) {
var packed;
var val = new UsbDeviceManagerClient_OnDeviceAdded_Params();
var numberOfBytes = decoder.readUint32();
var version = decoder.readUint32();
val.deviceInfo = decoder.decodeStructPointer(device$.UsbDeviceInfo);
return val;
};
UsbDeviceManagerClient_OnDeviceAdded_Params.encode = function(encoder, val) {
var packed;
encoder.writeUint32(UsbDeviceManagerClient_OnDeviceAdded_Params.encodedSize);
encoder.writeUint32(0);
encoder.encodeStructPointer(device$.UsbDeviceInfo, val.deviceInfo);
};
function UsbDeviceManagerClient_OnDeviceRemoved_Params(values) {
this.initDefaults_();
this.initFields_(values);
}
UsbDeviceManagerClient_OnDeviceRemoved_Params.prototype.initDefaults_ = function() {
this.deviceInfo = null;
};
UsbDeviceManagerClient_OnDeviceRemoved_Params.prototype.initFields_ = function(fields) {
for(var field in fields) {
if (this.hasOwnProperty(field))
this[field] = fields[field];
}
};
UsbDeviceManagerClient_OnDeviceRemoved_Params.validate = function(messageValidator, offset) {
var err;
err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
if (err !== validator.validationError.NONE)
return err;
var kVersionSizes = [
{version: 0, numBytes: 16}
];
err = messageValidator.validateStructVersion(offset, kVersionSizes);
if (err !== validator.validationError.NONE)
return err;
// validate UsbDeviceManagerClient_OnDeviceRemoved_Params.deviceInfo
err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 0, device$.UsbDeviceInfo, false);
if (err !== validator.validationError.NONE)
return err;
return validator.validationError.NONE;
};
UsbDeviceManagerClient_OnDeviceRemoved_Params.encodedSize = codec.kStructHeaderSize + 8;
UsbDeviceManagerClient_OnDeviceRemoved_Params.decode = function(decoder) {
var packed;
var val = new UsbDeviceManagerClient_OnDeviceRemoved_Params();
var numberOfBytes = decoder.readUint32();
var version = decoder.readUint32();
val.deviceInfo = decoder.decodeStructPointer(device$.UsbDeviceInfo);
return val;
};
UsbDeviceManagerClient_OnDeviceRemoved_Params.encode = function(encoder, val) {
var packed;
encoder.writeUint32(UsbDeviceManagerClient_OnDeviceRemoved_Params.encodedSize);
encoder.writeUint32(0);
encoder.encodeStructPointer(device$.UsbDeviceInfo, val.deviceInfo);
};
var kUsbDeviceManager_GetDevices_Name = 0;
var kUsbDeviceManager_GetDevice_Name = 1;
var kUsbDeviceManager_SetClient_Name = 2;
function UsbDeviceManagerPtr(handleOrPtrInfo) {
this.ptr = new bindings.InterfacePtrController(UsbDeviceManager,
handleOrPtrInfo);
}
function UsbDeviceManagerAssociatedPtr(associatedInterfacePtrInfo) {
this.ptr = new associatedBindings.AssociatedInterfacePtrController(
UsbDeviceManager, associatedInterfacePtrInfo);
}
UsbDeviceManagerAssociatedPtr.prototype =
Object.create(UsbDeviceManagerPtr.prototype);
UsbDeviceManagerAssociatedPtr.prototype.constructor =
UsbDeviceManagerAssociatedPtr;
function UsbDeviceManagerProxy(receiver) {
this.receiver_ = receiver;
}
UsbDeviceManagerPtr.prototype.getDevices = function() {
return UsbDeviceManagerProxy.prototype.getDevices
.apply(this.ptr.getProxy(), arguments);
};
UsbDeviceManagerProxy.prototype.getDevices = function(options) {
var params = new UsbDeviceManager_GetDevices_Params();
params.options = options;
return new Promise(function(resolve, reject) {
var builder = new codec.MessageV1Builder(
kUsbDeviceManager_GetDevices_Name,
codec.align(UsbDeviceManager_GetDevices_Params.encodedSize),
codec.kMessageExpectsResponse, 0);
builder.encodeStruct(UsbDeviceManager_GetDevices_Params, params);
var message = builder.finish();
this.receiver_.acceptAndExpectResponse(message).then(function(message) {
var reader = new codec.MessageReader(message);
var responseParams =
reader.decodeStruct(UsbDeviceManager_GetDevices_ResponseParams);
resolve(responseParams);
}).catch(function(result) {
reject(Error("Connection error: " + result));
});
}.bind(this));
};
UsbDeviceManagerPtr.prototype.getDevice = function() {
return UsbDeviceManagerProxy.prototype.getDevice
.apply(this.ptr.getProxy(), arguments);
};
UsbDeviceManagerProxy.prototype.getDevice = function(guid, deviceRequest) {
var params = new UsbDeviceManager_GetDevice_Params();
params.guid = guid;
params.deviceRequest = deviceRequest;
var builder = new codec.MessageV0Builder(
kUsbDeviceManager_GetDevice_Name,
codec.align(UsbDeviceManager_GetDevice_Params.encodedSize));
builder.encodeStruct(UsbDeviceManager_GetDevice_Params, params);
var message = builder.finish();
this.receiver_.accept(message);
};
UsbDeviceManagerPtr.prototype.setClient = function() {
return UsbDeviceManagerProxy.prototype.setClient
.apply(this.ptr.getProxy(), arguments);
};
UsbDeviceManagerProxy.prototype.setClient = function(client) {
var params = new UsbDeviceManager_SetClient_Params();
params.client = client;
var builder = new codec.MessageV0Builder(
kUsbDeviceManager_SetClient_Name,
codec.align(UsbDeviceManager_SetClient_Params.encodedSize));
builder.encodeStruct(UsbDeviceManager_SetClient_Params, params);
var message = builder.finish();
this.receiver_.accept(message);
};
function UsbDeviceManagerStub(delegate) {
this.delegate_ = delegate;
}
UsbDeviceManagerStub.prototype.getDevices = function(options) {
return this.delegate_ && this.delegate_.getDevices && this.delegate_.getDevices(options);
}
UsbDeviceManagerStub.prototype.getDevice = function(guid, deviceRequest) {
return this.delegate_ && this.delegate_.getDevice && this.delegate_.getDevice(guid, deviceRequest);
}
UsbDeviceManagerStub.prototype.setClient = function(client) {
return this.delegate_ && this.delegate_.setClient && this.delegate_.setClient(client);
}
UsbDeviceManagerStub.prototype.accept = function(message) {
var reader = new codec.MessageReader(message);
switch (reader.messageName) {
case kUsbDeviceManager_GetDevice_Name:
var params = reader.decodeStruct(UsbDeviceManager_GetDevice_Params);
this.getDevice(params.guid, params.deviceRequest);
return true;
case kUsbDeviceManager_SetClient_Name:
var params = reader.decodeStruct(UsbDeviceManager_SetClient_Params);
this.setClient(params.client);
return true;
default:
return false;
}
};
UsbDeviceManagerStub.prototype.acceptWithResponder =
function(message, responder) {
var reader = new codec.MessageReader(message);
switch (reader.messageName) {
case kUsbDeviceManager_GetDevices_Name:
var params = reader.decodeStruct(UsbDeviceManager_GetDevices_Params);
this.getDevices(params.options).then(function(response) {
var responseParams =
new UsbDeviceManager_GetDevices_ResponseParams();
responseParams.results = response.results;
var builder = new codec.MessageV1Builder(
kUsbDeviceManager_GetDevices_Name,
codec.align(UsbDeviceManager_GetDevices_ResponseParams.encodedSize),
codec.kMessageIsResponse, reader.requestID);
builder.encodeStruct(UsbDeviceManager_GetDevices_ResponseParams,
responseParams);
var message = builder.finish();
responder.accept(message);
});
return true;
default:
return false;
}
};
function validateUsbDeviceManagerRequest(messageValidator) {
var message = messageValidator.message;
var paramsClass = null;
switch (message.getName()) {
case kUsbDeviceManager_GetDevices_Name:
if (message.expectsResponse())
paramsClass = UsbDeviceManager_GetDevices_Params;
break;
case kUsbDeviceManager_GetDevice_Name:
if (!message.expectsResponse() && !message.isResponse())
paramsClass = UsbDeviceManager_GetDevice_Params;
break;
case kUsbDeviceManager_SetClient_Name:
if (!message.expectsResponse() && !message.isResponse())
paramsClass = UsbDeviceManager_SetClient_Params;
break;
}
if (paramsClass === null)
return validator.validationError.NONE;
return paramsClass.validate(messageValidator, messageValidator.message.getHeaderNumBytes());
}
function validateUsbDeviceManagerResponse(messageValidator) {
var message = messageValidator.message;
var paramsClass = null;
switch (message.getName()) {
case kUsbDeviceManager_GetDevices_Name:
if (message.isResponse())
paramsClass = UsbDeviceManager_GetDevices_ResponseParams;
break;
}
if (paramsClass === null)
return validator.validationError.NONE;
return paramsClass.validate(messageValidator, messageValidator.message.getHeaderNumBytes());
}
var UsbDeviceManager = {
name: 'device.mojom.UsbDeviceManager',
kVersion: 0,
ptrClass: UsbDeviceManagerPtr,
proxyClass: UsbDeviceManagerProxy,
stubClass: UsbDeviceManagerStub,
validateRequest: validateUsbDeviceManagerRequest,
validateResponse: validateUsbDeviceManagerResponse,
};
UsbDeviceManagerStub.prototype.validator = validateUsbDeviceManagerRequest;
UsbDeviceManagerProxy.prototype.validator = validateUsbDeviceManagerResponse;
var kUsbDeviceManagerClient_OnDeviceAdded_Name = 0;
var kUsbDeviceManagerClient_OnDeviceRemoved_Name = 1;
function UsbDeviceManagerClientPtr(handleOrPtrInfo) {
this.ptr = new bindings.InterfacePtrController(UsbDeviceManagerClient,
handleOrPtrInfo);
}
function UsbDeviceManagerClientAssociatedPtr(associatedInterfacePtrInfo) {
this.ptr = new associatedBindings.AssociatedInterfacePtrController(
UsbDeviceManagerClient, associatedInterfacePtrInfo);
}
UsbDeviceManagerClientAssociatedPtr.prototype =
Object.create(UsbDeviceManagerClientPtr.prototype);
UsbDeviceManagerClientAssociatedPtr.prototype.constructor =
UsbDeviceManagerClientAssociatedPtr;
function UsbDeviceManagerClientProxy(receiver) {
this.receiver_ = receiver;
}
UsbDeviceManagerClientPtr.prototype.onDeviceAdded = function() {
return UsbDeviceManagerClientProxy.prototype.onDeviceAdded
.apply(this.ptr.getProxy(), arguments);
};
UsbDeviceManagerClientProxy.prototype.onDeviceAdded = function(deviceInfo) {
var params = new UsbDeviceManagerClient_OnDeviceAdded_Params();
params.deviceInfo = deviceInfo;
var builder = new codec.MessageV0Builder(
kUsbDeviceManagerClient_OnDeviceAdded_Name,
codec.align(UsbDeviceManagerClient_OnDeviceAdded_Params.encodedSize));
builder.encodeStruct(UsbDeviceManagerClient_OnDeviceAdded_Params, params);
var message = builder.finish();
this.receiver_.accept(message);
};
UsbDeviceManagerClientPtr.prototype.onDeviceRemoved = function() {
return UsbDeviceManagerClientProxy.prototype.onDeviceRemoved
.apply(this.ptr.getProxy(), arguments);
};
UsbDeviceManagerClientProxy.prototype.onDeviceRemoved = function(deviceInfo) {
var params = new UsbDeviceManagerClient_OnDeviceRemoved_Params();
params.deviceInfo = deviceInfo;
var builder = new codec.MessageV0Builder(
kUsbDeviceManagerClient_OnDeviceRemoved_Name,
codec.align(UsbDeviceManagerClient_OnDeviceRemoved_Params.encodedSize));
builder.encodeStruct(UsbDeviceManagerClient_OnDeviceRemoved_Params, params);
var message = builder.finish();
this.receiver_.accept(message);
};
function UsbDeviceManagerClientStub(delegate) {
this.delegate_ = delegate;
}
UsbDeviceManagerClientStub.prototype.onDeviceAdded = function(deviceInfo) {
return this.delegate_ && this.delegate_.onDeviceAdded && this.delegate_.onDeviceAdded(deviceInfo);
}
UsbDeviceManagerClientStub.prototype.onDeviceRemoved = function(deviceInfo) {
return this.delegate_ && this.delegate_.onDeviceRemoved && this.delegate_.onDeviceRemoved(deviceInfo);
}
UsbDeviceManagerClientStub.prototype.accept = function(message) {
var reader = new codec.MessageReader(message);
switch (reader.messageName) {
case kUsbDeviceManagerClient_OnDeviceAdded_Name:
var params = reader.decodeStruct(UsbDeviceManagerClient_OnDeviceAdded_Params);
this.onDeviceAdded(params.deviceInfo);
return true;
case kUsbDeviceManagerClient_OnDeviceRemoved_Name:
var params = reader.decodeStruct(UsbDeviceManagerClient_OnDeviceRemoved_Params);
this.onDeviceRemoved(params.deviceInfo);
return true;
default:
return false;
}
};
UsbDeviceManagerClientStub.prototype.acceptWithResponder =
function(message, responder) {
var reader = new codec.MessageReader(message);
switch (reader.messageName) {
default:
return false;
}
};
function validateUsbDeviceManagerClientRequest(messageValidator) {
var message = messageValidator.message;
var paramsClass = null;
switch (message.getName()) {
case kUsbDeviceManagerClient_OnDeviceAdded_Name:
if (!message.expectsResponse() && !message.isResponse())
paramsClass = UsbDeviceManagerClient_OnDeviceAdded_Params;
break;
case kUsbDeviceManagerClient_OnDeviceRemoved_Name:
if (!message.expectsResponse() && !message.isResponse())
paramsClass = UsbDeviceManagerClient_OnDeviceRemoved_Params;
break;
}
if (paramsClass === null)
return validator.validationError.NONE;
return paramsClass.validate(messageValidator, messageValidator.message.getHeaderNumBytes());
}
function validateUsbDeviceManagerClientResponse(messageValidator) {
return validator.validationError.NONE;
}
var UsbDeviceManagerClient = {
name: 'device.mojom.UsbDeviceManagerClient',
kVersion: 0,
ptrClass: UsbDeviceManagerClientPtr,
proxyClass: UsbDeviceManagerClientProxy,
stubClass: UsbDeviceManagerClientStub,
validateRequest: validateUsbDeviceManagerClientRequest,
validateResponse: null,
};
UsbDeviceManagerClientStub.prototype.validator = validateUsbDeviceManagerClientRequest;
UsbDeviceManagerClientProxy.prototype.validator = null;
exports.UsbDeviceFilter = UsbDeviceFilter;
exports.UsbEnumerationOptions = UsbEnumerationOptions;
exports.UsbDeviceManager = UsbDeviceManager;
exports.UsbDeviceManagerPtr = UsbDeviceManagerPtr;
exports.UsbDeviceManagerAssociatedPtr = UsbDeviceManagerAssociatedPtr;
exports.UsbDeviceManagerClient = UsbDeviceManagerClient;
exports.UsbDeviceManagerClientPtr = UsbDeviceManagerClientPtr;
exports.UsbDeviceManagerClientAssociatedPtr = UsbDeviceManagerClientAssociatedPtr;
})();

View file

@ -1 +0,0 @@
Content-Type: text/javascript; charset=utf-8

View file

@ -0,0 +1,262 @@
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
'use strict';
(function() {
var mojomId = 'device/usb/public/mojom/device_manager_client.mojom';
if (mojo.internal.isMojomLoaded(mojomId)) {
console.warn('The following mojom is loaded multiple times: ' + mojomId);
return;
}
mojo.internal.markMojomLoaded(mojomId);
var bindings = mojo;
var associatedBindings = mojo;
var codec = mojo.internal;
var validator = mojo.internal;
var exports = mojo.internal.exposeNamespace('device.mojom');
var device$ =
mojo.internal.exposeNamespace('device.mojom');
if (mojo.config.autoLoadMojomDeps) {
mojo.internal.loadMojomIfNecessary(
'device/usb/public/mojom/device.mojom', 'device.mojom.js');
}
function UsbDeviceManagerClient_OnDeviceAdded_Params(values) {
this.initDefaults_();
this.initFields_(values);
}
UsbDeviceManagerClient_OnDeviceAdded_Params.prototype.initDefaults_ = function() {
this.deviceInfo = null;
};
UsbDeviceManagerClient_OnDeviceAdded_Params.prototype.initFields_ = function(fields) {
for(var field in fields) {
if (this.hasOwnProperty(field))
this[field] = fields[field];
}
};
UsbDeviceManagerClient_OnDeviceAdded_Params.validate = function(messageValidator, offset) {
var err;
err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
if (err !== validator.validationError.NONE)
return err;
var kVersionSizes = [
{version: 0, numBytes: 16}
];
err = messageValidator.validateStructVersion(offset, kVersionSizes);
if (err !== validator.validationError.NONE)
return err;
// validate UsbDeviceManagerClient_OnDeviceAdded_Params.deviceInfo
err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 0, device$.UsbDeviceInfo, false);
if (err !== validator.validationError.NONE)
return err;
return validator.validationError.NONE;
};
UsbDeviceManagerClient_OnDeviceAdded_Params.encodedSize = codec.kStructHeaderSize + 8;
UsbDeviceManagerClient_OnDeviceAdded_Params.decode = function(decoder) {
var packed;
var val = new UsbDeviceManagerClient_OnDeviceAdded_Params();
var numberOfBytes = decoder.readUint32();
var version = decoder.readUint32();
val.deviceInfo = decoder.decodeStructPointer(device$.UsbDeviceInfo);
return val;
};
UsbDeviceManagerClient_OnDeviceAdded_Params.encode = function(encoder, val) {
var packed;
encoder.writeUint32(UsbDeviceManagerClient_OnDeviceAdded_Params.encodedSize);
encoder.writeUint32(0);
encoder.encodeStructPointer(device$.UsbDeviceInfo, val.deviceInfo);
};
function UsbDeviceManagerClient_OnDeviceRemoved_Params(values) {
this.initDefaults_();
this.initFields_(values);
}
UsbDeviceManagerClient_OnDeviceRemoved_Params.prototype.initDefaults_ = function() {
this.deviceInfo = null;
};
UsbDeviceManagerClient_OnDeviceRemoved_Params.prototype.initFields_ = function(fields) {
for(var field in fields) {
if (this.hasOwnProperty(field))
this[field] = fields[field];
}
};
UsbDeviceManagerClient_OnDeviceRemoved_Params.validate = function(messageValidator, offset) {
var err;
err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
if (err !== validator.validationError.NONE)
return err;
var kVersionSizes = [
{version: 0, numBytes: 16}
];
err = messageValidator.validateStructVersion(offset, kVersionSizes);
if (err !== validator.validationError.NONE)
return err;
// validate UsbDeviceManagerClient_OnDeviceRemoved_Params.deviceInfo
err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 0, device$.UsbDeviceInfo, false);
if (err !== validator.validationError.NONE)
return err;
return validator.validationError.NONE;
};
UsbDeviceManagerClient_OnDeviceRemoved_Params.encodedSize = codec.kStructHeaderSize + 8;
UsbDeviceManagerClient_OnDeviceRemoved_Params.decode = function(decoder) {
var packed;
var val = new UsbDeviceManagerClient_OnDeviceRemoved_Params();
var numberOfBytes = decoder.readUint32();
var version = decoder.readUint32();
val.deviceInfo = decoder.decodeStructPointer(device$.UsbDeviceInfo);
return val;
};
UsbDeviceManagerClient_OnDeviceRemoved_Params.encode = function(encoder, val) {
var packed;
encoder.writeUint32(UsbDeviceManagerClient_OnDeviceRemoved_Params.encodedSize);
encoder.writeUint32(0);
encoder.encodeStructPointer(device$.UsbDeviceInfo, val.deviceInfo);
};
var kUsbDeviceManagerClient_OnDeviceAdded_Name = 0;
var kUsbDeviceManagerClient_OnDeviceRemoved_Name = 1;
function UsbDeviceManagerClientPtr(handleOrPtrInfo) {
this.ptr = new bindings.InterfacePtrController(UsbDeviceManagerClient,
handleOrPtrInfo);
}
function UsbDeviceManagerClientAssociatedPtr(associatedInterfacePtrInfo) {
this.ptr = new associatedBindings.AssociatedInterfacePtrController(
UsbDeviceManagerClient, associatedInterfacePtrInfo);
}
UsbDeviceManagerClientAssociatedPtr.prototype =
Object.create(UsbDeviceManagerClientPtr.prototype);
UsbDeviceManagerClientAssociatedPtr.prototype.constructor =
UsbDeviceManagerClientAssociatedPtr;
function UsbDeviceManagerClientProxy(receiver) {
this.receiver_ = receiver;
}
UsbDeviceManagerClientPtr.prototype.onDeviceAdded = function() {
return UsbDeviceManagerClientProxy.prototype.onDeviceAdded
.apply(this.ptr.getProxy(), arguments);
};
UsbDeviceManagerClientProxy.prototype.onDeviceAdded = function(deviceInfo) {
var params_ = new UsbDeviceManagerClient_OnDeviceAdded_Params();
params_.deviceInfo = deviceInfo;
var builder = new codec.MessageV0Builder(
kUsbDeviceManagerClient_OnDeviceAdded_Name,
codec.align(UsbDeviceManagerClient_OnDeviceAdded_Params.encodedSize));
builder.encodeStruct(UsbDeviceManagerClient_OnDeviceAdded_Params, params_);
var message = builder.finish();
this.receiver_.accept(message);
};
UsbDeviceManagerClientPtr.prototype.onDeviceRemoved = function() {
return UsbDeviceManagerClientProxy.prototype.onDeviceRemoved
.apply(this.ptr.getProxy(), arguments);
};
UsbDeviceManagerClientProxy.prototype.onDeviceRemoved = function(deviceInfo) {
var params_ = new UsbDeviceManagerClient_OnDeviceRemoved_Params();
params_.deviceInfo = deviceInfo;
var builder = new codec.MessageV0Builder(
kUsbDeviceManagerClient_OnDeviceRemoved_Name,
codec.align(UsbDeviceManagerClient_OnDeviceRemoved_Params.encodedSize));
builder.encodeStruct(UsbDeviceManagerClient_OnDeviceRemoved_Params, params_);
var message = builder.finish();
this.receiver_.accept(message);
};
function UsbDeviceManagerClientStub(delegate) {
this.delegate_ = delegate;
}
UsbDeviceManagerClientStub.prototype.onDeviceAdded = function(deviceInfo) {
return this.delegate_ && this.delegate_.onDeviceAdded && this.delegate_.onDeviceAdded(deviceInfo);
}
UsbDeviceManagerClientStub.prototype.onDeviceRemoved = function(deviceInfo) {
return this.delegate_ && this.delegate_.onDeviceRemoved && this.delegate_.onDeviceRemoved(deviceInfo);
}
UsbDeviceManagerClientStub.prototype.accept = function(message) {
var reader = new codec.MessageReader(message);
switch (reader.messageName) {
case kUsbDeviceManagerClient_OnDeviceAdded_Name:
var params = reader.decodeStruct(UsbDeviceManagerClient_OnDeviceAdded_Params);
this.onDeviceAdded(params.deviceInfo);
return true;
case kUsbDeviceManagerClient_OnDeviceRemoved_Name:
var params = reader.decodeStruct(UsbDeviceManagerClient_OnDeviceRemoved_Params);
this.onDeviceRemoved(params.deviceInfo);
return true;
default:
return false;
}
};
UsbDeviceManagerClientStub.prototype.acceptWithResponder =
function(message, responder) {
var reader = new codec.MessageReader(message);
switch (reader.messageName) {
default:
return false;
}
};
function validateUsbDeviceManagerClientRequest(messageValidator) {
var message = messageValidator.message;
var paramsClass = null;
switch (message.getName()) {
case kUsbDeviceManagerClient_OnDeviceAdded_Name:
if (!message.expectsResponse() && !message.isResponse())
paramsClass = UsbDeviceManagerClient_OnDeviceAdded_Params;
break;
case kUsbDeviceManagerClient_OnDeviceRemoved_Name:
if (!message.expectsResponse() && !message.isResponse())
paramsClass = UsbDeviceManagerClient_OnDeviceRemoved_Params;
break;
}
if (paramsClass === null)
return validator.validationError.NONE;
return paramsClass.validate(messageValidator, messageValidator.message.getHeaderNumBytes());
}
function validateUsbDeviceManagerClientResponse(messageValidator) {
return validator.validationError.NONE;
}
var UsbDeviceManagerClient = {
name: 'device.mojom.UsbDeviceManagerClient',
kVersion: 0,
ptrClass: UsbDeviceManagerClientPtr,
proxyClass: UsbDeviceManagerClientProxy,
stubClass: UsbDeviceManagerClientStub,
validateRequest: validateUsbDeviceManagerClientRequest,
validateResponse: null,
};
UsbDeviceManagerClientStub.prototype.validator = validateUsbDeviceManagerClientRequest;
UsbDeviceManagerClientProxy.prototype.validator = null;
exports.UsbDeviceManagerClient = UsbDeviceManagerClient;
exports.UsbDeviceManagerClientPtr = UsbDeviceManagerClientPtr;
exports.UsbDeviceManagerClientAssociatedPtr = UsbDeviceManagerClientAssociatedPtr;
})();

View file

@ -0,0 +1 @@
Content-Type: text/javascript; charset=utf-8

View file

@ -4,14 +4,21 @@
'use strict';
if (mojo && mojo.internal) {
if ((typeof mojo !== 'undefined') && mojo.bindingsLibraryInitialized) {
throw new Error('The Mojo bindings library has been initialized.');
}
var mojo = mojo || {};
mojo.internal = {};
mojo.internal.global = this;
mojo.config = {
mojo.bindingsLibraryInitialized = true;
mojo.internal = mojo.internal || {};
mojo.config = mojo.config || {};
if (typeof mojo.config.global === 'undefined') {
mojo.config.global = this;
}
if (typeof mojo.config.autoLoadMojomDeps === 'undefined') {
// Whether to automatically load mojom dependencies.
// For example, if foo.mojom imports bar.mojom, |autoLoadMojomDeps| set to
// true means that loading foo.mojom.js will insert a <script> tag to load
@ -52,11 +59,12 @@ mojo.config = {
// <script src="http://example.org/scripts/b/d/bar.mojom.js"></script>
//
// -->
autoLoadMojomDeps: true
};
mojo.config.autoLoadMojomDeps = true;
}
(function() {
var internal = mojo.internal;
var config = mojo.config;
var LoadState = {
PENDING_LOAD: 1,
@ -66,7 +74,7 @@ mojo.config = {
var mojomRegistry = new Map();
function exposeNamespace(namespace) {
var current = internal.global;
var current = config.global;
var parts = namespace.split('.');
for (var part; parts.length && (part = parts.shift());) {
@ -104,7 +112,7 @@ mojo.config = {
return;
}
if (internal.global.document === undefined) {
if (config.global.document === undefined) {
throw new Error(
'Mojom dependency autoloading is not implemented in workers. ' +
'Please see config variable mojo.config.autoLoadMojomDeps for more ' +
@ -113,7 +121,7 @@ mojo.config = {
markMojomPendingLoad(id);
var url = new URL(relativePath, document.currentScript.src).href;
internal.global.document.write('<script type="text/javascript" src="' +
config.global.document.write('<script type="text/javascript" src="' +
url + '"><' + '/script>');
}
@ -672,6 +680,103 @@ mojo.config = {
mojo.BindingSet = BindingSet;
mojo.InterfacePtrController = InterfacePtrController;
})();
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
(function() {
var internal = mojo.internal;
// Constants ----------------------------------------------------------------
var kInterfaceIdNamespaceMask = 0x80000000;
var kMasterInterfaceId = 0x00000000;
var kInvalidInterfaceId = 0xFFFFFFFF;
// ---------------------------------------------------------------------------
function InterfacePtrInfo(handle, version) {
this.handle = handle;
this.version = version;
}
InterfacePtrInfo.prototype.isValid = function() {
return this.handle instanceof MojoHandle;
};
InterfacePtrInfo.prototype.close = function() {
if (!this.isValid())
return;
this.handle.close();
this.handle = null;
this.version = 0;
};
function AssociatedInterfacePtrInfo(interfaceEndpointHandle, version) {
this.interfaceEndpointHandle = interfaceEndpointHandle;
this.version = version;
}
AssociatedInterfacePtrInfo.prototype.isValid = function() {
return this.interfaceEndpointHandle.isValid();
};
// ---------------------------------------------------------------------------
function InterfaceRequest(handle) {
this.handle = handle;
}
InterfaceRequest.prototype.isValid = function() {
return this.handle instanceof MojoHandle;
};
InterfaceRequest.prototype.close = function() {
if (!this.isValid())
return;
this.handle.close();
this.handle = null;
};
function AssociatedInterfaceRequest(interfaceEndpointHandle) {
this.interfaceEndpointHandle = interfaceEndpointHandle;
}
AssociatedInterfaceRequest.prototype.isValid = function() {
return this.interfaceEndpointHandle.isValid();
};
AssociatedInterfaceRequest.prototype.resetWithReason = function(reason) {
this.interfaceEndpointHandle.reset(reason);
};
function isMasterInterfaceId(interfaceId) {
return interfaceId === kMasterInterfaceId;
}
function isValidInterfaceId(interfaceId) {
return interfaceId !== kInvalidInterfaceId;
}
function hasInterfaceIdNamespaceBitSet(interfaceId) {
if (interfaceId >= 2 * kInterfaceIdNamespaceMask) {
throw new Error("Interface ID should be a 32-bit unsigned integer.");
}
return interfaceId >= kInterfaceIdNamespaceMask;
}
mojo.InterfacePtrInfo = InterfacePtrInfo;
mojo.InterfaceRequest = InterfaceRequest;
mojo.AssociatedInterfacePtrInfo = AssociatedInterfacePtrInfo;
mojo.AssociatedInterfaceRequest = AssociatedInterfaceRequest;
internal.isMasterInterfaceId = isMasterInterfaceId;
internal.isValidInterfaceId = isValidInterfaceId;
internal.hasInterfaceIdNamespaceBitSet = hasInterfaceIdNamespaceBitSet;
internal.kInvalidInterfaceId = kInvalidInterfaceId;
internal.kMasterInterfaceId = kMasterInterfaceId;
internal.kInterfaceIdNamespaceMask = kInterfaceIdNamespaceMask;
})();
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@ -2071,6 +2176,10 @@ mojo.config = {
var receiverResult = this.incomingReceiver_ &&
this.incomingReceiver_.accept(message);
// Dispatching the message may have closed the connector.
if (this.handle_ == null)
return;
// Handle invalid incoming message.
if (!internal.isTestingMode() && !receiverResult) {
// TODO(yzshen): Consider notifying the embedder.
@ -2131,95 +2240,6 @@ mojo.config = {
internal.Connector = Connector;
})();
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
(function() {
var internal = mojo.internal;
// Constants ----------------------------------------------------------------
var kInterfaceIdNamespaceMask = 0x80000000;
var kMasterInterfaceId = 0x00000000;
var kInvalidInterfaceId = 0xFFFFFFFF;
// ---------------------------------------------------------------------------
function InterfacePtrInfo(handle, version) {
this.handle = handle;
this.version = version;
}
InterfacePtrInfo.prototype.isValid = function() {
return this.handle instanceof MojoHandle;
};
InterfacePtrInfo.prototype.close = function() {
if (!this.isValid())
return;
this.handle.close();
this.handle = null;
this.version = 0;
};
function AssociatedInterfacePtrInfo(interfaceEndpointHandle, version) {
this.interfaceEndpointHandle = interfaceEndpointHandle;
this.version = version;
}
AssociatedInterfacePtrInfo.prototype.isValid = function() {
return this.interfaceEndpointHandle.isValid();
};
// ---------------------------------------------------------------------------
function InterfaceRequest(handle) {
this.handle = handle;
}
InterfaceRequest.prototype.isValid = function() {
return this.handle instanceof MojoHandle;
};
InterfaceRequest.prototype.close = function() {
if (!this.isValid())
return;
this.handle.close();
this.handle = null;
};
function AssociatedInterfaceRequest(interfaceEndpointHandle) {
this.interfaceEndpointHandle = interfaceEndpointHandle;
}
AssociatedInterfaceRequest.prototype.isValid = function() {
return this.interfaceEndpointHandle.isValid();
};
AssociatedInterfaceRequest.prototype.resetWithReason = function(reason) {
this.interfaceEndpointHandle.reset(reason);
};
function isMasterInterfaceId(interfaceId) {
return interfaceId === kMasterInterfaceId;
}
function isValidInterfaceId(interfaceId) {
return interfaceId !== kInvalidInterfaceId;
}
mojo.InterfacePtrInfo = InterfacePtrInfo;
mojo.InterfaceRequest = InterfaceRequest;
mojo.AssociatedInterfacePtrInfo = AssociatedInterfacePtrInfo;
mojo.AssociatedInterfaceRequest = AssociatedInterfaceRequest;
internal.isMasterInterfaceId = isMasterInterfaceId;
internal.isValidInterfaceId = isValidInterfaceId;
internal.kInvalidInterfaceId = kInvalidInterfaceId;
internal.kMasterInterfaceId = kMasterInterfaceId;
internal.kInterfaceIdNamespaceMask = kInterfaceIdNamespaceMask;
})();
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@ -2234,12 +2254,12 @@ mojo.config = {
throw error;
}
if (message.getName() != mojo.interfaceControl2.kRunMessageId) {
if (message.getName() != mojo.interfaceControl.kRunMessageId) {
throw new Error("Control message name is not kRunMessageId");
}
// Validate payload.
error = mojo.interfaceControl2.RunMessageParams.validate(messageValidator,
error = mojo.interfaceControl.RunMessageParams.validate(messageValidator,
message.getHeaderNumBytes());
if (error != internal.validationError.NONE) {
throw error;
@ -2253,12 +2273,12 @@ mojo.config = {
throw error;
}
if (message.getName() != mojo.interfaceControl2.kRunOrClosePipeMessageId) {
if (message.getName() != mojo.interfaceControl.kRunOrClosePipeMessageId) {
throw new Error("Control message name is not kRunOrClosePipeMessageId");
}
// Validate payload.
error = mojo.interfaceControl2.RunOrClosePipeMessageParams.validate(
error = mojo.interfaceControl.RunOrClosePipeMessageParams.validate(
messageValidator, message.getHeaderNumBytes());
if (error != internal.validationError.NONE) {
throw error;
@ -2268,7 +2288,7 @@ mojo.config = {
function runOrClosePipe(message, interfaceVersion) {
var reader = new internal.MessageReader(message);
var runOrClosePipeMessageParams = reader.decodeStruct(
mojo.interfaceControl2.RunOrClosePipeMessageParams);
mojo.interfaceControl.RunOrClosePipeMessageParams);
return interfaceVersion >=
runOrClosePipeMessageParams.input.requireVersion.version;
}
@ -2276,35 +2296,35 @@ mojo.config = {
function run(message, responder, interfaceVersion) {
var reader = new internal.MessageReader(message);
var runMessageParams =
reader.decodeStruct(mojo.interfaceControl2.RunMessageParams);
reader.decodeStruct(mojo.interfaceControl.RunMessageParams);
var runOutput = null;
if (runMessageParams.input.queryVersion) {
runOutput = new mojo.interfaceControl2.RunOutput();
runOutput = new mojo.interfaceControl.RunOutput();
runOutput.queryVersionResult = new
mojo.interfaceControl2.QueryVersionResult(
mojo.interfaceControl.QueryVersionResult(
{'version': interfaceVersion});
}
var runResponseMessageParams = new
mojo.interfaceControl2.RunResponseMessageParams();
mojo.interfaceControl.RunResponseMessageParams();
runResponseMessageParams.output = runOutput;
var messageName = mojo.interfaceControl2.kRunMessageId;
var messageName = mojo.interfaceControl.kRunMessageId;
var payloadSize =
mojo.interfaceControl2.RunResponseMessageParams.encodedSize;
mojo.interfaceControl.RunResponseMessageParams.encodedSize;
var requestID = reader.requestID;
var builder = new internal.MessageV1Builder(messageName,
payloadSize, internal.kMessageIsResponse, requestID);
builder.encodeStruct(mojo.interfaceControl2.RunResponseMessageParams,
builder.encodeStruct(mojo.interfaceControl.RunResponseMessageParams,
runResponseMessageParams);
responder.accept(builder.finish());
return true;
}
function isInterfaceControlMessage(message) {
return message.getName() == mojo.interfaceControl2.kRunMessageId ||
message.getName() == mojo.interfaceControl2.kRunOrClosePipeMessageId;
return message.getName() == mojo.interfaceControl.kRunMessageId ||
message.getName() == mojo.interfaceControl.kRunOrClosePipeMessageId;
}
function ControlMessageHandler(interfaceVersion) {
@ -2334,14 +2354,14 @@ mojo.config = {
function constructRunOrClosePipeMessage(runOrClosePipeInput) {
var runOrClosePipeMessageParams = new
mojo.interfaceControl2.RunOrClosePipeMessageParams();
mojo.interfaceControl.RunOrClosePipeMessageParams();
runOrClosePipeMessageParams.input = runOrClosePipeInput;
var messageName = mojo.interfaceControl2.kRunOrClosePipeMessageId;
var messageName = mojo.interfaceControl.kRunOrClosePipeMessageId;
var payloadSize =
mojo.interfaceControl2.RunOrClosePipeMessageParams.encodedSize;
mojo.interfaceControl.RunOrClosePipeMessageParams.encodedSize;
var builder = new internal.MessageV0Builder(messageName, payloadSize);
builder.encodeStruct(mojo.interfaceControl2.RunOrClosePipeMessageParams,
builder.encodeStruct(mojo.interfaceControl.RunOrClosePipeMessageParams,
runOrClosePipeMessageParams);
var message = builder.finish();
return message;
@ -2354,12 +2374,12 @@ mojo.config = {
throw error;
}
if (message.getName() != mojo.interfaceControl2.kRunMessageId) {
if (message.getName() != mojo.interfaceControl.kRunMessageId) {
throw new Error("Control message name is not kRunMessageId");
}
// Validate payload.
error = mojo.interfaceControl2.RunResponseMessageParams.validate(
error = mojo.interfaceControl.RunResponseMessageParams.validate(
messageValidator, message.getHeaderNumBytes());
if (error != internal.validationError.NONE) {
throw error;
@ -2371,7 +2391,7 @@ mojo.config = {
var reader = new internal.MessageReader(message);
var runResponseMessageParams = reader.decodeStruct(
mojo.interfaceControl2.RunResponseMessageParams);
mojo.interfaceControl.RunResponseMessageParams);
return Promise.resolve(runResponseMessageParams);
}
@ -2386,12 +2406,12 @@ mojo.config = {
* @return {Promise} that resolves to a RunResponseMessageParams.
*/
function sendRunMessage(receiver, runMessageParams) {
var messageName = mojo.interfaceControl2.kRunMessageId;
var payloadSize = mojo.interfaceControl2.RunMessageParams.encodedSize;
var messageName = mojo.interfaceControl.kRunMessageId;
var payloadSize = mojo.interfaceControl.RunMessageParams.encodedSize;
// |requestID| is set to 0, but is later properly set by Router.
var builder = new internal.MessageV1Builder(messageName,
payloadSize, internal.kMessageExpectsResponse, 0);
builder.encodeStruct(mojo.interfaceControl2.RunMessageParams,
builder.encodeStruct(mojo.interfaceControl.RunMessageParams,
runMessageParams);
var message = builder.finish();
@ -2403,10 +2423,10 @@ mojo.config = {
}
ControlMessageProxy.prototype.queryVersion = function() {
var runMessageParams = new mojo.interfaceControl2.RunMessageParams();
runMessageParams.input = new mojo.interfaceControl2.RunInput();
var runMessageParams = new mojo.interfaceControl.RunMessageParams();
runMessageParams.input = new mojo.interfaceControl.RunInput();
runMessageParams.input.queryVersion =
new mojo.interfaceControl2.QueryVersion();
new mojo.interfaceControl.QueryVersion();
return sendRunMessage(this.receiver_, runMessageParams).then(function(
runResponseMessageParams) {
@ -2415,9 +2435,9 @@ mojo.config = {
};
ControlMessageProxy.prototype.requireVersion = function(version) {
var runOrClosePipeInput = new mojo.interfaceControl2.RunOrClosePipeInput();
var runOrClosePipeInput = new mojo.interfaceControl.RunOrClosePipeInput();
runOrClosePipeInput.requireVersion =
new mojo.interfaceControl2.RequireVersion({'version': version});
new mojo.interfaceControl.RequireVersion({'version': version});
var message = constructRunOrClosePipeMessage(runOrClosePipeInput);
this.receiver_.accept(message);
};
@ -2841,12 +2861,12 @@ mojo.config = {
throw error;
}
if (message.getName() != mojo.pipeControl2.kRunOrClosePipeMessageId) {
if (message.getName() != mojo.pipeControl.kRunOrClosePipeMessageId) {
throw new Error("Control message name is not kRunOrClosePipeMessageId");
}
// Validate payload.
error = mojo.pipeControl2.RunOrClosePipeMessageParams.validate(
error = mojo.pipeControl.RunOrClosePipeMessageParams.validate(
messageValidator, message.getHeaderNumBytes());
if (error != internal.validationError.NONE) {
throw error;
@ -2856,7 +2876,7 @@ mojo.config = {
function runOrClosePipe(message, delegate) {
var reader = new internal.MessageReader(message);
var runOrClosePipeMessageParams = reader.decodeStruct(
mojo.pipeControl2.RunOrClosePipeMessageParams);
mojo.pipeControl.RunOrClosePipeMessageParams);
var event = runOrClosePipeMessageParams.input
.peerAssociatedEndpointClosedEvent;
return delegate.onPeerAssociatedEndpointClosed(event.id,
@ -2888,15 +2908,15 @@ mojo.config = {
function constructRunOrClosePipeMessage(runOrClosePipeInput) {
var runOrClosePipeMessageParams = new
mojo.pipeControl2.RunOrClosePipeMessageParams();
mojo.pipeControl.RunOrClosePipeMessageParams();
runOrClosePipeMessageParams.input = runOrClosePipeInput;
var messageName = mojo.pipeControl2.kRunOrClosePipeMessageId;
var messageName = mojo.pipeControl.kRunOrClosePipeMessageId;
var payloadSize =
mojo.pipeControl2.RunOrClosePipeMessageParams.encodedSize;
mojo.pipeControl.RunOrClosePipeMessageParams.encodedSize;
var builder = new internal.MessageV0Builder(messageName, payloadSize);
builder.encodeStruct(mojo.pipeControl2.RunOrClosePipeMessageParams,
builder.encodeStruct(mojo.pipeControl.RunOrClosePipeMessageParams,
runOrClosePipeMessageParams);
var message = builder.finish();
message.setInterfaceId(internal.kInvalidInterfaceId);
@ -2915,14 +2935,14 @@ mojo.config = {
PipeControlMessageProxy.prototype.constructPeerEndpointClosedMessage =
function(interfaceId, reason) {
var event = new mojo.pipeControl2.PeerAssociatedEndpointClosedEvent();
var event = new mojo.pipeControl.PeerAssociatedEndpointClosedEvent();
event.id = interfaceId;
if (reason) {
event.disconnectReason = new mojo.pipeControl2.DisconnectReason({
event.disconnectReason = new mojo.pipeControl.DisconnectReason({
customReason: reason.customReason,
description: reason.description});
}
var runOrClosePipeInput = new mojo.pipeControl2.RunOrClosePipeInput();
var runOrClosePipeInput = new mojo.pipeControl.RunOrClosePipeInput();
runOrClosePipeInput.peerAssociatedEndpointClosedEvent = event;
return constructRunOrClosePipeMessage(runOrClosePipeInput);
};
@ -3096,6 +3116,15 @@ mojo.config = {
return new internal.InterfaceEndpointHandle();
}
// Unless it is the master ID, |interfaceId| is from the remote side and
// therefore its namespace bit is supposed to be different than the value
// that this router would use.
if (!internal.isMasterInterfaceId(interfaceId) &&
this.setInterfaceIdNamespaceBit_ ===
internal.hasInterfaceIdNamespaceBitSet(interfaceId)) {
return new internal.InterfaceEndpointHandle();
}
var endpoint = this.endpoints_.get(interfaceId);
if (!endpoint) {
@ -3164,8 +3193,6 @@ mojo.config = {
Router.prototype.onPeerAssociatedEndpointClosed = function(interfaceId,
reason) {
check(!internal.isMasterInterfaceId(interfaceId) || reason);
var endpoint = this.endpoints_.get(interfaceId);
if (!endpoint) {
endpoint = new InterfaceEndpoint(this, interfaceId);
@ -3250,6 +3277,8 @@ mojo.config = {
*/
(function() {
var internal = mojo.internal;
var textDecoder = new TextDecoder('utf-8');
var textEncoder = new TextEncoder('utf-8');
/**
* Decodes the UTF8 string from the given buffer.
@ -3257,7 +3286,7 @@ mojo.config = {
* @return {string} The corresponding JavaScript string.
*/
function decodeUtf8String(buffer) {
return decodeURIComponent(escape(String.fromCharCode.apply(null, buffer)));
return textDecoder.decode(buffer);
}
/**
@ -3269,12 +3298,11 @@ mojo.config = {
* @return {number} The number of bytes written to |outputBuffer|.
*/
function encodeUtf8String(str, outputBuffer) {
var utf8String = unescape(encodeURIComponent(str));
if (outputBuffer.length < utf8String.length)
const utf8Buffer = textEncoder.encode(str);
if (outputBuffer.length < utf8Buffer.length)
throw new Error("Buffer too small for encodeUtf8String");
for (var i = 0; i < outputBuffer.length && i < utf8String.length; i++)
outputBuffer[i] = utf8String.charCodeAt(i);
return i;
outputBuffer.set(utf8Buffer);
return utf8Buffer.length;
}
/**
@ -3282,8 +3310,7 @@ mojo.config = {
* |str| would occupy.
*/
function utf8Length(str) {
var utf8String = unescape(encodeURIComponent(str));
return utf8String.length;
return textEncoder.encode(str).length;
}
internal.decodeUtf8String = decodeUtf8String;
@ -3972,25 +3999,21 @@ mojo.config = {
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
'use strict';
(function() {
var mojomId = 'mojo/public/interfaces/bindings/new_bindings/interface_control_messages.mojom';
var mojomId = 'mojo/public/interfaces/bindings/interface_control_messages.mojom';
if (mojo.internal.isMojomLoaded(mojomId)) {
console.warn('The following mojom is loaded multiple times: ' + mojomId);
return;
}
mojo.internal.markMojomLoaded(mojomId);
// TODO(yzshen): Define these aliases to minimize the differences between the
// old/new modes. Remove them when the old mode goes away.
var bindings = mojo;
var associatedBindings = mojo;
var codec = mojo.internal;
var validator = mojo.internal;
var exports = mojo.internal.exposeNamespace('mojo.interfaceControl2');
var exports = mojo.internal.exposeNamespace('mojo.interfaceControl');
var kRunMessageId = 0xFFFFFFFF;
@ -4784,25 +4807,21 @@ mojo.config = {
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
'use strict';
(function() {
var mojomId = 'mojo/public/interfaces/bindings/new_bindings/pipe_control_messages.mojom';
var mojomId = 'mojo/public/interfaces/bindings/pipe_control_messages.mojom';
if (mojo.internal.isMojomLoaded(mojomId)) {
console.warn('The following mojom is loaded multiple times: ' + mojomId);
return;
}
mojo.internal.markMojomLoaded(mojomId);
// TODO(yzshen): Define these aliases to minimize the differences between the
// old/new modes. Remove them when the old mode goes away.
var bindings = mojo;
var associatedBindings = mojo;
var codec = mojo.internal;
var validator = mojo.internal;
var exports = mojo.internal.exposeNamespace('mojo.pipeControl2');
var exports = mojo.internal.exposeNamespace('mojo.pipeControl');
var kRunOrClosePipeMessageId = 0xFFFFFFFE;
@ -4894,7 +4913,6 @@ mojo.config = {
// validate DisconnectReason.description
err = messageValidator.validateStringPointer(offset + codec.kStructHeaderSize + 8, false)
if (err !== validator.validationError.NONE)
@ -4962,7 +4980,6 @@ mojo.config = {
// validate PeerAssociatedEndpointClosedEvent.disconnectReason
err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 8, DisconnectReason, true);
if (err !== validator.validationError.NONE)

View file

@ -2,9 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
'use strict';
if ((typeof mojo !== 'undefined') && mojo.internal && mojo.config) {
(function() {
var mojomId = 'mojo/public/mojom/base/string16.mojom';
@ -13,15 +11,18 @@ if ((typeof mojo !== 'undefined') && mojo.internal && mojo.config) {
return;
}
mojo.internal.markMojomLoaded(mojomId);
// TODO(yzshen): Define these aliases to minimize the differences between the
// old/new modes. Remove them when the old mode goes away.
var bindings = mojo;
var associatedBindings = mojo;
var codec = mojo.internal;
var validator = mojo.internal;
var exports = mojo.internal.exposeNamespace('mojo.common.mojom');
var exports = mojo.internal.exposeNamespace('mojoBase.mojom');
var big_buffer$ =
mojo.internal.exposeNamespace('mojoBase.mojom');
if (mojo.config.autoLoadMojomDeps) {
mojo.internal.loadMojomIfNecessary(
'mojo/public/mojom/base/big_buffer.mojom', 'big_buffer.mojom.js');
}
@ -55,7 +56,6 @@ if ((typeof mojo !== 'undefined') && mojo.internal && mojo.config) {
return err;
// validate String16.data
err = messageValidator.validateArrayPointer(offset + codec.kStructHeaderSize + 0, 2, codec.Uint16, false, [0], 0);
if (err !== validator.validationError.NONE)
@ -81,79 +81,61 @@ if ((typeof mojo !== 'undefined') && mojo.internal && mojo.config) {
encoder.writeUint32(0);
encoder.encodeArrayPointer(codec.Uint16, val.data);
};
function BigString16(values) {
this.initDefaults_();
this.initFields_(values);
}
BigString16.prototype.initDefaults_ = function() {
this.data = null;
};
BigString16.prototype.initFields_ = function(fields) {
for(var field in fields) {
if (this.hasOwnProperty(field))
this[field] = fields[field];
}
};
BigString16.validate = function(messageValidator, offset) {
var err;
err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
if (err !== validator.validationError.NONE)
return err;
var kVersionSizes = [
{version: 0, numBytes: 24}
];
err = messageValidator.validateStructVersion(offset, kVersionSizes);
if (err !== validator.validationError.NONE)
return err;
// validate BigString16.data
err = messageValidator.validateUnion(offset + codec.kStructHeaderSize + 0, big_buffer$.BigBuffer, false);
if (err !== validator.validationError.NONE)
return err;
return validator.validationError.NONE;
};
BigString16.encodedSize = codec.kStructHeaderSize + 16;
BigString16.decode = function(decoder) {
var packed;
var val = new BigString16();
var numberOfBytes = decoder.readUint32();
var version = decoder.readUint32();
val.data = decoder.decodeStruct(big_buffer$.BigBuffer);
return val;
};
BigString16.encode = function(encoder, val) {
var packed;
encoder.writeUint32(BigString16.encodedSize);
encoder.writeUint32(0);
encoder.encodeStruct(big_buffer$.BigBuffer, val.data);
};
exports.String16 = String16;
exports.BigString16 = BigString16;
})();
}
if ((typeof mojo === 'undefined') || !mojo.internal || !mojo.config) {
define("mojo/public/mojom/base/string16.mojom", [
"mojo/public/js/associated_bindings",
"mojo/public/js/bindings",
"mojo/public/js/codec",
"mojo/public/js/core",
"mojo/public/js/validator",
], function(associatedBindings, bindings, codec, core, validator) {
var exports = {};
function String16(values) {
this.initDefaults_();
this.initFields_(values);
}
String16.prototype.initDefaults_ = function() {
this.data = null;
};
String16.prototype.initFields_ = function(fields) {
for(var field in fields) {
if (this.hasOwnProperty(field))
this[field] = fields[field];
}
};
String16.validate = function(messageValidator, offset) {
var err;
err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
if (err !== validator.validationError.NONE)
return err;
var kVersionSizes = [
{version: 0, numBytes: 16}
];
err = messageValidator.validateStructVersion(offset, kVersionSizes);
if (err !== validator.validationError.NONE)
return err;
// validate String16.data
err = messageValidator.validateArrayPointer(offset + codec.kStructHeaderSize + 0, 2, codec.Uint16, false, [0], 0);
if (err !== validator.validationError.NONE)
return err;
return validator.validationError.NONE;
};
String16.encodedSize = codec.kStructHeaderSize + 8;
String16.decode = function(decoder) {
var packed;
var val = new String16();
var numberOfBytes = decoder.readUint32();
var version = decoder.readUint32();
val.data = decoder.decodeArrayPointer(codec.Uint16);
return val;
};
String16.encode = function(encoder, val) {
var packed;
encoder.writeUint32(String16.encodedSize);
encoder.writeUint32(0);
encoder.encodeArrayPointer(codec.Uint16, val.data);
};
exports.String16 = String16;
return exports;
});
}

View file

@ -23,11 +23,17 @@
mojo.internal.loadMojomIfNecessary(
'device/usb/public/mojom/device.mojom', '../../../../../device/usb/public/mojom/device.mojom.js');
}
var device_manager$ =
var device_enumeration_options$ =
mojo.internal.exposeNamespace('device.mojom');
if (mojo.config.autoLoadMojomDeps) {
mojo.internal.loadMojomIfNecessary(
'device/usb/public/mojom/device_manager.mojom', '../../../../../device/usb/public/mojom/device_manager.mojom.js');
'device/usb/public/mojom/device_enumeration_options.mojom', '../../../../../device/usb/public/mojom/device_enumeration_options.mojom.js');
}
var device_manager_client$ =
mojo.internal.exposeNamespace('device.mojom');
if (mojo.config.autoLoadMojomDeps) {
mojo.internal.loadMojomIfNecessary(
'device/usb/public/mojom/device_manager_client.mojom', '../../../../../device/usb/public/mojom/device_manager_client.mojom.js');
}
@ -236,7 +242,7 @@
// validate WebUsbService_GetPermission_Params.deviceFilters
err = messageValidator.validateArrayPointer(offset + codec.kStructHeaderSize + 0, 8, new codec.PointerTo(device_manager$.UsbDeviceFilter), false, [0], 0);
err = messageValidator.validateArrayPointer(offset + codec.kStructHeaderSize + 0, 8, new codec.PointerTo(device_enumeration_options$.UsbDeviceFilter), false, [0], 0);
if (err !== validator.validationError.NONE)
return err;
@ -250,7 +256,7 @@
var val = new WebUsbService_GetPermission_Params();
var numberOfBytes = decoder.readUint32();
var version = decoder.readUint32();
val.deviceFilters = decoder.decodeArrayPointer(new codec.PointerTo(device_manager$.UsbDeviceFilter));
val.deviceFilters = decoder.decodeArrayPointer(new codec.PointerTo(device_enumeration_options$.UsbDeviceFilter));
return val;
};
@ -258,7 +264,7 @@
var packed;
encoder.writeUint32(WebUsbService_GetPermission_Params.encodedSize);
encoder.writeUint32(0);
encoder.encodeArrayPointer(new codec.PointerTo(device_manager$.UsbDeviceFilter), val.deviceFilters);
encoder.encodeArrayPointer(new codec.PointerTo(device_enumeration_options$.UsbDeviceFilter), val.deviceFilters);
};
function WebUsbService_GetPermission_ResponseParams(values) {
this.initDefaults_();

View file

@ -0,0 +1,20 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:h="http://www.w3.org/1999/xhtml">
<h:script src="/resources/testharness.js"/>
<h:script src="/resources/testharnessreport.js"/>
<rect width="100" height="100" fill="red">
<set id="anim" attributeName="fill" to="green" begin="indefinite"/>
</rect>
<script>
async_test(t => {
let anim = document.getElementById("anim");
onload = t.step_func(() => {
anim.endElement();
anim.beginElement();
requestAnimationFrame(t.step_func_done(() => {
assert_equals(getComputedStyle(anim.parentNode).fill, "rgb(0, 128, 0)");
}));
});
}, "endElement() on an inactive element");
</script>
</svg>

After

Width:  |  Height:  |  Size: 707 B

View file

@ -79,7 +79,12 @@ class TypeData(object):
return rv
def __delitem__(self, key):
if key in self.data:
del self.data[key]
elif self.json_data is not None:
del self.json_data[from_os_path(key)]
else:
raise KeyError
def __setitem__(self, key, value):
self.data[key] = value
@ -279,6 +284,11 @@ class Manifest(object):
if old_hash != file_hash:
new_type, manifest_items = source_file.manifest_items()
hash_changed = True
if new_type != old_type:
try:
del self._data[old_type][rel_path]
except KeyError:
pass
else:
new_type, manifest_items = old_type, self._data[old_type][rel_path]
if old_type in reftest_types and new_type != old_type:
@ -306,10 +316,7 @@ class Manifest(object):
_, old_type = self._path_hash[rel_path]
if old_type in reftest_types:
reftest_changes = True
try:
del self._path_hash[rel_path]
except KeyError:
pass
try:
del self._data[old_type][rel_path]
except KeyError:

View file

@ -353,13 +353,13 @@ def test_no_update():
assert list(m) == [("testharness", test1.path, {test1}),
("testharness", test2.path, {test2})]
s1_1 = SourceFileWithTest("test1", "1"*40, item.TestharnessTest)
s1_1 = SourceFileWithTest("test1", "1"*40, item.ManualTest)
m.update([(s1, True), (s2.rel_path, False)])
m.update([(s1_1, True), (s2.rel_path, False)])
test1_1 = s1_1.manifest_items()[1][0]
assert list(m) == [("testharness", test1_1.path, {test1_1}),
assert list(m) == [("manual", test1_1.path, {test1_1}),
("testharness", test2.path, {test2})]
@ -371,10 +371,28 @@ def test_no_update_delete():
m.update([(s1, True), (s2, True)])
s1_1 = SourceFileWithTest("test1", "1"*40, item.TestharnessTest)
test1 = s1.manifest_items()[1][0]
s1_1 = SourceFileWithTest("test1", "1"*40, item.ManualTest)
m.update([(s1_1.rel_path, False)])
assert list(m) == [("testharness", test1.path, {test1})]
def test_update_from_json():
m = manifest.Manifest()
s1 = SourceFileWithTest("test1", "0"*40, item.TestharnessTest)
s2 = SourceFileWithTest("test2", "0"*40, item.TestharnessTest)
m.update([(s1, True), (s2, True)])
json_str = m.to_json()
m = manifest.Manifest.from_json("/", json_str)
m.update([(s1, True)])
test1_1 = s1_1.manifest_items()[1][0]
test1 = s1.manifest_items()[1][0]
assert list(m) == [("testharness", test1_1.path, {test1_1})]
assert list(m) == [("testharness", test1.path, {test1})]

View file

@ -16,6 +16,7 @@ import traceback
from six.moves import urllib
import uuid
from collections import defaultdict, OrderedDict
from itertools import chain, product
from multiprocessing import Process, Event
from localpaths import repo_root
@ -720,6 +721,9 @@ def build_config(override_path=None, **kwargs):
return rv
def _make_subdomains_product(s, depth=2):
return set(u".".join(x) for x in chain(*(product(s, repeat=i) for i in range(1, depth+1))))
_subdomains = {u"www",
u"www1",
u"www2",
@ -728,6 +732,10 @@ _subdomains = {u"www",
_not_subdomains = {u"nonexistent"}
_subdomains = _make_subdomains_product(_subdomains)
_not_subdomains = _make_subdomains_product(_not_subdomains)
class ConfigBuilder(config.ConfigBuilder):
"""serve config

View file

@ -1,6 +1,7 @@
import json
import os
import pickle
import platform
import os
import pytest
@ -75,3 +76,11 @@ def test_pickle():
# Ensure that the config object can be pickled
with ConfigBuilder() as c:
pickle.dumps(c)
def test_config_json_length():
# we serialize the config as JSON for pytestrunner and put it in an env
# variable, which on Windows must have a length <= 0x7FFF (int16)
with ConfigBuilder() as c:
data = json.dumps(c.as_dict())
assert len(data) <= 0x7FFF

View file

@ -1,3 +1,4 @@
import json
import logging
import pickle
@ -43,6 +44,16 @@ def test_logger_preserved():
assert c.logger is logger
def test_as_dict():
with config.ConfigBuilder() as c:
assert c.as_dict() is not None
def test_as_dict_is_json():
with config.ConfigBuilder() as c:
assert json.dumps(c.as_dict()) is not None
def test_init_basic_prop():
with config.ConfigBuilder(browser_host="foo.bar") as c:
assert c.browser_host == "foo.bar"

View file

@ -75,7 +75,9 @@ def json_types(obj):
return {key: json_types(value) for key, value in iteritems(obj)}
if (isinstance(obj, string_types) or
isinstance(obj, integer_types) or
isinstance(obj, float)):
isinstance(obj, float) or
isinstance(obj, bool) or
obj is None):
return obj
if isinstance(obj, list) or hasattr(obj, "__iter__"):
return [json_types(value) for value in obj]

View file

@ -0,0 +1,99 @@
<!doctype html>
<meta charset="utf-8">
<title>RTCDtlsTransport</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="RTCPeerConnection-helper.js"></script>
<script>
'use strict';
// The following helper functions are called from RTCPeerConnection-helper.js:
// exchangeIceCandidates
// doSignalingHandshake
// trackFactories.audio()
/*
5.5. RTCDtlsTransport Interface
interface RTCDtlsTransport : EventTarget {
readonly attribute RTCDtlsTransportState state;
sequence<ArrayBuffer> getRemoteCertificates();
attribute EventHandler onstatechange;
attribute EventHandler onerror;
...
};
enum RTCDtlsTransportState {
"new",
"connecting",
"connected",
"closed",
"failed"
};
*/
function resolveWhen(t, dtlstransport, state) {
return new Promise((resolve, reject) => {
if (dtlstransport.state == state) { resolve(); }
dtlstransport.addEventListener('statechange', t.step_func(e => {
if (dtlstransport.state == state) {
resolve();
}
}));
});
}
promise_test(async t => {
const pc1 = new RTCPeerConnection();
t.add_cleanup(() => pc1.close());
const pc2 = new RTCPeerConnection();
t.add_cleanup(() => pc2.close());
pc1.addTrack(trackFactories.audio());
exchangeIceCandidates(pc1, pc2);
await doSignalingHandshake(pc1, pc2);
const dtlsTransport1 = pc1.getTransceivers()[0].sender.transport;
const dtlsTransport2 = pc2.getTransceivers()[0].sender.transport;
assert_true(dtlsTransport1 instanceof RTCDtlsTransport);
assert_true(dtlsTransport2 instanceof RTCDtlsTransport);
await Promise.all([resolveWhen(t, dtlsTransport1, 'connected'),
resolveWhen(t, dtlsTransport2, 'connected')]);
}, 'DTLS transport goes to connected state');
promise_test(async t => {
const pc1 = new RTCPeerConnection();
t.add_cleanup(() => pc1.close());
const pc2 = new RTCPeerConnection();
t.add_cleanup(() => pc2.close());
pc1.addTrack(trackFactories.audio());
exchangeIceCandidates(pc1, pc2);
await doSignalingHandshake(pc1, pc2);
const dtlsTransport1 = pc1.getTransceivers()[0].sender.transport;
const dtlsTransport2 = pc2.getTransceivers()[0].sender.transport;
await Promise.all([resolveWhen(t, dtlsTransport1, 'connected'),
resolveWhen(t, dtlsTransport2, 'connected')]);
pc1.close();
assert_equals(dtlsTransport1.state, 'closed');
}, 'close() causes the local transport to close immediately');
promise_test(async t => {
const pc1 = new RTCPeerConnection();
t.add_cleanup(() => pc1.close());
const pc2 = new RTCPeerConnection();
t.add_cleanup(() => pc2.close());
pc1.addTrack(trackFactories.audio());
exchangeIceCandidates(pc1, pc2);
await doSignalingHandshake(pc1, pc2);
const dtlsTransport1 = pc1.getTransceivers()[0].sender.transport;
const dtlsTransport2 = pc2.getTransceivers()[0].sender.transport;
await Promise.all([resolveWhen(t, dtlsTransport1, 'connected'),
resolveWhen(t, dtlsTransport2, 'connected')]);
pc1.close();
await resolveWhen(t, dtlsTransport2, 'closed');
}, 'close() causes the other end\'s DTLS transport to close');
</script>

View file

@ -42,10 +42,12 @@ let loadChromiumResources = Promise.resolve().then(() => {
let chain = Promise.resolve();
[
'/resources/chromium/mojo_bindings.js',
'/resources/chromium/big_buffer.mojom.js',
'/resources/chromium/string16.mojom.js',
'/resources/chromium/url.mojom.js',
'/resources/chromium/device.mojom.js',
'/resources/chromium/device_manager.mojom.js',
'/resources/chromium/device_enumeration_options.mojom.js',
'/resources/chromium/device_manager_client.mojom.js',
'/resources/chromium/web_usb_service.mojom.js',
'/resources/chromium/webusb-test.js',
].forEach(path => {

Some files were not shown because too many files have changed in this diff Show more