mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Update web-platform-tests to revision 4adce83d1f2b08fa2e92427c4687d0cf535aee53
This commit is contained in:
parent
d3763452b5
commit
3e4ec1724a
102 changed files with 3019 additions and 1309 deletions
|
@ -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]
|
||||
|
|
|
@ -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": [
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[floats-in-table-caption-001.html]
|
||||
expected: FAIL
|
|
@ -1,2 +0,0 @@
|
|||
[line-height-204.html]
|
||||
expected: FAIL
|
|
@ -1,2 +0,0 @@
|
|||
[mix-blend-mode-paragraph.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[background-image-first-line.html]
|
||||
expected: FAIL
|
|
@ -1,2 +0,0 @@
|
|||
[background-repeat-round-roundup.xht]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[line-break-normal-018.xht]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[line-break-strict-018.xht]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[text-transform-full-size-kana-001.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[trailing-ideographic-space-004.html]
|
||||
expected: FAIL
|
|
@ -1,2 +0,0 @@
|
|||
[word-break-keep-all-006.html]
|
||||
expected: FAIL
|
|
@ -74,3 +74,6 @@
|
|||
[opacity end]
|
||||
expected: FAIL
|
||||
|
||||
[outline-width end]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[CaretPosition-001.html]
|
||||
[Element at (400, 100)]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
[elementsFromPoint-iframes.html]
|
||||
expected: CRASH
|
||||
[elementsFromPoint on the root document for points in iframe elements]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
[parser-sets-attributes-and-children.html]
|
||||
expected: CRASH
|
||||
expected: TIMEOUT
|
||||
|
|
7
tests/wpt/metadata/fetch/http-cache/post-patch.html.ini
Normal file
7
tests/wpt/metadata/fetch/http-cache/post-patch.html.ini
Normal 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
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[006.html]
|
||||
[Link with onclick form submit and href navigation ]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
[traverse_the_history_4.html]
|
||||
[traverse_the_history_3.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
[non-active-document.html]
|
||||
[DOMParser]
|
||||
expected: FAIL
|
||||
|
||||
[createHTMLDocument]
|
||||
expected: FAIL
|
||||
|
||||
[<template>]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
[FormDataEvent.window.html]
|
||||
[Successful FormDataEvent constructor]
|
||||
expected: FAIL
|
||||
|
||||
[Failing FormDataEvent constructor]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[form-submission-algorithm.html]
|
||||
[If constructing entry list flag of form is true, then return]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[077.html]
|
||||
[ adding several types of scripts through the DOM and removing some of them confuses scheduler ]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[aborted-parser.window.html]
|
||||
[document.open() after parser is aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
[promise-rejection-events.html]
|
||||
expected: TIMEOUT
|
||||
[rejectionhandled is dispatched from a queued task, and not immediately]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
[005.html]
|
||||
expected: ERROR
|
||||
[dedicated worker in shared worker in dedicated worker]
|
||||
expected: FAIL
|
||||
|
||||
|
|
7
tests/wpt/metadata/xhr/formdata.htm.ini
Normal file
7
tests/wpt/metadata/xhr/formdata.htm.ini
Normal 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
|
||||
|
|
@ -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
|
||||
|
|
|
@ -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");
|
||||
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
||||
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
||||
|
BIN
tests/wpt/web-platform-tests/css/css-lists/resources/white.gif
Normal file
BIN
tests/wpt/web-platform-tests/css/css-lists/resources/white.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 192 B |
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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)
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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>
|
|
@ -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])
|
||||
|
|
|
@ -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'],
|
||||
|
|
|
@ -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>
|
|
@ -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 => {
|
||||
|
|
|
@ -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');
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
|
@ -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;
|
||||
}
|
|
@ -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>
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
})();
|
|
@ -0,0 +1 @@
|
|||
Content-Type: text/javascript; charset=utf-8
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
})();
|
|
@ -0,0 +1 @@
|
|||
Content-Type: text/javascript; charset=utf-8
|
|
@ -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;
|
||||
})();
|
|
@ -1 +0,0 @@
|
|||
Content-Type: text/javascript; charset=utf-8
|
|
@ -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;
|
||||
})();
|
|
@ -0,0 +1 @@
|
|||
Content-Type: text/javascript; charset=utf-8
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
});
|
||||
}
|
|
@ -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_();
|
||||
|
|
|
@ -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 |
|
@ -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:
|
||||
|
|
|
@ -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})]
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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>
|
|
@ -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
Loading…
Add table
Add a link
Reference in a new issue