aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2018-07-09 15:02:26 -0400
committerGitHub <noreply@github.com>2018-07-09 15:02:26 -0400
commit493bb05ed0945ea1193836d55627fde88a34a501 (patch)
tree8557eacd0d9aa5afbfce5081d6501708ea0a6850
parent52ccdba05f5fbe37169f7a1c6fcc413bdc5681b8 (diff)
parent4787b28da37238d9b1d892b794455db24b481d99 (diff)
downloadservo-493bb05ed0945ea1193836d55627fde88a34a501.tar.gz
servo-493bb05ed0945ea1193836d55627fde88a34a501.zip
Auto merge of #21099 - servo-wpt-sync:wpt_update_28-06-2018, r=jdm
Sync WPT with upstream (28-06-2018) Automated downstream sync of changes from upstream as of 28-06-2018. [no-wpt-sync] <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/21099) <!-- Reviewable:end -->
-rw-r--r--tests/wpt/metadata/MANIFEST.json1528
-rw-r--r--tests/wpt/metadata/cors/script-304.html.ini7
-rw-r--r--tests/wpt/metadata/css/CSS2/abspos/between-float-and-text.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-fonts/variations/font-weight-matching.html.ini3
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/trailing-space-before-br-001.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-transforms/parsing/transform-box-valid.html.ini16
-rw-r--r--tests/wpt/metadata/css/css-values/vh_not_refreshing_on_chrome.html.ini2
-rw-r--r--tests/wpt/metadata/css/mediaqueries/test_media_queries.html.ini1035
-rw-r--r--tests/wpt/metadata/dom/nodes/attributes.html.ini3
-rw-r--r--tests/wpt/metadata/fetch/api/request/request-keepalive-quota.html.ini17
-rw-r--r--tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch-in-service-worker.html.ini4
-rw-r--r--tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.any.js.ini9
-rw-r--r--tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.html.ini7
-rw-r--r--tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-abort/javascript-url-abort-return-value-undefined.tentative.html.ini3
-rw-r--r--tests/wpt/metadata/quirks/unitless-length.html.ini1412
-rw-r--r--tests/wpt/metadata/subresource-integrity/idlharness.window.js.ini4
-rw-r--r--tests/wpt/mozilla/meta/css/border_radius_elliptical_a.html.ini2
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/cookieListItem_attributes.tentative.https.window.js235
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/cookieListItem_attributes.tentative.window.js121
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/cookieStore_delete_arguments.tentative.https.window.js (renamed from tests/wpt/web-platform-tests/cookie-store/cookieStore_delete_arguments.tentative.window.js)0
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/cookieStore_delete_basic.tentative.https.window.js (renamed from tests/wpt/web-platform-tests/cookie-store/cookieStore_delete_basic.tentative.window.js)0
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/cookieStore_event_arguments.tenative.https.window.js (renamed from tests/wpt/web-platform-tests/cookie-store/cookieStore_event_arguments.tenative.window.js)0
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/cookieStore_event_basic.tentative.https.window.js (renamed from tests/wpt/web-platform-tests/cookie-store/cookieStore_event_basic.tentative.window.js)0
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/cookieStore_event_delete.tenative.https.window.js (renamed from tests/wpt/web-platform-tests/cookie-store/cookieStore_event_delete.tenative.window.js)0
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/cookieStore_event_overwrite.tentative.https.window.js (renamed from tests/wpt/web-platform-tests/cookie-store/cookieStore_event_overwrite.tentative.window.js)0
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_arguments.tentative.https.window.js (renamed from tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_arguments.tentative.window.js)8
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_multiple.tentative.https.window.js (renamed from tests/wpt/web-platform-tests/cookie-store/document_getAll_multiple.tentative.html)10
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_set_basic.tentative.https.window.js (renamed from tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_set_basic.tentative.window.js)0
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.https.window.js (renamed from tests/wpt/web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.window.js)8
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/cookieStore_get_delete_basic.tentative.https.window.js (renamed from tests/wpt/web-platform-tests/cookie-store/cookieStore_get_delete_basic.tentative.window.js)0
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/cookieStore_get_set_basic.tentative.https.window.js (renamed from tests/wpt/web-platform-tests/cookie-store/cookieStore_get_set_basic.tentative.window.js)0
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/cookieStore_has_arguments.tentative.window.js92
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/cookieStore_has_basic.tentative.window.js25
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/cookieStore_in_detached_frame.tentative.https.html (renamed from tests/wpt/web-platform-tests/cookie-store/cookieStore_in_detached_frame.tentative.html)0
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/cookieStore_set_arguments.tentative.https.window.js (renamed from tests/wpt/web-platform-tests/cookie-store/cookieStore_set_arguments.tentative.window.js)31
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/cookieStore_set_expires_option.tentative.window.js59
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/cookieStore_special_names.tentative.html71
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/cookieStore_special_names.tentative.https.window.js (renamed from tests/wpt/web-platform-tests/cookie-store/cookieStore_special_names.tentative.https.html)10
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/document_cookie.tentative.html8
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative.html8
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/httponly_cookies.https.window.js (renamed from tests/wpt/web-platform-tests/cookie-store/httponly_cookies.window.js)0
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/idlharness.tentative.https.html (renamed from tests/wpt/web-platform-tests/cookie-store/idlharness.tentative.html)0
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/no_name_and_no_value.tentative.html8
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/no_name_equals_in_value.tentative.html8
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/no_name_multiple_values.tentative.html8
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_arguments.js12
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_basic.js8
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions.js6
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_basic.js2
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_empty.js36
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_empty.tentative.https.html21
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_mismatch.js53
-rw-r--r--tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_mismatch.tentative.https.html21
-rw-r--r--tests/wpt/web-platform-tests/cors/resources/cache-304.py10
-rw-r--r--tests/wpt/web-platform-tests/cors/script-304.html40
-rw-r--r--tests/wpt/web-platform-tests/credential-management/idl.https.html103
-rw-r--r--tests/wpt/web-platform-tests/credential-management/idlharness.https.window.js35
-rw-r--r--tests/wpt/web-platform-tests/css/CSS2/abspos/between-float-and-text.html11
-rw-r--r--tests/wpt/web-platform-tests/css/css-box/parsing/clear-invalid.html19
-rw-r--r--tests/wpt/web-platform-tests/css/css-box/parsing/clear-valid.html21
-rw-r--r--tests/wpt/web-platform-tests/css/css-box/parsing/float-invalid.html20
-rw-r--r--tests/wpt/web-platform-tests/css/css-box/parsing/float-valid.html29
-rw-r--r--tests/wpt/web-platform-tests/css/css-box/parsing/height-invalid.html30
-rw-r--r--tests/wpt/web-platform-tests/css/css-box/parsing/height-valid.html30
-rw-r--r--tests/wpt/web-platform-tests/css/css-box/parsing/margin-invalid.html25
-rw-r--r--tests/wpt/web-platform-tests/css/css-box/parsing/margin-valid.html34
-rw-r--r--tests/wpt/web-platform-tests/css/css-box/parsing/max-height-invalid.html30
-rw-r--r--tests/wpt/web-platform-tests/css/css-box/parsing/max-height-valid.html31
-rw-r--r--tests/wpt/web-platform-tests/css/css-box/parsing/max-width-invalid.html30
-rw-r--r--tests/wpt/web-platform-tests/css/css-box/parsing/max-width-valid.html31
-rw-r--r--tests/wpt/web-platform-tests/css/css-box/parsing/min-height-invalid.html33
-rw-r--r--tests/wpt/web-platform-tests/css/css-box/parsing/min-height-valid.html29
-rw-r--r--tests/wpt/web-platform-tests/css/css-box/parsing/min-width-invalid.html33
-rw-r--r--tests/wpt/web-platform-tests/css/css-box/parsing/min-width-valid.html29
-rw-r--r--tests/wpt/web-platform-tests/css/css-box/parsing/overflow-invalid.html24
-rw-r--r--tests/wpt/web-platform-tests/css/css-box/parsing/overflow-valid.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-box/parsing/padding-invalid.html34
-rw-r--r--tests/wpt/web-platform-tests/css/css-box/parsing/padding-valid.html25
-rw-r--r--tests/wpt/web-platform-tests/css/css-box/parsing/resources/parsing-testcommon.js39
-rw-r--r--tests/wpt/web-platform-tests/css/css-box/parsing/visibility-invalid.html19
-rw-r--r--tests/wpt/web-platform-tests/css/css-box/parsing/visibility-valid.html20
-rw-r--r--tests/wpt/web-platform-tests/css/css-box/parsing/width-invalid.html31
-rw-r--r--tests/wpt/web-platform-tests/css/css-box/parsing/width-valid.html29
-rw-r--r--tests/wpt/web-platform-tests/css/css-cascade/all-prop-initial-xml.html34
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-size-013.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/reference/contain-paint-007-ref.html6
-rw-r--r--tests/wpt/web-platform-tests/css/css-env/META.yml3
-rw-r--r--tests/wpt/web-platform-tests/css/css-images/parsing/gradient-position-invalid.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-logical/logical-box-border-shorthands.html15
-rw-r--r--tests/wpt/web-platform-tests/css/css-logical/resources/test-box-properties.js17
-rw-r--r--tests/wpt/web-platform-tests/css/css-scroll-snap/overflowing-snap-areas.html153
-rw-r--r--tests/wpt/web-platform-tests/css/css-scroll-snap/scrollTo-scrollBy-snaps.html58
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/trailing-space-before-br-001.html44
-rw-r--r--tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-box-invalid.html20
-rw-r--r--tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-box-valid.html22
-rw-r--r--tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-invalid.html45
-rw-r--r--tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-origin-invalid.html24
-rw-r--r--tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-origin-valid.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-valid.html53
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/parsing/direction-invalid.html19
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/parsing/direction-valid.html19
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/parsing/resources/parsing-testcommon.js39
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-combine-upright-invalid.html19
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-combine-upright-valid.html19
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-orientation-invalid.html19
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-orientation-valid.html20
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/parsing/unicode-bidi-invalid.html19
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/parsing/unicode-bidi-valid.html23
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/parsing/writing-mode-invalid.html19
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/parsing/writing-mode-valid.html20
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/reference/scrollbar-vertical-rl-ref.html21
-rw-r--r--tests/wpt/web-platform-tests/css/css-writing-modes/scrollbar-vertical-rl.html29
-rw-r--r--tests/wpt/web-platform-tests/css/mediaqueries/test_media_queries.html81
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/background/box-shadow-currentcolor-ref.html31
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/background/box-shadow-currentcolor.html36
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/background/reftest.list3
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001-ref.html3
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001.html8
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002-ref.html3
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002.html3
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003-ref.html3
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003.html3
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004-ref.html3
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004.html3
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-005.html4
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006-ref.html3
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006.html3
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001-ref.html3
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001.html3
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001-ref.html3
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001.html3
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001-ref.html3
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001.html3
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001-ref.html3
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001.html3
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001-ref.html30
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001a.html34
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001b.html36
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001-ref.html57
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001.html61
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001-ref.html37
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001.html41
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001-ref.html52
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001.html60
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/reftest.list5
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/float-should-push-ref.html72
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/float-should-push.html77
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/reftest.list2
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/reftest.list3
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-shadow-currentcolor-ref.html23
-rw-r--r--tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-shadow-currentcolor.html31
-rw-r--r--tests/wpt/web-platform-tests/docs/_writing-tests/assumptions.md9
-rw-r--r--tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.md5
-rw-r--r--tests/wpt/web-platform-tests/dom/nodes/attributes.html6
-rw-r--r--tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted-segmented.https.html60
-rw-r--r--tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-encrypted-clear-segmented-sources.js109
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/experimental-features/vertical-scroll-touch-action-manual.tentative.html1
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/resources/featurepolicy.js2
-rw-r--r--tests/wpt/web-platform-tests/fetch/api/request/request-keepalive-quota.html18
-rw-r--r--tests/wpt/web-platform-tests/fetch/cross-origin-resource-policy/fetch-in-service-worker.html12
-rw-r--r--tests/wpt/web-platform-tests/fetch/cross-origin-resource-policy/fetch.any.js (renamed from tests/wpt/web-platform-tests/fetch/cross-origin-resource-policy/fetch.html)29
-rw-r--r--tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-and-exit-iframe-manual.html2
-rw-r--r--tests/wpt/web-platform-tests/fullscreen/model/move-to-fullscreen-iframe-manual.html2
-rw-r--r--tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/004.html2
-rw-r--r--tests/wpt/web-platform-tests/html/scripting/the-noscript-element/non-html-noscript.html16
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/assumptions/html-elements.html4
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/html-elements.html.ini6
-rw-r--r--tests/wpt/web-platform-tests/interfaces/DOM-Parsing.idl8
-rw-r--r--tests/wpt/web-platform-tests/interfaces/cookie-store.idl24
-rw-r--r--tests/wpt/web-platform-tests/interfaces/credential-management.idl103
-rw-r--r--tests/wpt/web-platform-tests/interfaces/image-capture.idl (renamed from tests/wpt/web-platform-tests/interfaces/mediacapture-image.idl)5
-rw-r--r--tests/wpt/web-platform-tests/interfaces/webappsec-subresource-integrity.idl11
-rw-r--r--tests/wpt/web-platform-tests/lifecycle/META.yml2
-rw-r--r--tests/wpt/web-platform-tests/lint.whitelist2
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/idlharness.html20
-rw-r--r--tests/wpt/web-platform-tests/payment-request/PaymentMethodChangeEvent/methodDetails-attribute.https.html1
-rw-r--r--tests/wpt/web-platform-tests/payment-request/PaymentMethodChangeEvent/methodName-attribute.https.html1
-rw-r--r--tests/wpt/web-platform-tests/payment-request/payment-response/complete-method-manual.https.html16
-rw-r--r--tests/wpt/web-platform-tests/permissions/interfaces.any.js22
-rw-r--r--tests/wpt/web-platform-tests/quirks/hashless-hex-color.html498
-rw-r--r--tests/wpt/web-platform-tests/quirks/hashless-hex-color/limited-quirks.html16
-rw-r--r--tests/wpt/web-platform-tests/quirks/hashless-hex-color/no-quirks.html16
-rw-r--r--tests/wpt/web-platform-tests/quirks/hashless-hex-color/quirks.html16
-rw-r--r--tests/wpt/web-platform-tests/quirks/hashless-hex-color/support/common.js423
-rw-r--r--tests/wpt/web-platform-tests/quirks/percentage-height-calculation.html8
-rw-r--r--tests/wpt/web-platform-tests/quirks/support/test-ref-iframe.js17
-rw-r--r--tests/wpt/web-platform-tests/quirks/unitless-length.html219
-rw-r--r--tests/wpt/web-platform-tests/quirks/unitless-length/limited-quirks.html15
-rw-r--r--tests/wpt/web-platform-tests/quirks/unitless-length/no-quirks.html15
-rw-r--r--tests/wpt/web-platform-tests/quirks/unitless-length/quirks.html15
-rw-r--r--tests/wpt/web-platform-tests/quirks/unitless-length/support/common.js152
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/generic/common.js3
-rw-r--r--tests/wpt/web-platform-tests/resources/chromium/generic_sensor_mocks.js22
-rw-r--r--tests/wpt/web-platform-tests/resources/testharness.js3
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/referrer-policy-header.https.html66
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/resources/performance-timeline-worker.js18
-rw-r--r--tests/wpt/web-platform-tests/shadow-dom/Document-prototype-currentScript.html11
-rw-r--r--tests/wpt/web-platform-tests/subresource-integrity/idlharness.window.js23
-rw-r--r--tests/wpt/web-platform-tests/tools/conftest.py12
-rw-r--r--tests/wpt/web-platform-tests/tools/serve/serve.py8
-rw-r--r--tests/wpt/web-platform-tests/tools/serve/test_serve.py3
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py13
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/webkit.py18
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_cookies.py5
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_handlers.py31
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_input_file.py15
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py34
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_request.py9
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_response.py3
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_server.py4
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_stash.py2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/tests/test_config.py17
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/tests/test_replacement_tokenizer.py26
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/wptserve/config.py31
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py8
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/wptserve/response.py6
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/wptserve/server.py4
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/wptserve/sslutils/__init__.py9
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/wptserve/utils.py2
-rw-r--r--tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/property-list.js16
-rw-r--r--tests/wpt/web-platform-tests/webaudio/resources/audiobuffersource-testing.js102
-rw-r--r--tests/wpt/web-platform-tests/webaudio/resources/audit.js72
-rw-r--r--tests/wpt/web-platform-tests/webaudio/resources/note-grain-on-testing.js159
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-basic.html37
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-channels.html97
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-ended.html40
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-grain.html71
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels-expected.wavbin0 -> 529244 bytes
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html78
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-one-sample-loop.html47
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-playbackrate-zero.html80
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-start.html174
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiosource-onended.html101
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiosource-time-limits.html74
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/note-grain-on-play.html121
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/note-grain-on-timing.html47
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sample-accurate-scheduling.html110
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-getoutputtimestamp.html5
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html51
-rw-r--r--tests/wpt/web-platform-tests/webauthn/interfaces.https.any.js19
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/element_click/interactability.py2
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/element_click/navigate.py9
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/element_click/scroll_into_view.py2
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-add-track-no-deadlock.https.html2
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTrack.https.html5
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-removeTrack.https.html68
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html13
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCRtpReceiver-getStats.https.html1
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCRtpSender-getStats.https.html1
-rw-r--r--tests/wpt/web-platform-tests/webrtc/tools/codemod-peerconnection-addcleanup58
-rw-r--r--tests/wpt/web-platform-tests/webrtc/tools/html-codemod.js34
-rw-r--r--tests/wpt/web-platform-tests/webrtc/tools/package-lock.json1213
-rw-r--r--tests/wpt/web-platform-tests/webrtc/tools/package.json4
-rw-r--r--tests/wpt/web-platform-tests/workers/modules/dedicated-worker-import-referrer.html68
-rw-r--r--tests/wpt/web-platform-tests/worklets/resources/referrer-checker.py21
-rw-r--r--tests/wpt/web-platform-tests/worklets/resources/referrer-tests.js34
-rw-r--r--tests/wpt/web-platform-tests/worklets/resources/referrer-window.html33
258 files changed, 8196 insertions, 4678 deletions
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index 570c138fcbb..322da5eff25 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -19449,6 +19449,18 @@
{}
]
],
+ "css/CSS2/abspos/between-float-and-text.html": [
+ [
+ "/css/CSS2/abspos/between-float-and-text.html",
+ [
+ [
+ "/css/reference/ref-filled-green-200px-square.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/CSS2/abspos/hypothetical-inline-alone-on-second-line.html": [
[
"/css/CSS2/abspos/hypothetical-inline-alone-on-second-line.html",
@@ -159893,6 +159905,18 @@
{}
]
],
+ "css/css-writing-modes/scrollbar-vertical-rl.html": [
+ [
+ "/css/css-writing-modes/scrollbar-vertical-rl.html",
+ [
+ [
+ "/css/css-writing-modes/reference/scrollbar-vertical-rl-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-writing-modes/sizing-orthog-htb-in-vlr-001.xht": [
[
"/css/css-writing-modes/sizing-orthog-htb-in-vlr-001.xht",
@@ -165481,6 +165505,18 @@
{}
]
],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/background/box-shadow-currentcolor.html": [
+ [
+ "/css/vendor-imports/mozilla/mozilla-central-reftests/background/box-shadow-currentcolor.html",
+ [
+ [
+ "/css/vendor-imports/mozilla/mozilla-central-reftests/background/box-shadow-currentcolor-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/vendor-imports/mozilla/mozilla-central-reftests/break3/moz-block-fragmentation-001.html": [
[
"/css/vendor-imports/mozilla/mozilla-central-reftests/break3/moz-block-fragmentation-001.html",
@@ -166225,6 +166261,66 @@
{}
]
],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001a.html": [
+ [
+ "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001a.html",
+ [
+ [
+ "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001b.html": [
+ [
+ "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001b.html",
+ [
+ [
+ "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001.html": [
+ [
+ "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001.html",
+ [
+ [
+ "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001.html": [
+ [
+ "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001.html",
+ [
+ [
+ "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001.html": [
+ [
+ "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001.html",
+ [
+ [
+ "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001a.html": [
[
"/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001a.html",
@@ -173209,6 +173305,18 @@
{}
]
],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/float-should-push.html": [
+ [
+ "/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/float-should-push.html",
+ [
+ [
+ "/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/float-should-push-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-border-box-001.html": [
[
"/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-border-box-001.html",
@@ -175669,6 +175777,18 @@
{}
]
],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-shadow-currentcolor.html": [
+ [
+ "/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-shadow-currentcolor.html",
+ [
+ [
+ "/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-shadow-currentcolor-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/vendor-imports/mozilla/mozilla-central-reftests/text3/hyphenation-control-1.html": [
[
"/css/vendor-imports/mozilla/mozilla-central-reftests/text3/hyphenation-control-1.html",
@@ -216832,6 +216952,16 @@
{}
]
],
+ "cookie-store/serviceworker_cookieStore_subscriptions_empty.js": [
+ [
+ {}
+ ]
+ ],
+ "cookie-store/serviceworker_cookieStore_subscriptions_mismatch.js": [
+ [
+ {}
+ ]
+ ],
"cookies/META.yml": [
[
{}
@@ -217537,6 +217667,11 @@
{}
]
],
+ "cors/resources/cache-304.py": [
+ [
+ {}
+ ]
+ ],
"cors/resources/checkandremove.py": [
[
{}
@@ -240782,6 +240917,11 @@
{}
]
],
+ "css/css-box/parsing/resources/parsing-testcommon.js": [
+ [
+ {}
+ ]
+ ],
"css/css-break/META.yml": [
[
{}
@@ -241542,6 +241682,11 @@
{}
]
],
+ "css/css-env/META.yml": [
+ [
+ {}
+ ]
+ ],
"css/css-exclusions/META.yml": [
[
{}
@@ -262027,6 +262172,11 @@
{}
]
],
+ "css/css-writing-modes/parsing/resources/parsing-testcommon.js": [
+ [
+ {}
+ ]
+ ],
"css/css-writing-modes/reference/available-size-001-ref.html": [
[
{}
@@ -262607,6 +262757,11 @@
{}
]
],
+ "css/css-writing-modes/reference/scrollbar-vertical-rl-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-writing-modes/reference/svg-aliasing-001-ref.html": [
[
{}
@@ -268067,6 +268222,11 @@
{}
]
],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/background/box-shadow-currentcolor-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/vendor-imports/mozilla/mozilla-central-reftests/background/reftest.list": [
[
{}
@@ -268247,6 +268407,26 @@
{}
]
],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001-ref.html": [
+ [
+ {}
+ ]
+ ],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001-ref.html": [
+ [
+ {}
+ ]
+ ],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001-ref.html": [
+ [
+ {}
+ ]
+ ],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001-ref.html": [
[
{}
@@ -270272,6 +270452,11 @@
{}
]
],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/float-should-push-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/reftest.list": [
[
{}
@@ -270932,6 +271117,11 @@
{}
]
],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-shadow-currentcolor-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/vendor-imports/mozilla/mozilla-central-reftests/text3/hyphenation-control-1-ref.html": [
[
{}
@@ -273932,6 +274122,11 @@
{}
]
],
+ "encrypted-media/scripts/playback-temporary-encrypted-clear-segmented-sources.js": [
+ [
+ {}
+ ]
+ ],
"encrypted-media/scripts/playback-temporary-encrypted-clear-sources.js": [
[
{}
@@ -288452,11 +288647,6 @@
{}
]
],
- "infrastructure/metadata/infrastructure/assumptions/html-elements.html.ini": [
- [
- {}
- ]
- ],
"infrastructure/metadata/infrastructure/browsers/firefox/__dir__.ini": [
[
{}
@@ -288657,6 +288847,11 @@
{}
]
],
+ "interfaces/credential-management.idl": [
+ [
+ {}
+ ]
+ ],
"interfaces/css-animations.idl": [
[
{}
@@ -288782,6 +288977,11 @@
{}
]
],
+ "interfaces/image-capture.idl": [
+ [
+ {}
+ ]
+ ],
"interfaces/input-events.idl": [
[
{}
@@ -288817,11 +289017,6 @@
{}
]
],
- "interfaces/mediacapture-image.idl": [
- [
- {}
- ]
- ],
"interfaces/mediacapture-main.idl": [
[
{}
@@ -289007,6 +289202,11 @@
{}
]
],
+ "interfaces/webappsec-subresource-integrity.idl": [
+ [
+ {}
+ ]
+ ],
"interfaces/webaudio.idl": [
[
{}
@@ -289127,6 +289327,11 @@
{}
]
],
+ "lifecycle/META.yml": [
+ [
+ {}
+ ]
+ ],
"lifecycle/resources/foo.txt": [
[
{}
@@ -291342,11 +291547,26 @@
{}
]
],
+ "quirks/hashless-hex-color/support/common.js": [
+ [
+ {}
+ ]
+ ],
"quirks/historical/list-item-bullet-size-ref.html": [
[
{}
]
],
+ "quirks/support/test-ref-iframe.js": [
+ [
+ {}
+ ]
+ ],
+ "quirks/unitless-length/support/common.js": [
+ [
+ {}
+ ]
+ ],
"referrer-policy/META.yml": [
[
{}
@@ -298672,6 +298892,11 @@
{}
]
],
+ "webaudio/resources/audiobuffersource-testing.js": [
+ [
+ {}
+ ]
+ ],
"webaudio/resources/audionodeoptions.js": [
[
{}
@@ -298732,6 +298957,11 @@
{}
]
],
+ "webaudio/resources/note-grain-on-testing.js": [
+ [
+ {}
+ ]
+ ],
"webaudio/resources/panner-formulas.js": [
[
{}
@@ -298772,6 +299002,11 @@
{}
]
],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels-expected.wav": [
+ [
+ {}
+ ]
+ ],
"webaudio/the-audio-api/the-audiocontext-interface/.gitkeep": [
[
{}
@@ -299397,7 +299632,12 @@
{}
]
],
- "webrtc/tools/package-lock.json": [
+ "webrtc/tools/codemod-peerconnection-addcleanup": [
+ [
+ {}
+ ]
+ ],
+ "webrtc/tools/html-codemod.js": [
[
{}
]
@@ -315516,123 +315756,99 @@
{}
]
],
- "cookie-store/cookieListItem_attributes.tentative.window.js": [
- [
- "/cookie-store/cookieListItem_attributes.tentative.window.html",
- {}
- ]
- ],
- "cookie-store/cookieStore_delete_arguments.tentative.window.js": [
- [
- "/cookie-store/cookieStore_delete_arguments.tentative.window.html",
- {}
- ]
- ],
- "cookie-store/cookieStore_delete_basic.tentative.window.js": [
- [
- "/cookie-store/cookieStore_delete_basic.tentative.window.html",
- {}
- ]
- ],
- "cookie-store/cookieStore_event_arguments.tenative.window.js": [
- [
- "/cookie-store/cookieStore_event_arguments.tenative.window.html",
- {}
- ]
- ],
- "cookie-store/cookieStore_event_basic.tentative.window.js": [
+ "cookie-store/cookieListItem_attributes.tentative.https.window.js": [
[
- "/cookie-store/cookieStore_event_basic.tentative.window.html",
+ "/cookie-store/cookieListItem_attributes.tentative.https.window.html",
{}
]
],
- "cookie-store/cookieStore_event_delete.tenative.window.js": [
+ "cookie-store/cookieStore_delete_arguments.tentative.https.window.js": [
[
- "/cookie-store/cookieStore_event_delete.tenative.window.html",
+ "/cookie-store/cookieStore_delete_arguments.tentative.https.window.html",
{}
]
],
- "cookie-store/cookieStore_event_overwrite.tentative.window.js": [
+ "cookie-store/cookieStore_delete_basic.tentative.https.window.js": [
[
- "/cookie-store/cookieStore_event_overwrite.tentative.window.html",
+ "/cookie-store/cookieStore_delete_basic.tentative.https.window.html",
{}
]
],
- "cookie-store/cookieStore_getAll_arguments.tentative.window.js": [
+ "cookie-store/cookieStore_event_arguments.tenative.https.window.js": [
[
- "/cookie-store/cookieStore_getAll_arguments.tentative.window.html",
+ "/cookie-store/cookieStore_event_arguments.tenative.https.window.html",
{}
]
],
- "cookie-store/cookieStore_getAll_set_basic.tentative.window.js": [
+ "cookie-store/cookieStore_event_basic.tentative.https.window.js": [
[
- "/cookie-store/cookieStore_getAll_set_basic.tentative.window.html",
+ "/cookie-store/cookieStore_event_basic.tentative.https.window.html",
{}
]
],
- "cookie-store/cookieStore_get_arguments.tentative.window.js": [
+ "cookie-store/cookieStore_event_delete.tenative.https.window.js": [
[
- "/cookie-store/cookieStore_get_arguments.tentative.window.html",
+ "/cookie-store/cookieStore_event_delete.tenative.https.window.html",
{}
]
],
- "cookie-store/cookieStore_get_delete_basic.tentative.window.js": [
+ "cookie-store/cookieStore_event_overwrite.tentative.https.window.js": [
[
- "/cookie-store/cookieStore_get_delete_basic.tentative.window.html",
+ "/cookie-store/cookieStore_event_overwrite.tentative.https.window.html",
{}
]
],
- "cookie-store/cookieStore_get_set_basic.tentative.window.js": [
+ "cookie-store/cookieStore_getAll_arguments.tentative.https.window.js": [
[
- "/cookie-store/cookieStore_get_set_basic.tentative.window.html",
+ "/cookie-store/cookieStore_getAll_arguments.tentative.https.window.html",
{}
]
],
- "cookie-store/cookieStore_has_arguments.tentative.window.js": [
+ "cookie-store/cookieStore_getAll_multiple.tentative.https.window.js": [
[
- "/cookie-store/cookieStore_has_arguments.tentative.window.html",
+ "/cookie-store/cookieStore_getAll_multiple.tentative.https.window.html",
{}
]
],
- "cookie-store/cookieStore_has_basic.tentative.window.js": [
+ "cookie-store/cookieStore_getAll_set_basic.tentative.https.window.js": [
[
- "/cookie-store/cookieStore_has_basic.tentative.window.html",
+ "/cookie-store/cookieStore_getAll_set_basic.tentative.https.window.html",
{}
]
],
- "cookie-store/cookieStore_in_detached_frame.tentative.html": [
+ "cookie-store/cookieStore_get_arguments.tentative.https.window.js": [
[
- "/cookie-store/cookieStore_in_detached_frame.tentative.html",
+ "/cookie-store/cookieStore_get_arguments.tentative.https.window.html",
{}
]
],
- "cookie-store/cookieStore_set_arguments.tentative.window.js": [
+ "cookie-store/cookieStore_get_delete_basic.tentative.https.window.js": [
[
- "/cookie-store/cookieStore_set_arguments.tentative.window.html",
+ "/cookie-store/cookieStore_get_delete_basic.tentative.https.window.html",
{}
]
],
- "cookie-store/cookieStore_set_expires_option.tentative.window.js": [
+ "cookie-store/cookieStore_get_set_basic.tentative.https.window.js": [
[
- "/cookie-store/cookieStore_set_expires_option.tentative.window.html",
+ "/cookie-store/cookieStore_get_set_basic.tentative.https.window.html",
{}
]
],
- "cookie-store/cookieStore_special_names.tentative.html": [
+ "cookie-store/cookieStore_in_detached_frame.tentative.https.html": [
[
- "/cookie-store/cookieStore_special_names.tentative.html",
+ "/cookie-store/cookieStore_in_detached_frame.tentative.https.html",
{}
]
],
- "cookie-store/cookieStore_special_names.tentative.https.html": [
+ "cookie-store/cookieStore_set_arguments.tentative.https.window.js": [
[
- "/cookie-store/cookieStore_special_names.tentative.https.html",
+ "/cookie-store/cookieStore_set_arguments.tentative.https.window.html",
{}
]
],
- "cookie-store/document_cookie.tentative.html": [
+ "cookie-store/cookieStore_special_names.tentative.https.window.js": [
[
- "/cookie-store/document_cookie.tentative.html",
+ "/cookie-store/cookieStore_special_names.tentative.https.window.html",
{}
]
],
@@ -315642,33 +315858,21 @@
{}
]
],
- "cookie-store/document_getAll_multiple.tentative.html": [
- [
- "/cookie-store/document_getAll_multiple.tentative.html",
- {}
- ]
- ],
- "cookie-store/http_cookie_and_set_cookie_headers.tentative.html": [
- [
- "/cookie-store/http_cookie_and_set_cookie_headers.tentative.html",
- {}
- ]
- ],
"cookie-store/http_cookie_and_set_cookie_headers.tentative.https.html": [
[
"/cookie-store/http_cookie_and_set_cookie_headers.tentative.https.html",
{}
]
],
- "cookie-store/httponly_cookies.window.js": [
+ "cookie-store/httponly_cookies.https.window.js": [
[
- "/cookie-store/httponly_cookies.window.html",
+ "/cookie-store/httponly_cookies.https.window.html",
{}
]
],
- "cookie-store/idlharness.tentative.html": [
+ "cookie-store/idlharness.tentative.https.html": [
[
- "/cookie-store/idlharness.tentative.html",
+ "/cookie-store/idlharness.tentative.https.html",
{}
]
],
@@ -315678,36 +315882,18 @@
{}
]
],
- "cookie-store/no_name_and_no_value.tentative.html": [
- [
- "/cookie-store/no_name_and_no_value.tentative.html",
- {}
- ]
- ],
"cookie-store/no_name_and_no_value.tentative.https.html": [
[
"/cookie-store/no_name_and_no_value.tentative.https.html",
{}
]
],
- "cookie-store/no_name_equals_in_value.tentative.html": [
- [
- "/cookie-store/no_name_equals_in_value.tentative.html",
- {}
- ]
- ],
"cookie-store/no_name_equals_in_value.tentative.https.html": [
[
"/cookie-store/no_name_equals_in_value.tentative.https.html",
{}
]
],
- "cookie-store/no_name_multiple_values.tentative.html": [
- [
- "/cookie-store/no_name_multiple_values.tentative.html",
- {}
- ]
- ],
"cookie-store/no_name_multiple_values.tentative.https.html": [
[
"/cookie-store/no_name_multiple_values.tentative.https.html",
@@ -315744,6 +315930,18 @@
{}
]
],
+ "cookie-store/serviceworker_cookieStore_subscriptions_empty.tentative.https.html": [
+ [
+ "/cookie-store/serviceworker_cookieStore_subscriptions_empty.tentative.https.html",
+ {}
+ ]
+ ],
+ "cookie-store/serviceworker_cookieStore_subscriptions_mismatch.tentative.https.html": [
+ [
+ "/cookie-store/serviceworker_cookieStore_subscriptions_mismatch.tentative.https.html",
+ {}
+ ]
+ ],
"cookies/http-state/attribute-tests.html": [
[
"/cookies/http-state/attribute-tests.html",
@@ -316020,6 +316218,12 @@
{}
]
],
+ "cors/script-304.html": [
+ [
+ "/cors/script-304.html",
+ {}
+ ]
+ ],
"cors/simple-requests.htm": [
[
"/cors/simple-requests.htm",
@@ -316058,9 +316262,9 @@
{}
]
],
- "credential-management/idl.https.html": [
+ "credential-management/idlharness.https.window.js": [
[
- "/credential-management/idl.https.html",
+ "/credential-management/idlharness.https.window.html",
{}
]
],
@@ -317032,6 +317236,156 @@
{}
]
],
+ "css/css-box/parsing/clear-invalid.html": [
+ [
+ "/css/css-box/parsing/clear-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-box/parsing/clear-valid.html": [
+ [
+ "/css/css-box/parsing/clear-valid.html",
+ {}
+ ]
+ ],
+ "css/css-box/parsing/float-invalid.html": [
+ [
+ "/css/css-box/parsing/float-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-box/parsing/float-valid.html": [
+ [
+ "/css/css-box/parsing/float-valid.html",
+ {}
+ ]
+ ],
+ "css/css-box/parsing/height-invalid.html": [
+ [
+ "/css/css-box/parsing/height-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-box/parsing/height-valid.html": [
+ [
+ "/css/css-box/parsing/height-valid.html",
+ {}
+ ]
+ ],
+ "css/css-box/parsing/margin-invalid.html": [
+ [
+ "/css/css-box/parsing/margin-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-box/parsing/margin-valid.html": [
+ [
+ "/css/css-box/parsing/margin-valid.html",
+ {}
+ ]
+ ],
+ "css/css-box/parsing/max-height-invalid.html": [
+ [
+ "/css/css-box/parsing/max-height-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-box/parsing/max-height-valid.html": [
+ [
+ "/css/css-box/parsing/max-height-valid.html",
+ {}
+ ]
+ ],
+ "css/css-box/parsing/max-width-invalid.html": [
+ [
+ "/css/css-box/parsing/max-width-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-box/parsing/max-width-valid.html": [
+ [
+ "/css/css-box/parsing/max-width-valid.html",
+ {}
+ ]
+ ],
+ "css/css-box/parsing/min-height-invalid.html": [
+ [
+ "/css/css-box/parsing/min-height-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-box/parsing/min-height-valid.html": [
+ [
+ "/css/css-box/parsing/min-height-valid.html",
+ {}
+ ]
+ ],
+ "css/css-box/parsing/min-width-invalid.html": [
+ [
+ "/css/css-box/parsing/min-width-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-box/parsing/min-width-valid.html": [
+ [
+ "/css/css-box/parsing/min-width-valid.html",
+ {}
+ ]
+ ],
+ "css/css-box/parsing/overflow-invalid.html": [
+ [
+ "/css/css-box/parsing/overflow-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-box/parsing/overflow-valid.html": [
+ [
+ "/css/css-box/parsing/overflow-valid.html",
+ {}
+ ]
+ ],
+ "css/css-box/parsing/padding-invalid.html": [
+ [
+ "/css/css-box/parsing/padding-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-box/parsing/padding-valid.html": [
+ [
+ "/css/css-box/parsing/padding-valid.html",
+ {}
+ ]
+ ],
+ "css/css-box/parsing/visibility-invalid.html": [
+ [
+ "/css/css-box/parsing/visibility-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-box/parsing/visibility-valid.html": [
+ [
+ "/css/css-box/parsing/visibility-valid.html",
+ {}
+ ]
+ ],
+ "css/css-box/parsing/width-invalid.html": [
+ [
+ "/css/css-box/parsing/width-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-box/parsing/width-valid.html": [
+ [
+ "/css/css-box/parsing/width-valid.html",
+ {}
+ ]
+ ],
+ "css/css-cascade/all-prop-initial-xml.html": [
+ [
+ "/css/css-cascade/all-prop-initial-xml.html",
+ {}
+ ]
+ ],
"css/css-cascade/inherit-initial.html": [
[
"/css/css-cascade/inherit-initial.html",
@@ -319434,6 +319788,12 @@
{}
]
],
+ "css/css-logical/logical-box-border-shorthands.html": [
+ [
+ "/css/css-logical/logical-box-border-shorthands.html",
+ {}
+ ]
+ ],
"css/css-logical/logical-box-border-style.html": [
[
"/css/css-logical/logical-box-border-style.html",
@@ -320004,6 +320364,12 @@
{}
]
],
+ "css/css-scroll-snap/overflowing-snap-areas.html": [
+ [
+ "/css/css-scroll-snap/overflowing-snap-areas.html",
+ {}
+ ]
+ ],
"css/css-scroll-snap/scroll-snap-type-proximity.html": [
[
"/css/css-scroll-snap/scroll-snap-type-proximity.html",
@@ -322182,6 +322548,12 @@
{}
]
],
+ "css/css-text/white-space/trailing-space-before-br-001.html": [
+ [
+ "/css/css-text/white-space/trailing-space-before-br-001.html",
+ {}
+ ]
+ ],
"css/css-text/white-space/white-space-collapse-000.html": [
[
"/css/css-text/white-space/white-space-collapse-000.html",
@@ -322296,6 +322668,42 @@
{}
]
],
+ "css/css-transforms/parsing/transform-box-invalid.html": [
+ [
+ "/css/css-transforms/parsing/transform-box-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-transforms/parsing/transform-box-valid.html": [
+ [
+ "/css/css-transforms/parsing/transform-box-valid.html",
+ {}
+ ]
+ ],
+ "css/css-transforms/parsing/transform-invalid.html": [
+ [
+ "/css/css-transforms/parsing/transform-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-transforms/parsing/transform-origin-invalid.html": [
+ [
+ "/css/css-transforms/parsing/transform-origin-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-transforms/parsing/transform-origin-valid.html": [
+ [
+ "/css/css-transforms/parsing/transform-origin-valid.html",
+ {}
+ ]
+ ],
+ "css/css-transforms/parsing/transform-valid.html": [
+ [
+ "/css/css-transforms/parsing/transform-valid.html",
+ {}
+ ]
+ ],
"css/css-transforms/parsing/translate-parsing-invalid.html": [
[
"/css/css-transforms/parsing/translate-parsing-invalid.html",
@@ -325224,6 +325632,66 @@
{}
]
],
+ "css/css-writing-modes/parsing/direction-invalid.html": [
+ [
+ "/css/css-writing-modes/parsing/direction-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/parsing/direction-valid.html": [
+ [
+ "/css/css-writing-modes/parsing/direction-valid.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/parsing/text-combine-upright-invalid.html": [
+ [
+ "/css/css-writing-modes/parsing/text-combine-upright-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/parsing/text-combine-upright-valid.html": [
+ [
+ "/css/css-writing-modes/parsing/text-combine-upright-valid.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/parsing/text-orientation-invalid.html": [
+ [
+ "/css/css-writing-modes/parsing/text-orientation-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/parsing/text-orientation-valid.html": [
+ [
+ "/css/css-writing-modes/parsing/text-orientation-valid.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/parsing/unicode-bidi-invalid.html": [
+ [
+ "/css/css-writing-modes/parsing/unicode-bidi-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/parsing/unicode-bidi-valid.html": [
+ [
+ "/css/css-writing-modes/parsing/unicode-bidi-valid.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/parsing/writing-mode-invalid.html": [
+ [
+ "/css/css-writing-modes/parsing/writing-mode-invalid.html",
+ {}
+ ]
+ ],
+ "css/css-writing-modes/parsing/writing-mode-valid.html": [
+ [
+ "/css/css-writing-modes/parsing/writing-mode-valid.html",
+ {}
+ ]
+ ],
"css/css-writing-modes/text-combine-upright-parsing-digits-001.html": [
[
"/css/css-writing-modes/text-combine-upright-parsing-digits-001.html",
@@ -337190,6 +337658,12 @@
{}
]
],
+ "encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted-segmented.https.html": [
+ [
+ "/encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted-segmented.https.html",
+ {}
+ ]
+ ],
"encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted.https.html": [
[
"/encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted.https.html",
@@ -339196,10 +339670,20 @@
],
"fetch/api/request/request-keepalive-quota.html": [
[
- "/fetch/api/request/request-keepalive-quota.html",
- {
- "timeout": "long"
- }
+ "/fetch/api/request/request-keepalive-quota.html?include=fast",
+ {}
+ ],
+ [
+ "/fetch/api/request/request-keepalive-quota.html?include=slow-1",
+ {}
+ ],
+ [
+ "/fetch/api/request/request-keepalive-quota.html?include=slow-2",
+ {}
+ ],
+ [
+ "/fetch/api/request/request-keepalive-quota.html?include=slow-3",
+ {}
]
],
"fetch/api/request/request-keepalive.html": [
@@ -339454,9 +339938,19 @@
{}
]
],
- "fetch/cross-origin-resource-policy/fetch.html": [
+ "fetch/cross-origin-resource-policy/fetch-in-service-worker.html": [
+ [
+ "/fetch/cross-origin-resource-policy/fetch-in-service-worker.html",
+ {}
+ ]
+ ],
+ "fetch/cross-origin-resource-policy/fetch.any.js": [
[
- "/fetch/cross-origin-resource-policy/fetch.html",
+ "/fetch/cross-origin-resource-policy/fetch.any.html",
+ {}
+ ],
+ [
+ "/fetch/cross-origin-resource-policy/fetch.any.worker.html",
{}
]
],
@@ -343888,6 +344382,12 @@
{}
]
],
+ "html/scripting/the-noscript-element/non-html-noscript.html": [
+ [
+ "/html/scripting/the-noscript-element/non-html-noscript.html",
+ {}
+ ]
+ ],
"html/semantics/disabled-elements/disabledElement.html": [
[
"/html/semantics/disabled-elements/disabledElement.html",
@@ -366320,9 +366820,25 @@
{}
]
],
- "quirks/hashless-hex-color.html": [
+ "quirks/hashless-hex-color/limited-quirks.html": [
+ [
+ "/quirks/hashless-hex-color/limited-quirks.html",
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
+ "quirks/hashless-hex-color/no-quirks.html": [
+ [
+ "/quirks/hashless-hex-color/no-quirks.html",
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
+ "quirks/hashless-hex-color/quirks.html": [
[
- "/quirks/hashless-hex-color.html",
+ "/quirks/hashless-hex-color/quirks.html",
{
"timeout": "long"
}
@@ -366358,9 +366874,21 @@
{}
]
],
- "quirks/unitless-length.html": [
+ "quirks/unitless-length/limited-quirks.html": [
+ [
+ "/quirks/unitless-length/limited-quirks.html",
+ {}
+ ]
+ ],
+ "quirks/unitless-length/no-quirks.html": [
+ [
+ "/quirks/unitless-length/no-quirks.html",
+ {}
+ ]
+ ],
+ "quirks/unitless-length/quirks.html": [
[
- "/quirks/unitless-length.html",
+ "/quirks/unitless-length/quirks.html",
{}
]
],
@@ -379322,6 +379850,12 @@
{}
]
],
+ "subresource-integrity/idlharness.window.js": [
+ [
+ "/subresource-integrity/idlharness.window.html",
+ {}
+ ]
+ ],
"subresource-integrity/subresource-css-ed25519.tentative.html": [
[
"/subresource-integrity/subresource-css-ed25519.tentative.html",
@@ -381066,12 +381600,90 @@
{}
]
],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-basic.html": [
+ [
+ "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-basic.html",
+ {}
+ ]
+ ],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-channels.html": [
+ [
+ "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-channels.html",
+ {}
+ ]
+ ],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-ended.html": [
+ [
+ "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-ended.html",
+ {}
+ ]
+ ],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-grain.html": [
+ [
+ "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-grain.html",
+ {}
+ ]
+ ],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html": [
+ [
+ "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html",
+ {}
+ ]
+ ],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-one-sample-loop.html": [
+ [
+ "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-one-sample-loop.html",
+ {}
+ ]
+ ],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-playbackrate-zero.html": [
+ [
+ "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-playbackrate-zero.html",
+ {}
+ ]
+ ],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-start.html": [
+ [
+ "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-start.html",
+ {}
+ ]
+ ],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiosource-onended.html": [
+ [
+ "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiosource-onended.html",
+ {}
+ ]
+ ],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiosource-time-limits.html": [
+ [
+ "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiosource-time-limits.html",
+ {}
+ ]
+ ],
"webaudio/the-audio-api/the-audiobuffersourcenode-interface/ctor-audiobuffersource.html": [
[
"/webaudio/the-audio-api/the-audiobuffersourcenode-interface/ctor-audiobuffersource.html",
{}
]
],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/note-grain-on-play.html": [
+ [
+ "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/note-grain-on-play.html",
+ {}
+ ]
+ ],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/note-grain-on-timing.html": [
+ [
+ "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/note-grain-on-timing.html",
+ {}
+ ]
+ ],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/sample-accurate-scheduling.html": [
+ [
+ "/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sample-accurate-scheduling.html",
+ {}
+ ]
+ ],
"webaudio/the-audio-api/the-audiocontext-interface/audiocontext-getoutputtimestamp.html": [
[
"/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-getoutputtimestamp.html",
@@ -381582,6 +382194,12 @@
{}
]
],
+ "webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html": [
+ [
+ "/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html",
+ {}
+ ]
+ ],
"webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-null.html": [
[
"/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-null.html",
@@ -408742,7 +409360,7 @@
"support"
],
"./lint.whitelist": [
- "7f96383c023ae0602813a441202c3be6bc44e624",
+ "1fd41d38b2af42fffea5bc09c0348feb0f078e85",
"support"
],
"./serve.py": [
@@ -439857,107 +440475,83 @@
"40595162d15dec7e315ef16f94646045596d7b1c",
"support"
],
- "cookie-store/cookieListItem_attributes.tentative.window.js": [
- "7d89e9ee77bad065c75bdb4f3467852dbf256b09",
+ "cookie-store/cookieListItem_attributes.tentative.https.window.js": [
+ "773ad9b5ea3636497f9f90c57e5bc5a2fa63c289",
"testharness"
],
- "cookie-store/cookieStore_delete_arguments.tentative.window.js": [
+ "cookie-store/cookieStore_delete_arguments.tentative.https.window.js": [
"740fccd53713d8ffdd84aa388580630025fc016c",
"testharness"
],
- "cookie-store/cookieStore_delete_basic.tentative.window.js": [
+ "cookie-store/cookieStore_delete_basic.tentative.https.window.js": [
"c0a5c01ffcdd3755eb3db3dc4a6ec398fd2aba37",
"testharness"
],
- "cookie-store/cookieStore_event_arguments.tenative.window.js": [
+ "cookie-store/cookieStore_event_arguments.tenative.https.window.js": [
"a61074b6062928c29a83e0f7d456fdce9e3a3d47",
"testharness"
],
- "cookie-store/cookieStore_event_basic.tentative.window.js": [
+ "cookie-store/cookieStore_event_basic.tentative.https.window.js": [
"f6f20c4b587ed51d31ffc9f8bed1dfb7d092a064",
"testharness"
],
- "cookie-store/cookieStore_event_delete.tenative.window.js": [
+ "cookie-store/cookieStore_event_delete.tenative.https.window.js": [
"b492c6567ef91ea0def4195b049f9553bbc8271d",
"testharness"
],
- "cookie-store/cookieStore_event_overwrite.tentative.window.js": [
+ "cookie-store/cookieStore_event_overwrite.tentative.https.window.js": [
"cd238bae3c79a5f3c6e385466fe29487bf0e4c70",
"testharness"
],
- "cookie-store/cookieStore_getAll_arguments.tentative.window.js": [
- "4804767f6398c3d10d726d21895ae3b72c8f23f3",
+ "cookie-store/cookieStore_getAll_arguments.tentative.https.window.js": [
+ "ea9bc48ed9d2da2523b97d92de84c65226206211",
+ "testharness"
+ ],
+ "cookie-store/cookieStore_getAll_multiple.tentative.https.window.js": [
+ "f54045073f8db4f16682da3a4cabc98feb6bdd2e",
"testharness"
],
- "cookie-store/cookieStore_getAll_set_basic.tentative.window.js": [
+ "cookie-store/cookieStore_getAll_set_basic.tentative.https.window.js": [
"d3c3430fa08d8573e6d95c56e0b91604286eb632",
"testharness"
],
- "cookie-store/cookieStore_get_arguments.tentative.window.js": [
- "1f63b8fc5b9e6a1e0a4aa925d2d3084cb1ea093a",
+ "cookie-store/cookieStore_get_arguments.tentative.https.window.js": [
+ "ea197608e10369f700585066bb91e6846df2fe73",
"testharness"
],
- "cookie-store/cookieStore_get_delete_basic.tentative.window.js": [
+ "cookie-store/cookieStore_get_delete_basic.tentative.https.window.js": [
"a5f91a2bbe6c619b01a9e3deb473645a36c85b44",
"testharness"
],
- "cookie-store/cookieStore_get_set_basic.tentative.window.js": [
+ "cookie-store/cookieStore_get_set_basic.tentative.https.window.js": [
"475f0cdc18f63a0b3a710800a7a4ed82fd7b8ee8",
"testharness"
],
- "cookie-store/cookieStore_has_arguments.tentative.window.js": [
- "2a73b3ce79da4a3a49cd1580a1c8796b5c54c3a1",
- "testharness"
- ],
- "cookie-store/cookieStore_has_basic.tentative.window.js": [
- "e258d62c411d54d7d5cf016adf78132bb9aa9fae",
- "testharness"
- ],
- "cookie-store/cookieStore_in_detached_frame.tentative.html": [
+ "cookie-store/cookieStore_in_detached_frame.tentative.https.html": [
"600452c1a496b8335b27bd24943b8834e37bf4d5",
"testharness"
],
- "cookie-store/cookieStore_set_arguments.tentative.window.js": [
- "86cdff2d6d564eef090342adb3d41c0b1e1c4513",
- "testharness"
- ],
- "cookie-store/cookieStore_set_expires_option.tentative.window.js": [
- "1425be76976edef1e9c8ef222ab90e956eb21bae",
- "testharness"
- ],
- "cookie-store/cookieStore_special_names.tentative.html": [
- "f839e2825dd18a6f54639fc2b7d4a18ce9906b25",
+ "cookie-store/cookieStore_set_arguments.tentative.https.window.js": [
+ "832b25b61626d3c9656731470ea06e0f95028958",
"testharness"
],
- "cookie-store/cookieStore_special_names.tentative.https.html": [
- "4d53aaecbf9fea2865ca6492bc69b2ec3a47af79",
- "testharness"
- ],
- "cookie-store/document_cookie.tentative.html": [
- "23916c5325b2c98875eac4ab7291622b44974daf",
+ "cookie-store/cookieStore_special_names.tentative.https.window.js": [
+ "36bcdc14981a5d71f5e46f1cef4ee2031434bc62",
"testharness"
],
"cookie-store/document_cookie.tentative.https.html": [
"447ba96e7bb23a0def44817e584891097bb81998",
"testharness"
],
- "cookie-store/document_getAll_multiple.tentative.html": [
- "270700a50ac04a995665700688297b81c372ce37",
- "testharness"
- ],
- "cookie-store/http_cookie_and_set_cookie_headers.tentative.html": [
- "7fb04dc519bafed5f35493f65664b51e23131a1d",
- "testharness"
- ],
"cookie-store/http_cookie_and_set_cookie_headers.tentative.https.html": [
"2ccfc03ad6fedb063e2cd3ff9726b8d482ab5cf0",
"testharness"
],
- "cookie-store/httponly_cookies.window.js": [
+ "cookie-store/httponly_cookies.https.window.js": [
"29d9c0bfaa9aa3e7115758731156dbeca9e736dc",
"testharness"
],
- "cookie-store/idlharness.tentative.html": [
+ "cookie-store/idlharness.tentative.https.html": [
"043875184fa56ad41cda11e6f84314a7aebdb17f",
"testharness"
],
@@ -439969,26 +440563,14 @@
"0c8a1302ab1839cab71c87db2bda1ca6abcb6a23",
"testharness"
],
- "cookie-store/no_name_and_no_value.tentative.html": [
- "da68f9d93ef6f0f91da4827240e32a1e93a8df73",
- "testharness"
- ],
"cookie-store/no_name_and_no_value.tentative.https.html": [
"61cfa6f1e5ee1e9165dcc16e32486660a1da9c42",
"testharness"
],
- "cookie-store/no_name_equals_in_value.tentative.html": [
- "07d5e9462c4395002f23aa4aaf25ae795f9f2452",
- "testharness"
- ],
"cookie-store/no_name_equals_in_value.tentative.https.html": [
"61e7a3cc1f5b197d924c76098b66979d00444012",
"testharness"
],
- "cookie-store/no_name_multiple_values.tentative.html": [
- "edab422cf19fcdb906e20dcba9dc4a90dde41415",
- "testharness"
- ],
"cookie-store/no_name_multiple_values.tentative.https.html": [
"aa3ed15714a1ed2b7cac4ba2fc7998d9792b7339",
"testharness"
@@ -440030,7 +440612,7 @@
"support"
],
"cookie-store/serviceworker_cookieStore_arguments.js": [
- "a90956237d63fd51556f2d9e50967522870816d4",
+ "3260186907a9b4779e1a303eec499f880a270ac7",
"support"
],
"cookie-store/serviceworker_cookieStore_arguments.tentative.https.html": [
@@ -440038,7 +440620,7 @@
"testharness"
],
"cookie-store/serviceworker_cookieStore_basic.js": [
- "38fe0bc6fbf08e5387f81e32348252c481af03c0",
+ "515dc7d31bbc6af83276939dbb997ccd0e8de3ec",
"support"
],
"cookie-store/serviceworker_cookieStore_basic.tentative.https.html": [
@@ -440046,7 +440628,7 @@
"testharness"
],
"cookie-store/serviceworker_cookieStore_subscriptions.js": [
- "4fb3574d207f1dc09e488830714eb70b8bda55b4",
+ "7e140635e7587de1c606a0faf4a0bf8d8eb8c41e",
"support"
],
"cookie-store/serviceworker_cookieStore_subscriptions.tentative.https.html": [
@@ -440054,13 +440636,29 @@
"testharness"
],
"cookie-store/serviceworker_cookieStore_subscriptions_basic.js": [
- "9de2007372d39f2c8552d476582a482b6a4bd1b4",
+ "9b477518ee4c8cdc103d3cab11cca371b7b2f72d",
"support"
],
"cookie-store/serviceworker_cookieStore_subscriptions_basic.tentative.https.html": [
"3836f1d36746ae11b76ee420ba34d902d48bc0af",
"testharness"
],
+ "cookie-store/serviceworker_cookieStore_subscriptions_empty.js": [
+ "fd8cf9d3dab06824cf0497c44a388c0cea7d02d6",
+ "support"
+ ],
+ "cookie-store/serviceworker_cookieStore_subscriptions_empty.tentative.https.html": [
+ "3f8ec6177bc54738213fab8a1f8947d58714456d",
+ "testharness"
+ ],
+ "cookie-store/serviceworker_cookieStore_subscriptions_mismatch.js": [
+ "fa57006fdb09070feb6c7a83553d300d725761b6",
+ "support"
+ ],
+ "cookie-store/serviceworker_cookieStore_subscriptions_mismatch.tentative.https.html": [
+ "594f019786ffb316e8140e9f30a2cecadceda2fa",
+ "testharness"
+ ],
"cookies/META.yml": [
"7456d333deb42015924578efc2a9269fbfa696bf",
"support"
@@ -441697,6 +442295,10 @@
"9cf4e4db6b0a74fa25f1ab500e91acf90b1c9db6",
"support"
],
+ "cors/resources/cache-304.py": [
+ "d95bb900081cf25253c758c1979e214021f21825",
+ "support"
+ ],
"cors/resources/checkandremove.py": [
"d891a6e489124e4ef7f82faa51a5e2a7221925f9",
"support"
@@ -441733,6 +442335,10 @@
"e26f213e67940865d3d535f9fa173c999dbef31e",
"testharness"
],
+ "cors/script-304.html": [
+ "f3b0b2090f2ef74458a32a9805b4289aba5fd534",
+ "testharness"
+ ],
"cors/simple-requests.htm": [
"608ea76c3209d7e803b4d4c1b02035e8493d52d5",
"testharness"
@@ -441765,8 +442371,8 @@
"561636e62d50da2d14e50516c62cbaea1c5bb924",
"testharness"
],
- "credential-management/idl.https.html": [
- "e9a108beef51c52bbaaf2e53371aec57e69541c0",
+ "credential-management/idlharness.https.window.js": [
+ "9680556aa4d42fa7f86451640a2860caee06a042",
"testharness"
],
"credential-management/passwordcredential-framed-get.sub.https.html": [
@@ -441921,6 +442527,10 @@
"f060b356887b9ceb49be019634657b847bfffe81",
"reftest"
],
+ "css/CSS2/abspos/between-float-and-text.html": [
+ "9594a6d5643108ccd06b2d4a230a1c3c9e4b1bdd",
+ "reftest"
+ ],
"css/CSS2/abspos/hypothetical-inline-alone-on-second-line-ref.html": [
"1b59f53e07a23d5adcff80646ed1c2e644590674",
"support"
@@ -504537,6 +505147,106 @@
"ceb5773fc9d6264d1f9210d8675b7bf48764d296",
"reftest"
],
+ "css/css-box/parsing/clear-invalid.html": [
+ "ee593f2639cdfb9a26edad7eb5de002e4d077850",
+ "testharness"
+ ],
+ "css/css-box/parsing/clear-valid.html": [
+ "c7a6815b7ba52412c376fef82115b6253fe76bdb",
+ "testharness"
+ ],
+ "css/css-box/parsing/float-invalid.html": [
+ "dda7379c1d0a45dae405ac599c9ab6ec82bba7de",
+ "testharness"
+ ],
+ "css/css-box/parsing/float-valid.html": [
+ "450d8e39065e1b70fef54da8f71ee4d964d0874c",
+ "testharness"
+ ],
+ "css/css-box/parsing/height-invalid.html": [
+ "1e64c2115fab346fe519e4f82d6e8cbd5eadd6df",
+ "testharness"
+ ],
+ "css/css-box/parsing/height-valid.html": [
+ "6748edae8c0116264361f1677176788751a3f5fd",
+ "testharness"
+ ],
+ "css/css-box/parsing/margin-invalid.html": [
+ "02b8f1197408b5e6266e429d4e86f97aec7573ae",
+ "testharness"
+ ],
+ "css/css-box/parsing/margin-valid.html": [
+ "6c63a5bf1b5d44b2429d0d1e6df6149db626c04c",
+ "testharness"
+ ],
+ "css/css-box/parsing/max-height-invalid.html": [
+ "f5681a9b9166e6ad1e0dd9dffe6e9086d9f2aa45",
+ "testharness"
+ ],
+ "css/css-box/parsing/max-height-valid.html": [
+ "39eba8c0f2cb7a928f906d2114318d02adfa931e",
+ "testharness"
+ ],
+ "css/css-box/parsing/max-width-invalid.html": [
+ "79a162578c69e2894e1b5ad1e6e8157736b74c2a",
+ "testharness"
+ ],
+ "css/css-box/parsing/max-width-valid.html": [
+ "36b408f3adcb3f511e95e99d0e222fc863793752",
+ "testharness"
+ ],
+ "css/css-box/parsing/min-height-invalid.html": [
+ "5dbcd534780891103b98ef2f8a7ac2e55a0e5d4c",
+ "testharness"
+ ],
+ "css/css-box/parsing/min-height-valid.html": [
+ "7c2b05368598f29e9961ffc4b79a481ccf56e473",
+ "testharness"
+ ],
+ "css/css-box/parsing/min-width-invalid.html": [
+ "2aec4d98131be0de37aada0d6ea22a7128eab11c",
+ "testharness"
+ ],
+ "css/css-box/parsing/min-width-valid.html": [
+ "c98fa942b4300deb4b53cd897c7edbf036946214",
+ "testharness"
+ ],
+ "css/css-box/parsing/overflow-invalid.html": [
+ "9be5ab7e7006147705f999ff81a5bde9cd5335c9",
+ "testharness"
+ ],
+ "css/css-box/parsing/overflow-valid.html": [
+ "03c026f82b3a915e16fd8570491c5e11f11e7bfb",
+ "testharness"
+ ],
+ "css/css-box/parsing/padding-invalid.html": [
+ "d0cc715ad6ce1e2488bd874d9ee3eeb1a3ffaf8d",
+ "testharness"
+ ],
+ "css/css-box/parsing/padding-valid.html": [
+ "c5d31987e637c39891d4568bbc1076714025898a",
+ "testharness"
+ ],
+ "css/css-box/parsing/resources/parsing-testcommon.js": [
+ "14f32b772f27a9bc75fe90e2ea1d8e4fb3649e95",
+ "support"
+ ],
+ "css/css-box/parsing/visibility-invalid.html": [
+ "6a6c23d644c887c81b4456b8262ca18107b4370f",
+ "testharness"
+ ],
+ "css/css-box/parsing/visibility-valid.html": [
+ "91f1bca19b97a3d7b0adffedf01110bf548e39d9",
+ "testharness"
+ ],
+ "css/css-box/parsing/width-invalid.html": [
+ "8630f0656bd070b707cbd48ef7d0c24a183b913b",
+ "testharness"
+ ],
+ "css/css-box/parsing/width-valid.html": [
+ "2fe349753adc16ea57af2ad0759c567b6c6e83d3",
+ "testharness"
+ ],
"css/css-break/META.yml": [
"4840f714501765d5bf6f0986fd453d5bf1ac3787",
"support"
@@ -504561,6 +505271,10 @@
"1013a238512119cb926cf98db0e3cb2e33143ec3",
"reftest"
],
+ "css/css-cascade/all-prop-initial-xml.html": [
+ "aace7279b07ffc726175baeab325018eddcc792b",
+ "testharness"
+ ],
"css/css-cascade/important-prop-ref.html": [
"3633b0204ab1cb13060656736d05c8666a5886d7",
"support"
@@ -505774,7 +506488,7 @@
"reftest"
],
"css/css-contain/contain-size-013.html": [
- "22031a540503764e51111a7e5f9c91a0509b01f8",
+ "8974279263fbd89e1b781ee9481c7466ce073f1e",
"reftest"
],
"css/css-contain/contain-size-breaks-001.html": [
@@ -505874,7 +506588,7 @@
"support"
],
"css/css-contain/reference/contain-paint-007-ref.html": [
- "090aba85ddcf927a33de227157ac8e411fd5c268",
+ "c34cc4f333edcc4949ae8418ca736154632dc5eb",
"support"
],
"css/css-contain/reference/contain-paint-008-ref.html": [
@@ -507957,6 +508671,10 @@
"f9699f59878f869cf0eb62d6b46ff118f6abfcf3",
"support"
],
+ "css/css-env/META.yml": [
+ "f05175dd6526e7891c551bb034d190c937a7d555",
+ "support"
+ ],
"css/css-env/at-supports.tentative.html": [
"a93a3fe4ce531b5693060c3bb3c1c340a25ea490",
"testharness"
@@ -521122,7 +521840,7 @@
"support"
],
"css/css-images/parsing/gradient-position-invalid.html": [
- "5bae73095070f46bc8f38a58fb3808d473d60058",
+ "dbddb52f007c399a575f3fcd3714f037cc5c9ed1",
"testharness"
],
"css/css-images/parsing/gradient-position-valid.html": [
@@ -521853,6 +522571,10 @@
"9e3a2a3796bf840f0e3ff78e54ad0382adff5b36",
"testharness"
],
+ "css/css-logical/logical-box-border-shorthands.html": [
+ "c02cf997b0f7046a0332079a57deaea78f132057",
+ "testharness"
+ ],
"css/css-logical/logical-box-border-style.html": [
"b4e50119630c3b3b82f8ffbd03d7e221d77735f7",
"testharness"
@@ -521898,7 +522620,7 @@
"testharness"
],
"css/css-logical/resources/test-box-properties.js": [
- "132f6024928641f0cd1f0580e69126a8ab02eba8",
+ "ce6a045e4afb9992c0ac13312f8b6516162d19a7",
"support"
],
"css/css-masking/META.yml": [
@@ -527653,12 +528375,16 @@
"d6432e3ad547c16ead21070cc04278b13ec49b58",
"support"
],
+ "css/css-scroll-snap/overflowing-snap-areas.html": [
+ "d290c9e941ee860e1d7f16e40c60c9f9696788c8",
+ "testharness"
+ ],
"css/css-scroll-snap/scroll-snap-type-proximity.html": [
"75bfc0b6c7686afbbf431e653ab674496ad3fe46",
"testharness"
],
"css/css-scroll-snap/scrollTo-scrollBy-snaps.html": [
- "6e921f3b1c54df09d594d5e450674618eee42143",
+ "1cd26585c857250870a3cafdfa077110b7403e5c",
"testharness"
],
"css/css-scroll-snap/snap-at-user-scroll-end-manual.html": [
@@ -534001,6 +534727,10 @@
"4a0b79a1d58df46801162579c9d76f7854f1dc73",
"reftest"
],
+ "css/css-text/white-space/trailing-space-before-br-001.html": [
+ "e00364180ce0af22bcb38312dd1e578527f06b2b",
+ "testharness"
+ ],
"css/css-text/white-space/white-space-collapse-000.html": [
"311f61dd93bf7b39b07f14aacad5d4bd77639cb2",
"testharness"
@@ -535457,6 +536187,30 @@
"b715fd67ba6e2aa0d0bddd7c0342c80af1f70690",
"testharness"
],
+ "css/css-transforms/parsing/transform-box-invalid.html": [
+ "68bba0550ce8a7a2439ff750f5f570b3bb8745ca",
+ "testharness"
+ ],
+ "css/css-transforms/parsing/transform-box-valid.html": [
+ "ec155f1a87f57f6b21803816fd4fd740bb88295a",
+ "testharness"
+ ],
+ "css/css-transforms/parsing/transform-invalid.html": [
+ "1fef3227ea79618e5ce262c9052ef323515e7ae9",
+ "testharness"
+ ],
+ "css/css-transforms/parsing/transform-origin-invalid.html": [
+ "ef7189aed47a3425cb8ac99792f0be5a14187fdd",
+ "testharness"
+ ],
+ "css/css-transforms/parsing/transform-origin-valid.html": [
+ "dad6cd0f561a7c786b71be7acec320f41475ea8f",
+ "testharness"
+ ],
+ "css/css-transforms/parsing/transform-valid.html": [
+ "81df9ceb4a0205b2bb6a0a8d63397d94d591814e",
+ "testharness"
+ ],
"css/css-transforms/parsing/translate-parsing-invalid.html": [
"1f4abad86af0f7be1ccafe8892c8a0a34b4e41b4",
"testharness"
@@ -548133,6 +548887,50 @@
"b7079a0dd1cc46e8252deff8a3b08e0915ea5a31",
"manual"
],
+ "css/css-writing-modes/parsing/direction-invalid.html": [
+ "9f1076e0da9353816521cf34646981c33d82badb",
+ "testharness"
+ ],
+ "css/css-writing-modes/parsing/direction-valid.html": [
+ "c68d1dd7d9c2eef8d95c9c90c697a61125dd47b0",
+ "testharness"
+ ],
+ "css/css-writing-modes/parsing/resources/parsing-testcommon.js": [
+ "14f32b772f27a9bc75fe90e2ea1d8e4fb3649e95",
+ "support"
+ ],
+ "css/css-writing-modes/parsing/text-combine-upright-invalid.html": [
+ "21ca5f024035630875f14a5f45b165548333733f",
+ "testharness"
+ ],
+ "css/css-writing-modes/parsing/text-combine-upright-valid.html": [
+ "680c92d6c12a38ec1f5689a5c2b9969041ee3672",
+ "testharness"
+ ],
+ "css/css-writing-modes/parsing/text-orientation-invalid.html": [
+ "cb38e4ab395dfabc99813ee8459ebaae4d79e2d0",
+ "testharness"
+ ],
+ "css/css-writing-modes/parsing/text-orientation-valid.html": [
+ "d047527d687a9b240e27e835de0fb8786189e399",
+ "testharness"
+ ],
+ "css/css-writing-modes/parsing/unicode-bidi-invalid.html": [
+ "911e697b065db6e6f7b6e563e84601cf176eb99e",
+ "testharness"
+ ],
+ "css/css-writing-modes/parsing/unicode-bidi-valid.html": [
+ "21c01cd648f6b465fdb46d85a9d247882ca14317",
+ "testharness"
+ ],
+ "css/css-writing-modes/parsing/writing-mode-invalid.html": [
+ "d41cb214ab942064e064191c7db41b9b5dff1674",
+ "testharness"
+ ],
+ "css/css-writing-modes/parsing/writing-mode-valid.html": [
+ "fa0a2060cda483bf479203069ad53432a4a36b36",
+ "testharness"
+ ],
"css/css-writing-modes/percent-margin-vlr-003.xht": [
"4dc2d772b9fedfc4f498ed488cd8d31c00c50c71",
"reftest"
@@ -548645,6 +549443,10 @@
"6718fb7f117b02d835e5019ec884902669263f7f",
"support"
],
+ "css/css-writing-modes/reference/scrollbar-vertical-rl-ref.html": [
+ "352bb555091f87a1308dcfa69ca973d3aac211a5",
+ "support"
+ ],
"css/css-writing-modes/reference/svg-aliasing-001-ref.html": [
"8156e1ec7df883cc2aef362a0d477dd3853f52d6",
"support"
@@ -548789,6 +549591,10 @@
"252c877b6b62e93b69b97a9dcc99498c5f56db65",
"reftest"
],
+ "css/css-writing-modes/scrollbar-vertical-rl.html": [
+ "e0bd3a11b16f322beb29f3c83c1b26ecc9b037d6",
+ "reftest"
+ ],
"css/css-writing-modes/sizing-orthog-htb-in-vlr-001-ref.xht": [
"31223eeb2b9b8e7077fd90fc18d29221c63cdb6b",
"support"
@@ -553074,7 +553880,7 @@
"support"
],
"css/mediaqueries/test_media_queries.html": [
- "cff3585932589f611a7101329d3b5b6ca27820aa",
+ "a7d78b13e119f8cd1ffa8812a9af67e59280084d",
"testharness"
],
"css/mediaqueries/viewport-script-dynamic-ref.html": [
@@ -556337,8 +557143,16 @@
"250751245e07ef7b57020a8dc32735693091a69f",
"reftest"
],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/background/box-shadow-currentcolor-ref.html": [
+ "16b29eb7d10d6fc81c47375c80b4b152d61f8ed6",
+ "support"
+ ],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/background/box-shadow-currentcolor.html": [
+ "65d934b6ffa0462610dc3adb457824e1b9e0eb59",
+ "reftest"
+ ],
"css/vendor-imports/mozilla/mozilla-central-reftests/background/reftest.list": [
- "ba3f91bdf65eaa53a76efc11d870f81a23d757dd",
+ "16df7ae11a37944c42a7f3e2aec16ad0b54f3c3a",
"support"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/background/support/aqua-yellow-32x32.png": [
@@ -556654,79 +557468,115 @@
"support"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001-ref.html": [
- "1e710115a6ddf673f771a4f668c0be2912609442",
+ "0b5688cf2bed82383c358c80272652df9eafac34",
"support"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001.html": [
- "3688553c5cfd25d76feee6021794cc7273fe6cff",
+ "ae677f9c21fb64a02e0a2d9fb5197038800dcf60",
"reftest"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002-ref.html": [
- "185fa9ad94e9045ca490303e7256fd6ffb2cda03",
+ "92c69890e77216eda8056fc107e1a63ccf01e810",
"support"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002.html": [
- "449b89844cf89f6ba2e3d27620255dab114a0755",
+ "0bcaab50f6db9335f1ae5cf02d440d6b6f5d612f",
"reftest"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003-ref.html": [
- "3189218f9d3312f56f4ffaa04be17db936004c57",
+ "e87010a85ae9ffdcb4fbf6793a77222090bfe72d",
"support"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003.html": [
- "354b9a2fdc94912d917d9528a268e46cae3ff83c",
+ "001e102c7ca511c410b1a0392fead919fd4e9a04",
"reftest"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004-ref.html": [
- "ce9682abc33ecf2e394c63ac5e941d4e50c689eb",
+ "aa96e24835b8ea7d20d476252696ad5472e6097c",
"support"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004.html": [
- "14271abdfab8e9495dd4c8e73bc7ea72ec45dfab",
+ "4dc86fc798bd388f58b239e551c5319fecc6a732",
"reftest"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-005.html": [
- "5ab4438dae36c8fa2af8ee2bba12bb60be3837ac",
+ "2c395f72eb7ed6498b390d05227d70ff5fbae87e",
"reftest"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006-ref.html": [
- "a54e26fbb340e92d8049ae84191f7a59149e8bc2",
+ "79a496a7814ee9e1f7cb3688d8e182bb58fb687c",
"support"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006.html": [
- "64b9266835318fb192c4d82319f98f64a8a1c03a",
+ "732f4c88901981765fc91918e1755af0a23a4a59",
"reftest"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001-ref.html": [
- "15047fbe1c488711c1d6c309242eb2d5838f8c7e",
+ "36b131c631aef3e8279af91651ac492341e40359",
"support"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001.html": [
- "e4c76a59f93fe875cd85be120d9b492621c6b13b",
+ "31e0e1a2abab1d54d915021ea158bf3da93cb788",
"reftest"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001-ref.html": [
- "15047fbe1c488711c1d6c309242eb2d5838f8c7e",
+ "36b131c631aef3e8279af91651ac492341e40359",
"support"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001.html": [
- "75da07ab71aaa13d847201e545a07c5048aa4d0a",
+ "ab222e28e7f9060860e910384c9e6e95d3f422be",
"reftest"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001-ref.html": [
- "62ecb754d87f4923a9a46f64a0d69da1fafff6a6",
+ "e69eda30a4601b11a6f1d0551c29a4632dfa4276",
"support"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001.html": [
- "f81a30fc22f9d90a107724378ca6f8e66ac78fd6",
+ "ee93a0a9794588c33606ed23b343bbe1db231e26",
"reftest"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001-ref.html": [
- "0d45e6ef79bbb757a8b47c06408ffc919a81545a",
+ "5f079f29a5998ee2d811ec693e660512894633d6",
"support"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001.html": [
- "360f5b95b4eef2bf80101f172557f2fe65f57ca7",
+ "045d302528444a645e5b6d2fa824ff2a8983b723",
+ "reftest"
+ ],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001-ref.html": [
+ "ee338f9f2dd0054acae169489ef73c7d5b1b562c",
+ "support"
+ ],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001a.html": [
+ "028f9b002b099182d98045b83cbd353e16ab0fb0",
+ "reftest"
+ ],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001b.html": [
+ "127c86614b76a2d851f36bffecbdafa75e7b25f0",
+ "reftest"
+ ],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001-ref.html": [
+ "f1d384a53c3345a7e8c3ea404bd7a83b30723567",
+ "support"
+ ],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001.html": [
+ "7577aef073596faddef3ce2c72b2537410a4be8d",
+ "reftest"
+ ],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001-ref.html": [
+ "6d7823a0486acad2c53e10419992a1cdb6ede29d",
+ "support"
+ ],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001.html": [
+ "ce22eaf6214d0f732195704a91c1424b4f4d8331",
+ "reftest"
+ ],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001-ref.html": [
+ "5de4b9db5002c425b7ed7840f8107662bdb73bce",
+ "support"
+ ],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001.html": [
+ "e3691848b9d0dff5ce6a8faf573b5c59fadd5d87",
"reftest"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-stacking-context-001-ref.html": [
@@ -556742,7 +557592,7 @@
"reftest"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/reftest.list": [
- "f13efa449db3e07a7fcec53072121e9d906f8562",
+ "865b3c38162cfb5ef744335416302ca0960f635e",
"support"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/counter-styles-3/dependent-builtin-ref.html": [
@@ -560877,8 +561727,16 @@
"e4736754b5c44b272e94a2988dce8feb2e5478f2",
"support"
],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/float-should-push-ref.html": [
+ "f99113a1b1e389df8e87f71d6490af0c3d586325",
+ "support"
+ ],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/float-should-push.html": [
+ "7cba915a32e329fb93d3d953c54032cd2d9892cf",
+ "reftest"
+ ],
"css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/reftest.list": [
- "93dca478ad98d04ac4d0c15188afcff9f7072a3c",
+ "b47bd519da1b51828d2f4134348badd42280357f",
"support"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-border-box-001-ref.html": [
@@ -561614,7 +562472,7 @@
"support"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/reftest.list": [
- "3d686cfc2e832a735cc69da4e62b5fc82ff981db",
+ "25c3ec740acaaed780e14a8544dcf4b66672f2d2",
"support"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/ruby-text-decoration-01-ref.html": [
@@ -562225,6 +563083,14 @@
"d10f62aadf7d4ee16da590a634ec78019122c7f5",
"reftest"
],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-shadow-currentcolor-ref.html": [
+ "835e5fb9057ca23376d6f4b9c6b2904541f8cd54",
+ "support"
+ ],
+ "css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-shadow-currentcolor.html": [
+ "572c9c56dc399638dfea85fcd70ef9fd82ec6509",
+ "reftest"
+ ],
"css/vendor-imports/mozilla/mozilla-central-reftests/text3/hyphenation-control-1-ref.html": [
"31e1e0060f4c0c852998a12897627faf55e1cf25",
"support"
@@ -564590,7 +565456,7 @@
"support"
],
"docs/_writing-tests/assumptions.md": [
- "8bb7a1cda9084f179e1373b8600d597d1072c08c",
+ "8ac61662756849f43124883e27be13a87a7a3a0f",
"support"
],
"docs/_writing-tests/css-metadata.md": [
@@ -564650,7 +565516,7 @@
"support"
],
"docs/_writing-tests/testharness-api.md": [
- "ccad9b2b76eb48205d1f30847e0472e565d22156",
+ "a4109b95dfdd98b9f83d15dce8c47867fd0f37ff",
"support"
],
"docs/_writing-tests/testharness.md": [
@@ -565902,7 +566768,7 @@
"testharness"
],
"dom/nodes/attributes.html": [
- "a39c668569ca64cddb49ea050884580fcb18aa68",
+ "a4d3431ba8a583734ec92977e0e392407012e4bc",
"testharness"
],
"dom/nodes/attributes.js": [
@@ -568245,6 +569111,10 @@
"3db3dfc846598a30218f740201e48ca6112f4d93",
"testharness"
],
+ "encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted-segmented.https.html": [
+ "95a9b4b96c73fb769a1b34570127a3ba356886a3",
+ "testharness"
+ ],
"encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted.https.html": [
"bade72126b9a42409ef2b1901b84aef7778b2eac",
"testharness"
@@ -568753,6 +569623,10 @@
"bfe606669dc2c87c3813c119860f00317102a5bd",
"support"
],
+ "encrypted-media/scripts/playback-temporary-encrypted-clear-segmented-sources.js": [
+ "bbecdf6fad52b2b6a9bf9c73ddcbef194b53cac1",
+ "support"
+ ],
"encrypted-media/scripts/playback-temporary-encrypted-clear-sources.js": [
"be851927ab25d4c4c107546aee3c2231f030840c",
"support"
@@ -569398,7 +570272,7 @@
"testharness"
],
"feature-policy/experimental-features/vertical-scroll-touch-action-manual.tentative.html": [
- "5bfd2aa12d15de053f7b6408dc35654dfb690caf",
+ "752cc2b2febca0f9910e5fe11c01317f02fc2144",
"manual"
],
"feature-policy/experimental-features/vertical-scroll-touch-block-manual.tentative.html": [
@@ -569606,7 +570480,7 @@
"support"
],
"feature-policy/resources/featurepolicy.js": [
- "e43c54ef8b92deb077f9061681a83261552ef2ef",
+ "559a8ebe478ba82f6616382e19e6e94a49139cb1",
"support"
],
"feature-policy/resources/picture-in-picture.js": [
@@ -570178,7 +571052,7 @@
"testharness"
],
"fetch/api/request/request-keepalive-quota.html": [
- "0b9786a3878a361ba8ec3291216d475bd5148541",
+ "bcaae1cb50860be535b9ba72ba447a9aa7c333b1",
"testharness"
],
"fetch/api/request/request-keepalive.html": [
@@ -570597,8 +571471,12 @@
"4d836bed1e90a2d14b1651c0f3229b3f3d0b6b91",
"testharness"
],
- "fetch/cross-origin-resource-policy/fetch.html": [
- "6a881615d9df0750b640298725be56e60cd5804c",
+ "fetch/cross-origin-resource-policy/fetch-in-service-worker.html": [
+ "d9db1c57557b20c40909bf91a12f85bfa243b39d",
+ "testharness"
+ ],
+ "fetch/cross-origin-resource-policy/fetch.any.js": [
+ "497663ca6aa5d76bfead06e176b3f7004e0e7774",
"testharness"
],
"fetch/cross-origin-resource-policy/iframe-loads.html": [
@@ -571618,7 +572496,7 @@
"testharness"
],
"fullscreen/api/element-request-fullscreen-and-exit-iframe-manual.html": [
- "6b06ccdca77fda2a6777a6b22ca1dd6baadd65f7",
+ "1a4b1290dfa3c40e9d9927860d1635f526940efb",
"manual"
],
"fullscreen/api/element-request-fullscreen-and-move-manual.html": [
@@ -571714,7 +572592,7 @@
"testharness"
],
"fullscreen/model/move-to-fullscreen-iframe-manual.html": [
- "62aec7e1d5065bf99a00fc533c8c6d6704ac2010",
+ "b6ac159c13ba1df9e209089a98b6abbab5629231",
"manual"
],
"fullscreen/model/move-to-iframe-manual.html": [
@@ -572850,7 +573728,7 @@
"testharness"
],
"html/browsers/browsing-the-web/scroll-to-fragid/004.html": [
- "787654af224115c4282b7d6a89509d57c17d3ed1",
+ "3265bbcc88866bd3d1fa97b20041e634d2b3c1f5",
"testharness"
],
"html/browsers/browsing-the-web/scroll-to-fragid/005.html": [
@@ -582513,6 +583391,10 @@
"0f18ee2c61b99893cfe2a3d1ff549b170a8d715d",
"support"
],
+ "html/scripting/the-noscript-element/non-html-noscript.html": [
+ "121760184777008c2ddeb598278216e40b34e367",
+ "testharness"
+ ],
"html/semantics/.gitkeep": [
"da39a3ee5e6b4b0d3255bfef95601890afd80709",
"support"
@@ -591794,7 +592676,7 @@
"reftest"
],
"infrastructure/assumptions/html-elements.html": [
- "9585f8fff4f585b8b4f31ea485f9d0195173772d",
+ "f220b1d79989287aef4aa450ea6978a7f23890c7",
"testharness"
],
"infrastructure/assumptions/initial-color-ref.html": [
@@ -591845,10 +592727,6 @@
"a91279f3455bdaf63412e9487192502da1e51baf",
"testharness"
],
- "infrastructure/metadata/infrastructure/assumptions/html-elements.html.ini": [
- "0f536ac59a959769966d56c5a546f9f2c2557e97",
- "support"
- ],
"infrastructure/metadata/infrastructure/browsers/firefox/__dir__.ini": [
"29d2053e55e60d4e8a15def3a96a3501db03ec54",
"support"
@@ -592066,7 +592944,7 @@
"support"
],
"interfaces/DOM-Parsing.idl": [
- "4324fb1908608583b898ae01ad44d9f8e1da89ac",
+ "61b8e622931ffee1b779e798e4a381959457ef45",
"support"
],
"interfaces/FileAPI.idl": [
@@ -592134,13 +593012,17 @@
"support"
],
"interfaces/cookie-store.idl": [
- "bb4c385873deafd746f186058b111193c8aebf01",
+ "427e33a156cad6978e1c9c5ef5a9f906aa67a4c4",
"support"
],
"interfaces/cors-rfc1918.idl": [
"d7f133c8dd6e1656f82c077d9795714827b9c869",
"support"
],
+ "interfaces/credential-management.idl": [
+ "29a0bcde9ddd6629c7bf05757cea45c831fe9a6b",
+ "support"
+ ],
"interfaces/css-animations.idl": [
"520ed1f6d245c75551aed3f74f988026edf3ff59",
"support"
@@ -592241,6 +593123,10 @@
"fe86c7370a537be87884d1b9da1f7b7630c6af41",
"support"
],
+ "interfaces/image-capture.idl": [
+ "9060a5d260bb68509a1709abf5c3ed59027293ce",
+ "support"
+ ],
"interfaces/input-events.idl": [
"99bcfa971e6b2628ab8ba174b772d56b23dee38b",
"support"
@@ -592269,10 +593155,6 @@
"501b9ce0b557e52c122a2bb7f3be1a3e360da512",
"support"
],
- "interfaces/mediacapture-image.idl": [
- "22f1cdf8c2c07e72570786750f50168d0a5ba782",
- "support"
- ],
"interfaces/mediacapture-main.idl": [
"a2a5e12acdc863828532e28574ed4904f0b0b2b8",
"support"
@@ -592421,6 +593303,10 @@
"21b54128664c5962c29fd708ebba3d8d90987f26",
"support"
],
+ "interfaces/webappsec-subresource-integrity.idl": [
+ "059b8faf32b557e4303a8c119ab46fe58ca85102",
+ "support"
+ ],
"interfaces/webaudio.idl": [
"a2adb319de88d1d33080a837972caefa5c5c1946",
"support"
@@ -592725,6 +593611,10 @@
"545a86cb977d49303debac90d00339f1348f7f76",
"support"
],
+ "lifecycle/META.yml": [
+ "c99bd5330e9e8c1620ce3e97b9a0d7a307ee285d",
+ "support"
+ ],
"lifecycle/freeze.html": [
"79f45af08ff1cfe5c29d318fe6a32d281e990960",
"testharness"
@@ -593926,7 +594816,7 @@
"support"
],
"mediacapture-image/idlharness.html": [
- "69441fcf969ff3bd014ac6109c1f8b1a18a8ec54",
+ "963b96c7cffd42051fa9586ddd9105dac71819a7",
"testharness"
],
"mediacapture-record/BlobEvent-constructor.html": [
@@ -602770,11 +603660,11 @@
"testharness"
],
"payment-request/PaymentMethodChangeEvent/methodDetails-attribute.https.html": [
- "be817481f663888d8ee58f40906caf0744746d04",
+ "82bd1a4f366b664fb19d38e9e58507fedba6e6ef",
"testharness"
],
"payment-request/PaymentMethodChangeEvent/methodName-attribute.https.html": [
- "891494d8f44efe3f741e809bd6e7ac7e07ec786e",
+ "f21447dfe6f5fdf03166517ec406e98948f442ea",
"testharness"
],
"payment-request/PaymentRequestUpdateEvent/constructor.http.html": [
@@ -602946,7 +603836,7 @@
"testharness"
],
"payment-request/payment-response/complete-method-manual.https.html": [
- "3a3e57155d5267e515f7d1711e99fb6a7d170eb7",
+ "366751b4fed2b18c08ce4daa7f77e4d557af5039",
"manual"
],
"payment-request/payment-response/helpers.js": [
@@ -603102,7 +603992,7 @@
"support"
],
"permissions/interfaces.any.js": [
- "2b16f91ae23a516d2c58299b81e0b3895cba117b",
+ "255271bea21cf7c43e6b99296bd93ef210d36c49",
"testharness"
],
"picture-in-picture/META.yml": [
@@ -604045,10 +604935,22 @@
"a9fd790c46562057d00b9a042f548d28259042d0",
"testharness"
],
- "quirks/hashless-hex-color.html": [
- "161c0bfaabbfb59c426e855b9dcfa746ea9e8f95",
+ "quirks/hashless-hex-color/limited-quirks.html": [
+ "4e4e6074a7669550604c749f3a9b8ebcbcc02785",
+ "testharness"
+ ],
+ "quirks/hashless-hex-color/no-quirks.html": [
+ "eb5b9ca4db25184918c811c63db7ab1deb7ec643",
+ "testharness"
+ ],
+ "quirks/hashless-hex-color/quirks.html": [
+ "9011c6a7246a5db05ce1f431d42e99ff4e53baf4",
"testharness"
],
+ "quirks/hashless-hex-color/support/common.js": [
+ "d3b9c9c0f81547e7bff3d277593b4034e015d1b1",
+ "support"
+ ],
"quirks/historical/list-item-bullet-size-ref.html": [
"2579fff5cb55faf66c71dfed695f05db8774d98d",
"support"
@@ -604062,9 +604964,13 @@
"testharness"
],
"quirks/percentage-height-calculation.html": [
- "de9964d89f79db9a85df6bf65b5bc039aa244380",
+ "a81a06f7183fbc033e793b03e811e4669e15cb24",
"testharness"
],
+ "quirks/support/test-ref-iframe.js": [
+ "aa4182c108b7aa802b91d3e573a28c1920c58576",
+ "support"
+ ],
"quirks/supports.html": [
"cac590a930dab33ba0ab7981c31b868861931493",
"testharness"
@@ -604077,10 +604983,22 @@
"b7a8466a3842237ddf9446bd3ab49de043001526",
"testharness"
],
- "quirks/unitless-length.html": [
- "578d2aed4afa7cd6739610d353aebc591d832418",
+ "quirks/unitless-length/limited-quirks.html": [
+ "5d34a17086a2f3abb58b0e3e3f0599bc39f8486e",
+ "testharness"
+ ],
+ "quirks/unitless-length/no-quirks.html": [
+ "3871b7abd2c53bbf264759db7e1e4be873f8f4bd",
"testharness"
],
+ "quirks/unitless-length/quirks.html": [
+ "cf342d1743ca615601e6891fc502d4785afb8647",
+ "testharness"
+ ],
+ "quirks/unitless-length/support/common.js": [
+ "ab9f15bb0b89b188fcbfa866cfe040cc0b15b31e",
+ "support"
+ ],
"referrer-policy/META.yml": [
"f4454894fc36bdc73ea3fde9d4b97efb5c999b2f",
"support"
@@ -604122,7 +605040,7 @@
"testharness"
],
"referrer-policy/generic/common.js": [
- "583f61d9d6f30742f8144ded8ea31035a07034a3",
+ "99a7fec378d204fd0fafc4bb845acd7c54a2613f",
"support"
],
"referrer-policy/generic/iframe-inheritance.html": [
@@ -614378,7 +615296,7 @@
"testharness"
],
"service-workers/service-worker/referrer-policy-header.https.html": [
- "eef44dace34ca278172d59a609ab4193c3c5af28",
+ "c44985a9be68e83af6b9c4521310bfaeec88aea8",
"testharness"
],
"service-workers/service-worker/register-closed-window.https.html": [
@@ -615222,7 +616140,7 @@
"support"
],
"service-workers/service-worker/resources/performance-timeline-worker.js": [
- "fc275abc58d82c338ff369ba62994bd3d5609a67",
+ "c4c32d5b7ca352a3f18548928570a8a7339fa687",
"support"
],
"service-workers/service-worker/resources/postmessage-blob-url.js": [
@@ -615910,7 +616828,7 @@
"testharness"
],
"shadow-dom/Document-prototype-currentScript.html": [
- "c19ae5aa7d8ee63a50514fedd66231e48c31297e",
+ "dfaf976147656d81e23341d6e6fd9c74d4ca88cb",
"testharness"
],
"shadow-dom/Document-prototype-importNode.html": [
@@ -617805,6 +618723,10 @@
"40773896fa85b0ac6545d3064f7e594e4e9b4339",
"support"
],
+ "subresource-integrity/idlharness.window.js": [
+ "c4d81b58ea18d76c95cc84e43ca5145dbc06f0a3",
+ "testharness"
+ ],
"subresource-integrity/matching-digest.js": [
"c28fd94f8c51bd90da2464338e91281304818e0a",
"support"
@@ -622722,7 +623644,7 @@
"testharness"
],
"web-animations/animation-model/animation-types/property-list.js": [
- "9416f470f1ac1d320bb4d46461938e85946439e2",
+ "5a818163c3ddcb6e0901b4f0086d555e9d440e27",
"support"
],
"web-animations/animation-model/animation-types/property-types.js": [
@@ -623189,6 +624111,10 @@
"d1b1f1fdeb695b9fe72857aa9fca1320b6c36ee1",
"support"
],
+ "webaudio/resources/audiobuffersource-testing.js": [
+ "9cce2e47d6fa8e9e28ca55f35d35a48d1745c067",
+ "support"
+ ],
"webaudio/resources/audionodeoptions.js": [
"d7712311bddd23e171e7e1f024aec0a565b08a13",
"support"
@@ -623202,7 +624128,7 @@
"support"
],
"webaudio/resources/audit.js": [
- "1e7c1c4169bc54bd2046ff5b3392f846c6b7b40f",
+ "eb55fd24237ac7ea4a69c109202e27d6ccd82f80",
"support"
],
"webaudio/resources/biquad-filters.js": [
@@ -623237,6 +624163,10 @@
"4508f0205419865b6166340ce6d4f955f914b6b1",
"support"
],
+ "webaudio/resources/note-grain-on-testing.js": [
+ "e843543633018830e25884d5f89a8446b77d9066",
+ "support"
+ ],
"webaudio/resources/panner-formulas.js": [
"872d9aa271558ee3e7aa293c8e3e44fd525461c0",
"support"
@@ -623321,16 +624251,72 @@
"da39a3ee5e6b4b0d3255bfef95601890afd80709",
"support"
],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-basic.html": [
+ "79d7953fd8bf9fe307d071ee32f8a41851ae7462",
+ "testharness"
+ ],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-channels.html": [
+ "07642a64398f3b18017608cde7f90cacb277cc9a",
+ "testharness"
+ ],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-ended.html": [
+ "7e7c6e9458cb02883c1d53877875ba9723a1fe2d",
+ "testharness"
+ ],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-grain.html": [
+ "3eda7864e8749d3a2fcf84b9fb13be9ac43765f0",
+ "testharness"
+ ],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels-expected.wav": [
+ "52b39bb00bcc72be9a0e41ceef17210b1cd0be43",
+ "support"
+ ],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html": [
+ "9f8f807e8753c2942d31645bc797219482453fb3",
+ "testharness"
+ ],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-one-sample-loop.html": [
+ "ff8217615accf70197c350f3bead193acacec1c2",
+ "testharness"
+ ],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-playbackrate-zero.html": [
+ "27bf6a32d45e85dab0ef1001b0c49236559d3022",
+ "testharness"
+ ],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-start.html": [
+ "ff1a7586221fea1bf47595bdae834350a790bb2d",
+ "testharness"
+ ],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiosource-onended.html": [
+ "d3350fa17ae71bca0daf02c7ad26e221a4511f3a",
+ "testharness"
+ ],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiosource-time-limits.html": [
+ "d22ac86e59241f9b3e58aae954bb57079bc35955",
+ "testharness"
+ ],
"webaudio/the-audio-api/the-audiobuffersourcenode-interface/ctor-audiobuffersource.html": [
"ce84d25460435564021a13dc9e26384bc30e9d96",
"testharness"
],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/note-grain-on-play.html": [
+ "4434f6a668dccbaa76d68ecd2fe2a27c71ae1f3c",
+ "testharness"
+ ],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/note-grain-on-timing.html": [
+ "e39fdae0e19cd733e2644396adf434bf7a33e323",
+ "testharness"
+ ],
+ "webaudio/the-audio-api/the-audiobuffersourcenode-interface/sample-accurate-scheduling.html": [
+ "5b43eb5c5aa96738fc9262130fda1cc1ff002ee3",
+ "testharness"
+ ],
"webaudio/the-audio-api/the-audiocontext-interface/.gitkeep": [
"da39a3ee5e6b4b0d3255bfef95601890afd80709",
"support"
],
"webaudio/the-audio-api/the-audiocontext-interface/audiocontext-getoutputtimestamp.html": [
- "03d32deacab7a98f3cce29562b84158e3f512668",
+ "d930208c2626370bab10256e1ab05e701b5a88b6",
"testharness"
],
"webaudio/the-audio-api/the-audiocontext-interface/audiocontext-suspend-resume.html": [
@@ -623749,6 +624735,10 @@
"8fac11e0ecfa8bfb9b49d68d0792793f44e94ad4",
"testharness"
],
+ "webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html": [
+ "673bc5a4ff452dd83bd9209b33f40ccdadd0cf43",
+ "testharness"
+ ],
"webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-null.html": [
"f32f5acdf031b1a2b32bc37324b105d1df7c5fdb",
"testharness"
@@ -624070,7 +625060,7 @@
"support"
],
"webauthn/interfaces.https.any.js": [
- "3ca7a0855f38bf8d0250d0a352dd60c2ee6515fa",
+ "f143ec75c75322b368f808d7d36be5b7d4cb3c62",
"testharness"
],
"webauthn/securecontext.http.html": [
@@ -624230,15 +625220,15 @@
"wdspec"
],
"webdriver/tests/element_click/interactability.py": [
- "b022a9c9c222cfdcce208a4934eb1bc52de90495",
+ "b365c3e0e1e8c75da3e196e98d890338f0c15883",
"wdspec"
],
"webdriver/tests/element_click/navigate.py": [
- "4e6186b1352b71cca8444f9752634d6b04dbaf16",
+ "ec45e1e3ecb091b5853298704f9944d0f4a04ae9",
"wdspec"
],
"webdriver/tests/element_click/scroll_into_view.py": [
- "cc9084d4782fdcad3ee82204749109c9c15e28d2",
+ "d18edb83617f60faf13fcb20aaf7446a30484cfd",
"wdspec"
],
"webdriver/tests/element_click/select.py": [
@@ -625174,7 +626164,7 @@
"testharness"
],
"webrtc/RTCPeerConnection-add-track-no-deadlock.https.html": [
- "a16eaf6805528c2b73650694f26568f41be5d5ff",
+ "d08414aefa6b0f082a0fcb7f5d05933636c012bb",
"testharness"
],
"webrtc/RTCPeerConnection-addIceCandidate.html": [
@@ -625182,7 +626172,7 @@
"testharness"
],
"webrtc/RTCPeerConnection-addTrack.https.html": [
- "fe5aa5d0a69b1131575624a0a8c3031674b12c85",
+ "eddb5aedbfea3636ae03c0920c4450afc8e70658",
"testharness"
],
"webrtc/RTCPeerConnection-addTransceiver.html": [
@@ -625266,7 +626256,7 @@
"testharness"
],
"webrtc/RTCPeerConnection-removeTrack.https.html": [
- "0cc7f4a5694e69e9e604fda5849c0b81f360db7d",
+ "f4251f373bce768c30c5da9253029319921f3cf0",
"testharness"
],
"webrtc/RTCPeerConnection-setDescription-transceiver.html": [
@@ -625314,7 +626304,7 @@
"testharness"
],
"webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html": [
- "b40a9d3d52fd846f695482671877634359e86ab3",
+ "b3d025c0a50886293e340afc27081212b0bead95",
"testharness"
],
"webrtc/RTCPeerConnection-setRemoteDescription.html": [
@@ -625374,7 +626364,7 @@
"testharness"
],
"webrtc/RTCRtpReceiver-getStats.https.html": [
- "0ead17ad0504866cac28dbb9be20376b55e60a1a",
+ "ebbca119f90320469cb311cac234c82d230f1191",
"testharness"
],
"webrtc/RTCRtpReceiver-getSynchronizationSources.https.html": [
@@ -625386,7 +626376,7 @@
"testharness"
],
"webrtc/RTCRtpSender-getStats.https.html": [
- "ba31d1217805d647f5efc31e6d4cadc09a8ae426",
+ "7cea6806ce165a32f5f28d6df215a2af07da7bd2",
"testharness"
],
"webrtc/RTCRtpSender-replaceTrack.html": [
@@ -625485,12 +626475,16 @@
"4a7dfd32e2129c362e153a83e4645fcc77b74247",
"support"
],
- "webrtc/tools/package-lock.json": [
- "731c41b82c17db5d5c3e0c636c197fcba01df344",
+ "webrtc/tools/codemod-peerconnection-addcleanup": [
+ "745b67efbb6422f4abac66fb93783f7c5e7e1e01",
+ "support"
+ ],
+ "webrtc/tools/html-codemod.js": [
+ "031e1282376e76e2e88f6b61f3dbd0bafb63db8f",
"support"
],
"webrtc/tools/package.json": [
- "67474f98b40d247ebac9cdee2146019a8e0b10b1",
+ "3f4c576b69a55927877e64ba022fa2ba8d191156",
"support"
],
"websockets/Close-1000-reason.any.js": [
@@ -630426,7 +631420,7 @@
"testharness"
],
"workers/modules/dedicated-worker-import-referrer.html": [
- "309df42ef9329addc1fc59e2d3c0443454e14ad7",
+ "9495c1f58acf7062267fd59e682541950a659731",
"testharness"
],
"workers/modules/dedicated-worker-import.any.js": [
@@ -631102,15 +632096,15 @@
"support"
],
"worklets/resources/referrer-checker.py": [
- "9e4cce637b7402da3b6a17d4cb33dc706f222c41",
+ "3de9f5d0d90e5c360edd453a539cc2b83f45d42e",
"support"
],
"worklets/resources/referrer-tests.js": [
- "bfa2e28259a44abf3aac6be528e51976c9ff782d",
+ "e072f492d6aa19866245b357a623c60ec3382c9a",
"support"
],
"worklets/resources/referrer-window.html": [
- "adfb1c116fedb6396f970ed8072ee73edfc755fc",
+ "5900ef7037397bc3eb956b97c40cfd7a3a12c95f",
"support"
],
"worklets/resources/service-worker-interception-tests.js": [
diff --git a/tests/wpt/metadata/cors/script-304.html.ini b/tests/wpt/metadata/cors/script-304.html.ini
new file mode 100644
index 00000000000..914b364b684
--- /dev/null
+++ b/tests/wpt/metadata/cors/script-304.html.ini
@@ -0,0 +1,7 @@
+[script-304.html]
+ [Load a fresh cross-origin script]
+ expected: FAIL
+
+ [Reload same cross-origin script from the memory cache after revalidation]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/CSS2/abspos/between-float-and-text.html.ini b/tests/wpt/metadata/css/CSS2/abspos/between-float-and-text.html.ini
new file mode 100644
index 00000000000..07973158f98
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/abspos/between-float-and-text.html.ini
@@ -0,0 +1,2 @@
+[between-float-and-text.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-fonts/variations/font-weight-matching.html.ini b/tests/wpt/metadata/css/css-fonts/variations/font-weight-matching.html.ini
index 7c80799aece..b075270b5f3 100644
--- a/tests/wpt/metadata/css/css-fonts/variations/font-weight-matching.html.ini
+++ b/tests/wpt/metadata/css/css-fonts/variations/font-weight-matching.html.ini
@@ -38,3 +38,6 @@
[Test @font-face matching for weight 249]
expected: FAIL
+ [Test @font-face matching for weight 420]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-text/white-space/trailing-space-before-br-001.html.ini b/tests/wpt/metadata/css/css-text/white-space/trailing-space-before-br-001.html.ini
new file mode 100644
index 00000000000..08a2433c8d4
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/trailing-space-before-br-001.html.ini
@@ -0,0 +1,4 @@
+[trailing-space-before-br-001.html]
+ [CSS Text: A sequence of collapsible spaces at the end of a line is removed]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-transforms/parsing/transform-box-valid.html.ini b/tests/wpt/metadata/css/css-transforms/parsing/transform-box-valid.html.ini
new file mode 100644
index 00000000000..7479cbb5a20
--- /dev/null
+++ b/tests/wpt/metadata/css/css-transforms/parsing/transform-box-valid.html.ini
@@ -0,0 +1,16 @@
+[transform-box-valid.html]
+ [e.style['transform-box'\] = "content-box" should set the property value]
+ expected: FAIL
+
+ [e.style['transform-box'\] = "border-box" should set the property value]
+ expected: FAIL
+
+ [e.style['transform-box'\] = "fill-box" should set the property value]
+ expected: FAIL
+
+ [e.style['transform-box'\] = "stroke-box" should set the property value]
+ expected: FAIL
+
+ [e.style['transform-box'\] = "view-box" should set the property value]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-values/vh_not_refreshing_on_chrome.html.ini b/tests/wpt/metadata/css/css-values/vh_not_refreshing_on_chrome.html.ini
deleted file mode 100644
index 26435e28b09..00000000000
--- a/tests/wpt/metadata/css/css-values/vh_not_refreshing_on_chrome.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[vh_not_refreshing_on_chrome.html]
- expected: FAIL
diff --git a/tests/wpt/metadata/css/mediaqueries/test_media_queries.html.ini b/tests/wpt/metadata/css/mediaqueries/test_media_queries.html.ini
index c226b13e8fb..f7296240e99 100644
--- a/tests/wpt/metadata/css/mediaqueries/test_media_queries.html.ini
+++ b/tests/wpt/metadata/css/mediaqueries/test_media_queries.html.ini
@@ -11,9 +11,6 @@
[subtest_6]
expected: FAIL
- [subtest_7]
- expected: FAIL
-
[subtest_8]
expected: FAIL
@@ -23,18 +20,9 @@
[subtest_10]
expected: FAIL
- [subtest_11]
- expected: FAIL
-
[subtest_12]
expected: FAIL
- [subtest_13]
- expected: FAIL
-
- [subtest_14]
- expected: FAIL
-
[subtest_15]
expected: FAIL
@@ -854,3 +842,1026 @@
[subtest_385]
expected: FAIL
+ [subtest_2]
+ expected: FAIL
+
+ [subtest_79]
+ expected: FAIL
+
+ [subtest_82]
+ expected: FAIL
+
+ [subtest_84]
+ expected: FAIL
+
+ [subtest_85]
+ expected: FAIL
+
+ [subtest_86]
+ expected: FAIL
+
+ [subtest_89]
+ expected: FAIL
+
+ [subtest_90]
+ expected: FAIL
+
+ [subtest_92]
+ expected: FAIL
+
+ [subtest_95]
+ expected: FAIL
+
+ [subtest_97]
+ expected: FAIL
+
+ [subtest_98]
+ expected: FAIL
+
+ [subtest_99]
+ expected: FAIL
+
+ [subtest_102]
+ expected: FAIL
+
+ [subtest_103]
+ expected: FAIL
+
+ [subtest_105]
+ expected: FAIL
+
+ [subtest_108]
+ expected: FAIL
+
+ [subtest_110]
+ expected: FAIL
+
+ [subtest_111]
+ expected: FAIL
+
+ [subtest_112]
+ expected: FAIL
+
+ [subtest_115]
+ expected: FAIL
+
+ [subtest_116]
+ expected: FAIL
+
+ [subtest_118]
+ expected: FAIL
+
+ [subtest_121]
+ expected: FAIL
+
+ [subtest_123]
+ expected: FAIL
+
+ [subtest_124]
+ expected: FAIL
+
+ [subtest_125]
+ expected: FAIL
+
+ [subtest_128]
+ expected: FAIL
+
+ [subtest_129]
+ expected: FAIL
+
+ [subtest_131]
+ expected: FAIL
+
+ [subtest_135]
+ expected: FAIL
+
+ [subtest_136]
+ expected: FAIL
+
+ [subtest_138]
+ expected: FAIL
+
+ [subtest_139]
+ expected: FAIL
+
+ [subtest_140]
+ expected: FAIL
+
+ [subtest_150]
+ expected: FAIL
+
+ [subtest_151]
+ expected: FAIL
+
+ [subtest_153]
+ expected: FAIL
+
+ [subtest_154]
+ expected: FAIL
+
+ [subtest_156]
+ expected: FAIL
+
+ [subtest_157]
+ expected: FAIL
+
+ [subtest_158]
+ expected: FAIL
+
+ [subtest_163]
+ expected: FAIL
+
+ [subtest_164]
+ expected: FAIL
+
+ [subtest_165]
+ expected: FAIL
+
+ [subtest_170]
+ expected: FAIL
+
+ [subtest_171]
+ expected: FAIL
+
+ [subtest_172]
+ expected: FAIL
+
+ [subtest_173]
+ expected: FAIL
+
+ [subtest_177]
+ expected: FAIL
+
+ [subtest_180]
+ expected: FAIL
+
+ [subtest_181]
+ expected: FAIL
+
+ [subtest_183]
+ expected: FAIL
+
+ [subtest_184]
+ expected: FAIL
+
+ [subtest_187]
+ expected: FAIL
+
+ [subtest_188]
+ expected: FAIL
+
+ [subtest_189]
+ expected: FAIL
+
+ [subtest_191]
+ expected: FAIL
+
+ [subtest_193]
+ expected: FAIL
+
+ [subtest_195]
+ expected: FAIL
+
+ [subtest_196]
+ expected: FAIL
+
+ [subtest_197]
+ expected: FAIL
+
+ [subtest_199]
+ expected: FAIL
+
+ [subtest_231]
+ expected: FAIL
+
+ [subtest_234]
+ expected: FAIL
+
+ [subtest_236]
+ expected: FAIL
+
+ [subtest_237]
+ expected: FAIL
+
+ [subtest_243]
+ expected: FAIL
+
+ [subtest_245]
+ expected: FAIL
+
+ [subtest_265]
+ expected: FAIL
+
+ [subtest_267]
+ expected: FAIL
+
+ [subtest_269]
+ expected: FAIL
+
+ [subtest_270]
+ expected: FAIL
+
+ [subtest_271]
+ expected: FAIL
+
+ [subtest_314]
+ expected: FAIL
+
+ [subtest_315]
+ expected: FAIL
+
+ [subtest_316]
+ expected: FAIL
+
+ [subtest_319]
+ expected: FAIL
+
+ [subtest_321]
+ expected: FAIL
+
+ [subtest_323]
+ expected: FAIL
+
+ [subtest_324]
+ expected: FAIL
+
+ [subtest_326]
+ expected: FAIL
+
+ [subtest_337]
+ expected: FAIL
+
+ [subtest_338]
+ expected: FAIL
+
+ [subtest_339]
+ expected: FAIL
+
+ [subtest_350]
+ expected: FAIL
+
+ [subtest_354]
+ expected: FAIL
+
+ [subtest_359]
+ expected: FAIL
+
+ [subtest_361]
+ expected: FAIL
+
+ [subtest_364]
+ expected: FAIL
+
+ [subtest_366]
+ expected: FAIL
+
+ [subtest_367]
+ expected: FAIL
+
+ [subtest_368]
+ expected: FAIL
+
+ [subtest_369]
+ expected: FAIL
+
+ [subtest_370]
+ expected: FAIL
+
+ [subtest_372]
+ expected: FAIL
+
+ [subtest_373]
+ expected: FAIL
+
+ [subtest_376]
+ expected: FAIL
+
+ [subtest_377]
+ expected: FAIL
+
+ [subtest_380]
+ expected: FAIL
+
+ [subtest_381]
+ expected: FAIL
+
+ [subtest_386]
+ expected: FAIL
+
+ [subtest_389]
+ expected: FAIL
+
+ [subtest_390]
+ expected: FAIL
+
+ [subtest_391]
+ expected: FAIL
+
+ [subtest_392]
+ expected: FAIL
+
+ [subtest_394]
+ expected: FAIL
+
+ [subtest_398]
+ expected: FAIL
+
+ [subtest_399]
+ expected: FAIL
+
+ [subtest_402]
+ expected: FAIL
+
+ [subtest_405]
+ expected: FAIL
+
+ [subtest_406]
+ expected: FAIL
+
+ [subtest_409]
+ expected: FAIL
+
+ [subtest_410]
+ expected: FAIL
+
+ [subtest_413]
+ expected: FAIL
+
+ [subtest_414]
+ expected: FAIL
+
+ [subtest_417]
+ expected: FAIL
+
+ [subtest_418]
+ expected: FAIL
+
+ [subtest_419]
+ expected: FAIL
+
+ [subtest_420]
+ expected: FAIL
+
+ [subtest_422]
+ expected: FAIL
+
+ [subtest_426]
+ expected: FAIL
+
+ [subtest_427]
+ expected: FAIL
+
+ [subtest_430]
+ expected: FAIL
+
+ [subtest_433]
+ expected: FAIL
+
+ [subtest_434]
+ expected: FAIL
+
+ [subtest_437]
+ expected: FAIL
+
+ [subtest_438]
+ expected: FAIL
+
+ [subtest_441]
+ expected: FAIL
+
+ [subtest_442]
+ expected: FAIL
+
+ [subtest_445]
+ expected: FAIL
+
+ [subtest_446]
+ expected: FAIL
+
+ [subtest_447]
+ expected: FAIL
+
+ [subtest_448]
+ expected: FAIL
+
+ [subtest_450]
+ expected: FAIL
+
+ [subtest_454]
+ expected: FAIL
+
+ [subtest_455]
+ expected: FAIL
+
+ [subtest_458]
+ expected: FAIL
+
+ [subtest_461]
+ expected: FAIL
+
+ [subtest_462]
+ expected: FAIL
+
+ [subtest_465]
+ expected: FAIL
+
+ [subtest_466]
+ expected: FAIL
+
+ [subtest_469]
+ expected: FAIL
+
+ [subtest_470]
+ expected: FAIL
+
+ [subtest_473]
+ expected: FAIL
+
+ [subtest_474]
+ expected: FAIL
+
+ [subtest_475]
+ expected: FAIL
+
+ [subtest_476]
+ expected: FAIL
+
+ [subtest_478]
+ expected: FAIL
+
+ [subtest_482]
+ expected: FAIL
+
+ [subtest_483]
+ expected: FAIL
+
+ [subtest_486]
+ expected: FAIL
+
+ [subtest_489]
+ expected: FAIL
+
+ [subtest_490]
+ expected: FAIL
+
+ [subtest_493]
+ expected: FAIL
+
+ [subtest_494]
+ expected: FAIL
+
+ [subtest_497]
+ expected: FAIL
+
+ [subtest_498]
+ expected: FAIL
+
+ [subtest_500]
+ expected: FAIL
+
+ [subtest_501]
+ expected: FAIL
+
+ [subtest_502]
+ expected: FAIL
+
+ [subtest_505]
+ expected: FAIL
+
+ [subtest_509]
+ expected: FAIL
+
+ [subtest_510]
+ expected: FAIL
+
+ [subtest_511]
+ expected: FAIL
+
+ [subtest_512]
+ expected: FAIL
+
+ [subtest_513]
+ expected: FAIL
+
+ [subtest_514]
+ expected: FAIL
+
+ [subtest_515]
+ expected: FAIL
+
+ [subtest_516]
+ expected: FAIL
+
+ [subtest_517]
+ expected: FAIL
+
+ [subtest_520]
+ expected: FAIL
+
+ [subtest_523]
+ expected: FAIL
+
+ [subtest_527]
+ expected: FAIL
+
+ [subtest_528]
+ expected: FAIL
+
+ [subtest_529]
+ expected: FAIL
+
+ [subtest_530]
+ expected: FAIL
+
+ [subtest_534]
+ expected: FAIL
+
+ [subtest_535]
+ expected: FAIL
+
+ [subtest_536]
+ expected: FAIL
+
+ [subtest_537]
+ expected: FAIL
+
+ [subtest_542]
+ expected: FAIL
+
+ [subtest_543]
+ expected: FAIL
+
+ [subtest_544]
+ expected: FAIL
+
+ [subtest_546]
+ expected: FAIL
+
+ [subtest_547]
+ expected: FAIL
+
+ [subtest_550]
+ expected: FAIL
+
+ [subtest_553]
+ expected: FAIL
+
+ [subtest_554]
+ expected: FAIL
+
+ [subtest_558]
+ expected: FAIL
+
+ [subtest_560]
+ expected: FAIL
+
+ [subtest_562]
+ expected: FAIL
+
+ [subtest_566]
+ expected: FAIL
+
+ [subtest_568]
+ expected: FAIL
+
+ [subtest_569]
+ expected: FAIL
+
+ [subtest_570]
+ expected: FAIL
+
+ [subtest_571]
+ expected: FAIL
+
+ [subtest_572]
+ expected: FAIL
+
+ [subtest_573]
+ expected: FAIL
+
+ [subtest_574]
+ expected: FAIL
+
+ [subtest_575]
+ expected: FAIL
+
+ [subtest_576]
+ expected: FAIL
+
+ [subtest_577]
+ expected: FAIL
+
+ [subtest_578]
+ expected: FAIL
+
+ [subtest_579]
+ expected: FAIL
+
+ [subtest_580]
+ expected: FAIL
+
+ [subtest_581]
+ expected: FAIL
+
+ [subtest_582]
+ expected: FAIL
+
+ [subtest_583]
+ expected: FAIL
+
+ [subtest_584]
+ expected: FAIL
+
+ [subtest_585]
+ expected: FAIL
+
+ [subtest_586]
+ expected: FAIL
+
+ [subtest_587]
+ expected: FAIL
+
+ [subtest_588]
+ expected: FAIL
+
+ [subtest_589]
+ expected: FAIL
+
+ [subtest_590]
+ expected: FAIL
+
+ [subtest_591]
+ expected: FAIL
+
+ [subtest_592]
+ expected: FAIL
+
+ [subtest_593]
+ expected: FAIL
+
+ [subtest_594]
+ expected: FAIL
+
+ [subtest_595]
+ expected: FAIL
+
+ [subtest_596]
+ expected: FAIL
+
+ [subtest_597]
+ expected: FAIL
+
+ [subtest_598]
+ expected: FAIL
+
+ [subtest_600]
+ expected: FAIL
+
+ [subtest_601]
+ expected: FAIL
+
+ [subtest_603]
+ expected: FAIL
+
+ [subtest_606]
+ expected: FAIL
+
+ [subtest_607]
+ expected: FAIL
+
+ [subtest_608]
+ expected: FAIL
+
+ [subtest_609]
+ expected: FAIL
+
+ [subtest_610]
+ expected: FAIL
+
+ [subtest_612]
+ expected: FAIL
+
+ [subtest_614]
+ expected: FAIL
+
+ [subtest_615]
+ expected: FAIL
+
+ [subtest_616]
+ expected: FAIL
+
+ [subtest_617]
+ expected: FAIL
+
+ [subtest_618]
+ expected: FAIL
+
+ [subtest_619]
+ expected: FAIL
+
+ [subtest_620]
+ expected: FAIL
+
+ [subtest_621]
+ expected: FAIL
+
+ [subtest_622]
+ expected: FAIL
+
+ [subtest_623]
+ expected: FAIL
+
+ [subtest_624]
+ expected: FAIL
+
+ [subtest_625]
+ expected: FAIL
+
+ [subtest_626]
+ expected: FAIL
+
+ [subtest_627]
+ expected: FAIL
+
+ [subtest_628]
+ expected: FAIL
+
+ [subtest_629]
+ expected: FAIL
+
+ [subtest_630]
+ expected: FAIL
+
+ [subtest_631]
+ expected: FAIL
+
+ [subtest_632]
+ expected: FAIL
+
+ [subtest_634]
+ expected: FAIL
+
+ [subtest_636]
+ expected: FAIL
+
+ [subtest_640]
+ expected: FAIL
+
+ [subtest_641]
+ expected: FAIL
+
+ [subtest_642]
+ expected: FAIL
+
+ [subtest_643]
+ expected: FAIL
+
+ [subtest_644]
+ expected: FAIL
+
+ [subtest_645]
+ expected: FAIL
+
+ [subtest_646]
+ expected: FAIL
+
+ [subtest_647]
+ expected: FAIL
+
+ [subtest_648]
+ expected: FAIL
+
+ [subtest_649]
+ expected: FAIL
+
+ [subtest_650]
+ expected: FAIL
+
+ [subtest_651]
+ expected: FAIL
+
+ [subtest_652]
+ expected: FAIL
+
+ [subtest_653]
+ expected: FAIL
+
+ [subtest_654]
+ expected: FAIL
+
+ [subtest_655]
+ expected: FAIL
+
+ [subtest_656]
+ expected: FAIL
+
+ [subtest_657]
+ expected: FAIL
+
+ [subtest_658]
+ expected: FAIL
+
+ [subtest_659]
+ expected: FAIL
+
+ [subtest_660]
+ expected: FAIL
+
+ [subtest_661]
+ expected: FAIL
+
+ [subtest_662]
+ expected: FAIL
+
+ [subtest_663]
+ expected: FAIL
+
+ [subtest_664]
+ expected: FAIL
+
+ [subtest_665]
+ expected: FAIL
+
+ [subtest_666]
+ expected: FAIL
+
+ [subtest_667]
+ expected: FAIL
+
+ [subtest_668]
+ expected: FAIL
+
+ [subtest_669]
+ expected: FAIL
+
+ [subtest_670]
+ expected: FAIL
+
+ [subtest_671]
+ expected: FAIL
+
+ [subtest_672]
+ expected: FAIL
+
+ [subtest_673]
+ expected: FAIL
+
+ [subtest_674]
+ expected: FAIL
+
+ [subtest_675]
+ expected: FAIL
+
+ [subtest_676]
+ expected: FAIL
+
+ [subtest_677]
+ expected: FAIL
+
+ [subtest_678]
+ expected: FAIL
+
+ [subtest_679]
+ expected: FAIL
+
+ [subtest_680]
+ expected: FAIL
+
+ [subtest_681]
+ expected: FAIL
+
+ [subtest_685]
+ expected: FAIL
+
+ [subtest_686]
+ expected: FAIL
+
+ [subtest_688]
+ expected: FAIL
+
+ [subtest_690]
+ expected: FAIL
+
+ [subtest_693]
+ expected: FAIL
+
+ [subtest_695]
+ expected: FAIL
+
+ [subtest_696]
+ expected: FAIL
+
+ [subtest_697]
+ expected: FAIL
+
+ [subtest_698]
+ expected: FAIL
+
+ [subtest_699]
+ expected: FAIL
+
+ [subtest_700]
+ expected: FAIL
+
+ [subtest_701]
+ expected: FAIL
+
+ [subtest_702]
+ expected: FAIL
+
+ [subtest_703]
+ expected: FAIL
+
+ [subtest_704]
+ expected: FAIL
+
+ [subtest_708]
+ expected: FAIL
+
+ [subtest_709]
+ expected: FAIL
+
+ [subtest_710]
+ expected: FAIL
+
+ [subtest_711]
+ expected: FAIL
+
+ [subtest_712]
+ expected: FAIL
+
+ [subtest_713]
+ expected: FAIL
+
+ [subtest_714]
+ expected: FAIL
+
+ [subtest_715]
+ expected: FAIL
+
+ [subtest_716]
+ expected: FAIL
+
+ [subtest_717]
+ expected: FAIL
+
+ [subtest_719]
+ expected: FAIL
+
+ [subtest_720]
+ expected: FAIL
+
+ [subtest_721]
+ expected: FAIL
+
+ [subtest_723]
+ expected: FAIL
+
+ [subtest_724]
+ expected: FAIL
+
+ [subtest_725]
+ expected: FAIL
+
+ [subtest_726]
+ expected: FAIL
+
+ [subtest_728]
+ expected: FAIL
+
+ [subtest_730]
+ expected: FAIL
+
+ [subtest_731]
+ expected: FAIL
+
+ [subtest_733]
+ expected: FAIL
+
+ [subtest_739]
+ expected: FAIL
+
+ [subtest_742]
+ expected: FAIL
+
+ [subtest_743]
+ expected: FAIL
+
+ [subtest_746]
+ expected: FAIL
+
+ [subtest_747]
+ expected: FAIL
+
+ [subtest_750]
+ expected: FAIL
+
+ [subtest_751]
+ expected: FAIL
+
+ [subtest_752]
+ expected: FAIL
+
+ [subtest_753]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/dom/nodes/attributes.html.ini b/tests/wpt/metadata/dom/nodes/attributes.html.ini
index bd75d0af9bd..c04bd404470 100644
--- a/tests/wpt/metadata/dom/nodes/attributes.html.ini
+++ b/tests/wpt/metadata/dom/nodes/attributes.html.ini
@@ -3,3 +3,6 @@
[When qualifiedName does not match the QName production, an INVALID_CHARACTER_ERR exception is to be thrown.]
expected: FAIL
+ [Toggling element with inline style should make inline style disappear]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/fetch/api/request/request-keepalive-quota.html.ini b/tests/wpt/metadata/fetch/api/request/request-keepalive-quota.html.ini
index e4d7c3be226..2319416bd2b 100644
--- a/tests/wpt/metadata/fetch/api/request/request-keepalive-quota.html.ini
+++ b/tests/wpt/metadata/fetch/api/request/request-keepalive-quota.html.ini
@@ -9,3 +9,20 @@
[A Keep-Alive fetch() should return only its allocated Quota upon promise resolution.]
expected: FAIL
+
+[request-keepalive-quota.html?include=slow-3]
+ [A Keep-Alive fetch() should not be allowed if the Quota is used up.]
+ expected: FAIL
+
+
+[request-keepalive-quota.html?include=slow-1]
+
+[request-keepalive-quota.html?include=slow-2]
+ [A Keep-Alive fetch() should return only its allocated Quota upon promise resolution.]
+ expected: FAIL
+
+
+[request-keepalive-quota.html?include=fast]
+ [A Keep-Alive fetch() with a body over the Quota Limit should reject.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch-in-service-worker.html.ini b/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch-in-service-worker.html.ini
new file mode 100644
index 00000000000..58cf496b960
--- /dev/null
+++ b/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch-in-service-worker.html.ini
@@ -0,0 +1,4 @@
+[fetch-in-service-worker.html]
+ [Cross-Origin-Resource-Policy in Service Worker]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.any.js.ini b/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.any.js.ini
new file mode 100644
index 00000000000..e04b8c545dd
--- /dev/null
+++ b/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.any.js.ini
@@ -0,0 +1,9 @@
+[fetch.any.html]
+ [fetch]
+ expected: FAIL
+
+
+[fetch.any.worker.html]
+ [fetch]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.html.ini b/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.html.ini
deleted file mode 100644
index 74b60b89b01..00000000000
--- a/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch.html.ini
+++ /dev/null
@@ -1,7 +0,0 @@
-[fetch.html]
- [Untitled]
- expected: FAIL
-
- [fetch]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-abort/javascript-url-abort-return-value-undefined.tentative.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-abort/javascript-url-abort-return-value-undefined.tentative.html.ini
index 78879bad5f1..5b38c37b086 100644
--- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-abort/javascript-url-abort-return-value-undefined.tentative.html.ini
+++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-abort/javascript-url-abort-return-value-undefined.tentative.html.ini
@@ -1,5 +1,4 @@
[javascript-url-abort-return-value-undefined.tentative.html]
- expected: TIMEOUT
[Not aborting fetch for javascript:undefined navigation]
- expected: TIMEOUT
+ expected: FAIL
diff --git a/tests/wpt/metadata/quirks/unitless-length.html.ini b/tests/wpt/metadata/quirks/unitless-length.html.ini
deleted file mode 100644
index 132f45e8141..00000000000
--- a/tests/wpt/metadata/quirks/unitless-length.html.ini
+++ /dev/null
@@ -1,1412 +0,0 @@
-[unitless-length.html]
- type: testharness
- [bottom: 1 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: 1 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: 1 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: 1 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: 1 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: 1 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +1 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +1 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +1 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +1 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +1 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +1 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -1 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -1 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -1 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -1 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -1 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -1 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: 1.5 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: 1.5 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: 1.5 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: 1.5 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: 1.5 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: 1.5 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +1.5 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +1.5 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +1.5 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +1.5 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +1.5 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +1.5 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -1.5 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -1.5 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -1.5 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -1.5 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -1.5 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -1.5 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: \\31 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: \\31 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: \\31 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: \\31 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: \\31 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: \\31 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +\\31 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +\\31 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +\\31 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +\\31 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +\\31 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +\\31 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -\\31 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -\\31 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -\\31 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -\\31 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -\\31 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -\\31 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: \\31 .5 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: \\31 .5 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: \\31 .5 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: \\31 .5 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: \\31 .5 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: \\31 .5 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +\\31 .5 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +\\31 .5 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +\\31 .5 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +\\31 .5 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +\\31 .5 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +\\31 .5 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -\\31 .5 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -\\31 .5 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -\\31 .5 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -\\31 .5 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -\\31 .5 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -\\31 .5 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: 1\\31 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: 1\\31 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: 1\\31 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: 1\\31 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: 1\\31 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: 1\\31 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +1\\31 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +1\\31 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +1\\31 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +1\\31 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +1\\31 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +1\\31 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -1\\31 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -1\\31 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -1\\31 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -1\\31 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -1\\31 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -1\\31 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: 1\\31 .5 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: 1\\31 .5 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: 1\\31 .5 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: 1\\31 .5 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: 1\\31 .5 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: 1\\31 .5 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +1\\31 .5 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +1\\31 .5 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +1\\31 .5 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +1\\31 .5 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +1\\31 .5 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +1\\31 .5 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -1\\31 .5 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -1\\31 .5 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -1\\31 .5 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -1\\31 .5 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -1\\31 .5 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -1\\31 .5 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: a (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: a (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: a (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: a (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: a (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: a (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: A (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: A (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: A (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: A (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: A (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: A (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: 1a (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: 1a (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: 1a (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: 1a (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: 1a (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: 1a (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +1a (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +1a (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +1a (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +1a (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +1a (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +1a (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -1a (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -1a (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -1a (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -1a (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -1a (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -1a (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +1A (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +1A (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +1A (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +1A (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +1A (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +1A (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -1A (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -1A (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -1A (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -1A (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -1A (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -1A (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +a (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +a (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +a (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +a (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +a (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +a (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -a (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -a (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -a (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -a (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -a (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -a (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +A (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +A (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +A (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +A (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +A (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +A (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -A (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -A (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -A (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -A (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -A (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -A (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: @a (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: @a (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: @a (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: @a (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: @a (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: @a (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: @1 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: @1 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: @1 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: @1 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: @1 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: @1 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: @1a (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: @1a (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: @1a (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: @1a (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: @1a (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: @1a (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: "a" (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: "a" (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: "a" (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: "a" (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: "a" (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: "a" (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: "1" (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: "1" (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: "1" (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: "1" (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: "1" (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: "1" (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: "1a" (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: "1a" (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: "1a" (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: "1a" (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: "1a" (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: "1a" (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: url(1) (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: url(1) (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: url(1) (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: url(1) (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: url(1) (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: url(1) (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: url('1') (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: url('1') (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: url('1') (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: url('1') (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: url('1') (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: url('1') (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: #1 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: #1 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: #1 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: #1 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: #1 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: #1 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: #01 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: #01 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: #01 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: #01 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: #01 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: #01 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: #001 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: #001 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: #001 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: #001 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: #001 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: #001 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: #0001 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: #0001 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: #0001 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: #0001 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: #0001 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: #0001 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: #00001 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: #00001 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: #00001 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: #00001 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: #00001 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: #00001 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: #000001 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: #000001 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: #000001 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: #000001 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: #000001 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: #000001 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +/**/1 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +/**/1 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: +/**/1 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +/**/1 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +/**/1 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: +/**/1 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -/**/1 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -/**/1 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: -/**/1 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -/**/1 (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -/**/1 (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: -/**/1 (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: calc(1) (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: calc(1) (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: calc(1) (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: calc(1) (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: calc(1) (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: calc(1) (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: calc(2 * 2px) (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: calc(2 * 2px) (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [bottom: calc(2 * 2px) (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: calc(2 * 2px) (quirks)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: calc(2 * 2px) (almost standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
- [top: calc(2 * 2px) (standards)]
- expected:
- if os == "mac": FAIL
- if not debug and (os == "linux") and (version == "Ubuntu 14.04") and (processor == "x86_64") and (bits == 64): FAIL
-
diff --git a/tests/wpt/metadata/subresource-integrity/idlharness.window.js.ini b/tests/wpt/metadata/subresource-integrity/idlharness.window.js.ini
new file mode 100644
index 00000000000..e663f693ac3
--- /dev/null
+++ b/tests/wpt/metadata/subresource-integrity/idlharness.window.js.ini
@@ -0,0 +1,4 @@
+[idlharness.window.html]
+ [idlharness]
+ expected: FAIL
+
diff --git a/tests/wpt/mozilla/meta/css/border_radius_elliptical_a.html.ini b/tests/wpt/mozilla/meta/css/border_radius_elliptical_a.html.ini
deleted file mode 100644
index ba813a41144..00000000000
--- a/tests/wpt/mozilla/meta/css/border_radius_elliptical_a.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[border_radius_elliptical_a.html]
- expected: FAIL
diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieListItem_attributes.tentative.https.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieListItem_attributes.tentative.https.window.js
new file mode 100644
index 00000000000..8093ec40bff
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookie-store/cookieListItem_attributes.tentative.https.window.js
@@ -0,0 +1,235 @@
+'use strict';
+
+// Workaround because add_cleanup doesn't support async functions yet.
+// See https://github.com/web-platform-tests/wpt/issues/6075
+async function async_cleanup(cleanup_function) {
+ try {
+ await cleanup_function();
+ } catch (e) {
+ // Errors in cleanup functions shouldn't result in test failures.
+ }
+}
+
+const kCurrentHostname = (new URL(self.location.href)).hostname;
+
+const kOneDay = 24 * 60 * 60 * 1000;
+const kTenYears = 10 * 365 * kOneDay;
+const kTenYearsFromNow = Date.now() + kTenYears;
+
+const kCookieListItemKeys =
+ ['domain', 'expires', 'name', 'path', 'sameSite', 'secure', 'value'].sort();
+
+promise_test(async testCase => {
+ await cookieStore.delete('cookie-name');
+
+ await cookieStore.set('cookie-name', 'cookie-value');
+
+ const cookie = await cookieStore.get('cookie-name');
+ assert_equals(cookie.name, 'cookie-name');
+ assert_equals(cookie.value, 'cookie-value');
+ assert_equals(cookie.domain, null);
+ assert_equals(cookie.path, '/');
+ assert_equals(cookie.expires, null);
+ assert_equals(cookie.secure, true);
+ assert_equals(cookie.sameSite, 'strict');
+ assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys);
+
+ await async_cleanup(() => cookieStore.delete('cookie-name'));
+}, 'CookieListItem - cookieStore.set defaults with positional name and value');
+
+promise_test(async testCase => {
+ await cookieStore.delete('cookie-name');
+
+ await cookieStore.set({ name: 'cookie-name', value: 'cookie-value' });
+ const cookie = await cookieStore.get('cookie-name');
+ assert_equals(cookie.name, 'cookie-name');
+ assert_equals(cookie.value, 'cookie-value');
+ assert_equals(cookie.domain, null);
+ assert_equals(cookie.path, '/');
+ assert_equals(cookie.expires, null);
+ assert_equals(cookie.secure, true);
+ assert_equals(cookie.sameSite, 'strict');
+ assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys);
+
+ await async_cleanup(() => cookieStore.delete('cookie-name'));
+}, 'CookieListItem - cookieStore.set defaults with name and value in options');
+
+promise_test(async testCase => {
+ await cookieStore.delete('cookie-name');
+
+ await cookieStore.set('cookie-name', 'cookie-value',
+ { expires: kTenYearsFromNow });
+ const cookie = await cookieStore.get('cookie-name');
+ assert_equals(cookie.name, 'cookie-name');
+ assert_equals(cookie.value, 'cookie-value');
+ assert_equals(cookie.domain, null);
+ assert_equals(cookie.path, '/');
+ assert_approx_equals(cookie.expires, kTenYearsFromNow, kOneDay);
+ assert_equals(cookie.secure, true);
+ assert_equals(cookie.sameSite, 'strict');
+ assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys);
+
+ await async_cleanup(() => cookieStore.delete('cookie-name'));
+}, 'CookieListItem - cookieStore.set with expires set to a timestamp 10 ' +
+ 'years in the future');
+
+promise_test(async testCase => {
+ await cookieStore.delete('cookie-name');
+
+ await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
+ expires: kTenYearsFromNow });
+ const cookie = await cookieStore.get('cookie-name');
+ assert_equals(cookie.name, 'cookie-name');
+ assert_equals(cookie.value, 'cookie-value');
+ assert_equals(cookie.domain, null);
+ assert_equals(cookie.path, '/');
+ assert_approx_equals(cookie.expires, kTenYearsFromNow, kOneDay);
+ assert_equals(cookie.secure, true);
+ assert_equals(cookie.sameSite, 'strict');
+ assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys);
+
+ await async_cleanup(() => cookieStore.delete('cookie-name'));
+}, 'CookieListItem - cookieStore.set with name and value in options and ' +
+ 'expires set to a future timestamp');
+
+promise_test(async testCase => {
+ await cookieStore.delete('cookie-name');
+
+ await cookieStore.set('cookie-name', 'cookie-value',
+ { expires: new Date(kTenYearsFromNow) });
+ const cookie = await cookieStore.get('cookie-name');
+ assert_equals(cookie.name, 'cookie-name');
+ assert_equals(cookie.value, 'cookie-value');
+ assert_equals(cookie.domain, null);
+ assert_equals(cookie.path, '/');
+ assert_approx_equals(cookie.expires, kTenYearsFromNow, kOneDay);
+ assert_equals(cookie.secure, true);
+
+ await async_cleanup(() => cookieStore.delete('cookie-name'));
+}, 'CookieListItem - cookieStore.set with expires set to a Date 10 ' +
+ 'years in the future');
+
+promise_test(async testCase => {
+ await cookieStore.delete('cookie-name');
+
+ await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
+ expires: new Date(kTenYearsFromNow) });
+ const cookie = await cookieStore.get('cookie-name');
+ assert_equals(cookie.name, 'cookie-name');
+ assert_equals(cookie.value, 'cookie-value');
+ assert_equals(cookie.domain, null);
+ assert_equals(cookie.path, '/');
+ assert_approx_equals(cookie.expires, kTenYearsFromNow, kOneDay);
+ assert_equals(cookie.secure, true);
+ assert_equals(cookie.sameSite, 'strict');
+ assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys);
+
+ await async_cleanup(() => cookieStore.delete('cookie-name'));
+}, 'CookieListItem - cookieStore.set with name and value in options and ' +
+ 'expires set to a future Date');
+
+promise_test(async testCase => {
+ await cookieStore.delete('cookie-name', { domain: kCurrentHostname });
+
+ await cookieStore.set('cookie-name', 'cookie-value',
+ { domain: kCurrentHostname });
+ const cookie = await cookieStore.get('cookie-name');
+ assert_equals(cookie.name, 'cookie-name');
+ assert_equals(cookie.value, 'cookie-value');
+ assert_equals(cookie.domain, kCurrentHostname);
+ assert_equals(cookie.path, '/');
+ assert_equals(cookie.expires, null);
+ assert_equals(cookie.secure, true);
+ assert_equals(cookie.sameSite, 'strict');
+ assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys);
+
+ await async_cleanup(async () => {
+ await cookieStore.delete('cookie-name', { domain: kCurrentHostname });
+ });
+}, 'CookieListItem - cookieStore.set with domain set to the current hostname');
+
+promise_test(async testCase => {
+ const currentUrl = new URL(self.location.href);
+ const currentPath = currentUrl.pathname;
+ const currentDirectory =
+ currentPath.substr(0, currentPath.lastIndexOf('/') + 1);
+ await cookieStore.delete('cookie-name', { path: currentDirectory });
+
+ await cookieStore.set('cookie-name', 'cookie-value',
+ { path: currentDirectory });
+ const cookie = await cookieStore.get('cookie-name');
+ assert_equals(cookie.name, 'cookie-name');
+ assert_equals(cookie.value, 'cookie-value');
+ assert_equals(cookie.domain, null);
+ assert_equals(cookie.path, currentDirectory);
+ assert_equals(cookie.expires, null);
+ assert_equals(cookie.secure, true);
+ assert_equals(cookie.sameSite, 'strict');
+ assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys);
+
+ await async_cleanup(async () => {
+ await cookieStore.delete('cookie-name', { path: currentDirectory });
+ });
+}, 'CookieListItem - cookieStore.set with path set to the current directory');
+
+promise_test(async testCase => {
+ await cookieStore.delete('cookie-name', { secure: false });
+
+ await cookieStore.set('cookie-name', 'cookie-value', { secure: false });
+ const cookie = await cookieStore.get('cookie-name');
+ assert_equals(cookie.name, 'cookie-name');
+ assert_equals(cookie.value, 'cookie-value');
+ assert_equals(cookie.domain, null);
+ assert_equals(cookie.path, '/');
+ assert_equals(cookie.expires, null);
+ assert_equals(cookie.secure, false);
+ assert_equals(cookie.sameSite, 'strict');
+ assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys);
+
+ await async_cleanup(async () => {
+ await cookieStore.delete('cookie-name', { secure: false });
+ });
+}, 'CookieListItem - cookieStore.set with secure set to false');
+
+['strict', 'lax', 'unrestricted'].forEach(sameSiteValue => {
+ promise_test(async testCase => {
+ await cookieStore.delete('cookie-name', { sameSite: sameSiteValue });
+
+ await cookieStore.set({
+ name: 'cookie-name', value: 'cookie-value', sameSite: sameSiteValue });
+ const cookie = await cookieStore.get('cookie-name');
+ assert_equals(cookie.name, 'cookie-name');
+ assert_equals(cookie.value, 'cookie-value');
+ assert_equals(cookie.domain, null);
+ assert_equals(cookie.path, '/');
+ assert_equals(cookie.expires, null);
+ assert_equals(cookie.secure, true);
+ assert_equals(cookie.sameSite, sameSiteValue);
+ assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys);
+
+ await async_cleanup(async () => {
+ await cookieStore.delete('cookie-name', { secure: sameSiteValue });
+ });
+ }, `CookieListItem - cookieStore.set with sameSite set to ${sameSiteValue}`);
+
+ promise_test(async testCase => {
+ await cookieStore.delete('cookie-name', { sameSite: sameSiteValue });
+
+ await cookieStore.set('cookie-name', 'cookie-value',
+ { sameSite: sameSiteValue });
+ const cookie = await cookieStore.get('cookie-name');
+ assert_equals(cookie.name, 'cookie-name');
+ assert_equals(cookie.value, 'cookie-value');
+ assert_equals(cookie.domain, null);
+ assert_equals(cookie.path, '/');
+ assert_equals(cookie.expires, null);
+ assert_equals(cookie.secure, true);
+ assert_equals(cookie.sameSite, sameSiteValue);
+ assert_array_equals(Object.keys(cookie).sort(), kCookieListItemKeys);
+
+ await async_cleanup(async () => {
+ await cookieStore.delete('cookie-name', { secure: sameSiteValue });
+ });
+ }, 'CookieListItem - cookieStore.set with positional name and value and ' +
+ `sameSite set to ${sameSiteValue}`);
+});
diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieListItem_attributes.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieListItem_attributes.tentative.window.js
deleted file mode 100644
index 4b4b211b44d..00000000000
--- a/tests/wpt/web-platform-tests/cookie-store/cookieListItem_attributes.tentative.window.js
+++ /dev/null
@@ -1,121 +0,0 @@
-'use strict';
-
-// Workaround because add_cleanup doesn't support async functions yet.
-// See https://github.com/web-platform-tests/wpt/issues/6075
-async function async_cleanup(cleanup_function) {
- try {
- await cleanup_function();
- } catch (e) {
- // Errors in cleanup functions shouldn't result in test failures.
- }
-}
-
-const kCurrentHostname = (new URL(self.location.href)).hostname;
-const kIsSecureTransport = (new URL(self.location.href)).protocol === 'https:';
-
-const kOneDay = 24 * 60 * 60 * 1000;
-const kTenYears = 10 * 365 * kOneDay;
-const kTenYearsFromNow = Date.now() + kTenYears;
-
-promise_test(async testCase => {
- await cookieStore.delete('cookie-name');
-
- await cookieStore.set('cookie-name', 'cookie-value');
-
- const cookie = await cookieStore.get('cookie-name');
- assert_equals(cookie.name, 'cookie-name');
- assert_equals(cookie.value, 'cookie-value');
- assert_equals(cookie.domain, null);
- assert_equals(cookie.path, '/');
- assert_equals(cookie.expires, null);
- assert_equals(cookie.secure, kIsSecureTransport);
-
- await async_cleanup(() => cookieStore.delete('cookie-name'));
-}, 'cookieStore.set defaults with positional name and value');
-
-promise_test(async testCase => {
- await cookieStore.delete('cookie-name');
-
- await cookieStore.set({ name: 'cookie-name', value: 'cookie-value' });
- const cookie = await cookieStore.get('cookie-name');
- assert_equals(cookie.name, 'cookie-name');
- assert_equals(cookie.value, 'cookie-value');
- assert_equals(cookie.domain, null);
- assert_equals(cookie.path, '/');
- assert_equals(cookie.expires, null);
- assert_equals(cookie.secure, kIsSecureTransport);
-
- await async_cleanup(() => cookieStore.delete('cookie-name'));
-}, 'cookieStore.set defaults with name and value in options');
-
-promise_test(async testCase => {
- await cookieStore.delete('cookie-name');
-
- await cookieStore.set('cookie-name', 'cookie-value',
- { expires: kTenYearsFromNow });
- const cookie = await cookieStore.get('cookie-name');
- assert_equals(cookie.name, 'cookie-name');
- assert_equals(cookie.value, 'cookie-value');
- assert_equals(cookie.domain, null);
- assert_equals(cookie.path, '/');
- assert_approx_equals(cookie.expires, kTenYearsFromNow, kOneDay);
- assert_equals(cookie.secure, kIsSecureTransport);
-
- await async_cleanup(() => cookieStore.delete('cookie-name'));
-}, 'cookieStore.set with expires set to 10 years in the future');
-
-promise_test(async testCase => {
- await cookieStore.delete('cookie-name');
-
- await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
- expires: kTenYearsFromNow });
- const cookie = await cookieStore.get('cookie-name');
- assert_equals(cookie.name, 'cookie-name');
- assert_equals(cookie.value, 'cookie-value');
- assert_equals(cookie.domain, null);
- assert_equals(cookie.path, '/');
- assert_approx_equals(cookie.expires, kTenYearsFromNow, kOneDay);
- assert_equals(cookie.secure, kIsSecureTransport);
-
- await async_cleanup(() => cookieStore.delete('cookie-name'));
-}, 'cookieStore.set with name and value in options and expires in the future');
-
-promise_test(async testCase => {
- await cookieStore.delete('cookie-name', { domain: kCurrentHostname });
-
- await cookieStore.set('cookie-name', 'cookie-value',
- { domain: kCurrentHostname });
- const cookie = await cookieStore.get('cookie-name');
- assert_equals(cookie.name, 'cookie-name');
- assert_equals(cookie.value, 'cookie-value');
- assert_equals(cookie.domain, kCurrentHostname);
- assert_equals(cookie.path, '/');
- assert_equals(cookie.expires, null);
- assert_equals(cookie.secure, kIsSecureTransport);
-
- await async_cleanup(async () => {
- await cookieStore.delete('cookie-name', { domain: kCurrentHostname });
- });
-}, 'cookieStore.set with domain set to the current hostname');
-
-promise_test(async testCase => {
- const currentUrl = new URL(self.location.href);
- const currentPath = currentUrl.pathname;
- const currentDirectory =
- currentPath.substr(0, currentPath.lastIndexOf('/') + 1);
- await cookieStore.delete('cookie-name', { path: currentDirectory });
-
- await cookieStore.set('cookie-name', 'cookie-value',
- { path: currentDirectory });
- const cookie = await cookieStore.get('cookie-name');
- assert_equals(cookie.name, 'cookie-name');
- assert_equals(cookie.value, 'cookie-value');
- assert_equals(cookie.domain, null);
- assert_equals(cookie.path, currentDirectory);
- assert_equals(cookie.expires, null);
- assert_equals(cookie.secure, kIsSecureTransport);
-
- await async_cleanup(async () => {
- await cookieStore.delete('cookie-name', { path: currentDirectory });
- });
-}, 'cookieStore.set with path set to the current directory');
diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_delete_arguments.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_delete_arguments.tentative.https.window.js
index 9b10204437c..9b10204437c 100644
--- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_delete_arguments.tentative.window.js
+++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_delete_arguments.tentative.https.window.js
diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_delete_basic.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_delete_basic.tentative.https.window.js
index 8a3f7ed66da..8a3f7ed66da 100644
--- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_delete_basic.tentative.window.js
+++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_delete_basic.tentative.https.window.js
diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_arguments.tenative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_arguments.tenative.https.window.js
index bcb698eeb0d..bcb698eeb0d 100644
--- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_arguments.tenative.window.js
+++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_arguments.tenative.https.window.js
diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_basic.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_basic.tentative.https.window.js
index 7f6d2d919d4..7f6d2d919d4 100644
--- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_basic.tentative.window.js
+++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_basic.tentative.https.window.js
diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_delete.tenative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_delete.tenative.https.window.js
index f84b2e06745..f84b2e06745 100644
--- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_delete.tenative.window.js
+++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_delete.tenative.https.window.js
diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_overwrite.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_overwrite.tentative.https.window.js
index 2a5cb5d064f..2a5cb5d064f 100644
--- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_overwrite.tentative.window.js
+++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_event_overwrite.tentative.https.window.js
diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_arguments.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_arguments.tentative.https.window.js
index 4519a1eabda..ef7611d78c8 100644
--- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_arguments.tentative.window.js
+++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_arguments.tentative.https.window.js
@@ -84,14 +84,14 @@ promise_test(async testCase => {
await cookieStore.set('cookie-name-2', 'cookie-value-2');
const cookies = await cookieStore.getAll(
- 'cookie-name-', { matchType: 'startsWith' });
+ 'cookie-name-', { matchType: 'starts-with' });
assert_equals(cookies.length, 1);
assert_equals(cookies[0].name, 'cookie-name-2');
assert_equals(cookies[0].value, 'cookie-value-2');
await async_cleanup(() => cookieStore.delete('cookie-name'));
await async_cleanup(() => cookieStore.delete('cookie-name-2'));
-}, 'cookieStore.getAll with matchType set to startsWith');
+}, 'cookieStore.getAll with matchType set to starts-with');
promise_test(async testCase => {
await cookieStore.set('cookie-name', 'cookie-value');
@@ -109,11 +109,11 @@ promise_test(async testCase => {
await cookieStore.set('cookie-name-2', 'cookie-value-2');
const cookies = await cookieStore.getAll(
- { matchType: 'startsWith', name: 'cookie-name-' });
+ { matchType: 'starts-with', name: 'cookie-name-' });
assert_equals(cookies.length, 1);
assert_equals(cookies[0].name, 'cookie-name-2');
assert_equals(cookies[0].value, 'cookie-value-2');
await async_cleanup(() => cookieStore.delete('cookie-name'));
await async_cleanup(() => cookieStore.delete('cookie-name-2'));
-}, 'cookieStore.getAll with matchType set to startsWith and name in options');
+}, 'cookieStore.getAll with matchType set to starts-with and name in options');
diff --git a/tests/wpt/web-platform-tests/cookie-store/document_getAll_multiple.tentative.html b/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_multiple.tentative.https.window.js
index 82fd2e6358d..78b3c56fdd3 100644
--- a/tests/wpt/web-platform-tests/cookie-store/document_getAll_multiple.tentative.html
+++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_multiple.tentative.https.window.js
@@ -1,11 +1,3 @@
-<!doctype html>
-<meta charset="utf-8">
-<title>Async Cookies: cookieStore.getAll() sees cookieStore.set() cookie</title>
-<link rel="help" href="https://github.com/WICG/cookie-store">
-<link rel="author" href="pwnall@chromium.org" title="Victor Costan">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script>
'use strict';
// Workaround because add_cleanup doesn't support async functions yet.
@@ -37,5 +29,3 @@ promise_test(async testCase => {
await async_cleanup(() => cookieStore.delete('cookie-name-2'));
await async_cleanup(() => cookieStore.delete('cookie-name-3'));
}, 'cookieStore.getAll returns multiple cookies written by cookieStore.set');
-
-</script>
diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_set_basic.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_set_basic.tentative.https.window.js
index aa0a4ea9a03..aa0a4ea9a03 100644
--- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_set_basic.tentative.window.js
+++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_getAll_set_basic.tentative.https.window.js
diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.https.window.js
index 66d815f3053..ddc73bec890 100644
--- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.window.js
+++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.https.window.js
@@ -58,12 +58,12 @@ promise_test(async testCase => {
await cookieStore.set('cookie-name', 'cookie-value');
const cookie = await cookieStore.get(
- 'cookie-na', { matchType: 'startsWith' });
+ 'cookie-na', { matchType: 'starts-with' });
assert_equals(cookie.name, 'cookie-name');
assert_equals(cookie.value, 'cookie-value');
async_cleanup(() => cookieStore.delete('cookie-name'));
-}, 'cookieStore.get with matchType set to startsWith');
+}, 'cookieStore.get with matchType set to starts-with');
promise_test(async testCase => {
await cookieStore.set('cookie-name', 'cookie-value');
@@ -78,9 +78,9 @@ promise_test(async testCase => {
await cookieStore.set('cookie-name', 'cookie-value');
const cookie = await cookieStore.get(
- { matchType: 'startsWith', name: 'cookie-na' });
+ { matchType: 'starts-with', name: 'cookie-na' });
assert_equals(cookie.name, 'cookie-name');
assert_equals(cookie.value, 'cookie-value');
async_cleanup(() => cookieStore.delete('cookie-name'));
-}, 'cookieStore.get with matchType set to startsWith and name in options');
+}, 'cookieStore.get with matchType set to starts-with and name in options');
diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_delete_basic.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_delete_basic.tentative.https.window.js
index fc9645d3e2e..fc9645d3e2e 100644
--- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_delete_basic.tentative.window.js
+++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_delete_basic.tentative.https.window.js
diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_set_basic.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_set_basic.tentative.https.window.js
index 2a082de9d30..2a082de9d30 100644
--- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_set_basic.tentative.window.js
+++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_set_basic.tentative.https.window.js
diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_has_arguments.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_has_arguments.tentative.window.js
deleted file mode 100644
index c013b720094..00000000000
--- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_has_arguments.tentative.window.js
+++ /dev/null
@@ -1,92 +0,0 @@
-'use strict';
-
-// Workaround because add_cleanup doesn't support async functions yet.
-// See https://github.com/web-platform-tests/wpt/issues/6075
-async function async_cleanup(cleanup_function) {
- try {
- await cleanup_function();
- } catch (e) {
- // Errors in cleanup functions shouldn't result in test failures.
- }
-}
-
-promise_test(async testCase => {
- await cookieStore.set('cookie-name', 'cookie-value');
- await cookieStore.delete('cookie-name-2');
-
- const has_cookie = await cookieStore.has('cookie-name');
- assert_equals(has_cookie, true);
- const has_cookie2 = await cookieStore.has('cookie-name-2');
- assert_equals(has_cookie2, false);
-
- await async_cleanup(() => cookieStore.delete('cookie-name'));
-}, 'cookieStore.has with positional name');
-
-promise_test(async testCase => {
- await cookieStore.set('cookie-name', 'cookie-value');
- await cookieStore.delete('cookie-name-2');
-
- const has_cookie = await cookieStore.has({ name: 'cookie-name' });
- assert_equals(has_cookie, true);
- const has_cookie2 = await cookieStore.has({ name: 'cookie-name-2' });
- assert_equals(has_cookie2, false);
-
- await async_cleanup(() => cookieStore.delete('cookie-name'));
-}, 'cookieStore.has with name in options');
-
-promise_test(async testCase => {
- await cookieStore.set('cookie-name', 'cookie-value');
-
- await promise_rejects(testCase, new TypeError(), cookieStore.has(
- 'cookie-name', { name: 'cookie-name' }));
-
- await async_cleanup(() => cookieStore.delete('cookie-name'));
-}, 'cookieStore.has with name in both positional arguments and options');
-
-promise_test(async testCase => {
- await cookieStore.set('cookie-name', 'cookie-value');
-
- const has_cookie = await cookieStore.has(
- 'cookie-na', { matchType: 'equals' });
- assert_equals(has_cookie, false);
- const has_cookie2 = await cookieStore.has(
- 'cookie-name', { matchType: 'equals' });
- assert_equals(has_cookie2, true);
-
- await async_cleanup(() => cookieStore.delete('cookie-name'));
-}, 'cookieStore.has with matchType explicitly set to equals');
-
-promise_test(async testCase => {
- await cookieStore.set('cookie-name', 'cookie-value');
-
- const has_cookie = await cookieStore.has(
- 'cookie-na', { matchType: 'startsWith' });
- assert_equals(has_cookie, true);
- const has_cookie2 = await cookieStore.has(
- 'cookie-name-', { matchType: 'startsWith' });
- assert_equals(has_cookie2, false);
-
- await async_cleanup(() => cookieStore.delete('cookie-name'));
-}, 'cookieStore.has with matchType set to startsWith');
-
-promise_test(async testCase => {
- await cookieStore.set('cookie-name', 'cookie-value');
-
- await promise_rejects(testCase, new TypeError(), cookieStore.has(
- 'cookie-name', { matchType: 'invalid' }));
-
- await async_cleanup(() => cookieStore.delete('cookie-name'));
-}, 'cookieStore.has with invalid matchType');
-
-promise_test(async testCase => {
- await cookieStore.set('cookie-name', 'cookie-value');
-
- const has_cookie = await cookieStore.has(
- { matchType: 'startsWith', name: 'cookie-na' });
- assert_equals(has_cookie, true);
- const has_cookie2 = await cookieStore.has(
- { matchType: 'startsWith', name: 'cookie-name-' });
- assert_equals(has_cookie2, false);
-
- await async_cleanup(() => cookieStore.delete('cookie-name'));
-}, 'cookieStore.has with matchType set to startsWith and name in options');
diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_has_basic.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_has_basic.tentative.window.js
deleted file mode 100644
index 0bef0b18dbc..00000000000
--- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_has_basic.tentative.window.js
+++ /dev/null
@@ -1,25 +0,0 @@
-'use strict';
-
-// Workaround because add_cleanup doesn't support async functions yet.
-// See https://github.com/web-platform-tests/wpt/issues/6075
-async function async_cleanup(cleanup_function) {
- try {
- await cleanup_function();
- } catch (e) {
- // Errors in cleanup functions shouldn't result in test failures.
- }
-}
-
-promise_test(async testCase => {
- await cookieStore.set('cookie-name', 'cookie-value');
- assert_equals(await cookieStore.has('cookie-name'), true);
-
- await async_cleanup(() => cookieStore.delete('cookie-name'));
-}, 'cookieStore.has returns true for cookie set by cookieStore.set()');
-
-promise_test(async testCase => {
- await cookieStore.delete('cookie-name');
- assert_equals(await cookieStore.has('cookie-name'), false);
-
- await async_cleanup(() => cookieStore.delete('cookie-name'));
-}, 'cookieStore.has returns false for cookie deleted by cookieStore.delete()');
diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_in_detached_frame.tentative.html b/tests/wpt/web-platform-tests/cookie-store/cookieStore_in_detached_frame.tentative.https.html
index 08a7b5b8e46..08a7b5b8e46 100644
--- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_in_detached_frame.tentative.html
+++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_in_detached_frame.tentative.https.html
diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_set_arguments.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_set_arguments.tentative.https.window.js
index c35e8deb117..7f4982ed7c9 100644
--- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_set_arguments.tentative.window.js
+++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_set_arguments.tentative.https.window.js
@@ -67,7 +67,7 @@ promise_test(async testCase => {
assert_equals(cookie.value, 'cookie-value');
await async_cleanup(() => cookieStore.delete('cookie-name'));
-}, 'cookieStore.set with expires in the future');
+}, 'cookieStore.set with expires set to a future timestamp');
promise_test(async testCase => {
const tenYears = 10 * 365 * 24 * 60 * 60 * 1000;
@@ -80,7 +80,34 @@ promise_test(async testCase => {
assert_equals(cookie, null);
await async_cleanup(() => cookieStore.delete('cookie-name'));
-}, 'cookieStore.set with expires in the past');
+}, 'cookieStore.set with expires set to a past timestamp');
+
+promise_test(async testCase => {
+ const tenYears = 10 * 365 * 24 * 60 * 60 * 1000;
+ const tenYearsFromNow = Date.now() + tenYears;
+ await cookieStore.delete('cookie-name');
+
+ await cookieStore.set(
+ 'cookie-name', 'cookie-value', { expires: new Date(tenYearsFromNow) });
+ const cookie = await cookieStore.get('cookie-name');
+ assert_equals(cookie.name, 'cookie-name');
+ assert_equals(cookie.value, 'cookie-value');
+
+ await async_cleanup(() => cookieStore.delete('cookie-name'));
+}, 'cookieStore.set with expires set to a future Date');
+
+promise_test(async testCase => {
+ const tenYears = 10 * 365 * 24 * 60 * 60 * 1000;
+ const tenYearsAgo = Date.now() - tenYears;
+ await cookieStore.delete('cookie-name');
+
+ await cookieStore.set(
+ 'cookie-name', 'cookie-value', { expires: new Date(tenYearsAgo) });
+ const cookie = await cookieStore.get('cookie-name');
+ assert_equals(cookie, null);
+
+ await async_cleanup(() => cookieStore.delete('cookie-name'));
+}, 'cookieStore.set with expires set to a past Date');
promise_test(async testCase => {
const tenYears = 10 * 365 * 24 * 60 * 60 * 1000;
diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_set_expires_option.tentative.window.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_set_expires_option.tentative.window.js
deleted file mode 100644
index 6f3e6f4980e..00000000000
--- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_set_expires_option.tentative.window.js
+++ /dev/null
@@ -1,59 +0,0 @@
-'use strict';
-
-// Workaround because add_cleanup doesn't support async functions yet.
-// See https://github.com/web-platform-tests/wpt/issues/6075
-async function async_cleanup(cleanup_function) {
- try {
- await cleanup_function();
- } catch (e) {
- // Errors in cleanup functions shouldn't result in test failures.
- }
-}
-
-promise_test(async testCase => {
- const inTwentyFourHours = new Date(Date.now() + 24 * 60 * 60 * 1000);
-
- assert_equals(
- await cookieStore.set(
- 'cookie-name', 'cookie-value', { expires: inTwentyFourHours }),
- undefined);
-
- const cookie = await cookieStore.get('cookie-name');
- assert_equals(cookie.name, 'cookie-name');
- assert_equals(cookie.value, 'cookie-value');
-
- await async_cleanup(() => cookieStore.delete('cookie-name'));
-}, 'cookieStore.set with expires option: Date object');
-
-promise_test(async testCase => {
- const inTwentyFourHours = Date.now() + 24 * 60 * 60 * 1000;
-
- assert_equals(
- await cookieStore.set(
- 'cookie-name', 'cookie-value', { expires: inTwentyFourHours }),
- undefined);
-
- const cookie = await cookieStore.get('cookie-name');
- assert_equals(cookie.name, 'cookie-name');
- assert_equals(cookie.value, 'cookie-value');
-
- await async_cleanup(() => cookieStore.delete('cookie-name'));
-}, 'cookieStore.set with expires option: milliseconds since epoch object');
-
-promise_test(async testCase => {
- const year = (new Date()).getUTCFullYear() + 1;
- const date = new Date('07 Jun ' + year + ' 07:07:07 UTC');
- const day = ('Sun Mon Tue Wed Thu Fri Sat'.split(' '))[date.getUTCDay()];
- const nextJune = `${day}, 07 Jun ${year} + ' 07:07:07 GMT`;
-
- assert_equals(
- await cookieStore.set(
- 'cookie-name', 'cookie-value', { expires: nextJune }),
- undefined);
-
- const cookie = await cookieStore.get('cookie-name');
- assert_equals(cookie.name, 'cookie-name');
- assert_equals(cookie.value, 'cookie-value');
-
- await async_cleanup(() => cookieStore.delete('cookie-name'));
-}, 'cookieStore.set with expires option: HTTP date string');
diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_special_names.tentative.html b/tests/wpt/web-platform-tests/cookie-store/cookieStore_special_names.tentative.html
deleted file mode 100644
index 9859e100521..00000000000
--- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_special_names.tentative.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<!doctype html>
-<meta charset="utf-8">
-<title>Cookie Store: cookieStore handles special cookie names correctly</title>
-<link rel="help" href="https://github.com/WICG/cookie-store">
-<link rel="author" href="pwnall@chromium.org" title="Victor Costan">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script>
-'use strict';
-
-['__Secure-', '__Host-'].forEach(prefix => {
- promise_test(async testCase => {
- await promise_rejects(
- testCase, new TypeError(),
- cookieStore.set(`${prefix}cookie-name`, `secure-cookie-value`),
- `Setting ${prefix} cookies should fail in non-secure contexts`);
-
- try { await cookieStore.delete(`${prefix}cookie-name`); } catch (e) {}
- }, `cookieStore.set with ${prefix} name on non-secure origin`);
-
- promise_test(async testCase => {
- await promise_rejects(
- testCase, new TypeError(),
- cookieStore.set(
- `${prefix}cookie-name`, `secure-cookie-value`, {
- expires: Date.now() - (24 * 60 * 60 * 1000)
- }),
- `Setting expired ${prefix} cookies should fail in non-secure contexts`);
-
- try { await cookieStore.delete(`${prefix}cookie-name`); } catch (e) {}
- }, `cookieStore.set of expired ${prefix} cookie on non-secure origin`);
-
- promise_test(async testCase => {
- assert_equals(
- await cookieStore.get(`${prefix}cookie-name`),
- null,
- 'get with ${prefix} prefix should not reject');
- assert_equals(
- await cookieStore.get({name: `${prefix}cookie-name`}),
- null,
- 'get with ${prefix} prefix name option should not reject');
- assert_equals(
- await cookieStore.get({name: prefix, matchType: 'startsWith'}),
- null,
- 'get with ${prefix} name and startsWith options should not reject');
- }, `cookieStore.get with ${prefix} name on non-secure origin`);
-
- promise_test(async testCase => {
- assert_array_equals(
- await cookieStore.getAll(`${prefix}cookie-name`),
- [],
- 'getAll with ${prefix} prefix should not reject');
- assert_array_equals(
- await cookieStore.getAll({name: `${prefix}cookie-name`}),
- [],
- 'getAll with ${prefix} prefix name option should not reject');
- assert_array_equals(
- await cookieStore.getAll({name: prefix, matchType: 'startsWith'}),
- [],
- 'getAll with ${prefix} name and startsWith options should not reject');
- }, `cookieStore.getAll with ${prefix} name on non-secure origin`);
-
- promise_test(async testCase => {
- await promise_rejects(
- testCase, new TypeError(),
- cookieStore.delete(`${prefix}cookie-name`, `host-cookie-value`),
- `Deleting ${prefix} cookies should fail in non-secure contexts`);
- }, `cookieStore.delete with ${prefix} name on non-secure origin`);
-});
-
-</script>
diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_special_names.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/cookieStore_special_names.tentative.https.window.js
index 0d1be12fa18..c82883a6069 100644
--- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_special_names.tentative.https.html
+++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_special_names.tentative.https.window.js
@@ -1,11 +1,3 @@
-<!doctype html>
-<meta charset="utf-8">
-<title>Cookie Store: cookieStore handles special cookie names correctly (secure context)</title>
-<link rel="help" href="https://github.com/WICG/cookie-store">
-<link rel="author" href="pwnall@chromium.org" title="Victor Costan">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script>
'use strict';
['__Secure-', '__Host-'].forEach(prefix => {
@@ -37,5 +29,3 @@
`Deleting ${prefix} cookies should not fail in secure context`);
}, `cookieStore.delete with ${prefix} name on secure origin`);
});
-
-</script>
diff --git a/tests/wpt/web-platform-tests/cookie-store/document_cookie.tentative.html b/tests/wpt/web-platform-tests/cookie-store/document_cookie.tentative.html
deleted file mode 100644
index f5528d2d96c..00000000000
--- a/tests/wpt/web-platform-tests/cookie-store/document_cookie.tentative.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>Async Cookies: document.cookie</title>
-<meta name="help" href="https://github.com/WICG/cookie-store/">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/cookie-test-helpers.js"></script>
-<script src="resources/document_cookie.js"></script>
diff --git a/tests/wpt/web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative.html b/tests/wpt/web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative.html
deleted file mode 100644
index 4370350a948..00000000000
--- a/tests/wpt/web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>Async Cookies: HTTP Cookie and Set-Cookie headers</title>
-<meta name="help" href="https://github.com/WICG/cookie-store/">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/cookie-test-helpers.js"></script>
-<script src="resources/http_cookie_and_set_cookie_headers.js"></script>
diff --git a/tests/wpt/web-platform-tests/cookie-store/httponly_cookies.window.js b/tests/wpt/web-platform-tests/cookie-store/httponly_cookies.https.window.js
index 01239aec58f..01239aec58f 100644
--- a/tests/wpt/web-platform-tests/cookie-store/httponly_cookies.window.js
+++ b/tests/wpt/web-platform-tests/cookie-store/httponly_cookies.https.window.js
diff --git a/tests/wpt/web-platform-tests/cookie-store/idlharness.tentative.html b/tests/wpt/web-platform-tests/cookie-store/idlharness.tentative.https.html
index b9cab343ffb..b9cab343ffb 100644
--- a/tests/wpt/web-platform-tests/cookie-store/idlharness.tentative.html
+++ b/tests/wpt/web-platform-tests/cookie-store/idlharness.tentative.https.html
diff --git a/tests/wpt/web-platform-tests/cookie-store/no_name_and_no_value.tentative.html b/tests/wpt/web-platform-tests/cookie-store/no_name_and_no_value.tentative.html
deleted file mode 100644
index 79923b5ae8c..00000000000
--- a/tests/wpt/web-platform-tests/cookie-store/no_name_and_no_value.tentative.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>Async Cookies: Test No Name and No Value</title>
-<meta name="help" href="https://github.com/WICG/cookie-store/">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/cookie-test-helpers.js"></script>
-<script src="resources/no_name_and_no_value.js"></script>
diff --git a/tests/wpt/web-platform-tests/cookie-store/no_name_equals_in_value.tentative.html b/tests/wpt/web-platform-tests/cookie-store/no_name_equals_in_value.tentative.html
deleted file mode 100644
index 17597038c08..00000000000
--- a/tests/wpt/web-platform-tests/cookie-store/no_name_equals_in_value.tentative.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>Async Cookies: Test No Name, '=' in Value</title>
-<meta name="help" href="https://github.com/WICG/cookie-store/">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/cookie-test-helpers.js"></script>
-<script src="resources/no_name_equals_in_value.js"></script>
diff --git a/tests/wpt/web-platform-tests/cookie-store/no_name_multiple_values.tentative.html b/tests/wpt/web-platform-tests/cookie-store/no_name_multiple_values.tentative.html
deleted file mode 100644
index 755d1066799..00000000000
--- a/tests/wpt/web-platform-tests/cookie-store/no_name_multiple_values.tentative.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>Async Cookies: Test No Name, Multiple Values</title>
-<meta name="help" href="https://github.com/WICG/cookie-store/">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/cookie-test-helpers.js"></script>
-<script src="resources/no_name_multiple_values.js"></script>
diff --git a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_arguments.js b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_arguments.js
index 0ffe6f8b0b0..7e19c985139 100644
--- a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_arguments.js
+++ b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_arguments.js
@@ -5,10 +5,12 @@ self.GLOBAL = {
importScripts("/resources/testharness.js");
importScripts(
- "cookieStore_delete_arguments.tentative.window.js",
- "cookieStore_get_arguments.tentative.window.js",
- "cookieStore_getAll_arguments.tentative.window.js",
- "cookieStore_has_arguments.tentative.window.js",
- "cookieStore_set_arguments.tentative.window.js");
+ "cookieListItem_attributes.tentative.https.window.js",
+ "cookieStore_delete_arguments.tentative.https.window.js",
+ "cookieStore_get_arguments.tentative.https.window.js",
+ "cookieStore_getAll_arguments.tentative.https.window.js",
+ "cookieStore_getAll_multiple.tentative.https.window.js",
+ "cookieStore_set_arguments.tentative.https.window.js",
+ "cookieStore_special_names.tentative.https.window.js");
done();
diff --git a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_basic.js b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_basic.js
index 0d8039f9d33..7461ef5f98d 100644
--- a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_basic.js
+++ b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_basic.js
@@ -5,9 +5,9 @@ self.GLOBAL = {
importScripts("/resources/testharness.js");
importScripts(
- "cookieStore_get_delete_basic.tentative.window.js",
- "cookieStore_get_set_basic.tentative.window.js",
- "cookieStore_getAll_set_basic.tentative.window.js",
- "cookieStore_has_basic.tentative.window.js");
+ "cookieStore_delete_basic.tentative.https.window.js",
+ "cookieStore_get_delete_basic.tentative.https.window.js",
+ "cookieStore_get_set_basic.tentative.https.window.js",
+ "cookieStore_getAll_set_basic.tentative.https.window.js");
done();
diff --git a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions.js b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions.js
index a2affed5eac..93566cd2443 100644
--- a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions.js
+++ b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions.js
@@ -13,7 +13,7 @@ self.addEventListener('install', (event) => {
{ name: 'cookie-name1', matchType: 'equals', url: '/scope/path1' }]);
await cookieStore.subscribeToChanges([
{ }, // Test the default values for subscription properties.
- { name: 'cookie-prefix', matchType: 'startsWith' },
+ { name: 'cookie-prefix', matchType: 'starts-with' },
]);
})());
});
@@ -54,10 +54,10 @@ promise_test(async testCase => {
assert_equals('equals', subscriptions[0].matchType);
assert_equals(subscriptions[1].name, 'cookie-prefix');
- assert_equals('startsWith', subscriptions[1].matchType);
+ assert_equals('starts-with', subscriptions[1].matchType);
assert_false('name' in subscriptions[2]);
- assert_equals('startsWith', subscriptions[2].matchType);
+ assert_equals('starts-with', subscriptions[2].matchType);
}, 'getChangeSubscriptions returns subscriptions passed to subscribeToChanges');
promise_test(async testCase => {
diff --git a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_basic.js b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_basic.js
index 2b602f4c5f0..ef4ddfbd60c 100644
--- a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_basic.js
+++ b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_basic.js
@@ -40,7 +40,7 @@ promise_test(async testCase => {
promise_test(async testCase => {
await kServiceWorkerActivatedPromise;
- cookie_change_received_promise = new Promise((resolve) => {
+ const cookie_change_received_promise = new Promise((resolve) => {
self.addEventListener('cookiechange', (event) => {
resolve(event);
});
diff --git a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_empty.js b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_empty.js
new file mode 100644
index 00000000000..0da734d63d1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_empty.js
@@ -0,0 +1,36 @@
+self.GLOBAL = {
+ isWindow: function() { return false; },
+ isWorker: function() { return true; },
+};
+importScripts("/resources/testharness.js");
+
+self.addEventListener('install', (event) => {
+ event.waitUntil((async () => {
+ cookieStore.subscribeToChanges([]);
+ })());
+});
+
+// Workaround because add_cleanup doesn't support async functions yet.
+// See https://github.com/w3c/web-platform-tests/issues/6075
+async function async_cleanup(cleanup_function) {
+ try {
+ await cleanup_function();
+ } catch (e) {
+ // Errors in cleanup functions shouldn't result in test failures.
+ }
+}
+
+// Resolves when the service worker receives the 'activate' event.
+const kServiceWorkerActivatedPromise = new Promise(resolve => {
+ self.addEventListener('activate', event => { resolve(); });
+});
+
+promise_test(async testCase => {
+ await kServiceWorkerActivatedPromise;
+
+ const subscriptions = await cookieStore.getChangeSubscriptions();
+ assert_equals(subscriptions.length, 0);
+
+}, 'getChangeSubscriptions returns an empty array when there are no subscriptions');
+
+done();
diff --git a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_empty.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_empty.tentative.https.html
new file mode 100644
index 00000000000..38690fe3c72
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_empty.tentative.https.html
@@ -0,0 +1,21 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>Async Cookies: ServiceWorker without cookie change subscriptions</title>
+<link rel="help" href="https://github.com/WICG/cookie-store">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+'use strict';
+
+(async () => {
+ const scope = 'scope';
+
+ let registration = await navigator.serviceWorker.getRegistration(scope);
+ if (registration)
+ await registration.unregister();
+ registration = await navigator.serviceWorker.register(
+ 'serviceworker_cookieStore_subscriptions_empty.js', {scope});
+
+ fetch_tests_from_worker(registration.installing);
+})();
+</script>
diff --git a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_mismatch.js b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_mismatch.js
new file mode 100644
index 00000000000..5e4ec4355f1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_mismatch.js
@@ -0,0 +1,53 @@
+self.GLOBAL = {
+ isWindow: function() { return false; },
+ isWorker: function() { return true; },
+};
+importScripts("/resources/testharness.js");
+
+self.addEventListener('install', (event) => {
+ event.waitUntil((async () => {
+ cookieStore.subscribeToChanges([
+ { name: 'cookie-name', matchType: 'equals', url: '/scope/path' }]);
+ })());
+});
+
+// Workaround because add_cleanup doesn't support async functions yet.
+// See https://github.com/w3c/web-platform-tests/issues/6075
+async function async_cleanup(cleanup_function) {
+ try {
+ await cleanup_function();
+ } catch (e) {
+ // Errors in cleanup functions shouldn't result in test failures.
+ }
+}
+
+// Resolves when the service worker receives the 'activate' event.
+const kServiceWorkerActivatedPromise = new Promise(resolve => {
+ self.addEventListener('activate', event => { resolve(); });
+});
+
+promise_test(async testCase => {
+ await kServiceWorkerActivatedPromise;
+
+ const cookie_change_received_promise = new Promise((resolve) => {
+ self.addEventListener('cookiechange', (event) => {
+ resolve(event);
+ });
+ });
+
+ await cookieStore.set('another-cookie-name', 'cookie-value');
+ await cookieStore.set('cookie-name', 'cookie-value');
+
+ const event = await cookie_change_received_promise;
+ assert_equals(event.type, 'cookiechange');
+ assert_equals(event.changed.length, 1);
+ assert_equals(event.changed[0].name, 'cookie-name');
+ assert_equals(event.changed[0].value, 'cookie-value');
+
+ await async_cleanup(() => {
+ cookieStore.delete('another-cookie-name');
+ cookieStore.delete('cookie-name');
+ });
+}, 'cookiechange not dispatched for change that does not match subscription');
+
+done();
diff --git a/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_mismatch.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_mismatch.tentative.https.html
new file mode 100644
index 00000000000..ea70a1efcd0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_mismatch.tentative.https.html
@@ -0,0 +1,21 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>Async Cookies: ServiceWorker cookiechange event filtering</title>
+<link rel="help" href="https://github.com/WICG/cookie-store">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+'use strict';
+
+(async () => {
+ const scope = 'scope';
+
+ let registration = await navigator.serviceWorker.getRegistration(scope);
+ if (registration)
+ await registration.unregister();
+ registration = await navigator.serviceWorker.register(
+ 'serviceworker_cookieStore_subscriptions_mismatch.js', {scope});
+
+ fetch_tests_from_worker(registration.installing);
+})();
+</script>
diff --git a/tests/wpt/web-platform-tests/cors/resources/cache-304.py b/tests/wpt/web-platform-tests/cors/resources/cache-304.py
new file mode 100644
index 00000000000..7acdfd69768
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cors/resources/cache-304.py
@@ -0,0 +1,10 @@
+def main(request, response):
+ match = request.headers.get("If-None-Match", None)
+ if match is not None and match == "mybestscript-v1":
+ response.status = (304, "YEP")
+ return ""
+ response.headers.set("Access-Control-Allow-Origin", "*")
+ response.headers.set("Cache-Control", "must-revalidate")
+ response.headers.set("ETag", "mybestscript-v1")
+ response.headers.set("Content-Type", "text/javascript")
+ return "function hep() { }"
diff --git a/tests/wpt/web-platform-tests/cors/script-304.html b/tests/wpt/web-platform-tests/cors/script-304.html
new file mode 100644
index 00000000000..e164ca6f41b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cors/script-304.html
@@ -0,0 +1,40 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/common/get-host-info.sub.js"></script>
+ <script src="/common/utils.js"></script>
+ </head>
+ <body>
+ <div id="testDiv"></div>
+ <script>
+
+const scriptURL = get_host_info().HTTP_REMOTE_ORIGIN + "/cors/resources/cache-304.py?" + token();
+
+function loadScript(test)
+{
+ const script = document.createElement("script");
+ script.crossOrigin = "anonymous";
+ script.src = scriptURL;
+ return new Promise((resolve, reject) => {
+ // Let's add a small timeout so that the script is fully loaded in memory cache before reloading it.
+ script.onload = test.step_timeout(resolve, 50);
+ script.onerror = reject;
+ testDiv.appendChild(script);
+ });
+}
+
+promise_test((test) => {
+ return loadScript(test);
+}, "Load a fresh cross-origin script");
+
+promise_test((test) => {
+ return loadScript(test);
+}, "Reload same cross-origin script from the memory cache after revalidation");
+
+</script>
+ </body>
+</html>
+
diff --git a/tests/wpt/web-platform-tests/credential-management/idl.https.html b/tests/wpt/web-platform-tests/credential-management/idl.https.html
deleted file mode 100644
index 8754b5a30b6..00000000000
--- a/tests/wpt/web-platform-tests/credential-management/idl.https.html
+++ /dev/null
@@ -1,103 +0,0 @@
-<!DOCTYPE html>
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<script src=/resources/WebIDLParser.js></script>
-<script src=/resources/idlharness.js></script>
-<script type="text/plain" id="untested">
- dictionary CredentialData {
- USVString id;
- };
-
- [Exposed=Window, SecureContext]
- interface Credential {
- readonly attribute USVString id;
- readonly attribute DOMString type;
- };
-
- [NoInterfaceObject, SecureContext]
- interface CredentialUserData {
- readonly attribute USVString name;
- readonly attribute USVString iconURL;
- };
-
- dictionary PasswordCredentialData : CredentialData {
- USVString name;
- USVString iconURL;
- required USVString password;
- };
-
- typedef (PasswordCredentialData or HTMLFormElement) PasswordCredentialInit;
-
- typedef (FormData or URLSearchParams) CredentialBodyType;
-
-
- dictionary FederatedCredentialInit : CredentialData {
- USVString name;
- USVString iconURL;
- required USVString provider;
- DOMString protocol;
- };
-
- dictionary CredentialCreationOptions {
- PasswordCredentialInit? password;
- FederatedCredentialInit? federated;
- };
-
- enum CredentialMediationRequirement {
- "silent",
- "optional",
- "required"
- };
-
- dictionary CredentialRequestOptions {
- boolean password = false;
- FederatedCredentialRequestOptions federated;
-
- CredentialMediationRequirement mediation = "optional";
- };
-
- dictionary FederatedCredentialRequestOptions {
- sequence<USVString> providers;
- sequence<DOMString> protocols;
- };
-
-</script>
-<script type="text/plain" id="tested">
- [Exposed=Window, SecureContext]
- interface CredentialsContainer {
- Promise<Credential> get(optional CredentialRequestOptions options);
- Promise<Credential> store(Credential credential);
- Promise<Credential?> create(optional CredentialCreationOptions options);
- Promise<void> preventSilentAccess();
- };
-
- [Constructor(PasswordCredentialData data),
- Constructor(HTMLFormElement form),
- Exposed=Window,
- SecureContext]
- interface PasswordCredential : Credential {
- readonly attribute DOMString password;
- };
- PasswordCredential implements CredentialUserData;
-
- [Constructor(FederatedCredentialInit data),
- Exposed=Window,
- SecureContext]
- interface FederatedCredential : Credential {
- readonly attribute USVString provider;
- readonly attribute DOMString? protocol;
- };
- FederatedCredential implements CredentialUserData;
-</script>
-<script>
- "use strict";
- var idl_array = new IdlArray();
- idl_array.add_untested_idls(document.querySelector('#untested').textContent);
- idl_array.add_idls(document.querySelector('#tested').textContent);
- idl_array.add_objects({
- CredentialsContainer: ['navigator.credentials'],
- PasswordCredential: ['new PasswordCredential({ id: "id", password: "pencil", iconURL: "https://example.com/", name: "name" })'],
- FederatedCredential: ['new FederatedCredential({ id: "id", provider: "https://example.com", iconURL: "https://example.com/", name: "name" })']
- });
- idl_array.test();
-</script>
diff --git a/tests/wpt/web-platform-tests/credential-management/idlharness.https.window.js b/tests/wpt/web-platform-tests/credential-management/idlharness.https.window.js
new file mode 100644
index 00000000000..15508b872ed
--- /dev/null
+++ b/tests/wpt/web-platform-tests/credential-management/idlharness.https.window.js
@@ -0,0 +1,35 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+// https://w3c.github.io/webappsec-credential-management/
+
+'use strict';
+
+promise_test(async () => {
+ const idl = await fetch('/interfaces/credential-management.idl').then(r => r.text());
+ const html = await fetch('/interfaces/html.idl').then(r => r.text());
+
+ var idl_array = new IdlArray();
+ idl_array.add_idls(idl);
+ idl_array.add_dependency_idls(html);
+ idl_array.add_objects({
+ CredentialsContainer: ['navigator.credentials'],
+ PasswordCredential: [
+ `new PasswordCredential({
+ id: "id",
+ password: "pencil",
+ iconURL: "https://example.com/",
+ name: "name"
+ })`
+ ],
+ FederatedCredential: [
+ `new FederatedCredential({
+ id: "id",
+ provider: "https://example.com",
+ iconURL: "https://example.com/",
+ name: "name"
+ })`
+ ]
+ });
+ idl_array.test();
+})
diff --git a/tests/wpt/web-platform-tests/css/CSS2/abspos/between-float-and-text.html b/tests/wpt/web-platform-tests/css/CSS2/abspos/between-float-and-text.html
new file mode 100644
index 00000000000..b4c933e8d80
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/CSS2/abspos/between-float-and-text.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<title>Auto-positioned abspos after text, before float</title>
+<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
+<link rel="help" href="https://www.w3.org/TR/CSS22/visudet.html#abs-non-replaced-width" title="10.3.7 Absolutely positioned, non-replaced elements">
+<link rel="match" href="../../reference/ref-filled-green-200px-square.html">
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div style="line-height:20px; margin-top:-20px;">
+ &nbsp;
+ <div style="position:absolute; width:200px; height:200px; background:green;"></div>
+ <div style="float:left; margin-top:20px; width:200px; height:200px; background:red;"></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/clear-invalid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/clear-invalid.html
new file mode 100644
index 00000000000..6c2980cc23e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/parsing/clear-invalid.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS basic box model: parsing clear with invalid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-clear">
+<meta name="assert" content="clear supports only the grammar 'none | left | right | both'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("clear", "auto");
+test_invalid_value("clear", "left right");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/clear-valid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/clear-valid.html
new file mode 100644
index 00000000000..59b68f1923b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/parsing/clear-valid.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS basic box model: parsing clear with valid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-clear">
+<meta name="assert" content="clear supports the full grammar 'none | left | right | both'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("clear", "none");
+test_valid_value("clear", "left");
+test_valid_value("clear", "right");
+test_valid_value("clear", "both");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/float-invalid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/float-invalid.html
new file mode 100644
index 00000000000..f20183f0527
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/parsing/float-invalid.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS basic box model: parsing float with invalid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-float">
+<meta name="assert" content="float supports only the grammar 'left | right | top | bottom | start | end | none | <page-floats>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("float", "auto");
+test_invalid_value("float", "right bottom");
+test_invalid_value("float", "top, left");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/float-valid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/float-valid.html
new file mode 100644
index 00000000000..be91602a4a2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/parsing/float-valid.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS basic box model: parsing float with valid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-float">
+<meta name="assert" content="float supports the full grammar 'left | right | top | bottom | start | end | none | <page-floats>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("float", "left");
+test_valid_value("float", "right");
+test_valid_value("float", "none");
+
+// The following are not yet supported by browsers:
+// test_valid_value("float", "top");
+// test_valid_value("float", "bottom");
+// test_valid_value("float", "start"); // not permitted in https://drafts.csswg.org/css-page-floats/#float-property
+// test_valid_value("float", "end"); // not permitted in https://drafts.csswg.org/css-page-floats/#float-property
+
+// Page floats are now defined in
+// https://drafts.csswg.org/css-page-floats/#float-property
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/height-invalid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/height-invalid.html
new file mode 100644
index 00000000000..120cce6fcfa
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/parsing/height-invalid.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS basic box model: parsing height with invalid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-height">
+<meta name="assert" content="height supports only the grammar '[<length> | <percentage>] | available | min-content | max-content | fit-content | complex | auto'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("height", "none");
+
+test_invalid_value("height", "min-content available");
+test_invalid_value("height", "max-content 10px");
+test_invalid_value("height", "20% available");
+
+test_invalid_value("height", "-10px");
+test_invalid_value("height", "-20%");
+test_invalid_value("height", "60");
+test_invalid_value("height", "10px 20%");
+
+test_invalid_value("height", "10px border-box");
+test_invalid_value("height", "content-box 20%");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/height-valid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/height-valid.html
new file mode 100644
index 00000000000..9b3df67c11d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/parsing/height-valid.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS basic box model: parsing height with valid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-height">
+<meta name="assert" content="height supports the full grammar '[<length> | <percentage>] | available | min-content | max-content | fit-content | complex | auto'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("height", "auto");
+
+test_valid_value("height", "10px");
+test_valid_value("height", "20%");
+test_valid_value("height", "calc(2em + 3ex)");
+
+test_valid_value("height", "min-content");
+test_valid_value("height", "max-content");
+test_valid_value("height", "fit-content");
+
+// The following are not yet supported by browsers:
+// test_valid_value("height", "available");
+// test_valid_value("height", "complex");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/margin-invalid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/margin-invalid.html
new file mode 100644
index 00000000000..d28c4823b6c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/parsing/margin-invalid.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS basic box model: parsing margin with invalid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-margin">
+<meta name="assert" content="margin supports only the grammar '[ <length> | <percentage> | auto]{1,4}'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("margin", "available");
+test_invalid_value("margin", "10px border-box");
+test_invalid_value("margin", "1% 2% 3% 4% 5%");
+
+test_invalid_value("margin-top", "calc(2em + 3ex) auto");
+test_invalid_value("margin-right", "auto calc(2em + 3ex) 20%");
+test_invalid_value("margin-bottom", "10px 20% calc(2em + 3ex) auto");
+test_invalid_value("margin-bottom-left", "none");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/margin-valid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/margin-valid.html
new file mode 100644
index 00000000000..9986222e263
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/parsing/margin-valid.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS basic box model: parsing margin with valid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-margin">
+<meta name="assert" content="margin supports the full grammar '[ <length> | <percentage> | auto]{1,4}'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("margin", "10px");
+test_valid_value("margin", "20%");
+test_valid_value("margin", "calc(2em + 3ex)");
+test_valid_value("margin", "auto");
+test_valid_value("margin", "-10px");
+test_valid_value("margin", "-20%");
+
+test_valid_value("margin", "calc(2em + 3ex) auto");
+test_valid_value("margin", "auto calc(2em + 3ex) 20%");
+test_valid_value("margin", "10px 20% calc(2em + 3ex) auto");
+
+test_valid_value("margin-top", "10px");
+test_valid_value("margin-right", "20%");
+test_valid_value("margin-bottom", "calc(2em + 3ex)");
+test_valid_value("margin-left", "auto");
+test_valid_value("margin-top", "-10px");
+test_valid_value("margin-right", "-20%");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/max-height-invalid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/max-height-invalid.html
new file mode 100644
index 00000000000..9f37619f334
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/parsing/max-height-invalid.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS basic box model: parsing max-height with invalid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-max-height">
+<meta name="assert" content="max-height supports only the grammar '[ [<length> | <percentage>] && [border-box | content-box]? ] | available | min-content | max-content | fit-content | none'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("max-height", "complex");
+test_invalid_value("max-height", "auto");
+test_invalid_value("max-height", "none available");
+test_invalid_value("max-height", "max-content 10px");
+test_invalid_value("max-height", "20% available");
+
+test_invalid_value("max-height", "-10px");
+test_invalid_value("max-height", "-20%");
+test_invalid_value("max-height", "60");
+test_invalid_value("max-height", "10px 20%");
+test_invalid_value("max-height", "content-box border-box");
+test_invalid_value("max-height", "10px border-box 20%");
+test_invalid_value("max-height", "content-box 20% border-box");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/max-height-valid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/max-height-valid.html
new file mode 100644
index 00000000000..846eb1da92b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/parsing/max-height-valid.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS basic box model: parsing max-height with valid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-max-height">
+<meta name="assert" content="max-height supports the full grammar '[ [<length> | <percentage>] && [border-box | content-box]? ] | available | min-content | max-content | fit-content | none'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("max-height", "none");
+
+test_valid_value("max-height", "10px");
+test_valid_value("max-height", "20%");
+test_valid_value("max-height", "calc(2em + 3ex)");
+
+test_valid_value("max-height", "min-content");
+test_valid_value("max-height", "max-content");
+test_valid_value("max-height", "fit-content");
+
+// The following are not yet supported by browsers:
+// test_valid_value("max-height", "available");
+// test_valid_value("max-height", "10px border-box");
+// test_valid_value("max-height", "content-box 20%", "20% content-box");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/max-width-invalid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/max-width-invalid.html
new file mode 100644
index 00000000000..32f51ef4529
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/parsing/max-width-invalid.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS basic box model: parsing max-width with invalid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-max-width">
+<meta name="assert" content="max-width supports only the grammar '[ [<length> | <percentage>] && [border-box | content-box]? ] | available | min-content | max-content | fit-content | none'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("max-width", "complex");
+test_invalid_value("max-width", "auto");
+test_invalid_value("max-width", "none available");
+test_invalid_value("max-width", "max-content 10px");
+test_invalid_value("max-width", "20% available");
+
+test_invalid_value("max-width", "-10px");
+test_invalid_value("max-width", "-20%");
+test_invalid_value("max-width", "60");
+test_invalid_value("max-width", "10px 20%");
+test_invalid_value("max-width", "content-box border-box");
+test_invalid_value("max-width", "10px border-box 20%");
+test_invalid_value("max-width", "content-box 20% border-box");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/max-width-valid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/max-width-valid.html
new file mode 100644
index 00000000000..73e175918f8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/parsing/max-width-valid.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS basic box model: parsing max-width with valid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-max-width">
+<meta name="assert" content="max-width supports the full grammar '[ [<length> | <percentage>] && [border-box | content-box]? ] | available | min-content | max-content | fit-content | none'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("max-width", "none");
+
+test_valid_value("max-width", "10px");
+test_valid_value("max-width", "20%");
+test_valid_value("max-width", "calc(2em + 3ex)");
+
+test_valid_value("max-width", "min-content");
+test_valid_value("max-width", "max-content");
+test_valid_value("max-width", "fit-content");
+
+// The following are not yet supported by browsers:
+// test_valid_value("max-width", "available");
+// test_valid_value("max-width", "10px border-box");
+// test_valid_value("max-width", "content-box 20%", "20% content-box");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/min-height-invalid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/min-height-invalid.html
new file mode 100644
index 00000000000..846d1888362
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/parsing/min-height-invalid.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS basic box model: parsing min-height with invalid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-min-height">
+<meta name="assert" content="min-height supports only the grammar '[ [<length> | <percentage>] && [border-box | content-box]? ] | available | min-content | max-content | fit-content'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("min-height", "complex");
+test_invalid_value("min-height", "none");
+test_invalid_value("min-height", "none available");
+test_invalid_value("min-height", "max-content 10px");
+test_invalid_value("min-height", "20% available");
+
+test_invalid_value("min-height", "-10px");
+test_invalid_value("min-height", "-20%");
+test_invalid_value("min-height", "60");
+test_invalid_value("min-height", "10px 20%");
+test_invalid_value("min-height", "content-box border-box");
+test_invalid_value("min-height", "10px border-box 20%");
+test_invalid_value("min-height", "content-box 20% border-box");
+
+// The following is not yet rejected by browsers:
+test_invalid_value("min-height", "auto");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/min-height-valid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/min-height-valid.html
new file mode 100644
index 00000000000..728667015e0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/parsing/min-height-valid.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS basic box model: parsing min-height with valid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-min-height">
+<meta name="assert" content="min-height supports the full grammar '[ [<length> | <percentage>] && [border-box | content-box]? ] | available | min-content | max-content | fit-content'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("min-height", "10px");
+test_valid_value("min-height", "20%");
+test_valid_value("min-height", "calc(2em + 3ex)");
+
+test_valid_value("min-height", "min-content");
+test_valid_value("min-height", "max-content");
+test_valid_value("min-height", "fit-content");
+
+// The following are not yet supported by browsers:
+// test_valid_value("min-height", "available");
+// test_valid_value("min-height", "10px border-box");
+// test_valid_value("min-height", "content-box 20%", "20% content-box");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/min-width-invalid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/min-width-invalid.html
new file mode 100644
index 00000000000..e6998b0001c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/parsing/min-width-invalid.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS basic box model: parsing min-width with invalid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-min-width">
+<meta name="assert" content="min-width supports only the grammar '[ [<length> | <percentage>] && [border-box | content-box]? ] | available | min-content | max-content | fit-content'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("min-width", "complex");
+test_invalid_value("min-width", "none");
+test_invalid_value("min-width", "none available");
+test_invalid_value("min-width", "max-content 10px");
+test_invalid_value("min-width", "20% available");
+
+test_invalid_value("min-width", "-10px");
+test_invalid_value("min-width", "-20%");
+test_invalid_value("min-width", "60");
+test_invalid_value("min-width", "10px 20%");
+test_invalid_value("min-width", "content-box border-box");
+test_invalid_value("min-width", "10px border-box 20%");
+test_invalid_value("min-width", "content-box 20% border-box");
+
+// The following is not yet rejected by browsers:
+test_invalid_value("min-width", "auto");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/min-width-valid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/min-width-valid.html
new file mode 100644
index 00000000000..5440b8793d7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/parsing/min-width-valid.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS basic box model: parsing min-width with valid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-min-width">
+<meta name="assert" content="min-width supports the full grammar '[ [<length> | <percentage>] && [border-box | content-box]? ] | available | min-content | max-content | fit-content'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("min-width", "10px");
+test_valid_value("min-width", "20%");
+test_valid_value("min-width", "calc(2em + 3ex)");
+
+test_valid_value("min-width", "min-content");
+test_valid_value("min-width", "max-content");
+test_valid_value("min-width", "fit-content");
+
+// The following are not yet supported by browsers:
+// test_valid_value("min-width", "available");
+// test_valid_value("min-width", "10px border-box");
+// test_valid_value("min-width", "content-box 20%", "20% content-box");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/overflow-invalid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/overflow-invalid.html
new file mode 100644
index 00000000000..dd97b9823f7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/parsing/overflow-invalid.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS basic box model: parsing overflow with invalid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-overflow">
+<meta name="assert" content="overflow supports only the grammar '[ visible | hidden | scroll | auto | no-display | no-content ]{1,2}'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("overflow", "none");
+test_invalid_value("overflow", "visible hidden scroll");
+test_invalid_value("overflow", "no-display, no-content");
+
+test_invalid_value("overflow-x", "none");
+test_invalid_value("overflow-y", "visible hidden");
+test_invalid_value("overflow-y", "no-display, no-content");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/overflow-valid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/overflow-valid.html
new file mode 100644
index 00000000000..d4411c80367
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/parsing/overflow-valid.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS basic box model: parsing overflow with valid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-overflow">
+<meta name="assert" content="overflow supports the full grammar '[ visible | hidden | scroll | auto | no-display | no-content ]{1,2}'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("overflow", "visible");
+test_valid_value("overflow", "hidden");
+test_valid_value("overflow", "scroll");
+test_valid_value("overflow", "auto");
+
+test_valid_value("overflow-x", "visible");
+test_valid_value("overflow-x", "hidden");
+test_valid_value("overflow-x", "scroll");
+test_valid_value("overflow-y", "auto");
+
+// The following are not yet supported by browsers:
+// test_valid_value("overflow", "no-display");
+// test_valid_value("overflow", "no-content");
+// test_valid_value("overflow", "visible hidden");
+// test_valid_value("overflow", "auto scroll");
+// test_valid_value("overflow", "no-display no-content");
+// test_valid_value("overflow-y", "no-display");
+// test_valid_value("overflow-y", "no-content");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/padding-invalid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/padding-invalid.html
new file mode 100644
index 00000000000..54bfc69cfe3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/parsing/padding-invalid.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS basic box model: parsing padding with invalid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-padding">
+<meta name="assert" content="padding supports only the grammar '<length>{1,4}'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("padding", "auto");
+test_invalid_value("padding", "available");
+test_invalid_value("padding", "10px border-box");
+test_invalid_value("padding", "calc(2em + 3ex) auto");
+test_invalid_value("padding", "10px 20px 30px 40px 50px");
+
+test_invalid_value("padding-top", "auto");
+test_invalid_value("padding-bottom", "10px 20px calc(2em + 3ex) auto");
+test_invalid_value("padding-bottom-left", "10px 20px");
+
+test_invalid_value("padding-top", "-10px");
+
+// The following are not yet rejected by browsers:
+test_invalid_value("padding", "20%");
+test_invalid_value("padding", "10px 20% 30% 40px");
+test_invalid_value("padding-right", "20%");
+test_invalid_value("padding-right", "calc(2em + 3%)");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/padding-valid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/padding-valid.html
new file mode 100644
index 00000000000..f3cda52a4a2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/parsing/padding-valid.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS basic box model: parsing padding with valid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-padding">
+<meta name="assert" content="padding supports the full grammar '<length>{1,4}'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("padding", "10px");
+test_valid_value("padding", "10px 20px 30px 40px");
+test_valid_value("padding", "calc(2em + 3ex)");
+
+test_valid_value("padding-top", "10px");
+test_valid_value("padding-right", "20px");
+test_valid_value("padding-bottom", "30px");
+test_valid_value("padding-left", "40px");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/resources/parsing-testcommon.js b/tests/wpt/web-platform-tests/css/css-box/parsing/resources/parsing-testcommon.js
new file mode 100644
index 00000000000..b075882f89a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/parsing/resources/parsing-testcommon.js
@@ -0,0 +1,39 @@
+'use strict';
+
+// serializedValue can be the expected serialization of value,
+// or an array of permitted serializations,
+// or omitted if value should serialize as value.
+function test_valid_value(property, value, serializedValue) {
+ if (arguments.length < 3)
+ serializedValue = value;
+
+ var stringifiedValue = JSON.stringify(value);
+
+ test(function(){
+ var div = document.createElement('div');
+ div.style[property] = value;
+ assert_not_equals(div.style.getPropertyValue(property), "", "property should be set");
+
+ var div = document.createElement('div');
+ div.style[property] = value;
+ var readValue = div.style.getPropertyValue(property);
+ if (serializedValue instanceof Array)
+ assert_in_array(readValue, serializedValue, "serialization should be sound");
+ else
+ assert_equals(readValue, serializedValue, "serialization should be canonical");
+
+ div.style[property] = readValue;
+ assert_equals(div.style.getPropertyValue(property), readValue, "serialization should round-trip");
+
+ }, "e.style['" + property + "'] = " + stringifiedValue + " should set the property value");
+}
+
+function test_invalid_value(property, value) {
+ var stringifiedValue = JSON.stringify(value);
+
+ test(function(){
+ var div = document.createElement('div');
+ div.style[property] = value;
+ assert_equals(div.style.getPropertyValue(property), "");
+ }, "e.style['" + property + "'] = " + stringifiedValue + " should not set the property value");
+}
diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/visibility-invalid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/visibility-invalid.html
new file mode 100644
index 00000000000..39050694101
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/parsing/visibility-invalid.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS basic box model: parsing visibility with invalid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-visibility">
+<meta name="assert" content="visibility supports only the grammar 'visible | hidden | collapse'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("visibility", "auto");
+test_invalid_value("visibility", "hidden collapse");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/visibility-valid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/visibility-valid.html
new file mode 100644
index 00000000000..fbff1f09812
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/parsing/visibility-valid.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS basic box model: parsing visibility with valid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-visibility">
+<meta name="assert" content="visibility supports the full grammar 'visible | hidden | collapse'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("visibility", "visible");
+test_valid_value("visibility", "hidden");
+test_valid_value("visibility", "collapse");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/width-invalid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/width-invalid.html
new file mode 100644
index 00000000000..f573ba2c5f4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/parsing/width-invalid.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS basic box model: parsing width with invalid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-width">
+<meta name="assert" content="width supports only the grammar '[<length> | <percentage>] | available | min-content | max-content | fit-content | auto'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("width", "complex");
+test_invalid_value("width", "none");
+
+test_invalid_value("width", "min-content available");
+test_invalid_value("width", "max-content 10px");
+test_invalid_value("width", "20% available");
+
+test_invalid_value("width", "-10px");
+test_invalid_value("width", "-20%");
+test_invalid_value("width", "60");
+test_invalid_value("width", "10px 20%");
+
+test_invalid_value("width", "10px border-box");
+test_invalid_value("width", "content-box 20%");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-box/parsing/width-valid.html b/tests/wpt/web-platform-tests/css/css-box/parsing/width-valid.html
new file mode 100644
index 00000000000..7ae55ccb2d5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/parsing/width-valid.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS basic box model: parsing width with valid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-box-3/#propdef-width">
+<meta name="assert" content="width supports the full grammar '[<length> | <percentage>] | available | min-content | max-content | fit-content | auto'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("width", "auto");
+
+test_valid_value("width", "10px");
+test_valid_value("width", "20%");
+test_valid_value("width", "calc(2em + 3ex)");
+
+test_valid_value("width", "min-content");
+test_valid_value("width", "max-content");
+test_valid_value("width", "fit-content");
+
+// The following is not yet supported by browsers:
+// test_valid_value("width", "available");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-cascade/all-prop-initial-xml.html b/tests/wpt/web-platform-tests/css/css-cascade/all-prop-initial-xml.html
new file mode 100644
index 00000000000..a04956a52d1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-cascade/all-prop-initial-xml.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<title>all: initial on unknown XML tree</title>
+<link rel=help href=https://www.w3.org/TR/css-cascade-3/#all-shorthand>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<body>
+<script>
+const iframe = document.createElement("iframe");
+const setup_test = async_test("setup");
+iframe.onload = setup_test.step_func_done(function() {
+ const root = iframe.contentDocument.documentElement;
+ // we need the empty stylesheet to avoid default XSLT views of the XML
+ const style = iframe.contentDocument.createElementNS("http://www.w3.org/1999/xhtml", "style");
+ root.appendChild(style);
+ const cs = iframe.contentWindow.getComputedStyle(root);
+ let actual_initial = Object.create(null);
+ for (let i = 0; i < cs.length; i++) {
+ let prop_name = cs[i];
+ actual_initial[prop_name] = cs[prop_name];
+ }
+ test(() => {
+ style.textContent = ":root { color: blue }";
+ assert_equals(cs["color"], "rgb(0, 0, 255)");
+ }, "stylesheet takes effect");
+ style.textContent = ":root { all: initial; direction: initial; unicode-bidi: initial; } style { display: none; }";
+ for (let prop_name in actual_initial) {
+ test(() => {
+ assert_equals(cs[prop_name], actual_initial[prop_name]);
+ }, prop_name);
+ }
+});
+iframe.src = URL.createObjectURL(new Blob(["<foo/>"], { type: "application/xml" }));
+document.body.appendChild(iframe);
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-size-013.html b/tests/wpt/web-platform-tests/css/css-contain/contain-size-013.html
index f1bbc085454..4d1cbc403bd 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/contain-size-013.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-size-013.html
@@ -14,4 +14,4 @@ img {
</style>
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
-<img src="/css/support/60x60-red.png" />
+<img src="/css/support/60x60-red.png" alt="Image download support must be enabled" />
diff --git a/tests/wpt/web-platform-tests/css/css-contain/reference/contain-paint-007-ref.html b/tests/wpt/web-platform-tests/css/css-contain/reference/contain-paint-007-ref.html
index 3048d55f11a..ae3c424f726 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/reference/contain-paint-007-ref.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/reference/contain-paint-007-ref.html
@@ -9,7 +9,11 @@ rtc {
display: ruby-text-container;
font-size: 1rem;
}
+rtc::after {
+ content: "PASS";
+ position: absolute;
+}
</style>
<p>This test passes if you can see the word PASS below.
-<div><ruby><rtc>PASS</rtc></ruby></div>
+<div><ruby><rtc></rtc></ruby></div>
diff --git a/tests/wpt/web-platform-tests/css/css-env/META.yml b/tests/wpt/web-platform-tests/css/css-env/META.yml
new file mode 100644
index 00000000000..51a24d0b7a3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-env/META.yml
@@ -0,0 +1,3 @@
+suggested_reviewers:
+ - rebeccahughes
+ - lilles
diff --git a/tests/wpt/web-platform-tests/css/css-images/parsing/gradient-position-invalid.html b/tests/wpt/web-platform-tests/css/css-images/parsing/gradient-position-invalid.html
index e53486e62d1..7a636481beb 100644
--- a/tests/wpt/web-platform-tests/css/css-images/parsing/gradient-position-invalid.html
+++ b/tests/wpt/web-platform-tests/css/css-images/parsing/gradient-position-invalid.html
@@ -12,6 +12,8 @@
</head>
<body>
<script>
+test_invalid_value("background-image", "radial-gradient(at top 0px, red, blue)");
+
// The following were supported in an earlier version of the spec.
// https://github.com/w3c/csswg-drafts/issues/2140
// Deprecated in Blink with support to be removed in M68, around July 2018.
diff --git a/tests/wpt/web-platform-tests/css/css-logical/logical-box-border-shorthands.html b/tests/wpt/web-platform-tests/css/css-logical/logical-box-border-shorthands.html
new file mode 100644
index 00000000000..497d9f4867f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-logical/logical-box-border-shorthands.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>CSS Logical Properties: Flow-Relative Border Shorthands</title>
+<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com" />
+<link rel="help" href="https://drafts.csswg.org/css-logical/#border-shorthands">
+<meta name="assert" content="This test checks the interaction of the flow-relative border-* shorthand properties with the physical ones in different writing modes." />
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<div id="log"></div>
+
+<script src="./resources/test-box-properties.js"></script>
+<script>
+runTests(createBoxPropertyGroup("border-*", {type: ["length", "border-style", "color"]}));
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-logical/resources/test-box-properties.js b/tests/wpt/web-platform-tests/css/css-logical/resources/test-box-properties.js
index a52b8fdbba1..da4774771a7 100644
--- a/tests/wpt/web-platform-tests/css/css-logical/resources/test-box-properties.js
+++ b/tests/wpt/web-platform-tests/css/css-logical/resources/test-box-properties.js
@@ -90,14 +90,14 @@
* }, logical: {
* inlineStart: "margin-inline-start", inlineEnd: "margin-inline-end",
* blockStart: "margin-block-start", blockEnd: "margin-block-end",
- * }, type: "length", prerequisites: "...", property: "'margin-*'" }
+ * }, type: ["length"], prerequisites: "...", property: "'margin-*'" }
*
* @param {string} property
* A string representing the property names, like "margin-*".
* @param {Object} descriptor
- * @param {string} descriptor.type
+ * @param {string|string[]} descriptor.type
* Describes the kind of values accepted by the property, like "length".
- * Must be a key from the `testValues` object.
+ * Must be a key or a collection of keys from the `testValues` object.
* @param {Object={}} descriptor.prerequisites
* Represents property declarations that are needed by `property` to work.
* For example, border-width properties require a border style.
@@ -115,7 +115,8 @@
physical[physicalSide] = isInset ? physicalSide : property.replace("*", physicalSide);
prerequisites += makeDeclaration(descriptor.prerequisites, physicalSide);
}
- return {name, logical, physical, type: descriptor.type, prerequisites, property};
+ const type = [].concat(descriptor.type);
+ return {name, logical, physical, type, prerequisites, property};
};
/**
@@ -134,7 +135,7 @@
horizontal: `${prefix}width`,
vertical: `${prefix}height`,
},
- type: "length",
+ type: ["length"],
prerequisites: makeDeclaration({display: "block"}),
property: (prefix ? prefix.slice(0, -1) + " " : "") + "sizing",
};
@@ -147,7 +148,9 @@
* An object returned by createBoxPropertyGroup or createSizingPropertyGroup.
*/
exports.runTests = function(group) {
- const values = testValues[group.type];
+ const values = testValues[group.type[0]].map(function(_, i) {
+ return group.type.map(type => testValues[type][i]).join(" ");
+ });
const logicals = Object.values(group.logical);
const physicals = Object.values(group.physical);
@@ -158,8 +161,8 @@
expected.push([logicalProp, values[i]]);
}
testCSSValues("logical properties in inline style", testElement.style, expected);
- testElement.style.cssText = "";
}, `Test that logical ${group.property} properties are supported.`);
+ testElement.style.cssText = "";
for (const writingMode of writingModes) {
for (const style of writingMode.styles) {
diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/overflowing-snap-areas.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/overflowing-snap-areas.html
new file mode 100644
index 00000000000..6d3c1865fe7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/overflowing-snap-areas.html
@@ -0,0 +1,153 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1" />
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+div {
+ position: absolute;
+}
+.scroller-x {
+ overflow: scroll;
+ scroll-snap-type: x mandatory;
+ width: 500px;
+ height: 500px;
+}
+.scroller-y {
+ overflow: scroll;
+ scroll-snap-type: y mandatory;
+ width: 500px;
+ height: 500px;
+}
+.space {
+ width: 4000px;
+ height: 4000px;
+}
+.target {
+ scroll-snap-align: start;
+}
+.large-x {
+ width: 3000px;
+ height: 400px;
+ background-color: yellow;
+}
+.large-y {
+ width: 400px;
+ height: 2000px;
+ background-color: green;
+}
+.small {
+ height: 200px;
+ width: 200px;
+ background-color: black;
+}
+</style>
+<div class="scroller-x" id="one-target">
+ <div id="space"></div>
+ <div class="large-x target" id="single" style="left: 200px;"></div>
+</div>
+
+<div class="scroller-x" id="x">
+ <div class="space"></div>
+ <div style="left: 200px;">
+ <div class="target large-x"></div>
+ <div class="target small" style="left: 200px"></div>
+ <div class="target small" style="left: 600px"></div>
+ <div class="target small" style="left: 1200px"></div>
+ </div>
+</div>
+
+<div class="scroller-y" id="y">
+ <div class="space"></div>
+ <div style="top: 200px;">
+ <div class="target large-y"></div>
+ <div class="target small" style="top: 200px"></div>
+ <div class="target small" style="top: 600px"></div>
+ <div class="target small" style="top: 1200px"></div>
+ </div>
+</div>
+
+<div class="scroller-x" id="two-axes" style="scroll-snap-type: both mandatory">
+ <div class="space"></div>
+ <div class="target large-x" style="top: 200px"></div>
+</div>
+
+<script>
+var one_target_scroller = document.getElementById("one-target");
+var scroller_x = document.getElementById("x");
+var scroller_y = document.getElementById("y");
+var two_axes_scroller = document.getElementById("two-axes");
+
+test(() => {
+ one_target_scroller.scrollTo(10, 0);
+ assert_equals(one_target_scroller.scrollLeft, 200);
+ assert_equals(one_target_scroller.scrollTop, 0);
+}, "Snaps to the snap position if the snap area doesn't cover the snapport on x.");
+
+test(() => {
+ var right_align = 3200 - one_target_scroller.clientWidth;
+ one_target_scroller.scrollTo(right_align, 0);
+ assert_equals(one_target_scroller.scrollLeft, right_align);
+ assert_equals(one_target_scroller.scrollTop, 0);
+}, "Snaps to the snap position if the snap area covers the snapport on x on the right border.");
+
+// We use end alignment for this test so that we don't fall on a snap
+// position when the snap area just covers the snapport on the left border.
+test(() => {
+ document.getElementById("single").style.scrollSnapAlign = 'end';
+ one_target_scroller.scrollTo(200, 0);
+ assert_equals(one_target_scroller.scrollLeft, 200);
+ assert_equals(one_target_scroller.scrollTop, 0);
+}, "Snaps to the snap position if the snap area covers the snapport on x on the left border.");
+
+test(() => {
+ scroller_x.scrollTo(500, 0);
+ assert_equals(scroller_x.scrollLeft, 400);
+ assert_equals(scroller_x.scrollTop, 0);
+}, "Snaps if the distance between the previous(400) and next(800) " +
+ "snap positions is smaller than snapport(500) on x.");
+
+test(() => {
+ scroller_y.scrollTo(0, 500);
+ assert_equals(scroller_y.scrollLeft, 0);
+ assert_equals(scroller_y.scrollTop, 400);
+}, "Snaps if the distance between the previous(400) and next(800) " +
+ "snap positions is smaller than snapport(500) on y.");
+
+test(() => {
+ scroller_x.scrollTo(900, 0);
+ assert_equals(scroller_x.scrollLeft, 900);
+ assert_equals(scroller_x.scrollTop, 0);
+}, "Snap to current scroll position which is a valid snap position, " +
+ "as the snap area covers snapport on x and the distance between the " +
+ "previous(800) and next(1400) is larger than snapport(500).");
+
+test(() => {
+ scroller_y.scrollTo(0, 900);
+ assert_equals(scroller_y.scrollLeft, 0);
+ assert_equals(scroller_y.scrollTop, 900);
+}, "Snap to current scroll position which is a valid snap position, " +
+ "as the snap area covers snapport on y and the distance between the " +
+ "previous(800) and next(1400) is larger than snapport(500).");
+
+test(() => {
+ scroller_x.scrollTo(1500, 0);
+ assert_equals(scroller_x.scrollLeft, 1500);
+ assert_equals(scroller_x.scrollTop, 0);
+}, "Snap to current scroll position which is a valid snap position, as the " +
+ "snap area covers snapport on x and there is no subsequent snap positions.");
+
+test(() => {
+ scroller_y.scrollTo(0, 1500);
+ assert_equals(scroller_y.scrollLeft, 0);
+ assert_equals(scroller_y.scrollTop, 1500);
+}, "Snap to current scroll position which is a valid snap position, as the " +
+ "snap area covers snapport on y and there is no subsequent snap positions.");
+
+test(() => {
+ two_axes_scroller.scrollTo(10, 100);
+ assert_equals(two_axes_scroller.scrollLeft, 10);
+ assert_equals(two_axes_scroller.scrollTop, 200);
+}, "Snap to current scroll position on x as the area is covering x axis." +
+ "However, we snap to the specified snap position on y as the area is not " +
+ "covering y axis.");
+</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/scrollTo-scrollBy-snaps.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/scrollTo-scrollBy-snaps.html
index 766cf57a047..58807a6836f 100644
--- a/tests/wpt/web-platform-tests/css/css-scroll-snap/scrollTo-scrollBy-snaps.html
+++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/scrollTo-scrollBy-snaps.html
@@ -8,41 +8,55 @@ body {
overflow: scroll;
scroll-snap-type: both mandatory;
}
+div {
+ position: absolute;
+}
.scroller {
overflow: scroll;
scroll-snap-type: both mandatory;
}
-#div-scroller {
+#inner-scroller {
+ top: 3000px;
width: 800px;
height: 800px;
}
-.content {
+.space {
+ left: 0px;
+ top: 0px;
width: 2100px;
height: 2100px;
}
.target {
- width: 1000px;
- height: 1000px;
+ width: 600px;
+ height: 600px;
scroll-snap-align: start;
- float: left;
}
-</style>
+.left {
+ left: 0px;
+}
+.right {
+ left: 1000px;
+}
+.top {
+ top: 0px;
+}
+.bottom {
+ top: 1000px;
+}
+</style>
<body class="scroller">
- <div class="content" id="content">
- <div class="target"></div>
- <div class="target"></div>
- <div class="target"></div>
- <div class="target"></div>
- </div>
-
- <div class="scroller" id="div-scroller">
- <div class="content">
- <div class="target"></div>
- <div class="target"></div>
- <div class="target"></div>
- <div class="target"></div>
- </div>
+ <div class="space"></div>
+ <div class="target left top"></div>
+ <div class="target right top"></div>
+ <div class="target left bottom"></div>
+ <div class="target right bottom"></div>
+ <div class="scroller" id="inner-scroller">
+ <div class="space"></div>
+ <div class="target left top"></div>
+ <div class="target right top"></div>
+ <div class="target left bottom"></div>
+ <div class="target right bottom"></div>
</div>
</body>
@@ -55,7 +69,7 @@ function format_dict(dict) {
return `{${props.join(', ')}}`;
}
-var divScroller = document.getElementById("div-scroller");
+var divScroller = document.getElementById("inner-scroller");
var viewport = document.scrollingElement;
[
[{left: 800}, 1000, 0],
@@ -140,6 +154,4 @@ var viewport = document.scrollingElement;
assert_equals(window.scrollY, expectedY);
}, `scrollBy(${format_dict(input)}) on window lands on (${expectedX}, ${expectedY})`);
});
-
-document.body.removeChild(document.getElementById("content"));
</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/trailing-space-before-br-001.html b/tests/wpt/web-platform-tests/css/css-text/white-space/trailing-space-before-br-001.html
new file mode 100644
index 00000000000..2ecd4d3767a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/trailing-space-before-br-001.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<title>CSS Text: A sequence of collapsible spaces at the end of a line is removed</title>
+<link rel='help' href='https://drafts.csswg.org/css-text-3/#white-space-phase-2'>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+#container > div {
+ display: inline-block;
+ -font-family: Ahem;
+ font-size: 10px;
+}
+</style>
+<body>
+<div id=log></div>
+<div id=container>
+ <div>1111</div>
+ <div>1111 </div>
+ <div> 1111</div>
+ <div> 1111 </div>
+ <div>1111<br></div>
+ <div>1111<br> </div>
+ <div>1111 <br></div>
+ <div>1111 <br> </div>
+</div>
+<script>
+(function () {
+ const epsilon = 1;
+ let elements = Array.from(container.children);
+ let reference = elements[0];
+ let reference_width = reference.offsetWidth;
+ for (let element of elements) {
+ test(() => {
+ assert_approx_equals(element.offsetWidth, reference_width, epsilon);
+ }, escapeSpaces(element.innerHTML));
+ }
+})();
+
+function escapeSpaces(text) {
+ return text
+ .replace(/ /g, '&#x20;')
+ .replace(/\n/g, '&#x0A;')
+}
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-box-invalid.html b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-box-invalid.html
new file mode 100644
index 00000000000..3af91965883
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-box-invalid.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Transform Module Level 1: parsing transform-box with invalid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-transforms/#transform-box-property">
+<meta name="assert" content="transform-box supports only the grammar 'content-box | border-box | fill-box | stroke-box | view-box'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("transform-box", "margin-box");
+test_invalid_value("transform-box", "padding-box");
+test_invalid_value("transform-box", "fill-box view-box");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-box-valid.html b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-box-valid.html
new file mode 100644
index 00000000000..742750b6677
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-box-valid.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Transform Module Level 1: parsing transform-box with valid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-transforms/#transform-box-property">
+<meta name="assert" content="transform-box supports the full grammar 'content-box | border-box | fill-box | stroke-box | view-box'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("transform-box", "content-box");
+test_valid_value("transform-box", "border-box");
+test_valid_value("transform-box", "fill-box");
+test_valid_value("transform-box", "stroke-box");
+test_valid_value("transform-box", "view-box");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-invalid.html b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-invalid.html
new file mode 100644
index 00000000000..dc81069c9e8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-invalid.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Transform Module Level 2: parsing transform with invalid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-transforms-2/#transform-property">
+<meta name="assert" content="transform supports only the grammar 'none | <transform-list>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("transform", "none scale(2)");
+test_invalid_value("transform", "translateX(3%) none");
+
+test_invalid_value("transform", "matrix(1, 2)");
+
+test_invalid_value("transform", "translate(1px, 2px, 3px)");
+
+test_invalid_value("transform", "translateX(-4px, 5px)");
+
+test_invalid_value("transform", "translateY(4%, 5%)");
+
+test_invalid_value("transform", "scale(6, 7, 8)");
+
+test_invalid_value("transform", "scaleX(1, 2)");
+
+test_invalid_value("transform", "scaleY(3, 4)");
+
+test_invalid_value("transform", "rotate(0, 0)");
+test_invalid_value("transform", "rotate(0, 0, 0)");
+test_invalid_value("transform", "rotate(0, 0, 0, 0)");
+
+test_invalid_value("transform", "skew(0, 0, 0)");
+
+test_invalid_value("transform", "skewX(0, 0)");
+
+test_invalid_value("transform", "skewY(0, 0)");
+
+test_invalid_value("transform", "scaleX(2), scaleY(3)");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-origin-invalid.html b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-origin-invalid.html
new file mode 100644
index 00000000000..dab56a04231
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-origin-invalid.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Transform Module Level 1: parsing transform-origin with invalid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-transforms/#transform-origin-property">
+<meta name="assert" content="transform-origin supports only the grammar from spec.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("transform-origin", "1px 2px 3%");
+test_invalid_value("transform-origin", "1px 2px left");
+test_invalid_value("transform-origin", "1px 2px 3px 4px");
+test_invalid_value("transform-origin", "1px left");
+test_invalid_value("transform-origin", "top 1px"); // Blink fails.
+test_invalid_value("transform-origin", "right left");
+test_invalid_value("transform-origin", "top bottom");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-origin-valid.html b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-origin-valid.html
new file mode 100644
index 00000000000..ab36024ef2b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-origin-valid.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Transform Module Level 1: parsing transform-origin with valid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-transforms/#transform-origin-property">
+<meta name="assert" content="transform-origin supports the full grammar from spec.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("transform-origin", "left", ["left center 0px", "left 50% 0px", "left center"]);
+test_valid_value("transform-origin", "center", ["center center 0px", "center 50% 0px", "center center"]);
+test_valid_value("transform-origin", "right", ["right center 0px", "right 50% 0px", "right center"]);
+test_valid_value("transform-origin", "top", ["center top 0px", "50% top 0px", "center top"]);
+test_valid_value("transform-origin", "bottom", ["center bottom 0px", "50% bottom 0px", "center bottom"]);
+test_valid_value("transform-origin", "-1px", ["-1px center 0px", "-1px 50% 0px", "-1px center"]);
+test_valid_value("transform-origin", "calc(2em + 3ex)", ["calc(2em + 3ex) center 0px", "calc(2em + 3ex) 50% 0px", "calc(2em + 3ex) center"]);
+test_valid_value("transform-origin", "-4%", ["-4% center 0px", "-4% 50% 0px", "-4% center"]);
+
+test_valid_value("transform-origin", "left center", ["left center 0px", "left center"]);
+test_valid_value("transform-origin", "center top", ["center top 0px", "center top"]);
+test_valid_value("transform-origin", "right -4%", ["right -4% 0px", "right -4%"]);
+test_valid_value("transform-origin", "-1px bottom 5px");
+
+test_valid_value("transform-origin", "center left 6px", "left center 6px");
+test_valid_value("transform-origin", "top center", ["center top 0px", "center top"]);
+test_valid_value("transform-origin", "bottom right 7px", "right bottom 7px");
+test_valid_value("transform-origin", "-1px -2px -3px");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-valid.html b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-valid.html
new file mode 100644
index 00000000000..9a5b9c0696e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-transforms/parsing/transform-valid.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Transform Module Level 2: parsing transform with valid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-transforms-2/#transform-property">
+<meta name="assert" content="transform supports the full grammar 'none | <transform-list>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("transform", "none");
+
+test_valid_value("transform", "matrix(1, 0, 0, 1, 0, 0)");
+test_valid_value("transform", "matrix(1, 2, 3, 4, 5, 6)");
+test_valid_value("transform", "matrix(-0.1, -0.2, -0.3, -0.4, -0.5, -0.6)");
+
+test_valid_value("transform", "translate(1px)");
+test_valid_value("transform", "translate(2%, -3%)");
+
+test_valid_value("transform", "translateX(-4px)");
+
+test_valid_value("transform", "translateY(5%)");
+
+test_valid_value("transform", "scale(2)");
+test_valid_value("transform", "scale(3, 4)");
+test_valid_value("transform", "scale(-5, -6)");
+
+test_valid_value("transform", "scaleX(7)");
+
+test_valid_value("transform", "scaleY(-8)");
+
+test_valid_value("transform", "rotate(0)", "rotate(0deg)");
+test_valid_value("transform", "rotate(90deg)");
+
+test_valid_value("transform", "skew(0)", "skew(0deg)");
+test_valid_value("transform", "skew(90deg)");
+test_valid_value("transform", "skew(0, -90deg)", "skew(0deg, -90deg)");
+test_valid_value("transform", "skew(90deg, 0)", "skew(90deg, 0deg)");
+
+test_valid_value("transform", "skewX(0)", "skewX(0deg)");
+test_valid_value("transform", "skewX(90deg)");
+
+test_valid_value("transform", "skewY(0)", "skewY(0deg)");
+test_valid_value("transform", "skewY(-90deg)");
+
+test_valid_value("transform", "translate(1px, 2%) scale(3, 4) rotate(-90deg)");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/direction-invalid.html b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/direction-invalid.html
new file mode 100644
index 00000000000..a587b9fb0e0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/direction-invalid.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Writing Modes Level 3: parsing direction with invalid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#propdef-direction">
+<meta name="assert" content="direction supports only the grammar 'ltr | rtl'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("direction", "auto");
+test_invalid_value("direction", "ltr rtl");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/direction-valid.html b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/direction-valid.html
new file mode 100644
index 00000000000..436226a9187
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/direction-valid.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Writing Modes Level 3: parsing direction with valid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#propdef-direction">
+<meta name="assert" content="direction supports the full grammar 'ltr | rtl'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("direction", "ltr");
+test_valid_value("direction", "rtl");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/resources/parsing-testcommon.js b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/resources/parsing-testcommon.js
new file mode 100644
index 00000000000..b075882f89a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/resources/parsing-testcommon.js
@@ -0,0 +1,39 @@
+'use strict';
+
+// serializedValue can be the expected serialization of value,
+// or an array of permitted serializations,
+// or omitted if value should serialize as value.
+function test_valid_value(property, value, serializedValue) {
+ if (arguments.length < 3)
+ serializedValue = value;
+
+ var stringifiedValue = JSON.stringify(value);
+
+ test(function(){
+ var div = document.createElement('div');
+ div.style[property] = value;
+ assert_not_equals(div.style.getPropertyValue(property), "", "property should be set");
+
+ var div = document.createElement('div');
+ div.style[property] = value;
+ var readValue = div.style.getPropertyValue(property);
+ if (serializedValue instanceof Array)
+ assert_in_array(readValue, serializedValue, "serialization should be sound");
+ else
+ assert_equals(readValue, serializedValue, "serialization should be canonical");
+
+ div.style[property] = readValue;
+ assert_equals(div.style.getPropertyValue(property), readValue, "serialization should round-trip");
+
+ }, "e.style['" + property + "'] = " + stringifiedValue + " should set the property value");
+}
+
+function test_invalid_value(property, value) {
+ var stringifiedValue = JSON.stringify(value);
+
+ test(function(){
+ var div = document.createElement('div');
+ div.style[property] = value;
+ assert_equals(div.style.getPropertyValue(property), "");
+ }, "e.style['" + property + "'] = " + stringifiedValue + " should not set the property value");
+}
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-combine-upright-invalid.html b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-combine-upright-invalid.html
new file mode 100644
index 00000000000..8807997de8b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-combine-upright-invalid.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Writing Modes Level 3: parsing text-combine-upright with invalid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#propdef-text-combine-upright">
+<meta name="assert" content="text-combine-upright supports only the grammar 'none | all'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("text-combine-upright", "auto");
+test_invalid_value("text-combine-upright", "none all");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-combine-upright-valid.html b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-combine-upright-valid.html
new file mode 100644
index 00000000000..f599f12bf17
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-combine-upright-valid.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Writing Modes Level 3: parsing text-combine-upright with valid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#propdef-text-combine-upright">
+<meta name="assert" content="text-combine-upright supports the full grammar 'none | all'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("text-combine-upright", "none");
+test_valid_value("text-combine-upright", "all");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-orientation-invalid.html b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-orientation-invalid.html
new file mode 100644
index 00000000000..4461dbeea2f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-orientation-invalid.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Writing Modes Level 3: parsing text-orientation with invalid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#propdef-text-orientation">
+<meta name="assert" content="text-orientation supports only the grammar 'mixed | upright | sideways'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("text-orientation", "auto");
+test_invalid_value("text-orientation", "mixed upright");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-orientation-valid.html b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-orientation-valid.html
new file mode 100644
index 00000000000..f6304fd4d8a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/text-orientation-valid.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Writing Modes Level 3: parsing text-orientation with valid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#propdef-text-orientation">
+<meta name="assert" content="text-orientation supports the full grammar 'mixed | upright | sideways'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("text-orientation", "mixed");
+test_valid_value("text-orientation", "upright");
+test_valid_value("text-orientation", "sideways");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/unicode-bidi-invalid.html b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/unicode-bidi-invalid.html
new file mode 100644
index 00000000000..10907cbe931
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/unicode-bidi-invalid.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Writing Modes Level 3: parsing unicode-bidi with invalid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#propdef-unicode-bidi">
+<meta name="assert" content="unicode-bidi supports only the grammar 'normal | embed | isolate | bidi-override | isolate-override | plaintext'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("unicode-bidi", "auto");
+test_invalid_value("unicode-bidi", "isolate plaintext");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/unicode-bidi-valid.html b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/unicode-bidi-valid.html
new file mode 100644
index 00000000000..49c42345a36
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/unicode-bidi-valid.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Writing Modes Level 3: parsing unicode-bidi with valid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#propdef-unicode-bidi">
+<meta name="assert" content="unicode-bidi supports the full grammar 'normal | embed | isolate | bidi-override | isolate-override | plaintext'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("unicode-bidi", "normal");
+test_valid_value("unicode-bidi", "embed");
+test_valid_value("unicode-bidi", "isolate");
+test_valid_value("unicode-bidi", "bidi-override");
+test_valid_value("unicode-bidi", "isolate-override");
+test_valid_value("unicode-bidi", "plaintext");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/writing-mode-invalid.html b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/writing-mode-invalid.html
new file mode 100644
index 00000000000..7b36e47cc56
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/writing-mode-invalid.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Writing Modes Level 3: parsing writing-mode with invalid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#propdef-writing-mode">
+<meta name="assert" content="writing-mode supports only the grammar 'horizontal-tb | vertical-rl | vertical-lr'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("writing-mode", "auto");
+test_invalid_value("writing-mode", "horizontal-tb vertical-rl");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/writing-mode-valid.html b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/writing-mode-valid.html
new file mode 100644
index 00000000000..4264e3840db
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/parsing/writing-mode-valid.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Writing Modes Level 3: parsing writing-mode with valid values</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#propdef-writing-mode">
+<meta name="assert" content="writing-mode supports the full grammar 'horizontal-tb | vertical-rl | vertical-lr'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("writing-mode", "horizontal-tb");
+test_valid_value("writing-mode", "vertical-rl");
+test_valid_value("writing-mode", "vertical-lr");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/reference/scrollbar-vertical-rl-ref.html b/tests/wpt/web-platform-tests/css/css-writing-modes/reference/scrollbar-vertical-rl-ref.html
new file mode 100644
index 00000000000..2ee601d16d2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/reference/scrollbar-vertical-rl-ref.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>CSS Writing Modes Test: vertical-rl painting with vertical scrollbar reference</title>
+ <link rel="author" title="Aleks Totic" href="atotic@chromium.org" />
+ <style>
+ #container {
+ width: 300px;
+ height: 200px;
+ border: 1px solid black;
+ writing-mode: vertical-rl;
+ overflow: scroll;
+ background: blue;
+ }
+ #target {
+ width:500px;
+ }
+ </style>
+<div id="container">
+ <div id="target"><br></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-writing-modes/scrollbar-vertical-rl.html b/tests/wpt/web-platform-tests/css/css-writing-modes/scrollbar-vertical-rl.html
new file mode 100644
index 00000000000..71e57efb09a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-writing-modes/scrollbar-vertical-rl.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>CSS Writing Modes Test: vertical-rl painting with vertical scrollbar</title>
+
+ <link rel="author" title="Aleks Totic" href="atotic@chromium.org" />
+ <link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#orthogonal-flows" title="7.3 Orthogonal flows" />
+ <link rel="match" href="./reference/scrollbar-vertical-rl-ref.html" />
+
+ <style>
+ #container {
+ width: 300px;
+ height: 200px;
+ border: 1px solid black;
+ writing-mode: vertical-rl;
+ overflow: scroll;
+ background: red;
+ }
+ #target {
+ width:500px;
+ background:blue;
+ }
+ </style>
+</head>
+<body>
+<div id="container">
+ <div id="target"><br></div>
+</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/mediaqueries/test_media_queries.html b/tests/wpt/web-platform-tests/css/mediaqueries/test_media_queries.html
index 57830f4d47f..a239efdc116 100644
--- a/tests/wpt/web-platform-tests/css/mediaqueries/test_media_queries.html
+++ b/tests/wpt/web-platform-tests/css/mediaqueries/test_media_queries.html
@@ -99,35 +99,55 @@ function run() {
// The no-type syntax doesn't mix with the not and only keywords.
query_should_be_parseable("(orientation)");
- query_should_not_be_parseable("not (orientation)");
+ query_should_be_parseable("not (orientation)");
query_should_not_be_parseable("only (orientation)");
query_should_be_parseable("all and (orientation)");
query_should_be_parseable("not all and (orientation)");
query_should_be_parseable("only all and (orientation)");
+ query_should_not_be_parseable("not not (orientation)");
+ query_should_be_parseable("(orientation) and (orientation)");
+ query_should_be_parseable("(orientation) or (orientation)");
+ query_should_be_parseable("(orientation) or ((orientation) and ((orientation) or (orientation) or (not (orientation))))");
+
+ query_should_not_be_parseable("all and (orientation) or (orientation)");
+ query_should_be_parseable("all and (orientation) and (orientation)");
+
+ query_should_not_be_parseable("(orientation) and (orientation) or (orientation)");
+ query_should_not_be_parseable("(orientation) and not (orientation)");
+
+
var features = [ "width", "height", "device-width", "device-height" ];
+ var separators = [ ":", ">", ">=", "=", "<=", "<" ];
var feature;
var i;
for (i in features) {
feature = features[i];
expression_should_be_parseable(feature);
- expression_should_be_parseable(feature + ": 0");
- expression_should_be_parseable(feature + ": 0px");
- expression_should_be_parseable(feature + ": 0em");
- expression_should_be_parseable(feature + ": -0");
- expression_should_be_parseable("min-" + feature + ": -0");
- expression_should_be_parseable("max-" + feature + ": -0");
- expression_should_be_parseable(feature + ": -0cm");
- expression_should_be_parseable(feature + ": 1px");
- expression_should_be_parseable(feature + ": 0.001mm");
- expression_should_be_parseable(feature + ": 100000px");
- expression_should_not_be_parseable(feature + ": -1px");
- expression_should_not_be_parseable("min-" + feature + ": -1px");
- expression_should_not_be_parseable("max-" + feature + ": -1px");
- expression_should_not_be_parseable(feature + ": -0.00001mm");
- expression_should_not_be_parseable(feature + ": -100000em");
expression_should_not_be_parseable("min-" + feature);
expression_should_not_be_parseable("max-" + feature);
+ for (let separator of separators) {
+ expression_should_be_parseable(feature + " " + separator + " 0");
+ expression_should_be_parseable(feature + " " + separator + " 0px");
+ expression_should_be_parseable(feature + " " + separator + " 0em");
+ expression_should_be_parseable(feature + " " + separator + " -0");
+ expression_should_be_parseable(feature + " " + separator + " -0cm");
+ expression_should_be_parseable(feature + " " + separator + " 1px");
+ expression_should_be_parseable(feature + " " + separator + " 0.001mm");
+ expression_should_be_parseable(feature + " " + separator + " 100000px");
+ if (separator == ":") {
+ expression_should_be_parseable("min-" + feature + " " + separator + " -0");
+ expression_should_be_parseable("max-" + feature + " " + separator + " -0");
+ } else {
+ expression_should_not_be_parseable("min-" + feature + " " + separator + " -0");
+ expression_should_not_be_parseable("max-" + feature + " " + separator + " -0");
+ }
+ expression_should_not_be_parseable(feature + " " + separator + " -1px");
+ expression_should_not_be_parseable("min-" + feature + " " + separator + " -1px");
+ expression_should_not_be_parseable("max-" + feature + " " + separator + " -1px");
+ expression_should_not_be_parseable(feature + " " + separator + " -0.00001mm");
+ expression_should_not_be_parseable(feature + " " + separator + " -100000em");
+ }
}
var content_div = document.getElementById("content");
@@ -142,15 +162,21 @@ function run() {
iframe_style.height = height_val + "px";
var device_width = window.screen.width;
var device_height = window.screen.height;
- features = { "width": width_val,
- "height": height_val,
- "device-width": device_width,
- "device-height": device_height };
+ features = {
+ "width": width_val,
+ "height": height_val,
+ "device-width": device_width,
+ "device-height": device_height
+ };
for (feature in features) {
var value = features[feature];
should_apply("all and (" + feature + ": " + value + "px)");
+ should_apply("all and (" + feature + " = " + value + "px)");
should_not_apply("all and (" + feature + ": " + (value + 1) + "px)");
should_not_apply("all and (" + feature + ": " + (value - 1) + "px)");
+ should_not_apply("all and (" + feature + " = " + (value + 1) + "px)");
+ should_not_apply("all and (" + feature + " = " + (value - 1) + "px)");
+
should_apply("all and (min-" + feature + ": " + value + "px)");
should_not_apply("all and (min-" + feature + ": " + (value + 1) + "px)");
should_apply("all and (min-" + feature + ": " + (value - 1) + "px)");
@@ -165,6 +191,21 @@ function run() {
(Math.ceil(value/em_size) + 1) + "em)");
should_not_apply("all and (max-" + feature + ": " +
(Math.floor(value/em_size) - 1) + "em)");
+
+ should_apply("(" + feature + " <= " + value + "px)");
+ should_apply("(" + feature + " >= " + value + "px)");
+ should_not_apply("(" + feature + " < " + value + "px)");
+ should_not_apply("(" + feature + " > " + value + "px)");
+
+ should_apply("(" + feature + " < " + (value + 1) + "px)");
+ should_apply("(" + feature + " <= " + (value + 1) + "px)");
+ should_not_apply("(" + feature + " > " + (value + 1) + "px)");
+ should_not_apply("(" + feature + " >= " + (value + 1) + "px)");
+
+ should_apply("(" + feature + " > " + (value - 1) + "px)");
+ should_apply("(" + feature + " >= " + (value - 1) + "px)");
+ should_not_apply("(" + feature + " < " + (value - 1) + "px)");
+ should_not_apply("(" + feature + " <= " + (value - 1) + "px)");
}
iframe_style.width = "0";
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/background/box-shadow-currentcolor-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/background/box-shadow-currentcolor-ref.html
new file mode 100644
index 00000000000..4bb4cbd4178
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/background/box-shadow-currentcolor-ref.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>CSS Reftest Reference</title>
+ <link rel="author" title="Dan Glastonbury" href="mailto:dglastonbury@mozilla.com" />
+ <style type="text/css">
+ div {
+ padding: 40px;
+ }
+
+ p {
+ padding: 2em;
+ border: 1px solid limegreen;
+ box-shadow: 10px 5px 5px limegreen;
+ }
+ </style>
+ </head>
+ <body>
+ <!-- content of test -->
+ <div>
+ <p style="color: limegreen">
+ This box should have a green box shadow.
+ </p>
+ </div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/background/box-shadow-currentcolor.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/background/box-shadow-currentcolor.html
new file mode 100644
index 00000000000..cdb0b9d9fc2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/background/box-shadow-currentcolor.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>CSS Test: 'box-shadow' respects 'currentcolor'</title>
+ <link rel="author" title="Dan Glastonbury" href="mailto:dglastonbury@mozilla.com" />
+ <link rel="help" href="https://www.w3.org/TR/css-backgrounds-3/#the-box-shadow" />
+ <link rel="help" href="https://www.w3.org/TR/css-color-3/#currentcolor" />
+ <link rel="match" href="box-shadow-currentcolor-ref.html" />
+ <style type="text/css">
+ div {
+ color: transparent;
+ padding: 40px;
+ box-shadow: 10px 5px 5px currentcolor;
+ }
+
+ p {
+ padding: 2em;
+ border: 1px solid currentcolor;
+ box-shadow: inherit;
+ }
+ </style>
+ </head>
+ <body>
+ <!-- content of test -->
+ <div>
+ <p style="color: limegreen">
+ This box should have a green box shadow.
+ </p>
+ </div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/background/reftest.list b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/background/reftest.list
index 541e9872beb..e60bdb947f5 100644
--- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/background/reftest.list
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/background/reftest.list
@@ -36,3 +36,6 @@
# background-attachment test cases
== background-attachment-fixed-inside-transform-1.html background-attachment-fixed-inside-transform-1-ref.html
+
+# box-shadow with currentcolor test cases
+== box-shadow-currentcolor.html box-shadow-currentcolor-ref.html \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001-ref.html
index 9cffaf9a398..629cb939e01 100644
--- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001-ref.html
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001-ref.html
@@ -5,9 +5,6 @@
<title>CSS Reftest Reference</title>
<link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
<style>
- body {
- margin: 0;
- }
#a {
width: 150px;
height: 150px;
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001.html
index 5b320e8ae41..0f7874b71e0 100644
--- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001.html
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001.html
@@ -7,9 +7,6 @@
<link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
<link rel="match" href="contain-paint-clip-001-ref.html">
<style>
- body {
- margin: 0;
- }
.root {
contain: paint;
width: 100px;
@@ -31,11 +28,6 @@
top: -25px;
left: -25px;
}
- .c {
- width: 100px;
- height: 100px;
- background: red;
- }
.background {
position: absolute;
top: 0;
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002-ref.html
index 7b0ca5ec555..3baefff57cf 100644
--- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002-ref.html
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002-ref.html
@@ -6,9 +6,6 @@
<link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
<link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
<style>
- body {
- margin: 0;
- }
.root {
overflow: hidden;
width: 100px;
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002.html
index eb7c8b32678..b6fbc9c2927 100644
--- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002.html
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-002.html
@@ -8,9 +8,6 @@
<link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
<link rel="match" href="contain-paint-clip-002-ref.html">
<style>
- body {
- margin: 0;
- }
.root {
contain: paint;
width: 100px;
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003-ref.html
index 34e79489af7..425844ae476 100644
--- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003-ref.html
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003-ref.html
@@ -5,9 +5,6 @@
<title>CSS Reftest Reference</title>
<link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
<style>
- body {
- margin: 0;
- }
.root {
overflow-x: scroll;
overflow-y: scroll;
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003.html
index e02dae14f02..ed270e9e0cc 100644
--- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003.html
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-003.html
@@ -7,9 +7,6 @@
<link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
<link rel="match" href="contain-paint-clip-003-ref.html">
<style>
- body {
- margin: 0;
- }
.root {
contain: paint;
overflow-y: scroll;
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004-ref.html
index 4eda898abed..0861c68cbe3 100644
--- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004-ref.html
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004-ref.html
@@ -5,9 +5,6 @@
<title>CSS Reftest Reference</title>
<link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
<style>
- body {
- margin: 0;
- }
.root {
overflow-y: scroll;
overflow-x: scroll;
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004.html
index e3ed254761c..844a59ad691 100644
--- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004.html
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-004.html
@@ -7,9 +7,6 @@
<link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
<link rel="match" href="contain-paint-clip-004-ref.html">
<style>
- body {
- margin: 0;
- }
.root {
contain: paint;
overflow-x: scroll;
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-005.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-005.html
index dc92202640f..b2766e374e4 100644
--- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-005.html
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-005.html
@@ -8,11 +8,9 @@
<link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
<link rel="match" href="contain-paint-clip-003-ref.html">
<style>
- body {
- margin: 0;
- }
ul {
padding: 0;
+ margin: 0;
}
.root {
contain: paint;
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006-ref.html
index f3823949600..ecd22b307a9 100644
--- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006-ref.html
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006-ref.html
@@ -6,9 +6,6 @@
<link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
<link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
<style>
- body {
- margin: 0;
- }
.root {
width: 100px;
height: 100px;
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006.html
index f6ffdc3928e..14d23f43134 100644
--- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006.html
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-006.html
@@ -8,9 +8,6 @@
<link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
<link rel="match" href="contain-paint-clip-006-ref.html">
<style>
- body {
- margin: 0;
- }
.root {
contain: paint;
width: 100px;
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001-ref.html
index 422706802a2..8861d19f888 100644
--- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001-ref.html
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001-ref.html
@@ -5,9 +5,6 @@
<title>CSS Reftest Reference</title>
<link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
<style>
- body {
- margin: 0;
- }
#a {
width: 100px;
height: 100px;
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001.html
index fc04df008a2..ef564069eb1 100644
--- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001.html
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-absolute-001.html
@@ -7,9 +7,6 @@
<link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
<link rel="match" href="contain-paint-containing-block-absolute-001-ref.html">
<style>
- body {
- margin: 0;
- }
#a {
contain: paint;
width: 100px;
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001-ref.html
index 422706802a2..8861d19f888 100644
--- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001-ref.html
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001-ref.html
@@ -5,9 +5,6 @@
<title>CSS Reftest Reference</title>
<link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
<style>
- body {
- margin: 0;
- }
#a {
width: 100px;
height: 100px;
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001.html
index 60f180beaab..fc5ede156e9 100644
--- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001.html
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-containing-block-fixed-001.html
@@ -7,9 +7,6 @@
<link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
<link rel="match" href="contain-paint-containing-block-fixed-001-ref.html">
<style>
- body {
- margin: 0;
- }
#a {
contain: paint;
width: 100px;
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001-ref.html
index 5a70a21c176..ceff7f4569e 100644
--- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001-ref.html
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001-ref.html
@@ -5,9 +5,6 @@
<title>CSS Reftest Reference</title>
<link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
<style>
- body {
- margin: 0;
- }
#left {
float: left;
height: 50px;
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001.html
index 06a59f2e58d..e5827209d71 100644
--- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001.html
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-float-001.html
@@ -7,9 +7,6 @@
<link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
<link rel="match" href="contain-paint-formatting-context-float-001-ref.html">
<style>
- body {
- margin: 0;
- }
#left {
float: left;
height: 50px;
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001-ref.html
index 6dde7bc90e1..1976f71bf55 100644
--- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001-ref.html
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001-ref.html
@@ -5,9 +5,6 @@
<title>CSS Reftest Test</title>
<link rel="author" title="Kyle Zentner" href="mailto:zentner.kyle@gmail.com">
<style>
- body {
- margin: 0;
- }
#a {
background: blue;
margin: 10px;
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001.html
index fdc0bb7f15e..d3746422865 100644
--- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001.html
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-formatting-context-margin-001.html
@@ -7,9 +7,6 @@
<link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
<link rel="match" href="contain-paint-formatting-context-margin-001-ref.html">
<style>
- body {
- margin: 0;
- }
#a {
contain: paint;
background: blue;
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001-ref.html
new file mode 100644
index 00000000000..d23678941e2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001-ref.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset=utf-8>
+ <title>CSS Reftest Reference</title>
+ <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+ <style>
+ tr {
+ z-index: 10;
+ }
+ th {
+ background-color: blue;
+ padding-left: 50px;
+ }
+ caption {
+ position: fixed;
+ background-color: yellow;
+ z-index: 2;
+ }
+ </style>
+ </head>
+ <body>
+ <table>
+ <caption>PASS</caption>
+ <tr>
+ <th>&emsp;</th>
+ </tr>
+ </table>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001a.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001a.html
new file mode 100644
index 00000000000..283b8b941a4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001a.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset=utf-8>
+ <title>CSS-contain test: paint containment on internal table elements except table-cell.</title>
+ <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+ <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
+ <link rel="match" href="contain-paint-ignored-cases-internal-table-001-ref.html">
+ <meta name="assert" content="Paint containment should not apply to internal table elements except table-cell. This test testes only the tr element, and confirms contain:paint does not create a stacking context.">
+ <style>
+ tr {
+ contain: paint;
+ z-index: 10;
+ }
+ th {
+ background-color: blue;
+ padding-left: 50px;
+ }
+ caption {
+ position: fixed;
+ background-color: yellow;
+ z-index: 2;
+ }
+ </style>
+ </head>
+ <body>
+ <table>
+ <caption>PASS</caption>
+ <tr>
+ <th>&emsp;</th>
+ </tr>
+ </table>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001b.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001b.html
new file mode 100644
index 00000000000..cff28b8b5c2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001b.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset=utf-8>
+ <title>CSS-contain test: paint containment on internal table elements except table-cell.</title>
+ <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+ <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
+ <link rel="match" href="contain-paint-ignored-cases-internal-table-001-ref.html">
+ <meta name="assert" content="Paint containment should not apply to internal table elements except table-cell. This test testes only the tbody element, and confirms contain:paint does not create a stacking context.">
+ <style>
+ tbody {
+ contain: paint;
+ z-index: 10;
+ }
+ th {
+ background-color: blue;
+ padding-left: 50px;
+ }
+ caption {
+ position: fixed;
+ background-color: yellow;
+ z-index: 2;
+ }
+ </style>
+ </head>
+ <body>
+ <table>
+ <caption>PASS</caption>
+ <tbody>
+ <tr>
+ <th>&emsp;</th>
+ </tr>
+ </tbody>
+ </table>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001-ref.html
new file mode 100644
index 00000000000..b4513709e51
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001-ref.html
@@ -0,0 +1,57 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>CSS Reftest Reference</title>
+ <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+ <style>
+ div {
+ position: relative;
+ width: 100px;
+ }
+ #div1,
+ #div3 {
+ background-color: #cfc;
+ height: 100px;
+ }
+ #div1 {
+ z-index: 5;
+ }
+ #div2 {
+ display: contents;
+ background-color: #fdd;
+ height: 100px;
+ top: -20px;
+ }
+ #div2_1 {
+ background-color: #ffc;
+ z-index: 6;
+ top: -10px;
+ height: 100px;
+ }
+ #div2_2 {
+ z-index: 3;
+ position: absolute;
+ top: -15px;
+ width: 40px;
+ height: 300px;
+ background-color: #ddf;
+ }
+ #div3 {
+ z-index: 2;
+ top: -50px;
+ }
+ </style>
+</head>
+<body>
+ <div id="div1"></div>
+
+ <div id="div2">
+ <div id="div2_1"></div>
+
+ <div id="div2_2"></div>
+ </div>
+
+ <div id="div3"></div>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001.html
new file mode 100644
index 00000000000..4b9c9072099
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-no-principal-box-001.html
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>CSS Test: 'contain: paint' with 'display: contents'.</title>
+ <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+ <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-paint">
+ <link rel="match" href="contain-paint-ignored-cases-no-principal-box-001-ref.html">
+ <meta name="assert" content="Contain:paint should have no effect when no principle box is generated.">
+ <style>
+ div {
+ position: relative;
+ width: 100px;
+ }
+ #div1,
+ #div3 {
+ background-color: #cfc;
+ height: 100px;
+ }
+ #div1 {
+ z-index: 5;
+ }
+ #div2 {
+ display: contents;
+ contain: paint;
+ background-color: #fdd;
+ height: 100px;
+ top: -20px;
+ }
+ #div2_1 {
+ background-color: #ffc;
+ z-index: 6;
+ top: -10px;
+ height: 100px;
+ }
+ #div2_2 {
+ z-index: 3;
+ position: absolute;
+ top: -15px;
+ width: 40px;
+ height: 300px;
+ background-color: #ddf;
+ }
+ #div3 {
+ z-index: 2;
+ top: -50px;
+ }
+ </style>
+</head>
+<body>
+ <div id="div1"></div>
+
+ <div id="div2">
+ <div id="div2_1"></div>
+
+ <div id="div2_2"></div>
+ </div>
+
+ <div id="div3"></div>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001-ref.html
new file mode 100644
index 00000000000..5df0b246292
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001-ref.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<html lang=en>
+ <head>
+ <meta charset=utf-8>
+ <title>CSS Reftest Reference</title>
+ <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+ <style>
+ rb,
+ rbc,
+ rt,
+ rtc {
+ background-color: yellow;
+ font-size: 2em;
+ }
+ rbc {
+ display: ruby-base-container;
+ }
+ .contained {
+ width: 50px;
+ height: 10px;
+ background-color: blue;
+ top: 0;
+ left: 0;
+ position: fixed;
+ }
+ .wrapper {
+ display: inline-block;
+ }
+ </style>
+ </head>
+ <body>
+ <div class="wrapper"><ruby><rt>&emsp;<div class="contained"></div></rt></ruby></div>
+ <div class="wrapper"><ruby><rtc>&emsp;<div class="contained"></div></rtc></ruby></div>
+ <div class="wrapper"><ruby><rb>&emsp;<div class="contained"></div></rb></ruby></div>
+ <div class="wrapper"><ruby><rbc>&emsp;<div class="contained"></div></rbc></ruby></div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001.html
new file mode 100644
index 00000000000..71764e18558
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-containing-block-001.html
@@ -0,0 +1,41 @@
+<!doctype html>
+<html lang=en>
+ <head>
+ <meta charset=utf-8>
+ <title>CSS-contain test: paint containment on internal ruby elements.</title>
+ <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+ <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
+ <link rel="match" href="contain-paint-ignored-cases-ruby-containing-block-001-ref.html">
+ <meta name="assert" content="Paint containment should not apply to ruby base, ruby base container, ruby text, and ruby text container. This test confirms contain:paint does not act as a containing block for fixed positioned descendants.">
+ <style>
+ rb,
+ rbc,
+ rt,
+ rtc {
+ contain: paint;
+ background-color: yellow;
+ font-size: 2em;
+ }
+ rbc {
+ display: ruby-base-container;
+ }
+ .contained {
+ width: 50px;
+ height: 10px;
+ background-color: blue;
+ top: 0;
+ left: 0;
+ position: fixed;
+ }
+ .wrapper {
+ display: inline-block;
+ }
+ </style>
+ </head>
+ <body>
+ <div class="wrapper"><ruby><rt>&emsp;<div class="contained"></div></rt></ruby></div>
+ <div class="wrapper"><ruby><rtc>&emsp;<div class="contained"></div></rtc></ruby></div>
+ <div class="wrapper"><ruby><rb>&emsp;<div class="contained"></div></rb></ruby></div>
+ <div class="wrapper"><ruby><rbc>&emsp;<div class="contained"></div></rbc></ruby></div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001-ref.html
new file mode 100644
index 00000000000..02f7a406656
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001-ref.html
@@ -0,0 +1,52 @@
+<!doctype html>
+<html lang=en>
+ <head>
+ <meta charset=utf-8>
+ <title>CSS Reftest Reference</title>
+ <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+ <style>
+ div {
+ position: relative;
+ }
+ rbc {
+ display: ruby-base-container;
+ }
+ .contained {
+ z-index: 5;
+ width: 70px;
+ height: 10px;
+ background-color: blue;
+ margin-left: -25px;
+ }
+ .background {
+ display: inline-block;
+ background-color: yellow;
+ height: 50px;
+ width: 50px;
+ position: fixed;
+ z-index: 2;
+ }
+ .group {
+ display: inline-block;
+ }
+ </style>
+ </head>
+ <body>
+ <div class="group">
+ <div class="background"></div>
+ <ruby><rb>&emsp;<div class="contained"></div></rb></ruby>
+ </div>
+ <div class="group">
+ <div class="background"></div>
+ <ruby><rbc>&emsp;<div class="contained"></div></rbc></ruby>
+ </div>
+ <div class="group">
+ <div class="background"></div>
+ <ruby><rt>&emsp;<div class="contained"></div></rt></ruby>
+ </div>
+ <div class="group">
+ <div class="background"></div>
+ <ruby><rtc>&emsp;<div class="contained"></div></rtc></ruby>
+ </div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001.html
new file mode 100644
index 00000000000..1f1c147f94f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ruby-stacking-and-clipping-001.html
@@ -0,0 +1,60 @@
+<!doctype html>
+<html lang=en>
+ <head>
+ <meta charset=utf-8>
+ <title>CSS-contain test: paint containment on internal ruby elements.</title>
+ <link rel="author" title="Yusuf Sermet" href="mailto:ysermet@mozilla.com">
+ <link rel="help" href="http://www.w3.org/TR/css-containment-1/#containment-paint">
+ <link rel="match" href="contain-paint-ignored-cases-ruby-stacking-and-clipping-001-ref.html">
+ <meta name="assert" content="Paint containment should not apply to ruby base, ruby base container, ruby text, and ruby text container. This test confirms that contain:paint does not create a stacking context and does not apply overflow clipping.">
+ <style>
+ div {
+ position: relative;
+ }
+ rb,
+ rbc,
+ rt,
+ rtc {
+ contain: paint;
+ }
+ rbc {
+ display: ruby-base-container;
+ }
+ .contained {
+ z-index: 5;
+ width: 70px;
+ height: 10px;
+ background-color: blue;
+ margin-left: -25px;
+ }
+ .background {
+ background-color: yellow;
+ height: 50px;
+ width: 50px;
+ position: fixed;
+ z-index: 2;
+ }
+ .group {
+ display: inline-block;
+ }
+ </style>
+ </head>
+ <body>
+ <div class="group">
+ <div class="background"></div>
+ <ruby><rb>&emsp;<div class="contained"></div></rb></ruby>
+ </div>
+ <div class="group">
+ <div class="background"></div>
+ <ruby><rbc>&emsp;<div class="contained"></div></rbc></ruby>
+ </div>
+ <div class="group">
+ <div class="background"></div>
+ <ruby><rt>&emsp;<div class="contained"></div></rt></ruby>
+ </div>
+ <div class="group">
+ <div class="background"></div>
+ <ruby><rtc>&emsp;<div class="contained"></div></rtc></ruby>
+ </div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/reftest.list b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/reftest.list
index d503f7e5c66..7e762eceb77 100644
--- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/reftest.list
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/contain/reftest.list
@@ -9,5 +9,10 @@
== contain-paint-containing-block-fixed-001.html contain-paint-containing-block-fixed-001-ref.html
== contain-paint-formatting-context-float-001.html contain-paint-formatting-context-float-001-ref.html
== contain-paint-formatting-context-margin-001.html contain-paint-formatting-context-margin-001-ref.html
+== contain-paint-ignored-cases-internal-table-001a.html contain-paint-ignored-cases-internal-table-001-ref.html
+== contain-paint-ignored-cases-internal-table-001b.html contain-paint-ignored-cases-internal-table-001-ref.html
+== contain-paint-ignored-cases-no-principal-box-001.html contain-paint-ignored-cases-no-principal-box-001-ref.html
+== contain-paint-ignored-cases-ruby-containing-block-001.html contain-paint-ignored-cases-ruby-containing-block-001-ref.html
+== contain-paint-ignored-cases-ruby-stacking-and-clipping-001.html contain-paint-ignored-cases-ruby-stacking-and-clipping-001-ref.html
== contain-paint-stacking-context-001a.html contain-paint-stacking-context-001-ref.html
== contain-paint-stacking-context-001b.html contain-paint-stacking-context-001-ref.html
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/float-should-push-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/float-should-push-ref.html
new file mode 100644
index 00000000000..6a349fd359f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/float-should-push-ref.html
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML>
+<meta charset="utf-8">
+<title>Reference: Ensure shape-outside floats that don't cover their margin-rect affect layout properly</title>
+<link rel="author" title="Brad Werth" href="mailto:bwerth@mozilla.com">
+<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
+
+<style>
+ body {
+ margin: 0px;
+ line-height: 1;
+ }
+
+ .container {
+ width: 300px;
+ height: 100px;
+ background: lightgray;
+ }
+
+ .too-wide {
+ display: inline-block;
+ width: 250px;
+ height: 20px;
+ background: lightblue;
+ clear: left;
+ }
+
+ .shape {
+ background: black;
+ width: 100px;
+ height: 100px;
+ float: left;
+ }
+
+ .spacer {
+ clear: left;
+ height: 30px;
+ }
+
+ .inset {
+ background: orange;
+ }
+
+ .polygon {
+ background: pink;
+ }
+
+ .image {
+ background: brown;
+ }
+
+</style>
+
+<p>All light blue bars should be pushed below the square floats, regardless of how those floats are defined.</p>
+
+<div class="container">
+<div class="shape inset">inset(1px) at top</div>
+<span class="too-wide"></span>
+</div>
+
+<div class="spacer"></div>
+
+<div class="container">
+<div class="shape polygon">polygon</div>
+<span class="too-wide"></span>
+</div>
+
+<div class="spacer"></div>
+
+<div class="container">
+<div class="shape image">image</div>
+<span class="too-wide"></span>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/float-should-push.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/float-should-push.html
new file mode 100644
index 00000000000..c6bcfe576b6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/float-should-push.html
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML>
+<meta charset="utf-8">
+<title>Ensure shape-outside floats that don't cover their margin-rect affect layout properly</title>
+<link rel="author" title="Brad Werth" href="mailto:bwerth@mozilla.com">
+<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
+<link rel="help" href="https://drafts.csswg.org/css-shapes-1/">
+<link rel="match" href="float-should-push-ref.html">
+<meta name="assert" content="Test that a too-wide inline block clear floats defined by shape-outside shapes that don't reach the top of the margin rect.">
+
+<style>
+ body {
+ margin: 0px;
+ line-height: 1;
+ }
+
+ .container {
+ width: 300px;
+ height: 100px;
+ background: lightgray;
+ }
+
+ .too-wide {
+ display: inline-block;
+ width: 250px;
+ height: 20px;
+ background: lightblue;
+ }
+
+ .shape {
+ background: black;
+ width: 100px;
+ height: 100px;
+ float: left;
+ }
+
+ .spacer {
+ clear: left;
+ height: 30px;
+ }
+
+ .inset {
+ background: orange;
+ shape-outside: inset(1px 0px 0px 0px);
+ }
+
+ .polygon {
+ background: pink;
+ shape-outside: polygon(0px 0px, 100px 0px, 100px 100px, 0px 100px);
+ }
+
+ .image {
+ background: brown;
+ shape-outside: linear-gradient(0deg, black, black 100%);
+ }
+
+</style>
+
+<p>All light blue bars should be pushed below the square floats, regardless of how those floats are defined.</p>
+
+<div class="container">
+<div class="shape inset">inset(1px) at top</div>
+<span class="too-wide"></span>
+</div>
+
+<div class="spacer"></div>
+
+<div class="container">
+<div class="shape polygon">polygon</div>
+<span class="too-wide"></span>
+</div>
+
+<div class="spacer"></div>
+
+<div class="container">
+<div class="shape image">image</div>
+<span class="too-wide"></span>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/reftest.list b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/reftest.list
index 14933dcd024..75a318005eb 100644
--- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/reftest.list
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/reftest.list
@@ -106,6 +106,8 @@
# Tests of shape-outside layout behavior with too-wide inline elements
== float-retry-push-circle.html float-retry-push-ref.html
+# The next test offsets a 250px wide element up to one pixel due to small offsets in gradient generation.
== float-retry-push-image.html float-retry-push-ref.html
== float-retry-push-inset.html float-retry-push-ref.html
== float-retry-push-polygon.html float-retry-push-ref.html
+== float-should-push.html float-should-push-ref.html
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/reftest.list b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/reftest.list
index a6e18f3f389..8d1b308ec9c 100644
--- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/reftest.list
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/reftest.list
@@ -130,3 +130,6 @@
== text-emphasis-line-height-004d.html text-emphasis-line-height-004-ref.html
# END tests from support/generate-text-emphasis-line-height-tests.py
== text-emphasis-line-height-001z.html text-emphasis-line-height-001-ref.html
+
+# text-shadow 'currentcolor' test cases
+== text-shadow-currentcolor.html text-shadow-currentcolor-ref.html \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-shadow-currentcolor-ref.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-shadow-currentcolor-ref.html
new file mode 100644
index 00000000000..943c750f6f2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-shadow-currentcolor-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>CSS Reftest Reference</title>
+ <link rel="author" title="Dan Glastonbury" href="mailto:dglastonbury@mozilla.com" />
+ <style type="text/css">
+ p {
+ text-shadow: 0 0 10px green;
+ color: green;
+ font: 1.5em Georgia, serif;
+ }
+ </style>
+ </head>
+ <body>
+ <!-- content of test -->
+ <p>This text should have a green drop shadow</p>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-shadow-currentcolor.html b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-shadow-currentcolor.html
new file mode 100644
index 00000000000..34a35cd6397
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/text-decor-3/text-shadow-currentcolor.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>CSS Test: 'text-shadow' respects 'currentcolor'</title>
+ <link rel="author" title="Dan Glastonbury" href="mailto:dglastonbury@mozilla.com" />
+ <link rel="help" href="https://www.w3.org/TR/css-text-decor-3/#text-shadow-property" />
+ <link rel="help" href="https://www.w3.org/TR/css-color-3/#currentcolor" />
+ <link rel="match" href="text-shadow-currentcolor-ref.html" />
+ <style type="text/css">
+ body {
+ color: red;
+ text-shadow: 0 0 10px currentcolor;
+ }
+
+ p {
+ text-shadow: inherit;
+ color: green;
+ font: 1.5em Georgia, serif;
+ }
+ </style>
+ </head>
+ <body>
+ <!-- content of test -->
+ <p>This text should have a green drop shadow</p>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/docs/_writing-tests/assumptions.md b/tests/wpt/web-platform-tests/docs/_writing-tests/assumptions.md
index 6e12f96a6ef..d1ab75b0f1d 100644
--- a/tests/wpt/web-platform-tests/docs/_writing-tests/assumptions.md
+++ b/tests/wpt/web-platform-tests/docs/_writing-tests/assumptions.md
@@ -16,8 +16,13 @@ tests can freely rely on these assumptions being true:
* The user stylesheet is empty (except where indicated by the tests).
* The device is interactive and uses scroll bars.
* The device has the Ahem font installed.
- * The HTML `div` element is assigned `display: block;` and no other
- property declaration.
+ * The HTML `div` element is assigned `display: block;`, the
+ `unicode-bidi` property may be declared, and no other property
+ declarations.
+ <!-- unicode-bidi: isolate should be required; we currently don't
+ assume this because Chrome and Safari are yet to ship this: see
+ https://bugs.chromium.org/p/chromium/issues/detail?id=296863 and
+ https://bugs.webkit.org/show_bug.cgi?id=65617 -->
* The HTML `span` element is assigned `display: inline;` and no other
property declaration.
* The HTML `p` element is assigned `display: block;`
diff --git a/tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.md b/tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.md
index 737804741bd..92a9536b690 100644
--- a/tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.md
+++ b/tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.md
@@ -700,6 +700,11 @@ Relies on `===`, distinguishes between `-0` and `+0`, and has a specific check f
asserts that `expected` is an Array, and `actual` is equal to one of the
members i.e. `expected.indexOf(actual) != -1`
+### `assert_object_equals(actual, expected, description)`
+asserts that `actual` is an object and not null and that all enumerable
+properties on `actual` are own properties on `expected` with the same values,
+recursing if the value is an object and not null.
+
### `assert_array_equals(actual, expected, description)`
asserts that `actual` and `expected` have the same
length and the value of each indexed property in `actual` is the strictly equal
diff --git a/tests/wpt/web-platform-tests/dom/nodes/attributes.html b/tests/wpt/web-platform-tests/dom/nodes/attributes.html
index 486cafaad9f..21188933ea4 100644
--- a/tests/wpt/web-platform-tests/dom/nodes/attributes.html
+++ b/tests/wpt/web-platform-tests/dom/nodes/attributes.html
@@ -136,6 +136,12 @@ test(function() {
attr_is(el.attributes[0], "2", "bat", "foo", "foo", "foo:bat")
}, "toggleAttribute should set the attribute with the given qualified name")
+test(function() {
+ var el = document.createElement("foo")
+ el.style = "color: red; background-color: green"
+ assert_equals(el.toggleAttribute("style"), false)
+}, "Toggling element with inline style should make inline style disappear")
+
// setAttribute exhaustive tests
// Step 1
test(function() {
diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted-segmented.https.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted-segmented.https.html
new file mode 100644
index 00000000000..f63fd51ca80
--- /dev/null
+++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted-segmented.https.html
@@ -0,0 +1,60 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset=utf-8>
+ <title>Encrypted Media Extensions: Successful Playback, Temporary session with Clear Key, mp4, clear then encrypted using segmented media</title>
+ <link rel="help" href="https://w3c.github.io/encrypted-media/">
+
+ <!-- Web Platform Test Harness scripts -->
+ <script src=/resources/testharness.js></script>
+ <script src=/resources/testharnessreport.js></script>
+
+ <!-- Helper scripts for Encrypted Media Extensions tests -->
+ <script src=/encrypted-media/util/utils.js></script>
+ <script src=/encrypted-media/util/fetch.js></script>
+ <script src=/encrypted-media/util/testmediasource.js></script>
+ <script src=/encrypted-media/util/utf8.js></script>
+
+ <!-- Content metadata -->
+ <script src=/encrypted-media/content/content-metadata.js></script>
+
+ <!-- Message handler for Clear Key keysystem -->
+ <script src=/encrypted-media/util/clearkey-messagehandler.js></script>
+
+ <!-- The script for this specific test -->
+ <script src=/encrypted-media/scripts/playback-temporary-encrypted-clear-segmented-sources.js></script>
+
+ </head>
+ <body>
+ <div id='log'></div>
+
+ <div id='video'>
+ <video id="videoelement" width="200px"></video>
+ </div>
+
+ <script>
+ var encryptedcontentitem = content['mp4-basic'],
+ clearcontentitem = content['mp4-clear'],
+ handler = new MessageHandler('org.w3.clearkey', encryptedcontentitem),
+ configEncrypted = { video: document.getElementById('videoelement'),
+ keysystem: 'org.w3.clearkey',
+ messagehandler: handler.messagehandler,
+ audioPath: encryptedcontentitem.audio.path,
+ videoPath: encryptedcontentitem.video.path,
+ audioType: encryptedcontentitem.audio.type,
+ videoType: encryptedcontentitem.video.type,
+ duration: 4,
+ initDataType: 'keyids',
+ initData: getInitData(encryptedcontentitem, 'keyids'),
+ },
+ configClear = { audioPath: clearcontentitem.audio.path,
+ videoPath: clearcontentitem.video.path,
+ audioType: clearcontentitem.audio.type,
+ videoType: clearcontentitem.video.type,
+ duration: 4,
+ };
+
+ runTest(configEncrypted,configClear);
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-encrypted-clear-segmented-sources.js b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-encrypted-clear-segmented-sources.js
new file mode 100644
index 00000000000..8f5af2cd6bd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/encrypted-media/scripts/playback-temporary-encrypted-clear-segmented-sources.js
@@ -0,0 +1,109 @@
+function runTest(configEncrypted,configClear,qualifier) {
+
+ var testname = testnamePrefix(qualifier, configEncrypted.keysystem)
+ + ', temporary, '
+ + /video\/([^;]*)/.exec(configEncrypted.videoType)[1]
+ + ', playback, encrypted and clear sources in separate segments';
+
+ var configuration = { initDataTypes: [ configEncrypted.initDataType ],
+ audioCapabilities: [ { contentType: configEncrypted.audioType } ],
+ videoCapabilities: [ { contentType: configEncrypted.videoType } ],
+ sessionTypes: [ 'temporary' ] };
+
+ async_test(function(test) {
+ var didAppendEncrypted = false,
+ _video = configEncrypted.video,
+ _mediaKeys,
+ _mediaKeySession,
+ _mediaSource,
+ _sourceBuffer;
+
+ function onFailure(error) {
+ forceTestFailureFromPromise(test, error);
+ }
+
+ function onVideoError(event) {
+ var message = (_video.error || {}).message || 'Got unknown error from <video>';
+ forceTestFailureFromPromise(test, new Error(message));
+ }
+
+ function onMessage(event) {
+ assert_equals(event.target, _mediaKeySession);
+ assert_true(event instanceof window.MediaKeyMessageEvent);
+ assert_equals(event.type, 'message');
+ assert_in_array(event.messageType, ['license-request', 'individualization-request']);
+
+ configEncrypted.messagehandler(event.messageType, event.message).then(function(response) {
+ return _mediaKeySession.update(response);
+ }).catch(onFailure);
+ }
+
+ function onEncrypted(event) {
+ assert_equals(event.target, _video);
+ assert_true(event instanceof window.MediaEncryptedEvent);
+ assert_equals(event.type, 'encrypted');
+
+ var initDataType = configEncrypted.initDataType || event.initDataType;
+ var initData = configEncrypted.initData || event.initData;
+
+ _mediaKeySession = _mediaKeys.createSession('temporary');
+ waitForEventAndRunStep('message', _mediaKeySession, onMessage, test);
+ _mediaKeySession.generateRequest(initDataType, initData).catch(onFailure);
+ }
+
+ function onPlaying(event) {
+ // Not using waitForEventAndRunStep() to avoid too many
+ // EVENT(onTimeUpdate) logs.
+ _video.addEventListener('timeupdate', onTimeupdate, true);
+ }
+
+ function onTimeupdate(event) {
+ if (_video.currentTime > (configEncrypted.duration || 1) + (configClear.duration || 1)) {
+ _video.pause();
+ test.done();
+ }
+ if (_video.currentTime > 1 && !didAppendEncrypted) {
+ didAppendEncrypted = true;
+ _sourceBuffer.timestampOffset = configClear.duration;
+ fetchAndAppend(configEncrypted.videoPath).then(function() {
+ _mediaSource.endOfStream();
+ }).catch(onFailure);
+ }
+ }
+
+ function fetchAndAppend(path) {
+ return fetch(path).then(function(response) {
+ if (!response.ok) throw new Error('Resource fetch failed');
+ return response.arrayBuffer();
+ }).then(function(data) {
+ return new Promise(function(resolve, reject) {
+ _sourceBuffer.appendBuffer(data);
+ _sourceBuffer.addEventListener('updateend', resolve);
+ _sourceBuffer.addEventListener('error', reject);
+ });
+ });
+ }
+
+ _video.addEventListener('error', onVideoError);
+ navigator.requestMediaKeySystemAccess(configEncrypted.keysystem, [configuration]).then(function(access) {
+ return access.createMediaKeys();
+ }).then(function(mediaKeys) {
+ _mediaKeys = mediaKeys;
+ return _video.setMediaKeys(_mediaKeys);
+ }).then(function(){
+ waitForEventAndRunStep('encrypted', _video, onEncrypted, test);
+ waitForEventAndRunStep('playing', _video, onPlaying, test);
+
+ return new Promise(function(resolve, reject) {
+ _mediaSource = new MediaSource();
+ _mediaSource.addEventListener('sourceopen', resolve);
+ _video.src = URL.createObjectURL(_mediaSource);
+ });
+ }).then(function() {
+ _sourceBuffer = _mediaSource.addSourceBuffer(configEncrypted.videoType);
+ return fetchAndAppend(configClear.videoPath);
+ }).then(function() {
+ _video.play();
+ }).catch(onFailure);
+ }, testname);
+}
diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/vertical-scroll-touch-action-manual.tentative.html b/tests/wpt/web-platform-tests/feature-policy/experimental-features/vertical-scroll-touch-action-manual.tentative.html
index 03da3704403..c1b5f1d0762 100644
--- a/tests/wpt/web-platform-tests/feature-policy/experimental-features/vertical-scroll-touch-action-manual.tentative.html
+++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/vertical-scroll-touch-action-manual.tentative.html
@@ -1,4 +1,5 @@
<!doctype html>
+<meta name="timeout" content="long">
<title>vertical-scroll test for touch-action</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
diff --git a/tests/wpt/web-platform-tests/feature-policy/resources/featurepolicy.js b/tests/wpt/web-platform-tests/feature-policy/resources/featurepolicy.js
index 55c7f98a8db..f3784b2adfd 100644
--- a/tests/wpt/web-platform-tests/feature-policy/resources/featurepolicy.js
+++ b/tests/wpt/web-platform-tests/feature-policy/resources/featurepolicy.js
@@ -22,7 +22,7 @@ function assert_feature_policy_supported() {
// attribute. "feature_name" is the feature name of a policy controlled
// feature (https://wicg.github.io/feature-policy/#features).
// See examples at:
-// https://github.com/WICG/feature-policy/blob/gh-pages/features.md
+// https://github.com/WICG/feature-policy/blob/master/features.md
// allow_attribute: Optional argument, only used for testing fullscreen or
// payment: either "allowfullscreen" or "allowpaymentrequest" is passed.
function test_feature_availability(
diff --git a/tests/wpt/web-platform-tests/fetch/api/request/request-keepalive-quota.html b/tests/wpt/web-platform-tests/fetch/api/request/request-keepalive-quota.html
index 19596cea2c8..f71b1b2996a 100644
--- a/tests/wpt/web-platform-tests/fetch/api/request/request-keepalive-quota.html
+++ b/tests/wpt/web-platform-tests/fetch/api/request/request-keepalive-quota.html
@@ -6,9 +6,13 @@
<meta name="help" href="https://fetch.spec.whatwg.org/#request">
<meta name="help" href="https://fetch.spec.whatwg.org/#body-mixin">
<meta name="author" title="Microsoft Edge" href="https://www.microsoft.com">
- <meta name="timeout" content="long">
+ <meta name="variant" content="?include=fast">
+ <meta name="variant" content="?include=slow-1">
+ <meta name="variant" content="?include=slow-2">
+ <meta name="variant" content="?include=slow-3">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+ <script src="/common/subset-tests-by-key.js"></script>
</head>
<body>
<script>
@@ -38,22 +42,22 @@
}
// Test 1 Byte
- promise_test(function(test) {
+ subsetTestByKey("fast", promise_test, function(test) {
return fetchKeepAliveRequest(noDelay, 1 /* bodySize */);
}, 'A Keep-Alive fetch() with a small body should succeed.');
// Test Quota full limit
- promise_test(function(test) {
+ subsetTestByKey("fast", promise_test, function(test) {
return fetchKeepAliveRequest(noDelay, expectedQuota /* bodySize */);
}, 'A Keep-Alive fetch() with a body at the Quota Limit should succeed.');
// Test Quota + 1 Byte
- promise_test(function(test) {
+ subsetTestByKey("fast", promise_test, function(test) {
return promise_rejects(test, TypeError(), fetchKeepAliveRequest(noDelay, expectedQuota + 1));
}, 'A Keep-Alive fetch() with a body over the Quota Limit should reject.');
// Test the Quota becomes available upon promise completion.
- promise_test(function (test) {
+ subsetTestByKey("slow-1", promise_test, function (test) {
// Fill our Quota then try to send a second fetch.
return fetchKeepAliveRequest(standardDelay, expectedQuota).then(() => {
// Now validate that we can send another Keep-Alive fetch for the full size of the quota.
@@ -62,7 +66,7 @@
}, 'A Keep-Alive fetch() should return its allocated Quota upon promise resolution.');
// Ensure only the correct amount of Quota becomes available when a fetch completes.
- promise_test(function(test) {
+ subsetTestByKey("slow-2", promise_test, function(test) {
// Create a fetch that uses all but 1 Byte of the Quota and runs for 2x as long as the other requests.
const first = fetchKeepAliveRequest(standardDelay * 2, expectedQuota - 1);
@@ -79,7 +83,7 @@
}, 'A Keep-Alive fetch() should return only its allocated Quota upon promise resolution.');
// Test rejecting a fetch() after the quota is used up.
- promise_test(function (test) {
+ subsetTestByKey("slow-3", promise_test, function (test) {
// Fill our Quota then try to send a second fetch.
const p = fetchKeepAliveRequest(standardDelay, expectedQuota);
diff --git a/tests/wpt/web-platform-tests/fetch/cross-origin-resource-policy/fetch-in-service-worker.html b/tests/wpt/web-platform-tests/fetch/cross-origin-resource-policy/fetch-in-service-worker.html
new file mode 100644
index 00000000000..e493904e2dc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fetch/cross-origin-resource-policy/fetch-in-service-worker.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<title>Cross-Origin-Resource-Policy in Service Worker</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script>
+<script>
+
+service_worker_test(
+ 'fetch.any.js',
+ 'fetch.any.js test');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/fetch/cross-origin-resource-policy/fetch.html b/tests/wpt/web-platform-tests/fetch/cross-origin-resource-policy/fetch.any.js
index 7cf8d60050a..758c52a695a 100644
--- a/tests/wpt/web-platform-tests/fetch/cross-origin-resource-policy/fetch.html
+++ b/tests/wpt/web-platform-tests/fetch/cross-origin-resource-policy/fetch.any.js
@@ -1,17 +1,17 @@
-<!DOCTYPE html>
-<html>
-<head>
- <script src="/resources/testharness.js"></script>
- <script src="/resources/testharnessreport.js"></script>
- <script src="/common/get-host-info.sub.js"></script>
-</head>
-<body>
- <script>
+// META: script=/common/get-host-info.sub.js
+// META: script=/resources/testharness.js
+
+if (!self.document) {
+ importScripts("/resources/testharness.js");
+ importScripts("/common/get-host-info.sub.js");
+}
+
const host = get_host_info();
-const localBaseURL = host.HTTP_ORIGIN + window.location.pathname.replace(/\/[^\/]*$/, '/') ;
-const sameSiteBaseURL = "http://" + host.ORIGINAL_HOST + ":" + host.HTTP_PORT2 + window.location.pathname.replace(/\/[^\/]*$/, '/') ;
-const notSameSiteBaseURL = host.HTTP_NOTSAMESITE_ORIGIN + window.location.pathname.replace(/\/[^\/]*$/, '/') ;
-const httpsBaseURL = host.HTTPS_ORIGIN + window.location.pathname.replace(/\/[^\/]*$/, '/') ;
+const path = "/fetch/cross-origin-resource-policy/";
+const localBaseURL = host.HTTP_ORIGIN + path;
+const sameSiteBaseURL = "http://" + host.ORIGINAL_HOST + ":" + host.HTTP_PORT2 + path;
+const notSameSiteBaseURL = host.HTTP_NOTSAMESITE_ORIGIN + path;
+const httpsBaseURL = host.HTTPS_ORIGIN + path;
promise_test(async () => {
const response = await fetch("./resources/hello.py?corp=same-origin");
@@ -78,6 +78,3 @@ promise_test(async (test) => {
return promise_rejects(test, new TypeError, fetch(notSameSiteBaseURL + "resources/redirect.py?corp=same-origin&redirectTo=" + encodeURIComponent(finalURL), { mode: "no-cors" }));
}, "Cross-origin no-cors fetch with a 'Cross-Origin-Resource-Policy: same-origin' redirect response header.");
- </script>
-</body>
-</html>
diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-and-exit-iframe-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-and-exit-iframe-manual.html
index fc7f57525c6..dc2a99c1e83 100644
--- a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-and-exit-iframe-manual.html
+++ b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-and-exit-iframe-manual.html
@@ -37,6 +37,6 @@ async_test(t => {
document.onfullscreenerror = t.unreached_func('fullscreenerror event');
iframeDoc.onfullscreenerror = t.unreached_func('iframe fullscreenerror event');
- trusted_request(t, iframeBody, document.body);
+ trusted_request(t, iframeBody, iframeBody);
});
</script>
diff --git a/tests/wpt/web-platform-tests/fullscreen/model/move-to-fullscreen-iframe-manual.html b/tests/wpt/web-platform-tests/fullscreen/model/move-to-fullscreen-iframe-manual.html
index 683865a0e00..69082cacc2b 100644
--- a/tests/wpt/web-platform-tests/fullscreen/model/move-to-fullscreen-iframe-manual.html
+++ b/tests/wpt/web-platform-tests/fullscreen/model/move-to-fullscreen-iframe-manual.html
@@ -10,7 +10,7 @@ async_test(t => {
const iframeDoc = iframe.contentDocument;
// Enter fullscreen for the iframe's body element.
- trusted_request(t, iframeDoc.body, document.body);
+ trusted_request(t, iframeDoc.body, iframeDoc.body);
document.onfullscreenchange = t.step_func(() => {
assert_equals(document.fullscreenElement, iframe, "document's initial fullscreen element");
assert_equals(iframeDoc.fullscreenElement, iframeDoc.body, "iframe's initial fullscreen element");
diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/004.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/004.html
index 950172d7b99..c365c6fd29f 100644
--- a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/004.html
+++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/004.html
@@ -15,7 +15,7 @@ t.step(function() {
t.step_func(function(e) {
assert_equals(e.target, window);
assert_equals(e.type, "hashchange");
- assert_true(e.bubbles, "bubbles");
+ assert_false(e.bubbles, "bubbles");
assert_false(e.cancelable, "cancelable");
t.done();
}), true)
diff --git a/tests/wpt/web-platform-tests/html/scripting/the-noscript-element/non-html-noscript.html b/tests/wpt/web-platform-tests/html/scripting/the-noscript-element/non-html-noscript.html
new file mode 100644
index 00000000000..2f85d1d47dc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/scripting/the-noscript-element/non-html-noscript.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<title>noscript rules don't apply to non-html elements</title>
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-noscript-element">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1470150">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<body>
+<script>
+test(function() {
+ let non_html_noscript = document.createElementNS("http://www.w3.org/2000/svg", "noscript");
+ document.body.appendChild(non_html_noscript);
+ assert_not_equals(getComputedStyle(non_html_noscript).display, "none");
+}, "Non-HTML <noscript> element shouldn't be undisplayed by a UA rule");
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/infrastructure/assumptions/html-elements.html b/tests/wpt/web-platform-tests/infrastructure/assumptions/html-elements.html
index 1cfe1d1fee5..3fe3d201ff6 100644
--- a/tests/wpt/web-platform-tests/infrastructure/assumptions/html-elements.html
+++ b/tests/wpt/web-platform-tests/infrastructure/assumptions/html-elements.html
@@ -67,7 +67,9 @@ test(function() {
for (var i = 0; i < a_styles.length; i++) {
var property = a_styles[i];
assert_equals(property, b_styles[i], "Same property on div.a and div.b");
- assert_equals(a_styles[property], b_styles[property], "Different value for " + property);
+ if (property !== "unicode-bidi") {
+ assert_equals(a_styles[property], b_styles[property], "Different value for " + property);
+ }
}
}, "Compare CSS div definitions (only valid if pre-reqs pass)");
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/html-elements.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/html-elements.html.ini
deleted file mode 100644
index 93a497dc562..00000000000
--- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/assumptions/html-elements.html.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[html-elements.html]
- [Compare CSS div definitions (only valid if pre-reqs pass)]
- expected:
- if product == "chrome": FAIL
-
-
diff --git a/tests/wpt/web-platform-tests/interfaces/DOM-Parsing.idl b/tests/wpt/web-platform-tests/interfaces/DOM-Parsing.idl
index 11d5d8bc372..71d659bac1f 100644
--- a/tests/wpt/web-platform-tests/interfaces/DOM-Parsing.idl
+++ b/tests/wpt/web-platform-tests/interfaces/DOM-Parsing.idl
@@ -1,6 +1,7 @@
// GENERATED CONTENT - DO NOT EDIT
-// Content of this file was automatically extracted from the DOM Parsing and Serialization spec.
-// See https://w3c.github.io/DOM-Parsing/
+// Content of this file was automatically extracted from the
+// "DOM Parsing and Serialization" spec.
+// See: https://w3c.github.io/DOM-Parsing/
[Constructor, Exposed=Window]
interface DOMParser {
@@ -14,18 +15,15 @@ enum SupportedType {
"application/xhtml+xml",
"image/svg+xml"
};
-
[Constructor, Exposed=Window]
interface XMLSerializer {
DOMString serializeToString(Node root);
};
-
partial interface Element {
[CEReactions, TreatNullAs=EmptyString] attribute DOMString innerHTML;
[CEReactions, TreatNullAs=EmptyString] attribute DOMString outerHTML;
[CEReactions] void insertAdjacentHTML(DOMString position, DOMString text);
};
-
partial interface Range {
[CEReactions, NewObject] DocumentFragment createContextualFragment(DOMString fragment);
};
diff --git a/tests/wpt/web-platform-tests/interfaces/cookie-store.idl b/tests/wpt/web-platform-tests/interfaces/cookie-store.idl
index b38f61e749d..63ddc090778 100644
--- a/tests/wpt/web-platform-tests/interfaces/cookie-store.idl
+++ b/tests/wpt/web-platform-tests/interfaces/cookie-store.idl
@@ -1,8 +1,19 @@
// https://github.com/WICG/cookie-store/blob/gh-pages/explainer.md
+enum CookieSameSite {
+ "strict",
+ "lax",
+ "unrestricted"
+};
+
dictionary CookieListItem {
USVString name;
USVString value;
+ USVString? domain;
+ USVString path;
+ DOMTimeStamp? expires;
+ boolean secure;
+ CookieSameSite sameSite;
};
typedef sequence<CookieListItem> CookieList;
@@ -14,6 +25,7 @@ dictionary CookieChangeEventInit : EventInit {
[
Exposed=Window,
+ SecureContext,
Constructor(DOMString type, optional CookieChangeEventInit eventInitDict)
] interface CookieChangeEvent : Event {
readonly attribute CookieList changed;
@@ -35,7 +47,7 @@ dictionary ExtendableCookieChangeEventInit : ExtendableEventInit {
enum CookieMatchType {
"equals",
- "startsWith"
+ "starts-with"
};
dictionary CookieStoreGetOptions {
@@ -50,12 +62,14 @@ dictionary CookieStoreSetOptions {
DOMTimeStamp? expires = null;
USVString domain;
USVString path = "/";
- boolean? secure;
+ boolean secure = true;
boolean httpOnly = false;
+ CookieSameSite sameSite = "strict";
};
[
- Exposed=(ServiceWorker,Window)
+ Exposed=(ServiceWorker,Window),
+ SecureContext
] interface CookieStore : EventTarget {
Promise<CookieList?> getAll(USVString name, optional CookieStoreGetOptions options);
Promise<CookieList?> getAll(optional CookieStoreGetOptions options);
@@ -63,9 +77,6 @@ dictionary CookieStoreSetOptions {
Promise<CookieListItem?> get(USVString name, optional CookieStoreGetOptions options);
Promise<CookieListItem?> get(optional CookieStoreGetOptions options);
- Promise<boolean> has(USVString name, optional CookieStoreGetOptions options);
- Promise<boolean> has(optional CookieStoreGetOptions options);
-
Promise<void> set(USVString name, USVString value, optional CookieStoreSetOptions options);
Promise<void> set(CookieStoreSetOptions options);
@@ -79,6 +90,7 @@ dictionary CookieStoreSetOptions {
[Exposed=Window] attribute EventHandler onchange;
};
+[SecureContext]
partial interface Window {
[Replaceable, SameObject] readonly attribute CookieStore cookieStore;
};
diff --git a/tests/wpt/web-platform-tests/interfaces/credential-management.idl b/tests/wpt/web-platform-tests/interfaces/credential-management.idl
new file mode 100644
index 00000000000..7c3a928ab5b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/interfaces/credential-management.idl
@@ -0,0 +1,103 @@
+// GENERATED CONTENT - DO NOT EDIT
+// Content of this file was automatically extracted from the
+// "Credential Management Level 1" spec.
+// See: https://w3c.github.io/webappsec-credential-management/
+
+[Exposed=Window, SecureContext]
+interface Credential {
+ readonly attribute USVString id;
+ readonly attribute DOMString type;
+};
+
+[SecureContext]
+interface mixin CredentialUserData {
+ readonly attribute USVString name;
+ readonly attribute USVString iconURL;
+};
+
+partial interface Navigator {
+ [SecureContext, SameObject] readonly attribute CredentialsContainer credentials;
+};
+
+[Exposed=Window, SecureContext]
+interface CredentialsContainer {
+ Promise<Credential?> get(optional CredentialRequestOptions options);
+ Promise<Credential> store(Credential credential);
+ Promise<Credential?> create(optional CredentialCreationOptions options);
+ Promise<void> preventSilentAccess();
+};
+
+dictionary CredentialData {
+ required USVString id;
+};
+
+dictionary CredentialRequestOptions {
+ CredentialMediationRequirement mediation = "optional";
+ AbortSignal signal;
+};
+
+enum CredentialMediationRequirement {
+ "silent",
+ "optional",
+ "required"
+};
+
+dictionary CredentialCreationOptions {
+ AbortSignal signal;
+};
+
+typedef (FormData or URLSearchParams) CredentialBodyType;
+
+[Constructor(HTMLFormElement form),
+ Constructor(PasswordCredentialData data),
+ Exposed=Window,
+ SecureContext]
+interface PasswordCredential : Credential {
+ readonly attribute USVString password;
+};
+PasswordCredential includes CredentialUserData;
+
+partial dictionary CredentialRequestOptions {
+ boolean password = false;
+};
+
+dictionary PasswordCredentialData : CredentialData {
+ USVString name;
+ USVString iconURL;
+ required USVString password;
+};
+
+typedef (PasswordCredentialData or HTMLFormElement) PasswordCredentialInit;
+
+partial dictionary CredentialCreationOptions {
+ PasswordCredentialInit password;
+};
+
+[Constructor(FederatedCredentialInit data),
+ Exposed=Window,
+ SecureContext]
+interface FederatedCredential : Credential {
+ readonly attribute USVString provider;
+ readonly attribute DOMString? protocol;
+};
+FederatedCredential includes CredentialUserData;
+
+dictionary FederatedCredentialRequestOptions {
+ sequence<USVString> providers;
+ sequence<DOMString> protocols;
+};
+
+partial dictionary CredentialRequestOptions {
+ FederatedCredentialRequestOptions federated;
+};
+
+dictionary FederatedCredentialInit : CredentialData {
+ USVString name;
+ USVString iconURL;
+ required USVString provider;
+ DOMString protocol;
+};
+
+partial dictionary CredentialCreationOptions {
+ FederatedCredentialInit federated;
+};
diff --git a/tests/wpt/web-platform-tests/interfaces/mediacapture-image.idl b/tests/wpt/web-platform-tests/interfaces/image-capture.idl
index 3aeb6ebfa99..740475d7205 100644
--- a/tests/wpt/web-platform-tests/interfaces/mediacapture-image.idl
+++ b/tests/wpt/web-platform-tests/interfaces/image-capture.idl
@@ -1,6 +1,7 @@
// GENERATED CONTENT - DO NOT EDIT
-// Content of this file was automatically extracted from the MediaStream Image Capture spec.
-// See https://w3c.github.io/mediacapture-image/
+// Content of this file was automatically extracted from the
+// "MediaStream Image Capture" spec.
+// See: https://w3c.github.io/mediacapture-image/
[Exposed=Window, Constructor(MediaStreamTrack videoTrack)]
interface ImageCapture {
diff --git a/tests/wpt/web-platform-tests/interfaces/webappsec-subresource-integrity.idl b/tests/wpt/web-platform-tests/interfaces/webappsec-subresource-integrity.idl
new file mode 100644
index 00000000000..899f4710188
--- /dev/null
+++ b/tests/wpt/web-platform-tests/interfaces/webappsec-subresource-integrity.idl
@@ -0,0 +1,11 @@
+// GENERATED CONTENT - DO NOT EDIT
+// Content of this file was automatically extracted from the Subresource Integrity spec.
+// See https://w3c.github.io/webappsec-subresource-integrity/
+
+partial interface HTMLLinkElement {
+ attribute DOMString integrity;
+};
+
+partial interface HTMLScriptElement {
+ attribute DOMString integrity;
+};
diff --git a/tests/wpt/web-platform-tests/lifecycle/META.yml b/tests/wpt/web-platform-tests/lifecycle/META.yml
new file mode 100644
index 00000000000..3f09265b002
--- /dev/null
+++ b/tests/wpt/web-platform-tests/lifecycle/META.yml
@@ -0,0 +1,2 @@
+suggested_reviewers:
+ - fmeawad
diff --git a/tests/wpt/web-platform-tests/lint.whitelist b/tests/wpt/web-platform-tests/lint.whitelist
index 948f1df6606..7c9a703cc23 100644
--- a/tests/wpt/web-platform-tests/lint.whitelist
+++ b/tests/wpt/web-platform-tests/lint.whitelist
@@ -110,6 +110,8 @@ CONSOLE: streams/resources/test-utils.js
CONSOLE: service-workers/service-worker/resources/navigation-redirect-other-origin.html
CONSOLE: service-workers/service-worker/navigation-redirect.https.html
CONSOLE: service-workers/service-worker/resources/clients-get-other-origin.html
+CONSOLE: webrtc/tools/*
+CONSOLE: webaudio/resources/audit.js:39
# use of console in a public library - annotation-model ensures
# it is not actually used
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/idlharness.html b/tests/wpt/web-platform-tests/mediacapture-image/idlharness.html
index 4b19b5893a7..252281eefa6 100644
--- a/tests/wpt/web-platform-tests/mediacapture-image/idlharness.html
+++ b/tests/wpt/web-platform-tests/mediacapture-image/idlharness.html
@@ -17,15 +17,21 @@
'use strict';
promise_test(async () => {
- const srcs = ['mediacapture-image', 'mediacapture-main', 'html', 'dom'];
+ const srcs = ['image-capture', 'mediacapture-main', 'html', 'dom'];
const [idl, main, html, dom] = await Promise.all(
srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text())));
- var canvas = document.getElementById('canvas');
- var context = canvas.getContext("2d");
- context.fillStyle = "red";
- context.fillRect(0, 0, 10, 10);
- var track = canvas.captureStream().getVideoTracks()[0];
+ let capture;
+ try {
+ var canvas = document.getElementById('canvas');
+ var context = canvas.getContext("2d");
+ context.fillStyle = "red";
+ context.fillRect(0, 0, 10, 10);
+ var track = canvas.captureStream().getVideoTracks()[0];
+ capture = new ImageCapture(track);
+ } catch (e) {
+ // Will be surfaced in idlharness.js's test_object below.
+ }
var idl_array = new IdlArray();
idl_array.add_idls(idl);
@@ -33,7 +39,7 @@
idl_array.add_dependency_idls(html);
idl_array.add_dependency_idls(dom);
idl_array.add_objects({
- ImageCapturer : [new ImageCapture(track)]
+ ImageCapture : [capture]
});
idl_array.test();
}, 'Test mediacapture-image IDL interfaces');
diff --git a/tests/wpt/web-platform-tests/payment-request/PaymentMethodChangeEvent/methodDetails-attribute.https.html b/tests/wpt/web-platform-tests/payment-request/PaymentMethodChangeEvent/methodDetails-attribute.https.html
index 331e8ef2b36..a478c559d49 100644
--- a/tests/wpt/web-platform-tests/payment-request/PaymentMethodChangeEvent/methodDetails-attribute.https.html
+++ b/tests/wpt/web-platform-tests/payment-request/PaymentMethodChangeEvent/methodDetails-attribute.https.html
@@ -19,3 +19,4 @@ test(() => {
assert_equals(test, "pass");
assert_equals(event.methodDetails, methodDetails);
}, "Must have a methodDetails IDL attribute, which is initialized with to the methodName dictionary value");
+</script>
diff --git a/tests/wpt/web-platform-tests/payment-request/PaymentMethodChangeEvent/methodName-attribute.https.html b/tests/wpt/web-platform-tests/payment-request/PaymentMethodChangeEvent/methodName-attribute.https.html
index 13ea515bf96..e6e0bf9a919 100644
--- a/tests/wpt/web-platform-tests/payment-request/PaymentMethodChangeEvent/methodName-attribute.https.html
+++ b/tests/wpt/web-platform-tests/payment-request/PaymentMethodChangeEvent/methodName-attribute.https.html
@@ -14,3 +14,4 @@ test(() => {
const { methodName } = event;
assert_equals(methodName, "wpt-test");
}, "Must have a methodName IDL attribute, which is initialized with to the methodName dictionary value");
+</script>
diff --git a/tests/wpt/web-platform-tests/payment-request/payment-response/complete-method-manual.https.html b/tests/wpt/web-platform-tests/payment-request/payment-response/complete-method-manual.https.html
index a67f0664d99..9c87b75b78b 100644
--- a/tests/wpt/web-platform-tests/payment-request/payment-response/complete-method-manual.https.html
+++ b/tests/wpt/web-platform-tests/payment-request/payment-response/complete-method-manual.https.html
@@ -16,6 +16,9 @@ async function runManualTest({ completeWith: result }, button) {
// We .complete() as normal, using the passed test value
const promise = response.complete(result);
assert_true(promise instanceof Promise, "returns a promise");
+ // Immediately calling complete() again yields a rejected promise.
+ await promise_rejects(t, "InvalidStateError", response.complete(result));
+ // but the original promise is unaffected
const returnedValue = await promise;
assert_equals(
returnedValue,
@@ -23,17 +26,8 @@ async function runManualTest({ completeWith: result }, button) {
"Returned value must always be undefined"
);
// We now call .complete() again, to force an exception
- // because [[completeCalled]] is true.
- try {
- await response.complete(result);
- assert_unreached("Expected InvalidStateError to be thrown");
- } catch (err) {
- assert_equals(
- err.code,
- DOMException.INVALID_STATE_ERR,
- "Must throw an InvalidStateError"
- );
- }
+ // because [[complete]] is true.
+ await promise_rejects(t, "InvalidStateError", response.complete(result));
button.innerHTML = `✅ ${button.textContent}`;
} catch (err) {
button.innerHTML = `❌ ${button.textContent}`;
diff --git a/tests/wpt/web-platform-tests/permissions/interfaces.any.js b/tests/wpt/web-platform-tests/permissions/interfaces.any.js
index c20f422bf43..78f1fc65b79 100644
--- a/tests/wpt/web-platform-tests/permissions/interfaces.any.js
+++ b/tests/wpt/web-platform-tests/permissions/interfaces.any.js
@@ -11,18 +11,20 @@ if (self.importScripts) {
// https://w3c.github.io/permissions/#idl-index
promise_test(async () => {
+ const idl = await fetch("/interfaces/permissions.idl").then(r => r.text());
+ const dom = await fetch("/interfaces/dom.idl").then(r => r.text());
+ const html = await fetch("/interfaces/html.idl").then(r => r.text());
- const permissions_idl = await fetch("/interfaces/permissions.idl")
- .then(response => response.text());
const idl_array = new IdlArray();
-
- idl_array.add_untested_idls('interface Navigator {};');
- idl_array.add_untested_idls('[Exposed=(Window,Worker)] interface EventTarget {};');
- idl_array.add_untested_idls('interface EventHandler {};');
- idl_array.add_untested_idls('interface WorkerNavigator {};');
- idl_array.add_idls(permissions_idl);
-
- self.permissionStatus = await navigator.permissions.query({ name: "geolocation" });
+ idl_array.add_idls(idl);
+ idl_array.add_dependency_idls(dom);
+ idl_array.add_dependency_idls(html);
+
+ try {
+ self.permissionStatus = await navigator.permissions.query({ name: "geolocation" });
+ } catch (e) {
+ // Will be surfaced in idlharness.js's test_object below.
+ }
if (self.GLOBAL.isWorker()) {
idl_array.add_objects({ WorkerNavigator: ['navigator'] });
diff --git a/tests/wpt/web-platform-tests/quirks/hashless-hex-color.html b/tests/wpt/web-platform-tests/quirks/hashless-hex-color.html
deleted file mode 100644
index cbda90c0af7..00000000000
--- a/tests/wpt/web-platform-tests/quirks/hashless-hex-color.html
+++ /dev/null
@@ -1,498 +0,0 @@
-<!doctype html>
-<html>
- <head>
- <title>The hashless hex color quirk</title>
- <meta name="timeout" content="long">
- <script src="/resources/testharness.js"></script>
- <script src="/resources/testharnessreport.js"></script>
- <style> iframe { width:20px; height:20px; } </style>
- </head>
- <body>
- <div id=log></div>
- <iframe id=quirks></iframe>
- <iframe id=almost></iframe>
- <iframe id=standards></iframe>
- <script>
- setup({explicit_done:true});
- onload = function() {
- var html = "<style id=style></style><div id=test></div><div id=ref></div><svg><circle id=svg /><circle id=svg_ref /></svg>";
- var a_doctype = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">';
- var s_doctype = '<!DOCTYPE HTML>';
- var q = document.getElementById('quirks').contentWindow;
- var a = document.getElementById('almost').contentWindow;
- var s = document.getElementById('standards').contentWindow;
- q.document.open();
- q.document.write(html);
- q.document.close();
- a.document.open();
- a.document.write(a_doctype + html);
- a.document.close();
- s.document.open();
- s.document.write(s_doctype + html);
- s.document.close();
- [q, a, s].forEach(function(win) {
- ['style', 'test', 'ref', 'svg', 'svg_ref'].forEach(function(id) {
- win[id] = win.document.getElementById(id);
- });
- });
-
- var tests = [
- {input:"123", q:"#000123"},
- {input:"023", q:"#000023"},
- {input:"003", q:"#000003"},
- {input:"000", q:"#000"},
- {input:"abc", q:"#abc"},
- {input:"ABC", q:"#abc"},
- {input:"1ab", q:"#0001ab"},
- {input:"1AB", q:"#0001ab"},
- {input:"112233", q:"#123"},
- {input:"012233", q:"#012233"},
- {input:"002233", q:"#023"},
- {input:"000233", q:"#000233"},
- {input:"000033", q:"#003"},
- {input:"000003", q:"#000003"},
- {input:"000000", q:"#000000"},
- {input:"aabbcc", q:"#abc"},
- {input:"AABBCC", q:"#abc"},
- {input:"11aabb", q:"#1ab"},
- {input:"11AABB", q:"#1ab"},
- {input:"\\31 23", q:"#123"},
- {input:"\\61 bc", q:"#abc"},
- {input:"\\41 BC", q:"#abc"},
- {input:"\\31 ab", q:"#1ab"},
- {input:"\\31 AB", q:"#1ab"},
- {input:"\\31 12233", q:"#123"},
- {input:"\\61 abbcc", q:"#abc"},
- {input:"\\41 ABBCC", q:"#abc"},
- {input:"\\31 1aabb", q:"#1ab"},
- {input:"\\31 1AABB", q:"#1ab"},
- {input:"12\\33 ", q:"#000123"},
- {input:"1", q:"#000001"},
- {input:"12", q:"#000012"},
- {input:"1234", q:"#001234"},
- {input:"12345", q:"#012345"},
- {input:"1234567"},
- {input:"12345678"},
- {input:"a"},
- {input:"aa"},
- {input:"aaaa"},
- {input:"aaaaa"},
- {input:"aaaaaaa"},
- {input:"aaaaaaaa"},
- {input:"A"},
- {input:"AA"},
- {input:"AAAA"},
- {input:"AAAAA"},
- {input:"AAAAAAA"},
- {input:"AAAAAAAA"},
- {input:"1a", q:"#00001a"},
- {input:"1abc", q:"#001abc"},
- {input:"1abcd", q:"#01abcd"},
- {input:"1abcdef"},
- {input:"1abcdeff"},
- {input:"+1", q:"#000001"},
- {input:"+12", q:"#000012"},
- {input:"+123", q:"#000123"},
- {input:"+1234", q:"#001234"},
- {input:"+12345", q:"#012345"},
- {input:"+123456", q:"#123456"},
- {input:"+1234567"},
- {input:"+12345678"},
- {input:"-1"},
- {input:"-12"},
- {input:"-123"},
- {input:"-1234"},
- {input:"-12345"},
- {input:"-123456"},
- {input:"-1234567"},
- {input:"-12345678"},
- {input:"+1a", q:"#00001a"},
- {input:"+12a", q:"#00012a"},
- {input:"+123a", q:"#00123a"},
- {input:"+1234a", q:"#01234a"},
- {input:"+12345a", q:"#12345a"},
- {input:"+123456a"},
- {input:"+1234567a"},
- {input:"-1a"},
- {input:"-12a"},
- {input:"-123a"},
- {input:"-1234a"},
- {input:"-12345a"},
- {input:"-123456a"},
- {input:"-1234567a"},
- {input:"-12345678a"},
- {input:"+1A", q:"#00001a"},
- {input:"+12A", q:"#00012a"},
- {input:"+123A", q:"#00123a"},
- {input:"+1234A", q:"#01234a"},
- {input:"+12345A", q:"#12345a"},
- {input:"+123456A"},
- {input:"+1234567A"},
- {input:"-1A"},
- {input:"-12A"},
- {input:"-123A"},
- {input:"-1234A"},
- {input:"-12345A"},
- {input:"-123456A"},
- {input:"-1234567A"},
- {input:"-12345678A"},
- {input:"+a"},
- {input:"+aa"},
- {input:"+aaa"},
- {input:"+aaaa"},
- {input:"+aaaaa"},
- {input:"+aaaaaa"},
- {input:"+aaaaaaa"},
- {input:"+aaaaaaaa"},
- {input:"-a"},
- {input:"-aa"},
- {input:"-aaa"},
- {input:"-aaaa"},
- {input:"-aaaaa"},
- {input:"-aaaaaa"},
- {input:"-aaaaaaa"},
- {input:"-aaaaaaaa"},
- {input:"-aaaaaaaaa"},
- {input:"+A"},
- {input:"+AA"},
- {input:"+AAA"},
- {input:"+AAAA"},
- {input:"+AAAAA"},
- {input:"+AAAAAA"},
- {input:"+AAAAAAA"},
- {input:"+AAAAAAAA"},
- {input:"-A"},
- {input:"-AA"},
- {input:"-AAA"},
- {input:"-AAAA"},
- {input:"-AAAAA"},
- {input:"-AAAAAA"},
- {input:"-AAAAAAA"},
- {input:"-AAAAAAAA"},
- {input:"-AAAAAAAAA"},
- {input:"1.1"},
- {input:"1.11"},
- {input:"1.111"},
- {input:"1.1111"},
- {input:"1.11111"},
- {input:"1.111111"},
- {input:"1.1111111"},
- {input:"+1.1"},
- {input:"+1.11"},
- {input:"+1.111"},
- {input:"+1.1111"},
- {input:"+1.11111"},
- {input:"+1.111111"},
- {input:"+1.1111111"},
- {input:"-1.1"},
- {input:"-1.11"},
- {input:"-1.111"},
- {input:"-1.1111"},
- {input:"-1.11111"},
- {input:"-1.111111"},
- {input:"-1.1111111"},
- {input:"1.1a"},
- {input:"1.11a"},
- {input:"1.111a"},
- {input:"1.1111a"},
- {input:"1.11111a"},
- {input:"1.111111a"},
- {input:"+1.1a"},
- {input:"+1.11a"},
- {input:"+1.111a"},
- {input:"+1.1111a"},
- {input:"+1.11111a"},
- {input:"+1.111111a"},
- {input:"-1.1a"},
- {input:"-1.11a"},
- {input:"-1.111a"},
- {input:"-1.1111a"},
- {input:"-1.11111a"},
- {input:"-1.111111a"},
- {input:"1.0"},
- {input:"11.0"},
- {input:"111.0"},
- {input:"1111.0"},
- {input:"11111.0"},
- {input:"111111.0"},
- {input:"1111111.0"},
- {input:"11111111.0"},
- {input:"+1.0"},
- {input:"+11.0"},
- {input:"+111.0"},
- {input:"+1111.0"},
- {input:"+11111.0"},
- {input:"+111111.0"},
- {input:"+1111111.0"},
- {input:"+11111111.0"},
- {input:"-1.0"},
- {input:"-11.0"},
- {input:"-111.0"},
- {input:"-1111.0"},
- {input:"-11111.0"},
- {input:"-111111.0"},
- {input:"-1111111.0"},
- {input:"-11111111.0"},
- {input:"1.0a"},
- {input:"11.0a"},
- {input:"111.0a"},
- {input:"1111.0a"},
- {input:"11111.0a"},
- {input:"111111.0a"},
- {input:"1111111.0a"},
- {input:"+1.0a"},
- {input:"+11.0a"},
- {input:"+111.0a"},
- {input:"+1111.0a"},
- {input:"+11111.0a"},
- {input:"+111111.0a"},
- {input:"+1111111.0a"},
- {input:"-1.0a"},
- {input:"-11.0a"},
- {input:"-111.0a"},
- {input:"-1111.0a"},
- {input:"-11111.0a"},
- {input:"-111111.0a"},
- {input:"-1111111.0a"},
- {input:"+/**/123"},
- {input:"-/**/123"},
- {input:"+/**/123456"},
- {input:"-/**/123456"},
- {input:"+/**/abc"},
- {input:"-/**/abc"},
- {input:"+/**/abcdef"},
- {input:"-/**/abcdef"},
- {input:"+/**/12a"},
- {input:"-/**/12a"},
- {input:"+/**/12345a"},
- {input:"-/**/12345a"},
- {input:"abg"},
- {input:"aabbcg"},
- {input:"1ag"},
- {input:"1122ag"},
- {input:"ABG"},
- {input:"AABBCG"},
- {input:"1AG"},
- {input:"1122AG"},
- {input:"@a"},
- {input:"@ab"},
- {input:"@abc"},
- {input:"@abcd"},
- {input:"@abcde"},
- {input:"@abcdef"},
- {input:"@1"},
- {input:"@11"},
- {input:"@111"},
- {input:"@1111"},
- {input:"@11111"},
- {input:"@111111"},
- {input:"@1a"},
- {input:"@11a"},
- {input:"@111a"},
- {input:"@1111a"},
- {input:"@11111a"},
- {input:'"a"'},
- {input:'"ab"'},
- {input:'"abc"'},
- {input:'"abcd"'},
- {input:'"abcde"'},
- {input:'"abcdef"'},
- {input:'"1"'},
- {input:'"11"'},
- {input:'"111"'},
- {input:'"1111"'},
- {input:'"11111"'},
- {input:'"111111"'},
- {input:'"1a"'},
- {input:'"11a"'},
- {input:'"111a"'},
- {input:'"1111a"'},
- {input:'"11111a"'},
- {input:"url(a)", svg:'url(a)'},
- {input:"url(aa)", svg:'url(aa)'},
- {input:"url(aaa)", svg:'url(aaa)'},
- {input:"url(aaaa)", svg:'url(aaaa)'},
- {input:"url(aaaaa)", svg:'url(aaaaa)'},
- {input:"url(aaaaaa)", svg:'url(aaaaaa)'},
- {input:"url('a')", svg:'url(a)'},
- {input:"url('aa')", svg:'url(aa)'},
- {input:"url('aaa')", svg:'url(aaa)'},
- {input:"url('aaaa')", svg:'url(aaaa)'},
- {input:"url('aaaaa')", svg:'url(aaaaa)'},
- {input:"url('aaaaaa')", svg:'url(aaaaaa)'},
- {input:"#a"},
- {input:"#aa"},
- {input:"#aaaaa"},
- {input:"#aaaaaaa"},
- {input:"#1"},
- {input:"#11"},
- {input:"#11111"},
- {input:"#1111111"},
- {input:"#1a"},
- {input:"#1111a"},
- {input:"#111111a"},
- {input:"1%"},
- {input:"11%"},
- {input:"111%"},
- {input:"1111%"},
- {input:"11111%"},
- {input:"111111%"},
- {input:"calc(123)"},
- {input:"rgb(119, 255, 255)", q:"#7ff", s:"#7ff", svg:"#7ff"},
- {input:"rgba(119, 255, 255, 001)", q:"#7ff", s:"#7ff", svg:"#7ff"},
- {input:"hsl(100, 100%, 100%)", q:"#fff", s:"#fff", svg:"#fff"},
- {input:"hsla(100, 100%, 100%, 001)", q:"#fff", s:"#fff", svg:"#fff"},
- {input:"rgb(calc(100 + 155), 255, 255)", q:"#fff", s:"#fff", svg:"#fff"},
- {input:"rgba(calc(100 + 155), 255, 255, 001)", q:"#fff", s:"#fff", svg:"#fff"},
- {input:"hsl(calc(050 + 050), 100%, 100%)", q:"#fff", s:"#fff", svg:"#fff"},
- {input:"hsla(calc(050 + 050), 100%, 100%, 001)", q:"#fff", s:"#fff", svg:"#fff"},
- {input:"rgb(/**/255, 255, 255)", q:"#fff", s:"#fff", svg:"#fff"},
- {input:"rgb(/**/255/**/, /**/255/**/, /**/255/**/)", q:"#fff", s:"#fff", svg:"#fff"},
- {input:"rgb(calc(/**/100/**/ + /**/155/**/), 255, 255)", q:"#fff", s:"#fff", svg:"#fff"},
- {input:"#123 123 abc 12a", q:"#123 #000123 #abc #00012a", shorthand:true},
- {input:"rgb(119, 255, 255) 123", q:"#7ff #000123", shorthand:true},
- {input:"123 rgb(119, 255, 255)", q:"#000123 #7ff", shorthand:true},
- {input:"1e1"},
- {input:"11e1"},
- {input:"111e1"},
- {input:"1111e1"},
- {input:"11111e1"},
- {input:"111111e1"},
- {input:"1e+1"},
- {input:"11e+1"},
- {input:"111e+1"},
- {input:"1111e+1"},
- {input:"11111e+1"},
- {input:"111111e+1"},
- {input:"1e-0"},
- {input:"11e-0"},
- {input:"111e-0"},
- {input:"1111e-0"},
- {input:"11111e-0"},
- {input:"111111e-0"},
- {input:"1e1a"},
- {input:"11e1a"},
- {input:"111e1a"},
- {input:"1111e1a"},
- {input:"11111e1a"},
- {input:"111111e1a"},
- {desc:"1111111111...", input:"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"},
- {desc:"1111111111...a", input:"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111a"},
- {desc:"a1111111111...", input:"a1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"},
- ];
-
- var props = [
- {prop:'background-color', check:'background-color'},
- {prop:'border-color', check:'border-top-color', check_also:['border-right-color', 'border-bottom-color', 'border-left-color']},
- {prop:'border-top-color', check:'border-top-color'},
- {prop:'border-right-color', check:'border-right-color'},
- {prop:'border-bottom-color', check:'border-bottom-color'},
- {prop:'border-left-color', check:'border-left-color'},
- {prop:'color', check:'color'},
- ];
- var style_template = '#test{{prop}:{test};}' +
- '#ref{{prop}:{ref};}';
-
- tests.forEach(function(t) {
- var name = t.desc || t.input;
- var test_q = async_test(name + ' (quirks)');
- var test_a = async_test(name + ' (almost standards)');
- var test_s = async_test(name + ' (standards)');
- var test_svg = async_test(name + ' (SVG)');
- for (var i in props) {
- if (t.shorthand && !(props[i].check_also)) {
- continue;
- }
- test_q.step(function() {
- q.style.textContent = style_template.replace('{test}', t.input)
- .replace('{ref}', t.q).replace(/\{prop\}/g, props[i].prop);
- assert_equals(q.getComputedStyle(q.test).getPropertyValue(props[i].check),
- q.getComputedStyle(q.ref).getPropertyValue(props[i].check),
- props[i].prop);
- if (t.shorthand && props[i].check_also) {
- for (var j in props[i].check_also) {
- assert_equals(q.getComputedStyle(q.test).getPropertyValue(props[i].check_also[j]),
- q.getComputedStyle(q.ref).getPropertyValue(props[i].check_also[j]),
- props[i].prop + ' checking ' + props[i].check_also[j]);
- }
- }
- });
- test_a.step(function() {
- a.style.textContent = style_template.replace('{test}', t.input)
- .replace('{ref}', t.s).replace(/\{prop\}/g, props[i].prop);
- assert_equals(a.getComputedStyle(a.test).getPropertyValue(props[i].check),
- a.getComputedStyle(a.ref).getPropertyValue(props[i].check),
- props[i].prop);
- if (t.shorthand && props[i].check_also) {
- for (var j in props[i].check_also) {
- assert_equals(a.getComputedStyle(q.test).getPropertyValue(props[i].check_also[j]),
- a.getComputedStyle(q.ref).getPropertyValue(props[i].check_also[j]),
- props[i].prop + ' checking ' + props[i].check_also[j]);
- }
- }
- });
- test_s.step(function() {
- s.style.textContent = style_template.replace('{test}', t.input)
- .replace('{ref}', t.s).replace(/\{prop\}/g, props[i].prop);
- assert_equals(s.getComputedStyle(s.test).getPropertyValue(props[i].check),
- s.getComputedStyle(s.ref).getPropertyValue(props[i].check),
- props[i].prop);
- if (t.shorthand && props[i].check_also) {
- for (var j in props[i].check_also) {
- assert_equals(s.getComputedStyle(q.test).getPropertyValue(props[i].check_also[j]),
- s.getComputedStyle(q.ref).getPropertyValue(props[i].check_also[j]),
- props[i].prop + ' checking ' + props[i].check_also[j]);
- }
- }
- });
- test_svg.step(function() {
- q.svg.setAttribute('fill', t.input);
- a.svg.setAttribute('fill', t.input);
- s.svg.setAttribute('fill', t.input);
- if (t.svg) {
- q.svg_ref.setAttribute('fill', t.svg);
- a.svg_ref.setAttribute('fill', t.svg);
- s.svg_ref.setAttribute('fill', t.svg);
- } else {
- q.svg_ref.removeAttribute('fill');
- a.svg_ref.removeAttribute('fill');
- s.svg_ref.removeAttribute('fill');
- }
- assert_equals(q.getComputedStyle(q.svg).fill, q.getComputedStyle(q.svg_ref).fill, 'SVG fill="" in quirks mode');
- assert_equals(a.getComputedStyle(a.svg).fill, a.getComputedStyle(a.svg_ref).fill, 'SVG fill="" in almost standards mode');
- assert_equals(s.getComputedStyle(s.svg).fill, s.getComputedStyle(s.svg_ref).fill, 'SVG fill="" in standards mode');
- });
- }
- test_q.done();
- test_a.done();
- test_s.done();
- test_svg.done();
- });
-
- var other_tests = [
- {input:'background:abc', prop:'background-color'},
- {input:'border-top:1px solid abc', prop:'border-top-color'},
- {input:'border-right:1px solid abc', prop:'border-right-color'},
- {input:'border-bottom:1px solid abc', prop:'border-bottom-color'},
- {input:'border-left:1px solid abc', prop:'border-left-color'},
- {input:'border:1px solid abc', prop:'border-top-color'},
- {input:'outline-color:abc', prop:'outline-color'},
- {input:'outline:1px solid abc', prop:'outline-color'}
- ];
-
- var other_template = "#test{{test};}"
-
- other_tests.forEach(function(t) {
- test(function() {
- q.style.textContent = other_template.replace('{test}', t.input);
- assert_equals(q.getComputedStyle(q.test).getPropertyValue(t.prop),
- q.getComputedStyle(q.ref).getPropertyValue(t.prop),
- 'quirk was supported');
- }, document.title+', excluded property '+t.input);
- });
-
- done();
- }
- </script>
- </body>
-</html>
diff --git a/tests/wpt/web-platform-tests/quirks/hashless-hex-color/limited-quirks.html b/tests/wpt/web-platform-tests/quirks/hashless-hex-color/limited-quirks.html
new file mode 100644
index 00000000000..f7dd7ed4bd4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/quirks/hashless-hex-color/limited-quirks.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html>
+ <head>
+ <title>The hashless hex color quirk (limited-quirks)</title>
+ <meta name="timeout" content="long">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <style> iframe { width:20px; height:20px; } </style>
+ </head>
+ <body>
+ <div id=log></div>
+ <iframe class=limited-quirks></iframe>
+ <script src=../support/test-ref-iframe.js></script>
+ <script src=support/common.js></script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/quirks/hashless-hex-color/no-quirks.html b/tests/wpt/web-platform-tests/quirks/hashless-hex-color/no-quirks.html
new file mode 100644
index 00000000000..2ea5c666b74
--- /dev/null
+++ b/tests/wpt/web-platform-tests/quirks/hashless-hex-color/no-quirks.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html>
+ <head>
+ <title>The hashless hex color quirk (no-quirks)</title>
+ <meta name="timeout" content="long">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <style> iframe { width:20px; height:20px; } </style>
+ </head>
+ <body>
+ <div id=log></div>
+ <iframe class=no-quirks></iframe>
+ <script src=../support/test-ref-iframe.js></script>
+ <script src=support/common.js></script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/quirks/hashless-hex-color/quirks.html b/tests/wpt/web-platform-tests/quirks/hashless-hex-color/quirks.html
new file mode 100644
index 00000000000..bc45da2eab8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/quirks/hashless-hex-color/quirks.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html>
+ <head>
+ <title>The hashless hex color quirk (quirks)</title>
+ <meta name="timeout" content="long">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <style> iframe { width:20px; height:20px; } </style>
+ </head>
+ <body>
+ <div id=log></div>
+ <iframe class=quirks></iframe>
+ <script src=../support/test-ref-iframe.js></script>
+ <script src=support/common.js></script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/quirks/hashless-hex-color/support/common.js b/tests/wpt/web-platform-tests/quirks/hashless-hex-color/support/common.js
new file mode 100644
index 00000000000..eea618050da
--- /dev/null
+++ b/tests/wpt/web-platform-tests/quirks/hashless-hex-color/support/common.js
@@ -0,0 +1,423 @@
+setup({explicit_done:true});
+onload = function() {
+ setupIframe();
+
+ var tests = [
+ {input:"123", q:"#000123"},
+ {input:"023", q:"#000023"},
+ {input:"003", q:"#000003"},
+ {input:"000", q:"#000"},
+ {input:"abc", q:"#abc"},
+ {input:"ABC", q:"#abc"},
+ {input:"1ab", q:"#0001ab"},
+ {input:"1AB", q:"#0001ab"},
+ {input:"112233", q:"#123"},
+ {input:"012233", q:"#012233"},
+ {input:"002233", q:"#023"},
+ {input:"000233", q:"#000233"},
+ {input:"000033", q:"#003"},
+ {input:"000003", q:"#000003"},
+ {input:"000000", q:"#000000"},
+ {input:"aabbcc", q:"#abc"},
+ {input:"AABBCC", q:"#abc"},
+ {input:"11aabb", q:"#1ab"},
+ {input:"11AABB", q:"#1ab"},
+ {input:"\\31 23", q:"#123"},
+ {input:"\\61 bc", q:"#abc"},
+ {input:"\\41 BC", q:"#abc"},
+ {input:"\\31 ab", q:"#1ab"},
+ {input:"\\31 AB", q:"#1ab"},
+ {input:"\\31 12233", q:"#123"},
+ {input:"\\61 abbcc", q:"#abc"},
+ {input:"\\41 ABBCC", q:"#abc"},
+ {input:"\\31 1aabb", q:"#1ab"},
+ {input:"\\31 1AABB", q:"#1ab"},
+ {input:"12\\33 ", q:"#000123"},
+ {input:"1", q:"#000001"},
+ {input:"12", q:"#000012"},
+ {input:"1234", q:"#001234"},
+ {input:"12345", q:"#012345"},
+ {input:"1234567"},
+ {input:"12345678"},
+ {input:"a"},
+ {input:"aa"},
+ {input:"aaaa"},
+ {input:"aaaaa"},
+ {input:"aaaaaaa"},
+ {input:"aaaaaaaa"},
+ {input:"A"},
+ {input:"AA"},
+ {input:"AAAA"},
+ {input:"AAAAA"},
+ {input:"AAAAAAA"},
+ {input:"AAAAAAAA"},
+ {input:"1a", q:"#00001a"},
+ {input:"1abc", q:"#001abc"},
+ {input:"1abcd", q:"#01abcd"},
+ {input:"1abcdef"},
+ {input:"1abcdeff"},
+ {input:"+1", q:"#000001"},
+ {input:"+12", q:"#000012"},
+ {input:"+123", q:"#000123"},
+ {input:"+1234", q:"#001234"},
+ {input:"+12345", q:"#012345"},
+ {input:"+123456", q:"#123456"},
+ {input:"+1234567"},
+ {input:"+12345678"},
+ {input:"-1"},
+ {input:"-12"},
+ {input:"-123"},
+ {input:"-1234"},
+ {input:"-12345"},
+ {input:"-123456"},
+ {input:"-1234567"},
+ {input:"-12345678"},
+ {input:"+1a", q:"#00001a"},
+ {input:"+12a", q:"#00012a"},
+ {input:"+123a", q:"#00123a"},
+ {input:"+1234a", q:"#01234a"},
+ {input:"+12345a", q:"#12345a"},
+ {input:"+123456a"},
+ {input:"+1234567a"},
+ {input:"-1a"},
+ {input:"-12a"},
+ {input:"-123a"},
+ {input:"-1234a"},
+ {input:"-12345a"},
+ {input:"-123456a"},
+ {input:"-1234567a"},
+ {input:"-12345678a"},
+ {input:"+1A", q:"#00001a"},
+ {input:"+12A", q:"#00012a"},
+ {input:"+123A", q:"#00123a"},
+ {input:"+1234A", q:"#01234a"},
+ {input:"+12345A", q:"#12345a"},
+ {input:"+123456A"},
+ {input:"+1234567A"},
+ {input:"-1A"},
+ {input:"-12A"},
+ {input:"-123A"},
+ {input:"-1234A"},
+ {input:"-12345A"},
+ {input:"-123456A"},
+ {input:"-1234567A"},
+ {input:"-12345678A"},
+ {input:"+a"},
+ {input:"+aa"},
+ {input:"+aaa"},
+ {input:"+aaaa"},
+ {input:"+aaaaa"},
+ {input:"+aaaaaa"},
+ {input:"+aaaaaaa"},
+ {input:"+aaaaaaaa"},
+ {input:"-a"},
+ {input:"-aa"},
+ {input:"-aaa"},
+ {input:"-aaaa"},
+ {input:"-aaaaa"},
+ {input:"-aaaaaa"},
+ {input:"-aaaaaaa"},
+ {input:"-aaaaaaaa"},
+ {input:"-aaaaaaaaa"},
+ {input:"+A"},
+ {input:"+AA"},
+ {input:"+AAA"},
+ {input:"+AAAA"},
+ {input:"+AAAAA"},
+ {input:"+AAAAAA"},
+ {input:"+AAAAAAA"},
+ {input:"+AAAAAAAA"},
+ {input:"-A"},
+ {input:"-AA"},
+ {input:"-AAA"},
+ {input:"-AAAA"},
+ {input:"-AAAAA"},
+ {input:"-AAAAAA"},
+ {input:"-AAAAAAA"},
+ {input:"-AAAAAAAA"},
+ {input:"-AAAAAAAAA"},
+ {input:"1.1"},
+ {input:"1.11"},
+ {input:"1.111"},
+ {input:"1.1111"},
+ {input:"1.11111"},
+ {input:"1.111111"},
+ {input:"1.1111111"},
+ {input:"+1.1"},
+ {input:"+1.11"},
+ {input:"+1.111"},
+ {input:"+1.1111"},
+ {input:"+1.11111"},
+ {input:"+1.111111"},
+ {input:"+1.1111111"},
+ {input:"-1.1"},
+ {input:"-1.11"},
+ {input:"-1.111"},
+ {input:"-1.1111"},
+ {input:"-1.11111"},
+ {input:"-1.111111"},
+ {input:"-1.1111111"},
+ {input:"1.1a"},
+ {input:"1.11a"},
+ {input:"1.111a"},
+ {input:"1.1111a"},
+ {input:"1.11111a"},
+ {input:"1.111111a"},
+ {input:"+1.1a"},
+ {input:"+1.11a"},
+ {input:"+1.111a"},
+ {input:"+1.1111a"},
+ {input:"+1.11111a"},
+ {input:"+1.111111a"},
+ {input:"-1.1a"},
+ {input:"-1.11a"},
+ {input:"-1.111a"},
+ {input:"-1.1111a"},
+ {input:"-1.11111a"},
+ {input:"-1.111111a"},
+ {input:"1.0"},
+ {input:"11.0"},
+ {input:"111.0"},
+ {input:"1111.0"},
+ {input:"11111.0"},
+ {input:"111111.0"},
+ {input:"1111111.0"},
+ {input:"11111111.0"},
+ {input:"+1.0"},
+ {input:"+11.0"},
+ {input:"+111.0"},
+ {input:"+1111.0"},
+ {input:"+11111.0"},
+ {input:"+111111.0"},
+ {input:"+1111111.0"},
+ {input:"+11111111.0"},
+ {input:"-1.0"},
+ {input:"-11.0"},
+ {input:"-111.0"},
+ {input:"-1111.0"},
+ {input:"-11111.0"},
+ {input:"-111111.0"},
+ {input:"-1111111.0"},
+ {input:"-11111111.0"},
+ {input:"1.0a"},
+ {input:"11.0a"},
+ {input:"111.0a"},
+ {input:"1111.0a"},
+ {input:"11111.0a"},
+ {input:"111111.0a"},
+ {input:"1111111.0a"},
+ {input:"+1.0a"},
+ {input:"+11.0a"},
+ {input:"+111.0a"},
+ {input:"+1111.0a"},
+ {input:"+11111.0a"},
+ {input:"+111111.0a"},
+ {input:"+1111111.0a"},
+ {input:"-1.0a"},
+ {input:"-11.0a"},
+ {input:"-111.0a"},
+ {input:"-1111.0a"},
+ {input:"-11111.0a"},
+ {input:"-111111.0a"},
+ {input:"-1111111.0a"},
+ {input:"+/**/123"},
+ {input:"-/**/123"},
+ {input:"+/**/123456"},
+ {input:"-/**/123456"},
+ {input:"+/**/abc"},
+ {input:"-/**/abc"},
+ {input:"+/**/abcdef"},
+ {input:"-/**/abcdef"},
+ {input:"+/**/12a"},
+ {input:"-/**/12a"},
+ {input:"+/**/12345a"},
+ {input:"-/**/12345a"},
+ {input:"abg"},
+ {input:"aabbcg"},
+ {input:"1ag"},
+ {input:"1122ag"},
+ {input:"ABG"},
+ {input:"AABBCG"},
+ {input:"1AG"},
+ {input:"1122AG"},
+ {input:"@a"},
+ {input:"@ab"},
+ {input:"@abc"},
+ {input:"@abcd"},
+ {input:"@abcde"},
+ {input:"@abcdef"},
+ {input:"@1"},
+ {input:"@11"},
+ {input:"@111"},
+ {input:"@1111"},
+ {input:"@11111"},
+ {input:"@111111"},
+ {input:"@1a"},
+ {input:"@11a"},
+ {input:"@111a"},
+ {input:"@1111a"},
+ {input:"@11111a"},
+ {input:'"a"'},
+ {input:'"ab"'},
+ {input:'"abc"'},
+ {input:'"abcd"'},
+ {input:'"abcde"'},
+ {input:'"abcdef"'},
+ {input:'"1"'},
+ {input:'"11"'},
+ {input:'"111"'},
+ {input:'"1111"'},
+ {input:'"11111"'},
+ {input:'"111111"'},
+ {input:'"1a"'},
+ {input:'"11a"'},
+ {input:'"111a"'},
+ {input:'"1111a"'},
+ {input:'"11111a"'},
+ {input:"url(a)", svg:'url(a)'},
+ {input:"url(aa)", svg:'url(aa)'},
+ {input:"url(aaa)", svg:'url(aaa)'},
+ {input:"url(aaaa)", svg:'url(aaaa)'},
+ {input:"url(aaaaa)", svg:'url(aaaaa)'},
+ {input:"url(aaaaaa)", svg:'url(aaaaaa)'},
+ {input:"url('a')", svg:'url(a)'},
+ {input:"url('aa')", svg:'url(aa)'},
+ {input:"url('aaa')", svg:'url(aaa)'},
+ {input:"url('aaaa')", svg:'url(aaaa)'},
+ {input:"url('aaaaa')", svg:'url(aaaaa)'},
+ {input:"url('aaaaaa')", svg:'url(aaaaaa)'},
+ {input:"#a"},
+ {input:"#aa"},
+ {input:"#aaaaa"},
+ {input:"#aaaaaaa"},
+ {input:"#1"},
+ {input:"#11"},
+ {input:"#11111"},
+ {input:"#1111111"},
+ {input:"#1a"},
+ {input:"#1111a"},
+ {input:"#111111a"},
+ {input:"1%"},
+ {input:"11%"},
+ {input:"111%"},
+ {input:"1111%"},
+ {input:"11111%"},
+ {input:"111111%"},
+ {input:"calc(123)"},
+ {input:"rgb(119, 255, 255)", q:"#7ff", s:"#7ff", svg:"#7ff"},
+ {input:"rgba(119, 255, 255, 001)", q:"#7ff", s:"#7ff", svg:"#7ff"},
+ {input:"hsl(100, 100%, 100%)", q:"#fff", s:"#fff", svg:"#fff"},
+ {input:"hsla(100, 100%, 100%, 001)", q:"#fff", s:"#fff", svg:"#fff"},
+ {input:"rgb(calc(100 + 155), 255, 255)", q:"#fff", s:"#fff", svg:"#fff"},
+ {input:"rgba(calc(100 + 155), 255, 255, 001)", q:"#fff", s:"#fff", svg:"#fff"},
+ {input:"hsl(calc(050 + 050), 100%, 100%)", q:"#fff", s:"#fff", svg:"#fff"},
+ {input:"hsla(calc(050 + 050), 100%, 100%, 001)", q:"#fff", s:"#fff", svg:"#fff"},
+ {input:"rgb(/**/255, 255, 255)", q:"#fff", s:"#fff", svg:"#fff"},
+ {input:"rgb(/**/255/**/, /**/255/**/, /**/255/**/)", q:"#fff", s:"#fff", svg:"#fff"},
+ {input:"rgb(calc(/**/100/**/ + /**/155/**/), 255, 255)", q:"#fff", s:"#fff", svg:"#fff"},
+ {input:"#123 123 abc 12a", q:"#123 #000123 #abc #00012a", shorthand:true},
+ {input:"rgb(119, 255, 255) 123", q:"#7ff #000123", shorthand:true},
+ {input:"123 rgb(119, 255, 255)", q:"#000123 #7ff", shorthand:true},
+ {input:"1e1"},
+ {input:"11e1"},
+ {input:"111e1"},
+ {input:"1111e1"},
+ {input:"11111e1"},
+ {input:"111111e1"},
+ {input:"1e+1"},
+ {input:"11e+1"},
+ {input:"111e+1"},
+ {input:"1111e+1"},
+ {input:"11111e+1"},
+ {input:"111111e+1"},
+ {input:"1e-0"},
+ {input:"11e-0"},
+ {input:"111e-0"},
+ {input:"1111e-0"},
+ {input:"11111e-0"},
+ {input:"111111e-0"},
+ {input:"1e1a"},
+ {input:"11e1a"},
+ {input:"111e1a"},
+ {input:"1111e1a"},
+ {input:"11111e1a"},
+ {input:"111111e1a"},
+ {desc:"1111111111...", input:"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"},
+ {desc:"1111111111...a", input:"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111a"},
+ {desc:"a1111111111...", input:"a1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"},
+ ];
+
+ var props = [
+ {prop:'background-color', check:'background-color'},
+ {prop:'border-color', check:'border-top-color', check_also:['border-right-color', 'border-bottom-color', 'border-left-color']},
+ {prop:'border-top-color', check:'border-top-color'},
+ {prop:'border-right-color', check:'border-right-color'},
+ {prop:'border-bottom-color', check:'border-bottom-color'},
+ {prop:'border-left-color', check:'border-left-color'},
+ {prop:'color', check:'color'},
+ ];
+ var style_template = '#test{{prop}:{test};}' +
+ '#ref{{prop}:{ref};}';
+
+ tests.forEach(function(t) {
+ var name = t.desc || t.input;
+ var test_html = async_test(name);
+ var test_svg = async_test(name + ' (SVG)');
+ for (var i in props) {
+ if (t.shorthand && !(props[i].check_also)) {
+ continue;
+ }
+ test_html.step(function() {
+ win.style.textContent = style_template.replace('{test}', t.input)
+ .replace('{ref}', quirks ? t.q : t.s).replace(/\{prop\}/g, props[i].prop);
+ assert_equals(win.getComputedStyle(win.test).getPropertyValue(props[i].check),
+ win.getComputedStyle(win.ref).getPropertyValue(props[i].check),
+ props[i].prop);
+ if (t.shorthand && props[i].check_also) {
+ for (var j in props[i].check_also) {
+ assert_equals(win.getComputedStyle(win.test).getPropertyValue(props[i].check_also[j]),
+ win.getComputedStyle(win.ref).getPropertyValue(props[i].check_also[j]),
+ props[i].prop + ' checking ' + props[i].check_also[j]);
+ }
+ }
+ });
+ test_svg.step(function() {
+ win.svg.setAttribute('fill', t.input);
+ if (t.svg) {
+ win.svg_ref.setAttribute('fill', t.svg);
+ } else {
+ win.svg_ref.removeAttribute('fill');
+ }
+ assert_equals(win.getComputedStyle(win.svg).fill, win.getComputedStyle(win.svg_ref).fill, 'SVG fill=""');
+ });
+ }
+ test_html.done();
+ test_svg.done();
+ });
+
+ if (quirks) {
+ var other_tests = [
+ {input:'background:abc', prop:'background-color'},
+ {input:'border-top:1px solid abc', prop:'border-top-color'},
+ {input:'border-right:1px solid abc', prop:'border-right-color'},
+ {input:'border-bottom:1px solid abc', prop:'border-bottom-color'},
+ {input:'border-left:1px solid abc', prop:'border-left-color'},
+ {input:'border:1px solid abc', prop:'border-top-color'},
+ {input:'outline-color:abc', prop:'outline-color'},
+ {input:'outline:1px solid abc', prop:'outline-color'}
+ ];
+
+ var other_template = "#test{{test};}"
+
+ other_tests.forEach(function(t) {
+ test(function() {
+ win.style.textContent = other_template.replace('{test}', t.input);
+ assert_equals(win.getComputedStyle(win.test).getPropertyValue(t.prop),
+ win.getComputedStyle(win.ref).getPropertyValue(t.prop),
+ 'quirk was supported');
+ }, document.title+', excluded property '+t.input);
+ });
+ }
+
+ done();
+}
diff --git a/tests/wpt/web-platform-tests/quirks/percentage-height-calculation.html b/tests/wpt/web-platform-tests/quirks/percentage-height-calculation.html
index 7cadd8b0faf..987cc245ca2 100644
--- a/tests/wpt/web-platform-tests/quirks/percentage-height-calculation.html
+++ b/tests/wpt/web-platform-tests/quirks/percentage-height-calculation.html
@@ -64,7 +64,7 @@
{style:'#foo { height:100px } #test { height:calc(100% + 1px) }', body:'<div id=foo><div id=test></div></div>', q:101, s:101},
{style:'#foo { height:100px } #test { height:5px; height:calc(100% + 1px) }', body:'<div id=foo><div><div id=test></div></div></div>', q:0, s:0},
{style:'html { display:inline } #test { height:100% }', body:'<div id=test></div>', q:184, s:0}, // display:inline on root has no effect
- {style:'html { margin:10px } body { display:inline } #test { height:100% }', body:'<div id=test></div>', q:200, s:0},
+ {style:'html { margin:10px } body { display:inline } #test { height:100% }', body:'<div id=test></div>', q:180, s:0},
{style:'body { margin:0 } #test { height:100% }', body:'<div id=test></div>', q:200, s:0},
{style:'body { margin:0; padding:10px } #test { height:100% }', body:'<div id=test></div>', q:180, s:0},
{style:'body { margin:0; border:10px solid } #test { height:100% }', body:'<div id=test></div>', q:180, s:0},
@@ -118,10 +118,10 @@
{input:'<html xmlns="{html}"><head><style>#test { height:100% }</style></head><body/><div id="test"/></html>', q:200, s:0},
{input:'<html xmlns="{html}"><head><style>#test { height:100% }</style></head><span><body><div id="test"/></body></span></html>', q:200, s:0},
{input:'<html xmlns="{html}"><head><style>#test { height:100% }</style></head><body><body><div id="test"/></body></body></html>', q:200, s:0},
- {input:'<html><head xmlns="{html}"><style>#test { height:100% }</style></head><body xmlns="{html}"><div id="test"/></body></html>', q:200, s:0},
- {input:'<div xmlns="{html}"><head><style>#test { height:100% }</style></head><body><div id="test"/></body></div>', q:200, s:0},
+ {input:'<html><head xmlns="{html}"><style>#test { height:100% }</style></head><body xmlns="{html}"><div id="test"/></body></html>', q:184, s:0},
+ {input:'<div xmlns="{html}"><head><style>#test { height:100% }</style></head><body><div id="test"/></body></div>', q:184, s:0},
{input:'<html xmlns="{html}"><head><style>#test { height:100% }</style></head><body xmlns=""><div xmlns="{html}" id="test"/></body></html>', q:200, s:0},
- {input:'<HTML xmlns="{html}"><head><style>#test { height:100% }</style></head><body><div id="test"/></body></HTML>', q:200, s:0},
+ {input:'<HTML xmlns="{html}"><head><style>#test { height:100% }</style></head><body><div id="test"/></body></HTML>', q:184, s:0},
{input:'<html xmlns="{html}"><head><style>#test { height:100% }</style></head><BODY><div id="test"/></BODY></html>', q:200, s:0},
];
diff --git a/tests/wpt/web-platform-tests/quirks/support/test-ref-iframe.js b/tests/wpt/web-platform-tests/quirks/support/test-ref-iframe.js
new file mode 100644
index 00000000000..e5df41d4249
--- /dev/null
+++ b/tests/wpt/web-platform-tests/quirks/support/test-ref-iframe.js
@@ -0,0 +1,17 @@
+function setupIframe() {
+ var iframe = document.querySelector('iframe');
+ var html = "<style id=style></style><div id=test></div><div id=ref></div><svg><circle id=svg /><circle id=svg_ref /></svg>";
+ if (iframe.className === "limited-quirks") {
+ html = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">' + html;
+ } else if (iframe.className === "no-quirks") {
+ html = '<!DOCTYPE HTML>' + html;
+ }
+ window.quirks = iframe.className === "quirks";
+ window.win = iframe.contentWindow;
+ win.document.open();
+ win.document.write(html);
+ win.document.close();
+ ['style', 'test', 'ref', 'svg', 'svg_ref'].forEach(function(id) {
+ win[id] = win.document.getElementById(id);
+ });
+}
diff --git a/tests/wpt/web-platform-tests/quirks/unitless-length.html b/tests/wpt/web-platform-tests/quirks/unitless-length.html
deleted file mode 100644
index 944c91fe395..00000000000
--- a/tests/wpt/web-platform-tests/quirks/unitless-length.html
+++ /dev/null
@@ -1,219 +0,0 @@
-<!doctype html>
-<html>
- <head>
- <title>The unitless length quirk</title>
- <script src="/resources/testharness.js"></script>
- <script src="/resources/testharnessreport.js"></script>
- <style> iframe { width:20px; height:20px; } </style>
- </head>
- <body>
- <div id=log></div>
- <iframe id=quirks></iframe>
- <iframe id=almost></iframe>
- <iframe id=standards></iframe>
- <script>
- setup({explicit_done:true});
- onload = function() {
- var html = "<style id=style></style><div id=test></div><div id=ref></div>";
- var a_doctype = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">';
- var s_doctype = '<!DOCTYPE HTML>';
- var q = document.getElementById('quirks').contentWindow;
- var a = document.getElementById('almost').contentWindow;
- var s = document.getElementById('standards').contentWindow;
- q.document.open();
- q.document.write(html);
- q.document.close();
- a.document.open();
- a.document.write(a_doctype + html);
- a.document.close();
- s.document.open();
- s.document.write(s_doctype + html);
- s.document.close();
- [q, a, s].forEach(function(win) {
- ['style', 'test', 'ref'].forEach(function(id) {
- win[id] = win.document.getElementById(id);
- });
- });
-
- var tests = [
- {input:"1", q:"1px"},
- {input:"+1", q:"1px"},
- {input:"-1", q:"-1px"},
- {input:"1.5", q:"1.5px"},
- {input:"+1.5", q:"1.5px"},
- {input:"-1.5", q:"-1.5px"},
- {input:"\\31 "},
- {input:"+\\31 "},
- {input:"-\\31 "},
- {input:"\\31 .5"},
- {input:"+\\31 .5"},
- {input:"-\\31 .5"},
- {input:"1\\31 "},
- {input:"+1\\31 "},
- {input:"-1\\31 "},
- {input:"1\\31 .5"},
- {input:"+1\\31 .5"},
- {input:"-1\\31 .5"},
- {input:"a"},
- {input:"A"},
- {input:"1a"},
- {input:"+1a"},
- {input:"-1a"},
- {input:"+1A"},
- {input:"-1A"},
- {input:"+a"},
- {input:"-a"},
- {input:"+A"},
- {input:"-A"},
- {input:"@a"},
- {input:"@1"},
- {input:"@1a"},
- {input:'"a"'},
- {input:'"1"'},
- {input:'"1a"'},
- {input:"url(1)"},
- {input:"url('1')"},
- {input:"#1"},
- {input:"#01"},
- {input:"#001"},
- {input:"#0001"},
- {input:"#00001"},
- {input:"#000001"},
- {input:"+/**/1"},
- {input:"-/**/1"},
- {input:"calc(1)"},
- {input:"calc(2 * 2px)", q:"4px", s:"4px"},
- {input:"1px 2", q:"1px 2px", shorthand:true},
- {input:"1 2px", q:"1px 2px", shorthand:true},
- {input:"1px calc(2)", shorthand:true},
- {input:"calc(1) 2px", shorthand:true},
- {input:"1 +2", q:"1px 2px", shorthand:true},
- {input:"1 -2", q:"1px -2px", shorthand:true},
- ];
-
- var props = [
- {prop:'background-position', check:'background-position', check_also:[]},
- {prop:'border-spacing', check:'border-spacing', check_also:[]},
- {prop:'border-top-width', check:'border-top-width'},
- {prop:'border-right-width', check:'border-right-width'},
- {prop:'border-bottom-width', check:'border-bottom-width'},
- {prop:'border-left-width', check:'border-left-width'},
- {prop:'border-width', check:'border-top-width', check_also:['border-right-width', 'border-bottom-width', 'border-left-width']},
- {prop:'bottom', check:'bottom'},
- {prop:'clip', check:'clip'},
- {prop:'font-size', check:'font-size'},
- {prop:'height', check:'height'},
- {prop:'left', check:'left'},
- {prop:'letter-spacing', check:'letter-spacing'},
- {prop:'margin-right', check:'margin-right'},
- {prop:'margin-left', check:'margin-left'},
- {prop:'margin-top', check:'margin-top'},
- {prop:'margin-bottom', check:'margin-bottom'},
- {prop:'margin', check:'margin-top', check_also:['margin-right', 'margin-bottom', 'margin-left']},
- {prop:'max-height', check:'max-height'},
- {prop:'max-width', check:'max-width'},
- {prop:'min-height', check:'min-height'},
- {prop:'min-width', check:'min-width'},
- {prop:'padding-top', check:'padding-top'},
- {prop:'padding-right', check:'padding-right'},
- {prop:'padding-bottom', check:'padding-bottom'},
- {prop:'padding-left', check:'padding-left'},
- {prop:'padding', check:'padding-top', check_also:['padding-right', 'padding-bottom', 'padding-left']},
- {prop:'right', check:'right'},
- {prop:'text-indent', check:'text-indent'},
- {prop:'top', check:'top'},
- {prop:'vertical-align', check:'vertical-align'},
- {prop:'width', check:'width'},
- {prop:'word-spacing', check:'word-spacing'},
- ];
- var style_template = '#test{border-style:solid;position:relative;{prop}:{test};}' +
- '#ref{border-style:solid;position:relative;{prop}:{ref};}';
-
- tests.forEach(function(t) {
- for (var i in props) {
- if (t.shorthand && !(props[i].check_also)) {
- continue;
- }
- test(function() {
- q.style.textContent = style_template.replace('{test}', t.input)
- .replace('{ref}', t.q).replace(/\{prop\}/g, props[i].prop)
- .replace(/clip:[^;]+/g, function(match) {
- return 'clip:rect(auto, auto, auto, ' + match.substr(5) + ')';
- });
- assert_equals(q.getComputedStyle(q.test).getPropertyValue(props[i].check),
- q.getComputedStyle(q.ref).getPropertyValue(props[i].check),
- props[i].prop);
- if (t.shorthand && props[i].check_also) {
- for (var j in props[i].check_also) {
- assert_equals(q.getComputedStyle(q.test).getPropertyValue(props[i].check_also[j]),
- q.getComputedStyle(q.ref).getPropertyValue(props[i].check_also[j]),
- props[i].prop + ', checking ' + props[i].check_also[j]);
- }
- }
- }, props[i].prop + ": " + t.input + ' (quirks)');
- test(function() {
- a.style.textContent = style_template.replace('{test}', t.input)
- .replace('{ref}', t.s).replace(/\{prop\}/g, props[i].prop)
- .replace(/clip:[^;]+/g, function(match) {
- return 'clip:rect(auto, auto, auto, ' + match.substr(5) + ')';
- });
- assert_equals(a.getComputedStyle(a.test).getPropertyValue(props[i].check),
- a.getComputedStyle(a.ref).getPropertyValue(props[i].check),
- props[i].prop + ' in almost standards mode');
- if (t.shorthand && props[i].check_also) {
- for (var j in props[i].check_also) {
- assert_equals(a.getComputedStyle(a.test).getPropertyValue(props[i].check_also[j]),
- a.getComputedStyle(a.ref).getPropertyValue(props[i].check_also[j]),
- props[i].prop + ', checking ' + props[i].check_also[j]);
- }
- }
- }, props[i].prop + ": " + t.input + ' (almost standards)');
- test(function() {
- s.style.textContent = style_template.replace('{test}', t.input)
- .replace('{ref}', t.s).replace(/\{prop\}/g, props[i].prop)
- .replace(/clip:[^;]+/g, function(match) {
- return 'clip:rect(auto, auto, auto, ' + match.substr(5) + ')';
- });
- assert_equals(s.getComputedStyle(s.test).getPropertyValue(props[i].check),
- s.getComputedStyle(s.ref).getPropertyValue(props[i].check),
- props[i].prop + ' in standards mode');
- if (t.shorthand && props[i].check_also) {
- for (var j in props[i].check_also) {
- assert_equals(s.getComputedStyle(s.test).getPropertyValue(props[i].check_also[j]),
- s.getComputedStyle(s.ref).getPropertyValue(props[i].check_also[j]),
- props[i].prop + ', checking ' + props[i].check_also[j]);
- }
- }
- }, props[i].prop + ": " + t.input + ' (standards)');
- }
- });
-
- var other_tests = [
- {input:'background:1 1', prop:'background-position'},
- {input:'border-top:red solid 1', prop:'border-top-width'},
- {input:'border-right:red solid 1', prop:'border-right-width'},
- {input:'border-bottom:red solid 1', prop:'border-bottom-width'},
- {input:'border-left:red solid 1', prop:'border-left-width'},
- {input:'border:red solid 1', prop:'border-top-width'},
- {input:'font:normal normal normal 40 sans-serif', prop:'font-size'},
- {input:'outline:red solid 1', prop:'outline-width'},
- {input:'outline-width:1', prop:'outline-width'},
- ];
-
- var other_template = "#test{position:relative;outline-style:solid;{test}}" +
- "#ref{outline-style:solid}";
-
- other_tests.forEach(function(t) {
- test(function() {
- q.style.textContent = other_template.replace('{test}', t.input);
- assert_equals(q.getComputedStyle(q.test).getPropertyValue(t.prop),
- q.getComputedStyle(q.ref).getPropertyValue(t.prop),
- 'quirk was supported');
- }, 'Excluded property '+t.input);
- });
-
- done();
- }
- </script>
- </body>
-</html>
diff --git a/tests/wpt/web-platform-tests/quirks/unitless-length/limited-quirks.html b/tests/wpt/web-platform-tests/quirks/unitless-length/limited-quirks.html
new file mode 100644
index 00000000000..fab0b3b805b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/quirks/unitless-length/limited-quirks.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<html>
+ <head>
+ <title>The unitless length quirk (limited-quirks)</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <style> iframe { width:20px; height:20px; } </style>
+ </head>
+ <body>
+ <div id=log></div>
+ <iframe class=limited-quirks></iframe>
+ <script src=../support/test-ref-iframe.js></script>
+ <script src=support/common.js></script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/quirks/unitless-length/no-quirks.html b/tests/wpt/web-platform-tests/quirks/unitless-length/no-quirks.html
new file mode 100644
index 00000000000..cd192029df4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/quirks/unitless-length/no-quirks.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<html>
+ <head>
+ <title>The unitless length quirk (no-quirks)</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <style> iframe { width:20px; height:20px; } </style>
+ </head>
+ <body>
+ <div id=log></div>
+ <iframe class=no-quirks></iframe>
+ <script src=../support/test-ref-iframe.js></script>
+ <script src=support/common.js></script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/quirks/unitless-length/quirks.html b/tests/wpt/web-platform-tests/quirks/unitless-length/quirks.html
new file mode 100644
index 00000000000..80bda7a3929
--- /dev/null
+++ b/tests/wpt/web-platform-tests/quirks/unitless-length/quirks.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<html>
+ <head>
+ <title>The unitless length quirk (quirks)</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <style> iframe { width:20px; height:20px; } </style>
+ </head>
+ <body>
+ <div id=log></div>
+ <iframe class=quirks></iframe>
+ <script src=../support/test-ref-iframe.js></script>
+ <script src=support/common.js></script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/quirks/unitless-length/support/common.js b/tests/wpt/web-platform-tests/quirks/unitless-length/support/common.js
new file mode 100644
index 00000000000..f2f7eab4e33
--- /dev/null
+++ b/tests/wpt/web-platform-tests/quirks/unitless-length/support/common.js
@@ -0,0 +1,152 @@
+setup({explicit_done:true});
+onload = function() {
+ setupIframe();
+
+ var tests = [
+ {input:"1", q:"1px"},
+ {input:"+1", q:"1px"},
+ {input:"-1", q:"-1px"},
+ {input:"1.5", q:"1.5px"},
+ {input:"+1.5", q:"1.5px"},
+ {input:"-1.5", q:"-1.5px"},
+ {input:"\\31 "},
+ {input:"+\\31 "},
+ {input:"-\\31 "},
+ {input:"\\31 .5"},
+ {input:"+\\31 .5"},
+ {input:"-\\31 .5"},
+ {input:"1\\31 "},
+ {input:"+1\\31 "},
+ {input:"-1\\31 "},
+ {input:"1\\31 .5"},
+ {input:"+1\\31 .5"},
+ {input:"-1\\31 .5"},
+ {input:"a"},
+ {input:"A"},
+ {input:"1a"},
+ {input:"+1a"},
+ {input:"-1a"},
+ {input:"+1A"},
+ {input:"-1A"},
+ {input:"+a"},
+ {input:"-a"},
+ {input:"+A"},
+ {input:"-A"},
+ {input:"@a"},
+ {input:"@1"},
+ {input:"@1a"},
+ {input:'"a"'},
+ {input:'"1"'},
+ {input:'"1a"'},
+ {input:"url(1)"},
+ {input:"url('1')"},
+ {input:"#1"},
+ {input:"#01"},
+ {input:"#001"},
+ {input:"#0001"},
+ {input:"#00001"},
+ {input:"#000001"},
+ {input:"+/**/1"},
+ {input:"-/**/1"},
+ {input:"calc(1)"},
+ {input:"calc(2 * 2px)", q:"4px", s:"4px"},
+ {input:"1px 2", q:"1px 2px", shorthand:true},
+ {input:"1 2px", q:"1px 2px", shorthand:true},
+ {input:"1px calc(2)", shorthand:true},
+ {input:"calc(1) 2px", shorthand:true},
+ {input:"1 +2", q:"1px 2px", shorthand:true},
+ {input:"1 -2", q:"1px -2px", shorthand:true},
+ ];
+
+ var props = [
+ {prop:'background-position', check:'background-position', check_also:[]},
+ {prop:'border-spacing', check:'border-spacing', check_also:[]},
+ {prop:'border-top-width', check:'border-top-width'},
+ {prop:'border-right-width', check:'border-right-width'},
+ {prop:'border-bottom-width', check:'border-bottom-width'},
+ {prop:'border-left-width', check:'border-left-width'},
+ {prop:'border-width', check:'border-top-width', check_also:['border-right-width', 'border-bottom-width', 'border-left-width']},
+ {prop:'bottom', check:'bottom'},
+ {prop:'clip', check:'clip'},
+ {prop:'font-size', check:'font-size'},
+ {prop:'height', check:'height'},
+ {prop:'left', check:'left'},
+ {prop:'letter-spacing', check:'letter-spacing'},
+ {prop:'margin-right', check:'margin-right'},
+ {prop:'margin-left', check:'margin-left'},
+ {prop:'margin-top', check:'margin-top'},
+ {prop:'margin-bottom', check:'margin-bottom'},
+ {prop:'margin', check:'margin-top', check_also:['margin-right', 'margin-bottom', 'margin-left']},
+ {prop:'max-height', check:'max-height'},
+ {prop:'max-width', check:'max-width'},
+ {prop:'min-height', check:'min-height'},
+ {prop:'min-width', check:'min-width'},
+ {prop:'padding-top', check:'padding-top'},
+ {prop:'padding-right', check:'padding-right'},
+ {prop:'padding-bottom', check:'padding-bottom'},
+ {prop:'padding-left', check:'padding-left'},
+ {prop:'padding', check:'padding-top', check_also:['padding-right', 'padding-bottom', 'padding-left']},
+ {prop:'right', check:'right'},
+ {prop:'text-indent', check:'text-indent'},
+ {prop:'top', check:'top'},
+ {prop:'vertical-align', check:'vertical-align'},
+ {prop:'width', check:'width'},
+ {prop:'word-spacing', check:'word-spacing'},
+ ];
+ var style_template = '#test{border-style:solid;position:relative;{prop}:{test};}' +
+ '#ref{border-style:solid;position:relative;{prop}:{ref};}';
+
+ tests.forEach(function(t) {
+ for (var i in props) {
+ if (t.shorthand && !(props[i].check_also)) {
+ continue;
+ }
+ test(function() {
+ win.style.textContent = style_template.replace('{test}', t.input)
+ .replace('{ref}', quirks ? t.q : t.s).replace(/\{prop\}/g, props[i].prop)
+ .replace(/clip:[^;]+/g, function(match) {
+ return 'clip:rect(auto, auto, auto, ' + match.substr(5) + ')';
+ });
+ assert_equals(win.getComputedStyle(win.test).getPropertyValue(props[i].check),
+ win.getComputedStyle(win.ref).getPropertyValue(props[i].check),
+ props[i].prop);
+ if (t.shorthand && props[i].check_also) {
+ for (var j in props[i].check_also) {
+ assert_equals(win.getComputedStyle(win.test).getPropertyValue(props[i].check_also[j]),
+ win.getComputedStyle(win.ref).getPropertyValue(props[i].check_also[j]),
+ props[i].prop + ', checking ' + props[i].check_also[j]);
+ }
+ }
+ }, props[i].prop + ": " + t.input);
+
+ }
+ });
+
+ if (quirks) {
+ var other_tests = [
+ {input:'background:1 1', prop:'background-position'},
+ {input:'border-top:red solid 1', prop:'border-top-width'},
+ {input:'border-right:red solid 1', prop:'border-right-width'},
+ {input:'border-bottom:red solid 1', prop:'border-bottom-width'},
+ {input:'border-left:red solid 1', prop:'border-left-width'},
+ {input:'border:red solid 1', prop:'border-top-width'},
+ {input:'font:normal normal normal 40 sans-serif', prop:'font-size'},
+ {input:'outline:red solid 1', prop:'outline-width'},
+ {input:'outline-width:1', prop:'outline-width'},
+ ];
+
+ var other_template = "#test{position:relative;outline-style:solid;{test}}" +
+ "#ref{outline-style:solid}";
+
+ other_tests.forEach(function(t) {
+ test(function() {
+ win.style.textContent = other_template.replace('{test}', t.input);
+ assert_equals(win.getComputedStyle(win.test).getPropertyValue(t.prop),
+ win.getComputedStyle(win.ref).getPropertyValue(t.prop),
+ 'quirk was supported');
+ }, 'Excluded property '+t.input);
+ });
+ }
+
+ done();
+}
diff --git a/tests/wpt/web-platform-tests/referrer-policy/generic/common.js b/tests/wpt/web-platform-tests/referrer-policy/generic/common.js
index 1ccdaabf077..c98056f680b 100644
--- a/tests/wpt/web-platform-tests/referrer-policy/generic/common.js
+++ b/tests/wpt/web-platform-tests/referrer-policy/generic/common.js
@@ -230,9 +230,10 @@ function queryAreaLink(url, callback, referrer_policy) {
queryNavigable(area, url, callback, referrer_policy)
}
-function queryScript(url, callback) {
+function queryScript(url, callback, attributes, referrer_policy) {
var script = document.createElement("script");
script.src = url;
+ script.referrerPolicy = referrer_policy;
var listener = function(event) {
var server_data = event.data;
diff --git a/tests/wpt/web-platform-tests/resources/chromium/generic_sensor_mocks.js b/tests/wpt/web-platform-tests/resources/chromium/generic_sensor_mocks.js
index 2cdf868b9bf..24a469199ff 100644
--- a/tests/wpt/web-platform-tests/resources/chromium/generic_sensor_mocks.js
+++ b/tests/wpt/web-platform-tests/resources/chromium/generic_sensor_mocks.js
@@ -167,23 +167,13 @@ var GenericSensorTest = (() => {
initParams: initParams};
}
- async reset() {
+ reset() {
if (this.activeSensor_ !== null) {
this.activeSensor_.reset();
this.activeSensor_ = null;
}
- // Wait for an event loop iteration to let
- // the pending mojo commands pass.
- function schedule(func) {
- return new Promise(resolve => {
- setTimeout(() => {
- func();
- resolve();
- }, 0);
- });
- }
- await schedule(this.binding_.close.bind(this.binding_));
- await schedule(this.interceptor_.stop.bind(this.interceptor_));
+ this.binding_.close();
+ this.interceptor_.stop();
}
}
@@ -216,9 +206,13 @@ var GenericSensorTest = (() => {
async reset() {
if (!testInternal.initialized)
throw new Error('Call initialize() before reset().');
- await testInternal.sensorProvider.reset();
+ testInternal.sensorProvider.reset();
testInternal.sensorProvider = null;
testInternal.initialized = false;
+
+ // Wait for an event loop iteration to let any pending mojo commands in
+ // the sensor provider finish.
+ await new Promise(resolve => setTimeout(resolve, 0));
}
}
diff --git a/tests/wpt/web-platform-tests/resources/testharness.js b/tests/wpt/web-platform-tests/resources/testharness.js
index d4bf2920616..54379c665a8 100644
--- a/tests/wpt/web-platform-tests/resources/testharness.js
+++ b/tests/wpt/web-platform-tests/resources/testharness.js
@@ -997,6 +997,9 @@ policies and contribution forms [3].
function assert_object_equals(actual, expected, description)
{
+ assert(typeof actual === "object" && actual !== null, "assert_object_equals", description,
+ "value is ${actual}, expected object",
+ {actual: actual});
//This needs to be improved a great deal
function check_equal(actual, expected, stack)
{
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/referrer-policy-header.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/referrer-policy-header.https.html
index f2e91d472c0..05d773e3144 100644
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/referrer-policy-header.https.html
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/referrer-policy-header.https.html
@@ -5,39 +5,41 @@
<script src="/common/get-host-info.sub.js"></script>
<script src="resources/test-helpers.sub.js"></script>
<script>
-promise_test(function(t) {
- var SCOPE = 'resources/referrer-policy-iframe.html';
- var SCRIPT = 'resources/fetch-rewrite-worker-referrer-policy.js';
- var host_info = get_host_info();
- var body, unregister;
- body = service_worker_unregister_and_register(t, SCRIPT, SCOPE)
- .then(function(registration) {
- unregister = registration.unregister.bind(registration);
- return wait_for_state(t, registration.installing, 'activated');
- })
- .then(function() { return with_iframe(SCOPE); })
- .then(function(frame) {
- var channel = new MessageChannel();
- t.add_cleanup(function() {
- frame.remove();
- });
+const SCOPE = 'resources/referrer-policy-iframe.html';
+const SCRIPT = 'resources/fetch-rewrite-worker-referrer-policy.js';
- return new Promise(function(resolve) {
- channel.port1.onmessage = resolve;
- frame.contentWindow.postMessage({},
- host_info['HTTPS_ORIGIN'],
- [channel.port2]);
- });
- })
- .then(function(e) {
- assert_equals(e.data.results, 'finish');
- });
+promise_test(async t => {
+ const registration =
+ await service_worker_unregister_and_register(t, SCRIPT, SCOPE);
+ await wait_for_state(t, registration.installing, 'activated');
+ promise_test(() => registration.unregister(),
+ 'Remove registration as a cleanup');
+}, 'Initialize global state (service worker registration)');
- // Schedule un-registration to occur after test execution has completed,
- // without hiding test failure.
- return body
- .then(unregister, unregister)
- .then(function() { return body; });
- }, 'Verify the referer with a Referrer Policy');
+promise_test(async t => {
+ const full_scope_url = new URL(SCOPE, location.href);
+ const redirect_to = `${full_scope_url.href}?ignore=true`;
+ const frame = await with_iframe(
+ `${SCOPE}?pipe=status(302)|header(Location,${redirect_to})|` +
+ 'header(Referrer-Policy,origin)');
+ assert_equals(frame.contentDocument.referrer,
+ full_scope_url.origin + '/');
+ t.add_cleanup(() => frame.remove());
+}, 'Referrer for a main resource redirected with referrer-policy (origin) ' +
+ 'should only have origin.');
+
+promise_test(async t => {
+ const host_info = get_host_info();
+ const frame = await with_iframe(SCOPE);
+ const channel = new MessageChannel();
+ t.add_cleanup(() => frame.remove());
+ const e = await new Promise(resolve => {
+ channel.port1.onmessage = resolve;
+ frame.contentWindow.postMessage(
+ {}, host_info['HTTPS_ORIGIN'], [channel.port2]);
+ });
+ assert_equals(e.data.results, 'finish');
+}, 'Referrer for fetch requests initiated from a service worker with ' +
+ 'referrer-policy (origin) should only have origin.');
</script>
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/performance-timeline-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/performance-timeline-worker.js
index 6f7df75e921..a752b436524 100644
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/performance-timeline-worker.js
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/performance-timeline-worker.js
@@ -44,12 +44,22 @@ promise_test(function(test) {
assert_greater_than(entry.startTime, 0);
assert_greater_than(entry.responseEnd, entry.startTime);
}
- return new Promise(function(resolve) {
- performance.onresourcetimingbufferfull = resolve;
+ return Promise.race([
+ new Promise(function(resolve) {
+ performance.onresourcetimingbufferfull = _ => {
+ resolve('bufferfull');
+ }
performance.setResourceTimingBufferSize(expectedResources.length);
- });
+ }),
+
+ // Race the bufferfull event against another fetch. We should get the
+ // event before this completes. This allows us to detect a failure
+ // to dispatch the event without timing out the entire test.
+ fetch('dummy.txt').then(resp => resp.text())
+ ]);
})
- .then(function() {
+ .then(function(result) {
+ assert_equals(result, 'bufferfull');
performance.clearResourceTimings();
assert_equals(performance.getEntriesByType('resource').length, 0);
})
diff --git a/tests/wpt/web-platform-tests/shadow-dom/Document-prototype-currentScript.html b/tests/wpt/web-platform-tests/shadow-dom/Document-prototype-currentScript.html
index ff0344fe493..176ef348fcb 100644
--- a/tests/wpt/web-platform-tests/shadow-dom/Document-prototype-currentScript.html
+++ b/tests/wpt/web-platform-tests/shadow-dom/Document-prototype-currentScript.html
@@ -1,6 +1,7 @@
<!DOCTYPE html>
<html>
<head>
+<meta charset=utf-8>
<title>HTML: Document.prototype.currentScript</title>
<meta name="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org">
<meta name="assert" content="If the script element is in a document, then set the script element's node document's currentScript attribute to the script element.">
@@ -12,11 +13,16 @@
<div id="log"></div>
<script id="outerScriptElement">
+function assert_shadowdom_supported() {
+ assert_true('attachShadow' in document.createElement('div'), 'Shadow DOM is not supported');
+}
+
var outerScriptElement = document.currentScript;
function testInlineScript(mode)
{
test(function () {
+ assert_shadowdom_supported();
var host = document.createElement('div');
var shadowRoot = host.attachShadow({mode: mode});
var scriptElement = document.createElement('script');
@@ -45,7 +51,11 @@ function executeNextTest()
var mode = testCase.mode;
+ testCase.test.add_cleanup(() => {
+ setTimeout(executeNextTest, 1);
+ });
testCase.test.step(function () {
+ assert_shadowdom_supported();
testedScriptElement = document.createElement('script');
testedScriptElement.src = 'resources/Document-prototype-currentScript-helper.js';
@@ -67,7 +77,6 @@ function executeNextTest()
assert_equals(document.currentScript, testCase.expected());
});
testCase.test.done();
- setTimeout(executeNextTest, 1);
}
}
diff --git a/tests/wpt/web-platform-tests/subresource-integrity/idlharness.window.js b/tests/wpt/web-platform-tests/subresource-integrity/idlharness.window.js
new file mode 100644
index 00000000000..a1ea4097557
--- /dev/null
+++ b/tests/wpt/web-platform-tests/subresource-integrity/idlharness.window.js
@@ -0,0 +1,23 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+// https://w3c.github.io/webappsec-subresource-integrity/
+
+'use strict';
+
+promise_test(async () => {
+ const srcs = ['webappsec-subresource-integrity', 'html', 'dom', 'cssom'];
+ const [idl, html, dom, cssom] = await Promise.all(
+ srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text())));
+
+ const idl_array = new IdlArray();
+ idl_array.add_idls(idl);
+ idl_array.add_dependency_idls(html);
+ idl_array.add_dependency_idls(dom);
+ idl_array.add_dependency_idls(cssom);
+ idl_array.add_objects({
+ HTMLScriptElement: ['document.createElement("script")'],
+ HTMLLinkElement: ['document.createElement("link")'],
+ });
+ idl_array.test();
+}, 'webappsec-subresource-integrity interfaces');
diff --git a/tests/wpt/web-platform-tests/tools/conftest.py b/tests/wpt/web-platform-tests/tools/conftest.py
index 27a259c54ce..894fe6223ea 100644
--- a/tests/wpt/web-platform-tests/tools/conftest.py
+++ b/tests/wpt/web-platform-tests/tools/conftest.py
@@ -1,6 +1,5 @@
import platform
import os
-import sys
from hypothesis import settings, HealthCheck
@@ -12,14 +11,3 @@ settings.register_profile("pypy", settings(suppress_health_check=[HealthCheck.to
settings.load_profile(os.getenv("HYPOTHESIS_PROFILE",
"default" if impl != "PyPy" else "pypy"))
-
-# these can't even be imported on Py3, so totally ignore it even from collection
-ignore_dirs = ["serve", "wptserve"]
-
-collect_ignore = []
-if sys.version_info[0] >= 3:
- for d in ignore_dirs:
- path = os.path.join(os.path.dirname(__file__), d)
- collect_ignore.extend([os.path.join(root, f)
- for root, _, files in os.walk(path)
- for f in files])
diff --git a/tests/wpt/web-platform-tests/tools/serve/serve.py b/tests/wpt/web-platform-tests/tools/serve/serve.py
index 5ebfa3a933d..7e645b0fcaf 100644
--- a/tests/wpt/web-platform-tests/tools/serve/serve.py
+++ b/tests/wpt/web-platform-tests/tools/serve/serve.py
@@ -13,7 +13,7 @@ import sys
import threading
import time
import traceback
-import urllib2
+from six.moves import urllib
import uuid
from collections import defaultdict, OrderedDict
from multiprocessing import Process, Event
@@ -444,10 +444,10 @@ def check_subdomains(config):
connected = False
for i in range(10):
try:
- urllib2.urlopen("http://%s:%d/" % (host, port))
+ urllib.request.urlopen("http://%s:%d/" % (host, port))
connected = True
break
- except urllib2.URLError:
+ except urllib.error.URLError:
time.sleep(1)
if not connected:
@@ -460,7 +460,7 @@ def check_subdomains(config):
continue
try:
- urllib2.urlopen("http://%s:%d/" % (domain, port))
+ urllib.request.urlopen("http://%s:%d/" % (domain, port))
except Exception:
logger.critical("Failed probing domain %s. "
"You may need to edit /etc/hosts or similar, see README.md." % domain)
diff --git a/tests/wpt/web-platform-tests/tools/serve/test_serve.py b/tests/wpt/web-platform-tests/tools/serve/test_serve.py
index b517e64ad1c..803a30e72d6 100644
--- a/tests/wpt/web-platform-tests/tools/serve/test_serve.py
+++ b/tests/wpt/web-platform-tests/tools/serve/test_serve.py
@@ -1,6 +1,7 @@
import pickle
import platform
import os
+import sys
import pytest
@@ -11,6 +12,7 @@ from .serve import Config
@pytest.mark.skipif(platform.uname()[0] == "Windows",
reason="Expected contents are platform-dependent")
+@pytest.mark.xfail(sys.version_info >= (3,), reason="serve only works on Py2")
def test_make_hosts_file_nix():
c = Config(browser_host="foo.bar", alternate_hosts={"alt": "foo2.bar"})
hosts = serve.make_hosts_file(c, "192.168.42.42")
@@ -32,6 +34,7 @@ def test_make_hosts_file_nix():
@pytest.mark.skipif(platform.uname()[0] != "Windows",
reason="Expected contents are platform-dependent")
+@pytest.mark.xfail(sys.version_info >= (3,), reason="serve only works on Py2")
def test_make_hosts_file_windows():
c = Config(browser_host="foo.bar", alternate_hosts={"alt": "foo2.bar"})
hosts = serve.make_hosts_file(c, "192.168.42.42")
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py
index 47526da2eb8..16f1de8f7a0 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py
@@ -249,16 +249,21 @@ class FirefoxBrowser(Browser):
prefs = Preferences()
pref_paths = []
- prefs_general = os.path.join(self.prefs_root, 'prefs_general.js')
- if os.path.isfile(prefs_general):
- # Old preference file used in Firefox 60 and earlier (remove when no longer supported)
- pref_paths.append(prefs_general)
profiles = os.path.join(self.prefs_root, 'profiles.json')
if os.path.isfile(profiles):
with open(profiles, 'r') as fh:
for name in json.load(fh)['web-platform-tests']:
pref_paths.append(os.path.join(self.prefs_root, name, 'user.js'))
+ else:
+ # Old preference files used before the creation of profiles.json (remove when no longer supported)
+ legacy_pref_paths = (
+ os.path.join(self.prefs_root, 'prefs_general.js'), # Used in Firefox 60 and below
+ os.path.join(self.prefs_root, 'common', 'user.js'), # Used in Firefox 61
+ )
+ for path in legacy_pref_paths:
+ if os.path.isfile(path):
+ pref_paths.append(path)
for path in pref_paths:
if os.path.exists(path):
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/webkit.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/webkit.py
index 1c8aec9eb56..f0f777833c8 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/webkit.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/webkit.py
@@ -30,14 +30,18 @@ def browser_kwargs(test_type, run_info_data, **kwargs):
"webdriver_args": kwargs.get("webdriver_args")}
-def capabilities_for_port(webkit_port, binary, binary_args):
+def capabilities_for_port(server_config, **kwargs):
from selenium.webdriver import DesiredCapabilities
- if webkit_port == "gtk":
+ if kwargs["webkit_port"] == "gtk":
capabilities = dict(DesiredCapabilities.WEBKITGTK.copy())
capabilities["webkitgtk:browserOptions"] = {
- "binary": binary,
- "args": binary_args
+ "binary": kwargs["binary"],
+ "args": kwargs.get("binary_args", []),
+ "certificates": [
+ {"host": server_config["browser_host"],
+ "certificateFile": kwargs["host_cert_path"]}
+ ]
}
return capabilities
@@ -49,10 +53,8 @@ def executor_kwargs(test_type, server_config, cache_manager, run_info_data,
executor_kwargs = base_executor_kwargs(test_type, server_config,
cache_manager, **kwargs)
executor_kwargs["close_after_done"] = True
- capabilities = capabilities_for_port(kwargs["webkit_port"],
- kwargs["binary"],
- kwargs.get("binary_args", []))
- executor_kwargs["capabilities"] = capabilities
+ executor_kwargs["capabilities"] = capabilities_for_port(server_config,
+ **kwargs)
return executor_kwargs
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_cookies.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_cookies.py
index 2e2d0d6771b..305d0ac45e9 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_cookies.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_cookies.py
@@ -1,3 +1,4 @@
+import sys
import unittest
import pytest
@@ -7,6 +8,7 @@ from .base import TestUsingServer
class TestResponseSetCookie(TestUsingServer):
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_name_value(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -19,6 +21,7 @@ class TestResponseSetCookie(TestUsingServer):
self.assertEqual(resp.info()["Set-Cookie"], "name=value; Path=/")
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_unset(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -32,6 +35,7 @@ class TestResponseSetCookie(TestUsingServer):
self.assertTrue("Set-Cookie" not in resp.info())
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_delete(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -50,6 +54,7 @@ class TestResponseSetCookie(TestUsingServer):
#Should also check that expires is in the past
class TestRequestCookies(TestUsingServer):
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_set_cookie(self):
@wptserve.handlers.handler
def handler(request, response):
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_handlers.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_handlers.py
index 6769bd3adef..cf40cd1522d 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_handlers.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_handlers.py
@@ -12,12 +12,14 @@ from .base import TestUsingServer, doc_root
class TestFileHandler(TestUsingServer):
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_GET(self):
resp = self.request("/document.txt")
self.assertEqual(200, resp.getcode())
self.assertEqual("text/plain", resp.info()["Content-Type"])
self.assertEqual(open(os.path.join(doc_root, "document.txt"), 'rb').read(), resp.read())
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_headers(self):
resp = self.request("/with_headers.txt")
self.assertEqual(200, resp.getcode())
@@ -29,6 +31,7 @@ class TestFileHandler(TestUsingServer):
self.assertEqual(resp.info()["Double-Header"], "PA, SS")
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_range(self):
resp = self.request("/document.txt", headers={"Range":"bytes=10-19"})
self.assertEqual(206, resp.getcode())
@@ -39,6 +42,7 @@ class TestFileHandler(TestUsingServer):
self.assertEqual("10", resp.info()['Content-Length'])
self.assertEqual(expected[10:20], data)
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_range_no_end(self):
resp = self.request("/document.txt", headers={"Range":"bytes=10-"})
self.assertEqual(206, resp.getcode())
@@ -48,6 +52,7 @@ class TestFileHandler(TestUsingServer):
self.assertEqual("bytes 10-%i/%i" % (len(expected) - 1, len(expected)), resp.info()['Content-Range'])
self.assertEqual(expected[10:], data)
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_range_no_start(self):
resp = self.request("/document.txt", headers={"Range":"bytes=-10"})
self.assertEqual(206, resp.getcode())
@@ -58,6 +63,7 @@ class TestFileHandler(TestUsingServer):
resp.info()['Content-Range'])
self.assertEqual(expected[-10:], data)
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_multiple_ranges(self):
resp = self.request("/document.txt", headers={"Range":"bytes=1-2,5-7,6-10"})
self.assertEqual(206, resp.getcode())
@@ -76,6 +82,7 @@ class TestFileHandler(TestUsingServer):
self.assertEqual(headers["Content-Range"], "bytes %s/%i" % (expected_part[0], len(expected)))
self.assertEqual(expected_part[1] + "\r\n", body)
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_range_invalid(self):
with self.assertRaises(HTTPError) as cm:
self.request("/document.txt", headers={"Range":"bytes=11-10"})
@@ -86,16 +93,19 @@ class TestFileHandler(TestUsingServer):
self.request("/document.txt", headers={"Range":"bytes=%i-%i" % (len(expected), len(expected) + 10)})
self.assertEqual(cm.exception.code, 416)
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_config(self):
resp = self.request("/sub.sub.txt")
expected = b"localhost localhost %i" % self.server.port
assert resp.read().rstrip() == expected
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_headers(self):
resp = self.request("/sub_headers.sub.txt", headers={"X-Test": "PASS"})
expected = b"PASS"
assert resp.read().rstrip() == expected
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_params(self):
resp = self.request("/sub_params.sub.txt", query="test=PASS")
expected = b"PASS"
@@ -103,6 +113,7 @@ class TestFileHandler(TestUsingServer):
class TestFunctionHandler(TestUsingServer):
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_string_rv(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -115,6 +126,7 @@ class TestFunctionHandler(TestUsingServer):
self.assertEqual("9", resp.info()["Content-Length"])
self.assertEqual("test data", resp.read())
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_tuple_1_rv(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -128,6 +140,7 @@ class TestFunctionHandler(TestUsingServer):
assert cm.value.code == 500
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_tuple_2_rv(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -141,6 +154,7 @@ class TestFunctionHandler(TestUsingServer):
self.assertEqual("test-value", resp.info()["test-header"])
self.assertEqual("test", resp.read())
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_tuple_3_rv(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -153,6 +167,7 @@ class TestFunctionHandler(TestUsingServer):
self.assertEqual("test-value", resp.info()["test-header"])
self.assertEqual("test data", resp.read())
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_tuple_3_rv_1(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -166,6 +181,7 @@ class TestFunctionHandler(TestUsingServer):
self.assertEqual("test-value", resp.info()["test-header"])
self.assertEqual("test data", resp.read())
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_tuple_4_rv(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -179,6 +195,7 @@ class TestFunctionHandler(TestUsingServer):
assert cm.value.code == 500
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_none_rv(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -193,6 +210,7 @@ class TestFunctionHandler(TestUsingServer):
class TestJSONHandler(TestUsingServer):
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_json_0(self):
@wptserve.handlers.json_handler
def handler(request, response):
@@ -204,6 +222,7 @@ class TestJSONHandler(TestUsingServer):
self.assertEqual(200, resp.getcode())
self.assertEqual({"data": "test data"}, json.load(resp))
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_json_tuple_2(self):
@wptserve.handlers.json_handler
def handler(request, response):
@@ -216,6 +235,7 @@ class TestJSONHandler(TestUsingServer):
self.assertEqual("test-value", resp.info()["test-header"])
self.assertEqual({"data": "test data"}, json.load(resp))
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_json_tuple_3(self):
@wptserve.handlers.json_handler
def handler(request, response):
@@ -231,12 +251,14 @@ class TestJSONHandler(TestUsingServer):
class TestPythonHandler(TestUsingServer):
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_string(self):
resp = self.request("/test_string.py")
self.assertEqual(200, resp.getcode())
self.assertEqual("text/plain", resp.info()["Content-Type"])
self.assertEqual("PASS", resp.read())
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_tuple_2(self):
resp = self.request("/test_tuple_2.py")
self.assertEqual(200, resp.getcode())
@@ -244,6 +266,7 @@ class TestPythonHandler(TestUsingServer):
self.assertEqual("PASS", resp.info()["X-Test"])
self.assertEqual("PASS", resp.read())
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_tuple_3(self):
resp = self.request("/test_tuple_3.py")
self.assertEqual(202, resp.getcode())
@@ -252,6 +275,7 @@ class TestPythonHandler(TestUsingServer):
self.assertEqual("PASS", resp.info()["X-Test"])
self.assertEqual("PASS", resp.read())
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_import(self):
dir_name = os.path.join(doc_root, "subdir")
assert dir_name not in sys.path
@@ -263,18 +287,21 @@ class TestPythonHandler(TestUsingServer):
self.assertEqual("text/plain", resp.info()["Content-Type"])
self.assertEqual("PASS", resp.read())
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_no_main(self):
with pytest.raises(HTTPError) as cm:
self.request("/no_main.py")
assert cm.value.code == 500
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_invalid(self):
with pytest.raises(HTTPError) as cm:
self.request("/invalid.py")
assert cm.value.code == 500
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_missing(self):
with pytest.raises(HTTPError) as cm:
self.request("/missing.py")
@@ -283,17 +310,20 @@ class TestPythonHandler(TestUsingServer):
class TestDirectoryHandler(TestUsingServer):
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_directory(self):
resp = self.request("/")
self.assertEqual(200, resp.getcode())
self.assertEqual("text/html", resp.info()["Content-Type"])
#Add a check that the response is actually sane
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_subdirectory_trailing_slash(self):
resp = self.request("/subdir/")
assert resp.getcode() == 200
assert resp.info()["Content-Type"] == "text/html"
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_subdirectory_no_trailing_slash(self):
# This seems to resolve the 301 transparently, so test for 200
resp = self.request("/subdir")
@@ -302,6 +332,7 @@ class TestDirectoryHandler(TestUsingServer):
class TestAsIsHandler(TestUsingServer):
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_as_is(self):
resp = self.request("/test.asis")
self.assertEqual(202, resp.getcode())
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_input_file.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_input_file.py
index be7ba4291be..e2d8761ed7a 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_input_file.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_input_file.py
@@ -1,3 +1,5 @@
+import sys
+
from wptserve.request import InputFile
from io import BytesIO
import pytest
@@ -21,6 +23,7 @@ def teardown_function(function):
test_file.close()
+@pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_seek():
input_file.seek(2)
test_file.seek(2)
@@ -31,6 +34,7 @@ def test_seek():
assert input_file.read(1) == test_file.read(1)
+@pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_seek_backwards():
input_file.seek(2)
test_file.seek(2)
@@ -48,6 +52,7 @@ def test_seek_negative_offset():
input_file.seek(-1)
+@pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_seek_file_bigger_than_buffer():
old_max_buf = InputFile.max_buffer_size
InputFile.max_buffer_size = 10
@@ -66,10 +71,12 @@ def test_seek_file_bigger_than_buffer():
InputFile.max_buffer_size = old_max_buf
+@pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_read():
assert input_file.read() == test_file.read()
+@pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_read_file_bigger_than_buffer():
old_max_buf = InputFile.max_buffer_size
InputFile.max_buffer_size = 10
@@ -81,6 +88,7 @@ def test_read_file_bigger_than_buffer():
InputFile.max_buffer_size = old_max_buf
+@pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_readline():
assert input_file.readline() == test_file.readline()
assert input_file.readline() == test_file.readline()
@@ -90,17 +98,20 @@ def test_readline():
assert input_file.readline() == test_file.readline()
+@pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_readline_max_byte():
line = test_file.readline()
assert input_file.readline(max_bytes=len(line)/2) == line[:len(line)/2]
assert input_file.readline(max_bytes=len(line)) == line[len(line)/2:]
+@pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_readline_max_byte_longer_than_file():
assert input_file.readline(max_bytes=1000) == test_file.readline()
assert input_file.readline(max_bytes=1000) == test_file.readline()
+@pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_readline_file_bigger_than_buffer():
old_max_buf = InputFile.max_buffer_size
InputFile.max_buffer_size = 10
@@ -114,10 +125,12 @@ def test_readline_file_bigger_than_buffer():
InputFile.max_buffer_size = old_max_buf
+@pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_readlines():
assert input_file.readlines() == test_file.readlines()
+@pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_readlines_file_bigger_than_buffer():
old_max_buf = InputFile.max_buffer_size
InputFile.max_buffer_size = 10
@@ -130,11 +143,13 @@ def test_readlines_file_bigger_than_buffer():
InputFile.max_buffer_size = old_max_buf
+@pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_iter():
for a, b in zip(input_file, test_file):
assert a == b
+@pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_iter_file_bigger_than_buffer():
old_max_buf = InputFile.max_buffer_size
InputFile.max_buffer_size = 10
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py
index 069bd760510..571e170a5cd 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py
@@ -1,8 +1,10 @@
import os
import unittest
-import urllib2
import time
import json
+import sys
+
+from six.moves import urllib
import pytest
@@ -11,54 +13,65 @@ from .base import TestUsingServer, doc_root
class TestStatus(TestUsingServer):
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_status(self):
resp = self.request("/document.txt", query="pipe=status(202)")
self.assertEqual(resp.getcode(), 202)
class TestHeader(TestUsingServer):
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_not_set(self):
resp = self.request("/document.txt", query="pipe=header(X-TEST,PASS)")
self.assertEqual(resp.info()["X-TEST"], "PASS")
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_set(self):
resp = self.request("/document.txt", query="pipe=header(Content-Type,text/html)")
self.assertEqual(resp.info()["Content-Type"], "text/html")
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_multiple(self):
resp = self.request("/document.txt", query="pipe=header(X-Test,PASS)|header(Content-Type,text/html)")
self.assertEqual(resp.info()["X-TEST"], "PASS")
self.assertEqual(resp.info()["Content-Type"], "text/html")
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_multiple_same(self):
resp = self.request("/document.txt", query="pipe=header(Content-Type,FAIL)|header(Content-Type,text/html)")
self.assertEqual(resp.info()["Content-Type"], "text/html")
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_multiple_append(self):
resp = self.request("/document.txt", query="pipe=header(X-Test,1)|header(X-Test,2,True)")
self.assertEqual(resp.info()["X-Test"], "1, 2")
class TestSlice(TestUsingServer):
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_both_bounds(self):
resp = self.request("/document.txt", query="pipe=slice(1,10)")
expected = open(os.path.join(doc_root, "document.txt"), 'rb').read()
self.assertEqual(resp.read(), expected[1:10])
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_no_upper(self):
resp = self.request("/document.txt", query="pipe=slice(1)")
expected = open(os.path.join(doc_root, "document.txt"), 'rb').read()
self.assertEqual(resp.read(), expected[1:])
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_no_lower(self):
resp = self.request("/document.txt", query="pipe=slice(null,10)")
expected = open(os.path.join(doc_root, "document.txt"), 'rb').read()
self.assertEqual(resp.read(), expected[:10])
class TestSub(TestUsingServer):
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_config(self):
resp = self.request("/sub.txt", query="pipe=sub")
expected = "localhost localhost %i" % self.server.port
self.assertEqual(resp.read().rstrip(), expected)
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_file_hash(self):
resp = self.request("/sub_file_hash.sub.txt")
expected = """
@@ -71,15 +84,18 @@ sha512: r8eLGRTc7ZznZkFjeVLyo6/FyQdra9qmlYCwKKxm3kfQAswRS9+3HsYk3thLUhcFmmWhK4dX
JwGFonfXwg=="""
self.assertEqual(resp.read().rstrip(), expected.strip())
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_file_hash_unrecognized(self):
- with self.assertRaises(urllib2.HTTPError):
+ with self.assertRaises(urllib.error.HTTPError):
self.request("/sub_file_hash_unrecognized.sub.txt")
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_headers(self):
resp = self.request("/sub_headers.txt", query="pipe=sub", headers={"X-Test": "PASS"})
expected = "PASS"
self.assertEqual(resp.read().rstrip(), expected)
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_location(self):
resp = self.request("/sub_location.sub.txt?query_string")
expected = """
@@ -93,19 +109,23 @@ scheme: http
server: http://localhost:{0}""".format(self.server.port)
self.assertEqual(resp.read().rstrip(), expected.strip())
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_params(self):
resp = self.request("/sub_params.txt", query="test=PASS&pipe=sub")
expected = "PASS"
self.assertEqual(resp.read().rstrip(), expected)
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_url_base(self):
resp = self.request("/sub_url_base.sub.txt")
self.assertEqual(resp.read().rstrip(), "Before / After")
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_uuid(self):
resp = self.request("/sub_uuid.sub.txt")
self.assertRegexpMatches(resp.read().rstrip(), r"Before [a-f0-9-]+ After")
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_var(self):
resp = self.request("/sub_var.sub.txt")
port = self.server.port
@@ -113,6 +133,7 @@ server: http://localhost:{0}""".format(self.server.port)
self.assertEqual(resp.read().rstrip(), expected)
class TestTrickle(TestUsingServer):
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_trickle(self):
#Actually testing that the response trickles in is not that easy
t0 = time.time()
@@ -122,6 +143,7 @@ class TestTrickle(TestUsingServer):
self.assertEqual(resp.read(), expected)
self.assertGreater(6, t1-t0)
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_headers(self):
resp = self.request("/document.txt", query="pipe=trickle(d0.01)")
self.assertEqual(resp.info()["Cache-Control"], "no-cache, no-store, must-revalidate")
@@ -129,10 +151,12 @@ class TestTrickle(TestUsingServer):
self.assertEqual(resp.info()["Expires"], "0")
class TestPipesWithVariousHandlers(TestUsingServer):
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_with_python_file_handler(self):
resp = self.request("/test_string.py", query="pipe=slice(null,2)")
self.assertEqual(resp.read(), "PA")
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_with_python_func_handler(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -142,6 +166,7 @@ class TestPipesWithVariousHandlers(TestUsingServer):
resp = self.request(route[1], query="pipe=slice(null,2)")
self.assertEqual(resp.read(), "PA")
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_with_python_func_handler_using_response_writer(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -152,6 +177,7 @@ class TestPipesWithVariousHandlers(TestUsingServer):
# slice has not been applied to the response, because response.writer was used.
self.assertEqual(resp.read(), "PASS")
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_header_pipe_with_python_func_using_response_writer(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -163,6 +189,7 @@ class TestPipesWithVariousHandlers(TestUsingServer):
self.assertFalse(resp.info().get("X-TEST"))
self.assertEqual(resp.read(), "CONTENT")
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_with_json_handler(self):
@wptserve.handlers.json_handler
def handler(request, response):
@@ -172,6 +199,7 @@ class TestPipesWithVariousHandlers(TestUsingServer):
resp = self.request(route[1], query="pipe=slice(null,2)")
self.assertEqual(resp.read(), '"{')
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_slice_with_as_is_handler(self):
resp = self.request("/test.asis", query="pipe=slice(null,2)")
self.assertEqual(202, resp.getcode())
@@ -180,6 +208,7 @@ class TestPipesWithVariousHandlers(TestUsingServer):
# slice has not been applied to the response, because response.writer was used.
self.assertEqual("Content", resp.read())
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_headers_with_as_is_handler(self):
resp = self.request("/test.asis", query="pipe=header(X-TEST,FAIL)")
self.assertEqual(202, resp.getcode())
@@ -188,6 +217,7 @@ class TestPipesWithVariousHandlers(TestUsingServer):
self.assertEqual("PASS", resp.info()["X-TEST"])
self.assertEqual("Content", resp.read())
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_trickle_with_as_is_handler(self):
t0 = time.time()
resp = self.request("/test.asis", query="pipe=trickle(1:d2:5:d1:r2)")
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_request.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_request.py
index 24eedbc4a78..de29638f6c1 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_request.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_request.py
@@ -1,3 +1,5 @@
+import sys
+
import pytest
wptserve = pytest.importorskip("wptserve")
@@ -6,6 +8,7 @@ from wptserve.request import InputFile
class TestInputFile(TestUsingServer):
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_seek(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -34,6 +37,7 @@ class TestInputFile(TestUsingServer):
"12345ab\ncdef", "12345ab\n", "cdef"],
resp.read().split(" "))
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_seek_input_longer_than_buffer(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -60,6 +64,7 @@ class TestInputFile(TestUsingServer):
finally:
InputFile.max_buffer_size = old_max_buf
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_iter(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -72,6 +77,7 @@ class TestInputFile(TestUsingServer):
self.assertEqual(200, resp.getcode())
self.assertEqual(["12345\n", "abcdef\r\n", "zyxwv"], resp.read().split(" "))
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_iter_input_longer_than_buffer(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -92,6 +98,7 @@ class TestInputFile(TestUsingServer):
class TestRequest(TestUsingServer):
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_body(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -103,6 +110,7 @@ class TestRequest(TestUsingServer):
resp = self.request(route[1], method="POST", body="12345ab\ncdef")
self.assertEqual("12345ab\ncdef", resp.read())
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_route_match(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -115,6 +123,7 @@ class TestRequest(TestUsingServer):
class TestAuth(TestUsingServer):
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_auth(self):
@wptserve.handlers.handler
def handler(request, response):
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_response.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_response.py
index d60127560f6..23b340d14f7 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_response.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_response.py
@@ -1,3 +1,4 @@
+import sys
import unittest
from types import MethodType
@@ -15,6 +16,7 @@ def send_body_as_header(self):
self._headers_complete = True
class TestResponse(TestUsingServer):
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_head_without_body(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -30,6 +32,7 @@ class TestResponse(TestUsingServer):
self.assertEqual("TEST", resp.info()['x-Test'])
self.assertEqual("", resp.info()['x-body'])
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_head_with_body(self):
@wptserve.handlers.handler
def handler(request, response):
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_server.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_server.py
index 7ae31be7130..3b8cc1ce4cd 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_server.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_server.py
@@ -1,3 +1,4 @@
+import sys
import unittest
import pytest
@@ -8,6 +9,7 @@ from .base import TestUsingServer
class TestFileHandler(TestUsingServer):
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_not_handled(self):
with self.assertRaises(HTTPError) as cm:
self.request("/not_existing")
@@ -15,6 +17,7 @@ class TestFileHandler(TestUsingServer):
self.assertEqual(cm.exception.code, 404)
class TestRewriter(TestUsingServer):
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_rewrite(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -28,6 +31,7 @@ class TestRewriter(TestUsingServer):
self.assertEqual("/test/rewritten", resp.read())
class TestRequestHandler(TestUsingServer):
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_exception(self):
@wptserve.handlers.handler
def handler(request, response):
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_stash.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_stash.py
index 97591cbb007..32be1d33bd8 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_stash.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_stash.py
@@ -1,3 +1,4 @@
+import sys
import unittest
import uuid
@@ -14,6 +15,7 @@ class TestResponseSetCookie(TestUsingServer):
with StashServer(None, authkey=str(uuid.uuid4())):
super(TestResponseSetCookie, self).run(result)
+ @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_put_take(self):
@wptserve.handlers.handler
def handler(request, response):
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/test_config.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/test_config.py
index 2c5f3f9fc6a..0fba3ff9357 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/tests/test_config.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/test_config.py
@@ -8,11 +8,11 @@ config = pytest.importorskip("wptserve.config")
def test_renamed_are_renamed():
- assert len(set(config._renamed_props.viewkeys()) & set(config.Config._default.viewkeys())) == 0
+ assert len(set(config._renamed_props.keys()) & set(config.Config._default.keys())) == 0
def test_renamed_exist():
- assert set(config._renamed_props.viewvalues()).issubset(set(config.Config._default.viewkeys()))
+ assert set(config._renamed_props.values()).issubset(set(config.Config._default.keys()))
@pytest.mark.parametrize("base, override, expected", [
@@ -68,8 +68,9 @@ def test_init_renamed_host():
def test_init_bogus():
with pytest.raises(TypeError) as e:
config.Config(foo=1, bar=2)
- assert "foo" in e.value.message
- assert "bar" in e.value.message
+ message = e.value.args[0]
+ assert "foo" in message
+ assert "bar" in message
def test_getitem():
@@ -282,12 +283,12 @@ def test_domains_not_domains_intersection():
not_subdomains={"x", "y"})
domains = c.domains
not_domains = c.not_domains
- assert len(set(domains.iterkeys()) ^ set(not_domains.iterkeys())) == 0
- for host in domains.iterkeys():
+ assert len(set(domains.keys()) ^ set(not_domains.keys())) == 0
+ for host in domains.keys():
host_domains = domains[host]
host_not_domains = not_domains[host]
- assert len(set(host_domains.iterkeys()) & set(host_not_domains.iterkeys())) == 0
- assert len(set(host_domains.itervalues()) & set(host_not_domains.itervalues())) == 0
+ assert len(set(host_domains.keys()) & set(host_not_domains.keys())) == 0
+ assert len(set(host_domains.values()) & set(host_not_domains.values())) == 0
def test_all_domains():
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/test_replacement_tokenizer.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/test_replacement_tokenizer.py
index ea0c0c283ea..75f504ea33a 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/tests/test_replacement_tokenizer.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/test_replacement_tokenizer.py
@@ -1,3 +1,5 @@
+import sys
+
import pytest
from wptserve.pipes import ReplacementTokenizer
@@ -10,10 +12,26 @@ from wptserve.pipes import ReplacementTokenizer
["$ccc:ddd", [('var', '$ccc'), ('ident', 'ddd')]],
["$eee", [('ident', '$eee')]],
["fff[0]", [('ident', 'fff'), ('index', 0)]],
- ["ggg[hhh]", [('ident', 'ggg'), ('index', u'hhh')]],
- ["[iii]", [('index', u'iii')]],
- ["jjj['kkk']", [('ident', 'jjj'), ('index', u"'kkk'")]],
- ["lll[]", [('ident', 'lll'), ('index', u"")]],
+ pytest.param(
+ "ggg[hhh]", [('ident', 'ggg'), ('index', u'hhh')],
+ marks=pytest.mark.xfail(sys.version_info >= (3,),
+ reason="wptserve only works on Py2")
+ ),
+ pytest.param(
+ "[iii]", [('index', u'iii')],
+ marks=pytest.mark.xfail(sys.version_info >= (3,),
+ reason="wptserve only works on Py2")
+ ),
+ pytest.param(
+ "jjj['kkk']", [('ident', 'jjj'), ('index', u"'kkk'")],
+ marks=pytest.mark.xfail(sys.version_info >= (3,),
+ reason="wptserve only works on Py2")
+ ),
+ pytest.param(
+ "lll[]", [('ident', 'lll'), ('index', u"")],
+ marks=pytest.mark.xfail(sys.version_info >= (3,),
+ reason="wptserve only works on Py2")
+ ),
["111", [('ident', u'111')]],
["$111", [('ident', u'$111')]],
]
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/config.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/config.py
index 3e4729a7f03..88954a96969 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/config.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/config.py
@@ -2,8 +2,9 @@ import logging
import os
from collections import defaultdict, Mapping
+from six import iteritems, itervalues
-import sslutils
+from .sslutils import environments
from .utils import get_port
@@ -17,7 +18,7 @@ _renamed_props = {
def _merge_dict(base_dict, override_dict):
rv = base_dict.copy()
- for key, value in base_dict.iteritems():
+ for key, value in iteritems(base_dict):
if key in override_dict:
if isinstance(value, dict):
rv[key] = _merge_dict(value, override_dict[key])
@@ -73,13 +74,13 @@ class Config(Mapping):
self.log_level = level_name
self._logger_name = logger.name
- for k, v in self._default.iteritems():
+ for k, v in iteritems(self._default):
setattr(self, k, kwargs.pop(k, v))
self.subdomains = subdomains
self.not_subdomains = not_subdomains
- for k, new_k in _renamed_props.iteritems():
+ for k, new_k in iteritems(_renamed_props):
if k in kwargs:
self.logger.warning(
"%s in config is deprecated; use %s instead" % (
@@ -114,7 +115,7 @@ class Config(Mapping):
if k in override:
self._set_override(k, override.pop(k))
- for k, new_k in _renamed_props.iteritems():
+ for k, new_k in iteritems(_renamed_props):
if k in override:
self.logger.warning(
"%s in config is deprecated; use %s instead" % (
@@ -146,7 +147,7 @@ class Config(Mapping):
except AttributeError:
old_ports = {}
- for scheme, ports in self._ports.iteritems():
+ for scheme, ports in iteritems(self._ports):
for i, port in enumerate(ports):
if scheme in ["wss", "https"] and not self.ssl_env.ssl_enabled:
port = None
@@ -189,8 +190,8 @@ class Config(Mapping):
hosts[""] = self.browser_host
rv = {}
- for name, host in hosts.iteritems():
- rv[name] = {subdomain: (subdomain.encode("idna") + u"." + host)
+ for name, host in iteritems(hosts):
+ rv[name] = {subdomain: (subdomain.encode("idna").decode("ascii") + u"." + host)
for subdomain in self.subdomains}
rv[name][""] = host
return rv
@@ -202,8 +203,8 @@ class Config(Mapping):
hosts[""] = self.browser_host
rv = {}
- for name, host in hosts.iteritems():
- rv[name] = {subdomain: (subdomain.encode("idna") + u"." + host)
+ for name, host in iteritems(hosts):
+ rv[name] = {subdomain: (subdomain.encode("idna").decode("ascii") + u"." + host)
for subdomain in self.not_subdomains}
return rv
@@ -218,14 +219,14 @@ class Config(Mapping):
@property
def domains_set(self):
return {domain
- for per_host_domains in self.domains.itervalues()
- for domain in per_host_domains.itervalues()}
+ for per_host_domains in itervalues(self.domains)
+ for domain in itervalues(per_host_domains)}
@property
def not_domains_set(self):
return {domain
- for per_host_domains in self.not_domains.itervalues()
- for domain in per_host_domains.itervalues()}
+ for per_host_domains in itervalues(self.not_domains)
+ for domain in itervalues(per_host_domains)}
@property
def all_domains_set(self):
@@ -246,7 +247,7 @@ class Config(Mapping):
implementation_type = self.ssl["type"]
try:
- cls = sslutils.environments[implementation_type]
+ cls = environments[implementation_type]
except KeyError:
raise ValueError("%s is not a vaid ssl type." % implementation_type)
kwargs = self.ssl.get(implementation_type, {}).copy()
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py
index 9c13965cb3e..28743d36476 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py
@@ -7,7 +7,7 @@ import re
import time
import types
import uuid
-from cStringIO import StringIO
+from six.moves import StringIO
from six import text_type
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py
index ce7965a1242..07467c6f4dc 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py
@@ -1,7 +1,7 @@
import base64
import cgi
-import Cookie
-import StringIO
+from six.moves.http_cookies import BaseCookie
+from six.moves import StringIO
import tempfile
from six.moves.urllib.parse import parse_qsl, urlsplit
@@ -52,7 +52,7 @@ class InputFile(object):
if length > self.max_buffer_size:
self._buf = tempfile.TemporaryFile()
else:
- self._buf = StringIO.StringIO()
+ self._buf = StringIO()
@property
def _buf_position(self):
@@ -314,7 +314,7 @@ class Request(object):
@property
def cookies(self):
if self._cookies is None:
- parser = Cookie.BaseCookie()
+ parser = BaseCookie()
cookie_headers = self.headers.get("cookie", "")
parser.load(cookie_headers)
cookies = Cookies()
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/response.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/response.py
index 20b7b426996..314d99768b2 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/response.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/response.py
@@ -1,6 +1,6 @@
from collections import OrderedDict
from datetime import datetime, timedelta
-import Cookie
+from six.moves.http_cookies import BaseCookie, Morsel
import json
import types
import uuid
@@ -134,7 +134,7 @@ class Response(object):
max_age = int(max_age.total_seconds())
max_age = "%.0d" % max_age
- m = Cookie.Morsel()
+ m = Morsel()
def maybe_set(key, value):
if value is not None and value is not False:
@@ -154,7 +154,7 @@ class Response(object):
def unset_cookie(self, name):
"""Remove a cookie from those that are being sent with the response"""
cookies = self.headers.get("Set-Cookie")
- parser = Cookie.BaseCookie()
+ parser = BaseCookie()
for cookie in cookies:
parser.load(cookie)
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/server.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/server.py
index 95d2320f41c..2bbbaa970fa 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/server.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/server.py
@@ -1,8 +1,8 @@
-import BaseHTTPServer
+from six.moves import BaseHTTPServer
import errno
import os
import socket
-from SocketServer import ThreadingMixIn
+from six.moves.socketserver import ThreadingMixIn
import ssl
import sys
import threading
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/sslutils/__init__.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/sslutils/__init__.py
index 0c0ea43e21e..2ae94b8d670 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/sslutils/__init__.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/sslutils/__init__.py
@@ -1,9 +1,6 @@
-# flake8: noqa (not ideal, but nicer than adding noqa: F401 to every line!)
-import openssl
-import pregenerated
-from base import NoSSLEnvironment
-from openssl import OpenSSLEnvironment
-from pregenerated import PregeneratedSSLEnvironment
+from .base import NoSSLEnvironment
+from .openssl import OpenSSLEnvironment
+from .pregenerated import PregeneratedSSLEnvironment
environments = {"none": NoSSLEnvironment,
"openssl": OpenSSLEnvironment,
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/utils.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/utils.py
index 75f7c308276..1a6abc1fe25 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/utils.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/utils.py
@@ -2,7 +2,7 @@ import socket
def invert_dict(dict):
rv = {}
- for key, values in dict.iteritems():
+ for key, values in dict.items():
for value in values:
if value in rv:
raise ValueError
diff --git a/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/property-list.js b/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/property-list.js
index f0b2a640c79..cb6e2c810e8 100644
--- a/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/property-list.js
+++ b/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/property-list.js
@@ -997,23 +997,23 @@ const gCSSProperties = {
types: [
]
},
- 'offset-block-end': {
- // https://drafts.csswg.org/css-logical-props/#propdef-offset-block-end
+ 'inset-block-end': {
+ // https://drafts.csswg.org/css-logical-props/#propdef-inset-block-end
types: [
]
},
- 'offset-block-start': {
- // https://drafts.csswg.org/css-logical-props/#propdef-offset-block-start
+ 'inset-block-start': {
+ // https://drafts.csswg.org/css-logical-props/#propdef-inset-block-start
types: [
]
},
- 'offset-inline-end': {
- // https://drafts.csswg.org/css-logical-props/#propdef-offset-inline-end
+ 'inset-inline-end': {
+ // https://drafts.csswg.org/css-logical-props/#propdef-inset-inline-end
types: [
]
},
- 'offset-inline-start': {
- // https://drafts.csswg.org/css-logical-props/#propdef-offset-inline-start
+ 'inset-inline-start': {
+ // https://drafts.csswg.org/css-logical-props/#propdef-inset-inline-start
types: [
]
},
diff --git a/tests/wpt/web-platform-tests/webaudio/resources/audiobuffersource-testing.js b/tests/wpt/web-platform-tests/webaudio/resources/audiobuffersource-testing.js
new file mode 100644
index 00000000000..22336419145
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webaudio/resources/audiobuffersource-testing.js
@@ -0,0 +1,102 @@
+function createTestBuffer(context, sampleFrameLength) {
+ let audioBuffer =
+ context.createBuffer(1, sampleFrameLength, context.sampleRate);
+ let channelData = audioBuffer.getChannelData(0);
+
+ // Create a simple linear ramp starting at zero, with each value in the buffer
+ // equal to its index position.
+ for (let i = 0; i < sampleFrameLength; ++i)
+ channelData[i] = i;
+
+ return audioBuffer;
+}
+
+function checkSingleTest(renderedBuffer, i, should) {
+ let renderedData = renderedBuffer.getChannelData(0);
+ let offsetFrame = i * testSpacingFrames;
+
+ let test = tests[i];
+ let expected = test.expected;
+ let description;
+
+ if (test.description) {
+ description = test.description;
+ } else {
+ // No description given, so create a basic one from the given test
+ // parameters.
+ description =
+ 'loop from ' + test.loopStartFrame + ' -> ' + test.loopEndFrame;
+ if (test.offsetFrame)
+ description += ' with offset ' + test.offsetFrame;
+ if (test.playbackRate && test.playbackRate != 1)
+ description += ' with playbackRate of ' + test.playbackRate;
+ }
+
+ let framesToTest;
+
+ if (test.renderFrames)
+ framesToTest = test.renderFrames;
+ else if (test.durationFrames)
+ framesToTest = test.durationFrames;
+
+ // Verify that the output matches
+ let prefix = 'Case ' + i + ': ';
+ should(
+ renderedData.slice(offsetFrame, offsetFrame + framesToTest),
+ prefix + description)
+ .beEqualToArray(expected);
+
+ // Verify that we get all zeroes after the buffer (or duration) has passed.
+ should(
+ renderedData.slice(
+ offsetFrame + framesToTest, offsetFrame + testSpacingFrames),
+ prefix + description + ': tail')
+ .beConstantValueOf(0);
+}
+
+function checkAllTests(renderedBuffer, should) {
+ for (let i = 0; i < tests.length; ++i)
+ checkSingleTest(renderedBuffer, i, should);
+}
+
+
+// Create the actual result by modulating playbackRate or detune AudioParam of
+// ABSN. |modTarget| is a string of AudioParam name, |modOffset| is the offset
+// (anchor) point of modulation, and |modRange| is the range of modulation.
+//
+// createSawtoothWithModulation(context, 'detune', 440, 1200);
+//
+// The above will perform a modulation on detune within the range of
+// [1200, -1200] around the sawtooth waveform on 440Hz.
+function createSawtoothWithModulation(context, modTarget, modOffset, modRange) {
+ let lfo = context.createOscillator();
+ let amp = context.createGain();
+
+ // Create a sawtooth generator with the signal range of [0, 1].
+ let phasor = context.createBufferSource();
+ let phasorBuffer = context.createBuffer(1, sampleRate, sampleRate);
+ let phasorArray = phasorBuffer.getChannelData(0);
+ let phase = 0, phaseStep = 1 / sampleRate;
+ for (let i = 0; i < phasorArray.length; i++) {
+ phasorArray[i] = phase % 1.0;
+ phase += phaseStep;
+ }
+ phasor.buffer = phasorBuffer;
+ phasor.loop = true;
+
+ // 1Hz for audible (human-perceivable) parameter modulation by LFO.
+ lfo.frequency.value = 1.0;
+
+ amp.gain.value = modRange;
+ phasor.playbackRate.value = modOffset;
+
+ // The oscillator output should be amplified accordingly to drive the
+ // modulation within the desired range.
+ lfo.connect(amp);
+ amp.connect(phasor[modTarget]);
+
+ phasor.connect(context.destination);
+
+ lfo.start();
+ phasor.start();
+}
diff --git a/tests/wpt/web-platform-tests/webaudio/resources/audit.js b/tests/wpt/web-platform-tests/webaudio/resources/audit.js
index 4f4c6b7aed8..c56e4d1012f 100644
--- a/tests/wpt/web-platform-tests/webaudio/resources/audit.js
+++ b/tests/wpt/web-platform-tests/webaudio/resources/audit.js
@@ -33,6 +33,12 @@ window.Audit = (function() {
'use strict';
+ // NOTE: Moving this method (or any other code above) will change the location
+ // of 'CONSOLE ERROR...' message in the expected text files.
+ function _logError(message) {
+ console.error('[audit.js] ' + message);
+ }
+
function _logPassed(message) {
test(function(arg) {
assert_true(true);
@@ -70,13 +76,9 @@ window.Audit = (function() {
String(target.slice(0, options.numberOfArrayElements)) + '...';
targetString = '[' + arrayElements + ']';
} else if (target === null) {
- // null is an object, so we need to handle this specially.
targetString = String(target);
} else {
- // We're expecting String() to return something like "[object Foo]",
- // so we split the string to get the object type "Foo". This is
- // pretty fragile.
- targetString = '' + String(targetString).split(/[\s\]]/)[1];
+ targetString = '' + String(target).split(/[\s\]]/)[1];
}
break;
default:
@@ -350,7 +352,7 @@ window.Audit = (function() {
*
* @example
* should('My promise', promise).beResolve().then((result) => {
- * // log(result);
+ * log(result);
* });
*
* @result
@@ -1289,6 +1291,56 @@ window.Audit = (function() {
}
/**
+ * Load file from a given URL and pass ArrayBuffer to the following promise.
+ * @param {String} fileUrl file URL.
+ * @return {Promise}
+ *
+ * @example
+ * Audit.loadFileFromUrl('resources/my-sound.ogg').then((response) => {
+ * audioContext.decodeAudioData(response).then((audioBuffer) => {
+ * // Do something with AudioBuffer.
+ * });
+ * });
+ */
+ function loadFileFromUrl(fileUrl) {
+ return new Promise((resolve, reject) => {
+ let xhr = new XMLHttpRequest();
+ xhr.open('GET', fileUrl, true);
+ xhr.responseType = 'arraybuffer';
+
+ xhr.onload = () => {
+ // |status = 0| is a workaround for the run_web_test.py server. We are
+ // speculating the server quits the transaction prematurely without
+ // completing the request.
+ if (xhr.status === 200 || xhr.status === 0) {
+ resolve(xhr.response);
+ } else {
+ let errorMessage = 'loadFile: Request failed when loading ' +
+ fileUrl + '. ' + xhr.statusText + '. (status = ' + xhr.status +
+ ')';
+ if (reject) {
+ reject(errorMessage);
+ } else {
+ new Error(errorMessage);
+ }
+ }
+ };
+
+ xhr.onerror = (event) => {
+ let errorMessage =
+ 'loadFile: Network failure when loading ' + fileUrl + '.';
+ if (reject) {
+ reject(errorMessage);
+ } else {
+ new Error(errorMessage);
+ }
+ };
+
+ xhr.send();
+ });
+ }
+
+ /**
* @class Audit
* @description A WebAudio layout test task manager.
* @example
@@ -1313,12 +1365,18 @@ window.Audit = (function() {
if (options && options.requireResultFile == true) {
_logError(
'this test requires the explicit comparison with the ' +
- 'expected result when it runs with run-webkit-tests.');
+ 'expected result when it runs with run_web_tests.py.');
}
return new TaskRunner();
},
+ /**
+ * Load file from a given URL and pass ArrayBuffer to the following promise.
+ * See |loadFileFromUrl| method for the detail.
+ */
+ loadFileFromUrl: loadFileFromUrl
+
};
})();
diff --git a/tests/wpt/web-platform-tests/webaudio/resources/note-grain-on-testing.js b/tests/wpt/web-platform-tests/webaudio/resources/note-grain-on-testing.js
new file mode 100644
index 00000000000..1e941897161
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webaudio/resources/note-grain-on-testing.js
@@ -0,0 +1,159 @@
+let sampleRate = 44100.0;
+
+// How many grains to play.
+let numberOfTests = 100;
+
+// Duration of each grain to be played
+let duration = 0.01;
+
+// Time step between the start of each grain. We need to add a little
+// bit of silence so we can detect grain boundaries
+let timeStep = duration + .005;
+
+// Time step between the start for each grain.
+let grainOffsetStep = 0.001;
+
+// How long to render to cover all of the grains.
+let renderTime = (numberOfTests + 1) * timeStep;
+
+let context;
+let renderedData;
+
+// Create a buffer containing the data that we want. The function f
+// returns the desired value at sample frame k.
+function createSignalBuffer(context, f) {
+ // Make sure the buffer has enough data for all of the possible
+ // grain offsets and durations. The additional 1 is for any
+ // round-off errors.
+ let signalLength =
+ Math.floor(1 + sampleRate * (numberOfTests * grainOffsetStep + duration));
+
+ let buffer = context.createBuffer(2, signalLength, sampleRate);
+ let data = buffer.getChannelData(0);
+
+ for (let k = 0; k < signalLength; ++k) {
+ data[k] = f(k);
+ }
+
+ return buffer;
+}
+
+// From the data array, find the start and end sample frame for each
+// grain. This depends on the data having 0's between grain, and
+// that the grain is always strictly non-zero.
+function findStartAndEndSamples(data) {
+ let nSamples = data.length;
+
+ let startTime = [];
+ let endTime = [];
+ let lookForStart = true;
+
+ // Look through the rendered data to find the start and stop
+ // times of each grain.
+ for (let k = 0; k < nSamples; ++k) {
+ if (lookForStart) {
+ // Find a non-zero point and record the start. We're not
+ // concerned with the value in this test, only that the
+ // grain started here.
+ if (renderedData[k]) {
+ startTime.push(k);
+ lookForStart = false;
+ }
+ } else {
+ // Find a zero and record the end of the grain.
+ if (!renderedData[k]) {
+ endTime.push(k);
+ lookForStart = true;
+ }
+ }
+ }
+
+ return {start: startTime, end: endTime};
+}
+
+function playGrain(context, source, time, offset, duration) {
+ let bufferSource = context.createBufferSource();
+
+ bufferSource.buffer = source;
+ bufferSource.connect(context.destination);
+ bufferSource.start(time, offset, duration);
+}
+
+// Play out all grains. Returns a object containing two arrays, one
+// for the start time and one for the grain offset time.
+function playAllGrains(context, source, numberOfNotes) {
+ let startTimes = new Array(numberOfNotes);
+ let offsets = new Array(numberOfNotes);
+
+ for (let k = 0; k < numberOfNotes; ++k) {
+ let timeOffset = k * timeStep;
+ let grainOffset = k * grainOffsetStep;
+
+ playGrain(context, source, timeOffset, grainOffset, duration);
+ startTimes[k] = timeOffset;
+ offsets[k] = grainOffset;
+ }
+
+ return {startTimes: startTimes, grainOffsetTimes: offsets};
+}
+
+// Verify that the start and end frames for each grain match our
+// expected start and end frames.
+function verifyStartAndEndFrames(startEndFrames, should) {
+ let startFrames = startEndFrames.start;
+ let endFrames = startEndFrames.end;
+
+ // Count of how many grains started at the incorrect time.
+ let errorCountStart = 0;
+
+ // Count of how many grains ended at the incorrect time.
+ let errorCountEnd = 0;
+
+ should(
+ startFrames.length == endFrames.length, 'Found all grain starts and ends')
+ .beTrue();
+
+ should(startFrames.length, 'Number of start frames').beEqualTo(numberOfTests);
+ should(endFrames.length, 'Number of end frames').beEqualTo(numberOfTests);
+
+ // Examine the start and stop times to see if they match our
+ // expectations.
+ for (let k = 0; k < startFrames.length; ++k) {
+ let expectedStart = timeToSampleFrame(k * timeStep, sampleRate);
+ // The end point is the duration.
+ let expectedEnd = expectedStart +
+ grainLengthInSampleFrames(k * grainOffsetStep, duration, sampleRate);
+
+ if (startFrames[k] != expectedStart)
+ ++errorCountStart;
+ if (endFrames[k] != expectedEnd)
+ ++errorCountEnd;
+
+ should([startFrames[k], endFrames[k]], 'Pulse ' + k + ' boundary')
+ .beEqualToArray([expectedStart, expectedEnd]);
+ }
+
+ // Check that all the grains started or ended at the correct time.
+ if (!errorCountStart) {
+ should(
+ startFrames.length, 'Number of grains that started at the correct time')
+ .beEqualTo(numberOfTests);
+ } else {
+ should(
+ errorCountStart,
+ 'Number of grains out of ' + numberOfTests +
+ 'that started at the wrong time')
+ .beEqualTo(0);
+ }
+
+ if (!errorCountEnd) {
+ should(endFrames.length, 'Number of grains that ended at the correct time')
+ .beEqualTo(numberOfTests);
+ } else {
+ should(
+ errorCountEnd,
+ 'Number of grains out of ' + numberOfTests +
+ ' that ended at the wrong time')
+ .beEqualTo(0);
+ }
+}
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-basic.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-basic.html
new file mode 100644
index 00000000000..54e2d4dc25a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-basic.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<html>
+ <head>
+ <title>
+ Basic Test of AudioBufferSourceNode
+ </title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/webaudio/resources/audit-util.js"></script>
+ <script src="/webaudio/resources/audit.js"></script>
+ <script src="/webaudio/resources/start-stop-exceptions.js"></script>
+ </head>
+ <script id="layout-test-code">
+ let sampleRate = 44100;
+ let renderLengthSeconds = 0.25;
+
+ let oscTypes = ['sine', 'square', 'sawtooth', 'triangle', 'custom'];
+
+ let audit = Audit.createTaskRunner();
+
+ audit.define('start/stop exceptions', (task, should) => {
+ // We're not going to render anything, so make it simple
+ let context = new OfflineAudioContext(1, 1, sampleRate);
+ let node = new AudioBufferSourceNode(context);
+
+ testStartStop(should, node, [
+ {args: [0, -1], errorType: 'RangeError'},
+ {args: [0, 0, -1], errorType: 'RangeError'}
+ ]);
+ task.done();
+ });
+
+ audit.run();
+ </script>
+ <body>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-channels.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-channels.html
new file mode 100644
index 00000000000..0af05d3a8e8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-channels.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>
+ audiobuffersource-channels.html
+ </title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/webaudio/resources/audit-util.js"></script>
+ <script src="/webaudio/resources/audit.js"></script>
+ </head>
+ <body>
+ <script id="layout-test-code">
+ let audit = Audit.createTaskRunner();
+ let context;
+ let source;
+
+ audit.define(
+ {
+ label: 'validate .buffer',
+ description:
+ 'Validatation of AudioBuffer in .buffer attribute setter'
+ },
+ function(task, should) {
+ context = new AudioContext();
+ source = context.createBufferSource();
+
+ // Make sure we can't set to something which isn't an AudioBuffer.
+ should(function() {
+ source.buffer = 57;
+ }, 'source.buffer = 57').throw('TypeError');
+
+ // It's ok to set the buffer to null.
+ should(function() {
+ source.buffer = null;
+ }, 'source.buffer = null').notThrow();
+
+ // Set the buffer to a valid AudioBuffer
+ let buffer =
+ new AudioBuffer({length: 128, sampleRate: context.sampleRate});
+
+ should(function() {
+ source.buffer = buffer;
+ }, 'source.buffer = buffer').notThrow();
+
+ // The buffer has been set; we can't set it again.
+ should(function() {
+ source.buffer =
+ new AudioBuffer({length: 128, sampleRate: context.sampleRate})
+ }, 'source.buffer = new buffer').throw('InvalidStateError');
+
+ // The buffer has been set; it's ok to set it to null.
+ should(function() {
+ source.buffer = null;
+ }, 'source.buffer = null again').notThrow();
+
+ // The buffer was already set (and set to null). Can't set it
+ // again.
+ should(function() {
+ source.buffer = buffer;
+ }, 'source.buffer = buffer again').throw('InvalidStateError');
+
+ // But setting to null is ok.
+ should(function() {
+ }, 'source.buffer = null after setting to null').notThrow();
+
+ // Check that mono buffer can be set.
+ should(function() {
+ let monoBuffer =
+ context.createBuffer(1, 1024, context.sampleRate);
+ let testSource = context.createBufferSource();
+ testSource.buffer = monoBuffer;
+ }, 'Setting source with mono buffer').notThrow();
+
+ // Check that stereo buffer can be set.
+ should(function() {
+ let stereoBuffer =
+ context.createBuffer(2, 1024, context.sampleRate);
+ let testSource = context.createBufferSource();
+ testSource.buffer = stereoBuffer;
+ }, 'Setting source with stereo buffer').notThrow();
+
+ // Check buffers with more than two channels.
+ for (let i = 3; i < 10; ++i) {
+ should(function() {
+ let buffer = context.createBuffer(i, 1024, context.sampleRate);
+ let testSource = context.createBufferSource();
+ testSource.buffer = buffer;
+ }, 'Setting source with ' + i + ' channels buffer').notThrow();
+ }
+ task.done();
+ });
+
+ audit.run();
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-ended.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-ended.html
new file mode 100644
index 00000000000..b9922f61ef3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-ended.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>
+ audiobuffersource-ended.html
+ </title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/webaudio/resources/audit-util.js"></script>
+ <script src="/webaudio/resources/audit.js"></script>
+ <script src="/webaudio/resources/audiobuffersource-testing.js"></script>
+ </head>
+ <body>
+ <script id="layout-test-code">
+ let audit = Audit.createTaskRunner();
+
+ let context;
+ let source;
+
+ audit.define(
+ 'AudioBufferSourceNode calls its onended EventListener',
+ function(task, should) {
+ let sampleRate = 44100.0;
+ let numberOfFrames = 32;
+ context = new OfflineAudioContext(1, numberOfFrames, sampleRate);
+ source = context.createBufferSource();
+ source.buffer = createTestBuffer(context, numberOfFrames);
+ source.connect(context.destination);
+ source.onended = function() {
+ should(true, 'source.onended called').beTrue();
+ task.done();
+ };
+ source.start(0);
+ context.startRendering();
+ });
+
+ audit.run();
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-grain.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-grain.html
new file mode 100644
index 00000000000..f554304a21e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-grain.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>
+ Test Start Grain with Delayed Buffer Setting
+ </title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/webaudio/resources/audit-util.js"></script>
+ <script src="/webaudio/resources/audit.js"></script>
+ </head>
+ <body>
+ <script id="layout-test-code">
+ let audit = Audit.createTaskRunner();
+ let context;
+ let source;
+ let buffer;
+ let renderedData;
+
+ let sampleRate = 44100;
+
+ let testDurationSec = 1;
+ let testDurationSamples = testDurationSec * sampleRate;
+ let startTime = 0.9 * testDurationSec;
+
+ audit.define(
+ 'Test setting the source buffer after starting the grain',
+ function(task, should) {
+ context =
+ new OfflineAudioContext(1, testDurationSamples, sampleRate);
+
+ buffer = createConstantBuffer(context, testDurationSamples, 1);
+ source = context.createBufferSource();
+ source.connect(context.destination);
+
+ // Start the source BEFORE we set the buffer. The grain offset and
+ // duration aren't important, as long as we specify some offset.
+ source.start(startTime, .1);
+ source.buffer = buffer;
+
+ // Render it!
+ context.startRendering()
+ .then(function(buffer) {
+ checkResult(buffer, should);
+ })
+ .then(task.done.bind(task));
+ ;
+ });
+
+ function checkResult(buffer, should) {
+ let success = false;
+
+ renderedData = buffer.getChannelData(0);
+
+ // Check that the rendered data is not all zeroes. Any non-zero data
+ // means the test passed.
+ let startFrame = Math.round(startTime * sampleRate);
+ for (k = 0; k < renderedData.length; ++k) {
+ if (renderedData[k]) {
+ success = true;
+ break;
+ }
+ }
+
+ should(success, 'Buffer was played').beTrue();
+ }
+
+ audit.run();
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels-expected.wav b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels-expected.wav
new file mode 100644
index 00000000000..ab9d5fe5a9d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels-expected.wav
Binary files differ
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html
new file mode 100644
index 00000000000..01ba3b122d8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<!--
+Test AudioBufferSourceNode supports 5.1 channel.
+-->
+<html>
+ <head>
+ <title>
+ audiobuffersource-multi-channels.html
+ </title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/webaudio/resources/audit-util.js"></script>
+ <script src="/webaudio/resources/audit.js"></script>
+ <script src="/webaudio/resources/mix-testing.js"></script>
+ </head>
+ <body>
+ <script id="layout-test-code">
+ let audit = Audit.createTaskRunner();
+ let context;
+ let expectedAudio;
+
+ audit.define('initialize', (task, should) => {
+ // Create offline audio context
+ let sampleRate = 44100.0;
+ should(() => {
+ context = new OfflineAudioContext(
+ 6, sampleRate * toneLengthSeconds, sampleRate);
+ }, 'Creating context for testing').notThrow();
+ should(
+ Audit
+ .loadFileFromUrl(
+ 'audiobuffersource-multi-channels-expected.wav')
+ .then(arrayBuffer => {
+ context.decodeAudioData(arrayBuffer).then(audioBuffer => {
+ expectedAudio = audioBuffer;
+ task.done();
+ });
+ }),
+ 'Fetching expected audio')
+ .beResolved();
+ });
+
+ audit.define(
+ {label: 'test', description: 'AudioBufferSource with 5.1 buffer'},
+ (task, should) => {
+ let toneBuffer =
+ createToneBuffer(context, 440, toneLengthSeconds, 6);
+
+ let source = context.createBufferSource();
+ source.buffer = toneBuffer;
+
+ source.connect(context.destination);
+ source.start(0);
+
+ context.startRendering()
+ .then(renderedAudio => {
+ // Compute a threshold based on the maximum error, |maxUlp|,
+ // in ULP. This is experimentally determined. Assuming that
+ // the reference file is a 16-bit wav file, the max values in
+ // the wave file are +/- 32768.
+ let maxUlp = 1;
+ let threshold = maxUlp / 32768;
+ for (let k = 0; k < renderedAudio.numberOfChannels; ++k) {
+ should(
+ renderedAudio.getChannelData(k),
+ 'Rendered audio for channel ' + k)
+ .beCloseToArray(
+ expectedAudio.getChannelData(k),
+ {absoluteThreshold: threshold});
+ }
+ })
+ .then(() => task.done());
+ });
+
+ audit.run();
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-one-sample-loop.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-one-sample-loop.html
new file mode 100644
index 00000000000..af1454a5a9f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-one-sample-loop.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>
+ Test AudioBufferSourceNode With Looping a Single-Sample Buffer
+ </title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/webaudio/resources/audit-util.js"></script>
+ <script src="/webaudio/resources/audit.js"></script>
+ </head>
+ <body>
+ <script id="layout-test-code">
+ let audit = Audit.createTaskRunner();
+
+ let sampleRate = 44100;
+ let testDurationSamples = 1000;
+
+ audit.define('one-sample-loop', function(task, should) {
+ // Create the offline context for the test.
+ let context =
+ new OfflineAudioContext(1, testDurationSamples, sampleRate);
+
+ // Create the single sample buffer
+ let buffer = createConstantBuffer(context, 1, 1);
+
+ // Create the source and connect it to the destination
+ let source = context.createBufferSource();
+ source.buffer = buffer;
+ source.loop = true;
+ source.connect(context.destination);
+ source.start();
+
+ // Render it!
+ context.startRendering()
+ .then(function(audioBuffer) {
+ should(audioBuffer.getChannelData(0), 'Rendered data')
+ .beConstantValueOf(1);
+ })
+ .then(task.done.bind(task));
+ ;
+ });
+
+ audit.run();
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-playbackrate-zero.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-playbackrate-zero.html
new file mode 100644
index 00000000000..58ee49e42d2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-playbackrate-zero.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>
+ audiobuffersource-playbackrate-zero.html
+ </title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/webaudio/resources/audit-util.js"></script>
+ <script src="/webaudio/resources/audit.js"></script>
+ </head>
+ <body>
+ <script id="layout-test-code">
+ // Sample rate should be power of 128 to observe the change of AudioParam
+ // at the beginning of rendering quantum. (playbackRate is k-rate) This is
+ // the minimum sample rate in the valid sample rate range.
+ let sampleRate = 8192;
+
+ // The render duration in seconds, and the length in samples.
+ let renderDuration = 1.0;
+ let renderLength = renderDuration * sampleRate;
+
+ let context = new OfflineAudioContext(1, renderLength, sampleRate);
+ let audit = Audit.createTaskRunner();
+
+
+ // Task: Render the actual buffer and compare with the reference.
+ audit.define('synthesize-verify', (task, should) => {
+ let ramp = context.createBufferSource();
+ let rampBuffer = createLinearRampBuffer(context, renderLength);
+ ramp.buffer = rampBuffer;
+
+ ramp.connect(context.destination);
+ ramp.start();
+
+ // Leave the playbackRate as 1 for the first half, then change it
+ // to zero at the exact half. The zero playback rate should hold the
+ // sample value of the buffer index at the moment. (sample-and-hold)
+ ramp.playbackRate.setValueAtTime(1.0, 0.0);
+ ramp.playbackRate.setValueAtTime(0.0, renderDuration / 2);
+
+ context.startRendering()
+ .then(function(renderedBuffer) {
+ let data = renderedBuffer.getChannelData(0);
+ let rampData = rampBuffer.getChannelData(0);
+ let half = rampData.length / 2;
+ let passed = true;
+ let i;
+
+ for (i = 1; i < rampData.length; i++) {
+ if (i < half) {
+ // Before the half position, the actual should match with the
+ // original ramp data.
+ if (data[i] !== rampData[i]) {
+ passed = false;
+ break;
+ }
+ } else {
+ // From the half position, the actual value should not change.
+ if (data[i] !== rampData[half]) {
+ passed = false;
+ break;
+ }
+ }
+ }
+
+ should(passed, 'The zero playbackRate')
+ .message(
+ 'held the sample value correctly',
+ 'should hold the sample value. ' +
+ 'Expected ' + rampData[half] + ' but got ' + data[i] +
+ ' at the index ' + i);
+ })
+ .then(() => task.done());
+ });
+
+ audit.run();
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-start.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-start.html
new file mode 100644
index 00000000000..19331954b0b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-start.html
@@ -0,0 +1,174 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>
+ audiobuffersource-start.html
+ </title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/webaudio/resources/audit-util.js"></script>
+ <script src="/webaudio/resources/audit.js"></script>
+ <script src="/webaudio/resources/audiobuffersource-testing.js"></script>
+ </head>
+ <body>
+ <script id="layout-test-code">
+ let audit = Audit.createTaskRunner();
+
+ // The following test cases assume an AudioBuffer of length 8 whose PCM
+ // data is a linear ramp, 0, 1, 2, 3,...
+
+ let tests = [
+
+ {
+ description:
+ 'start(when): implicitly play whole buffer from beginning to end',
+ offsetFrame: 'none',
+ durationFrames: 'none',
+ renderFrames: 16,
+ playbackRate: 1,
+ expected: [0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0]
+ },
+
+ {
+ description:
+ 'start(when, 0): play whole buffer from beginning to end explicitly giving offset of 0',
+ offsetFrame: 0,
+ durationFrames: 'none',
+ renderFrames: 16,
+ playbackRate: 1,
+ expected: [0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0]
+ },
+
+ {
+ description:
+ 'start(when, 0, 8_frames): play whole buffer from beginning to end explicitly giving offset of 0 and duration of 8 frames',
+ offsetFrame: 0,
+ durationFrames: 8,
+ renderFrames: 16,
+ playbackRate: 1,
+ expected: [0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0]
+ },
+
+ {
+ description:
+ 'start(when, 4_frames): play with explicit non-zero offset',
+ offsetFrame: 4,
+ durationFrames: 'none',
+ renderFrames: 16,
+ playbackRate: 1,
+ expected: [4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+ },
+
+ {
+ description:
+ 'start(when, 4_frames, 4_frames): play with explicit non-zero offset and duration',
+ offsetFrame: 4,
+ durationFrames: 4,
+ renderFrames: 16,
+ playbackRate: 1,
+ expected: [4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+ },
+
+ {
+ description:
+ 'start(when, 7_frames): play with explicit non-zero offset near end of buffer',
+ offsetFrame: 7,
+ durationFrames: 1,
+ renderFrames: 16,
+ playbackRate: 1,
+ expected: [7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+ },
+
+ {
+ description:
+ 'start(when, 8_frames): play with explicit offset at end of buffer',
+ offsetFrame: 8,
+ durationFrames: 0,
+ renderFrames: 16,
+ playbackRate: 1,
+ expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+ },
+
+ {
+ description:
+ 'start(when, 9_frames): play with explicit offset past end of buffer',
+ offsetFrame: 8,
+ durationFrames: 0,
+ renderFrames: 16,
+ playbackRate: 1,
+ expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+ },
+
+ // When the duration exceeds the buffer, just play to the end of the
+ // buffer. (This is different from the case when we're looping, which is
+ // tested in loop-comprehensive.)
+ {
+ description:
+ 'start(when, 0, 15_frames): play with whole buffer, with long duration (clipped)',
+ offsetFrame: 0,
+ durationFrames: 15,
+ renderFrames: 16,
+ playbackRate: 1,
+ expected: [0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0]
+ },
+
+ // Enable test when AudioBufferSourceNode hack is fixed:
+ // https://bugs.webkit.org/show_bug.cgi?id=77224 { description:
+ // "start(when, 3_frames, 3_frames): play a middle section with explicit
+ // offset and duration",
+ // offsetFrame: 3, durationFrames: 3, renderFrames: 16, playbackRate:
+ // 1, expected: [4,5,6,7,0,0,0,0,0,0,0,0,0,0,0,0] },
+
+ ];
+
+ let sampleRate = 44100;
+ let buffer;
+ let bufferFrameLength = 8;
+ let testSpacingFrames = 32;
+ let testSpacingSeconds = testSpacingFrames / sampleRate;
+ let totalRenderLengthFrames = tests.length * testSpacingFrames;
+
+ function runLoopTest(context, testNumber, test) {
+ let source = context.createBufferSource();
+
+ source.buffer = buffer;
+ source.playbackRate.value = test.playbackRate;
+
+ source.connect(context.destination);
+
+ // Render each test one after the other, spaced apart by
+ // testSpacingSeconds.
+ let startTime = testNumber * testSpacingSeconds;
+
+ if (test.offsetFrame == 'none' && test.durationFrames == 'none') {
+ source.start(startTime);
+ } else if (test.durationFrames == 'none') {
+ let offset = test.offsetFrame / context.sampleRate;
+ source.start(startTime, offset);
+ } else {
+ let offset = test.offsetFrame / context.sampleRate;
+ let duration = test.durationFrames / context.sampleRate;
+ source.start(startTime, offset, duration);
+ }
+ }
+
+ audit.define(
+ 'Tests AudioBufferSourceNode start()', function(task, should) {
+ // Create offline audio context.
+ let context =
+ new OfflineAudioContext(1, totalRenderLengthFrames, sampleRate);
+ buffer = createTestBuffer(context, bufferFrameLength);
+
+ for (let i = 0; i < tests.length; ++i)
+ runLoopTest(context, i, tests[i]);
+
+ context.startRendering().then(function(audioBuffer) {
+ checkAllTests(audioBuffer, should);
+ task.done();
+ });
+ });
+
+ audit.run();
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiosource-onended.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiosource-onended.html
new file mode 100644
index 00000000000..20ef4a1c638
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiosource-onended.html
@@ -0,0 +1,101 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>
+ Test Onended Event Listener
+ </title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/webaudio/resources/audit-util.js"></script>
+ <script src="/webaudio/resources/audit.js"></script>
+ </head>
+ <body>
+ <script id="layout-test-code">
+ let sampleRate = 44100;
+ let renderLengthSeconds = 1;
+ let renderLengthFrames = renderLengthSeconds * sampleRate;
+
+ // Length of the source buffer. Anything less than the render length is
+ // fine.
+ let sourceBufferLengthFrames = renderLengthFrames / 8;
+ // When to stop the oscillator. Anything less than the render time is
+ // fine.
+ let stopTime = renderLengthSeconds / 8;
+
+ let audit = Audit.createTaskRunner();
+
+ audit.define('absn-set-onended', (task, should) => {
+ // Test that the onended event for an AudioBufferSourceNode is fired
+ // when it is set directly.
+ let context =
+ new OfflineAudioContext(1, renderLengthFrames, sampleRate);
+ let buffer = context.createBuffer(
+ 1, sourceBufferLengthFrames, context.sampleRate);
+ let source = context.createBufferSource();
+ source.buffer = buffer;
+ source.connect(context.destination);
+ source.onended = function(e) {
+ should(
+ true, 'AudioBufferSource.onended called when ended set directly')
+ .beEqualTo(true);
+ };
+ source.start();
+ context.startRendering().then(() => task.done());
+ });
+
+ audit.define('absn-add-listener', (task, should) => {
+ // Test that the onended event for an AudioBufferSourceNode is fired
+ // when addEventListener is used to set the handler.
+ let context =
+ new OfflineAudioContext(1, renderLengthFrames, sampleRate);
+ let buffer = context.createBuffer(
+ 1, sourceBufferLengthFrames, context.sampleRate);
+ let source = context.createBufferSource();
+ source.buffer = buffer;
+ source.connect(context.destination);
+ source.addEventListener('ended', function(e) {
+ should(
+ true,
+ 'AudioBufferSource.onended called when using addEventListener')
+ .beEqualTo(true);
+ });
+ source.start();
+ context.startRendering().then(() => task.done());
+ });
+
+ audit.define('osc-set-onended', (task, should) => {
+ // Test that the onended event for an OscillatorNode is fired when it is
+ // set directly.
+ let context =
+ new OfflineAudioContext(1, renderLengthFrames, sampleRate);
+ let source = context.createOscillator();
+ source.connect(context.destination);
+ source.onended = function(e) {
+ should(true, 'Oscillator.onended called when ended set directly')
+ .beEqualTo(true);
+ };
+ source.start();
+ source.stop(stopTime);
+ context.startRendering().then(() => task.done());
+ });
+
+ audit.define('osc-add-listener', (task, should) => {
+ // Test that the onended event for an OscillatorNode is fired when
+ // addEventListener is used to set the handler.
+ let context =
+ new OfflineAudioContext(1, renderLengthFrames, sampleRate);
+ let source = context.createOscillator();
+ source.connect(context.destination);
+ source.addEventListener('ended', function(e) {
+ should(true, 'Oscillator.onended called when using addEventListener')
+ .beEqualTo(true);
+ });
+ source.start();
+ source.stop(stopTime);
+ context.startRendering().then(() => task.done());
+ });
+
+ audit.run();
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiosource-time-limits.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiosource-time-limits.html
new file mode 100644
index 00000000000..3ac9c05938c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiosource-time-limits.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>
+ Test Scheduled Sources with Huge Time Limits
+ </title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/webaudio/resources/audit-util.js"></script>
+ <script src="/webaudio/resources/audit.js"></script>
+ <script src="/webaudio/resources/audioparam-testing.js"></script>
+ </head>
+ <body>
+ <script id="layout-test-code">
+ let sampleRate = 48000;
+ let renderFrames = 1000;
+
+ let audit = Audit.createTaskRunner();
+
+ audit.define('buffersource: huge stop time', (task, should) => {
+ // We only need to generate a small number of frames for this test.
+ let context = new OfflineAudioContext(1, renderFrames, sampleRate);
+ let src = context.createBufferSource();
+
+ // Constant source of amplitude 1, looping.
+ src.buffer = createConstantBuffer(context, 1, 1);
+ src.loop = true;
+
+ // Create the graph and go!
+ let endTime = 1e300;
+ src.connect(context.destination);
+ src.start();
+ src.stop(endTime);
+
+ context.startRendering()
+ .then(function(resultBuffer) {
+ let result = resultBuffer.getChannelData(0);
+ should(
+ result, 'Output from AudioBufferSource.stop(' + endTime + ')')
+ .beConstantValueOf(1);
+ })
+ .then(() => task.done());
+ });
+
+
+ audit.define('oscillator: huge stop time', (task, should) => {
+ // We only need to generate a small number of frames for this test.
+ let context = new OfflineAudioContext(1, renderFrames, sampleRate);
+ let src = context.createOscillator();
+
+ // Create the graph and go!
+ let endTime = 1e300;
+ src.connect(context.destination);
+ src.start();
+ src.stop(endTime);
+
+ context.startRendering()
+ .then(function(resultBuffer) {
+ let result = resultBuffer.getChannelData(0);
+ // The buffer should not be empty. Just find the max and verify
+ // that it's not zero.
+ let max = Math.max.apply(null, result);
+ should(
+ max, 'Peak amplitude from oscillator.stop(' + endTime + ')')
+ .beGreaterThan(0);
+ })
+ .then(() => task.done());
+ });
+
+
+ audit.run();
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/note-grain-on-play.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/note-grain-on-play.html
new file mode 100644
index 00000000000..37c4462addb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/note-grain-on-play.html
@@ -0,0 +1,121 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>
+ note-grain-on-play.html
+ </title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/webaudio/resources/audit-util.js"></script>
+ <script src="/webaudio/resources/audit.js"></script>
+ <script src="/webaudio/resources/note-grain-on-testing.js"></script>
+ </head>
+ <body>
+ <div id="description"></div>
+ <div id="console"></div>
+ <script id="layout-test-code">
+ let audit = Audit.createTaskRunner();
+
+ // To test noteGrainOn, a single ramp signal is created.
+ // Various sections of the ramp are rendered by noteGrainOn() at
+ // different times, and we verify that the actual output
+ // consists of the correct section of the ramp at the correct
+ // time.
+
+ let linearRampBuffer;
+
+ // Array of the grain offset used for each ramp played.
+ let grainOffsetTime = [];
+
+ // Verify the received signal is a ramp from the correct section
+ // of our ramp signal.
+ function verifyGrain(renderedData, startFrame, endFrame, grainIndex) {
+ let grainOffsetFrame =
+ timeToSampleFrame(grainOffsetTime[grainIndex], sampleRate);
+ let grainFrameLength = endFrame - startFrame;
+ let ramp = linearRampBuffer.getChannelData(0);
+ let isCorrect = true;
+
+ let expected;
+ let actual;
+ let frame;
+
+ for (let k = 0; k < grainFrameLength; ++k) {
+ if (renderedData[startFrame + k] != ramp[grainOffsetFrame + k]) {
+ expected = ramp[grainOffsetFrame + k];
+ actual = renderedData[startFrame + k];
+ frame = startFrame + k;
+ isCorrect = false;
+ break;
+ }
+ }
+ return {
+ verified: isCorrect,
+ expected: expected,
+ actual: actual,
+ frame: frame
+ };
+ }
+
+ function checkResult(buffer, should) {
+ renderedData = buffer.getChannelData(0);
+ let nSamples = renderedData.length;
+
+ // Number of grains that we found that have incorrect data.
+ let invalidGrainDataCount = 0;
+
+ let startEndFrames = findStartAndEndSamples(renderedData);
+
+ // Verify the start and stop times. Not strictly needed for
+ // this test, but it's useful to know that if the ramp data
+ // appears to be incorrect.
+ verifyStartAndEndFrames(startEndFrames, should);
+
+ // Loop through each of the rendered grains and check that
+ // each grain contains our expected ramp.
+ for (let k = 0; k < startEndFrames.start.length; ++k) {
+ // Verify that the rendered data matches the expected
+ // section of our ramp signal.
+ let result = verifyGrain(
+ renderedData, startEndFrames.start[k], startEndFrames.end[k], k);
+ should(result.verified, 'Pulse ' + k + ' contained the expected data')
+ .beTrue();
+ }
+ should(
+ invalidGrainDataCount,
+ 'Number of grains that did not contain the expected data')
+ .beEqualTo(0);
+ }
+
+ audit.define(
+ {
+ label: 'note-grain-on-play',
+ description: 'Test noteGrainOn offset rendering'
+ },
+ function(task, should) {
+ // Create offline audio context.
+ context =
+ new OfflineAudioContext(2, sampleRate * renderTime, sampleRate);
+
+ // Create a linear ramp for testing noteGrainOn.
+ linearRampBuffer = createSignalBuffer(context, function(k) {
+ // Want the ramp to start
+ // with 1, not 0.
+ return k + 1;
+ });
+
+ let grainInfo =
+ playAllGrains(context, linearRampBuffer, numberOfTests);
+
+ grainOffsetTime = grainInfo.grainOffsetTimes;
+
+ context.startRendering().then(function(audioBuffer) {
+ checkResult(audioBuffer, should);
+ task.done();
+ });
+ });
+
+ audit.run();
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/note-grain-on-timing.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/note-grain-on-timing.html
new file mode 100644
index 00000000000..0db297b42cc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/note-grain-on-timing.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>
+ note-grain-on-timing.html
+ </title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/webaudio/resources/audit-util.js"></script>
+ <script src="/webaudio/resources/audit.js"></script>
+ <script src="/webaudio/resources/note-grain-on-testing.js"></script>
+ </head>
+ <body>
+ <script id="layout-test-code">
+ let audit = Audit.createTaskRunner();
+
+ let squarePulseBuffer;
+
+ function checkResult(buffer, should) {
+ renderedData = buffer.getChannelData(0);
+ let nSamples = renderedData.length;
+ let startEndFrames = findStartAndEndSamples(renderedData);
+
+ verifyStartAndEndFrames(startEndFrames, should);
+ }
+
+ audit.define('Test timing of noteGrainOn', function(task, should) {
+ // Create offline audio context.
+ context =
+ new OfflineAudioContext(2, sampleRate * renderTime, sampleRate);
+
+ squarePulseBuffer = createSignalBuffer(context, function(k) {
+ return 1
+ });
+
+ playAllGrains(context, squarePulseBuffer, numberOfTests);
+
+ context.startRendering().then(function(audioBuffer) {
+ checkResult(audioBuffer, should);
+ task.done();
+ });
+ });
+
+ audit.run();
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sample-accurate-scheduling.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sample-accurate-scheduling.html
new file mode 100644
index 00000000000..5fafd024eef
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sample-accurate-scheduling.html
@@ -0,0 +1,110 @@
+<!DOCTYPE html>
+<!--
+Tests that we are able to schedule a series of notes to playback with sample-accuracy.
+We use an impulse so we can tell exactly where the rendering is happening.
+-->
+<html>
+ <head>
+ <title>
+ sample-accurate-scheduling.html
+ </title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/webaudio/resources/audit-util.js"></script>
+ <script src="/webaudio/resources/audit.js"></script>
+ <script src="/webaudio/resources/buffer-loader.js"></script>
+ </head>
+ <body>
+ <script id="layout-test-code">
+ let audit = Audit.createTaskRunner();
+
+ let sampleRate = 44100.0;
+ let lengthInSeconds = 4;
+
+ let context = 0;
+ let bufferLoader = 0;
+ let impulse;
+
+ // See if we can render at exactly these sample offsets.
+ let sampleOffsets = [0, 3, 512, 517, 1000, 1005, 20000, 21234, 37590];
+
+ function createImpulse() {
+ // An impulse has a value of 1 at time 0, and is otherwise 0.
+ impulse = context.createBuffer(2, 512, sampleRate);
+ let sampleDataL = impulse.getChannelData(0);
+ let sampleDataR = impulse.getChannelData(1);
+ sampleDataL[0] = 1.0;
+ sampleDataR[0] = 1.0;
+ }
+
+ function playNote(time) {
+ let bufferSource = context.createBufferSource();
+ bufferSource.buffer = impulse;
+ bufferSource.connect(context.destination);
+ bufferSource.start(time);
+ }
+
+ function checkSampleAccuracy(buffer, should) {
+ let bufferDataL = buffer.getChannelData(0);
+ let bufferDataR = buffer.getChannelData(1);
+
+ let impulseCount = 0;
+ let badOffsetCount = 0;
+
+ // Left and right channels must be the same.
+ should(bufferDataL, 'Content of left and right channels match and')
+ .beEqualToArray(bufferDataR);
+
+ // Go through every sample and make sure it's 0, except at positions in
+ // sampleOffsets.
+ for (let i = 0; i < buffer.length; ++i) {
+ if (bufferDataL[i] != 0) {
+ // Make sure this index is in sampleOffsets
+ let found = false;
+ for (let j = 0; j < sampleOffsets.length; ++j) {
+ if (sampleOffsets[j] == i) {
+ found = true;
+ break;
+ }
+ }
+ ++impulseCount;
+ should(found, 'Non-zero sample found at sample offset ' + i)
+ .beTrue();
+ if (!found) {
+ ++badOffsetCount;
+ }
+ }
+ }
+
+ should(impulseCount, 'Number of impulses found')
+ .beEqualTo(sampleOffsets.length);
+
+ if (impulseCount == sampleOffsets.length) {
+ should(badOffsetCount, 'bad offset').beEqualTo(0);
+ }
+ }
+
+ audit.define(
+ {label: 'test', description: 'Test sample-accurate scheduling'},
+ function(task, should) {
+
+ // Create offline audio context.
+ context = new OfflineAudioContext(
+ 2, sampleRate * lengthInSeconds, sampleRate);
+ createImpulse();
+
+ for (let i = 0; i < sampleOffsets.length; ++i) {
+ let timeInSeconds = sampleOffsets[i] / sampleRate;
+ playNote(timeInSeconds);
+ }
+
+ context.startRendering().then(function(buffer) {
+ checkSampleAccuracy(buffer, should);
+ task.done();
+ });
+ });
+
+ audit.run();
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-getoutputtimestamp.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-getoutputtimestamp.html
index cd09696e689..952f38b1edc 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-getoutputtimestamp.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-getoutputtimestamp.html
@@ -19,9 +19,10 @@
should(timestamp.contextTime, 'timestamp.contextTime').exist();
should(timestamp.performanceTime, 'timestamp.performanceTime').exist();
- should(timestamp.contextTime, 'timestamp.contextTime').beEqualTo(0);
+ should(timestamp.contextTime, 'timestamp.contextTime')
+ .beGreaterThanOrEqualTo(0);
should(timestamp.performanceTime, 'timestamp.performanceTime')
- .beEqualTo(0);
+ .beGreaterThanOrEqualTo(0);
task.done();
});
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html
new file mode 100644
index 00000000000..31f115da532
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>
+ convolver-setBuffer-already-has-value.html
+ </title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/webaudio/resources/audit.js"></script>
+ </head>
+ <body>
+ <script id="layout-test-code">
+ let audit = Audit.createTaskRunner();
+
+ audit.define('test', (task, should) => {
+ let context = new AudioContext();
+ let audioBuffer = new AudioBuffer(
+ {numberOfChannels: 1, length: 1, sampleRate: context.sampleRate});
+ let convolver = context.createConvolver();
+ should(() => {
+ convolver.buffer = null;
+ }, 'Set buffer to null before set non-null').notThrow();
+
+ should(() => {
+ convolver.buffer = audioBuffer;
+ }, 'Set buffer first normally').notThrow();
+
+ should(() => {
+ convolver.buffer = audioBuffer;
+ }, 'Set buffer a second time').throw('InvalidStateError');
+
+ should(() => {
+ convolver.buffer = null;
+ }, 'Set buffer to null').notThrow();
+
+ should(() => {
+ convolver.buffer = null;
+ }, 'Set buffer to null again, to make sure').notThrow();
+
+ should(() => {
+ convolver.buffer = audioBuffer;
+ }, 'Set buffer to non-null to verify to throw an error')
+ .throw('InvalidStateError');
+
+ task.done();
+ });
+
+ audit.run();
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/webauthn/interfaces.https.any.js b/tests/wpt/web-platform-tests/webauthn/interfaces.https.any.js
index 22766e650ce..97c3020189c 100644
--- a/tests/wpt/web-platform-tests/webauthn/interfaces.https.any.js
+++ b/tests/wpt/web-platform-tests/webauthn/interfaces.https.any.js
@@ -1,28 +1,17 @@
// META: script=/resources/WebIDLParser.js
// META: script=/resources/idlharness.js
-'use strict';
-
-if (self.importScripts) {
- importScripts('/resources/testharness.js');
- importScripts('/resources/WebIDLParser.js', '/resources/idlharness.js');
-}
-
// https://w3c.github.io/webauthn/
+'use strict';
+
promise_test(async () => {
const webauthnIdl = await fetch('/interfaces/webauthn.idl').then(r => r.text());
+ const creds = await fetch('/interfaces/credential-management.idl').then(r => r.text());
const idlArray = new IdlArray();
idlArray.add_idls(webauthnIdl);
-
- // static IDL tests
- idlArray.add_untested_idls('interface CredentialCreationOptions {};');
- idlArray.add_untested_idls('interface CredentialRequestOptions {};');
- idlArray.add_untested_idls("interface Navigator { };");
- idlArray.add_untested_idls("interface Credential { };");
- // TODO: change to "tested" for real browsers?
- idlArray.add_untested_idls("partial interface Navigator { readonly attribute WebAuthentication authentication; };");
+ idlArray.add_dependency_idls(creds);
idlArray.add_objects({
WebAuthentication: ["navigator.authentication"]
});
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/element_click/interactability.py b/tests/wpt/web-platform-tests/webdriver/tests/element_click/interactability.py
index a94bc197af3..7af1197ac71 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/element_click/interactability.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/element_click/interactability.py
@@ -59,4 +59,4 @@ def test_element_not_visible_overflow_hidden(session):
element = session.find.css("input", all=False)
response = element_click(session, element)
- assert_error(response, "element not visible")
+ assert_error(response, "element not interactable")
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/element_click/navigate.py b/tests/wpt/web-platform-tests/webdriver/tests/element_click/navigate.py
index 34c71f09eb2..ead4f5aa04b 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/element_click/navigate.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/element_click/navigate.py
@@ -44,11 +44,12 @@ def test_link_unload_event(session, server_config):
<a href={url}>click here</a>
<input type=checkbox>
<script>
- function checkUnload() {
+ function checkUnload() {{
document.getElementsByTagName("input")[0].checked = true;
- }
+ }}
</script>
</body>""".format(url=link))
+
element = session.find.css("a", all=False)
response = element_click(session, element)
assert_success(response)
@@ -61,7 +62,7 @@ def test_link_unload_event(session, server_config):
element = session.find.css("input", all=False)
response = session.execute_script("""
- let [input] = arguments;
+ let input = arguments[0];
return input.checked;
""", args=(element,))
assert response is True
@@ -84,7 +85,7 @@ def test_link_hash(session):
element = session.find.css("p", all=False)
assert session.execute_script("""
- let [input] = arguments;
+ let input = arguments[0];
rect = input.getBoundingClientRect();
return rect["top"] >= 0 && rect["left"] >= 0 &&
(rect["top"] + rect["height"]) <= window.innerHeight &&
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/element_click/scroll_into_view.py b/tests/wpt/web-platform-tests/webdriver/tests/element_click/scroll_into_view.py
index d7eda81207d..dde83a4244c 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/element_click/scroll_into_view.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/element_click/scroll_into_view.py
@@ -21,7 +21,7 @@ def test_scroll_into_view(session):
# Check if element clicked is scrolled into view
assert session.execute_script("""
- let [input] = arguments;
+ let input = arguments[0];
rect = input.getBoundingClientRect();
return rect["top"] >= 0 && rect["left"] >= 0 &&
(rect["top"] + rect["height"]) <= window.innerHeight &&
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-add-track-no-deadlock.https.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-add-track-no-deadlock.https.html
index 0bf58d947ca..0a69431edc0 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-add-track-no-deadlock.https.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-add-track-no-deadlock.https.html
@@ -14,8 +14,8 @@
t.add_cleanup(() => pc1.close());
const stream = await navigator.mediaDevices.getUserMedia(
{audio: false, video: true});
+ t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
const videoTrack = stream.getVideoTracks()[0];
- t.add_cleanup(() => videoTrack.stop());
pc1.addTrack(videoTrack, stream);
const offer = await pc1.createOffer();
await pc1.setLocalDescription(offer);
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTrack.https.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTrack.https.html
index 4e56e667c3a..6864f091255 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTrack.https.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addTrack.https.html
@@ -42,6 +42,7 @@
t.add_cleanup(() => pc.close());
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
+ t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
const [track] = stream.getTracks();
pc.close();
@@ -64,6 +65,7 @@
t.add_cleanup(() => pc.close());
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
+ t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
const [track] = stream.getTracks();
const sender = pc.addTrack(track);
@@ -95,6 +97,7 @@
t.add_cleanup(() => pc.close());
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
+ t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
const [track] = stream.getTracks();
const sender = pc.addTrack(track, stream);
@@ -111,6 +114,7 @@
t.add_cleanup(() => pc.close());
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
+ t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
const [track] = stream.getTracks();
const stream2 = new MediaStream([track]);
@@ -134,6 +138,7 @@
t.add_cleanup(() => pc.close());
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
+ t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
const [track] = stream.getTracks();
pc.addTrack(track, stream);
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-removeTrack.https.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-removeTrack.https.html
index c6e2d43336d..51d199d53ed 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-removeTrack.https.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-removeTrack.https.html
@@ -46,19 +46,17 @@
}, 'addTransceiver - Calling removeTrack when connection is closed should throw InvalidStateError');
- promise_test(t => {
+ promise_test(async t => {
const pc = new RTCPeerConnection();
-
t.add_cleanup(() => pc.close());
- return navigator.mediaDevices.getUserMedia({ audio: true })
- .then(mediaStream => {
- const [track] = mediaStream.getTracks();
- const sender = pc.addTrack(track, mediaStream);
+ const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
+ t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
+ const [track] = stream.getTracks();
+ const sender = pc.addTrack(track, stream);
- pc.close();
- assert_throws('InvalidStateError', () => pc.removeTrack(sender));
- });
+ pc.close();
+ assert_throws('InvalidStateError', () => pc.removeTrack(sender));
}, 'addTrack - Calling removeTrack when connection is closed should throw InvalidStateError');
test(t => {
@@ -73,20 +71,18 @@
}, 'addTransceiver - Calling removeTrack on different connection that is closed should throw InvalidStateError');
- promise_test(t => {
+ promise_test(async t => {
const pc = new RTCPeerConnection();
-
t.add_cleanup(() => pc.close());
- return navigator.mediaDevices.getUserMedia({ audio: true })
- .then(mediaStream => {
- const [track] = mediaStream.getTracks();
- const sender = pc.addTrack(track, mediaStream);
+ const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
+ t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
+ const [track] = stream.getTracks();
+ const sender = pc.addTrack(track, stream);
- const pc2 = new RTCPeerConnection();
- pc2.close();
- assert_throws('InvalidStateError', () => pc2.removeTrack(sender));
- });
+ const pc2 = new RTCPeerConnection();
+ pc2.close();
+ assert_throws('InvalidStateError', () => pc2.removeTrack(sender));
}, 'addTrack - Calling removeTrack on different connection that is closed should throw InvalidStateError');
/*
@@ -104,19 +100,17 @@
}, 'addTransceiver - Calling removeTrack on different connection should throw InvalidAccessError');
- promise_test(t => {
+ promise_test(async t => {
const pc = new RTCPeerConnection();
-
t.add_cleanup(() => pc.close());
- return navigator.mediaDevices.getUserMedia({ audio: true })
- .then(mediaStream => {
- const [track] = mediaStream.getTracks();
- const sender = pc.addTrack(track, mediaStream);
+ const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
+ t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
+ const [track] = stream.getTracks();
+ const sender = pc.addTrack(track, stream);
- const pc2 = new RTCPeerConnection();
- assert_throws('InvalidAccessError', () => pc2.removeTrack(sender));
- });
+ const pc2 = new RTCPeerConnection();
+ assert_throws('InvalidAccessError', () => pc2.removeTrack(sender));
}, 'addTrack - Calling removeTrack on different connection should throw InvalidAccessError')
/*
@@ -139,21 +133,19 @@
}, 'addTransceiver - Calling removeTrack with valid sender should set sender.track to null');
- promise_test(t => {
+ promise_test(async t => {
const pc = new RTCPeerConnection();
-
t.add_cleanup(() => pc.close());
- return navigator.mediaDevices.getUserMedia({ audio: true })
- .then(mediaStream => {
- const [track] = mediaStream.getTracks();
- const sender = pc.addTrack(track, mediaStream);
+ const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
+ t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
+ const [track] = stream.getTracks();
+ const sender = pc.addTrack(track, stream);
- assert_equals(sender.track, track);
+ assert_equals(sender.track, track);
- pc.removeTrack(sender);
- assert_equals(sender.track, null);
- });
+ pc.removeTrack(sender);
+ assert_equals(sender.track, null);
}, 'addTrack - Calling removeTrack with valid sender should set sender.track to null');
/*
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html
index 251d28243ed..eb2510dd499 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html
@@ -24,6 +24,7 @@
t.add_cleanup(() => callee.close());
const localStream =
await navigator.mediaDevices.getUserMedia({audio: true});
+ t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop()));
caller.addTrack(localStream.getTracks()[0]);
const ontrackPromise = addEventListenerPromise(t, callee, 'track', e => {
assert_equals(e.track.id, localStream.getTracks()[0].id,
@@ -41,6 +42,7 @@
t.add_cleanup(() => callee.close());
const localStream =
await navigator.mediaDevices.getUserMedia({audio: true});
+ t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop()));
caller.addTrack(localStream.getTracks()[0], localStream);
const ontrackPromise = addEventListenerPromise(t, callee, 'track', e => {
assert_equals(e.track.id, localStream.getTracks()[0].id,
@@ -63,6 +65,7 @@
let eventSequence = '';
const localStream =
await navigator.mediaDevices.getUserMedia({audio: true});
+ t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop()));
caller.addTrack(localStream.getTracks()[0], localStream);
const ontrackPromise = addEventListenerPromise(t, callee, 'track', e => {
eventSequence += 'ontrack;';
@@ -213,6 +216,7 @@
t.add_cleanup(() => callee.close());
const localStream =
await navigator.mediaDevices.getUserMedia({audio: true});
+ t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop()));
caller.addTrack(localStream.getTracks()[0]);
const ontrackPromise = addEventListenerPromise(t, callee, 'track', e => {
assert_array_equals(callee.getReceivers(), [e.receiver],
@@ -229,6 +233,7 @@
t.add_cleanup(() => callee.close());
const localStream =
await navigator.mediaDevices.getUserMedia({audio: true});
+ t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop()));
const sender = caller.addTrack(localStream.getTracks()[0]);
const ontrackPromise = addEventListenerPromise(t, callee, 'track');
await exchangeOfferAnswer(caller, callee);
@@ -246,7 +251,9 @@
t.add_cleanup(() => callee.close());
const localStream =
await navigator.mediaDevices.getUserMedia({audio: true});
- const sender = caller.addTrack(localStream.getTracks()[0], localStream);
+ t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop()));
+ const [track] = localStream.getTracks();
+ const sender = caller.addTrack(track, localStream);
const ontrackPromise = addEventListenerPromise(t, callee, 'track', e => {
assert_equals(e.streams.length, 1);
return e.streams[0];
@@ -273,6 +280,7 @@
let eventSequence = '';
const localStream =
await navigator.mediaDevices.getUserMedia({audio: true});
+ t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop()));
const sender = caller.addTrack(localStream.getTracks()[0], localStream);
const ontrackPromise = addEventListenerPromise(t, callee, 'track', e => {
assert_equals(e.streams.length, 1);
@@ -299,6 +307,7 @@
t.add_cleanup(() => callee.close());
const localStream =
await navigator.mediaDevices.getUserMedia({audio: true});
+ t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop()));
const sender = caller.addTrack(localStream.getTracks()[0], localStream);
const ontrackPromise = addEventListenerPromise(t, callee, 'track', e => {
assert_equals(e.streams.length, 1);
@@ -324,6 +333,7 @@
let eventSequence = '';
const localStream =
await navigator.mediaDevices.getUserMedia({audio: true});
+ t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop()));
const sender = caller.addTrack(localStream.getTracks()[0], localStream);
const ontrackPromise = addEventListenerPromise(t, callee, 'track', e => {
assert_equals(e.streams.length, 1);
@@ -347,6 +357,7 @@
const pc = new RTCPeerConnection();
t.add_cleanup(() => pc.close());
const stream = await navigator.mediaDevices.getUserMedia({audio: true});
+ t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
const sender = pc.addTrack(stream.getTracks()[0]);
pc.removeTrack(sender);
pc.removeTrack(sender);
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCRtpReceiver-getStats.https.html b/tests/wpt/web-platform-tests/webrtc/RTCRtpReceiver-getStats.https.html
index 30b15851fd6..083f9e12245 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCRtpReceiver-getStats.https.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCRtpReceiver-getStats.https.html
@@ -63,6 +63,7 @@
const callee = new RTCPeerConnection();
t.add_cleanup(() => callee.close());
const stream = await navigator.mediaDevices.getUserMedia({audio:true});
+ t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
const [track] = stream.getTracks();
caller.addTrack(track, stream);
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCRtpSender-getStats.https.html b/tests/wpt/web-platform-tests/webrtc/RTCRtpSender-getStats.https.html
index a0e2b9dbcf2..dc403bbe6cd 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCRtpSender-getStats.https.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCRtpSender-getStats.https.html
@@ -58,6 +58,7 @@
const callee = new RTCPeerConnection();
t.add_cleanup(() => callee.close());
const stream = await navigator.mediaDevices.getUserMedia({audio:true});
+ t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
const [track] = stream.getTracks();
const sender = caller.addTrack(track, stream);
diff --git a/tests/wpt/web-platform-tests/webrtc/tools/codemod-peerconnection-addcleanup b/tests/wpt/web-platform-tests/webrtc/tools/codemod-peerconnection-addcleanup
new file mode 100644
index 00000000000..920921d2e4e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webrtc/tools/codemod-peerconnection-addcleanup
@@ -0,0 +1,58 @@
+/* a codemod for ensuring RTCPeerConnection is cleaned up in tests.
+ * For each `new RTCPeerConnection` add a
+ * `test.add_cleanup(() => pc.close())`
+ * Only applies in promise_tests if there is no add_cleanup in the
+ * test function body.
+ */
+export default function transformer(file, api) {
+ const j = api.jscodeshift;
+ return j(file.source)
+ // find each RTCPeerConnection constructor
+ .find(j.NewExpression, {callee: {type: 'Identifier', name: 'RTCPeerConnection'}})
+
+ // check it is inside a promise_test
+ .filter(path => {
+ // iterate parentPath until you find a CallExpression
+ let nextPath = path.parentPath;
+ while (nextPath && nextPath.value.type !== 'CallExpression') {
+ nextPath = nextPath.parentPath;
+ }
+ return nextPath && nextPath.value.callee.name === 'promise_test';
+ })
+ // check there is no add_cleanup in the function body
+ .filter(path => {
+ let nextPath = path.parentPath;
+ while (nextPath && nextPath.value.type !== 'CallExpression') {
+ nextPath = nextPath.parentPath;
+ }
+ const body = nextPath.value.arguments[0].body;
+ return j(body).find(j.Identifier, {name: 'add_cleanup'}).length === 0;
+ })
+ .forEach(path => {
+ // iterate parentPath until you find a CallExpression
+ let nextPath = path.parentPath;
+ while (nextPath && nextPath.value.type !== 'CallExpression') {
+ nextPath = nextPath.parentPath;
+ }
+ const declaration = path.parentPath.parentPath.parentPath;
+ const pc = path.parentPath.value.id;
+
+ declaration.insertAfter(
+ j.expressionStatement(
+ j.callExpression(
+ j.memberExpression(
+ nextPath.node.arguments[0].params[0],
+ j.identifier('add_cleanup')
+ ),
+ [j.arrowFunctionExpression([],
+ j.callExpression(
+ j.memberExpression(pc, j.identifier('close'), false),
+ []
+ )
+ )]
+ )
+ )
+ );
+ })
+ .toSource();
+};
diff --git a/tests/wpt/web-platform-tests/webrtc/tools/html-codemod.js b/tests/wpt/web-platform-tests/webrtc/tools/html-codemod.js
new file mode 100644
index 00000000000..6a31e8c4c60
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webrtc/tools/html-codemod.js
@@ -0,0 +1,34 @@
+/*
+ * extract script content from a series of html files, run a
+ * jscodeshift codemod on them and overwrite the original file.
+ *
+ * Usage: node html-codemod.js codemod-file list of files to process
+ */
+const { JSDOM } = require('jsdom');
+const fs = require('fs');
+const {execFileSync} = require('child_process');
+
+const codemod = process.argv[2];
+const filenames = process.argv.slice(3);
+filenames.forEach((filename) => {
+ const originalContent = fs.readFileSync(filename, 'utf-8');
+ const dom = new JSDOM(originalContent);
+ const document = dom.window.document;
+ const scriptTags = document.querySelectorAll('script');
+ const lastTag = scriptTags[scriptTags.length - 1];
+ const script = lastTag.innerHTML;
+ if (!script) {
+ console.log('NO SCRIPT FOUND', filename);
+ return;
+ }
+ const scriptFilename = filename + '.codemod.js';
+ const scriptFile = fs.writeFileSync(scriptFilename, script);
+ // exec jscodeshift
+ const output = execFileSync('./node_modules/.bin/jscodeshift', ['-t', codemod, scriptFilename]);
+ console.log(filename, output.toString()); // output jscodeshift output.
+ // read back file, resubstitute
+ const newScript = fs.readFileSync(scriptFilename, 'utf-8').toString();
+ const modifiedContent = originalContent.split(script).join(newScript);
+ fs.writeFileSync(filename, modifiedContent);
+ fs.unlinkSync(scriptFilename);
+});
diff --git a/tests/wpt/web-platform-tests/webrtc/tools/package-lock.json b/tests/wpt/web-platform-tests/webrtc/tools/package-lock.json
deleted file mode 100644
index 79e603949cf..00000000000
--- a/tests/wpt/web-platform-tests/webrtc/tools/package-lock.json
+++ /dev/null
@@ -1,1213 +0,0 @@
-{
- "name": "webrtc-testing-tools",
- "version": "1.0.0",
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
- "acorn": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz",
- "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==",
- "dev": true
- },
- "acorn-jsx": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
- "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
- "dev": true,
- "requires": {
- "acorn": "3.3.0"
- },
- "dependencies": {
- "acorn": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
- "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
- "dev": true
- }
- }
- },
- "ajv": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.3.0.tgz",
- "integrity": "sha1-RBT/dKUIecII7l/cgm4ywwNUnto=",
- "dev": true,
- "requires": {
- "co": "4.6.0",
- "fast-deep-equal": "1.0.0",
- "fast-json-stable-stringify": "2.0.0",
- "json-schema-traverse": "0.3.1"
- }
- },
- "ajv-keywords": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
- "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=",
- "dev": true
- },
- "ansi-escapes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz",
- "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==",
- "dev": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "argparse": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
- "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
- "dev": true,
- "requires": {
- "sprintf-js": "1.0.3"
- }
- },
- "array-union": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
- "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
- "dev": true,
- "requires": {
- "array-uniq": "1.0.3"
- }
- },
- "array-uniq": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
- "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
- "dev": true
- },
- "arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
- "dev": true
- },
- "babel-code-frame": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
- "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
- "dev": true,
- "requires": {
- "chalk": "1.1.3",
- "esutils": "2.0.2",
- "js-tokens": "3.0.2"
- },
- "dependencies": {
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "2.2.1",
- "escape-string-regexp": "1.0.5",
- "has-ansi": "2.0.0",
- "strip-ansi": "3.0.1",
- "supports-color": "2.0.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
- "requires": {
- "ansi-regex": "2.1.1"
- }
- }
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
- "dev": true
- },
- "brace-expansion": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
- "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
- "dev": true,
- "requires": {
- "balanced-match": "1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "caller-path": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
- "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
- "dev": true,
- "requires": {
- "callsites": "0.2.0"
- }
- },
- "callsites": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
- "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
- "dev": true
- },
- "chalk": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
- "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "3.2.0",
- "escape-string-regexp": "1.0.5",
- "supports-color": "4.5.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
- "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
- "dev": true,
- "requires": {
- "color-convert": "1.9.1"
- }
- },
- "supports-color": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
- "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
- "dev": true,
- "requires": {
- "has-flag": "2.0.0"
- }
- }
- }
- },
- "chardet": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.0.tgz",
- "integrity": "sha1-C74TVaxE16PtSpJXB8TvcPgZD2w=",
- "dev": true
- },
- "circular-json": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
- "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
- "dev": true
- },
- "cli-cursor": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
- "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
- "dev": true,
- "requires": {
- "restore-cursor": "2.0.0"
- }
- },
- "cli-width": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
- "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
- "dev": true
- },
- "co": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
- "dev": true
- },
- "color-convert": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
- "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true
- },
- "concat-stream": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
- "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
- "dev": true,
- "requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.3",
- "typedarray": "0.0.6"
- }
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
- "dev": true
- },
- "cross-spawn": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
- "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
- "dev": true,
- "requires": {
- "lru-cache": "4.1.1",
- "shebang-command": "1.2.0",
- "which": "1.3.0"
- }
- },
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "deep-is": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
- "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
- "dev": true
- },
- "del": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
- "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
- "dev": true,
- "requires": {
- "globby": "5.0.0",
- "is-path-cwd": "1.0.0",
- "is-path-in-cwd": "1.0.0",
- "object-assign": "4.1.1",
- "pify": "2.3.0",
- "pinkie-promise": "2.0.1",
- "rimraf": "2.6.2"
- }
- },
- "doctrine": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz",
- "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=",
- "dev": true,
- "requires": {
- "esutils": "2.0.2",
- "isarray": "1.0.0"
- }
- },
- "dom-serializer": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
- "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
- "dev": true,
- "requires": {
- "domelementtype": "1.1.3",
- "entities": "1.1.1"
- },
- "dependencies": {
- "domelementtype": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
- "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
- "dev": true
- }
- }
- },
- "domelementtype": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
- "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=",
- "dev": true
- },
- "domhandler": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz",
- "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=",
- "dev": true,
- "requires": {
- "domelementtype": "1.3.0"
- }
- },
- "domutils": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.6.2.tgz",
- "integrity": "sha1-GVjMC0yUJuntNn+xyOhUiRsPo/8=",
- "dev": true,
- "requires": {
- "dom-serializer": "0.1.0",
- "domelementtype": "1.3.0"
- }
- },
- "entities": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
- "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=",
- "dev": true
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "dev": true
- },
- "eslint": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.11.0.tgz",
- "integrity": "sha512-UWbhQpaKlm8h5x/VLwm0S1kheMrDj8jPwhnBMjr/Dlo3qqT7MvcN/UfKAR3E1N4lr4YNtOvS4m3hwsrVc/ky7g==",
- "dev": true,
- "requires": {
- "ajv": "5.3.0",
- "babel-code-frame": "6.26.0",
- "chalk": "2.3.0",
- "concat-stream": "1.6.0",
- "cross-spawn": "5.1.0",
- "debug": "3.1.0",
- "doctrine": "2.0.0",
- "eslint-scope": "3.7.1",
- "espree": "3.5.2",
- "esquery": "1.0.0",
- "estraverse": "4.2.0",
- "esutils": "2.0.2",
- "file-entry-cache": "2.0.0",
- "functional-red-black-tree": "1.0.1",
- "glob": "7.1.2",
- "globals": "9.18.0",
- "ignore": "3.3.7",
- "imurmurhash": "0.1.4",
- "inquirer": "3.3.0",
- "is-resolvable": "1.0.0",
- "js-yaml": "3.10.0",
- "json-stable-stringify-without-jsonify": "1.0.1",
- "levn": "0.3.0",
- "lodash": "4.17.4",
- "minimatch": "3.0.4",
- "mkdirp": "0.5.1",
- "natural-compare": "1.4.0",
- "optionator": "0.8.2",
- "path-is-inside": "1.0.2",
- "pluralize": "7.0.0",
- "progress": "2.0.0",
- "require-uncached": "1.0.3",
- "semver": "5.4.1",
- "strip-ansi": "4.0.0",
- "strip-json-comments": "2.0.1",
- "table": "4.0.2",
- "text-table": "0.2.0"
- }
- },
- "eslint-plugin-html": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-4.0.0.tgz",
- "integrity": "sha512-xK/909qOTq5JVzuO2jo4a24nQcWhkOBz9dOIkORvB7RxC75a4b6B9wFpBXAl8WDhwJGFDj5gBDRN+/L3kK/ghw==",
- "dev": true,
- "requires": {
- "htmlparser2": "3.9.2"
- }
- },
- "eslint-scope": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
- "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
- "dev": true,
- "requires": {
- "esrecurse": "4.2.0",
- "estraverse": "4.2.0"
- }
- },
- "espree": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz",
- "integrity": "sha512-sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ==",
- "dev": true,
- "requires": {
- "acorn": "5.2.1",
- "acorn-jsx": "3.0.1"
- }
- },
- "esprima": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
- "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==",
- "dev": true
- },
- "esquery": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz",
- "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=",
- "dev": true,
- "requires": {
- "estraverse": "4.2.0"
- }
- },
- "esrecurse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz",
- "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=",
- "dev": true,
- "requires": {
- "estraverse": "4.2.0",
- "object-assign": "4.1.1"
- }
- },
- "estraverse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
- "dev": true
- },
- "esutils": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
- "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
- "dev": true
- },
- "external-editor": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz",
- "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==",
- "dev": true,
- "requires": {
- "chardet": "0.4.0",
- "iconv-lite": "0.4.19",
- "tmp": "0.0.33"
- }
- },
- "fast-deep-equal": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz",
- "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=",
- "dev": true
- },
- "fast-json-stable-stringify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
- "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
- "dev": true
- },
- "fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
- "dev": true
- },
- "figures": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
- "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
- "dev": true,
- "requires": {
- "escape-string-regexp": "1.0.5"
- }
- },
- "file-entry-cache": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
- "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
- "dev": true,
- "requires": {
- "flat-cache": "1.3.0",
- "object-assign": "4.1.1"
- }
- },
- "flat-cache": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
- "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
- "dev": true,
- "requires": {
- "circular-json": "0.3.3",
- "del": "2.2.2",
- "graceful-fs": "4.1.11",
- "write": "0.2.1"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
- },
- "functional-red-black-tree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
- "dev": true
- },
- "glob": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
- "dev": true,
- "requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
- }
- },
- "globals": {
- "version": "9.18.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
- "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
- "dev": true
- },
- "globby": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
- "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
- "dev": true,
- "requires": {
- "array-union": "1.0.2",
- "arrify": "1.0.1",
- "glob": "7.1.2",
- "object-assign": "4.1.1",
- "pify": "2.3.0",
- "pinkie-promise": "2.0.1"
- }
- },
- "graceful-fs": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
- "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
- "dev": true
- },
- "has-ansi": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
- "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
- "dev": true,
- "requires": {
- "ansi-regex": "2.1.1"
- }
- },
- "has-flag": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
- "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
- "dev": true
- },
- "htmlparser2": {
- "version": "3.9.2",
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz",
- "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=",
- "dev": true,
- "requires": {
- "domelementtype": "1.3.0",
- "domhandler": "2.4.1",
- "domutils": "1.6.2",
- "entities": "1.1.1",
- "inherits": "2.0.3",
- "readable-stream": "2.3.3"
- }
- },
- "iconv-lite": {
- "version": "0.4.19",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
- "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==",
- "dev": true
- },
- "ignore": {
- "version": "3.3.7",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz",
- "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==",
- "dev": true
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
- "requires": {
- "once": "1.4.0",
- "wrappy": "1.0.2"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
- "dev": true
- },
- "inquirer": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
- "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
- "dev": true,
- "requires": {
- "ansi-escapes": "3.0.0",
- "chalk": "2.3.0",
- "cli-cursor": "2.1.0",
- "cli-width": "2.2.0",
- "external-editor": "2.1.0",
- "figures": "2.0.0",
- "lodash": "4.17.4",
- "mute-stream": "0.0.7",
- "run-async": "2.3.0",
- "rx-lite": "4.0.8",
- "rx-lite-aggregates": "4.0.8",
- "string-width": "2.1.1",
- "strip-ansi": "4.0.0",
- "through": "2.3.8"
- }
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "is-path-cwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
- "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
- "dev": true
- },
- "is-path-in-cwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz",
- "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=",
- "dev": true,
- "requires": {
- "is-path-inside": "1.0.0"
- }
- },
- "is-path-inside": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz",
- "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=",
- "dev": true,
- "requires": {
- "path-is-inside": "1.0.2"
- }
- },
- "is-promise": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
- "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
- "dev": true
- },
- "is-resolvable": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz",
- "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=",
- "dev": true,
- "requires": {
- "tryit": "1.0.3"
- }
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
- },
- "js-tokens": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
- "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
- "dev": true
- },
- "js-yaml": {
- "version": "3.10.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz",
- "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==",
- "dev": true,
- "requires": {
- "argparse": "1.0.9",
- "esprima": "4.0.0"
- }
- },
- "json-schema-traverse": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
- "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
- "dev": true
- },
- "json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
- "dev": true
- },
- "levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
- "dev": true,
- "requires": {
- "prelude-ls": "1.1.2",
- "type-check": "0.3.2"
- }
- },
- "lodash": {
- "version": "4.17.4",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
- "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
- "dev": true
- },
- "lru-cache": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
- "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==",
- "dev": true,
- "requires": {
- "pseudomap": "1.0.2",
- "yallist": "2.1.2"
- }
- },
- "mimic-fn": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz",
- "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=",
- "dev": true
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "1.1.8"
- }
- },
- "minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
- "dev": true
- },
- "mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
- "dev": true,
- "requires": {
- "minimist": "0.0.8"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
- "mute-stream": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
- "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
- "dev": true
- },
- "natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
- "dev": true
- },
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dev": true,
- "requires": {
- "wrappy": "1.0.2"
- }
- },
- "onetime": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
- "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
- "dev": true,
- "requires": {
- "mimic-fn": "1.1.0"
- }
- },
- "optionator": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
- "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
- "dev": true,
- "requires": {
- "deep-is": "0.1.3",
- "fast-levenshtein": "2.0.6",
- "levn": "0.3.0",
- "prelude-ls": "1.1.2",
- "type-check": "0.3.2",
- "wordwrap": "1.0.0"
- }
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
- "dev": true
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "dev": true
- },
- "path-is-inside": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
- "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
- "dev": true
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- },
- "pinkie": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
- "dev": true
- },
- "pinkie-promise": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
- "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
- "dev": true,
- "requires": {
- "pinkie": "2.0.4"
- }
- },
- "pluralize": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
- "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
- "dev": true
- },
- "prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
- "dev": true
- },
- "process-nextick-args": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
- "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
- "dev": true
- },
- "progress": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
- "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=",
- "dev": true
- },
- "pseudomap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
- "dev": true
- },
- "readable-stream": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
- "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
- "dev": true,
- "requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "1.0.7",
- "safe-buffer": "5.1.1",
- "string_decoder": "1.0.3",
- "util-deprecate": "1.0.2"
- }
- },
- "require-uncached": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
- "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
- "dev": true,
- "requires": {
- "caller-path": "0.1.0",
- "resolve-from": "1.0.1"
- }
- },
- "resolve-from": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
- "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
- "dev": true
- },
- "restore-cursor": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
- "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
- "dev": true,
- "requires": {
- "onetime": "2.0.1",
- "signal-exit": "3.0.2"
- }
- },
- "rimraf": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
- "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
- "dev": true,
- "requires": {
- "glob": "7.1.2"
- }
- },
- "run-async": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
- "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
- "dev": true,
- "requires": {
- "is-promise": "2.1.0"
- }
- },
- "rx-lite": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
- "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
- "dev": true
- },
- "rx-lite-aggregates": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
- "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
- "dev": true,
- "requires": {
- "rx-lite": "4.0.8"
- }
- },
- "safe-buffer": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
- "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
- "dev": true
- },
- "semver": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
- "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
- "dev": true
- },
- "shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "dev": true,
- "requires": {
- "shebang-regex": "1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
- "dev": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
- "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
- "dev": true
- },
- "slice-ansi": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
- "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "2.0.0"
- }
- },
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
- "dev": true
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "2.0.0",
- "strip-ansi": "4.0.0"
- }
- },
- "string_decoder": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
- "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "5.1.1"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "3.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- }
- }
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
- "dev": true
- },
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
- },
- "table": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
- "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
- "dev": true,
- "requires": {
- "ajv": "5.3.0",
- "ajv-keywords": "2.1.1",
- "chalk": "2.3.0",
- "lodash": "4.17.4",
- "slice-ansi": "1.0.0",
- "string-width": "2.1.1"
- }
- },
- "text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
- "dev": true
- },
- "through": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
- "dev": true
- },
- "tmp": {
- "version": "0.0.33",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
- "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
- "dev": true,
- "requires": {
- "os-tmpdir": "1.0.2"
- }
- },
- "tryit": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz",
- "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=",
- "dev": true
- },
- "type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
- "dev": true,
- "requires": {
- "prelude-ls": "1.1.2"
- }
- },
- "typedarray": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
- "dev": true
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
- "dev": true
- },
- "which": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
- "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
- "dev": true,
- "requires": {
- "isexe": "2.0.0"
- }
- },
- "wordwrap": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
- "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
- "dev": true
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
- },
- "write": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
- "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
- "dev": true,
- "requires": {
- "mkdirp": "0.5.1"
- }
- },
- "yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
- "dev": true
- }
- }
-}
diff --git a/tests/wpt/web-platform-tests/webrtc/tools/package.json b/tests/wpt/web-platform-tests/webrtc/tools/package.json
index 70515d8b715..e0c1cfda3e8 100644
--- a/tests/wpt/web-platform-tests/webrtc/tools/package.json
+++ b/tests/wpt/web-platform-tests/webrtc/tools/package.json
@@ -7,7 +7,9 @@
},
"devDependencies": {
"eslint": "^4.11.0",
- "eslint-plugin-html": "^4.0.0"
+ "eslint-plugin-html": "^4.0.0",
+ "jscodeshift": "^0.5.1",
+ "jsdom": "^11.11.0"
},
"license": "BSD",
"private": true
diff --git a/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-import-referrer.html b/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-import-referrer.html
index bed66d81ff6..e84b0ad39fe 100644
--- a/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-import-referrer.html
+++ b/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-import-referrer.html
@@ -36,7 +36,7 @@ function removeParams(url_string) {
// scriptURL: 'resources/referrer-checker.sub.js',
// windowReferrerPolicy: 'no-referrer',
// workerReferrerPolicy: 'same-origin',
-// expectedReferrer: 'https://example.com/referrer-checker.py'
+// moduleGraphLevel: 'top-level' (or 'descendant')
// };
//
// - |scriptURL| is used for starting a new worker.
@@ -45,8 +45,7 @@ function removeParams(url_string) {
// loading and static imports.
// - |workerReferrerPolicy| is set to the ReferrerPolicy HTTP header of the
// worker. This policy should be applied to dynamic imports.
-// - |expectedReferrer| is compared with the actual referrer. URL parameters are
-// ignored.
+// - |moduleGraphLevel| indicates a script whose referrer will be tested.
function import_referrer_test(settings, description) {
promise_test(async () => {
let windowURL = 'resources/new-worker-window.html';
@@ -69,141 +68,144 @@ function import_referrer_test(settings, description) {
win.postMessage(scriptURL, '*');
const msgEvent = await new Promise(resolve => window.onmessage = resolve);
- // Delete query parameters from the referrers to make it easy to match the
- // actual referrer with the expected referrer.
- const expectedReferrer = removeParams(settings.expectedReferrer);
+ let expectedReferrer;
+ if (settings.moduleGraphLevel == 'top-level')
+ expectedReferrer = createURLString('resources/new-worker-window.html');
+ else
+ expectedReferrer = createURLString('resources/' + settings.scriptURL);
+
+ // Delete query parameters from the actual referrer to make it easy to match
+ // it with the expected referrer.
const actualReferrer = removeParams(msgEvent.data);
+
assert_equals(actualReferrer, expectedReferrer);
}, description);
}
// Tests for top-level worker module script loading.
//
-// Top-level worker module script loading should obey the window's
-// ReferrerPolicy, and send the window's URL as a referrer.
+// Top-level worker module script loading should obey the default referrer
+// policy (not the window's referrer policy), and send the window's URL as a
+// referrer.
//
// [Current document]
// --(open)--> [Window] whose referrer policy is |windowReferrerPolicy|.
// --(new Worker)--> [Worker] should be loaded with [Window]'s URL as a
-// referrer if it's allowed by |windowReferrerPolicy|.
+// referrer regardless of |windowReferrerPolicy|.
import_referrer_test(
{ scriptURL: 'referrer-checker.py',
windowReferrerPolicy: 'no-referrer',
- expectedReferrer: '' },
+ moduleGraphLevel: 'top-level' },
'Same-origin top-level module script loading with "no-referrer" referrer ' +
'policy');
import_referrer_test(
{ scriptURL: 'referrer-checker.py',
windowReferrerPolicy: 'origin',
- expectedReferrer: window.location.origin + '/' },
+ moduleGraphLevel: 'top-level' },
'Same-origin top-level module script loading with "origin" referrer ' +
'policy');
import_referrer_test(
{ scriptURL: 'referrer-checker.py',
windowReferrerPolicy: 'same-origin',
- expectedReferrer: createURLString('resources/new-worker-window.html') },
+ moduleGraphLevel: 'top-level' },
'Same-origin top-level module script loading with "same-origin" referrer ' +
'policy');
// Tests for static imports.
//
-// Static imports should obey the window's ReferrerPolicy, and send the worker's
+// Static imports should obey the default referrer policy, and send the worker's
// URL as a referrer.
//
// [Current document]
// --(open)--> [Window] whose referrer policy is |windowReferrerPolicy|.
// --(new Worker)--> [Worker]
// --(static import)--> [Script] should be loaded with [Worker]'s URL as a
-// referrer if it's allowed by |windowReferrerPolicy|.
+// referrer regardless of |windowReferrerPolicy|.
import_referrer_test(
{ scriptURL: 'static-import-same-origin-referrer-checker-worker.js',
windowReferrerPolicy: 'no-referrer',
- expectedReferrer: '' },
+ moduleGraphLevel: 'descendant' },
'Same-origin static import with "no-referrer" referrer policy.');
import_referrer_test(
{ scriptURL: 'static-import-same-origin-referrer-checker-worker.js',
windowReferrerPolicy: 'origin',
- expectedReferrer: window.location.origin + '/' },
+ moduleGraphLevel: 'descendant' },
'Same-origin static import with "origin" referrer policy.');
import_referrer_test(
{ scriptURL: 'static-import-same-origin-referrer-checker-worker.js',
windowReferrerPolicy: 'same-origin',
- expectedReferrer: createURLString(
- 'resources/static-import-same-origin-referrer-checker-worker.js') },
+ moduleGraphLevel: 'descendant' },
'Same-origin static import with "same-origin" referrer policy.');
import_referrer_test(
{ scriptURL: 'static-import-remote-origin-referrer-checker-worker.sub.js',
windowReferrerPolicy: 'no-referrer',
- expectedReferrer: '' },
+ moduleGraphLevel: 'descendant' },
'Cross-origin static import with "no-referrer" referrer policy.');
import_referrer_test(
{ scriptURL: 'static-import-remote-origin-referrer-checker-worker.sub.js',
windowReferrerPolicy: 'origin',
- expectedReferrer: window.location.origin + '/' },
+ moduleGraphLevel: 'descendant' },
'Cross-origin static import with "origin" referrer policy.');
import_referrer_test(
{ scriptURL: 'static-import-remote-origin-referrer-checker-worker.sub.js',
windowReferrerPolicy: 'same-origin',
- expectedReferrer: '' },
+ moduleGraphLevel: 'descendant' },
'Cross-origin static import with "same-origin" referrer policy.');
// Tests for dynamic imports.
//
-// Dynamic imports should obey the worker's ReferrerPolicy, and send the
-// worker's URL as a referrer. Note that the worker doesn't inherit the window's
-// referrer policy and it's set by the ReferrerPolicy HTTP header on the
-// response of the top-level worker module script.
+// Dynamic imports should obey the default referrer policy (not the worker's
+// referrer policy), and send the worker's URL as a referrer.
//
// [Current document]
// --(open)--> [Window]
// --(new Worker)--> [Worker] whose referrer policy is |workerReferrerPolicy|.
// --(dynamic import)--> [Script] should be loaded with [Worker]'s URL as a
-// referrer if it's allowed by |workerReferrerPolicy|.
+// referrer regardless of |workerReferrerPolicy|.
import_referrer_test(
{ scriptURL: 'dynamic-import-same-origin-referrer-checker-worker.js',
workerReferrerPolicy: 'no-referrer',
- expectedReferrer: '' },
+ moduleGraphLevel: 'descendant' },
'Same-origin dynamic import with "no-referrer" referrer policy.');
import_referrer_test(
{ scriptURL: 'dynamic-import-same-origin-referrer-checker-worker.js',
workerReferrerPolicy: 'origin',
- expectedReferrer: window.location.origin + '/' },
+ moduleGraphLevel: 'descendant' },
'Same-origin dynamic import with "origin" referrer policy.');
import_referrer_test(
{ scriptURL: 'dynamic-import-same-origin-referrer-checker-worker.js',
workerReferrerPolicy: 'same-origin',
- expectedReferrer: createURLString(
- 'resources/dynamic-import-same-origin-referrer-checker-worker.js') },
+ moduleGraphLevel: 'descendant' },
'Same-origin dynamic import with "same-origin" referrer policy.');
import_referrer_test(
{ scriptURL: 'dynamic-import-remote-origin-referrer-checker-worker.sub.js',
workerReferrerPolicy: 'no-referrer',
- expectedReferrer: '' },
+ moduleGraphLevel: 'descendant' },
'Cross-origin dynamic import with "no-referrer" referrer policy.');
import_referrer_test(
{ scriptURL: 'dynamic-import-remote-origin-referrer-checker-worker.sub.js',
workerReferrerPolicy: 'origin',
- expectedReferrer: window.location.origin + '/' },
+ moduleGraphLevel: 'descendant' },
'Cross-origin dynamic import with "origin" referrer policy.');
import_referrer_test(
{ scriptURL: 'dynamic-import-remote-origin-referrer-checker-worker.sub.js',
workerReferrerPolicy: 'same-origin',
- expectedReferrer: '' },
+ moduleGraphLevel: 'descendant' },
'Cross-origin dynamic import with "same-origin" referrer policy.');
</script>
diff --git a/tests/wpt/web-platform-tests/worklets/resources/referrer-checker.py b/tests/wpt/web-platform-tests/worklets/resources/referrer-checker.py
index 184d547f493..3d9afb4ab89 100644
--- a/tests/wpt/web-platform-tests/worklets/resources/referrer-checker.py
+++ b/tests/wpt/web-platform-tests/worklets/resources/referrer-checker.py
@@ -2,25 +2,14 @@
# |expected_referrer|.
def main(request, response):
referrer = request.headers.get("referer", "")
- referrer_policy = request.GET.first("referrer_policy")
expected_referrer = request.GET.first("expected_referrer", "")
response_headers = [("Content-Type", "text/javascript"),
("Access-Control-Allow-Origin", "*")]
- if referrer_policy == "no-referrer" or referrer_policy == "origin":
- if referrer == expected_referrer:
- return (200, response_headers, "")
- return (404, response_headers)
-
- if referrer_policy == "same-origin":
- if referrer == expected_referrer:
- return (200, response_headers, "")
- # The expected referrer doesn't contain query params for simplification,
- # so we check the referrer by startswith() here.
- if (expected_referrer != "" and
- referrer.startswith(expected_referrer + "?")):
- return (200, response_headers, "")
- return (404, response_headers)
-
+ # The expected referrer doesn't contain query params for simplification, so
+ # we check the referrer by startswith() here.
+ if (expected_referrer != "" and
+ referrer.startswith(expected_referrer + "?")):
+ return (200, response_headers, "")
return (404, response_headers)
diff --git a/tests/wpt/web-platform-tests/worklets/resources/referrer-tests.js b/tests/wpt/web-platform-tests/worklets/resources/referrer-tests.js
index 01b8e2ab57a..e46f93dbc3f 100644
--- a/tests/wpt/web-platform-tests/worklets/resources/referrer-tests.js
+++ b/tests/wpt/web-platform-tests/worklets/resources/referrer-tests.js
@@ -29,7 +29,9 @@ function runReferrerTest(settings) {
}).then(msg_event => assert_equals(msg_event.data, 'RESOLVED'));
}
-// Runs a series of tests related to the referrer policy on a worklet.
+// Runs a series of tests related to the referrer policy on a worklet. Referrer
+// on worklet module loading should always be handled with the default referrer
+// policy.
//
// Usage:
// runReferrerTests("paint");
@@ -44,7 +46,7 @@ function runReferrerTests(workletType) {
referrerPolicy: 'no-referrer',
scriptOrigins: { topLevel: 'same' } });
}, 'Importing a same-origin script from a page that has "no-referrer" ' +
- 'referrer policy should not send referrer.');
+ 'referrer policy.');
promise_test(() => {
return runReferrerTest({ workletType: workletType,
@@ -52,7 +54,7 @@ function runReferrerTests(workletType) {
referrerPolicy: 'no-referrer',
scriptOrigins: { topLevel: 'remote' } });
}, 'Importing a remote-origin script from a page that has "no-referrer" ' +
- 'referrer policy should not send referrer.');
+ 'referrer policy.');
promise_test(() => {
return runReferrerTest({ workletType: workletType,
@@ -60,7 +62,7 @@ function runReferrerTests(workletType) {
referrerPolicy: 'origin',
scriptOrigins: { topLevel: 'same' } });
}, 'Importing a same-origin script from a page that has "origin" ' +
- 'referrer policy should send only an origin as referrer.');
+ 'referrer policy.');
promise_test(() => {
return runReferrerTest({ workletType: workletType,
@@ -68,7 +70,7 @@ function runReferrerTests(workletType) {
referrerPolicy: 'origin',
scriptOrigins: { topLevel: 'remote' } });
}, 'Importing a remote-origin script from a page that has "origin" ' +
- 'referrer policy should send only an origin as referrer.');
+ 'referrer policy.');
promise_test(() => {
return runReferrerTest({ workletType: workletType,
@@ -76,7 +78,7 @@ function runReferrerTests(workletType) {
referrerPolicy: 'same-origin',
scriptOrigins: { topLevel: 'same' } });
}, 'Importing a same-origin script from a page that has "same-origin" ' +
- 'referrer policy should send referrer.');
+ 'referrer policy.');
promise_test(() => {
return runReferrerTest({ workletType: workletType,
@@ -84,7 +86,7 @@ function runReferrerTests(workletType) {
referrerPolicy: 'same-origin',
scriptOrigins: { topLevel: 'remote' } });
}, 'Importing a remote-origin script from a page that has "same-origin" ' +
- 'referrer policy should not send referrer.');
+ 'referrer policy.');
// Tests for descendant script fetch -----------------------------------------
@@ -95,7 +97,7 @@ function runReferrerTests(workletType) {
scriptOrigins: { topLevel: 'same',
descendant: 'same' } });
}, 'Importing a same-origin script from a same-origin worklet script that ' +
- 'has "no-referrer" referrer policy should not send referrer.');
+ 'has "no-referrer" referrer policy.');
promise_test(() => {
return runReferrerTest({ workletType: workletType,
@@ -104,7 +106,7 @@ function runReferrerTests(workletType) {
scriptOrigins: { topLevel: 'same',
descendant: 'remote' } });
}, 'Importing a remote-origin script from a same-origin worklet script ' +
- 'that has "no-referrer" referrer policy should not send referrer.');
+ 'that has "no-referrer" referrer policy.');
promise_test(() => {
return runReferrerTest({ workletType: workletType,
@@ -113,7 +115,7 @@ function runReferrerTests(workletType) {
scriptOrigins: { topLevel: 'remote',
descendant: 'remote' } });
}, 'Importing a remote-origin script from a remote-origin worklet script ' +
- 'that has "no-referrer" referrer policy should not send referrer.');
+ 'that has "no-referrer" referrer policy.');
promise_test(() => {
return runReferrerTest({ workletType: workletType,
@@ -122,7 +124,7 @@ function runReferrerTests(workletType) {
scriptOrigins: { topLevel: 'same',
descendant: 'same' } });
}, 'Importing a same-origin script from a same-origin worklet script that ' +
- 'has "origin" referrer policy should send referrer.');
+ 'has "origin" referrer policy.');
promise_test(() => {
return runReferrerTest({ workletType: workletType,
@@ -131,7 +133,7 @@ function runReferrerTests(workletType) {
scriptOrigins: { topLevel: 'same',
descendant: 'remote' } });
}, 'Importing a remote-origin script from a same-origin worklet script ' +
- 'that has "origin" referrer policy should send referrer.');
+ 'that has "origin" referrer policy.');
promise_test(() => {
return runReferrerTest({ workletType: workletType,
@@ -140,7 +142,7 @@ function runReferrerTests(workletType) {
scriptOrigins: { topLevel: 'remote',
descendant: 'remote' } });
}, 'Importing a remote-origin script from a remote-origin worklet script ' +
- 'that has "origin" referrer policy should send referrer.');
+ 'that has "origin" referrer policy.');
promise_test(() => {
return runReferrerTest({ workletType: workletType,
@@ -149,7 +151,7 @@ function runReferrerTests(workletType) {
scriptOrigins: { topLevel: 'same',
descendant: 'same' } });
}, 'Importing a same-origin script from a same-origin worklet script that ' +
- 'has "same-origin" referrer policy should send referrer.');
+ 'has "same-origin" referrer policy.');
promise_test(() => {
return runReferrerTest({ workletType: workletType,
@@ -158,7 +160,7 @@ function runReferrerTests(workletType) {
scriptOrigins: { topLevel: 'same',
descendant: 'remote' } });
}, 'Importing a remote-origin script from a same-origin worklet script ' +
- 'that has "same-origin" referrer policy should not send referrer.');
+ 'that has "same-origin" referrer policy.');
promise_test(() => {
return runReferrerTest({ workletType: workletType,
@@ -167,5 +169,5 @@ function runReferrerTests(workletType) {
scriptOrigins: { topLevel: 'remote',
descendant: 'remote' } });
}, 'Importing a remote-origin script from a remote-origin worklet script ' +
- 'that has "same-origin" referrer policy should not send referrer.');
+ 'that has "same-origin" referrer policy.');
}
diff --git a/tests/wpt/web-platform-tests/worklets/resources/referrer-window.html b/tests/wpt/web-platform-tests/worklets/resources/referrer-window.html
index 4817f0452a2..331db07935a 100644
--- a/tests/wpt/web-platform-tests/worklets/resources/referrer-window.html
+++ b/tests/wpt/web-platform-tests/worklets/resources/referrer-window.html
@@ -48,47 +48,30 @@ function isDestinationCrossOrigin(fetchType, scriptOrigins) {
assert_unreached('fetchType has an invalid value.');
}
-function createExpectedReferrer(
- importerURL, fetchType, referrerPolicy, scriptOrigins) {
- if (referrerPolicy === 'no-referrer')
- return "";
- if (referrerPolicy === 'same-origin') {
- if (isDestinationCrossOrigin(fetchType, scriptOrigins))
- return "";
- // Delete query params to make it easier to match with an actual referrer in
- // the referrer-checker.py.
- const expectedReferrer = new URL(importerURL);
- for (var key of expectedReferrer.searchParams.keys())
- expectedReferrer.searchParams.delete(key);
- return expectedReferrer;
- }
- if (referrerPolicy === 'origin')
- return (new URL(importerURL)).origin + '/';
- assert_unreached('referrerPolicy has an invalid value.');
-}
-
window.onmessage = e => {
const workletType = e.data.workletType;
const fetchType = e.data.fetchType;
- const referrerPolicy = e.data.referrerPolicy;
const scriptOrigins = e.data.scriptOrigins;
let scriptURL;
let expectedReferrer;
if (fetchType === 'top-level') {
scriptURL = createScriptURLForTopLevel(scriptOrigins.topLevel);
- expectedReferrer = createExpectedReferrer(
- location.href, fetchType, referrerPolicy, scriptOrigins);
+ // The referrer of the top-level script should be this file.
+ // Delete query params to make it easier to match with an actual referrer in
+ // the referrer-checker.py.
+ expectedReferrer = new URL(location.href);
+ for (var key of expectedReferrer.searchParams.keys())
+ expectedReferrer.searchParams.delete(key);
} else if (fetchType === 'descendant') {
scriptURL = createScriptURLForDecendant(scriptOrigins);
- expectedReferrer = createExpectedReferrer(
- scriptURL, fetchType, referrerPolicy, scriptOrigins);
+ // The referrer of the imported script should be the importer script.
+ expectedReferrer = scriptURL;
} else {
assert_unreached('fetchType should be \'top-level\' or \'descendant\'');
}
const params = new URLSearchParams;
- params.append('referrer_policy', referrerPolicy);
params.append('expected_referrer', expectedReferrer);
get_worklet(workletType).addModule(scriptURL + '?' + params)