diff --git a/JSTests/wasm/stress/try-and-block-with-v128-results.js b/JSTests/wasm/stress/try-and-block-with-v128-results.js index 405554cb7e9a5..50a70a89863ec 100644 --- a/JSTests/wasm/stress/try-and-block-with-v128-results.js +++ b/JSTests/wasm/stress/try-and-block-with-v128-results.js @@ -5,8 +5,10 @@ if (globalThis.callerIsBBQOrOMGCompiled) { let bytes = read(filename, 'binary'); return WebAssembly.instantiate(bytes, importObject, 'x'); } - const log = debug; - const report = $.agent.report; + const verbose = false; + const nullLog = function () { } + const log = verbose ? debug : nullLog; + const report = verbose ? $.agent.report : nullLog; const isJIT = callerIsBBQOrOMGCompiled; tools = {log, report, isJIT, instantiate: instantiateJsc}; } else { diff --git a/LayoutTests/TestExpectations b/LayoutTests/TestExpectations index aa34c3f3a483a..9c612d9e27cef 100644 --- a/LayoutTests/TestExpectations +++ b/LayoutTests/TestExpectations @@ -922,12 +922,6 @@ imported/w3c/web-platform-tests/html/rendering/replaced-elements/attributes-for- webkit.org/b/252594 imported/w3c/web-platform-tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/video-inline-size-containment-no-crash.html [ Skip ] imported/w3c/web-platform-tests/html/rendering/replaced-elements/embedded-content/cross-domain-iframe.sub.html [ ImageOnlyFailure ] imported/w3c/web-platform-tests/html/rendering/replaced-elements/embedded-content/tall-cross-domain-iframe-in-scrolled.sub.html [ ImageOnlyFailure ] -imported/w3c/web-platform-tests/html/rendering/the-details-element/details-display-type-001.html [ ImageOnlyFailure ] -imported/w3c/web-platform-tests/html/rendering/the-details-element/details-pseudo-elements-001.html [ ImageOnlyFailure ] -imported/w3c/web-platform-tests/html/rendering/the-details-element/details-pseudo-elements-002.html [ ImageOnlyFailure ] -imported/w3c/web-platform-tests/html/rendering/the-details-element/details-pseudo-elements-003.html [ ImageOnlyFailure ] -imported/w3c/web-platform-tests/html/rendering/the-details-element/details-pseudo-elements-004.html [ ImageOnlyFailure ] -imported/w3c/web-platform-tests/html/rendering/the-details-element/details-pseudo-elements-005.html [ ImageOnlyFailure ] imported/w3c/web-platform-tests/html/rendering/widgets/the-select-element/option-empty-label-to-empty-string.html [ ImageOnlyFailure ] imported/w3c/web-platform-tests/html/rendering/widgets/the-select-element/option-empty-label.html [ ImageOnlyFailure ] imported/w3c/web-platform-tests/html/semantics/embedded-content/the-img-element/adopt-from-image-document.html [ ImageOnlyFailure ] @@ -954,6 +948,10 @@ imported/w3c/web-platform-tests/html/rendering/widgets/appearance/appearance-ani imported/w3c/web-platform-tests/html/rendering/widgets/appearance/appearance-transition-003.html [ ImageOnlyFailure ] imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/modal-dialog-selection.html [ Pass Failure ] +# Needs support for chaining pseudo-elements after ::details-content. +imported/w3c/web-platform-tests/html/rendering/the-details-element/details-pseudo-elements-004.html [ ImageOnlyFailure ] +imported/w3c/web-platform-tests/html/rendering/the-details-element/details-pseudo-elements-005.html [ ImageOnlyFailure ] + # Cross-Origin-Embedder-Policy: credentialless is not supported. imported/w3c/web-platform-tests/html/cross-origin-embedder-policy/credentialless @@ -2799,8 +2797,6 @@ workers/wasm-long-compile-many.html [ Pass Timeout ] imported/w3c/web-platform-tests/WebCryptoAPI/ [ Slow ] # Flaky WebCrypto API tests -imported/w3c/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.any.html [ Failure Pass ] -imported/w3c/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.any.worker.html [ Failure Pass ] imported/w3c/web-platform-tests/WebCryptoAPI/import_export/rsa_importKey.https.any.html [ Failure Pass ] imported/w3c/web-platform-tests/WebCryptoAPI/import_export/rsa_importKey.https.any.worker.html [ Failure Pass ] @@ -2808,7 +2804,6 @@ imported/w3c/web-platform-tests/WebCryptoAPI/getRandomValues-bigint.tentative.an imported/w3c/web-platform-tests/WebCryptoAPI/getRandomValues-bigint.tentative.any.worker.html [ Skip ] # WebCryptoAPI features that haven't been enabled for current OS -imported/w3c/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.worker.html [ Skip ] crypto/subtle/ecdh-import-pkcs8-key-p256-validate-ecprivatekey-parameters-publickey.html [ Skip ] crypto/subtle/ecdh-import-pkcs8-key-p384-validate-ecprivatekey-parameters-publickey.html [ Skip ] crypto/subtle/ecdsa-import-pkcs8-key-p256-validate-ecprivatekey-parameters-publickey.html [ Skip ] @@ -3353,7 +3348,7 @@ webkit.org/b/3652 http/tests/misc/prefetch-purpose.html [ Skip ] # First-party-only cookie policy only supported on Cocoa platforms. http/tests/cookies/only-accept-first-party-cookies.html [ Skip ] # Enable on appropriate platforms: rdar://140222322 -http/tests/cookies/accept-partitioned-first-and-third-party-cookies.html [ Skip ] +http/tests/cookies/accept-partitioned-first-and-third-party-cookies.https.html [ Skip ] # Disabled WPT tests webkit.org/b/185939 imported/w3c/web-platform-tests/css/WOFF2 [ Skip ] @@ -5614,7 +5609,6 @@ imported/w3c/web-platform-tests/css/css-contain/contain-layout-button-002.tentat imported/w3c/web-platform-tests/css/css-contain/contain-style-counters-002.html [ ImageOnlyFailure ] imported/w3c/web-platform-tests/css/css-contain/contain-style-counters-004.html [ ImageOnlyFailure ] imported/w3c/web-platform-tests/css/css-contain/contain-style-counters-005.html [ ImageOnlyFailure ] -imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-095.html [ ImageOnlyFailure ] imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-vs-scrollIntoView-001.html [ ImageOnlyFailure ] imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-vs-scrollIntoView-002.html [ ImageOnlyFailure ] @@ -6640,7 +6634,6 @@ imported/w3c/web-platform-tests/css/css-scroll-anchoring/reading-scroll-forces-a imported/w3c/web-platform-tests/css/css-scroll-snap/input/keyboard.html [ Skip ] imported/w3c/web-platform-tests/css/css-values/dynamic-viewport-units-rule-cache.html [ Skip ] imported/w3c/web-platform-tests/css/css-variables/variable-reference-refresh.html [ Skip ] -imported/w3c/web-platform-tests/css/cssom/caretPositionFromPoint-with-transformation.html [ Skip ] imported/w3c/web-platform-tests/fetch/api/abort/serviceworker-intercepted.https.html [ Skip ] imported/w3c/web-platform-tests/fetch/corb/preload-image-png-mislabeled-as-html-nosniff.tentative.sub.html [ Skip ] imported/w3c/web-platform-tests/fetch/corb/script-html-correctly-labeled.tentative.sub.html [ Skip ] @@ -7359,19 +7352,14 @@ imported/w3c/web-platform-tests/dom/events/scrolling/scrollend-event-fired-to-do imported/w3c/web-platform-tests/dom/events/scrolling/scrollend-event-not-fired-on-no-scroll.html [ Skip ] imported/w3c/web-platform-tests/dom/events/scrolling/input-text-scroll-event-when-using-arrow-keys.html [ Skip ] -# webkit.org/b/263870 [scroll-animations] some WPT tests are timing out -imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-animation-with-scroll-timeline-in-auto-subtree.html [ Skip ] -imported/w3c/web-platform-tests/scroll-animations/css/deferred-timeline-composited.html [ Skip ] -imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-range-animation.html [ Skip ] -imported/w3c/web-platform-tests/scroll-animations/css/view-timeline-range-animation.html [ Skip ] -imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/animation-with-root-scroller.html [ Skip ] -imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/constructor-no-document.html [ Skip ] -imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/updating-the-finished-state.html [ Skip ] +# scroll-animations timeouts +webkit.org/b/283701 imported/w3c/web-platform-tests/scroll-animations/css/deferred-timeline-composited.html [ Skip ] +webkit.org/b/283702 imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/constructor-no-document.html [ Skip ] +webkit.org/b/283107 imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/updating-the-finished-state.html [ Skip ] # webkit.org/b/263871 [scroll-animations] some WPT tests are failures or flaky failures imported/w3c/web-platform-tests/scroll-animations/css/animation-timeline-none.html [ Pass Failure ] imported/w3c/web-platform-tests/scroll-animations/css/view-timeline-dynamic.html [ Pass Failure ] -imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/effect-updateTiming.html [ Pass Failure ] imported/w3c/web-platform-tests/scroll-animations/view-timelines/view-timeline-root-source.html [ Pass Failure ] webkit.org/b/282373 imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-dynamic.tentative.html [ Pass Failure ] @@ -7385,7 +7373,6 @@ imported/w3c/web-platform-tests/scroll-animations/css/printing/scroll-timeline-d imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-default-writing-mode-rl.html [ ImageOnlyFailure ] imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/animation-with-transform.html [ Pass ImageOnlyFailure ] imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/layout-changes-on-percentage-based-timeline.html [ ImageOnlyFailure ] -imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/progress-based-effect-delay.tentative.html [ ImageOnlyFailure ] imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/two-animations-attach-to-same-scroll-timeline-cancel-one.html [ Pass ImageOnlyFailure ] imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/two-animations-attach-to-same-scroll-timeline.html [ Pass ImageOnlyFailure ] imported/w3c/web-platform-tests/scroll-animations/view-timelines/range-boundary.html [ ImageOnlyFailure ] @@ -7435,17 +7422,6 @@ imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate- imported/w3c/web-platform-tests/navigation-api/navigation-methods/return-value/back-204-205-download.html [ Failure Pass ] imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-204-205-download-then-same-document.html [ Failure Pass ] -# beforeunload event listeners are not allowed on subframes. -imported/w3c/web-platform-tests/navigation-api/navigate-event/navigate-navigation-back-cross-document.html [ Skip ] -imported/w3c/web-platform-tests/navigation-api/navigation-methods/return-value/back-beforeunload.html [ Skip ] -imported/w3c/web-platform-tests/navigation-api/navigation-methods/return-value/forward-beforeunload.html [ Skip ] -imported/w3c/web-platform-tests/navigation-api/navigation-methods/return-value/navigate-beforeunload.html [ Skip ] -imported/w3c/web-platform-tests/navigation-api/navigation-methods/return-value/navigate-rejection-order-beforeunload-unserializablestate.html [ Skip ] -imported/w3c/web-platform-tests/navigation-api/navigation-methods/return-value/navigate-rejection-order-invalidurl-beforeunload.html [ Skip ] -imported/w3c/web-platform-tests/navigation-api/navigation-methods/return-value/reload-beforeunload.html [ Skip ] -imported/w3c/web-platform-tests/navigation-api/navigation-methods/return-value/reload-rejection-order-beforeunload-unserializablestate.html [ Skip ] -imported/w3c/web-platform-tests/navigation-api/navigation-methods/return-value/traverseTo-beforeunload.html [ Skip ] - webkit.org/b/282758 [ Debug ] imported/w3c/web-platform-tests/navigation-api/navigate-event/navigate-navigation-back-same-document-in-iframe.html [ Crash ] webkit.org/b/282758 [ Debug ] imported/w3c/web-platform-tests/navigation-api/navigate-event/navigate-navigation-back-same-document.html [ Crash ] webkit.org/b/282758 [ Debug ] imported/w3c/web-platform-tests/navigation-api/navigation-methods/forward-to-pruned-entry.html [ Crash ] @@ -7941,7 +7917,6 @@ imported/w3c/web-platform-tests/css/css-ruby/ruby-base-different-size.html [ Ima imported/blink/fast/ruby/ruby-first-letter.html [ ImageOnlyFailure ] # inline boxes are not recognized as ruby base boxes. imported/w3c/web-platform-tests/css/css-ruby/ruby-line-breaking-003.html [ ImageOnlyFailure ] -webkit.org/b/276007 [ Debug ] fast/ruby/ruby-with-continuation-crash.html [ Skip ] imported/w3c/web-platform-tests/css/css-ruby/break-within-bases/basic.html [ ImageOnlyFailure ] imported/w3c/web-platform-tests/css/css-ruby/break-within-bases/no-break-opportunity-at-end.html [ ImageOnlyFailure ] @@ -7999,7 +7974,6 @@ webkit.org/b/282024 fast/text/text-box-edge-with-margin-padding-border-simple.ht # -- Anchor Positioning -- # # general failures -imported/w3c/web-platform-tests/css/css-anchor-position/anchor-center-002.html [ ImageOnlyFailure ] imported/w3c/web-platform-tests/css/css-anchor-position/anchor-center-scroll.html [ ImageOnlyFailure ] imported/w3c/web-platform-tests/css/css-anchor-position/anchor-position-top-layer-001.html [ ImageOnlyFailure ] imported/w3c/web-platform-tests/css/css-anchor-position/anchor-position-top-layer-003.html [ ImageOnlyFailure ] diff --git a/LayoutTests/accessibility/display-none-descendant-of-relation-expected.txt b/LayoutTests/accessibility/display-none-descendant-of-relation-expected.txt new file mode 100644 index 0000000000000..6f2f1399813c6 --- /dev/null +++ b/LayoutTests/accessibility/display-none-descendant-of-relation-expected.txt @@ -0,0 +1,17 @@ +This test ensures we do not expose display:none descendants in the accessibility tree, even if they are a target of a relationship. + + +{#div AXRole: AXGroup} + +{AXRole: AXGroup} + +{AXRole: AXStaticText AXValue: Text} + +{AXRole: AXButton} + +PASS successfullyParsed is true + +TEST COMPLETE +Text + +foo diff --git a/LayoutTests/accessibility/display-none-descendant-of-relation.html b/LayoutTests/accessibility/display-none-descendant-of-relation.html new file mode 100644 index 0000000000000..0c5bf158894f5 --- /dev/null +++ b/LayoutTests/accessibility/display-none-descendant-of-relation.html @@ -0,0 +1,27 @@ + + + + + + + + +
+

Text

+ +
+ + + + + + diff --git a/LayoutTests/accessibility/mac/attributed-string-for-text-marker-range-using-webarea-expected.txt b/LayoutTests/accessibility/mac/attributed-string-for-text-marker-range-using-webarea-expected.txt index 7e907a6ce1eed..a8e966b0de400 100644 --- a/LayoutTests/accessibility/mac/attributed-string-for-text-marker-range-using-webarea-expected.txt +++ b/LayoutTests/accessibility/mac/attributed-string-for-text-marker-range-using-webarea-expected.txt @@ -1,22 +1,34 @@ Tests that using the WebArea to retrieve AttributedStrings from element TextMarkerRanges works properly. -"AXFont - { +"Attributes in range {0, 15}: +AXFont: { AXFontFamily = Times; AXFontName = "Times-Roman"; AXFontSize = 16; -}, This is a test." -"AXFont - { +} +AXForegroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 1 ) +AXBackgroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 0 ) +This is a test." +"Attributes in range {0, 23}: +AXFont: { AXFontFamily = Times; AXFontName = "Times-Roman"; AXFontSize = 16; -}, This is a test. +} +AXForegroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 1 ) +AXBackgroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 0 ) +This is a test. Second" -"AXFont - { +"Attributes in range {0, 34}: +AXFont: { AXFontFamily = Times; AXFontName = "Times-Roman"; AXFontSize = 16; -}, This is a test. +} +AXForegroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 1 ) +AXBackgroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 0 ) +This is a test. Second paragraph." diff --git a/LayoutTests/accessibility/mac/attributed-string/attributed-string-for-range-with-options.html b/LayoutTests/accessibility/mac/attributed-string/attributed-string-for-range-with-options.html index 8b6270ee91094..c56546bf67a8c 100644 --- a/LayoutTests/accessibility/mac/attributed-string/attributed-string-for-range-with-options.html +++ b/LayoutTests/accessibility/mac/attributed-string/attributed-string-for-range-with-options.html @@ -13,8 +13,41 @@ let output = "This test ensures that attributed string for text marker range works and only includes misspelled attribute when requested.\n\n"; var text = null; - var expected1 = "AXFont - {\n AXFontFamily = Times;\n AXFontName = \"Times-Roman\";\n AXFontSize = 16;\n}, word mizpelled word"; - var expected2 = "AXFont - {\n AXFontFamily = Times;\n AXFontName = \"Times-Roman\";\n AXFontSize = 16;\n}, Misspelled, AXFont - {\n AXFontFamily = Times;\n AXFontName = \"Times-Roman\";\n AXFontSize = 16;\n}, AXFont - {\n AXFontFamily = Times;\n AXFontName = \"Times-Roman\";\n AXFontSize = 16;\n}, word mizpelled word"; + var expected1 = `Attributes in range {0, 19}: +AXFont: { + AXFontFamily = Times; + AXFontName = "Times-Roman"; + AXFontSize = 16; +} +AXForegroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 1 ) +AXBackgroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 0 ) +word mizpelled word`; + var expected2 = `Attributes in range {0, 5}: +AXFont: { + AXFontFamily = Times; + AXFontName = "Times-Roman"; + AXFontSize = 16; +} +AXForegroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 1 ) +AXBackgroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 0 ) +Attributes in range {5, 9}: +Misspelled, AXFont: { + AXFontFamily = Times; + AXFontName = "Times-Roman"; + AXFontSize = 16; +} +AXForegroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 1 ) +AXBackgroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 0 ) +Attributes in range {14, 5}: +AXFont: { + AXFontFamily = Times; + AXFontName = "Times-Roman"; + AXFontSize = 16; +} +AXForegroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 1 ) +AXBackgroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 0 ) +word mizpelled word`; + let axElement = accessibilityController.accessibleElementById("content"); let range = axElement.textMarkerRangeForElement(axElement); text = axElement.attributedStringForTextMarkerRangeWithOptions(range, false); @@ -23,7 +56,15 @@ output += expect("text", "expected2"); // Correct the misspelling and verify that the attributed string changes accordingly. - var expected3 = "AXFont - {\n AXFontFamily = Times;\n AXFontName = \"Times-Roman\";\n AXFontSize = 16;\n}, word misspelled word"; + var expected3 = `Attributes in range {0, 20}: +AXFont: { + AXFontFamily = Times; + AXFontName = "Times-Roman"; + AXFontSize = 16; +} +AXForegroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 1 ) +AXBackgroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 0 ) +word misspelled word`; axElement.replaceTextInRange("ss", 7, 1); // Note that with replaceTextInRange(...), there is no need to await for the change to be reflected in the AX tree. range = axElement.textMarkerRangeForElement(axElement); @@ -31,7 +72,23 @@ output += expect("text", "expected3"); // Make another misspelling and verify. - var expected4 = "Misspelled, AXFont - {\n AXFontFamily = Times;\n AXFontName = \"Times-Roman\";\n AXFontSize = 16;\n}, AXFont - {\n AXFontFamily = Times;\n AXFontName = \"Times-Roman\";\n AXFontSize = 16;\n}, worz misspelled word"; + var expected4 = `Attributes in range {0, 4}: +Misspelled, AXFont: { + AXFontFamily = Times; + AXFontName = "Times-Roman"; + AXFontSize = 16; +} +AXForegroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 1 ) +AXBackgroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 0 ) +Attributes in range {4, 16}: +AXFont: { + AXFontFamily = Times; + AXFontName = "Times-Roman"; + AXFontSize = 16; +} +AXForegroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 1 ) +AXBackgroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 0 ) +worz misspelled word`; axElement.replaceTextInRange("z", 3, 1); range = axElement.textMarkerRangeForElement(axElement); text = axElement.attributedStringForTextMarkerRangeWithOptions(range, true); diff --git a/LayoutTests/accessibility/mac/attributed-string/attributed-string-for-range.html b/LayoutTests/accessibility/mac/attributed-string/attributed-string-for-range.html index 58ec747c8fa0a..99f5813852ca6 100644 --- a/LayoutTests/accessibility/mac/attributed-string/attributed-string-for-range.html +++ b/LayoutTests/accessibility/mac/attributed-string/attributed-string-for-range.html @@ -15,7 +15,31 @@ let output = "This test ensures that attributed string for text marker range works and does include misspelled attribute.\n\n"; var text = null; - var expected = "AXFont - {\n AXFontFamily = Times;\n AXFontName = \"Times-Roman\";\n AXFontSize = 16;\n}, Misspelled, AXFont - {\n AXFontFamily = Times;\n AXFontName = \"Times-Roman\";\n AXFontSize = 16;\n}, AXFont - {\n AXFontFamily = Times;\n AXFontName = \"Times-Roman\";\n AXFontSize = 16;\n}, word mispelled word"; + var expected = `Attributes in range {0, 5}: +AXFont: { + AXFontFamily = Times; + AXFontName = "Times-Roman"; + AXFontSize = 16; +} +AXForegroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 1 ) +AXBackgroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 0 ) +Attributes in range {5, 9}: +Misspelled, AXFont: { + AXFontFamily = Times; + AXFontName = "Times-Roman"; + AXFontSize = 16; +} +AXForegroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 1 ) +AXBackgroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 0 ) +Attributes in range {14, 5}: +AXFont: { + AXFontFamily = Times; + AXFontName = "Times-Roman"; + AXFontSize = 16; +} +AXForegroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 1 ) +AXBackgroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 0 ) +word mispelled word`; let axElement = accessibilityController.accessibleElementById("content"); let range = axElement.textMarkerRangeForElement(axElement); diff --git a/LayoutTests/accessibility/mac/attributed-string/attributed-string-text-styling.html b/LayoutTests/accessibility/mac/attributed-string/attributed-string-text-styling.html index ba80d57db1704..68fdd13d8b9bb 100644 --- a/LayoutTests/accessibility/mac/attributed-string/attributed-string-text-styling.html +++ b/LayoutTests/accessibility/mac/attributed-string/attributed-string-text-styling.html @@ -15,22 +15,58 @@ if (window.accessibilityController) { var textPlain = accessibilityController.accessibleElementById("text-plain"); var textPlainRange = textPlain.textMarkerRangeForElement(textPlain); - var textPlainAttributes = "AXFont - {\n AXFontFamily = Times;\n AXFontName = \"Times-Roman\";\n AXFontSize = 16;\n}, The"; + var textPlainAttributes = `Attributes in range {0, 3}: +AXFont: { + AXFontFamily = Times; + AXFontName = "Times-Roman"; + AXFontSize = 16; +} +AXForegroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 1 ) +AXBackgroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 0 ) +The`; shouldBe("textPlain.attributedStringForTextMarkerRange(textPlainRange)", "textPlainAttributes"); var textBold = accessibilityController.accessibleElementById("text-bold"); var textBoldRange = textBold.textMarkerRangeForElement(textBold); - var textBoldAttributes = "AXFont - {\n AXFontBold = 1;\n AXFontFamily = Times;\n AXFontName = \"Times-Bold\";\n AXFontSize = 16;\n}, Fox"; + var textBoldAttributes = `Attributes in range {0, 3}: +AXFont: { + AXFontBold = 1; + AXFontFamily = Times; + AXFontName = "Times-Bold"; + AXFontSize = 16; +} +AXForegroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 1 ) +AXBackgroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 0 ) +Fox`; shouldBe("textBold.attributedStringForTextMarkerRange(textBoldRange)", "textBoldAttributes"); var textItalic = accessibilityController.accessibleElementById("text-italic"); var textItalicRange = textItalic.textMarkerRangeForElement(textItalic); - var textItalicAttributes = "AXFont - {\n AXFontFamily = Times;\n AXFontItalic = 1;\n AXFontName = \"Times-Italic\";\n AXFontSize = 16;\n}, Jumped"; + var textItalicAttributes = `Attributes in range {0, 6}: +AXFont: { + AXFontFamily = Times; + AXFontItalic = 1; + AXFontName = "Times-Italic"; + AXFontSize = 16; +} +AXForegroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 1 ) +AXBackgroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 0 ) +Jumped`; shouldBe("textItalic.attributedStringForTextMarkerRange(textItalicRange)", "textItalicAttributes"); var textBoldItalic = accessibilityController.accessibleElementById("text-bold-italic"); var textBoldItalicRange = textBoldItalic.textMarkerRangeForElement(textBoldItalic); - var textBoldItalicAttributes = "AXFont - {\n AXFontBold = 1;\n AXFontFamily = Times;\n AXFontItalic = 1;\n AXFontName = \"Times-BoldItalic\";\n AXFontSize = 16;\n}, Over"; + var textBoldItalicAttributes = `Attributes in range {0, 4}: +AXFont: { + AXFontBold = 1; + AXFontFamily = Times; + AXFontItalic = 1; + AXFontName = "Times-BoldItalic"; + AXFontSize = 16; +} +AXForegroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 1 ) +AXBackgroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 0 ) +Over`; shouldBe("textBoldItalic.attributedStringForTextMarkerRange(textBoldItalicRange)", "textBoldItalicAttributes"); } diff --git a/LayoutTests/accessibility/mac/content-editable-attributed-string-expected.txt b/LayoutTests/accessibility/mac/content-editable-attributed-string-expected.txt index 71bab6b7c39c3..92236344ceb0c 100644 --- a/LayoutTests/accessibility/mac/content-editable-attributed-string-expected.txt +++ b/LayoutTests/accessibility/mac/content-editable-attributed-string-expected.txt @@ -1,48 +1,89 @@ Tests that AttributedStrings are retrieved properly from line ranges within a contenteditable with children. -All text in the contenteditable: "AXFont - { +All text in the contenteditable: "Attributes in range {0, 22}: +AXFont: { AXFontFamily = Times; AXFontName = "Times-Roman"; AXFontSize = 16; -}, AXFont - { +} +AXForegroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 1 ) +AXBackgroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 0 ) +Attributes in range {22, 8}: +AXFont: { AXFontFamily = Times; AXFontName = "Times-Roman"; AXFontSize = 16; -}, AXFont - { +} +AXForegroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0.933333 1 ) +AXBackgroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 0 ) +AXUnderline: YES +AXUnderlineColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0.933333 1 ) +Attributes in range {30, 12}: +AXFont: { AXFontFamily = Times; AXFontName = "Times-Roman"; AXFontSize = 16; -}, AXFont - { +} +AXForegroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 1 ) +AXBackgroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 0 ) +Attributes in range {42, 13}: +AXFont: { AXFontFamily = Times; - AXFontName = "Times-Roman"; + AXFontItalic = 1; + AXFontName = "Times-Italic"; AXFontSize = 16; -}, First line. +} +AXForegroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 1 ) +AXBackgroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 0 ) +First line. Some text click me more text. Another line." -First line: "AXFont - { +First line: "Attributes in range {0, 11}: +AXFont: { AXFontFamily = Times; AXFontName = "Times-Roman"; AXFontSize = 16; -}, First line." -Second line: "AXFont - { +} +AXForegroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 1 ) +AXBackgroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 0 ) +First line." +Second line: "Attributes in range {0, 10}: +AXFont: { AXFontFamily = Times; AXFontName = "Times-Roman"; AXFontSize = 16; -}, AXFont - { +} +AXForegroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 1 ) +AXBackgroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 0 ) +Attributes in range {10, 8}: +AXFont: { AXFontFamily = Times; AXFontName = "Times-Roman"; AXFontSize = 16; -}, AXFont - { +} +AXForegroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0.933333 1 ) +AXBackgroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 0 ) +AXUnderline: YES +AXUnderlineColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0.933333 1 ) +Attributes in range {18, 11}: +AXFont: { AXFontFamily = Times; AXFontName = "Times-Roman"; AXFontSize = 16; -}, Some text click me more text." -third line: "AXFont - { +} +AXForegroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 1 ) +AXBackgroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 0 ) +Some text click me more text." +third line: "Attributes in range {0, 13}: +AXFont: { AXFontFamily = Times; AXFontItalic = 1; AXFontName = "Times-Italic"; AXFontSize = 16; -}, Another line." +} +AXForegroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 1 ) +AXBackgroundColor: (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1) ( 0 0 0 0 ) +Another line." PASS successfullyParsed is true diff --git a/LayoutTests/accessibility/mac/details-summary-expected.txt b/LayoutTests/accessibility/mac/details-summary-expected.txt index 9d031e32d384b..74a3db4e4d49d 100644 --- a/LayoutTests/accessibility/mac/details-summary-expected.txt +++ b/LayoutTests/accessibility/mac/details-summary-expected.txt @@ -6,12 +6,12 @@ PASS: summary1.role === 'AXRole: AXDisclosureTriangle' PASS: summary1.subrole === 'AXSubrole: AXSummary' PASS: summary1.title === 'AXTitle: Some open info' PASS: details1.isAttributeSettable('AXExpanded') === true -Received AXExpandedChanged notification +Got AXExpandedChanged notification for details1 PASS: details1.isExpanded === false PASS: summary1.isExpanded === false PASS: details1.isExpanded === false PASS: summary1.isExpanded === false -Received AXExpandedChanged notification +Got AXExpandedChanged notification for details1 PASS: details1.isExpanded === true PASS: summary1.isExpanded === true PASS: details1.isExpanded === true diff --git a/LayoutTests/accessibility/mac/details-summary.html b/LayoutTests/accessibility/mac/details-summary.html index 35b1c19399a0a..335ebbd1fcc04 100644 --- a/LayoutTests/accessibility/mac/details-summary.html +++ b/LayoutTests/accessibility/mac/details-summary.html @@ -30,9 +30,10 @@ window.jsTestIsAsync = true; var body = accessibilityController.rootElement.childAtIndex(0); - body.addNotificationListener(function(notification) { - if (notification == "AXExpandedChanged") - output += `Received ${notification} notification\n`; + accessibilityController.addNotificationListener(function(element, notification) { + if (notification != "AXExpandedChanged") + return; + output += `Got AXExpandedChanged notification for ${element.domIdentifier}\n`; }); var details1 = accessibilityController.accessibleElementById("details1"); @@ -100,6 +101,7 @@ output += expect("details3.isExpanded", "true"); debug(output); + accessibilityController.removeNotificationListener(); document.getElementById("content").style.visibility = "hidden"; finishJSTest(); }, 0); diff --git a/LayoutTests/compositing/overlap-blending/backdrop-opacity-expected.html b/LayoutTests/compositing/overlap-blending/backdrop-opacity-expected.html new file mode 100644 index 0000000000000..0ca756c3dfae3 --- /dev/null +++ b/LayoutTests/compositing/overlap-blending/backdrop-opacity-expected.html @@ -0,0 +1,30 @@ + + + + + + +
+
+
+ diff --git a/LayoutTests/compositing/overlap-blending/backdrop-opacity.html b/LayoutTests/compositing/overlap-blending/backdrop-opacity.html new file mode 100644 index 0000000000000..18e3efe96572b --- /dev/null +++ b/LayoutTests/compositing/overlap-blending/backdrop-opacity.html @@ -0,0 +1,29 @@ + + + + + + +
+
+
+ diff --git a/LayoutTests/css3/masking/mask-base64.html b/LayoutTests/css3/masking/mask-base64.html index 1ae0c68394e6f..e6e297eb4e8f7 100644 --- a/LayoutTests/css3/masking/mask-base64.html +++ b/LayoutTests/css3/masking/mask-base64.html @@ -1,5 +1,5 @@ - + + + + +

Arabic is left to right: مث لهذا النص

+
+
+ + diff --git a/LayoutTests/editing/selection/ios/bidi-visually-contiguous-selection-expected.txt b/LayoutTests/editing/selection/ios/bidi-visually-contiguous-selection-expected.txt index 0a9784ca73371..5871f1743ffe9 100644 --- a/LayoutTests/editing/selection/ios/bidi-visually-contiguous-selection-expected.txt +++ b/LayoutTests/editing/selection/ios/bidi-visually-contiguous-selection-expected.txt @@ -5,6 +5,7 @@ This test verifies that the text selection appears visually contiguous when sele On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". PASS isVisuallyContiguous is true +PASS getSelection().toString() is "مثل هذا النص, is right to left" PASS successfullyParsed is true TEST COMPLETE diff --git a/LayoutTests/editing/selection/ios/bidi-visually-contiguous-selection.html b/LayoutTests/editing/selection/ios/bidi-visually-contiguous-selection.html index 51a0a26b1c2c7..5b6d4165f7198 100644 --- a/LayoutTests/editing/selection/ios/bidi-visually-contiguous-selection.html +++ b/LayoutTests/editing/selection/ios/bidi-visually-contiguous-selection.html @@ -40,14 +40,17 @@ isVisuallyContiguous = await UIHelper.isSelectionVisuallyContiguous(); await UIHelper.sendEventStream(new UIHelper.EventStreamBuilder().end().takeResult()); + await UIHelper.ensurePresentationUpdate(); shouldBeTrue("isVisuallyContiguous"); + shouldBeEqualToString("getSelection().toString()", "مثل هذا النص, is right to left"); + finishJSTest(); }); -

Arabic, مثل هذا النص, is right to left.

+

Arabic, مثل هذا النص, is right to left.

diff --git a/LayoutTests/fast/block/float/block-with-negative-margin-clears-float-expected.txt b/LayoutTests/fast/block/float/block-with-negative-margin-clears-float-expected.txt new file mode 100644 index 0000000000000..1a567a87287c7 --- /dev/null +++ b/LayoutTests/fast/block/float/block-with-negative-margin-clears-float-expected.txt @@ -0,0 +1,3 @@ +crbug.com/591243: Clear floats when we have negative margin and are separated from the float by a div that doesn't track it. + + PASS diff --git a/LayoutTests/fast/block/float/block-with-negative-margin-clears-float.html b/LayoutTests/fast/block/float/block-with-negative-margin-clears-float.html new file mode 100644 index 0000000000000..31c6cd7feddde --- /dev/null +++ b/LayoutTests/fast/block/float/block-with-negative-margin-clears-float.html @@ -0,0 +1,42 @@ + + +

crbug.com/591243: Clear floats when we have negative margin and are separated from the float by a div that doesn't track it.

+
+
+
+ +
+ + diff --git a/LayoutTests/fast/block/float/intruding-float-from-previous-blocks-expected.html b/LayoutTests/fast/block/float/intruding-float-from-previous-blocks-expected.html new file mode 100644 index 0000000000000..5625c2d0155d8 --- /dev/null +++ b/LayoutTests/fast/block/float/intruding-float-from-previous-blocks-expected.html @@ -0,0 +1,11 @@ + +
PASS if green box shows.
+
+
diff --git a/LayoutTests/fast/block/float/intruding-float-from-previous-blocks.html b/LayoutTests/fast/block/float/intruding-float-from-previous-blocks.html new file mode 100644 index 0000000000000..bcc6b70eaa6bf --- /dev/null +++ b/LayoutTests/fast/block/float/intruding-float-from-previous-blocks.html @@ -0,0 +1,30 @@ + +PASS if green box shows. +
+
+
+
+
+ +
+
+
+
+
diff --git a/LayoutTests/fast/block/intrinsic-sizing-crash-with-frameset-expected.txt b/LayoutTests/fast/block/intrinsic-sizing-crash-with-frameset-expected.txt new file mode 100644 index 0000000000000..e92fce8d5ea46 --- /dev/null +++ b/LayoutTests/fast/block/intrinsic-sizing-crash-with-frameset-expected.txt @@ -0,0 +1 @@ +PASS if no crash or assert. diff --git a/LayoutTests/fast/block/intrinsic-sizing-crash-with-frameset.html b/LayoutTests/fast/block/intrinsic-sizing-crash-with-frameset.html new file mode 100644 index 0000000000000..f76642d11d621 --- /dev/null +++ b/LayoutTests/fast/block/intrinsic-sizing-crash-with-frameset.html @@ -0,0 +1,14 @@ +
PASS if no crash or assert. diff --git a/LayoutTests/fast/canvas/CanvasRenderingContext2DSettings-pixelFormat-disabled-expected.txt b/LayoutTests/fast/canvas/CanvasRenderingContext2DSettings-pixelFormat-disabled-expected.txt new file mode 100644 index 0000000000000..a3ec58800b504 --- /dev/null +++ b/LayoutTests/fast/canvas/CanvasRenderingContext2DSettings-pixelFormat-disabled-expected.txt @@ -0,0 +1,13 @@ +Test that the pixelFormat member of CanvasRenderingContext2DSettings is unsupported when CanvasPixelFormatEnabled=false. + +On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". + + +PASS testSettings.pixelFormat is undefined. +PASS testSettings.pixelFormat is undefined. +PASS testSettings.pixelFormat is undefined. +PASS testSettings.pixelFormat is undefined. +PASS successfullyParsed is true + +TEST COMPLETE + diff --git a/LayoutTests/fast/canvas/CanvasRenderingContext2DSettings-pixelFormat-disabled.html b/LayoutTests/fast/canvas/CanvasRenderingContext2DSettings-pixelFormat-disabled.html new file mode 100644 index 0000000000000..f47e24c314bda --- /dev/null +++ b/LayoutTests/fast/canvas/CanvasRenderingContext2DSettings-pixelFormat-disabled.html @@ -0,0 +1,24 @@ + + + + + + + + + + diff --git a/LayoutTests/fast/canvas/CanvasRenderingContext2DSettings-pixelFormat-enabled-expected.txt b/LayoutTests/fast/canvas/CanvasRenderingContext2DSettings-pixelFormat-enabled-expected.txt new file mode 100644 index 0000000000000..66fcaf87844b6 --- /dev/null +++ b/LayoutTests/fast/canvas/CanvasRenderingContext2DSettings-pixelFormat-enabled-expected.txt @@ -0,0 +1,13 @@ +Test that the pixelFormat member of CanvasRenderingContext2DSettings is supported when CanvasPixelFormatEnabled=true. + +On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". + + +PASS testSettings.pixelFormat is "uint8" +PASS testSettings.pixelFormat is "uint8" +PASS testSettings.pixelFormat is "float16" +PASS document.createElement("canvas").getContext("2d", { pixelFormat: "foo" }) threw exception TypeError: Type error. +PASS successfullyParsed is true + +TEST COMPLETE + diff --git a/LayoutTests/fast/canvas/CanvasRenderingContext2DSettings-pixelFormat-enabled.html b/LayoutTests/fast/canvas/CanvasRenderingContext2DSettings-pixelFormat-enabled.html new file mode 100644 index 0000000000000..41681d91d493b --- /dev/null +++ b/LayoutTests/fast/canvas/CanvasRenderingContext2DSettings-pixelFormat-enabled.html @@ -0,0 +1,29 @@ + + + + + + + + + + diff --git a/LayoutTests/fast/canvas/imagedata-storageformat-disabled-expected.txt b/LayoutTests/fast/canvas/imagedata-storageformat-disabled-expected.txt new file mode 100644 index 0000000000000..46ec34400e218 --- /dev/null +++ b/LayoutTests/fast/canvas/imagedata-storageformat-disabled-expected.txt @@ -0,0 +1,15 @@ +Tests that ImageDataSettings with CanvasPixelFormatEnabled=false ignores storageFormat. + +On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". + + +PASS created_imageData_uint8.data.constructor is Uint8ClampedArray +PASS gotten_imageData_uint8.data.constructor is Uint8ClampedArray +PASS created_imageData_float16.data.constructor is Uint8ClampedArray +PASS gotten_imageData_float16.data.constructor is Uint8ClampedArray +PASS created_imageData_foo.data.constructor is Uint8ClampedArray +PASS gotten_imageData_foo.data.constructor is Uint8ClampedArray +PASS successfullyParsed is true + +TEST COMPLETE + diff --git a/LayoutTests/fast/canvas/imagedata-storageformat-disabled.html b/LayoutTests/fast/canvas/imagedata-storageformat-disabled.html new file mode 100644 index 0000000000000..eef492ff08589 --- /dev/null +++ b/LayoutTests/fast/canvas/imagedata-storageformat-disabled.html @@ -0,0 +1,36 @@ + + + + + + + + + + + diff --git a/LayoutTests/fast/canvas/imagedata-storageformat-enabled-expected.txt b/LayoutTests/fast/canvas/imagedata-storageformat-enabled-expected.txt new file mode 100644 index 0000000000000..93d39a55ae532 --- /dev/null +++ b/LayoutTests/fast/canvas/imagedata-storageformat-enabled-expected.txt @@ -0,0 +1,15 @@ +Tests that ImageDataSettings contains storageFormat. + +On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". + + +PASS created_imageData_uint8.data.constructor is Uint8ClampedArray +PASS gotten_imageData_uint8.data.constructor is Uint8ClampedArray +PASS created_imageData_float16.data.constructor is Uint8ClampedArray +PASS gotten_imageData_float16.data.constructor is Uint8ClampedArray +PASS context.createImageData(1, 1, { storageFormat: "foo" }) threw exception TypeError: Type error. +PASS context.getImageData(0, 0, 1, 1, { storageFormat: "foo" }) threw exception TypeError: Type error. +PASS successfullyParsed is true + +TEST COMPLETE + diff --git a/LayoutTests/fast/canvas/imagedata-storageformat-enabled.html b/LayoutTests/fast/canvas/imagedata-storageformat-enabled.html new file mode 100644 index 0000000000000..49eeec56cb155 --- /dev/null +++ b/LayoutTests/fast/canvas/imagedata-storageformat-enabled.html @@ -0,0 +1,33 @@ + + + + + + + + + + + diff --git a/LayoutTests/fast/canvas/offscreen-border.html b/LayoutTests/fast/canvas/offscreen-border.html index c101164d4ad26..b769403bbd1e3 100644 --- a/LayoutTests/fast/canvas/offscreen-border.html +++ b/LayoutTests/fast/canvas/offscreen-border.html @@ -20,7 +20,6 @@ square.rect(50, 50, 100, 100); offscreenContext.fillStyle = 'green'; offscreenContext.fill(square); - offscreenContext.commit(); requestAnimationFrame(function() { if (window.testRunner) diff --git a/LayoutTests/fast/canvas/offscreen-clipped.html b/LayoutTests/fast/canvas/offscreen-clipped.html index 4cbff73c0e920..23adb414665af 100644 --- a/LayoutTests/fast/canvas/offscreen-clipped.html +++ b/LayoutTests/fast/canvas/offscreen-clipped.html @@ -20,7 +20,6 @@ square.rect(50, 50, 100, 100); offscreenContext.fillStyle = 'red'; offscreenContext.fill(square); - offscreenContext.commit(); requestAnimationFrame(function() { if (window.testRunner) diff --git a/LayoutTests/fast/canvas/offscreen-giant.html b/LayoutTests/fast/canvas/offscreen-giant.html index e1bdcfe45d15d..06c3538f215ab 100644 --- a/LayoutTests/fast/canvas/offscreen-giant.html +++ b/LayoutTests/fast/canvas/offscreen-giant.html @@ -22,7 +22,6 @@ square.rect(0, 0, 100, 10); offscreenContext.fillStyle = 'green'; offscreenContext.fill(square); - offscreenContext.commit(); requestAnimationFrame(function() { if (window.testRunner) diff --git a/LayoutTests/fast/canvas/offscreen-scaling.html b/LayoutTests/fast/canvas/offscreen-scaling.html index 2342d273c7134..15b791cdf2c53 100644 --- a/LayoutTests/fast/canvas/offscreen-scaling.html +++ b/LayoutTests/fast/canvas/offscreen-scaling.html @@ -18,7 +18,6 @@ square.rect(50, 50, 100, 100); offscreenContext.fillStyle = 'red'; offscreenContext.fill(square); - offscreenContext.commit(); requestAnimationFrame(function() { if (window.testRunner) diff --git a/LayoutTests/fast/canvas/offscreen-toggle-display.html b/LayoutTests/fast/canvas/offscreen-toggle-display.html index c8c38cd5be174..761d2ff1d9f98 100644 --- a/LayoutTests/fast/canvas/offscreen-toggle-display.html +++ b/LayoutTests/fast/canvas/offscreen-toggle-display.html @@ -20,7 +20,6 @@ square.rect(50, 50, 100, 100); offscreenContext.fillStyle = 'green'; offscreenContext.fill(square); - offscreenContext.commit(); requestAnimationFrame(function() { canvas.style.display = "none"; diff --git a/LayoutTests/fast/canvas/webgl/canvas-test.html b/LayoutTests/fast/canvas/webgl/canvas-test.html index 42ceb8eee1934..b06cab94727be 100644 --- a/LayoutTests/fast/canvas/webgl/canvas-test.html +++ b/LayoutTests/fast/canvas/webgl/canvas-test.html @@ -26,165 +26,159 @@ var canvas2d = document.getElementById("canvas2d"); var ctx2d = canvas2d.getContext("2d"); var gl = create3DContext(canvas); -if (!gl) { - testFailed("context does not exist"); -} else { - testPassed("context exists"); - - debug(""); - debug("Checking canvas and WebGL interaction"); - - // Check that a canvas with no width or height is 300x150 pixels - shouldBe('canvas.width', '300'); - shouldBe('canvas.height', '150'); - - // Check get a 4 value gl parameter as a csv string. - function getValue4v(name) { - var v = gl.getParameter(name); - var result = '' + - v[0] + ',' + - v[1] + ',' + - v[2] + ',' + - v[3]; - return result; - } - function getViewport() { - return getValue4v(gl.VIEWPORT); - } +// Check get a 4 value gl parameter as a csv string. +function getValue4v(name) { + var v = gl.getParameter(name); + var result = '' + + v[0] + ',' + + v[1] + ',' + + v[2] + ',' + + v[3]; + return result; +} - function getClearColor() { - return getValue4v(gl.COLOR_CLEAR_VALUE); - } +function getViewport() { + return getValue4v(gl.VIEWPORT); +} - function isAboutEqual(a, b) { - return Math.abs(a - b) < 0.01; - } +function getClearColor() { + return getValue4v(gl.COLOR_CLEAR_VALUE); +} + +function isAboutEqual(a, b) { + return Math.abs(a - b) < 0.01; +} + +function isAboutEqualInt(a, b) { + return Math.abs(a - b) < 3; +} - function isAboutEqualInt(a, b) { - return Math.abs(a - b) < 3; +function checkCanvasContentIs(r3d,g3d,b3d,a3d) { + var r2d; + var g2d; + var b2d; + var a2d; + + function checkPixel(x, y, r3d,g3d,b3d,a3d) { + var offset = (y * 40 + x) * 4; + r2d = imgData.data[offset]; + g2d = imgData.data[offset + 1]; + b2d = imgData.data[offset + 2]; + a2d = imgData.data[offset + 3]; + //debug('' + x + ', ' + y + "(" + offset + ") = " + r2d + ", " + g2d + ", " + b2d + ", " + a2d); + return isAboutEqualInt(r2d, r3d) && + isAboutEqualInt(g2d, g3d) && + isAboutEqualInt(b2d, b3d) && + isAboutEqualInt(a2d, a3d); } - function checkCanvasContentIs(r3d,g3d,b3d,a3d) { - var r2d; - var g2d; - var b2d; - var a2d; - - function checkPixel(x, y, r3d,g3d,b3d,a3d) { - var offset = (y * 40 + x) * 4; - r2d = imgData.data[offset]; - g2d = imgData.data[offset + 1]; - b2d = imgData.data[offset + 2]; - a2d = imgData.data[offset + 3]; - //debug('' + x + ', ' + y + "(" + offset + ") = " + r2d + ", " + g2d + ", " + b2d + ", " + a2d); - return isAboutEqualInt(r2d, r3d) && - isAboutEqualInt(g2d, g3d) && - isAboutEqualInt(b2d, b3d) && - isAboutEqualInt(a2d, a3d); - } - - function checkPixels(r3d,g3d,b3d,a3d) { - return checkPixel(0, 0, r3d, g3d, b3d, a3d) && - checkPixel(0, 39, r3d, g3d, b3d, a3d) && - checkPixel(39, 0, r3d, g3d, b3d, a3d) && - checkPixel(39, 39, r3d, g3d, b3d, a3d) && - checkPixel(0, 0, r3d, g3d, b3d, a3d); - }; - - // Set to just take the color from the 3d canvas - ctx2d.globalCompositeOperation = 'copy'; - - // fill 2d canvas with orange - ctx2d.fillStyle = "rgb(255,192,128)"; - ctx2d.fillRect (0, 0, 40, 40); - - // get the image data - var imgData = ctx2d.getImageData(0, 0, 40, 40); - - // check it got cleared. - if (!checkPixels(255, 192, 128, 255)) { - testFailed("unable to fill 2d context."); - return; - } - - // draw 3d canvas on top. - ctx2d.drawImage(canvas, 0,0, 40, 40); - - // get the image data - var imgData = ctx2d.getImageData(0, 0, 40, 40); - - // Check it's the expected color. - if (!checkPixels(r3d, g3d, b3d, a3d)) { - testFailed("pixels are " + r2d + "," + g2d + "," + b2d + "," + a2d + - " expected " + r3d + "," + g3d + "," + b3d + "," + a3d); - } else { - testPassed("pixels are " + r3d + "," + g3d + "," + b3d + "," + a3d); - } + function checkPixels(r3d,g3d,b3d,a3d) { + return checkPixel(0, 0, r3d, g3d, b3d, a3d) && + checkPixel(0, 39, r3d, g3d, b3d, a3d) && + checkPixel(39, 0, r3d, g3d, b3d, a3d) && + checkPixel(39, 39, r3d, g3d, b3d, a3d) && + checkPixel(0, 0, r3d, g3d, b3d, a3d); + }; + + // Set to just take the color from the 3d canvas + ctx2d.globalCompositeOperation = 'copy'; + + // fill 2d canvas with orange + ctx2d.fillStyle = "rgb(255,192,128)"; + ctx2d.fillRect (0, 0, 40, 40); + + // get the image data + var imgData = ctx2d.getImageData(0, 0, 40, 40); + + // check it got cleared. + if (!checkPixels(255, 192, 128, 255)) { + testFailed("unable to fill 2d context."); + return; } - checkCanvasContentIs(0, 0, 0, 0); - shouldBe('getViewport()', '"0,0,300,150"'); - - // Change the display size of the canvas and check - // the viewport size does not change. - debug(""); - debug("change display size of canvas and see that viewport does not change"); - canvas.style.width = "100px"; - canvas.style.height = "25px"; - var intervalId; - intervalId = window.setInterval(async function() { - await testRunner?.displayAndTrackRepaints(); - if (canvas.clientWidth == 100 && - canvas.clientHeight == 25) { - window.clearInterval(intervalId); - shouldBe('getViewport()', '"0,0,300,150"'); - shouldBe('canvas.width', '300'); - shouldBe('canvas.height', '150'); - - // Change the actual size of the canvas - // Check that the viewport does not change. - // Check that the clear color does not change. - // Check that the color mask does not change. - debug(""); - debug("change the actual size of the canvas and see that the viewport does not change"); - gl.clearColor(0.25, 0.5, 0.75, 1); - gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); - checkCanvasContentIs(64, 128, 192, 255); - gl.colorMask(0,0,0,0); - canvas.width = 400; - canvas.height = 10; - - var v = gl.getParameter(gl.COLOR_CLEAR_VALUE); - assertMsg(isAboutEqual(v[0], 0.25) && - isAboutEqual(v[1], 0.5) && - isAboutEqual(v[2], 0.75) && - isAboutEqual(v[3], 1), - "gl.clearColor should not change after canvas resize"); - v = gl.getParameter(gl.COLOR_WRITEMASK); - assertMsg(isAboutEqual(v[0], 0) && - isAboutEqual(v[1], 0) && - isAboutEqual(v[2], 0) && - isAboutEqual(v[3], 0), - "gl.colorMask should not change after canvas resize"); - shouldBe('getViewport()', '"0,0,300,150"'); - checkCanvasContentIs(0, 0, 0, 0); - - debug(""); - var epilogue = document.createElement("script"); - epilogue.onload = finish; - epilogue.src = "../../../resources/js-test-post.js"; - document.body.appendChild(epilogue); - } - }, 1000/30); + // draw 3d canvas on top. + ctx2d.drawImage(canvas, 0,0, 40, 40); + + // get the image data + var imgData = ctx2d.getImageData(0, 0, 40, 40); + + // Check it's the expected color. + if (!checkPixels(r3d, g3d, b3d, a3d)) { + testFailed("pixels are " + r2d + "," + g2d + "," + b2d + "," + a2d + + " expected " + r3d + "," + g3d + "," + b3d + "," + a3d); + } else { + testPassed("pixels are " + r3d + "," + g3d + "," + b3d + "," + a3d); + } } -function finish() { - if (window.nonKhronosFrameworkNotifyDone) { - window.nonKhronosFrameworkNotifyDone(); +async function runTest() { + if (!gl) { + testFailed("context does not exist"); + } else { + testPassed("context exists"); + + debug(""); + debug("Checking canvas and WebGL interaction"); + + // Check that a canvas with no width or height is 300x150 pixels + shouldBe('canvas.width', '300'); + shouldBe('canvas.height', '150'); + checkCanvasContentIs(0, 0, 0, 0); + shouldBe('getViewport()', '"0,0,300,150"'); + + // Change the display size of the canvas and check + // the viewport size does not change. + debug(""); + debug("change display size of canvas and see that viewport does not change"); + canvas.style.width = "100px"; + canvas.style.height = "25px"; + await testRunner?.displayAndTrackRepaints(); + var intervalId; + intervalId = window.setInterval(async function() { + if (canvas.clientWidth == 100 && + canvas.clientHeight == 25) { + window.clearInterval(intervalId); + shouldBe('getViewport()', '"0,0,300,150"'); + shouldBe('canvas.width', '300'); + shouldBe('canvas.height', '150'); + + // Change the actual size of the canvas + // Check that the viewport does not change. + // Check that the clear color does not change. + // Check that the color mask does not change. + debug(""); + debug("change the actual size of the canvas and see that the viewport does not change"); + gl.clearColor(0.25, 0.5, 0.75, 1); + gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); + checkCanvasContentIs(64, 128, 192, 255); + gl.colorMask(0,0,0,0); + canvas.width = 400; + canvas.height = 10; + + var v = gl.getParameter(gl.COLOR_CLEAR_VALUE); + assertMsg(isAboutEqual(v[0], 0.25) && + isAboutEqual(v[1], 0.5) && + isAboutEqual(v[2], 0.75) && + isAboutEqual(v[3], 1), + "gl.clearColor should not change after canvas resize"); + v = gl.getParameter(gl.COLOR_WRITEMASK); + assertMsg(isAboutEqual(v[0], 0) && + isAboutEqual(v[1], 0) && + isAboutEqual(v[2], 0) && + isAboutEqual(v[3], 0), + "gl.colorMask should not change after canvas resize"); + shouldBe('getViewport()', '"0,0,300,150"'); + checkCanvasContentIs(0, 0, 0, 0); + + debug(""); + finishTest(); + } + }, 1000/300); } } +runTest(); diff --git a/LayoutTests/fast/css/default-bidi-css-rules-expected.txt b/LayoutTests/fast/css/default-bidi-css-rules-expected.txt index 2f370b6f908a8..6c811383041eb 100644 --- a/LayoutTests/fast/css/default-bidi-css-rules-expected.txt +++ b/LayoutTests/fast/css/default-bidi-css-rules-expected.txt @@ -41,15 +41,15 @@ PASS styleOf("output", {"dir":"auto"}).unicodeBidi is "isolate" PASS styleOf("output", {"dir":""}).direction is "ltr" PASS styleOf("output", {"dir":""}).unicodeBidi is "isolate" PASS styleOf("bdo", {}).direction is "ltr" -PASS styleOf("bdo", {}).unicodeBidi is "bidi-override" +PASS styleOf("bdo", {}).unicodeBidi is "isolate-override" PASS styleOf("bdo", {"dir":"ltr"}).direction is "ltr" -PASS styleOf("bdo", {"dir":"ltr"}).unicodeBidi is "bidi-override" +PASS styleOf("bdo", {"dir":"ltr"}).unicodeBidi is "isolate-override" PASS styleOf("bdo", {"dir":"rtl"}).direction is "rtl" -PASS styleOf("bdo", {"dir":"rtl"}).unicodeBidi is "bidi-override" +PASS styleOf("bdo", {"dir":"rtl"}).unicodeBidi is "isolate-override" PASS styleOf("bdo", {"dir":"auto"}).direction is "ltr" -FAIL styleOf("bdo", {"dir":"auto"}).unicodeBidi should be bidi-override isolate. Was isolate. +FAIL styleOf("bdo", {"dir":"auto"}).unicodeBidi should be isolate-override. Was isolate. PASS styleOf("bdo", {"dir":""}).direction is "ltr" -PASS styleOf("bdo", {"dir":""}).unicodeBidi is "bidi-override" +PASS styleOf("bdo", {"dir":""}).unicodeBidi is "isolate-override" PASS styleOf("textarea", {}).direction is "ltr" PASS styleOf("textarea", {}).unicodeBidi is "normal" PASS styleOf("textarea", {"dir":"ltr"}).direction is "ltr" @@ -71,6 +71,7 @@ PASS styleOf("pre", {"dir":"auto"}).unicodeBidi is "plaintext" PASS styleOf("pre", {"dir":""}).direction is "ltr" PASS styleOf("pre", {"dir":""}).unicodeBidi is "normal" PASS successfullyParsed is true +Some tests failed. TEST COMPLETE diff --git a/LayoutTests/fast/css/default-bidi-css-rules.html b/LayoutTests/fast/css/default-bidi-css-rules.html index 0ab0d26333758..3997e4def4d2b 100644 --- a/LayoutTests/fast/css/default-bidi-css-rules.html +++ b/LayoutTests/fast/css/default-bidi-css-rules.html @@ -1,7 +1,7 @@ - +

This test checks the default rules for direction and unicode-bidi CSS properties.

@@ -44,11 +44,11 @@ ['output', {'dir': 'auto'}, 'ltr', 'isolate'], ['output', {'dir': ''}, 'ltr', 'isolate'], - ['bdo', {}, 'ltr', 'bidi-override'], - ['bdo', {'dir': 'ltr'}, 'ltr', 'bidi-override'], - ['bdo', {'dir': 'rtl'}, 'rtl', 'bidi-override'], - ['bdo', {'dir': 'auto'}, 'ltr', 'bidi-override isolate'], - ['bdo', {'dir': ''}, 'ltr', 'bidi-override'], + ['bdo', {}, 'ltr', 'isolate-override'], + ['bdo', {'dir': 'ltr'}, 'ltr', 'isolate-override'], + ['bdo', {'dir': 'rtl'}, 'rtl', 'isolate-override'], + ['bdo', {'dir': 'auto'}, 'ltr', 'isolate-override'], + ['bdo', {'dir': ''}, 'ltr', 'isolate-override'], ['textarea', {}, 'ltr', 'normal'], ['textarea', {'dir': 'ltr'}, 'ltr', 'isolate'], @@ -69,6 +69,5 @@ }); - diff --git a/LayoutTests/fast/css/text-transform-select.html b/LayoutTests/fast/css/text-transform-select.html deleted file mode 100644 index 4e7026df71c14..0000000000000 --- a/LayoutTests/fast/css/text-transform-select.html +++ /dev/null @@ -1,39 +0,0 @@ - - - -The text in the button, popup menu and list box should have the same case as in the -accompanying text. -
- - - heLLo woRLd -
-
- - - heLLo woRLd -
-
- - - heLLo woRLd -
-
- - - � �� -
-
- - - � �� -
-
- - - � �� -
diff --git a/LayoutTests/fast/css/text-underline-offset-repaint-expected.txt b/LayoutTests/fast/css/text-underline-offset-repaint-expected.txt new file mode 100644 index 0000000000000..a97d76824b5a6 --- /dev/null +++ b/LayoutTests/fast/css/text-underline-offset-repaint-expected.txt @@ -0,0 +1,6 @@ +Text + +(repaint rects + (rect 8 20 784 20) +) + diff --git a/LayoutTests/fast/css/text-underline-offset-repaint.html b/LayoutTests/fast/css/text-underline-offset-repaint.html new file mode 100644 index 0000000000000..aa2e36200aa49 --- /dev/null +++ b/LayoutTests/fast/css/text-underline-offset-repaint.html @@ -0,0 +1,43 @@ + + + + + + + + + +

Text

+

+
+
+
\ No newline at end of file
diff --git a/LayoutTests/fast/editing/selection-across-flex-grid-boundary-expected.html b/LayoutTests/fast/editing/selection-across-flex-grid-boundary-expected.html
new file mode 100644
index 0000000000000..6efeb81468f5a
--- /dev/null
+++ b/LayoutTests/fast/editing/selection-across-flex-grid-boundary-expected.html
@@ -0,0 +1,17 @@
+
+before selection
+
start
+
end
+after selection + diff --git a/LayoutTests/fast/editing/selection-across-flex-grid-boundary.html b/LayoutTests/fast/editing/selection-across-flex-grid-boundary.html new file mode 100644 index 0000000000000..729cb3d38183d --- /dev/null +++ b/LayoutTests/fast/editing/selection-across-flex-grid-boundary.html @@ -0,0 +1,17 @@ + +before selection +
start
+
end
+after selection + diff --git a/LayoutTests/fast/lists/inline-before-content-after-list-marker.html b/LayoutTests/fast/lists/inline-before-content-after-list-marker.html index e33c2fd9bbd14..138759cc863d6 100644 --- a/LayoutTests/fast/lists/inline-before-content-after-list-marker.html +++ b/LayoutTests/fast/lists/inline-before-content-after-list-marker.html @@ -3,6 +3,7 @@
  • SS diff --git a/LayoutTests/fast/mediacapturefromelement/CanvasCaptureMediaStream-offscreencanvas-expected.txt b/LayoutTests/fast/mediacapturefromelement/CanvasCaptureMediaStream-offscreencanvas-expected.txt index 0d3a5fdfd162b..90e61ae8a4108 100644 --- a/LayoutTests/fast/mediacapturefromelement/CanvasCaptureMediaStream-offscreencanvas-expected.txt +++ b/LayoutTests/fast/mediacapturefromelement/CanvasCaptureMediaStream-offscreencanvas-expected.txt @@ -1,4 +1,4 @@ PASS capture of an OffscreenCanvas with 2D context -FAIL capture of an OffscreenCanvas with WebGL context ctx.commit is not a function. (In 'ctx.commit()', 'ctx.commit' is undefined) +PASS capture of an OffscreenCanvas with WebGL context diff --git a/LayoutTests/fast/mediacapturefromelement/CanvasCaptureMediaStream-offscreencanvas.html b/LayoutTests/fast/mediacapturefromelement/CanvasCaptureMediaStream-offscreencanvas.html index ec583536eb2a7..dc880286056ca 100644 --- a/LayoutTests/fast/mediacapturefromelement/CanvasCaptureMediaStream-offscreencanvas.html +++ b/LayoutTests/fast/mediacapturefromelement/CanvasCaptureMediaStream-offscreencanvas.html @@ -30,7 +30,6 @@ recorder.start(1000); var ctx = drawFunction(offscreen); - ctx.commit(); }, message); }; diff --git a/LayoutTests/fast/mediastream/enumerate-speaker.html b/LayoutTests/fast/mediastream/enumerate-speaker.html index 7f102fa5cb55f..724fddcc27510 100644 --- a/LayoutTests/fast/mediastream/enumerate-speaker.html +++ b/LayoutTests/fast/mediastream/enumerate-speaker.html @@ -23,8 +23,10 @@ }, "Before gum, no audiooutput is exposed"); promise_test(async (test) => { + window.internals.settings.setExposeSpeakersWithoutMicrophoneEnabled(false); + await navigator.mediaDevices.getUserMedia({ audio:true, video:true }) - const devices = await navigator.mediaDevices.enumerateDevices(); + let devices = await navigator.mediaDevices.enumerateDevices(); assert_true(devices.length > 2, "after getting permission, more than 1 camera and 1 microphone are exposed"); devices.forEach((device) => { assert_not_equals(device.deviceId.length == 0 , "device.deviceId is empty before permission to capture"); @@ -37,7 +39,7 @@ const mic2 = deviceFromLabel(devices, "Mock audio device 2"); const speaker1 = deviceFromLabel(devices, "Mock speaker device 1"); const speaker2 = deviceFromLabel(devices, "Mock speaker device 2"); - const speaker3 = deviceFromLabel(devices, "Mock speaker device 3"); + let speaker3 = deviceFromLabel(devices, "Mock speaker device 3"); assert_equals(speaker1.kind, "audiooutput", "speaker1"); assert_not_equals(speaker1.groupId, "", "speaker1 groupId"); @@ -49,6 +51,14 @@ assert_equals(speaker1.groupId, mic1.groupId, "device 1"); assert_equals(speaker2.groupId, mic2.groupId, "device 2"); + + window.internals.settings.setExposeSpeakersWithoutMicrophoneEnabled(true); + + devices = await navigator.mediaDevices.enumerateDevices(); + speaker3 = deviceFromLabel(devices, "Mock speaker device 3"); + assert_equals(speaker3.kind, "audiooutput", "speaker3"); + assert_not_equals(speaker1.groupId, speaker3.groupId, "speaker3.groupId 1"); + assert_not_equals(speaker2.groupId, speaker3.groupId, "speaker3.groupId 2"); }, "audiooutput devices"); diff --git a/LayoutTests/fast/repaint/inline-box-ink-overflow-shrink-expected.txt b/LayoutTests/fast/repaint/inline-box-ink-overflow-shrink-expected.txt new file mode 100644 index 0000000000000..f5b55660b4c77 --- /dev/null +++ b/LayoutTests/fast/repaint/inline-box-ink-overflow-shrink-expected.txt @@ -0,0 +1,5 @@ +PASS if there's only one underline visible. +(repaint rects + (rect 8 8 784 117) +) + diff --git a/LayoutTests/fast/repaint/inline-box-ink-overflow-shrink.html b/LayoutTests/fast/repaint/inline-box-ink-overflow-shrink.html new file mode 100644 index 0000000000000..d20ff8139b084 --- /dev/null +++ b/LayoutTests/fast/repaint/inline-box-ink-overflow-shrink.html @@ -0,0 +1,18 @@ + +
    PASS if there's only one underline visible.
    + + diff --git a/LayoutTests/fast/ruby/base-followed-by-breaking-position-with-wide-annotation-expected.html b/LayoutTests/fast/ruby/base-followed-by-breaking-position-with-wide-annotation-expected.html new file mode 100644 index 0000000000000..edc1bcf5a3931 --- /dev/null +++ b/LayoutTests/fast/ruby/base-followed-by-breaking-position-with-wide-annotation-expected.html @@ -0,0 +1,14 @@ + +
    baseannotation
    diff --git a/LayoutTests/fast/ruby/base-followed-by-breaking-position-with-wide-annotation.html b/LayoutTests/fast/ruby/base-followed-by-breaking-position-with-wide-annotation.html new file mode 100644 index 0000000000000..d1a66f7941ae7 --- /dev/null +++ b/LayoutTests/fast/ruby/base-followed-by-breaking-position-with-wide-annotation.html @@ -0,0 +1,15 @@ + + +
    baseannotation
    diff --git a/LayoutTests/fast/ruby/ruby-base-with-breakable-content-inside-expected.html b/LayoutTests/fast/ruby/ruby-base-with-breakable-content-inside-expected.html new file mode 100644 index 0000000000000..64bf6872b5617 --- /dev/null +++ b/LayoutTests/fast/ruby/ruby-base-with-breakable-content-inside-expected.html @@ -0,0 +1,13 @@ + + +
    X
    X
    XX
    diff --git a/LayoutTests/fast/ruby/ruby-base-with-breakable-content-inside.html b/LayoutTests/fast/ruby/ruby-base-with-breakable-content-inside.html new file mode 100644 index 0000000000000..5c8b5ee556a89 --- /dev/null +++ b/LayoutTests/fast/ruby/ruby-base-with-breakable-content-inside.html @@ -0,0 +1,13 @@ + + +
    X X XX
    diff --git a/LayoutTests/fast/ruby/ruby-text-before-child-split-expected.txt b/LayoutTests/fast/ruby/ruby-text-before-child-split-expected.txt index e6609c6de1f34..3ece89f44f1a3 100644 --- a/LayoutTests/fast/ruby/ruby-text-before-child-split-expected.txt +++ b/LayoutTests/fast/ruby/ruby-text-before-child-split-expected.txt @@ -9,12 +9,13 @@ layer at (0,0) size 800x36 RenderText {#text} at (0,0) size 10x10 text run at (0,0) width 10: "A" RenderInline {I} at (10,0) size 0x10 - RenderBlock {RT} at (0,0) size 10x0 RenderBlock (anonymous) at (0,10) size 784x0 RenderBlock {DIV} at (0,0) size 784x0 RenderBlock (anonymous) at (0,10) size 784x10 RenderInline {RUBY} at (0,0) size 10x10 RenderInline {I} at (0,0) size 0x10 + RenderInline (generated) at (0,0) size 0x10 + RenderBlock {RT} at (0,0) size 0x0 RenderInline (generated) at (0,0) size 10x10 RenderText {#text} at (0,0) size 10x10 text run at (0,0) width 10: "B" diff --git a/LayoutTests/fast/scrolling/mac/no-keyboard-scrolling-when-holding-shift-expected.txt b/LayoutTests/fast/scrolling/mac/no-keyboard-scrolling-when-holding-shift-expected.txt new file mode 100644 index 0000000000000..85f360c16384c --- /dev/null +++ b/LayoutTests/fast/scrolling/mac/no-keyboard-scrolling-when-holding-shift-expected.txt @@ -0,0 +1,10 @@ +Verifies that pressing Shift + Up modifies an extant selection, and does not begin keyboard scrolling after the selection is completely cleared. To manually run the test, press Shift + Up until the selection disappears, and then keep pressing Shift + Up — the page should not scroll + +On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". + + +PASS document.scrollingElement.scrollTop is scrollTopBeforeKeyPresses +PASS successfullyParsed is true + +TEST COMPLETE +Here’s to the crazy ones. The misfits. The rebels. The troublemakers. The round pegs in the square holes. The ones who see things differently. They’re not fond of rules. And they have no respect for the status quo. diff --git a/LayoutTests/fast/scrolling/mac/no-keyboard-scrolling-when-holding-shift.html b/LayoutTests/fast/scrolling/mac/no-keyboard-scrolling-when-holding-shift.html new file mode 100644 index 0000000000000..eb0bd8a3aea3b --- /dev/null +++ b/LayoutTests/fast/scrolling/mac/no-keyboard-scrolling-when-holding-shift.html @@ -0,0 +1,65 @@ + + + + + + + + + + +
    +

    Here’s to the crazy ones. The misfits. The rebels. The troublemakers. The round pegs in the square holes. The ones who see things differently. They’re not fond of rules. And they have no respect for the status quo.

    + + diff --git a/LayoutTests/fast/selectors/has-queryselector-performance-expected.txt b/LayoutTests/fast/selectors/has-queryselector-performance-expected.txt new file mode 100644 index 0000000000000..fd195e06effec --- /dev/null +++ b/LayoutTests/fast/selectors/has-queryselector-performance-expected.txt @@ -0,0 +1,2 @@ +This test passes if it doesn't time out. + diff --git a/LayoutTests/fast/selectors/has-queryselector-performance.html b/LayoutTests/fast/selectors/has-queryselector-performance.html new file mode 100644 index 0000000000000..6e19ef838c5f5 --- /dev/null +++ b/LayoutTests/fast/selectors/has-queryselector-performance.html @@ -0,0 +1,19 @@ +This test passes if it doesn't time out. + diff --git a/LayoutTests/fast/text/capitalize-content-with-outside-bmp-characters-expected.html b/LayoutTests/fast/text/capitalize-content-with-outside-bmp-characters-expected.html new file mode 100644 index 0000000000000..7751723368acc --- /dev/null +++ b/LayoutTests/fast/text/capitalize-content-with-outside-bmp-characters-expected.html @@ -0,0 +1,2 @@ + +
    𐐐𐐮𐐭𐑋𐐰𐑌 𐐐𐐮𐐭𐑋𐐰𐑌 First Œuf Æsthetics
    diff --git a/LayoutTests/fast/text/capitalize-content-with-outside-bmp-characters.html b/LayoutTests/fast/text/capitalize-content-with-outside-bmp-characters.html new file mode 100644 index 0000000000000..5f3672f46e3d1 --- /dev/null +++ b/LayoutTests/fast/text/capitalize-content-with-outside-bmp-characters.html @@ -0,0 +1,7 @@ + + +
    𐐸𐐮𐐭𐑋𐐰𐑌 𐐸𐐮𐐭𐑋𐐰𐑌 first œuf æsthetics
    diff --git a/LayoutTests/fast/text/capitalize-content-with-outside-bmp-previous-characters-expected.html b/LayoutTests/fast/text/capitalize-content-with-outside-bmp-previous-characters-expected.html new file mode 100644 index 0000000000000..9cba88a0eb0bc --- /dev/null +++ b/LayoutTests/fast/text/capitalize-content-with-outside-bmp-previous-characters-expected.html @@ -0,0 +1,3 @@ + +
    Actual: 𐐸𐐮𐐭𐑋𐐰𐑌 𐐐𐐮𐐭𐑋𐐰𐑌 First Œuf Æsthetics
    +
    Expected: 𐐸𐐮𐐭𐑋𐐰𐑌 𐐐𐐮𐐭𐑋𐐰𐑌 First Œuf Æsthetics
    diff --git a/LayoutTests/fast/text/capitalize-content-with-outside-bmp-previous-characters.html b/LayoutTests/fast/text/capitalize-content-with-outside-bmp-previous-characters.html new file mode 100644 index 0000000000000..1a59a2db9df73 --- /dev/null +++ b/LayoutTests/fast/text/capitalize-content-with-outside-bmp-previous-characters.html @@ -0,0 +1,8 @@ + + +
    Actual: 𐐸𐐮𐐭𐑋𐐰𐑌 𐐸𐐮𐐭𐑋𐐰𐑌 first œuf æsthetics
    +
    Expected: 𐐸𐐮𐐭𐑋𐐰𐑌 𐐐𐐮𐐭𐑋𐐰𐑌 First Œuf Æsthetics
    diff --git a/LayoutTests/fast/text/capitalize-decomposed-ligatures-expected.html b/LayoutTests/fast/text/capitalize-decomposed-ligatures-expected.html new file mode 100644 index 0000000000000..080a48666ab7e --- /dev/null +++ b/LayoutTests/fast/text/capitalize-decomposed-ligatures-expected.html @@ -0,0 +1,8 @@ + +
    First First First First
    +
    FirSt FirsT First FiRst
    +
    First First First First
    + +
    Oeuf Œuf
    +
    Oeuf ŒUf
    +
    Oeuf Œuf
    diff --git a/LayoutTests/fast/text/capitalize-decomposed-ligatures.html b/LayoutTests/fast/text/capitalize-decomposed-ligatures.html new file mode 100644 index 0000000000000..61ab7a0fa61db --- /dev/null +++ b/LayoutTests/fast/text/capitalize-decomposed-ligatures.html @@ -0,0 +1,13 @@ + + +
    first first first first
    +
    firSt firsT First fiRst
    +
    first rst firfirst
    + +
    oeuf œuf
    +
    Oeuf œUf
    +
    oeuf œuf
    diff --git a/LayoutTests/fast/text/international/bidi-LDB-2-HTML.html b/LayoutTests/fast/text/international/bidi-LDB-2-HTML.html index 8e597d22263f6..b60b024480588 100644 --- a/LayoutTests/fast/text/international/bidi-LDB-2-HTML.html +++ b/LayoutTests/fast/text/international/bidi-LDB-2-HTML.html @@ -30,6 +30,8 @@ div.box { border:1px green solid; display:inline-block; padding:3px; margin:3px; vertical-align:middle; } +/* simulate old behavior for the element that this test is based on */ +bdo { unicode-bidi: bidi-override; } diff --git a/LayoutTests/fast/text/text-wrap-pretty-simple-crash-expected.txt b/LayoutTests/fast/text/text-wrap-pretty-simple-crash-expected.txt new file mode 100644 index 0000000000000..61114d41d1742 --- /dev/null +++ b/LayoutTests/fast/text/text-wrap-pretty-simple-crash-expected.txt @@ -0,0 +1,2 @@ +PASS if no crash or assert. +XXX diff --git a/LayoutTests/fast/text/text-wrap-pretty-simple-crash.html b/LayoutTests/fast/text/text-wrap-pretty-simple-crash.html new file mode 100644 index 0000000000000..786f9a6a57f95 --- /dev/null +++ b/LayoutTests/fast/text/text-wrap-pretty-simple-crash.html @@ -0,0 +1,12 @@ + +PASS if no crash or assert. +
    XXX
    + \ No newline at end of file diff --git a/LayoutTests/fast/urlpattern/urlpattern-component-expected.txt b/LayoutTests/fast/urlpattern/urlpattern-component-expected.txt index 57c8877d6eaaf..e12efc80d2ccf 100644 --- a/LayoutTests/fast/urlpattern/urlpattern-component-expected.txt +++ b/LayoutTests/fast/urlpattern/urlpattern-component-expected.txt @@ -2190,89 +2190,13 @@ PASS urlPatternComponent is "*" Component: hash PASS urlPatternComponent is "*" Testing: {"pattern":[{"protocol":"(café)"}],"expected_obj":"error"} -Component: protocol -PASS urlPatternComponent is "(café)" -Component: username -PASS urlPatternComponent is "*" -Component: password -PASS urlPatternComponent is "*" -Component: hostname -PASS urlPatternComponent is "*" -Component: port -PASS urlPatternComponent is "*" -Component: password -PASS urlPatternComponent is "*" -Component: pathname -PASS urlPatternComponent is "*" -Component: search -WARN: shouldBeEqualToString() expects string arguments -WARN: shouldBe() expects function or string arguments -FAIL urlPatternComponent should be undefined (of type undefined). Was * (of type string). -Component: hash -PASS urlPatternComponent is "*" +PASS var pattern = new URLPattern(...errorEntry.pattern) threw exception TypeError: Current codepoint is not ascii. Testing: {"pattern":[{"username":"(café)"}],"expected_obj":"error"} -Component: protocol -PASS urlPatternComponent is "*" -Component: username -PASS urlPatternComponent is "(café)" -Component: password -PASS urlPatternComponent is "*" -Component: hostname -PASS urlPatternComponent is "*" -Component: port -PASS urlPatternComponent is "*" -Component: password -PASS urlPatternComponent is "*" -Component: pathname -PASS urlPatternComponent is "*" -Component: search -WARN: shouldBeEqualToString() expects string arguments -WARN: shouldBe() expects function or string arguments -FAIL urlPatternComponent should be undefined (of type undefined). Was * (of type string). -Component: hash -PASS urlPatternComponent is "*" +PASS var pattern = new URLPattern(...errorEntry.pattern) threw exception TypeError: Current codepoint is not ascii. Testing: {"pattern":[{"password":"(café)"}],"expected_obj":"error"} -Component: protocol -PASS urlPatternComponent is "*" -Component: username -PASS urlPatternComponent is "*" -Component: password -PASS urlPatternComponent is "(café)" -Component: hostname -PASS urlPatternComponent is "*" -Component: port -PASS urlPatternComponent is "*" -Component: password -PASS urlPatternComponent is "(café)" -Component: pathname -PASS urlPatternComponent is "*" -Component: search -WARN: shouldBeEqualToString() expects string arguments -WARN: shouldBe() expects function or string arguments -FAIL urlPatternComponent should be undefined (of type undefined). Was * (of type string). -Component: hash -PASS urlPatternComponent is "*" +PASS var pattern = new URLPattern(...errorEntry.pattern) threw exception TypeError: Current codepoint is not ascii. Testing: {"pattern":[{"hostname":"(café)"}],"expected_obj":"error"} -Component: protocol -PASS urlPatternComponent is "*" -Component: username -PASS urlPatternComponent is "*" -Component: password -PASS urlPatternComponent is "*" -Component: hostname -PASS urlPatternComponent is "(café)" -Component: port -PASS urlPatternComponent is "*" -Component: password -PASS urlPatternComponent is "*" -Component: pathname -PASS urlPatternComponent is "*" -Component: search -WARN: shouldBeEqualToString() expects string arguments -WARN: shouldBe() expects function or string arguments -FAIL urlPatternComponent should be undefined (of type undefined). Was * (of type string). -Component: hash -PASS urlPatternComponent is "*" +PASS var pattern = new URLPattern(...errorEntry.pattern) threw exception TypeError: Current codepoint is not ascii. Testing: {"pattern":[{"pathname":"(café)"}],"expected_obj":"error"} Component: protocol PASS urlPatternComponent is "*" @@ -2295,47 +2219,9 @@ FAIL urlPatternComponent should be undefined (of type undefined). Was * (of type Component: hash PASS urlPatternComponent is "*" Testing: {"pattern":[{"search":"(café)"}],"expected_obj":"error"} -Component: protocol -PASS urlPatternComponent is "*" -Component: username -PASS urlPatternComponent is "*" -Component: password -PASS urlPatternComponent is "*" -Component: hostname -PASS urlPatternComponent is "*" -Component: port -PASS urlPatternComponent is "*" -Component: password -PASS urlPatternComponent is "*" -Component: pathname -PASS urlPatternComponent is "*" -Component: search -WARN: shouldBeEqualToString() expects string arguments -WARN: shouldBe() expects function or string arguments -FAIL urlPatternComponent should be undefined (of type undefined). Was (café) (of type string). -Component: hash -PASS urlPatternComponent is "*" +PASS var pattern = new URLPattern(...errorEntry.pattern) threw exception TypeError: Current codepoint is not ascii. Testing: {"pattern":[{"hash":"(café)"}],"expected_obj":"error"} -Component: protocol -PASS urlPatternComponent is "*" -Component: username -PASS urlPatternComponent is "*" -Component: password -PASS urlPatternComponent is "*" -Component: hostname -PASS urlPatternComponent is "*" -Component: port -PASS urlPatternComponent is "*" -Component: password -PASS urlPatternComponent is "*" -Component: pathname -PASS urlPatternComponent is "*" -Component: search -WARN: shouldBeEqualToString() expects string arguments -WARN: shouldBe() expects function or string arguments -FAIL urlPatternComponent should be undefined (of type undefined). Was * (of type string). -Component: hash -PASS urlPatternComponent is "(café)" +PASS var pattern = new URLPattern(...errorEntry.pattern) threw exception TypeError: Current codepoint is not ascii. Testing: {"pattern":[{"protocol":":café"}],"inputs":[{"protocol":"foo"}],"expected_match":{"protocol":{"input":"foo","groups":{"café":"foo"}}}} Component: protocol PASS urlPatternComponent is ":café" @@ -2737,7 +2623,7 @@ Component: hash PASS urlPatternComponent is ":㐀" Testing: {"pattern":[{"protocol":"(.*)"}],"inputs":[{"protocol":"café"}],"expected_obj":{"protocol":"*"},"expected_match":null} Component: protocol -FAIL urlPatternComponent should be *. Was (.*). +PASS urlPatternComponent is "*" Component: username PASS urlPatternComponent is "*" Component: password @@ -2756,7 +2642,7 @@ Component: hash PASS urlPatternComponent is "*" Testing: {"pattern":[{"protocol":"(.*)"}],"inputs":[{"protocol":"cafe"}],"expected_obj":{"protocol":"*"},"expected_match":{"protocol":{"input":"cafe","groups":{"0":"cafe"}}}} Component: protocol -FAIL urlPatternComponent should be *. Was (.*). +PASS urlPatternComponent is "*" Component: username PASS urlPatternComponent is "*" Component: password @@ -2796,7 +2682,7 @@ Testing: {"pattern":[{"username":"caf%C3%A9"}],"inputs":[{"username":"café"}] Component: protocol PASS urlPatternComponent is "*" Component: username -PASS urlPatternComponent is "caf%C3%A9" +FAIL urlPatternComponent should be caf%C3%A9. Was café. Component: password PASS urlPatternComponent is "*" Component: hostname @@ -2834,7 +2720,7 @@ Testing: {"pattern":[{"username":"caf%c3%a9"}],"inputs":[{"username":"café"}] Component: protocol PASS urlPatternComponent is "*" Component: username -PASS urlPatternComponent is "caf%c3%a9" +FAIL urlPatternComponent should be caf%c3%a9. Was café. Component: password PASS urlPatternComponent is "*" Component: hostname @@ -2855,13 +2741,13 @@ PASS urlPatternComponent is "*" Component: username PASS urlPatternComponent is "*" Component: password -PASS urlPatternComponent is "caf%C3%A9" +FAIL urlPatternComponent should be caf%C3%A9. Was café. Component: hostname PASS urlPatternComponent is "*" Component: port PASS urlPatternComponent is "*" Component: password -PASS urlPatternComponent is "caf%C3%A9" +FAIL urlPatternComponent should be caf%C3%A9. Was café. Component: pathname PASS urlPatternComponent is "*" Component: search @@ -2893,13 +2779,13 @@ PASS urlPatternComponent is "*" Component: username PASS urlPatternComponent is "*" Component: password -PASS urlPatternComponent is "caf%c3%a9" +FAIL urlPatternComponent should be caf%c3%a9. Was café. Component: hostname PASS urlPatternComponent is "*" Component: port PASS urlPatternComponent is "*" Component: password -PASS urlPatternComponent is "caf%c3%a9" +FAIL urlPatternComponent should be caf%c3%a9. Was café. Component: pathname PASS urlPatternComponent is "*" Component: search @@ -3002,26 +2888,7 @@ PASS urlPatternComponent is "*" Component: hash PASS urlPatternComponent is "*" Testing: {"pattern":[{"protocol":"http","port":"80 "}],"inputs":[{"protocol":"http","port":"80"}],"expected_obj":"error"} -Component: protocol -PASS urlPatternComponent is "http" -Component: username -PASS urlPatternComponent is "*" -Component: password -PASS urlPatternComponent is "*" -Component: hostname -PASS urlPatternComponent is "*" -Component: port -FAIL urlPatternComponent should be 80 . Was . -Component: password -PASS urlPatternComponent is "*" -Component: pathname -PASS urlPatternComponent is "*" -Component: search -WARN: shouldBeEqualToString() expects string arguments -WARN: shouldBe() expects function or string arguments -FAIL urlPatternComponent should be undefined (of type undefined). Was * (of type string). -Component: hash -PASS urlPatternComponent is "*" +FAIL var pattern = new URLPattern(...errorEntry.pattern) should throw an exception. Was undefined. Testing: {"pattern":[{"port":"80"}],"inputs":[{"protocol":"http","port":"80"}],"expected_match":null} Component: protocol PASS urlPatternComponent is "*" @@ -3089,7 +2956,7 @@ PASS urlPatternComponent is "*" Component: hostname PASS urlPatternComponent is "*" Component: port -FAIL urlPatternComponent should be *. Was (.*). +PASS urlPatternComponent is "*" Component: password PASS urlPatternComponent is "*" Component: pathname @@ -3437,7 +3304,7 @@ PASS urlPatternComponent is "*" Component: pathname PASS urlPatternComponent is "*" Component: search -FAIL urlPatternComponent should be q=caf%C3%A9. Was q=café. +FAIL urlPatternComponent should be q=caf%C3%A9. Was q=caf%C3%83%C2%A9. Component: hash PASS urlPatternComponent is "*" Testing: {"pattern":[{"search":"q=caf%c3%a9"}],"inputs":[{"search":"q=café"}],"expected_match":null} @@ -3496,7 +3363,7 @@ PASS urlPatternComponent is "*" Component: search PASS urlPatternComponent is "*" Component: hash -FAIL urlPatternComponent should be caf%C3%A9. Was café. +FAIL urlPatternComponent should be caf%C3%A9. Was caf%C3%83%C2%A9. Testing: {"pattern":[{"hash":"caf%c3%a9"}],"inputs":[{"hash":"café"}],"expected_match":null} Component: protocol PASS urlPatternComponent is "*" diff --git a/LayoutTests/fast/urlpattern/urlpattern-component.html b/LayoutTests/fast/urlpattern/urlpattern-component.html index 8f35677b67680..1d51cb1e7b6ff 100644 --- a/LayoutTests/fast/urlpattern/urlpattern-component.html +++ b/LayoutTests/fast/urlpattern/urlpattern-component.html @@ -2882,9 +2882,14 @@ function executeURLPatternConstructor(jsonArray) { // Iterate through each object in the array jsonArray.forEach(entry => { - debug("Testing: " + JSON.stringify(entry)); + errorEntry = entry; + if (errorEntry.expected_obj === 'error' && !entry.pattern[0]['pathname']) { + shouldThrow("var pattern = new URLPattern(...errorEntry.pattern)"); + return; + } + const pattern = new URLPattern(...entry.pattern); entry.expected_obj = entry.expected_obj || {}; diff --git a/LayoutTests/http/tests/cookies/accept-partitioned-first-and-third-party-cookies-expected.txt b/LayoutTests/http/tests/cookies/accept-partitioned-first-and-third-party-cookies.https-expected.txt similarity index 89% rename from LayoutTests/http/tests/cookies/accept-partitioned-first-and-third-party-cookies-expected.txt rename to LayoutTests/http/tests/cookies/accept-partitioned-first-and-third-party-cookies.https-expected.txt index 8bede6ad5c9d7..2585e85ed189d 100644 --- a/LayoutTests/http/tests/cookies/accept-partitioned-first-and-third-party-cookies-expected.txt +++ b/LayoutTests/http/tests/cookies/accept-partitioned-first-and-third-party-cookies.https-expected.txt @@ -16,7 +16,7 @@ Cookies are: test_cookie = 1 -------- Frame: '' -------- -Cookies are: test_cookie = 1 +Cookies are: -------- Frame: '' @@ -26,4 +26,9 @@ Cookies are: test_cookie = 1 -------- Frame: '' -------- +Cookies are: test_cookie = 1 + +-------- +Frame: '' +-------- diff --git a/LayoutTests/http/tests/cookies/accept-partitioned-first-and-third-party-cookies.html b/LayoutTests/http/tests/cookies/accept-partitioned-first-and-third-party-cookies.https.html similarity index 51% rename from LayoutTests/http/tests/cookies/accept-partitioned-first-and-third-party-cookies.html rename to LayoutTests/http/tests/cookies/accept-partitioned-first-and-third-party-cookies.https.html index e00a43331e196..2d2874192727b 100644 --- a/LayoutTests/http/tests/cookies/accept-partitioned-first-and-third-party-cookies.html +++ b/LayoutTests/http/tests/cookies/accept-partitioned-first-and-third-party-cookies.https.html @@ -1,4 +1,4 @@ - + @@ -7,8 +7,8 @@ jsTestIsAsync = true; const iframeUrls = { - echoCookies : "http://localhost:8000/cookies/resources/echo-cookies.py", - resetCookies : "http://localhost:8000/cookies/resources/reset-cookies.html" + echoCookies : "https://localhost:8443/cookies/resources/echo-cookies.py", + resetCookies : "https://localhost:8443/cookies/resources/reset-cookies.html" }; function injectThirdPartyIframe(url) { @@ -19,7 +19,7 @@ } function setCookieInRedirect(hashValue) { - document.location.href = "http://localhost:8000/cookies/resources/set-cookie-and-redirect-back.py?isPartitioned=True&redirectBackTo=http://127.0.0.1:8000/cookies/accept-partitioned-first-and-third-party-cookies.html#" + hashValue; + document.location.href = "https://localhost:8443/cookies/resources/set-cookie-and-redirect-back.py?isPartitioned=True&redirectBackTo=https://127.0.0.1:8443/cookies/accept-partitioned-first-and-third-party-cookies.https.html#" + hashValue; } function runNextTestOrFinish() { @@ -30,6 +30,9 @@ switch (document.location.hash) { case "": + internals.setTrackingPreventionEnabled(true); + testRunner.setStatisticsIsRunningTest(true); + testRunner.setOnlyAcceptFirstPartyCookies(false); testRunner.dumpChildFramesAsText(); document.location.hash = "1"; injectThirdPartyIframe(iframeUrls.resetCookies); @@ -40,28 +43,41 @@ case "#2": document.location.hash = "3"; // Should see one cookie. - injectThirdPartyIframe(iframeUrls.echoCookies); + injectThirdPartyIframe(`https://localhost:8443/cookies/resources/set-cookie-and-redirect-back.py?isPartitioned=True&redirectBackTo=${iframeUrls.echoCookies}`); break; case "#3": document.location.hash = "4"; - testRunner.setOnlyAcceptFirstPartyCookies(true); - // Should see one cookie. - injectThirdPartyIframe(iframeUrls.echoCookies); + testRunner.setStatisticsShouldBlockThirdPartyCookies(true, () => { + // Should not have cookies. + injectThirdPartyIframe(iframeUrls.echoCookies); + }, true); break; case "#4": document.location.hash = "5"; - // Should see one cookie. - testRunner.setOnlyAcceptFirstPartyCookies(false); - injectThirdPartyIframe(iframeUrls.echoCookies); + testRunner.setStatisticsHasHadUserInteraction("https://127.0.0.1:8443", true, () => { + // Should see one cookie. + injectThirdPartyIframe(iframeUrls.echoCookies); + }); break; case "#5": document.location.hash = "6"; - injectThirdPartyIframe(iframeUrls.resetCookies); + testRunner.setStatisticsShouldBlockThirdPartyCookies(false, () => { + // Should see one cookie. + injectThirdPartyIframe(iframeUrls.echoCookies); + }, true); break; case "#6": + document.location.hash = "7"; + injectThirdPartyIframe(iframeUrls.resetCookies); + break; + case "#7": + internals.setTrackingPreventionEnabled(false); + testRunner.setStatisticsIsRunningTest(false); finishJSTest(); break; default: + internals.setTrackingPreventionEnabled(false); + testRunner.setStatisticsIsRunningTest(false); testFailed("Unknown location hash value."); finishJSTest(); } diff --git a/LayoutTests/http/tests/cookies/resources/set-cookie-and-redirect-back.py b/LayoutTests/http/tests/cookies/resources/set-cookie-and-redirect-back.py index 32a0c56e0d24f..1f411353eab7f 100755 --- a/LayoutTests/http/tests/cookies/resources/set-cookie-and-redirect-back.py +++ b/LayoutTests/http/tests/cookies/resources/set-cookie-and-redirect-back.py @@ -9,7 +9,7 @@ partitionedAttr = "" if parse_qs(os.environ.get('QUERY_STRING', ''), keep_blank_values=True).get('isPartitioned', [None])[0]: - partitionedAttr = "; Partitioned" + partitionedSecureSameSiteAttr = "; Partitioned; Secure; SameSite=None" sys.stdout.write('Content-Type: text/html\r\n') @@ -18,7 +18,7 @@ sys.stdout.write( 'status: 302\r\n' 'Set-Cookie: test_cookie=1; expires={} GMT; Max-Age=86400{}\r\n' - 'Location: {}\r\n\r\n'.format(expires.strftime('%a, %d-%b-%Y %H:%M:%S'), partitionedAttr, redirect_back_to) + 'Location: {}\r\n\r\n'.format(expires.strftime('%a, %d-%b-%Y %H:%M:%S'), partitionedSecureSameSiteAttr, redirect_back_to) ) else: sys.stdout.write( diff --git a/LayoutTests/http/tests/media/media-stream/enumerate-devices-source-id.html b/LayoutTests/http/tests/media/media-stream/enumerate-devices-source-id.html index ae2bc05e39dd2..6c22687e2bf62 100644 --- a/LayoutTests/http/tests/media/media-stream/enumerate-devices-source-id.html +++ b/LayoutTests/http/tests/media/media-stream/enumerate-devices-source-id.html @@ -35,7 +35,7 @@ if (originInfo[device.deviceId] != device.kind) testFailed(`: duplicate device IDs for ${device.kind} and ${originInfo[device.deviceId]} in ${origin}/${self.origin}`); - if (Object.keys(originInfo).length > 7) + if (Object.keys(originInfo).length > 8) testFailed(`: more than seven unique device IDs in ${origin}/${self.origin}`); } diff --git a/LayoutTests/imported/blink/fast/forms/select/select-text-transform-expected.html b/LayoutTests/imported/blink/fast/forms/select/select-text-transform-expected.html index 82b2c9bb7a118..9441c46e6bf42 100644 --- a/LayoutTests/imported/blink/fast/forms/select/select-text-transform-expected.html +++ b/LayoutTests/imported/blink/fast/forms/select/select-text-transform-expected.html @@ -27,9 +27,9 @@ SS SSSS
    - - - ß ßß + + + Ss Ssß
    diff --git a/LayoutTests/imported/w3c/resources/resource-files.json b/LayoutTests/imported/w3c/resources/resource-files.json index 2e33f8da2d028..e75bf4289b49c 100644 --- a/LayoutTests/imported/w3c/resources/resource-files.json +++ b/LayoutTests/imported/w3c/resources/resource-files.json @@ -10129,7 +10129,6 @@ "web-platform-tests/html/semantics/interactive-elements/the-details-element/details-add-summary-ref.html", "web-platform-tests/html/semantics/interactive-elements/the-details-element/support/empty-html-document.html", "web-platform-tests/html/semantics/interactive-elements/the-dialog-element/backdrop-descendant-selector-ref.html", - "web-platform-tests/html/semantics/interactive-elements/the-dialog-element/backdrop-does-not-inherit-ref.html", "web-platform-tests/html/semantics/interactive-elements/the-dialog-element/backdrop-dynamic-display-none-ref.html", "web-platform-tests/html/semantics/interactive-elements/the-dialog-element/backdrop-dynamic-style-change-ref.html", "web-platform-tests/html/semantics/interactive-elements/the-dialog-element/backdrop-in-flow-ref.html", @@ -10153,6 +10152,7 @@ "web-platform-tests/html/semantics/interactive-elements/the-dialog-element/modal-dialog-sibling-ref.html", "web-platform-tests/html/semantics/interactive-elements/the-dialog-element/pass-dialog-ref.html", "web-platform-tests/html/semantics/interactive-elements/the-dialog-element/removed-element-is-removed-from-top-layer-ref.html", + "web-platform-tests/html/semantics/interactive-elements/the-dialog-element/top-layer-backdrop-remove-add-ordering-ref.html", "web-platform-tests/html/semantics/interactive-elements/the-dialog-element/top-layer-containing-block-ref.html", "web-platform-tests/html/semantics/interactive-elements/the-dialog-element/top-layer-display-none-ref.html", "web-platform-tests/html/semantics/interactive-elements/the-dialog-element/top-layer-nesting-ref.html", diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/w3c-import.log index e4318428e51de..1651b53bfeb07 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/w3c-import.log +++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/w3c-import.log @@ -15,3 +15,4 @@ None ------------------------------------------------------------------------ List of files: /LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.any.js +/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey_vectors.js diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.any-expected.txt index 50c625db0f4a3..47ca15b2ffbe7 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.any-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.any-expected.txt @@ -1,6 +1,86 @@ CONSOLE MESSAGE: AES-CBC and AES-CTR do not provide authentication by default, and implementing it manually can result in minor, but serious mistakes. We recommended using authenticated encryption like AES-GCM to protect against chosen-ciphertext attacks. PASS setup +PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 public key keys using spki and RSA-OAEP +PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 public key keys using jwk and RSA-OAEP +PASS Can wrap and unwrap RSA-PSS public key keys using spki and RSA-OAEP +PASS Can wrap and unwrap RSA-PSS public key keys using jwk and RSA-OAEP +PASS Can wrap and unwrap RSA-OAEP public key keys using spki and RSA-OAEP +PASS Can wrap and unwrap RSA-OAEP public key keys using jwk and RSA-OAEP +PASS Can wrap and unwrap ECDSA public key keys using spki and RSA-OAEP +PASS Can wrap and unwrap ECDSA public key keys using jwk and RSA-OAEP +PASS Can wrap and unwrap ECDSA private key keys using pkcs8 and RSA-OAEP +PASS Can wrap and unwrap ECDSA private key keys as non-extractable using pkcs8 and RSA-OAEP +PASS Can wrap and unwrap ECDSA private key keys using jwk and RSA-OAEP +PASS Can wrap and unwrap ECDSA private key keys as non-extractable using jwk and RSA-OAEP +PASS Can unwrap ECDSA private key non-extractable keys using jwk and RSA-OAEP +PASS Can wrap and unwrap ECDH public key keys using spki and RSA-OAEP +PASS Can wrap and unwrap ECDH public key keys using jwk and RSA-OAEP +PASS Can wrap and unwrap ECDH private key keys using pkcs8 and RSA-OAEP +PASS Can wrap and unwrap ECDH private key keys as non-extractable using pkcs8 and RSA-OAEP +PASS Can wrap and unwrap ECDH private key keys using jwk and RSA-OAEP +PASS Can wrap and unwrap ECDH private key keys as non-extractable using jwk and RSA-OAEP +PASS Can unwrap ECDH private key non-extractable keys using jwk and RSA-OAEP +PASS Can wrap and unwrap Ed25519 public key keys using spki and RSA-OAEP +PASS Can wrap and unwrap Ed25519 public key keys using jwk and RSA-OAEP +PASS Can wrap and unwrap Ed25519 private key keys using pkcs8 and RSA-OAEP +PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using pkcs8 and RSA-OAEP +PASS Can wrap and unwrap Ed25519 private key keys using jwk and RSA-OAEP +PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using jwk and RSA-OAEP +PASS Can unwrap Ed25519 private key non-extractable keys using jwk and RSA-OAEP +PASS Can wrap and unwrap X25519 public key keys using spki and RSA-OAEP +PASS Can wrap and unwrap X25519 public key keys using jwk and RSA-OAEP +PASS Can wrap and unwrap X25519 private key keys using pkcs8 and RSA-OAEP +PASS Can wrap and unwrap X25519 private key keys as non-extractable using pkcs8 and RSA-OAEP +PASS Can wrap and unwrap X25519 private key keys using jwk and RSA-OAEP +PASS Can wrap and unwrap X25519 private key keys as non-extractable using jwk and RSA-OAEP +FAIL Can unwrap X25519 private key non-extractable keys using jwk and RSA-OAEP assert_unreached: Unwrapping a non-extractable JWK as extractable should fail Reached unreachable code +PASS Can wrap and unwrap AES-CTR keys using raw and RSA-OAEP +PASS Can wrap and unwrap AES-CTR keys as non-extractable using raw and RSA-OAEP +PASS Can wrap and unwrap AES-CTR keys using jwk and RSA-OAEP +PASS Can wrap and unwrap AES-CTR keys as non-extractable using jwk and RSA-OAEP +PASS Can unwrap AES-CTR non-extractable keys using jwk and RSA-OAEP +PASS Can wrap and unwrap AES-CBC keys using raw and RSA-OAEP +PASS Can wrap and unwrap AES-CBC keys as non-extractable using raw and RSA-OAEP +PASS Can wrap and unwrap AES-CBC keys using jwk and RSA-OAEP +PASS Can wrap and unwrap AES-CBC keys as non-extractable using jwk and RSA-OAEP +PASS Can unwrap AES-CBC non-extractable keys using jwk and RSA-OAEP +PASS Can wrap and unwrap AES-GCM keys using raw and RSA-OAEP +PASS Can wrap and unwrap AES-GCM keys as non-extractable using raw and RSA-OAEP +PASS Can wrap and unwrap AES-GCM keys using jwk and RSA-OAEP +PASS Can wrap and unwrap AES-GCM keys as non-extractable using jwk and RSA-OAEP +PASS Can unwrap AES-GCM non-extractable keys using jwk and RSA-OAEP +PASS Can wrap and unwrap AES-KW keys using raw and RSA-OAEP +PASS Can wrap and unwrap AES-KW keys as non-extractable using raw and RSA-OAEP +PASS Can wrap and unwrap AES-KW keys using jwk and RSA-OAEP +PASS Can wrap and unwrap AES-KW keys as non-extractable using jwk and RSA-OAEP +PASS Can unwrap AES-KW non-extractable keys using jwk and RSA-OAEP +PASS Can wrap and unwrap HMAC keys using raw and RSA-OAEP +PASS Can wrap and unwrap HMAC keys as non-extractable using raw and RSA-OAEP +PASS Can wrap and unwrap HMAC keys using jwk and RSA-OAEP +PASS Can wrap and unwrap HMAC keys as non-extractable using jwk and RSA-OAEP +PASS Can unwrap HMAC non-extractable keys using jwk and RSA-OAEP +PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 public key keys using spki and AES-CTR +PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 public key keys using jwk and AES-CTR +PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys using pkcs8 and AES-CTR +PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys as non-extractable using pkcs8 and AES-CTR +PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys using jwk and AES-CTR +PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys as non-extractable using jwk and AES-CTR +PASS Can unwrap RSASSA-PKCS1-v1_5 private key non-extractable keys using jwk and AES-CTR +PASS Can wrap and unwrap RSA-PSS public key keys using spki and AES-CTR +PASS Can wrap and unwrap RSA-PSS public key keys using jwk and AES-CTR +PASS Can wrap and unwrap RSA-PSS private key keys using pkcs8 and AES-CTR +PASS Can wrap and unwrap RSA-PSS private key keys as non-extractable using pkcs8 and AES-CTR +PASS Can wrap and unwrap RSA-PSS private key keys using jwk and AES-CTR +PASS Can wrap and unwrap RSA-PSS private key keys as non-extractable using jwk and AES-CTR +PASS Can unwrap RSA-PSS private key non-extractable keys using jwk and AES-CTR +PASS Can wrap and unwrap RSA-OAEP public key keys using spki and AES-CTR +PASS Can wrap and unwrap RSA-OAEP public key keys using jwk and AES-CTR +PASS Can wrap and unwrap RSA-OAEP private key keys using pkcs8 and AES-CTR +PASS Can wrap and unwrap RSA-OAEP private key keys as non-extractable using pkcs8 and AES-CTR +PASS Can wrap and unwrap RSA-OAEP private key keys using jwk and AES-CTR +PASS Can wrap and unwrap RSA-OAEP private key keys as non-extractable using jwk and AES-CTR +PASS Can unwrap RSA-OAEP private key non-extractable keys using jwk and AES-CTR PASS Can wrap and unwrap ECDSA public key keys using spki and AES-CTR PASS Can wrap and unwrap ECDSA public key keys using jwk and AES-CTR PASS Can wrap and unwrap ECDSA private key keys using pkcs8 and AES-CTR @@ -22,6 +102,13 @@ PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using pkcs8 PASS Can wrap and unwrap Ed25519 private key keys using jwk and AES-CTR PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using jwk and AES-CTR PASS Can unwrap Ed25519 private key non-extractable keys using jwk and AES-CTR +PASS Can wrap and unwrap X25519 public key keys using spki and AES-CTR +PASS Can wrap and unwrap X25519 public key keys using jwk and AES-CTR +PASS Can wrap and unwrap X25519 private key keys using pkcs8 and AES-CTR +PASS Can wrap and unwrap X25519 private key keys as non-extractable using pkcs8 and AES-CTR +PASS Can wrap and unwrap X25519 private key keys using jwk and AES-CTR +PASS Can wrap and unwrap X25519 private key keys as non-extractable using jwk and AES-CTR +FAIL Can unwrap X25519 private key non-extractable keys using jwk and AES-CTR assert_unreached: Unwrapping a non-extractable JWK as extractable should fail Reached unreachable code PASS Can wrap and unwrap AES-CTR keys using raw and AES-CTR PASS Can wrap and unwrap AES-CTR keys as non-extractable using raw and AES-CTR PASS Can wrap and unwrap AES-CTR keys using jwk and AES-CTR @@ -47,27 +134,27 @@ PASS Can wrap and unwrap HMAC keys as non-extractable using raw and AES-CTR PASS Can wrap and unwrap HMAC keys using jwk and AES-CTR PASS Can wrap and unwrap HMAC keys as non-extractable using jwk and AES-CTR PASS Can unwrap HMAC non-extractable keys using jwk and AES-CTR -PASS Can wrap and unwrap RSA-OAEP public key keys using spki and AES-CTR -PASS Can wrap and unwrap RSA-OAEP public key keys using jwk and AES-CTR -PASS Can wrap and unwrap RSA-OAEP private key keys using pkcs8 and AES-CTR -PASS Can wrap and unwrap RSA-OAEP private key keys as non-extractable using pkcs8 and AES-CTR -PASS Can wrap and unwrap RSA-OAEP private key keys using jwk and AES-CTR -PASS Can wrap and unwrap RSA-OAEP private key keys as non-extractable using jwk and AES-CTR -PASS Can unwrap RSA-OAEP private key non-extractable keys using jwk and AES-CTR -PASS Can wrap and unwrap RSA-PSS public key keys using spki and AES-CTR -PASS Can wrap and unwrap RSA-PSS public key keys using jwk and AES-CTR -PASS Can wrap and unwrap RSA-PSS private key keys using pkcs8 and AES-CTR -PASS Can wrap and unwrap RSA-PSS private key keys as non-extractable using pkcs8 and AES-CTR -PASS Can wrap and unwrap RSA-PSS private key keys using jwk and AES-CTR -PASS Can wrap and unwrap RSA-PSS private key keys as non-extractable using jwk and AES-CTR -PASS Can unwrap RSA-PSS private key non-extractable keys using jwk and AES-CTR -PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 public key keys using spki and AES-CTR -PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 public key keys using jwk and AES-CTR -PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys using pkcs8 and AES-CTR -PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys as non-extractable using pkcs8 and AES-CTR -PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys using jwk and AES-CTR -PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys as non-extractable using jwk and AES-CTR -PASS Can unwrap RSASSA-PKCS1-v1_5 private key non-extractable keys using jwk and AES-CTR +PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 public key keys using spki and AES-CBC +PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 public key keys using jwk and AES-CBC +PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys using pkcs8 and AES-CBC +PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys as non-extractable using pkcs8 and AES-CBC +PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys using jwk and AES-CBC +PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys as non-extractable using jwk and AES-CBC +PASS Can unwrap RSASSA-PKCS1-v1_5 private key non-extractable keys using jwk and AES-CBC +PASS Can wrap and unwrap RSA-PSS public key keys using spki and AES-CBC +PASS Can wrap and unwrap RSA-PSS public key keys using jwk and AES-CBC +PASS Can wrap and unwrap RSA-PSS private key keys using pkcs8 and AES-CBC +PASS Can wrap and unwrap RSA-PSS private key keys as non-extractable using pkcs8 and AES-CBC +PASS Can wrap and unwrap RSA-PSS private key keys using jwk and AES-CBC +PASS Can wrap and unwrap RSA-PSS private key keys as non-extractable using jwk and AES-CBC +PASS Can unwrap RSA-PSS private key non-extractable keys using jwk and AES-CBC +PASS Can wrap and unwrap RSA-OAEP public key keys using spki and AES-CBC +PASS Can wrap and unwrap RSA-OAEP public key keys using jwk and AES-CBC +PASS Can wrap and unwrap RSA-OAEP private key keys using pkcs8 and AES-CBC +PASS Can wrap and unwrap RSA-OAEP private key keys as non-extractable using pkcs8 and AES-CBC +PASS Can wrap and unwrap RSA-OAEP private key keys using jwk and AES-CBC +PASS Can wrap and unwrap RSA-OAEP private key keys as non-extractable using jwk and AES-CBC +PASS Can unwrap RSA-OAEP private key non-extractable keys using jwk and AES-CBC PASS Can wrap and unwrap ECDSA public key keys using spki and AES-CBC PASS Can wrap and unwrap ECDSA public key keys using jwk and AES-CBC PASS Can wrap and unwrap ECDSA private key keys using pkcs8 and AES-CBC @@ -89,6 +176,13 @@ PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using pkcs8 PASS Can wrap and unwrap Ed25519 private key keys using jwk and AES-CBC PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using jwk and AES-CBC PASS Can unwrap Ed25519 private key non-extractable keys using jwk and AES-CBC +PASS Can wrap and unwrap X25519 public key keys using spki and AES-CBC +PASS Can wrap and unwrap X25519 public key keys using jwk and AES-CBC +PASS Can wrap and unwrap X25519 private key keys using pkcs8 and AES-CBC +PASS Can wrap and unwrap X25519 private key keys as non-extractable using pkcs8 and AES-CBC +PASS Can wrap and unwrap X25519 private key keys using jwk and AES-CBC +PASS Can wrap and unwrap X25519 private key keys as non-extractable using jwk and AES-CBC +FAIL Can unwrap X25519 private key non-extractable keys using jwk and AES-CBC assert_unreached: Unwrapping a non-extractable JWK as extractable should fail Reached unreachable code PASS Can wrap and unwrap AES-CTR keys using raw and AES-CBC PASS Can wrap and unwrap AES-CTR keys as non-extractable using raw and AES-CBC PASS Can wrap and unwrap AES-CTR keys using jwk and AES-CBC @@ -114,27 +208,27 @@ PASS Can wrap and unwrap HMAC keys as non-extractable using raw and AES-CBC PASS Can wrap and unwrap HMAC keys using jwk and AES-CBC PASS Can wrap and unwrap HMAC keys as non-extractable using jwk and AES-CBC PASS Can unwrap HMAC non-extractable keys using jwk and AES-CBC -PASS Can wrap and unwrap RSA-OAEP public key keys using spki and AES-CBC -PASS Can wrap and unwrap RSA-OAEP public key keys using jwk and AES-CBC -PASS Can wrap and unwrap RSA-OAEP private key keys using pkcs8 and AES-CBC -PASS Can wrap and unwrap RSA-OAEP private key keys as non-extractable using pkcs8 and AES-CBC -PASS Can wrap and unwrap RSA-OAEP private key keys using jwk and AES-CBC -PASS Can wrap and unwrap RSA-OAEP private key keys as non-extractable using jwk and AES-CBC -PASS Can unwrap RSA-OAEP private key non-extractable keys using jwk and AES-CBC -PASS Can wrap and unwrap RSA-PSS public key keys using spki and AES-CBC -PASS Can wrap and unwrap RSA-PSS public key keys using jwk and AES-CBC -PASS Can wrap and unwrap RSA-PSS private key keys using pkcs8 and AES-CBC -PASS Can wrap and unwrap RSA-PSS private key keys as non-extractable using pkcs8 and AES-CBC -PASS Can wrap and unwrap RSA-PSS private key keys using jwk and AES-CBC -PASS Can wrap and unwrap RSA-PSS private key keys as non-extractable using jwk and AES-CBC -PASS Can unwrap RSA-PSS private key non-extractable keys using jwk and AES-CBC -PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 public key keys using spki and AES-CBC -PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 public key keys using jwk and AES-CBC -PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys using pkcs8 and AES-CBC -PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys as non-extractable using pkcs8 and AES-CBC -PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys using jwk and AES-CBC -PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys as non-extractable using jwk and AES-CBC -PASS Can unwrap RSASSA-PKCS1-v1_5 private key non-extractable keys using jwk and AES-CBC +PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 public key keys using spki and AES-GCM +PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 public key keys using jwk and AES-GCM +PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys using pkcs8 and AES-GCM +PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys as non-extractable using pkcs8 and AES-GCM +PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys using jwk and AES-GCM +PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys as non-extractable using jwk and AES-GCM +PASS Can unwrap RSASSA-PKCS1-v1_5 private key non-extractable keys using jwk and AES-GCM +PASS Can wrap and unwrap RSA-PSS public key keys using spki and AES-GCM +PASS Can wrap and unwrap RSA-PSS public key keys using jwk and AES-GCM +PASS Can wrap and unwrap RSA-PSS private key keys using pkcs8 and AES-GCM +PASS Can wrap and unwrap RSA-PSS private key keys as non-extractable using pkcs8 and AES-GCM +PASS Can wrap and unwrap RSA-PSS private key keys using jwk and AES-GCM +PASS Can wrap and unwrap RSA-PSS private key keys as non-extractable using jwk and AES-GCM +PASS Can unwrap RSA-PSS private key non-extractable keys using jwk and AES-GCM +PASS Can wrap and unwrap RSA-OAEP public key keys using spki and AES-GCM +PASS Can wrap and unwrap RSA-OAEP public key keys using jwk and AES-GCM +PASS Can wrap and unwrap RSA-OAEP private key keys using pkcs8 and AES-GCM +PASS Can wrap and unwrap RSA-OAEP private key keys as non-extractable using pkcs8 and AES-GCM +PASS Can wrap and unwrap RSA-OAEP private key keys using jwk and AES-GCM +PASS Can wrap and unwrap RSA-OAEP private key keys as non-extractable using jwk and AES-GCM +PASS Can unwrap RSA-OAEP private key non-extractable keys using jwk and AES-GCM PASS Can wrap and unwrap ECDSA public key keys using spki and AES-GCM PASS Can wrap and unwrap ECDSA public key keys using jwk and AES-GCM PASS Can wrap and unwrap ECDSA private key keys using pkcs8 and AES-GCM @@ -156,6 +250,13 @@ PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using pkcs8 PASS Can wrap and unwrap Ed25519 private key keys using jwk and AES-GCM PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using jwk and AES-GCM PASS Can unwrap Ed25519 private key non-extractable keys using jwk and AES-GCM +PASS Can wrap and unwrap X25519 public key keys using spki and AES-GCM +PASS Can wrap and unwrap X25519 public key keys using jwk and AES-GCM +PASS Can wrap and unwrap X25519 private key keys using pkcs8 and AES-GCM +PASS Can wrap and unwrap X25519 private key keys as non-extractable using pkcs8 and AES-GCM +PASS Can wrap and unwrap X25519 private key keys using jwk and AES-GCM +PASS Can wrap and unwrap X25519 private key keys as non-extractable using jwk and AES-GCM +FAIL Can unwrap X25519 private key non-extractable keys using jwk and AES-GCM assert_unreached: Unwrapping a non-extractable JWK as extractable should fail Reached unreachable code PASS Can wrap and unwrap AES-CTR keys using raw and AES-GCM PASS Can wrap and unwrap AES-CTR keys as non-extractable using raw and AES-GCM PASS Can wrap and unwrap AES-CTR keys using jwk and AES-GCM @@ -181,29 +282,13 @@ PASS Can wrap and unwrap HMAC keys as non-extractable using raw and AES-GCM PASS Can wrap and unwrap HMAC keys using jwk and AES-GCM PASS Can wrap and unwrap HMAC keys as non-extractable using jwk and AES-GCM PASS Can unwrap HMAC non-extractable keys using jwk and AES-GCM -PASS Can wrap and unwrap RSA-OAEP public key keys using spki and AES-GCM -PASS Can wrap and unwrap RSA-OAEP public key keys using jwk and AES-GCM -PASS Can wrap and unwrap RSA-OAEP private key keys using pkcs8 and AES-GCM -PASS Can wrap and unwrap RSA-OAEP private key keys as non-extractable using pkcs8 and AES-GCM -PASS Can wrap and unwrap RSA-OAEP private key keys using jwk and AES-GCM -PASS Can wrap and unwrap RSA-OAEP private key keys as non-extractable using jwk and AES-GCM -PASS Can unwrap RSA-OAEP private key non-extractable keys using jwk and AES-GCM -PASS Can wrap and unwrap RSA-PSS public key keys using spki and AES-GCM -PASS Can wrap and unwrap RSA-PSS public key keys using jwk and AES-GCM -PASS Can wrap and unwrap RSA-PSS private key keys using pkcs8 and AES-GCM -PASS Can wrap and unwrap RSA-PSS private key keys as non-extractable using pkcs8 and AES-GCM -PASS Can wrap and unwrap RSA-PSS private key keys using jwk and AES-GCM -PASS Can wrap and unwrap RSA-PSS private key keys as non-extractable using jwk and AES-GCM -PASS Can unwrap RSA-PSS private key non-extractable keys using jwk and AES-GCM -PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 public key keys using spki and AES-GCM -PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 public key keys using jwk and AES-GCM -PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys using pkcs8 and AES-GCM -PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys as non-extractable using pkcs8 and AES-GCM -PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys using jwk and AES-GCM -PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys as non-extractable using jwk and AES-GCM -PASS Can unwrap RSASSA-PKCS1-v1_5 private key non-extractable keys using jwk and AES-GCM +PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 public key keys using jwk and AES-KW +PASS Can wrap and unwrap RSA-PSS public key keys using jwk and AES-KW +PASS Can wrap and unwrap RSA-OAEP public key keys using jwk and AES-KW PASS Can wrap and unwrap Ed25519 private key keys using pkcs8 and AES-KW PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using pkcs8 and AES-KW +PASS Can wrap and unwrap X25519 private key keys using pkcs8 and AES-KW +PASS Can wrap and unwrap X25519 private key keys as non-extractable using pkcs8 and AES-KW PASS Can wrap and unwrap AES-CTR keys using raw and AES-KW PASS Can wrap and unwrap AES-CTR keys as non-extractable using raw and AES-KW PASS Can wrap and unwrap AES-CBC keys using raw and AES-KW @@ -214,59 +299,4 @@ PASS Can wrap and unwrap AES-KW keys using raw and AES-KW PASS Can wrap and unwrap AES-KW keys as non-extractable using raw and AES-KW PASS Can wrap and unwrap HMAC keys using raw and AES-KW PASS Can wrap and unwrap HMAC keys as non-extractable using raw and AES-KW -PASS Can wrap and unwrap RSA-OAEP public key keys using jwk and AES-KW -PASS Can wrap and unwrap RSA-PSS public key keys using jwk and AES-KW -PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 public key keys using jwk and AES-KW -PASS Can wrap and unwrap ECDSA public key keys using spki and RSA-OAEP -PASS Can wrap and unwrap ECDSA public key keys using jwk and RSA-OAEP -PASS Can wrap and unwrap ECDSA private key keys using pkcs8 and RSA-OAEP -PASS Can wrap and unwrap ECDSA private key keys as non-extractable using pkcs8 and RSA-OAEP -PASS Can wrap and unwrap ECDSA private key keys using jwk and RSA-OAEP -PASS Can wrap and unwrap ECDSA private key keys as non-extractable using jwk and RSA-OAEP -PASS Can unwrap ECDSA private key non-extractable keys using jwk and RSA-OAEP -PASS Can wrap and unwrap ECDH public key keys using spki and RSA-OAEP -PASS Can wrap and unwrap ECDH public key keys using jwk and RSA-OAEP -PASS Can wrap and unwrap ECDH private key keys using pkcs8 and RSA-OAEP -PASS Can wrap and unwrap ECDH private key keys as non-extractable using pkcs8 and RSA-OAEP -PASS Can wrap and unwrap ECDH private key keys using jwk and RSA-OAEP -PASS Can wrap and unwrap ECDH private key keys as non-extractable using jwk and RSA-OAEP -PASS Can unwrap ECDH private key non-extractable keys using jwk and RSA-OAEP -PASS Can wrap and unwrap Ed25519 public key keys using spki and RSA-OAEP -PASS Can wrap and unwrap Ed25519 public key keys using jwk and RSA-OAEP -PASS Can wrap and unwrap Ed25519 private key keys using pkcs8 and RSA-OAEP -PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using pkcs8 and RSA-OAEP -PASS Can wrap and unwrap Ed25519 private key keys using jwk and RSA-OAEP -PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using jwk and RSA-OAEP -PASS Can unwrap Ed25519 private key non-extractable keys using jwk and RSA-OAEP -PASS Can wrap and unwrap AES-CTR keys using raw and RSA-OAEP -PASS Can wrap and unwrap AES-CTR keys as non-extractable using raw and RSA-OAEP -PASS Can wrap and unwrap AES-CTR keys using jwk and RSA-OAEP -PASS Can wrap and unwrap AES-CTR keys as non-extractable using jwk and RSA-OAEP -PASS Can unwrap AES-CTR non-extractable keys using jwk and RSA-OAEP -PASS Can wrap and unwrap AES-CBC keys using raw and RSA-OAEP -PASS Can wrap and unwrap AES-CBC keys as non-extractable using raw and RSA-OAEP -PASS Can wrap and unwrap AES-CBC keys using jwk and RSA-OAEP -PASS Can wrap and unwrap AES-CBC keys as non-extractable using jwk and RSA-OAEP -PASS Can unwrap AES-CBC non-extractable keys using jwk and RSA-OAEP -PASS Can wrap and unwrap AES-GCM keys using raw and RSA-OAEP -PASS Can wrap and unwrap AES-GCM keys as non-extractable using raw and RSA-OAEP -PASS Can wrap and unwrap AES-GCM keys using jwk and RSA-OAEP -PASS Can wrap and unwrap AES-GCM keys as non-extractable using jwk and RSA-OAEP -PASS Can unwrap AES-GCM non-extractable keys using jwk and RSA-OAEP -PASS Can wrap and unwrap AES-KW keys using raw and RSA-OAEP -PASS Can wrap and unwrap AES-KW keys as non-extractable using raw and RSA-OAEP -PASS Can wrap and unwrap AES-KW keys using jwk and RSA-OAEP -PASS Can wrap and unwrap AES-KW keys as non-extractable using jwk and RSA-OAEP -PASS Can unwrap AES-KW non-extractable keys using jwk and RSA-OAEP -PASS Can wrap and unwrap HMAC keys using raw and RSA-OAEP -PASS Can wrap and unwrap HMAC keys as non-extractable using raw and RSA-OAEP -PASS Can wrap and unwrap HMAC keys using jwk and RSA-OAEP -PASS Can wrap and unwrap HMAC keys as non-extractable using jwk and RSA-OAEP -PASS Can unwrap HMAC non-extractable keys using jwk and RSA-OAEP -PASS Can wrap and unwrap RSA-OAEP public key keys using spki and RSA-OAEP -PASS Can wrap and unwrap RSA-OAEP public key keys using jwk and RSA-OAEP -PASS Can wrap and unwrap RSA-PSS public key keys using spki and RSA-OAEP -PASS Can wrap and unwrap RSA-PSS public key keys using jwk and RSA-OAEP -PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 public key keys using spki and RSA-OAEP -PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 public key keys using jwk and RSA-OAEP diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.any.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.any.js index edb67d9e30fdb..9dd837b3bf60a 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.any.js +++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.any.js @@ -1,238 +1,256 @@ // META: title=WebCryptoAPI: wrapKey() and unwrapKey() // META: timeout=long // META: script=../util/helpers.js +// META: script=wrapKey_unwrapKey_vectors.js // Tests for wrapKey and unwrapKey round tripping var subtle = self.crypto.subtle; - var wrappers = []; // Things we wrap (and upwrap) keys with - var keys = []; // Things to wrap and unwrap - - // Generate all the keys needed, then iterate over all combinations + var wrappers = {}; // Things we wrap (and upwrap) keys with + var keys = {}; // Things to wrap and unwrap + + // There are five algorithms that can be used for wrapKey/unwrapKey. + // Generate one key with typical parameters for each kind. + // + // Note: we don't need cryptographically strong parameters for things + // like IV - just any legal value will do. + var wrappingKeysParameters = [ + { + name: "RSA-OAEP", + importParameters: {name: "RSA-OAEP", hash: "SHA-256"}, + wrapParameters: {name: "RSA-OAEP", label: new Uint8Array(8)} + }, + { + name: "AES-CTR", + importParameters: {name: "AES-CTR", length: 128}, + wrapParameters: {name: "AES-CTR", counter: new Uint8Array(16), length: 64} + }, + { + name: "AES-CBC", + importParameters: {name: "AES-CBC", length: 128}, + wrapParameters: {name: "AES-CBC", iv: new Uint8Array(16)} + }, + { + name: "AES-GCM", + importParameters: {name: "AES-GCM", length: 128}, + wrapParameters: {name: "AES-GCM", iv: new Uint8Array(16), additionalData: new Uint8Array(16), tagLength: 128} + }, + { + name: "AES-KW", + importParameters: {name: "AES-KW", length: 128}, + wrapParameters: {name: "AES-KW"} + } + ]; + + var keysToWrapParameters = [ + {algorithm: {name: "RSASSA-PKCS1-v1_5", hash: "SHA-256"}, privateUsages: ["sign"], publicUsages: ["verify"]}, + {algorithm: {name: "RSA-PSS", hash: "SHA-256"}, privateUsages: ["sign"], publicUsages: ["verify"]}, + {algorithm: {name: "RSA-OAEP", hash: "SHA-256"}, privateUsages: ["decrypt"], publicUsages: ["encrypt"]}, + {algorithm: {name: "ECDSA", namedCurve: "P-256"}, privateUsages: ["sign"], publicUsages: ["verify"]}, + {algorithm: {name: "ECDH", namedCurve: "P-256"}, privateUsages: ["deriveBits"], publicUsages: []}, + {algorithm: {name: "Ed25519" }, privateUsages: ["sign"], publicUsages: ["verify"]}, + {algorithm: {name: "Ed448" }, privateUsages: ["sign"], publicUsages: ["verify"]}, + {algorithm: {name: "X25519" }, privateUsages: ["deriveBits"], publicUsages: []}, + {algorithm: {name: "X448" }, privateUsages: ["deriveBits"], publicUsages: []}, + {algorithm: {name: "AES-CTR", length: 128}, usages: ["encrypt", "decrypt"]}, + {algorithm: {name: "AES-CBC", length: 128}, usages: ["encrypt", "decrypt"]}, + {algorithm: {name: "AES-GCM", length: 128}, usages: ["encrypt", "decrypt"]}, + {algorithm: {name: "AES-KW", length: 128}, usages: ["wrapKey", "unwrapKey"]}, + {algorithm: {name: "HMAC", length: 128, hash: "SHA-256"}, usages: ["sign", "verify"]} + ]; + + // Import all the keys needed, then iterate over all combinations // to test wrapping and unwrapping. promise_test(function() { - return Promise.all([generateWrappingKeys(), generateKeysToWrap()]) + return Promise.all([importWrappingKeys(), importKeysToWrap()]) .then(function(results) { - var promises = []; - wrappers.forEach(function(wrapper) { - keys.forEach(function(key) { - promises.push(testWrapping(wrapper, key)); - }) + wrappingKeysParameters.filter((param) => Object.keys(wrappers).includes(param.name)).forEach(function(wrapperParam) { + var wrapper = wrappers[wrapperParam.name]; + keysToWrapParameters.filter((param) => Object.keys(keys).includes(param.algorithm.name)).forEach(function(toWrapParam) { + var keyData = keys[toWrapParam.algorithm.name]; + ["raw", "spki", "pkcs8"].filter((fmt) => Object.keys(keyData).includes(fmt)).forEach(function(keyDataFormat) { + var toWrap = keyData[keyDataFormat]; + [keyDataFormat, "jwk"].forEach(function(format) { + if (wrappingIsPossible(toWrap.originalExport[format], wrapper.parameters.name)) { + testWrapping(wrapper, toWrap, format); + if (canCompareNonExtractableKeys(toWrap.key)) { + testWrappingNonExtractable(wrapper, toWrap, format); + if (format === "jwk") { + testWrappingNonExtractableAsExtractable(wrapper, toWrap); + } + } + } + }); + }); + }); }); - return Promise.allSettled(promises); + return Promise.resolve("setup done"); + }, function(err) { + return Promise.reject("setup failed: " + err.name + ': "' + err.message + '"'); }); }, "setup"); - function generateWrappingKeys() { - // There are five algorithms that can be used for wrapKey/unwrapKey. - // Generate one key with typical parameters for each kind. - // - // Note: we don't need cryptographically strong parameters for things - // like IV - just any legal value will do. - var parameters = [ - { - name: "RSA-OAEP", - generateParameters: {name: "RSA-OAEP", modulusLength: 4096, publicExponent: new Uint8Array([1,0,1]), hash: "SHA-256"}, - wrapParameters: {name: "RSA-OAEP", label: new Uint8Array(8)} - }, - { - name: "AES-CTR", - generateParameters: {name: "AES-CTR", length: 128}, - wrapParameters: {name: "AES-CTR", counter: new Uint8Array(16), length: 64} - }, - { - name: "AES-CBC", - generateParameters: {name: "AES-CBC", length: 128}, - wrapParameters: {name: "AES-CBC", iv: new Uint8Array(16)} - }, - { - name: "AES-GCM", - generateParameters: {name: "AES-GCM", length: 128}, - wrapParameters: {name: "AES-GCM", iv: new Uint8Array(16), additionalData: new Uint8Array(16), tagLength: 128} - }, - { - name: "AES-KW", - generateParameters: {name: "AES-KW", length: 128}, - wrapParameters: {name: "AES-KW"} + function importWrappingKeys() { + // Using allSettled to skip unsupported test cases. + var promises = []; + wrappingKeysParameters.forEach(function(params) { + if (params.name === "RSA-OAEP") { // we have a key pair, not just a key + var algorithm = {name: "RSA-OAEP", hash: "SHA-256"}; + wrappers[params.name] = {wrappingKey: undefined, unwrappingKey: undefined, parameters: params}; + promises.push(subtle.importKey("spki", wrappingKeyData["RSA"].spki, algorithm, true, ["wrapKey"]) + .then(function(key) { + wrappers["RSA-OAEP"].wrappingKey = key; + })); + promises.push(subtle.importKey("pkcs8", wrappingKeyData["RSA"].pkcs8, algorithm, true, ["unwrapKey"]) + .then(function(key) { + wrappers["RSA-OAEP"].unwrappingKey = key; + })); + } else { + var algorithm = {name: params.name}; + promises.push(subtle.importKey("raw", wrappingKeyData["SYMMETRIC"].raw, algorithm, true, ["wrapKey", "unwrapKey"]) + .then(function(key) { + wrappers[params.name] = {wrappingKey: key, unwrappingKey: key, parameters: params}; + })); } - ]; - + }); // Using allSettled to skip unsupported test cases. - return Promise.allSettled(parameters.map(function(params) { - return subtle.generateKey(params.generateParameters, true, ["wrapKey", "unwrapKey"]) - .then(function(key) { - var wrapper; - if (params.name === "RSA-OAEP") { // we have a key pair, not just a key - wrapper = {wrappingKey: key.publicKey, unwrappingKey: key.privateKey, parameters: params}; - } else { - wrapper = {wrappingKey: key, unwrappingKey: key, parameters: params}; - } - wrappers.push(wrapper); - return true; - }) - })); + return Promise.allSettled(promises); } + async function importAndExport(format, keyData, algorithm, keyUsages, keyType) { + var importedKey; + try { + importedKey = await subtle.importKey(format, keyData, algorithm, true, keyUsages); + keys[algorithm.name][format] = { name: algorithm.name + " " + keyType, algorithm: algorithm, usages: keyUsages, key: importedKey, originalExport: {} }; + } catch (err) { + delete keys[algorithm.name][format]; + throw("Error importing " + algorithm.name + " " + keyType + " key in '" + format + "' -" + err.name + ': "' + err.message + '"'); + }; + try { + var exportedKey = await subtle.exportKey(format, importedKey); + keys[algorithm.name][format].originalExport[format] = exportedKey; + } catch (err) { + delete keys[algorithm.name][format]; + throw("Error exporting " + algorithm.name + " '" + format + "' key -" + err.name + ': "' + err.message + '"'); + }; + try { + var jwkExportedKey = await subtle.exportKey("jwk", importedKey); + keys[algorithm.name][format].originalExport["jwk"] = jwkExportedKey; + } catch (err) { + delete keys[algorithm.name][format]; + throw("Error exporting " + algorithm.name + " '" + format + "' key to 'jwk' -" + err.name + ': "' + err.message + '"'); + }; + } - function generateKeysToWrap() { - var parameters = [ - {algorithm: {name: "RSASSA-PKCS1-v1_5", modulusLength: 1024, publicExponent: new Uint8Array([1,0,1]), hash: "SHA-256"}, privateUsages: ["sign"], publicUsages: ["verify"]}, - {algorithm: {name: "RSA-PSS", modulusLength: 1024, publicExponent: new Uint8Array([1,0,1]), hash: "SHA-256"}, privateUsages: ["sign"], publicUsages: ["verify"]}, - {algorithm: {name: "RSA-OAEP", modulusLength: 1024, publicExponent: new Uint8Array([1,0,1]), hash: "SHA-256"}, privateUsages: ["decrypt"], publicUsages: ["encrypt"]}, - {algorithm: {name: "ECDSA", namedCurve: "P-256"}, privateUsages: ["sign"], publicUsages: ["verify"]}, - {algorithm: {name: "ECDH", namedCurve: "P-256"}, privateUsages: ["deriveBits"], publicUsages: []}, - {algorithm: {name: "Ed25519" }, privateUsages: ["sign"], publicUsages: ["verify"]}, - {algorithm: {name: "Ed448" }, privateUsages: ["sign"], publicUsages: ["verify"]}, - {algorithm: {name: "X25519" }, privateUsages: ["deriveBits"], publicUsages: []}, - {algorithm: {name: "X448" }, privateUsages: ["deriveBits"], publicUsages: []}, - {algorithm: {name: "AES-CTR", length: 128}, usages: ["encrypt", "decrypt"]}, - {algorithm: {name: "AES-CBC", length: 128}, usages: ["encrypt", "decrypt"]}, - {algorithm: {name: "AES-GCM", length: 128}, usages: ["encrypt", "decrypt"]}, - {algorithm: {name: "AES-KW", length: 128}, usages: ["wrapKey", "unwrapKey"]}, - {algorithm: {name: "HMAC", length: 128, hash: "SHA-256"}, usages: ["sign", "verify"]} - ]; - - // Using allSettled to skip unsupported test cases. - return Promise.allSettled(parameters.map(function(params) { - var usages; - if ("usages" in params) { - usages = params.usages; + function importKeysToWrap() { + var promises = []; + keysToWrapParameters.forEach(function(params) { + if ("publicUsages" in params) { + keys[params.algorithm.name] = {}; + var keyData = toWrapKeyDataFromAlg(params.algorithm.name); + promises.push(importAndExport("spki", keyData.spki, params.algorithm, params.publicUsages, "public key ")); + promises.push(importAndExport("pkcs8", keyData.pkcs8, params.algorithm, params.privateUsages, "private key ")); } else { - usages = params.publicUsages.concat(params.privateUsages); + keys[params.algorithm.name] = {}; + promises.push(importAndExport("raw", toWrapKeyData["SYMMETRIC"].raw, params.algorithm, params.usages, "")); } - - return subtle.generateKey(params.algorithm, true, usages) - .then(function(result) { - if (result.constructor === CryptoKey) { - keys.push({name: params.algorithm.name, algorithm: params.algorithm, usages: params.usages, key: result}); - } else { - keys.push({name: params.algorithm.name + " public key", algorithm: params.algorithm, usages: params.publicUsages, key: result.publicKey}); - keys.push({name: params.algorithm.name + " private key", algorithm: params.algorithm, usages: params.privateUsages, key: result.privateKey}); - } - return true; - }); - })); + }); + // Using allSettled to skip unsupported test cases. + return Promise.allSettled(promises); } // Can we successfully "round-trip" (wrap, then unwrap, a key)? - function testWrapping(wrapper, toWrap) { - var formats; + function testWrapping(wrapper, toWrap, fmt) { + promise_test(async() => { + try { + var wrappedResult = await subtle.wrapKey(fmt, toWrap.key, wrapper.wrappingKey, wrapper.parameters.wrapParameters); + var unwrappedResult = await subtle.unwrapKey(fmt, wrappedResult, wrapper.unwrappingKey, wrapper.parameters.wrapParameters, toWrap.algorithm, true, toWrap.usages); + assert_goodCryptoKey(unwrappedResult, toWrap.algorithm, true, toWrap.usages, toWrap.key.type); + var roundTripExport = await subtle.exportKey(fmt, unwrappedResult); + assert_true(equalExport(toWrap.originalExport[fmt], roundTripExport), "Post-wrap export matches original export"); + } catch (err) { + if (err instanceof AssertionError) { + throw err; + } + assert_unreached("Round trip for extractable key threw an error - " + err.name + ': "' + err.message + '"'); + } + }, "Can wrap and unwrap " + toWrap.name + "keys using " + fmt + " and " + wrapper.parameters.name); + } - if (toWrap.name.includes("private")) { - formats = ["pkcs8", "jwk"]; - } else if (toWrap.name.includes("public")) { - formats = ["spki", "jwk"] - } else { - formats = ["raw", "jwk"] - } + function testWrappingNonExtractable(wrapper, toWrap, fmt) { + promise_test(async() => { + try { + var wrappedResult = await subtle.wrapKey(fmt, toWrap.key, wrapper.wrappingKey, wrapper.parameters.wrapParameters); + var unwrappedResult = await subtle.unwrapKey(fmt, wrappedResult, wrapper.unwrappingKey, wrapper.parameters.wrapParameters, toWrap.algorithm, false, toWrap.usages); + assert_goodCryptoKey(unwrappedResult, toWrap.algorithm, false, toWrap.usages, toWrap.key.type); + var result = await equalKeys(toWrap.key, unwrappedResult); + assert_true(result, "Unwrapped key matches original"); + } catch (err) { + if (err instanceof AssertionError) { + throw err; + } + assert_unreached("Round trip for key unwrapped non-extractable threw an error - " + err.name + ': "' + err.message + '"'); + }; + }, "Can wrap and unwrap " + toWrap.name + "keys as non-extractable using " + fmt + " and " + wrapper.parameters.name); + } - return Promise.all(formats.map(function(fmt) { - var originalExport; - return subtle.exportKey(fmt, toWrap.key).then(function(exportedKey) { - originalExport = exportedKey; - const isPossible = wrappingIsPossible(originalExport, wrapper.parameters.name); - promise_test(function(test) { - if (!isPossible) { - return Promise.resolve().then(() => { - assert_false(false, "Wrapping is not possible"); - }) - } - return subtle.wrapKey(fmt, toWrap.key, wrapper.wrappingKey, wrapper.parameters.wrapParameters) - .then(function(wrappedResult) { - return subtle.unwrapKey(fmt, wrappedResult, wrapper.unwrappingKey, wrapper.parameters.wrapParameters, toWrap.algorithm, true, toWrap.usages); - }).then(function(unwrappedResult) { - assert_goodCryptoKey(unwrappedResult, toWrap.algorithm, true, toWrap.usages, toWrap.key.type); - return subtle.exportKey(fmt, unwrappedResult) - }).then(function(roundTripExport) { - assert_true(equalExport(originalExport, roundTripExport), "Post-wrap export matches original export"); - }, function(err) { - assert_unreached("Round trip for extractable key threw an error - " + err.name + ': "' + err.message + '"'); - }); - }, "Can wrap and unwrap " + toWrap.name + " keys using " + fmt + " and " + wrapper.parameters.name); - - if (canCompareNonExtractableKeys(toWrap.key)) { - promise_test(function(test){ - if (!isPossible) { - return Promise.resolve().then(() => { - assert_false(false, "Wrapping is not possible"); - }) - } - return subtle.wrapKey(fmt, toWrap.key, wrapper.wrappingKey, wrapper.parameters.wrapParameters) - .then(function(wrappedResult) { - return subtle.unwrapKey(fmt, wrappedResult, wrapper.unwrappingKey, wrapper.parameters.wrapParameters, toWrap.algorithm, false, toWrap.usages); - }).then(function(unwrappedResult){ - assert_goodCryptoKey(unwrappedResult, toWrap.algorithm, false, toWrap.usages, toWrap.key.type); - return equalKeys(toWrap.key, unwrappedResult); - }).then(function(result){ - assert_true(result, "Unwrapped key matches original"); - }).catch(function(err){ - assert_unreached("Round trip for key unwrapped non-extractable threw an error - " + err.name + ': "' + err.message + '"'); - }); - }, "Can wrap and unwrap " + toWrap.name + " keys as non-extractable using " + fmt + " and " + wrapper.parameters.name); - - if (fmt === "jwk") { - promise_test(function(test){ - if (!isPossible) { - return Promise.resolve().then(() => { - assert_false(false, "Wrapping is not possible"); - }) - } - var wrappedKey; - return wrapAsNonExtractableJwk(toWrap.key,wrapper).then(function(wrappedResult){ - wrappedKey = wrappedResult; - return subtle.unwrapKey("jwk", wrappedKey, wrapper.unwrappingKey, wrapper.parameters.wrapParameters, toWrap.algorithm, false, toWrap.usages); - }).then(function(unwrappedResult){ - assert_false(unwrappedResult.extractable, "Unwrapped key is non-extractable"); - return equalKeys(toWrap.key,unwrappedResult); - }).then(function(result){ - assert_true(result, "Unwrapped key matches original"); - }).catch(function(err){ - assert_unreached("Round trip for non-extractable key threw an error - " + err.name + ': "' + err.message + '"'); - }).then(function(){ - return subtle.unwrapKey("jwk", wrappedKey, wrapper.unwrappingKey, wrapper.parameters.wrapParameters, toWrap.algorithm, true, toWrap.usages); - }).then(function(unwrappedResult){ - assert_unreached("Unwrapping a non-extractable JWK as extractable should fail"); - }).catch(function(err){ - assert_equals(err.name, "DataError", "Unwrapping a non-extractable JWK as extractable fails with DataError"); - }); - }, "Can unwrap " + toWrap.name + " non-extractable keys using jwk and " + wrapper.parameters.name); - } + function testWrappingNonExtractableAsExtractable(wrapper, toWrap) { + promise_test(async() => { + var wrappedKey; + try { + var wrappedResult = await wrapAsNonExtractableJwk(toWrap.key,wrapper); + wrappedKey = wrappedResult; + var unwrappedResult = await subtle.unwrapKey("jwk", wrappedKey, wrapper.unwrappingKey, wrapper.parameters.wrapParameters, toWrap.algorithm, false, toWrap.usages); + assert_false(unwrappedResult.extractable, "Unwrapped key is non-extractable"); + var result = await equalKeys(toWrap.key,unwrappedResult); + assert_true(result, "Unwrapped key matches original"); + } catch (err) { + if (err instanceof AssertionError) { + throw err; } - }); - })); + assert_unreached("Round trip for non-extractable key threw an error - " + err.name + ': "' + err.message + '"'); + }; + try { + var unwrappedResult = await subtle.unwrapKey("jwk", wrappedKey, wrapper.unwrappingKey, wrapper.parameters.wrapParameters, toWrap.algorithm, true, toWrap.usages); + assert_unreached("Unwrapping a non-extractable JWK as extractable should fail"); + } catch (err) { + if (err instanceof AssertionError) { + throw err; + } + assert_equals(err.name, "DataError", "Unwrapping a non-extractable JWK as extractable fails with DataError"); + } + }, "Can unwrap " + toWrap.name + "non-extractable keys using jwk and " + wrapper.parameters.name); } // Implement key wrapping by hand to wrap a key as non-extractable JWK - function wrapAsNonExtractableJwk(key, wrapper){ + async function wrapAsNonExtractableJwk(key, wrapper) { var wrappingKey = wrapper.wrappingKey, encryptKey; - return subtle.exportKey("jwk",wrappingKey) - .then(function(jwkWrappingKey){ - // Update the key generation parameters to work as key import parameters - var params = Object.create(wrapper.parameters.generateParameters); - if(params.name === "AES-KW") { - params.name = "AES-CBC"; - jwkWrappingKey.alg = "A"+params.length+"CBC"; - } else if (params.name === "RSA-OAEP") { - params.modulusLength = undefined; - params.publicExponent = undefined; - } - jwkWrappingKey.key_ops = ["encrypt"]; - return subtle.importKey("jwk", jwkWrappingKey, params, true, ["encrypt"]); - }).then(function(importedWrappingKey){ - encryptKey = importedWrappingKey; - return subtle.exportKey("jwk",key); - }).then(function(exportedKey){ - exportedKey.ext = false; - var jwk = JSON.stringify(exportedKey) - if (wrappingKey.algorithm.name === "AES-KW") { - return aeskw(encryptKey, str2ab(jwk.slice(0,-1) + " ".repeat(jwk.length%8 ? 8-jwk.length%8 : 0) + "}")); - } else { - return subtle.encrypt(wrapper.parameters.wrapParameters,encryptKey,str2ab(jwk)); - } - }); + var jwkWrappingKey = await subtle.exportKey("jwk",wrappingKey); + // Update the key generation parameters to work as key import parameters + var params = Object.create(wrapper.parameters.importParameters); + if(params.name === "AES-KW") { + params.name = "AES-CBC"; + jwkWrappingKey.alg = "A"+params.length+"CBC"; + } else if (params.name === "RSA-OAEP") { + params.modulusLength = undefined; + params.publicExponent = undefined; + } + jwkWrappingKey.key_ops = ["encrypt"]; + var importedWrappingKey = await subtle.importKey("jwk", jwkWrappingKey, params, true, ["encrypt"]); + encryptKey = importedWrappingKey; + var exportedKey = await subtle.exportKey("jwk",key); + exportedKey.ext = false; + var jwk = JSON.stringify(exportedKey) + var result; + if (wrappingKey.algorithm.name === "AES-KW") { + result = await aeskw(encryptKey, str2ab(jwk.slice(0,-1) + " ".repeat(jwk.length%8 ? 8-jwk.length%8 : 0) + "}")); + } else { + result = await subtle.encrypt(wrapper.parameters.wrapParameters,encryptKey,str2ab(jwk)); + } + return result; } @@ -365,9 +383,9 @@ } // Compare two keys by using them (works for non-extractable keys) - function equalKeys(expected, got){ + async function equalKeys(expected, got){ if ( expected.algorithm.name !== got.algorithm.name ) { - return Promise.resolve(false); + return false; } var cryptParams, signParams, wrapParams, deriveParams; @@ -419,75 +437,60 @@ } if (cryptParams) { - return subtle.exportKey("jwk",expected) - .then(function(jwkExpectedKey){ - if (expected.algorithm.name === "RSA-OAEP") { - ["d","p","q","dp","dq","qi","oth"].forEach(function(field){ delete jwkExpectedKey[field]; }); - } - jwkExpectedKey.key_ops = ["encrypt"]; - return subtle.importKey("jwk", jwkExpectedKey, expected.algorithm, true, ["encrypt"]); - }).then(function(expectedEncryptKey){ - return subtle.encrypt(cryptParams, expectedEncryptKey, new Uint8Array(32)); - }).then(function(encryptedData){ - return subtle.decrypt(cryptParams, got, encryptedData); - }).then(function(decryptedData){ - var result = new Uint8Array(decryptedData); - return !result.some(x => x); - }); + var jwkExpectedKey = await subtle.exportKey("jwk", expected); + if (expected.algorithm.name === "RSA-OAEP") { + ["d","p","q","dp","dq","qi","oth"].forEach(function(field){ delete jwkExpectedKey[field]; }); + } + jwkExpectedKey.key_ops = ["encrypt"]; + var expectedEncryptKey = await subtle.importKey("jwk", jwkExpectedKey, expected.algorithm, true, ["encrypt"]); + var encryptedData = await subtle.encrypt(cryptParams, expectedEncryptKey, new Uint8Array(32)); + var decryptedData = await subtle.decrypt(cryptParams, got, encryptedData); + var result = new Uint8Array(decryptedData); + return !result.some(x => x); } else if (signParams) { var verifyKey; - return subtle.exportKey("jwk",expected) - .then(function(jwkExpectedKey){ - if (expected.algorithm.name === "RSA-PSS" || expected.algorithm.name === "RSASSA-PKCS1-v1_5") { - ["d","p","q","dp","dq","qi","oth"].forEach(function(field){ delete jwkExpectedKey[field]; }); - } - if (expected.algorithm.name === "ECDSA" || expected.algorithm.name.startsWith("Ed")) { - delete jwkExpectedKey["d"]; - } - jwkExpectedKey.key_ops = ["verify"]; - return subtle.importKey("jwk", jwkExpectedKey, expected.algorithm, true, ["verify"]); - }).then(function(expectedVerifyKey){ - verifyKey = expectedVerifyKey; - return subtle.sign(signParams, got, new Uint8Array(32)); - }).then(function(signature){ - return subtle.verify(signParams, verifyKey, signature, new Uint8Array(32)); - }); + var jwkExpectedKey = await subtle.exportKey("jwk",expected); + if (expected.algorithm.name === "RSA-PSS" || expected.algorithm.name === "RSASSA-PKCS1-v1_5") { + ["d","p","q","dp","dq","qi","oth"].forEach(function(field){ delete jwkExpectedKey[field]; }); + } + if (expected.algorithm.name === "ECDSA" || expected.algorithm.name.startsWith("Ed")) { + delete jwkExpectedKey["d"]; + } + jwkExpectedKey.key_ops = ["verify"]; + var expectedVerifyKey = await subtle.importKey("jwk", jwkExpectedKey, expected.algorithm, true, ["verify"]); + verifyKey = expectedVerifyKey; + var signature = await subtle.sign(signParams, got, new Uint8Array(32)); + var result = await subtle.verify(signParams, verifyKey, signature, new Uint8Array(32)); + return result; } else if (wrapParams) { var aKeyToWrap, wrappedWithExpected; - return subtle.importKey("raw", new Uint8Array(16), "AES-CBC", true, ["encrypt"]) - .then(function(key){ - aKeyToWrap = key; - return subtle.wrapKey("raw", aKeyToWrap, expected, wrapParams); - }).then(function(wrapResult){ - wrappedWithExpected = Array.from((new Uint8Array(wrapResult)).values()); - return subtle.wrapKey("raw", aKeyToWrap, got, wrapParams); - }).then(function(wrapResult){ - var wrappedWithGot = Array.from((new Uint8Array(wrapResult)).values()); - return wrappedWithGot.every((x,i) => x === wrappedWithExpected[i]); - }); + var key = await subtle.importKey("raw",new Uint8Array(16), "AES-CBC", true, ["encrypt"]) + aKeyToWrap = key; + var wrapResult = await subtle.wrapKey("raw", aKeyToWrap, expected, wrapParams); + wrappedWithExpected = Array.from((new Uint8Array(wrapResult)).values()); + wrapResult = await subtle.wrapKey("raw", aKeyToWrap, got, wrapParams); + var wrappedWithGot = Array.from((new Uint8Array(wrapResult)).values()); + return wrappedWithGot.every((x,i) => x === wrappedWithExpected[i]); } else if (deriveParams) { var expectedDerivedBits; - return subtle.generateKey(expected.algorithm, true, ['deriveBits']).then(({ publicKey }) => { - deriveParams.public = publicKey; - return subtle.deriveBits(deriveParams, expected, 128) - }) - .then(function(result){ - expectedDerivedBits = Array.from((new Uint8Array(result)).values()); - return subtle.deriveBits(deriveParams, got, 128); - }).then(function(result){ - var gotDerivedBits = Array.from((new Uint8Array(result)).values()); - return gotDerivedBits.every((x,i) => x === expectedDerivedBits[i]); - }); + var key = await subtle.generateKey(expected.algorithm, true, ['deriveBits']); + deriveParams.public = key.publicKey; + var result = await subtle.deriveBits(deriveParams, expected, 128); + expectedDerivedBits = Array.from((new Uint8Array(result)).values()); + result = await subtle.deriveBits(deriveParams, got, 128); + var gotDerivedBits = Array.from((new Uint8Array(result)).values()); + return gotDerivedBits.every((x,i) => x === expectedDerivedBits[i]); } } // Raw AES encryption - function aes( k, p ) { - return subtle.encrypt({name: "AES-CBC", iv: new Uint8Array(16) }, k, p).then(function(ciphertext){return ciphertext.slice(0,16);}); + async function aes(k, p) { + const ciphertext = await subtle.encrypt({ name: "AES-CBC", iv: new Uint8Array(16) }, k, p); + return ciphertext.slice(0, 16); } // AES Key Wrap - function aeskw(key, data) { + async function aeskw(key, data) { if (data.byteLength % 8 !== 0) { throw new Error("AES Key Wrap data must be a multiple of 8 bytes in length"); } @@ -501,7 +504,7 @@ R.push(new Uint8Array(data.slice(i,i+8))); } - function aeskw_step(j, i, final, B) { + async function aeskw_step(j, i, final, B) { A.set(new Uint8Array(B.slice(0,8))); Av.setUint32(4,Av.getUint32(4) ^ (n*j+i+1)); R[i] = new Uint8Array(B.slice(8,16)); @@ -516,18 +519,16 @@ } } - var p = new Promise(function(resolve){ - A.set(R[0],8); - resolve(aes(key,A)); - }); + A.set(R[0], 8); + let B = await aes(key, A); for(var j=0;j<6;++j) { for(var i=0;i \ No newline at end of file diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey_vectors.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey_vectors.js new file mode 100644 index 0000000000000..0c29a7df88b15 --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey_vectors.js @@ -0,0 +1,114 @@ +let wrappingKeyData = { + "RSA": { // modulusLength: 4096, hash: "SHA-256" + spki: new Uint8Array([48, 130, 2, 34, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 130, 2, 15, 0, 48, 130, 2, 10, 2, 130, 2, 1, 0, 218, 170, 246, 76, 189, 156, 216, 153, 155, 176, 221, 14, 44, 132, 103, 104, 0, 127, 100, 166, 245, 248, 104, 125, 31, 74, 155, 226, 90, 193, 184, 54, 170, 145, 111, 222, 20, 252, 19, 248, 146, 44, 190, 115, 73, 188, 52, 251, 4, 178, 121, 238, 212, 204, 34, 62, 122, 100, 203, 111, 233, 231, 210, 73, 53, 146, 147, 211, 14, 161, 109, 137, 212, 175, 226, 18, 183, 173, 103, 103, 30, 128, 31, 218, 69, 126, 234, 65, 88, 231, 160, 91, 51, 245, 77, 54, 4, 167, 192, 33, 68, 244, 163, 242, 187, 111, 209, 180, 241, 221, 107, 172, 5, 40, 134, 47, 210, 85, 8, 112, 57, 186, 29, 131, 176, 93, 116, 198, 202, 82, 108, 251, 209, 3, 72, 75, 143, 59, 44, 222, 56, 89, 69, 103, 159, 211, 160, 19, 214, 173, 77, 133, 0, 68, 219, 164, 79, 64, 238, 65, 189, 201, 248, 173, 180, 146, 196, 238, 86, 232, 215, 109, 39, 165, 162, 16, 230, 46, 134, 234, 148, 106, 34, 230, 198, 63, 231, 143, 16, 179, 208, 109, 22, 100, 54, 156, 107, 132, 28, 208, 118, 205, 217, 89, 228, 75, 196, 169, 181, 5, 85, 157, 144, 110, 129, 186, 141, 119, 104, 162, 206, 170, 115, 7, 96, 82, 240, 33, 143, 81, 243, 215, 67, 96, 137, 207, 209, 22, 162, 251, 108, 208, 232, 32, 236, 205, 167, 174, 161, 116, 13, 249, 187, 22, 240, 185, 172, 160, 103, 94, 162, 147, 26, 15, 143, 183, 147, 98, 231, 117, 134, 185, 50, 64, 40, 30, 27, 13, 152, 132, 40, 138, 32, 78, 158, 162, 207, 212, 229, 210, 251, 88, 116, 67, 229, 164, 164, 147, 59, 32, 94, 217, 197, 242, 149, 102, 74, 219, 46, 127, 68, 28, 116, 10, 2, 249, 231, 130, 123, 29, 45, 73, 56, 17, 195, 208, 45, 25, 60, 252, 98, 189, 109, 25, 0, 253, 151, 254, 124, 211, 48, 23, 156, 78, 163, 154, 188, 17, 69, 14, 188, 16, 64, 59, 190, 136, 70, 162, 253, 237, 156, 111, 41, 27, 40, 63, 205, 204, 94, 0, 50, 237, 62, 87, 211, 115, 91, 68, 194, 104, 119, 72, 106, 226, 160, 48, 165, 138, 134, 2, 138, 153, 181, 38, 249, 48, 120, 72, 15, 245, 227, 15, 164, 64, 188, 74, 4, 84, 213, 83, 67, 73, 87, 181, 72, 94, 46, 54, 193, 252, 188, 14, 207, 28, 82, 159, 131, 168, 238, 168, 145, 28, 230, 27, 126, 151, 93, 5, 96, 68, 126, 66, 174, 155, 101, 123, 20, 218, 131, 92, 124, 78, 82, 44, 55, 139, 77, 105, 177, 136, 121, 177, 43, 77, 12, 240, 0, 76, 20, 133, 121, 129, 73, 15, 160, 200, 150, 114, 95, 59, 59, 165, 240, 204, 13, 156, 134, 194, 4, 70, 158, 213, 111, 229, 103, 216, 239, 132, 16, 184, 151, 206, 254, 229, 62, 23, 58, 125, 49, 144, 208, 215, 2, 3, 1, 0, 1]), + pkcs8: new Uint8Array([48, 130, 9, 68, 2, 1, 0, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 4, 130, 9, 46, 48, 130, 9, 42, 2, 1, 0, 2, 130, 2, 1, 0, 218, 170, 246, 76, 189, 156, 216, 153, 155, 176, 221, 14, 44, 132, 103, 104, 0, 127, 100, 166, 245, 248, 104, 125, 31, 74, 155, 226, 90, 193, 184, 54, 170, 145, 111, 222, 20, 252, 19, 248, 146, 44, 190, 115, 73, 188, 52, 251, 4, 178, 121, 238, 212, 204, 34, 62, 122, 100, 203, 111, 233, 231, 210, 73, 53, 146, 147, 211, 14, 161, 109, 137, 212, 175, 226, 18, 183, 173, 103, 103, 30, 128, 31, 218, 69, 126, 234, 65, 88, 231, 160, 91, 51, 245, 77, 54, 4, 167, 192, 33, 68, 244, 163, 242, 187, 111, 209, 180, 241, 221, 107, 172, 5, 40, 134, 47, 210, 85, 8, 112, 57, 186, 29, 131, 176, 93, 116, 198, 202, 82, 108, 251, 209, 3, 72, 75, 143, 59, 44, 222, 56, 89, 69, 103, 159, 211, 160, 19, 214, 173, 77, 133, 0, 68, 219, 164, 79, 64, 238, 65, 189, 201, 248, 173, 180, 146, 196, 238, 86, 232, 215, 109, 39, 165, 162, 16, 230, 46, 134, 234, 148, 106, 34, 230, 198, 63, 231, 143, 16, 179, 208, 109, 22, 100, 54, 156, 107, 132, 28, 208, 118, 205, 217, 89, 228, 75, 196, 169, 181, 5, 85, 157, 144, 110, 129, 186, 141, 119, 104, 162, 206, 170, 115, 7, 96, 82, 240, 33, 143, 81, 243, 215, 67, 96, 137, 207, 209, 22, 162, 251, 108, 208, 232, 32, 236, 205, 167, 174, 161, 116, 13, 249, 187, 22, 240, 185, 172, 160, 103, 94, 162, 147, 26, 15, 143, 183, 147, 98, 231, 117, 134, 185, 50, 64, 40, 30, 27, 13, 152, 132, 40, 138, 32, 78, 158, 162, 207, 212, 229, 210, 251, 88, 116, 67, 229, 164, 164, 147, 59, 32, 94, 217, 197, 242, 149, 102, 74, 219, 46, 127, 68, 28, 116, 10, 2, 249, 231, 130, 123, 29, 45, 73, 56, 17, 195, 208, 45, 25, 60, 252, 98, 189, 109, 25, 0, 253, 151, 254, 124, 211, 48, 23, 156, 78, 163, 154, 188, 17, 69, 14, 188, 16, 64, 59, 190, 136, 70, 162, 253, 237, 156, 111, 41, 27, 40, 63, 205, 204, 94, 0, 50, 237, 62, 87, 211, 115, 91, 68, 194, 104, 119, 72, 106, 226, 160, 48, 165, 138, 134, 2, 138, 153, 181, 38, 249, 48, 120, 72, 15, 245, 227, 15, 164, 64, 188, 74, 4, 84, 213, 83, 67, 73, 87, 181, 72, 94, 46, 54, 193, 252, 188, 14, 207, 28, 82, 159, 131, 168, 238, 168, 145, 28, 230, 27, 126, 151, 93, 5, 96, 68, 126, 66, 174, 155, 101, 123, 20, 218, 131, 92, 124, 78, 82, 44, 55, 139, 77, 105, 177, 136, 121, 177, 43, 77, 12, 240, 0, 76, 20, 133, 121, 129, 73, 15, 160, 200, 150, 114, 95, 59, 59, 165, 240, 204, 13, 156, 134, 194, 4, 70, 158, 213, 111, 229, 103, 216, 239, 132, 16, 184, 151, 206, 254, 229, 62, 23, 58, 125, 49, 144, 208, 215, 2, 3, 1, 0, 1, 2, 130, 2, 1, 0, 185, 115, 209, 92, 24, 92, 19, 159, 131, 89, 166, 193, 68, 164, 46, 135, 24, 20, 243, 42, 94, 230, 4, 200, 73, 103, 159, 121, 131, 251, 83, 222, 153, 30, 171, 191, 176, 16, 114, 103, 152, 161, 118, 12, 148, 246, 152, 0, 100, 101, 113, 224, 74, 125, 174, 117, 74, 156, 125, 165, 54, 189, 179, 172, 255, 80, 135, 42, 178, 247, 217, 204, 209, 163, 49, 155, 42, 72, 88, 176, 46, 63, 255, 195, 192, 184, 248, 183, 223, 76, 226, 197, 54, 245, 206, 60, 8, 10, 181, 122, 1, 223, 113, 196, 133, 143, 58, 77, 185, 235, 78, 76, 32, 59, 212, 66, 110, 162, 75, 123, 210, 153, 180, 58, 97, 179, 129, 60, 175, 142, 228, 123, 85, 50, 241, 119, 147, 204, 94, 43, 65, 163, 4, 167, 243, 247, 41, 134, 105, 197, 165, 63, 45, 145, 56, 174, 203, 192, 135, 209, 29, 195, 83, 179, 14, 184, 131, 104, 152, 48, 245, 179, 207, 178, 60, 23, 21, 1, 84, 207, 82, 124, 9, 137, 171, 141, 187, 55, 172, 180, 180, 10, 48, 185, 97, 79, 156, 39, 249, 192, 27, 98, 77, 250, 93, 18, 157, 130, 72, 210, 115, 96, 36, 132, 116, 101, 225, 96, 234, 79, 89, 243, 89, 135, 97, 252, 53, 72, 97, 34, 226, 41, 41, 45, 144, 243, 189, 162, 243, 43, 69, 136, 143, 182, 140, 223, 134, 93, 38, 245, 36, 125, 46, 93, 48, 94, 215, 39, 156, 57, 86, 93, 207, 204, 72, 106, 112, 215, 203, 230, 80, 20, 137, 224, 242, 33, 146, 33, 108, 188, 185, 254, 117, 189, 240, 82, 64, 60, 186, 247, 190, 138, 170, 159, 147, 75, 49, 148, 101, 174, 130, 21, 177, 211, 121, 6, 153, 144, 230, 166, 181, 155, 94, 232, 2, 4, 119, 236, 35, 133, 253, 223, 14, 30, 199, 57, 215, 31, 251, 90, 167, 19, 231, 154, 54, 225, 85, 68, 17, 234, 158, 53, 50, 243, 182, 149, 193, 214, 60, 188, 6, 38, 2, 200, 161, 232, 193, 30, 153, 231, 221, 57, 140, 55, 69, 35, 21, 153, 34, 238, 175, 65, 253, 210, 119, 125, 120, 116, 153, 127, 67, 204, 9, 66, 210, 200, 165, 212, 216, 2, 62, 19, 15, 171, 77, 183, 247, 127, 224, 138, 41, 208, 170, 227, 36, 158, 176, 111, 128, 172, 70, 73, 241, 148, 172, 50, 174, 126, 80, 177, 235, 93, 89, 102, 84, 76, 221, 30, 216, 49, 125, 142, 35, 45, 96, 224, 60, 161, 63, 48, 85, 143, 20, 76, 182, 111, 15, 156, 139, 55, 155, 113, 226, 248, 239, 130, 252, 241, 197, 247, 124, 61, 39, 197, 170, 119, 76, 136, 195, 180, 169, 106, 240, 234, 101, 114, 207, 11, 160, 170, 139, 194, 187, 48, 22, 114, 84, 64, 151, 30, 212, 99, 213, 176, 106, 79, 232, 127, 197, 153, 133, 8, 56, 210, 83, 67, 106, 124, 231, 96, 2, 145, 2, 130, 1, 1, 0, 244, 218, 215, 194, 174, 36, 99, 217, 1, 4, 236, 11, 160, 86, 85, 65, 206, 36, 36, 143, 205, 108, 166, 191, 91, 209, 75, 117, 7, 81, 33, 179, 44, 101, 145, 215, 39, 117, 195, 81, 31, 111, 36, 7, 26, 105, 30, 249, 91, 2, 2, 237, 126, 141, 231, 153, 213, 181, 100, 234, 219, 192, 114, 179, 215, 229, 39, 212, 107, 9, 55, 220, 136, 233, 237, 28, 74, 97, 6, 22, 26, 47, 150, 83, 82, 95, 186, 146, 22, 38, 176, 231, 255, 166, 199, 223, 217, 86, 142, 56, 43, 199, 25, 247, 249, 122, 59, 142, 152, 20, 49, 147, 13, 132, 249, 203, 251, 146, 116, 96, 88, 81, 232, 45, 106, 100, 187, 99, 73, 32, 203, 134, 30, 223, 100, 179, 179, 128, 81, 242, 25, 85, 137, 125, 96, 153, 240, 224, 86, 20, 206, 24, 26, 197, 233, 164, 158, 50, 222, 103, 197, 211, 144, 101, 182, 205, 201, 51, 23, 231, 125, 229, 130, 61, 139, 204, 195, 243, 69, 38, 185, 187, 48, 249, 140, 107, 137, 39, 234, 21, 13, 43, 24, 112, 108, 109, 15, 25, 57, 55, 127, 40, 152, 238, 227, 96, 86, 157, 114, 35, 52, 54, 38, 140, 85, 42, 119, 53, 99, 35, 133, 208, 240, 65, 171, 8, 71, 255, 243, 248, 176, 166, 17, 178, 92, 62, 203, 56, 158, 31, 169, 223, 123, 7, 118, 216, 166, 132, 83, 62, 112, 160, 99, 244, 132, 29, 2, 130, 1, 1, 0, 228, 158, 249, 243, 243, 94, 42, 189, 87, 61, 152, 139, 197, 122, 33, 97, 4, 39, 135, 66, 219, 225, 11, 70, 103, 92, 115, 10, 8, 225, 5, 2, 220, 32, 23, 147, 56, 111, 237, 98, 48, 174, 122, 207, 109, 152, 187, 125, 220, 186, 73, 127, 42, 82, 39, 228, 163, 12, 188, 36, 71, 107, 52, 235, 223, 200, 7, 38, 6, 167, 28, 158, 26, 213, 126, 186, 90, 152, 133, 44, 53, 156, 61, 130, 92, 163, 3, 27, 35, 185, 141, 112, 236, 246, 210, 107, 75, 245, 33, 126, 134, 215, 41, 1, 244, 220, 36, 93, 22, 232, 50, 62, 68, 141, 153, 118, 62, 1, 167, 197, 202, 113, 187, 196, 186, 251, 161, 128, 66, 211, 145, 103, 133, 69, 207, 155, 117, 65, 76, 251, 125, 43, 224, 105, 171, 6, 29, 254, 31, 111, 144, 5, 158, 166, 180, 143, 163, 205, 212, 151, 7, 11, 50, 234, 82, 37, 143, 75, 104, 124, 97, 69, 220, 246, 202, 45, 25, 40, 220, 23, 92, 116, 112, 114, 204, 198, 140, 48, 111, 191, 53, 28, 9, 134, 234, 90, 168, 243, 108, 75, 197, 99, 162, 173, 31, 194, 97, 224, 184, 76, 227, 170, 199, 106, 129, 14, 77, 234, 231, 38, 192, 197, 233, 174, 150, 240, 55, 252, 241, 27, 97, 169, 49, 49, 115, 9, 218, 65, 253, 14, 253, 217, 91, 141, 44, 68, 32, 247, 219, 199, 31, 45, 212, 68, 46, 131, 2, 130, 1, 1, 0, 225, 142, 199, 187, 155, 88, 2, 114, 225, 49, 123, 144, 170, 63, 93, 130, 165, 55, 62, 71, 10, 97, 208, 169, 239, 23, 58, 127, 176, 33, 216, 253, 137, 36, 119, 216, 207, 140, 248, 68, 62, 196, 207, 87, 139, 200, 210, 179, 186, 86, 124, 3, 243, 213, 29, 72, 229, 73, 152, 145, 145, 166, 19, 4, 1, 26, 36, 58, 213, 239, 67, 250, 112, 85, 174, 11, 165, 169, 3, 70, 81, 17, 13, 85, 236, 72, 43, 66, 112, 13, 108, 98, 11, 107, 196, 44, 61, 182, 50, 133, 36, 46, 225, 137, 65, 212, 140, 16, 171, 159, 206, 155, 60, 149, 6, 216, 22, 3, 176, 25, 32, 195, 51, 50, 195, 19, 208, 91, 129, 254, 39, 254, 129, 106, 33, 6, 57, 145, 55, 235, 225, 210, 158, 57, 85, 71, 250, 81, 110, 122, 243, 239, 216, 154, 0, 197, 152, 198, 27, 131, 85, 5, 179, 187, 63, 79, 10, 205, 122, 115, 209, 210, 30, 204, 59, 128, 129, 242, 19, 253, 188, 146, 232, 102, 186, 40, 69, 204, 243, 34, 57, 99, 61, 188, 50, 229, 180, 70, 244, 34, 95, 141, 50, 116, 190, 24, 253, 49, 68, 247, 145, 29, 97, 29, 93, 71, 37, 81, 148, 230, 32, 91, 125, 55, 193, 42, 123, 201, 25, 34, 58, 248, 128, 204, 225, 149, 38, 248, 29, 17, 230, 22, 236, 234, 207, 92, 124, 232, 225, 22, 96, 2, 32, 146, 27, 49, 2, 130, 1, 1, 0, 129, 62, 34, 61, 183, 242, 31, 37, 68, 193, 108, 144, 111, 133, 248, 130, 184, 239, 131, 182, 215, 72, 164, 176, 27, 84, 151, 48, 48, 14, 205, 95, 109, 131, 178, 240, 38, 50, 152, 55, 47, 32, 36, 11, 73, 128, 211, 85, 118, 199, 213, 46, 207, 132, 252, 74, 115, 166, 138, 97, 212, 2, 22, 59, 214, 25, 101, 121, 40, 191, 166, 28, 247, 60, 132, 84, 227, 76, 95, 212, 187, 69, 229, 59, 226, 20, 193, 119, 193, 61, 111, 105, 76, 124, 200, 61, 162, 6, 36, 246, 59, 82, 61, 59, 126, 234, 72, 160, 91, 135, 206, 135, 135, 7, 169, 158, 191, 180, 253, 220, 129, 242, 195, 220, 150, 124, 20, 51, 199, 19, 133, 154, 201, 43, 203, 14, 174, 61, 201, 64, 78, 229, 212, 10, 200, 133, 63, 197, 94, 142, 26, 20, 35, 57, 72, 207, 255, 33, 40, 50, 108, 231, 246, 211, 162, 182, 219, 8, 29, 60, 91, 93, 60, 106, 67, 167, 53, 22, 245, 61, 59, 166, 19, 191, 194, 101, 231, 240, 165, 235, 169, 33, 125, 125, 72, 213, 17, 183, 243, 27, 238, 173, 193, 212, 47, 37, 27, 98, 7, 174, 103, 242, 46, 163, 213, 235, 121, 62, 247, 135, 223, 232, 194, 143, 81, 130, 225, 147, 219, 213, 199, 226, 247, 13, 102, 100, 70, 127, 145, 136, 189, 22, 248, 123, 153, 111, 182, 87, 136, 102, 76, 9, 3, 123, 187, 243, 2, 130, 1, 0, 36, 121, 149, 41, 189, 115, 193, 110, 98, 69, 30, 145, 9, 231, 177, 98, 120, 118, 126, 102, 62, 220, 58, 207, 73, 211, 60, 15, 24, 107, 208, 95, 29, 107, 40, 190, 182, 84, 106, 17, 217, 198, 210, 27, 233, 227, 153, 252, 128, 181, 44, 145, 101, 156, 7, 209, 23, 149, 66, 78, 109, 145, 138, 13, 241, 174, 198, 3, 26, 222, 15, 241, 120, 176, 54, 190, 97, 80, 215, 99, 49, 62, 204, 135, 226, 32, 141, 102, 251, 32, 152, 108, 113, 237, 59, 142, 30, 185, 195, 135, 145, 1, 86, 115, 56, 253, 215, 186, 221, 202, 196, 36, 227, 118, 177, 130, 60, 59, 56, 190, 198, 157, 142, 18, 96, 43, 218, 199, 150, 42, 174, 44, 198, 65, 103, 139, 167, 177, 46, 26, 155, 248, 209, 56, 155, 209, 204, 42, 89, 224, 212, 75, 80, 135, 106, 203, 4, 81, 181, 85, 128, 247, 73, 134, 41, 48, 183, 57, 127, 28, 234, 26, 244, 177, 159, 113, 90, 249, 120, 32, 248, 134, 79, 99, 123, 155, 173, 201, 185, 216, 166, 32, 152, 181, 6, 154, 118, 18, 181, 245, 106, 25, 37, 146, 118, 16, 215, 30, 83, 96, 35, 154, 93, 0, 13, 5, 206, 156, 129, 147, 118, 87, 248, 155, 49, 135, 7, 39, 157, 226, 171, 96, 16, 112, 122, 173, 58, 145, 19, 6, 90, 11, 221, 109, 208, 16, 251, 188, 18, 120, 106, 170, 143, 149, 79, 192]), + jwk: { + kty: "RSA", + n: "2qr2TL2c2JmbsN0OLIRnaAB_ZKb1-Gh9H0qb4lrBuDaqkW_eFPwT-JIsvnNJvDT7BLJ57tTMIj56ZMtv6efSSTWSk9MOoW2J1K_iEretZ2cegB_aRX7qQVjnoFsz9U02BKfAIUT0o_K7b9G08d1rrAUohi_SVQhwObodg7BddMbKUmz70QNIS487LN44WUVnn9OgE9atTYUARNukT0DuQb3J-K20ksTuVujXbSelohDmLobqlGoi5sY_548Qs9BtFmQ2nGuEHNB2zdlZ5EvEqbUFVZ2QboG6jXdoos6qcwdgUvAhj1Hz10Ngic_RFqL7bNDoIOzNp66hdA35uxbwuaygZ16ikxoPj7eTYud1hrkyQCgeGw2YhCiKIE6eos_U5dL7WHRD5aSkkzsgXtnF8pVmStsuf0QcdAoC-eeCex0tSTgRw9AtGTz8Yr1tGQD9l_580zAXnE6jmrwRRQ68EEA7vohGov3tnG8pGyg_zcxeADLtPlfTc1tEwmh3SGrioDClioYCipm1JvkweEgP9eMPpEC8SgRU1VNDSVe1SF4uNsH8vA7PHFKfg6juqJEc5ht-l10FYER-Qq6bZXsU2oNcfE5SLDeLTWmxiHmxK00M8ABMFIV5gUkPoMiWcl87O6XwzA2chsIERp7Vb-Vn2O-EELiXzv7lPhc6fTGQ0Nc", + e: "AQAB", + d: "uXPRXBhcE5-DWabBRKQuv,hxgU8ype5gTISWefeYP7U96ZHqu_sBByZ5ihdgyU9pgAZGVx4Ep9rnVKnH2lNr2zrP9Qhyqy99nM0aMxmypIWLAuP__DwLj4t99M4sU29c48CAq1egHfccSFjzpNuetOTCA71EJuokt70pm0OmGzgTyvjuR7VTLxd5PMXitBowSn8_cphmnFpT8tkTiuy8CH0R3DU7MOuINomDD1s8-yPBcVAVTPUnwJiauNuzestLQKMLlhT5wn-cAbYk36XRKdgkjSc2AkhHRl4WDqT1nzWYdh_DVIYSLiKSktkPO9ovMrRYiPtozfhl0m9SR9Ll0wXtcnnDlWXc_MSGpw18vmUBSJ4PIhkiFsvLn-db3wUkA8uve-iqqfk0sxlGWughWx03kGmZDmprWbXugCBHfsI4X93w4exznXH_tapxPnmjbhVUQR6p41MvO2lcHWPLwGJgLIoejBHpnn3TmMN0UjFZki7q9B_dJ3fXh0mX9DzAlC0sil1NgCPhMPq02393_giinQquMknrBvgKxGSfGUrDKuflCx611ZZlRM3R7YMX2OIy1g4DyhPzBVjxRMtm8PnIs3m3Hi-O-C_PHF93w9J8Wqd0yIw7SpavDqZXLPC6Cqi8K7MBZyVECXHtRj1bBqT-h_xZmFCDjSU0NqfOdgApE", + p: "9NrXwq4kY9kBBOwLoFZVQc4kJI_NbKa_W9FLdQdRIbMsZZHXJ3XDUR9vJAcaaR75WwIC7X6N55nVtWTq28Bys9flJ9RrCTfciOntHEphBhYaL5ZTUl-6khYmsOf_psff2VaOOCvHGff5ejuOmBQxkw2E-cv7knRgWFHoLWpku2NJIMuGHt9ks7OAUfIZVYl9YJnw4FYUzhgaxemknjLeZ8XTkGW2zckzF-d95YI9i8zD80Umubsw-YxriSfqFQ0rGHBsbQ8ZOTd_KJju42BWnXIjNDYmjFUqdzVjI4XQ8EGrCEf_8_iwphGyXD7LOJ4fqd97B3bYpoRTPnCgY_SEHQ", + q: "5J758_NeKr1XPZiLxXohYQQnh0Lb4QtGZ1xzCgjhBQLcIBeTOG_tYjCues9tmLt93LpJfypSJ-SjDLwkR2s069_IByYGpxyeGtV-ulqYhSw1nD2CXKMDGyO5jXDs9tJrS_UhfobXKQH03CRdFugyPkSNmXY-AafFynG7xLr7oYBC05FnhUXPm3VBTPt9K-BpqwYd_h9vkAWeprSPo83UlwcLMupSJY9LaHxhRdz2yi0ZKNwXXHRwcszGjDBvvzUcCYbqWqjzbEvFY6KtH8Jh4LhM46rHaoEOTernJsDF6a6W8Df88RthqTExcwnaQf0O_dlbjSxEIPfbxx8t1EQugw", + dp: "4Y7Hu5tYAnLhMXuQqj9dgqU3PkcKYdCp7xc6f7Ah2P2JJHfYz4z4RD7Ez1eLyNKzulZ8A_PVHUjlSZiRkaYTBAEaJDrV70P6cFWuC6WpA0ZREQ1V7EgrQnANbGILa8QsPbYyhSQu4YlB1IwQq5_OmzyVBtgWA7AZIMMzMsMT0FuB_if-gWohBjmRN-vh0p45VUf6UW568-_YmgDFmMYbg1UFs7s_TwrNenPR0h7MO4CB8hP9vJLoZrooRczzIjljPbwy5bRG9CJfjTJ0vhj9MUT3kR1hHV1HJVGU5iBbfTfBKnvJGSI6-IDM4ZUm-B0R5hbs6s9cfOjhFmACIJIbMQ", + dq: "gT4iPbfyHyVEwWyQb4X4grjvg7bXSKSwG1SXMDAOzV9tg7LwJjKYNy8gJAtJgNNVdsfVLs-E_Epzpoph1AIWO9YZZXkov6Yc9zyEVONMX9S7ReU74hTBd8E9b2lMfMg9ogYk9jtSPTt-6kigW4fOh4cHqZ6_tP3cgfLD3JZ8FDPHE4WaySvLDq49yUBO5dQKyIU_xV6OGhQjOUjP_yEoMmzn9tOittsIHTxbXTxqQ6c1FvU9O6YTv8Jl5_Cl66khfX1I1RG38xvurcHULyUbYgeuZ_Iuo9XreT73h9_owo9RguGT29XH4vcNZmRGf5GIvRb4e5lvtleIZkwJA3u78w", + qi: "JHmVKb1zwW5iRR6RCeexYnh2fmY-3DrPSdM8Dxhr0F8dayi-tlRqEdnG0hvp45n8gLUskWWcB9EXlUJObZGKDfGuxgMa3g_xeLA2vmFQ12MxPsyH4iCNZvsgmGxx7TuOHrnDh5EBVnM4_de63crEJON2sYI8Ozi-xp2OEmAr2seWKq4sxkFni6exLhqb-NE4m9HMKlng1EtQh2rLBFG1VYD3SYYpMLc5fxzqGvSxn3Fa-Xgg-IZPY3ubrcm52KYgmLUGmnYStfVqGSWSdhDXHlNgI5pdAA0FzpyBk3ZX-JsxhwcnneKrYBBweq06kRMGWgvdbdAQ-7wSeGqqj5VPwA" + }, + }, + "SYMMETRIC": { + raw: new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]), + } +} + +let toWrapKeyData = { + "RSA": { //modulusLength: 1024, hash: "SHA-256" + spki: new Uint8Array([48, 129, 159, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 129, 141, 0, 48, 129, 137, 2, 129, 129, 0, 205, 153, 248, 177, 17, 159, 141, 10, 44, 231, 172, 139, 253, 12, 181, 71, 211, 72, 249, 49, 204, 156, 92, 167, 159, 222, 32, 229, 28, 64, 235, 1, 171, 38, 30, 1, 37, 61, 241, 232, 143, 113, 208, 134, 233, 75, 122, 190, 119, 131, 145, 3, 164, 118, 190, 224, 204, 135, 199, 67, 21, 26, 253, 68, 49, 250, 93, 143, 160, 81, 39, 28, 245, 78, 73, 207, 117, 0, 216, 169, 149, 126, 192, 155, 157, 67, 239, 112, 9, 140, 87, 241, 13, 3, 191, 211, 23, 72, 175, 86, 59, 136, 22, 135, 114, 13, 60, 123, 16, 161, 205, 85, 58, 199, 29, 41, 107, 110, 222, 236, 165, 185, 156, 138, 251, 54, 221, 151, 2, 3, 1, 0, 1]), + pkcs8: new Uint8Array([48, 130, 2, 120, 2, 1, 0, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 4, 130, 2, 98, 48, 130, 2, 94, 2, 1, 0, 2, 129, 129, 0, 205, 153, 248, 177, 17, 159, 141, 10, 44, 231, 172, 139, 253, 12, 181, 71, 211, 72, 249, 49, 204, 156, 92, 167, 159, 222, 32, 229, 28, 64, 235, 1, 171, 38, 30, 1, 37, 61, 241, 232, 143, 113, 208, 134, 233, 75, 122, 190, 119, 131, 145, 3, 164, 118, 190, 224, 204, 135, 199, 67, 21, 26, 253, 68, 49, 250, 93, 143, 160, 81, 39, 28, 245, 78, 73, 207, 117, 0, 216, 169, 149, 126, 192, 155, 157, 67, 239, 112, 9, 140, 87, 241, 13, 3, 191, 211, 23, 72, 175, 86, 59, 136, 22, 135, 114, 13, 60, 123, 16, 161, 205, 85, 58, 199, 29, 41, 107, 110, 222, 236, 165, 185, 156, 138, 251, 54, 221, 151, 2, 3, 1, 0, 1, 2, 129, 128, 98, 162, 10, 252, 103, 71, 243, 145, 126, 25, 102, 93, 129, 248, 38, 191, 94, 77, 19, 191, 32, 57, 162, 249, 135, 104, 56, 191, 176, 222, 51, 223, 137, 11, 176, 57, 60, 116, 139, 40, 214, 39, 243, 177, 197, 25, 192, 184, 190, 253, 15, 4, 128, 81, 183, 32, 128, 254, 98, 73, 124, 70, 134, 88, 228, 85, 8, 229, 210, 6, 149, 141, 122, 147, 24, 166, 42, 57, 218, 125, 240, 230, 232, 249, 81, 145, 44, 6, 118, 237, 101, 205, 4, 181, 104, 85, 23, 96, 46, 169, 174, 213, 110, 34, 171, 89, 196, 20, 18, 1, 8, 241, 93, 32, 19, 144, 248, 183, 32, 96, 240, 101, 239, 247, 222, 249, 117, 1, 2, 65, 0, 244, 26, 192, 131, 146, 245, 205, 250, 134, 62, 229, 137, 14, 224, 194, 5, 127, 147, 154, 214, 93, 172, 226, 55, 98, 206, 25, 104, 223, 178, 48, 249, 83, 143, 5, 146, 16, 243, 180, 170, 119, 227, 17, 151, 48, 217, 88, 23, 30, 2, 73, 153, 181, 92, 163, 164, 241, 114, 66, 66, 152, 70, 42, 121, 2, 65, 0, 215, 158, 227, 12, 157, 88, 107, 153, 230, 66, 244, 207, 110, 18, 128, 60, 7, 140, 90, 136, 49, 11, 38, 144, 78, 64, 107, 167, 125, 41, 16, 167, 122, 152, 100, 129, 223, 206, 97, 170, 190, 1, 34, 79, 44, 221, 254, 204, 117, 122, 76, 249, 68, 169, 105, 152, 20, 161, 62, 40, 255, 101, 68, 143, 2, 65, 0, 169, 215, 127, 65, 76, 220, 104, 31, 186, 142, 66, 168, 213, 72, 62, 215, 18, 136, 2, 0, 203, 22, 194, 35, 37, 69, 31, 90, 223, 226, 28, 191, 45, 139, 98, 165, 217, 211, 167, 77, 192, 178, 166, 7, 155, 62, 110, 83, 79, 86, 234, 28, 223, 154, 128, 102, 0, 116, 174, 115, 165, 125, 148, 137, 2, 65, 0, 132, 212, 95, 192, 228, 169, 148, 215, 225, 46, 252, 75, 80, 222, 218, 218, 160, 55, 201, 137, 190, 212, 196, 179, 255, 80, 214, 64, 254, 236, 174, 82, 206, 70, 85, 28, 96, 248, 109, 216, 86, 102, 178, 113, 30, 13, 192, 42, 202, 112, 70, 61, 5, 28, 108, 109, 128, 191, 248, 96, 31, 61, 142, 103, 2, 65, 0, 205, 186, 73, 64, 8, 98, 158, 188, 82, 109, 82, 177, 5, 13, 132, 100, 97, 84, 15, 103, 183, 88, 37, 219, 0, 148, 88, 166, 79, 7, 85, 14, 64, 3, 157, 142, 132, 164, 226, 112, 236, 158, 218, 17, 7, 158, 184, 41, 20, 172, 194, 242, 44, 231, 78, 192, 134, 220, 83, 36, 191, 7, 35, 225]), + jwk: { + kty: "RSA", + n: "zZn4sRGfjQos56yL_Qy1R9NI-THMnFynn94g5RxA6wGrJh4BJT3x6I9x0IbpS3q-d4ORA6R2vuDMh8dDFRr9RDH6XY-gUScc9U5Jz3UA2KmVfsCbnUPvcAmMV_ENA7_TF0ivVjuIFodyDTx7EKHNVTrHHSlrbt7spbmcivs23Zc", + e: "AQAB", + d: "YqIK_GdH85F-GWZdgfgmv15NE78gOaL5h2g4v7DeM9-JC7A5PHSLKNYn87HFGcC4vv0PBIBRtyCA_mJJfEaGWORVCOXSBpWNepMYpio52n3w5uj5UZEsBnbtZc0EtWhVF2Auqa7VbiKrWcQUEgEI8V0gE5D4tyBg8GXv9975dQE", + p: "9BrAg5L1zfqGPuWJDuDCBX-TmtZdrOI3Ys4ZaN-yMPlTjwWSEPO0qnfjEZcw2VgXHgJJmbVco6TxckJCmEYqeQ", + q: "157jDJ1Ya5nmQvTPbhKAPAeMWogxCyaQTkBrp30pEKd6mGSB385hqr4BIk8s3f7MdXpM-USpaZgUoT4o_2VEjw", + dp: "qdd_QUzcaB-6jkKo1Ug-1xKIAgDLFsIjJUUfWt_iHL8ti2Kl2dOnTcCypgebPm5TT1bqHN-agGYAdK5zpX2UiQ", + dq: "hNRfwOSplNfhLvxLUN7a2qA3yYm-1MSz_1DWQP7srlLORlUcYPht2FZmsnEeDcAqynBGPQUcbG2Av_hgHz2OZw", + qi: "zbpJQAhinrxSbVKxBQ2EZGFUD2e3WCXbAJRYpk8HVQ5AA52OhKTicOye2hEHnrgpFKzC8iznTsCG3FMkvwcj4Q" + } + }, + "EC": { + spki: new Uint8Array([48, 89, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7, 3, 66, 0, 4, 210, 16, 176, 166, 249, 217, 240, 18, 134, 128, 88, 180, 63, 164, 244, 113, 1, 133, 67, 187, 160, 12, 146, 80, 223, 146, 87, 194, 172, 174, 93, 209, 206, 3, 117, 82, 212, 129, 69, 12, 227, 155, 77, 16, 149, 112, 27, 23, 91, 250, 179, 75, 142, 108, 9, 158, 24, 241, 193, 152, 53, 131, 97, 232]), + pkcs8: new Uint8Array([48, 129, 135, 2, 1, 0, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7, 4, 109, 48, 107, 2, 1, 1, 4, 32, 19, 211, 58, 45, 90, 191, 156, 249, 235, 178, 31, 248, 96, 212, 174, 254, 110, 86, 231, 119, 144, 244, 222, 233, 180, 8, 132, 235, 211, 53, 68, 234, 161, 68, 3, 66, 0, 4, 210, 16, 176, 166, 249, 217, 240, 18, 134, 128, 88, 180, 63, 164, 244, 113, 1, 133, 67, 187, 160, 12, 146, 80, 223, 146, 87, 194, 172, 174, 93, 209, 206, 3, 117, 82, 212, 129, 69, 12, 227, 155, 77, 16, 149, 112, 27, 23, 91, 250, 179, 75, 142, 108, 9, 158, 24, 241, 193, 152, 53, 131, 97, 232]), + jwk: { + kty: "EC", + crv: "P-256", + x: "0hCwpvnZ8BKGgFi0P6T0cQGFQ7ugDJJQ35JXwqyuXdE", + y: "zgN1UtSBRQzjm00QlXAbF1v6s0uObAmeGPHBmDWDYeg", + d: "E9M6LVq_nPnrsh_4YNSu_m5W53eQ9N7ptAiE69M1ROo" + } + }, + "ED25519": { + spki: new Uint8Array([48, 42, 48, 5, 6, 3, 43, 101, 112, 3, 33, 0, 216, 225, 137, 99, 216, 9, 212, 135, 217, 84, 154, 204, 174, 198, 116, 46, 126, 235, 162, 77, 138, 13, 59, 20, 183, 227, 202, 234, 6, 137, 61, 204]), + pkcs8: new Uint8Array([48, 46, 2, 1, 0, 48, 5, 6, 3, 43, 101, 112, 4, 34, 4, 32, 243, 200, 244, 196, 141, 248, 120, 20, 110, 140, 211, 191, 109, 244, 229, 14, 56, 155, 167, 7, 78, 21, 194, 53, 45, 205, 93, 48, 141, 76, 168, 31]), + jwk: { + crv: "Ed25519", + d: "88j0xI34eBRujNO_bfTlDjibpwdOFcI1Lc1dMI1MqB8", + x: "2OGJY9gJ1IfZVJrMrsZ0Ln7rok2KDTsUt-PK6gaJPcw", + kty: "OKP" + } + }, + "ED448": { + spki: new Uint8Array([48, 67, 48, 5, 6, 3, 43, 101, 113, 3, 58, 0, 171, 75, 184, 133, 253, 125, 44, 90, 242, 78, 131, 113, 12, 255, 160, 199, 74, 87, 226, 116, 128, 29, 178, 5, 123, 11, 220, 94, 160, 50, 182, 254, 107, 199, 139, 128, 69, 54, 90, 235, 38, 232, 110, 31, 20, 253, 52, 157, 7, 196, 132, 149, 245, 164, 106, 90, 128]), + pkcs8: new Uint8Array([48, 71, 2, 1, 0, 48, 5, 6, 3, 43, 101, 113, 4, 59, 4, 57, 14, 255, 3, 69, 140, 40, 224, 23, 156, 82, 29, 227, 18, 201, 105, 183, 131, 67, 72, 236, 171, 153, 26, 96, 227, 178, 233, 167, 158, 76, 217, 228, 128, 239, 41, 23, 18, 210, 200, 61, 4, 114, 114, 213, 201, 244, 40, 102, 79, 105, 109, 38, 112, 69, 143, 29, 46]), + jwk: { + crv: "Ed448", + d: "Dv8DRYwo4BecUh3jEslpt4NDSOyrmRpg47Lpp55M2eSA7ykXEtLIPQRyctXJ9ChmT2ltJnBFjx0u", + x: "q0u4hf19LFryToNxDP-gx0pX4nSAHbIFewvcXqAytv5rx4uARTZa6ybobh8U_TSdB8SElfWkalqA", + kty: "OKP" + } + }, + "X25519": { + spki: new Uint8Array([48, 42, 48, 5, 6, 3, 43, 101, 110, 3, 33, 0, 28, 242, 177, 230, 2, 46, 197, 55, 55, 30, 215, 245, 62, 84, 250, 17, 84, 216, 62, 152, 235, 100, 234, 81, 250, 229, 179, 48, 124, 254, 151, 6]), + pkcs8: new Uint8Array([48, 46, 2, 1, 0, 48, 5, 6, 3, 43, 101, 110, 4, 34, 4, 32, 200, 131, 142, 118, 208, 87, 223, 183, 216, 201, 90, 105, 225, 56, 22, 10, 221, 99, 115, 253, 113, 164, 210, 118, 187, 86, 227, 168, 27, 100, 255, 97]), + jwk: { + crv: "X25519", + d: "yIOOdtBX37fYyVpp4TgWCt1jc_1xpNJ2u1bjqBtk_2E", + x: "HPKx5gIuxTc3Htf1PlT6EVTYPpjrZOpR-uWzMHz-lwY", + kty: "OKP" + } + }, + "X448": { + spki: new Uint8Array([48, 66, 48, 5, 6, 3, 43, 101, 111, 3, 57, 0, 182, 4, 161, 209, 165, 205, 29, 148, 38, 213, 97, 239, 99, 10, 158, 177, 108, 190, 105, 213, 185, 202, 97, 94, 220, 83, 99, 62, 251, 82, 234, 49, 230, 230, 160, 161, 219, 172, 198, 231, 108, 188, 230, 72, 45, 126, 75, 163, 213, 93, 158, 128, 39, 101, 206, 111]), + pkcs8: new Uint8Array([48, 70, 2, 1, 0, 48, 5, 6, 3, 43, 101, 111, 4, 58, 4, 56, 88, 199, 210, 154, 62, 181, 25, 178, 157, 0, 207, 177, 145, 187, 100, 252, 109, 138, 66, 216, 241, 113, 118, 39, 43, 137, 242, 39, 45, 24, 25, 41, 92, 101, 37, 192, 130, 150, 113, 176, 82, 239, 7, 39, 83, 15, 24, 142, 49, 208, 204, 83, 191, 38, 146, 158]), + jwk: { + crv: "X448", + d: "WMfSmj61GbKdAM-xkbtk_G2KQtjxcXYnK4nyJy0YGSlcZSXAgpZxsFLvBydTDxiOMdDMU78mkp4", + x: "tgSh0aXNHZQm1WHvYwqesWy-adW5ymFe3FNjPvtS6jHm5qCh26zG52y85kgtfkuj1V2egCdlzm8", + kty: "OKP" + } + }, + "SYMMETRIC": { + raw: new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]), + } +} + +function toWrapKeyDataFromAlg(alg) { + switch(alg) { + case "RSASSA-PKCS1-v1_5": + case "RSA-PSS": + case "RSA-OAEP": + return toWrapKeyData["RSA"]; + case "ECDSA": + case "ECDH": + return toWrapKeyData["EC"]; + case "Ed25519": + return toWrapKeyData["ED25519"]; + case "X25519": + return toWrapKeyData["X25519"]; + case "Ed448": + return toWrapKeyData["ED448"]; + case "X448": + return toWrapKeyData["X448"]; + default: + return undefined; + } +} diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/anchor-center-htb-htb-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/anchor-center-htb-htb-expected.txt index ab5cf9e155628..6134b83f5df1e 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/anchor-center-htb-htb-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/anchor-center-htb-htb-expected.txt @@ -1,32 +1,12 @@ PASS .target 1 -FAIL .target 2 assert_equals: -
    -
    -
    -
    -offsetLeft expected 35 but got 0 +PASS .target 2 PASS .target 3 -FAIL .target 4 assert_equals: -
    -
    -
    -
    -offsetLeft expected 20 but got 0 +PASS .target 4 PASS .target 5 -FAIL .target 6 assert_equals: -
    -
    -
    -
    -offsetLeft expected 15 but got 20 +PASS .target 6 PASS .target 7 -FAIL .target 8 assert_equals: -
    -
    -
    -
    -offsetLeft expected 30 but got 10 +PASS .target 8 PASS .target 9 PASS .target 10 diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/anchor-center-htb-vrl-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/anchor-center-htb-vrl-expected.txt index 0f6adce523c38..6134b83f5df1e 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/anchor-center-htb-vrl-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/anchor-center-htb-vrl-expected.txt @@ -1,37 +1,12 @@ -FAIL .target 1 assert_equals: -
    -
    -
    -
    -height expected 100 but got 50 -FAIL .target 2 assert_equals: -
    -
    -
    -
    -height expected 60 but got 50 +PASS .target 1 +PASS .target 2 PASS .target 3 -FAIL .target 4 assert_equals: -
    -
    -
    -
    -offsetTop expected 20 but got 0 +PASS .target 4 PASS .target 5 -FAIL .target 6 assert_equals: -
    -
    -
    -
    -offsetTop expected 15 but got 20 +PASS .target 6 PASS .target 7 -FAIL .target 8 assert_equals: -
    -
    -
    -
    -offsetTop expected 30 but got 10 +PASS .target 8 PASS .target 9 PASS .target 10 diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/anchor-center-vrl-htb-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/anchor-center-vrl-htb-expected.txt index ed6e813207690..6134b83f5df1e 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/anchor-center-vrl-htb-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/anchor-center-vrl-htb-expected.txt @@ -1,37 +1,12 @@ -FAIL .target 1 assert_equals: -
    -
    -
    -
    -width expected 100 but got 50 -FAIL .target 2 assert_equals: -
    -
    -
    -
    -width expected 60 but got 50 +PASS .target 1 +PASS .target 2 PASS .target 3 -FAIL .target 4 assert_equals: -
    -
    -
    -
    -offsetLeft expected 20 but got 0 +PASS .target 4 PASS .target 5 -FAIL .target 6 assert_equals: -
    -
    -
    -
    -offsetLeft expected 15 but got 20 +PASS .target 6 PASS .target 7 -FAIL .target 8 assert_equals: -
    -
    -
    -
    -offsetLeft expected 30 but got 10 +PASS .target 8 PASS .target 9 PASS .target 10 diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/anchor-center-vrl-vrl-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/anchor-center-vrl-vrl-expected.txt index 0f1fcd7d08194..6134b83f5df1e 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/anchor-center-vrl-vrl-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-anchor-position/anchor-center-vrl-vrl-expected.txt @@ -1,32 +1,12 @@ PASS .target 1 -FAIL .target 2 assert_equals: -
    -
    -
    -
    -offsetTop expected 35 but got 0 +PASS .target 2 PASS .target 3 -FAIL .target 4 assert_equals: -
    -
    -
    -
    -offsetTop expected 20 but got 0 +PASS .target 4 PASS .target 5 -FAIL .target 6 assert_equals: -
    -
    -
    -
    -offsetTop expected 15 but got 20 +PASS .target 6 PASS .target 7 -FAIL .target 8 assert_equals: -
    -
    -
    -
    -offsetTop expected 30 but got 10 +PASS .target 8 PASS .target 9 PASS .target 10 diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-backgrounds/background-332-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/css-backgrounds/background-332-expected.txt index 71c95241392c8..8619cfda2e558 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/css/css-backgrounds/background-332-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-backgrounds/background-332-expected.txt @@ -1,7 +1,7 @@ PASS Computed value for background-image after setting background shorthand PASS background_specified_position -FAIL background_specified_size assert_equals: background specified value for background-size expected "160px" but got "160px auto" +PASS background_specified_size PASS background_specified_repeat PASS background_specified_attachment PASS background_specified_origin diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-backgrounds/background-332.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-backgrounds/background-332.html index 54c5e68c51297..0b4db819b00ea 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/css/css-backgrounds/background-332.html +++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-backgrounds/background-332.html @@ -32,7 +32,7 @@ test(function() { assert_equals(cs.getPropertyValue("background-size"), - "160px", "background specified value for background-size"); + "160px auto", "background specified value for background-size"); }, "background_specified_size"); test(function() { diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-backgrounds/background-size-001-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/css-backgrounds/background-size-001-expected.txt index 18f2626626617..ebd24877d93fc 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/css/css-backgrounds/background-size-001-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-backgrounds/background-size-001-expected.txt @@ -3,20 +3,20 @@ PASS background-size_initial PASS background-size_auto PASS background-size_cover PASS background-size_contain -FAIL background-size_length_zero assert_equals: background-size supporting value expected "0px" but got "0px auto" -FAIL background-size_length_negative_zero assert_equals: background-size supporting value expected "0px" but got "0px auto" -FAIL background-size_length_positive_zero assert_equals: background-size supporting value expected "0px" but got "0px auto" -FAIL background-size_length_normal assert_equals: background-size supporting value expected "15px" but got "15px auto" -FAIL background-size_percentage_min assert_equals: background-size supporting value expected "0%" but got "0% auto" -FAIL background-size_percentage_normal assert_equals: background-size supporting value expected "50%" but got "50% auto" -FAIL background-size_percentage_max assert_equals: background-size supporting value expected "100%" but got "100% auto" +PASS background-size_length_zero +PASS background-size_length_negative_zero +PASS background-size_length_positive_zero +PASS background-size_length_normal +PASS background-size_percentage_min +PASS background-size_percentage_normal +PASS background-size_percentage_max PASS background-size_auto_auto PASS background-size_auto_length PASS background-size_auto_percentage -FAIL background-size_length_auto assert_equals: background-size supporting value expected "15px" but got "15px auto" +PASS background-size_length_auto PASS background-size_length_length PASS background-size_length_percentage -FAIL background-size_percentage_auto assert_equals: background-size supporting value expected "50%" but got "50% auto" +PASS background-size_percentage_auto PASS background-size_percentage_length PASS background-size_percentage_percentage diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-backgrounds/background-size-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-backgrounds/background-size-001.html index fee271de14a46..ce1666c9a8160 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/css/css-backgrounds/background-size-001.html +++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-backgrounds/background-size-001.html @@ -39,43 +39,43 @@ document.getElementById("test").style.backgroundSize = "0px"; test(function() { assert_equals(getComputedStyle(document.getElementById("test"), null).getPropertyValue("background-size"), - "0px", "background-size supporting value"); + "0px auto", "background-size supporting value"); }, "background-size_length_zero"); document.getElementById("test").style.backgroundSize = "-0px"; test(function() { assert_equals(getComputedStyle(document.getElementById("test"), null).getPropertyValue("background-size"), - "0px", "background-size supporting value"); + "0px auto", "background-size supporting value"); }, "background-size_length_negative_zero"); document.getElementById("test").style.backgroundSize = "+0px"; test(function() { assert_equals(getComputedStyle(document.getElementById("test"), null).getPropertyValue("background-size"), - "0px", "background-size supporting value"); + "0px auto", "background-size supporting value"); }, "background-size_length_positive_zero"); document.getElementById("test").style.backgroundSize = "15px"; test(function() { assert_equals(getComputedStyle(document.getElementById("test"), null).getPropertyValue("background-size"), - "15px", "background-size supporting value"); + "15px auto", "background-size supporting value"); }, "background-size_length_normal"); document.getElementById("test").style.backgroundSize = "0%"; test(function() { assert_equals(getComputedStyle(document.getElementById("test"), null).getPropertyValue("background-size"), - "0%", "background-size supporting value"); + "0% auto", "background-size supporting value"); }, "background-size_percentage_min"); document.getElementById("test").style.backgroundSize = "50%"; test(function() { assert_equals(getComputedStyle(document.getElementById("test"), null).getPropertyValue("background-size"), - "50%", "background-size supporting value"); + "50% auto", "background-size supporting value"); }, "background-size_percentage_normal"); document.getElementById("test").style.backgroundSize = "100%"; test(function() { assert_equals(getComputedStyle(document.getElementById("test"), null).getPropertyValue("background-size"), - "100%", "background-size supporting value"); + "100% auto", "background-size supporting value"); }, "background-size_percentage_max"); document.getElementById("test").style.backgroundSize = "auto auto"; @@ -99,7 +99,7 @@ document.getElementById("test").style.backgroundSize = "15px auto"; test(function() { assert_equals(getComputedStyle(document.getElementById("test"), null).getPropertyValue("background-size"), - "15px", "background-size supporting value"); + "15px auto", "background-size supporting value"); }, "background-size_length_auto"); document.getElementById("test").style.backgroundSize = "15px 15px"; @@ -117,7 +117,7 @@ document.getElementById("test").style.backgroundSize = "50% auto"; test(function() { assert_equals(getComputedStyle(document.getElementById("test"), null).getPropertyValue("background-size"), - "50%", "background-size supporting value"); + "50% auto", "background-size supporting value"); }, "background-size_percentage_auto"); document.getElementById("test").style.backgroundSize = "50% 15px"; diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-animation-with-scroll-timeline-in-auto-subtree-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-animation-with-scroll-timeline-in-auto-subtree-expected.txt index f58e3333449b5..0215b04d6bb41 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-animation-with-scroll-timeline-in-auto-subtree-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-animation-with-scroll-timeline-in-auto-subtree-expected.txt @@ -1,5 +1,3 @@ -Harness Error (TIMEOUT), message = null - -TIMEOUT Animation with scroll-timeline should be affected c-v Test timed out +PASS Animation with scroll-timeline should be affected c-v diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-hidden-and-innertext-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-hidden-and-innertext-expected.html new file mode 100644 index 0000000000000..b4a80b361bb9d --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-hidden-and-innertext-expected.html @@ -0,0 +1,10 @@ + + + + +PASS if innerText reads: "content-visibility does not apply to inline boxes" +
    innerText: content-visibility does not apply to inline boxes
    diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-hidden-and-innertext-ref.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-hidden-and-innertext-ref.html new file mode 100644 index 0000000000000..b4a80b361bb9d --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-hidden-and-innertext-ref.html @@ -0,0 +1,10 @@ + + + + +PASS if innerText reads: "content-visibility does not apply to inline boxes" +
    innerText: content-visibility does not apply to inline boxes
    diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-hidden-and-innertext.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-hidden-and-innertext.html new file mode 100644 index 0000000000000..fa9f9d57a0236 --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-hidden-and-innertext.html @@ -0,0 +1,20 @@ + + + + + + +PASS if innerText reads: "content-visibility does not apply to inline boxes" +
    content-visibility does not apply to inline boxes
    +
    
    +
    diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/content-based-height-rounds-up-to-step-unit-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/content-based-height-rounds-up-to-step-unit-expected.html
    new file mode 100644
    index 0000000000000..416ef7382db5f
    --- /dev/null
    +++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/content-based-height-rounds-up-to-step-unit-expected.html
    @@ -0,0 +1,7 @@
    +
    +
    +
    +

    Test passes if there is a filled green square.

    +
    + + diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/content-based-height-rounds-up-to-step-unit.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/content-based-height-rounds-up-to-step-unit.html new file mode 100644 index 0000000000000..6d9e968924321 --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/content-based-height-rounds-up-to-step-unit.html @@ -0,0 +1,29 @@ + + + + + + + + + + +

    Test passes if there is a filled green square.

    +
    +
    + x x x +
    +
    + + diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/definite-height-rounds-up-to-next-multiple-of-step-unit-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/definite-height-rounds-up-to-next-multiple-of-step-unit-expected.html new file mode 100644 index 0000000000000..416ef7382db5f --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/definite-height-rounds-up-to-next-multiple-of-step-unit-expected.html @@ -0,0 +1,7 @@ + + + +

    Test passes if there is a filled green square.

    +
    + + diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/definite-height-rounds-up-to-next-multiple-of-step-unit.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/definite-height-rounds-up-to-next-multiple-of-step-unit.html new file mode 100644 index 0000000000000..503e729e098f2 --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/definite-height-rounds-up-to-next-multiple-of-step-unit.html @@ -0,0 +1,27 @@ + + + + + + + + + + +

    Test passes if there is a filled green square.

    +
    +
    +
    + + + diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/definite-height-rounds-up-to-step-unit-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/definite-height-rounds-up-to-step-unit-expected.html new file mode 100644 index 0000000000000..416ef7382db5f --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/definite-height-rounds-up-to-step-unit-expected.html @@ -0,0 +1,7 @@ + + + +

    Test passes if there is a filled green square.

    +
    + + diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/definite-height-rounds-up-to-step-unit.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/definite-height-rounds-up-to-step-unit.html new file mode 100644 index 0000000000000..49376cc6cb59d --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/definite-height-rounds-up-to-step-unit.html @@ -0,0 +1,27 @@ + + + + + + + + + + +

    Test passes if there is a filled green square.

    +
    +
    +
    + + + diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/definite-height-same-as-step-unit-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/definite-height-same-as-step-unit-expected.html new file mode 100644 index 0000000000000..416ef7382db5f --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/definite-height-same-as-step-unit-expected.html @@ -0,0 +1,7 @@ + + + +

    Test passes if there is a filled green square.

    +
    + + diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/definite-height-same-as-step-unit.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/definite-height-same-as-step-unit.html new file mode 100644 index 0000000000000..e355314511058 --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/definite-height-same-as-step-unit.html @@ -0,0 +1,26 @@ + + + + + + + + + + +

    Test passes if there is a filled green square.

    +
    +
    +
    + + diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/parsing/block-step-insert-computed-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/parsing/block-step-insert-computed-expected.txt index ecb6d9ab5d945..dac47ec1a5544 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/parsing/block-step-insert-computed-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/parsing/block-step-insert-computed-expected.txt @@ -1,4 +1,5 @@ -PASS Property block-step-insert value 'margin' -PASS Property block-step-insert value 'padding' +PASS Property block-step-insert value 'margin-box' +PASS Property block-step-insert value 'padding-box' +PASS Property block-step-insert value 'content-box' diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/parsing/block-step-insert-computed.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/parsing/block-step-insert-computed.html index cedbe3b9ec83f..406e19cdb118a 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/parsing/block-step-insert-computed.html +++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/parsing/block-step-insert-computed.html @@ -18,8 +18,9 @@
    diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/parsing/block-step-insert-invalid-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/parsing/block-step-insert-invalid-expected.txt index 58b98a946c17a..cd91c7ae51c0a 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/parsing/block-step-insert-invalid-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/parsing/block-step-insert-invalid-expected.txt @@ -6,7 +6,9 @@ PASS e.style['block-step-insert'] = "10%" should not set the property value PASS e.style['block-step-insert'] = "20" should not set the property value PASS e.style['block-step-insert'] = "none" should not set the property value PASS e.style['block-step-insert'] = "border-box" should not set the property value -PASS e.style['block-step-insert'] = "margin-box" should not set the property value PASS e.style['block-step-insert'] = "margin padding" should not set the property value PASS e.style['block-step-insert'] = "padding margin" should not set the property value +PASS e.style['block-step-insert'] = "margin" should not set the property value +PASS e.style['block-step-insert'] = "padding" should not set the property value +PASS e.style['block-step-insert'] = "content" should not set the property value diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/parsing/block-step-insert-invalid.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/parsing/block-step-insert-invalid.html index a186b49e5dd12..bda0aa0287bc2 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/parsing/block-step-insert-invalid.html +++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/parsing/block-step-insert-invalid.html @@ -25,9 +25,11 @@ test_invalid_value("block-step-insert", "20"); test_invalid_value("block-step-insert", "none"); test_invalid_value("block-step-insert", "border-box"); - test_invalid_value('block-step-insert', "margin-box"); test_invalid_value("block-step-insert", "margin padding"); test_invalid_value("block-step-insert", "padding margin"); + test_invalid_value('block-step-insert', "margin"); + test_invalid_value("block-step-insert", "padding") + test_invalid_value("block-step-insert", "content") diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/parsing/block-step-insert-valid-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/parsing/block-step-insert-valid-expected.txt index 5f18c7bbe087c..de4a13cee243b 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/parsing/block-step-insert-valid-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/parsing/block-step-insert-valid-expected.txt @@ -1,4 +1,5 @@ -PASS e.style['block-step-insert'] = "margin" should set the property value -PASS e.style['block-step-insert'] = "padding" should set the property value +PASS e.style['block-step-insert'] = "margin-box" should set the property value +PASS e.style['block-step-insert'] = "padding-box" should set the property value +PASS e.style['block-step-insert'] = "content-box" should set the property value diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/parsing/block-step-insert-valid.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/parsing/block-step-insert-valid.html index f7b0b5a9e0467..2faa03751e81e 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/parsing/block-step-insert-valid.html +++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-rhythm/parsing/block-step-insert-valid.html @@ -18,8 +18,9 @@
    \ No newline at end of file diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/idlharness-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/idlharness-expected.txt index 12b6270ddb9a4..7a626f047b404 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/idlharness-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/idlharness-expected.txt @@ -107,20 +107,20 @@ PASS Screen interface: screen must inherit property "width" with the proper type PASS Screen interface: screen must inherit property "height" with the proper type PASS Screen interface: screen must inherit property "colorDepth" with the proper type PASS Screen interface: screen must inherit property "pixelDepth" with the proper type -FAIL CaretPosition interface: existence and properties of interface object assert_own_property: self does not have own property "CaretPosition" expected property "CaretPosition" missing -FAIL CaretPosition interface object length assert_own_property: self does not have own property "CaretPosition" expected property "CaretPosition" missing -FAIL CaretPosition interface object name assert_own_property: self does not have own property "CaretPosition" expected property "CaretPosition" missing -FAIL CaretPosition interface: existence and properties of interface prototype object assert_own_property: self does not have own property "CaretPosition" expected property "CaretPosition" missing -FAIL CaretPosition interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "CaretPosition" expected property "CaretPosition" missing -FAIL CaretPosition interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "CaretPosition" expected property "CaretPosition" missing -FAIL CaretPosition interface: attribute offsetNode assert_own_property: self does not have own property "CaretPosition" expected property "CaretPosition" missing -FAIL CaretPosition interface: attribute offset assert_own_property: self does not have own property "CaretPosition" expected property "CaretPosition" missing -FAIL CaretPosition interface: operation getClientRect() assert_own_property: self does not have own property "CaretPosition" expected property "CaretPosition" missing -FAIL CaretPosition must be primary interface of document.caretPositionFromPoint(5, 5) assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: document.caretPositionFromPoint is not a function. (In 'document.caretPositionFromPoint(5, 5)', 'document.caretPositionFromPoint' is undefined)" -FAIL Stringification of document.caretPositionFromPoint(5, 5) assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: document.caretPositionFromPoint is not a function. (In 'document.caretPositionFromPoint(5, 5)', 'document.caretPositionFromPoint' is undefined)" -FAIL CaretPosition interface: document.caretPositionFromPoint(5, 5) must inherit property "offsetNode" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: document.caretPositionFromPoint is not a function. (In 'document.caretPositionFromPoint(5, 5)', 'document.caretPositionFromPoint' is undefined)" -FAIL CaretPosition interface: document.caretPositionFromPoint(5, 5) must inherit property "offset" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: document.caretPositionFromPoint is not a function. (In 'document.caretPositionFromPoint(5, 5)', 'document.caretPositionFromPoint' is undefined)" -FAIL CaretPosition interface: document.caretPositionFromPoint(5, 5) must inherit property "getClientRect()" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: document.caretPositionFromPoint is not a function. (In 'document.caretPositionFromPoint(5, 5)', 'document.caretPositionFromPoint' is undefined)" +PASS CaretPosition interface: existence and properties of interface object +PASS CaretPosition interface object length +PASS CaretPosition interface object name +PASS CaretPosition interface: existence and properties of interface prototype object +PASS CaretPosition interface: existence and properties of interface prototype object's "constructor" property +PASS CaretPosition interface: existence and properties of interface prototype object's @@unscopables property +PASS CaretPosition interface: attribute offsetNode +PASS CaretPosition interface: attribute offset +PASS CaretPosition interface: operation getClientRect() +PASS CaretPosition must be primary interface of document.caretPositionFromPoint(5, 5) +PASS Stringification of document.caretPositionFromPoint(5, 5) +PASS CaretPosition interface: document.caretPositionFromPoint(5, 5) must inherit property "offsetNode" with the proper type +PASS CaretPosition interface: document.caretPositionFromPoint(5, 5) must inherit property "offset" with the proper type +PASS CaretPosition interface: document.caretPositionFromPoint(5, 5) must inherit property "getClientRect()" with the proper type FAIL CSSPseudoElement interface: operation getBoxQuads(optional BoxQuadOptions) assert_own_property: self does not have own property "CSSPseudoElement" expected property "CSSPseudoElement" missing FAIL CSSPseudoElement interface: operation convertQuadFromNode(DOMQuadInit, GeometryNode, optional ConvertCoordinateOptions) assert_own_property: self does not have own property "CSSPseudoElement" expected property "CSSPseudoElement" missing FAIL CSSPseudoElement interface: operation convertRectFromNode(DOMRectReadOnly, GeometryNode, optional ConvertCoordinateOptions) assert_own_property: self does not have own property "CSSPseudoElement" expected property "CSSPseudoElement" missing @@ -283,7 +283,7 @@ PASS Window interface: window must inherit property "outerHeight" with the prope PASS Window interface: window must inherit property "devicePixelRatio" with the proper type PASS Document interface: operation elementFromPoint(double, double) PASS Document interface: operation elementsFromPoint(double, double) -FAIL Document interface: operation caretPositionFromPoint(double, double) assert_own_property: interface prototype object missing non-static operation expected property "caretPositionFromPoint" missing +PASS Document interface: operation caretPositionFromPoint(double, double) PASS Document interface: attribute scrollingElement FAIL Document interface: operation getBoxQuads(optional BoxQuadOptions) assert_own_property: interface prototype object missing non-static operation expected property "getBoxQuads" missing FAIL Document interface: operation convertQuadFromNode(DOMQuadInit, GeometryNode, optional ConvertCoordinateOptions) assert_own_property: interface prototype object missing non-static operation expected property "convertQuadFromNode" missing @@ -293,8 +293,8 @@ PASS Document interface: document must inherit property "elementFromPoint(double PASS Document interface: calling elementFromPoint(double, double) on document with too few arguments must throw TypeError PASS Document interface: document must inherit property "elementsFromPoint(double, double)" with the proper type PASS Document interface: calling elementsFromPoint(double, double) on document with too few arguments must throw TypeError -FAIL Document interface: document must inherit property "caretPositionFromPoint(double, double)" with the proper type assert_inherits: property "caretPositionFromPoint" not found in prototype chain -FAIL Document interface: calling caretPositionFromPoint(double, double) on document with too few arguments must throw TypeError assert_inherits: property "caretPositionFromPoint" not found in prototype chain +PASS Document interface: document must inherit property "caretPositionFromPoint(double, double)" with the proper type +PASS Document interface: calling caretPositionFromPoint(double, double) on document with too few arguments must throw TypeError PASS Document interface: document must inherit property "scrollingElement" with the proper type FAIL Document interface: document must inherit property "getBoxQuads(optional BoxQuadOptions)" with the proper type assert_inherits: property "getBoxQuads" not found in prototype chain FAIL Document interface: calling getBoxQuads(optional BoxQuadOptions) on document with too few arguments must throw TypeError assert_inherits: property "getBoxQuads" not found in prototype chain diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/caretPositionFromPoint-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/caretPositionFromPoint-expected.txt index 0cbf1bd8210c1..cb2eadaf5266c 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/caretPositionFromPoint-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/caretPositionFromPoint-expected.txt @@ -1,8 +1,8 @@ aaa PASS document.caretPositionFromPoint() throws when called without the correct parameters -FAIL document.caretPositionFromPoint() should return null for a document with no viewport doc.caretPositionFromPoint is not a function. (In 'doc.caretPositionFromPoint(0, 0)', 'doc.caretPositionFromPoint' is undefined) -FAIL document.caretPositionFromPoint() should return null if given coordinates outside of the viewport document.caretPositionFromPoint is not a function. (In 'document.caretPositionFromPoint(-5, 5)', 'document.caretPositionFromPoint' is undefined) -FAIL document.caretPositionFromPoint() should return a CaretPosition at the specified location document.caretPositionFromPoint is not a function. (In 'document.caretPositionFromPoint(x, y)', 'document.caretPositionFromPoint' is undefined) -FAIL CaretRange.getClientRect() should return a DOMRect that matches one obtained from a manually constructed Range document.caretPositionFromPoint is not a function. (In 'document.caretPositionFromPoint(x, y)', 'document.caretPositionFromPoint' is undefined) +PASS document.caretPositionFromPoint() should return null for a document with no viewport +PASS document.caretPositionFromPoint() should return null if given coordinates outside of the viewport +PASS document.caretPositionFromPoint() should return a CaretPosition at the specified location +PASS CaretRange.getClientRect() should return a DOMRect that matches one obtained from a manually constructed Range diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/caretPositionFromPoint-with-transformation-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/caretPositionFromPoint-with-transformation-expected.txt index cb25599e8a0fc..334b2eef84d96 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/caretPositionFromPoint-with-transformation-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/caretPositionFromPoint-with-transformation-expected.txt @@ -1,21 +1,5 @@ -CONSOLE MESSAGE: TypeError: frameDoc.caretPositionFromPoint is not a function. (In 'frameDoc.caretPositionFromPoint( - ...elementCenter(frameDoc.querySelector("h1")) - )', 'frameDoc.caretPositionFromPoint' is undefined) -CONSOLE MESSAGE: TypeError: frameDoc.caretPositionFromPoint is not a function. (In 'frameDoc.caretPositionFromPoint( - ...elementCenter(frameDoc.querySelector("h1")) - )', 'frameDoc.caretPositionFromPoint' is undefined) -Harness Error (FAIL), message = TypeError: frameDoc.caretPositionFromPoint is not a function. (In 'frameDoc.caretPositionFromPoint( - ...elementCenter(frameDoc.querySelector("h1")) - )', 'frameDoc.caretPositionFromPoint' is undefined) - -TIMEOUT iframe's with equal content should report the same caret offset Test timed out - -Harness Error (FAIL), message = TypeError: frameDoc.caretPositionFromPoint is not a function. (In 'frameDoc.caretPositionFromPoint( - ...elementCenter(frameDoc.querySelector("h1")) - )', 'frameDoc.caretPositionFromPoint' is undefined) - -TIMEOUT iframe's with equal content should report the same caret offset Test timed out +PASS iframe's with equal content should report the same caret offset diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/has-css-nesting-shared-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/has-css-nesting-shared-expected.txt index aa6cdc3ed47c4..5a813b0cd17f8 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/has-css-nesting-shared-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/has-css-nesting-shared-expected.txt @@ -7,8 +7,8 @@ PASS add .test to trigger2 - check subject2_1 PASS add .test to trigger2 - check subject2_2 PASS remove .test from trigger2 - check subject2_1 PASS remove .test from trigger2 - check subject2_2 -FAIL add .test to trigger3 - check subject3_1 assert_equals: expected "rgb(0, 0, 255)" but got "rgb(128, 128, 128)" -FAIL add .test to trigger3 - check subject3_2 assert_equals: expected "rgb(135, 206, 235)" but got "rgb(128, 128, 128)" +PASS add .test to trigger3 - check subject3_1 +PASS add .test to trigger3 - check subject3_2 PASS remove .test from trigger3 - check subject3_1 PASS remove .test from trigger3 - check subject3_2 diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/dom/idlharness.https_exclude=(Document_Window_HTML._)-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/dom/idlharness.https_exclude=(Document_Window_HTML._)-expected.txt index b9b9c0a146b6f..7f1afb067314d 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/html/dom/idlharness.https_exclude=(Document_Window_HTML._)-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/html/dom/idlharness.https_exclude=(Document_Window_HTML._)-expected.txt @@ -748,7 +748,6 @@ PASS OffscreenCanvasRenderingContext2D interface object name PASS OffscreenCanvasRenderingContext2D interface: existence and properties of interface prototype object PASS OffscreenCanvasRenderingContext2D interface: existence and properties of interface prototype object's "constructor" property PASS OffscreenCanvasRenderingContext2D interface: existence and properties of interface prototype object's @@unscopables property -PASS OffscreenCanvasRenderingContext2D interface: operation commit() PASS OffscreenCanvasRenderingContext2D interface: attribute canvas PASS OffscreenCanvasRenderingContext2D interface: operation save() PASS OffscreenCanvasRenderingContext2D interface: operation restore() diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/dom/idlharness.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/dom/idlharness.worker-expected.txt index 52ed6940ba3b6..ffbad2311be8d 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/html/dom/idlharness.worker-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/html/dom/idlharness.worker-expected.txt @@ -346,7 +346,6 @@ PASS OffscreenCanvasRenderingContext2D interface object name PASS OffscreenCanvasRenderingContext2D interface: existence and properties of interface prototype object PASS OffscreenCanvasRenderingContext2D interface: existence and properties of interface prototype object's "constructor" property PASS OffscreenCanvasRenderingContext2D interface: existence and properties of interface prototype object's @@unscopables property -PASS OffscreenCanvasRenderingContext2D interface: operation commit() PASS OffscreenCanvasRenderingContext2D interface: attribute canvas PASS OffscreenCanvasRenderingContext2D interface: operation save() PASS OffscreenCanvasRenderingContext2D interface: operation restore() diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/rendering/the-details-element/details-blockification-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/rendering/the-details-element/details-blockification-expected.txt index de86b6e80831b..461945fb76b2f 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/html/rendering/the-details-element/details-blockification-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/html/rendering/the-details-element/details-blockification-expected.txt @@ -3,5 +3,5 @@ bar foo bar -FAIL Summary and content should have display:block computed value assert_equals: expected "block" but got "inline" +PASS Summary and content should have display:block computed value diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/rendering/the-details-element/details-pseudo-elements-006-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/rendering/the-details-element/details-pseudo-elements-006-expected.txt index b3d5df01964a4..2a9a7f6070341 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/html/rendering/the-details-element/details-pseudo-elements-006-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/html/rendering/the-details-element/details-pseudo-elements-006-expected.txt @@ -1,5 +1,5 @@ summary contents -FAIL ::details-content matches :hover when mouse pointer is over it assert_equals: :hover styles when pointer is inside expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" +PASS ::details-content matches :hover when mouse pointer is over it diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/backdrop-stacking-order.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/backdrop-stacking-order.html index e5136de0fe043..897f54a53fbae 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/backdrop-stacking-order.html +++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/backdrop-stacking-order.html @@ -1,5 +1,4 @@ - + +Dialog1 +
    Popover1
    + diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/top-layer-backdrop-remove-add-ordering-ref.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/top-layer-backdrop-remove-add-ordering-ref.html new file mode 100644 index 0000000000000..7bc302861e336 --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/top-layer-backdrop-remove-add-ordering-ref.html @@ -0,0 +1,19 @@ + + + +Dialog1 +
    Popover1
    + diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/top-layer-backdrop-remove-add-ordering.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/top-layer-backdrop-remove-add-ordering.html new file mode 100644 index 0000000000000..fbfe2e1fd17a4 --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/top-layer-backdrop-remove-add-ordering.html @@ -0,0 +1,26 @@ + + + + + + + +Dialog1 +
    Popover1
    + diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/top-layer-display-none.html b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/top-layer-display-none.html index cbbd483c9ad32..ba790c1db9a56 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/top-layer-display-none.html +++ b/LayoutTests/imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/top-layer-display-none.html @@ -1,7 +1,6 @@ - + + diff --git a/LayoutTests/imported/w3c/web-platform-tests/loading/preloader-css-import.html b/LayoutTests/imported/w3c/web-platform-tests/loading/preloader-css-import.html new file mode 100644 index 0000000000000..6e84e139832e8 --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/loading/preloader-css-import.html @@ -0,0 +1,31 @@ + + + + + + + + + + diff --git a/LayoutTests/imported/w3c/web-platform-tests/loading/preloader-link-media-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/loading/preloader-link-media-expected.txt new file mode 100644 index 0000000000000..24a86c2ece909 --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/loading/preloader-link-media-expected.txt @@ -0,0 +1,3 @@ + +PASS Non-matching link media is not preloaded + diff --git a/LayoutTests/imported/w3c/web-platform-tests/loading/preloader-link-media.html b/LayoutTests/imported/w3c/web-platform-tests/loading/preloader-link-media.html new file mode 100644 index 0000000000000..93fc7d969fd75 --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/loading/preloader-link-media.html @@ -0,0 +1,33 @@ + + + + + + + + + diff --git a/LayoutTests/imported/w3c/web-platform-tests/loading/preloader-template-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/loading/preloader-template-expected.txt new file mode 100644 index 0000000000000..a5f184cb61458 --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/loading/preloader-template-expected.txt @@ -0,0 +1,3 @@ + +PASS Things inside templates are not preloaded + diff --git a/LayoutTests/imported/w3c/web-platform-tests/loading/preloader-template.html b/LayoutTests/imported/w3c/web-platform-tests/loading/preloader-template.html new file mode 100644 index 0000000000000..e816309184844 --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/loading/preloader-template.html @@ -0,0 +1,35 @@ + + + + + diff --git a/LayoutTests/imported/w3c/web-platform-tests/loading/resources/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/loading/resources/w3c-import.log new file mode 100644 index 0000000000000..ba9f81230d8a4 --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/loading/resources/w3c-import.log @@ -0,0 +1,18 @@ +The tests in this directory were imported from the W3C repository. +Do NOT modify these tests directly in WebKit. +Instead, create a pull request on the WPT github: + https://github.com/web-platform-tests/wpt + +Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport + +Do NOT modify or remove this file. + +------------------------------------------------------------------------ +Properties requiring vendor prefixes: +None +Property values requiring vendor prefixes: +None +------------------------------------------------------------------------ +List of files: +/LayoutTests/imported/w3c/web-platform-tests/loading/resources/dummy.css +/LayoutTests/imported/w3c/web-platform-tests/loading/resources/dummy.js diff --git a/LayoutTests/imported/w3c/web-platform-tests/loading/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/loading/w3c-import.log new file mode 100644 index 0000000000000..a52181c22acde --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/loading/w3c-import.log @@ -0,0 +1,23 @@ +The tests in this directory were imported from the W3C repository. +Do NOT modify these tests directly in WebKit. +Instead, create a pull request on the WPT github: + https://github.com/web-platform-tests/wpt + +Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport + +Do NOT modify or remove this file. + +------------------------------------------------------------------------ +Properties requiring vendor prefixes: +None +Property values requiring vendor prefixes: +None +------------------------------------------------------------------------ +List of files: +/LayoutTests/imported/w3c/web-platform-tests/loading/preloader-css-import-no-quote.html +/LayoutTests/imported/w3c/web-platform-tests/loading/preloader-css-import-no-semicolon.html +/LayoutTests/imported/w3c/web-platform-tests/loading/preloader-css-import-no-space.html +/LayoutTests/imported/w3c/web-platform-tests/loading/preloader-css-import-single-quote.html +/LayoutTests/imported/w3c/web-platform-tests/loading/preloader-css-import.html +/LayoutTests/imported/w3c/web-platform-tests/loading/preloader-link-media.html +/LayoutTests/imported/w3c/web-platform-tests/loading/preloader-template.html diff --git a/LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigate-event/cross-origin-traversal-redirect.html b/LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigate-event/cross-origin-traversal-redirect.html index 24ccc0956ac95..f7bebae510009 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigate-event/cross-origin-traversal-redirect.html +++ b/LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigate-event/cross-origin-traversal-redirect.html @@ -3,10 +3,11 @@ + + + + + +
    +
    +
    + + diff --git a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-anonymous-source-scrollable-body-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-anonymous-source-scrollable-body-expected.txt new file mode 100644 index 0000000000000..8fd7905491db4 --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-anonymous-source-scrollable-body-expected.txt @@ -0,0 +1,5 @@ + +PASS CSS animation correctly uses the element as the source for the self scroll() timeline +PASS CSS animation correctly uses the element as the source for the nearest scroll() timeline +PASS CSS animation correctly uses the element as the source for the root scroll() timeline + diff --git a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-anonymous-source-scrollable-body-quirks-mode-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-anonymous-source-scrollable-body-quirks-mode-expected.txt new file mode 100644 index 0000000000000..0ef046002c0dc --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-anonymous-source-scrollable-body-quirks-mode-expected.txt @@ -0,0 +1,5 @@ + +PASS CSS animation correctly uses the element as the source for the self scroll() timeline in quirks mode +PASS CSS animation correctly uses the element as the source for the nearest scroll() timeline in quirks mode +PASS CSS animation correctly uses the element as the source for the root scroll() timeline in quirks mode + diff --git a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-anonymous-source-scrollable-body-quirks-mode.html b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-anonymous-source-scrollable-body-quirks-mode.html new file mode 100644 index 0000000000000..2e18c881208ab --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-anonymous-source-scrollable-body-quirks-mode.html @@ -0,0 +1,48 @@ + +The scroll() timeline source in quirks mode with a scrollable <body> in quirks mode + + + + + + + + + diff --git a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-anonymous-source-scrollable-body.html b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-anonymous-source-scrollable-body.html new file mode 100644 index 0000000000000..018189b2bd8e9 --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-anonymous-source-scrollable-body.html @@ -0,0 +1,49 @@ + + +The scroll() timeline source in quirks mode with a scrollable <body> + + + + + + + + + diff --git a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-anonymous-source.html b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-anonymous-source.html new file mode 100644 index 0000000000000..5f652c717fe06 --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-anonymous-source.html @@ -0,0 +1,51 @@ + + +The scroll() timeline source + + + + + + + +
    +
    +
    + + diff --git a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-inactive-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-inactive-expected.txt index 08e91935447f7..ef13fd1bcf870 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-inactive-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-inactive-expected.txt @@ -1,4 +1,4 @@ PASS Animation does not apply when the timeline is inactive because there is not scroll range -FAIL Animation does not apply when timeline is initially inactive promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: scroller" +FAIL Animation does not apply when timeline is initially inactive assert_equals: expected "0px" but got "100px" diff --git a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-range-animation-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-range-animation-expected.txt index b4ff9225dcf6c..2aa5a2f0d6568 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-range-animation-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/scroll-timeline-range-animation-expected.txt @@ -1,12 +1,10 @@ -Harness Error (TIMEOUT), message = null - PASS Animation with ranges [initial, initial] -TIMEOUT Animation with ranges [0%, 100%] Test timed out -NOTRUN Animation with ranges [10%, 100%] -NOTRUN Animation with ranges [0%, 50%] -NOTRUN Animation with ranges [10%, 50%] -NOTRUN Animation with ranges [150px, 75em] -NOTRUN Animation with ranges [calc(1% + 135px), calc(70em + 50px)] -NOTRUN Animation with ranges [calc(1% + 135px), calc(70em + 50px)] (scoped) +PASS Animation with ranges [0%, 100%] +PASS Animation with ranges [10%, 100%] +PASS Animation with ranges [0%, 50%] +PASS Animation with ranges [10%, 50%] +PASS Animation with ranges [150px, 75em] +PASS Animation with ranges [calc(1% + 135px), calc(70em + 50px)] +FAIL Animation with ranges [calc(1% + 135px), calc(70em + 50px)] (scoped) assert_equals: expected "0" but got "100" diff --git a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/timeline-scope-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/timeline-scope-expected.txt index d4fb3a0167a95..e721fde0e6d5d 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/timeline-scope-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/timeline-scope-expected.txt @@ -7,6 +7,6 @@ FAIL Dynamically re-attaching assert_equals: expected "100px" but got "0px" FAIL Dynamically detaching assert_equals: expected "0px" but got "100px" FAIL Removing/inserting element with attaching timeline assert_equals: expected "100px" but got "0px" FAIL Ancestor attached element becoming display:none/block assert_equals: expected "100px" but got "0px" -FAIL A deferred timeline appearing dynamically in the ancestor chain assert_equals: expected "0px" but got "100px" +FAIL A deferred timeline appearing dynamically in the ancestor chain assert_equals: expected "100px" but got "0px" PASS Animations prefer non-deferred timelines diff --git a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/view-timeline-range-animation-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/view-timeline-range-animation-expected.txt index 05560bb0caee9..774145d040ff8 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/view-timeline-range-animation-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/view-timeline-range-animation-expected.txt @@ -1,20 +1,18 @@ -Harness Error (TIMEOUT), message = null - FAIL Animation with ranges [initial, initial] assert_equals: expected "0" but got "100" -TIMEOUT Animation with ranges [cover 0%, cover 100%] Test timed out -NOTRUN Animation with ranges [contain 0%, contain 100%] -NOTRUN Animation with ranges [entry 0%, entry 100%] -NOTRUN Animation with ranges [exit 0%, exit 100%] -NOTRUN Animation with ranges [contain -50%, entry 200%] -NOTRUN Animation with ranges [entry 0%, exit 100%] -NOTRUN Animation with ranges [cover 20px, cover 100px] -NOTRUN Animation with ranges [contain 20px, contain 100px] -NOTRUN Animation with ranges [entry 20px, entry 100px] -NOTRUN Animation with ranges [entry-crossing 20px, entry-crossing 100px] -NOTRUN Animation with ranges [exit 20px, exit 80px] -NOTRUN Animation with ranges [exit-crossing 20px, exit-crossing 80px] -NOTRUN Animation with ranges [contain 20px, contain calc(100px - 10%)] -NOTRUN Animation with ranges [exit 2em, exit 8em] -NOTRUN Animation with ranges [exit 2em, exit 8em] (scoped) +FAIL Animation with ranges [cover 0%, cover 100%] assert_equals: expected "0" but got "100" +FAIL Animation with ranges [contain 0%, contain 100%] assert_equals: expected "0" but got "100" +FAIL Animation with ranges [entry 0%, entry 100%] assert_equals: expected "50" but got "0" +FAIL Animation with ranges [exit 0%, exit 100%] assert_equals: expected "0" but got "100" +FAIL Animation with ranges [contain -50%, entry 200%] assert_equals: expected "0" but got "-1" +FAIL Animation with ranges [entry 0%, exit 100%] assert_equals: expected "0" but got "100" +FAIL Animation with ranges [cover 20px, cover 100px] assert_equals: expected "0" but got "100" +FAIL Animation with ranges [contain 20px, contain 100px] assert_equals: expected "0" but got "100" +FAIL Animation with ranges [entry 20px, entry 100px] assert_equals: expected "0" but got "100" +FAIL Animation with ranges [entry-crossing 20px, entry-crossing 100px] assert_equals: expected "0" but got "100" +FAIL Animation with ranges [exit 20px, exit 80px] assert_equals: expected "0" but got "100" +FAIL Animation with ranges [exit-crossing 20px, exit-crossing 80px] assert_equals: expected "0" but got "100" +FAIL Animation with ranges [contain 20px, contain calc(100px - 10%)] assert_equals: expected "0" but got "100" +FAIL Animation with ranges [exit 2em, exit 8em] assert_equals: expected "0" but got "100" +FAIL Animation with ranges [exit 2em, exit 8em] (scoped) assert_equals: expected "0" but got "100" diff --git a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/view-timeline-with-transform-on-subject-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/view-timeline-with-transform-on-subject-expected.txt index 8b9dfc5ff724f..5d88822943630 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/view-timeline-with-transform-on-subject-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/css/view-timeline-with-transform-on-subject-expected.txt @@ -1,3 +1,3 @@ -FAIL ViewTimeline use untransformed box for range calculations assert_approx_equals: progress at contain 50% expected 0.5 +/- 0.000001 but got 0.5744000244140625 +FAIL ViewTimeline use untransformed box for range calculations assert_approx_equals: progress at contain 0% expected 0 +/- 0.000001 but got 0.56 diff --git a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/effect-updateTiming-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/effect-updateTiming-expected.txt index 1c88d2b2cceb2..e1494ac23bb37 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/effect-updateTiming-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/effect-updateTiming-expected.txt @@ -1,9 +1,9 @@ PASS Allows setting the delay to a positive number -FAIL Allows setting the delay to a negative number assert_approx_equals: values do not match for "getComputedTiming().endTime after set delay -100" expected 0 +/- 0.125 but got 100 -FAIL Allows setting the delay of an animation in progress: positive delay that causes the animation to be no longer in-effect assert_equals: expected (object) null but got (number) 0 -FAIL Allows setting the delay of an animation in progress: negative delay that seeks into the active interval assert_equals: expected 0.5 but got 0 -FAIL Allows setting the delay of an animation in progress: large negative delay that causes the animation to be finished assert_equals: expected 1 but got 0 +PASS Allows setting the delay to a negative number +PASS Allows setting the delay of an animation in progress: positive delay that causes the animation to be no longer in-effect +PASS Allows setting the delay of an animation in progress: negative delay that seeks into the active interval +PASS Allows setting the delay of an animation in progress: large negative delay that causes the animation to be finished PASS Throws when setting invalid delay value: NaN PASS Throws when setting invalid delay value: Infinity PASS Throws when setting invalid delay value: -Infinity @@ -26,10 +26,10 @@ PASS Allows setting iterations to a double value FAIL Throws when setting iterations to Infinity assert_throws_js: test function "() => { anim.effect.updateTiming({ iterations: Infinity }); }" did not throw -FAIL Allows setting the iterations of an animation in progress assert_equals: 'actual' unit type must be 'percent' for "duration when animation is finished" expected (string) "percent" but got (undefined) undefined -FAIL Allows setting the iterations of an animation in progress with duration "auto" assert_equals: 'actual' unit type must be 'percent' for "duration when animation is finished" expected (string) "percent" but got (undefined) undefined -FAIL Allows setting the duration to 123.45 assert_approx_equals: Updates specified duration expected a number but got a "string" -FAIL Allows setting the duration to auto assert_equals: 'actual' unit type must be 'percent' for "Updates computed duration" expected (string) "percent" but got (undefined) undefined +PASS Allows setting the iterations of an animation in progress +FAIL Allows setting the iterations of an animation in progress with duration "auto" assert_equals: progress after adding an iteration expected 1 but got 0 +PASS Allows setting the duration to 123.45 +PASS Allows setting the duration to auto PASS Throws when setting invalid duration: -1 PASS Throws when setting invalid duration: NaN FAIL Throws when setting invalid duration: Infinity assert_throws_js: function "() => { @@ -40,7 +40,7 @@ PASS Throws when setting invalid duration: -Infinity PASS Throws when setting invalid duration: "abc" PASS Throws when setting invalid duration: "100" PASS Allows setting the duration of an animation in progress -FAIL Allows setting the duration of an animation in progress such that the the start and current time do not change assert_equals: 'actual' unit type must be 'percent' for "Initial duration should be as set on KeyframeEffect" expected (string) "percent" but got (undefined) undefined +PASS Allows setting the duration of an animation in progress such that the the start and current time do not change PASS Allows setting the direction to each of the possible keywords PASS Allows setting the direction of an animation in progress from 'normal' to 'reverse' PASS Allows setting the direction of an animation in progress from 'normal' to 'reverse' while at start of active interval diff --git a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/intrinsic-iteration-duration.tentative-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/intrinsic-iteration-duration.tentative-expected.txt index da5e68d6aefad..4b62bac8be79e 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/intrinsic-iteration-duration.tentative-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/intrinsic-iteration-duration.tentative-expected.txt @@ -1,8 +1,8 @@ -FAIL Computed duration in percent even when specified in ms assert_equals: 'actual' unit type must be 'percent' for "undefined" expected (string) "percent" but got (undefined) undefined -FAIL Time-based duration normalized to fill animation range. assert_equals: 'actual' unit type must be 'percent' for "undefined" expected (string) "percent" but got (undefined) undefined -FAIL Time-based duration normalized to preserve proportional delays. assert_equals: 'actual' unit type must be 'percent' for "undefined" expected (string) "percent" but got (undefined) undefined -FAIL Intrinsic iteration duration fills timeline. assert_equals: 'actual' unit type must be 'percent' for "undefined" expected (string) "percent" but got (undefined) undefined -FAIL Intrinsic iteration duration accounts for animation range. assert_equals: 'actual' unit type must be 'percent' for "undefined" expected (string) "percent" but got (undefined) undefined -FAIL Intrinsic iteration duration accounts for number of iterations assert_equals: 'actual' unit type must be 'percent' for "undefined" expected (string) "percent" but got (undefined) undefined +PASS Computed duration in percent even when specified in ms +FAIL Time-based duration normalized to fill animation range. assert_approx_equals: values do not match for "undefined" expected 60 +/- 0.125 but got 100 +PASS Time-based duration normalized to preserve proportional delays. +PASS Intrinsic iteration duration fills timeline. +FAIL Intrinsic iteration duration accounts for animation range. assert_approx_equals: values do not match for "undefined" expected 60 +/- 0.125 but got 100 +PASS Intrinsic iteration duration accounts for number of iterations diff --git a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/scroll-animation-effect-fill-modes.tentative-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/scroll-animation-effect-fill-modes.tentative-expected.txt index 6965a1f80598e..16f4dd14c9542 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/scroll-animation-effect-fill-modes.tentative-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/scroll-animation-effect-fill-modes.tentative-expected.txt @@ -1,28 +1,28 @@ PASS Scroll based animation effect fill mode should return 'auto' for getTiming() and should return 'none' for getComputedTiming(). -FAIL Applied effect value before start delay with fill: none assert_equals: animation effect applied property value expected 1 but got 0.34 -FAIL Applied effect value at start delay with fill: none assert_equals: animation effect applied property value expected 0.3 but got 0.4 +PASS Applied effect value before start delay with fill: none +PASS Applied effect value at start delay with fill: none PASS Applied effect value at midpoint with fill: none -FAIL Applied effect value at effect end with fill: none assert_equals: animation effect applied property value expected 1 but got 0.6 -FAIL Applied effect value after effect end with fill: none assert_equals: animation effect applied property value expected 1 but got 0.66 -FAIL Applied effect value before start delay with fill: backwards assert_equals: animation effect applied property value expected 0.3 but got 0.34 -FAIL Applied effect value at start delay with fill: backwards assert_equals: animation effect applied property value expected 0.3 but got 0.4 +PASS Applied effect value at effect end with fill: none +PASS Applied effect value after effect end with fill: none +PASS Applied effect value before start delay with fill: backwards +PASS Applied effect value at start delay with fill: backwards PASS Applied effect value at midpoint with fill: backwards -FAIL Applied effect value at effect end with fill: backwards assert_equals: animation effect applied property value expected 1 but got 0.6 -FAIL Applied effect value after effect end with fill: backwards assert_equals: animation effect applied property value expected 1 but got 0.66 -FAIL Applied effect value before timeline start with fill: forwards assert_equals: animation effect applied property value expected 1 but got 0.34 -FAIL Applied effect value at timeline start with fill: forwards assert_equals: animation effect applied property value expected 0.3 but got 0.4 +PASS Applied effect value at effect end with fill: backwards +PASS Applied effect value after effect end with fill: backwards +PASS Applied effect value before timeline start with fill: forwards +PASS Applied effect value at timeline start with fill: forwards PASS Applied effect value in timeline range with fill: forwards -FAIL Applied effect value at timeline end with fill: forwards assert_equals: animation effect applied property value expected 0.7 but got 0.6 -FAIL Applied effect value after timeline end with fill: forwards assert_equals: animation effect applied property value expected 0.7 but got 0.66 -FAIL Applied effect value before timeline start with fill: both assert_equals: animation effect applied property value expected 0.3 but got 0.34 -FAIL Applied effect value at timeline start with fill: both assert_equals: animation effect applied property value expected 0.3 but got 0.4 +PASS Applied effect value at timeline end with fill: forwards +PASS Applied effect value after timeline end with fill: forwards +PASS Applied effect value before timeline start with fill: both +PASS Applied effect value at timeline start with fill: both PASS Applied effect value in timeline range with fill: both -FAIL Applied effect value at timeline end with fill: both assert_equals: animation effect applied property value expected 0.7 but got 0.6 -FAIL Applied effect value after timeline end with fill: both assert_equals: animation effect applied property value expected 0.7 but got 0.66 -FAIL Applied effect value before timeline start with fill: auto assert_equals: animation effect applied property value expected 1 but got 0.34 -FAIL Applied effect value at timeline start with fill: auto assert_equals: animation effect applied property value expected 0.3 but got 0.4 +PASS Applied effect value at timeline end with fill: both +PASS Applied effect value after timeline end with fill: both +PASS Applied effect value before timeline start with fill: auto +PASS Applied effect value at timeline start with fill: auto PASS Applied effect value in timeline range with fill: auto -FAIL Applied effect value at timeline end with fill: auto assert_equals: animation effect applied property value expected 1 but got 0.6 -FAIL Applied effect value after timeline end with fill: auto assert_equals: animation effect applied property value expected 1 but got 0.66 +PASS Applied effect value at timeline end with fill: auto +PASS Applied effect value after timeline end with fill: auto diff --git a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/scroll-animation-effect-phases.tentative-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/scroll-animation-effect-phases.tentative-expected.txt index 407f5cb0be8ca..34b246f5d189f 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/scroll-animation-effect-phases.tentative-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/scroll-animation-effect-phases.tentative-expected.txt @@ -2,30 +2,30 @@ PASS Current times and effect phase at start when delay = 0 and endDelay = 0 | PASS Current times and effect phase in active range when delay = 0 and endDelay = 0 | PASS Current times and effect phase at effect end time when delay = 0 and endDelay = 0 | -FAIL Current times and effect phase at timeline start when delay = 500 and endDelay = 0 | assert_equals: animation effect progress expected (object) null but got (number) 0 -FAIL Current times and effect phase before start delay when delay = 500 and endDelay = 0 | assert_equals: animation effect progress expected (object) null but got (number) 0.25 -FAIL Current times and effect phase at start delay when delay = 500 and endDelay = 0 | assert_approx_equals: animation effect progress expected 0 +/- 0.001 but got 0.5 -FAIL Current times and effect phase in active range when delay = 500 and endDelay = 0 | assert_approx_equals: animation effect progress expected 0.5 +/- 0.001 but got 0.75 +PASS Current times and effect phase at timeline start when delay = 500 and endDelay = 0 | +PASS Current times and effect phase before start delay when delay = 500 and endDelay = 0 | +PASS Current times and effect phase at start delay when delay = 500 and endDelay = 0 | +PASS Current times and effect phase in active range when delay = 500 and endDelay = 0 | PASS Current times and effect phase at effect end time when delay = 500 and endDelay = 0 | PASS Current times and effect phase at timeline start when delay = 0 and endDelay = 500 | -FAIL Current times and effect phase in active range when delay = 0 and endDelay = 500 | assert_approx_equals: animation effect progress expected 0.5 +/- 0.001 but got 0.25 -FAIL Current times and effect phase at effect end time when delay = 0 and endDelay = 500 | assert_equals: animation effect progress expected (object) null but got (number) 0.5 -FAIL Current times and effect phase after effect end time when delay = 0 and endDelay = 500 | assert_equals: animation effect progress expected (object) null but got (number) 0.75 -FAIL Current times and effect phase at timeline boundary when delay = 0 and endDelay = 500 | assert_equals: animation effect progress expected (object) null but got (number) 1 -FAIL Current times and effect phase at timeline start when delay = 250 and endDelay = 250 | assert_equals: animation effect progress expected (object) null but got (number) 0 -FAIL Current times and effect phase before start delay when delay = 250 and endDelay = 250 | assert_equals: animation effect progress expected (object) null but got (number) 0.1 -FAIL Current times and effect phase at start delay when delay = 250 and endDelay = 250 | assert_approx_equals: animation effect progress expected 0 +/- 0.001 but got 0.25 +PASS Current times and effect phase in active range when delay = 0 and endDelay = 500 | +PASS Current times and effect phase at effect end time when delay = 0 and endDelay = 500 | +PASS Current times and effect phase after effect end time when delay = 0 and endDelay = 500 | +PASS Current times and effect phase at timeline boundary when delay = 0 and endDelay = 500 | +PASS Current times and effect phase at timeline start when delay = 250 and endDelay = 250 | +PASS Current times and effect phase before start delay when delay = 250 and endDelay = 250 | +PASS Current times and effect phase at start delay when delay = 250 and endDelay = 250 | PASS Current times and effect phase in active range when delay = 250 and endDelay = 250 | -FAIL Current times and effect phase at effect end time when delay = 250 and endDelay = 250 | assert_equals: animation effect progress expected (object) null but got (number) 0.75 -FAIL Current times and effect phase after effect end time when delay = 250 and endDelay = 250 | assert_equals: animation effect progress expected (object) null but got (number) 0.9 -FAIL Current times and effect phase at timeline boundary when delay = 250 and endDelay = 250 | assert_equals: animation effect progress expected (object) null but got (number) 1 -FAIL Current times and effect phase at timeline start when delay = -125 and endDelay = -125 | assert_approx_equals: animation effect progress expected 0.25 +/- 0.001 but got 0 +PASS Current times and effect phase at effect end time when delay = 250 and endDelay = 250 | +PASS Current times and effect phase after effect end time when delay = 250 and endDelay = 250 | +PASS Current times and effect phase at timeline boundary when delay = 250 and endDelay = 250 | +PASS Current times and effect phase at timeline start when delay = -125 and endDelay = -125 | PASS Current times and effect phase in active range when delay = -125 and endDelay = -125 | -FAIL Current times and effect phase at timeline end when delay = -125 and endDelay = -125 | assert_approx_equals: animation effect progress expected 0.75 +/- 0.001 but got 1 -FAIL Playback rate affects whether active phase boundary is inclusive. assert_equals: Animation effect is in before phase when current time is 0% (progress is null with 'none' fill mode) expected (object) null but got (number) 0 -FAIL Verify that (play -> pause -> play) doesn't change phase/progress. assert_equals: expected (object) null but got (number) 0 -FAIL Pause in before phase, scroll timeline into active phase, animation should remain in the before phase assert_equals: expected (object) null but got (number) 0 -FAIL Pause in before phase, set animation current time to be in active range, animation should become active. Scrolling should have no effect. assert_equals: expected (object) null but got (number) 0 +PASS Current times and effect phase at timeline end when delay = -125 and endDelay = -125 | +FAIL Playback rate affects whether active phase boundary is inclusive. assert_equals: Animation effect is in after phase when current time is 50% (progress is null with 'none' fill mode) expected (object) null but got (number) 0.2500000000000001 +PASS Verify that (play -> pause -> play) doesn't change phase/progress. +PASS Pause in before phase, scroll timeline into active phase, animation should remain in the before phase +PASS Pause in before phase, set animation current time to be in active range, animation should become active. Scrolling should have no effect. PASS Make scroller inactive, then set current time to an in range time PASS Animation effect is still applied after pausing and making timeline inactive. PASS Make timeline inactive, force style update then pause the animation. No crashing indicates test success. diff --git a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/setting-timeline.tentative-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/setting-timeline.tentative-expected.txt index 07594abbdb36e..4ee5c452c1748 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/setting-timeline.tentative-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/scroll-timelines/setting-timeline.tentative-expected.txt @@ -13,6 +13,6 @@ FAIL Switching from a null timeline to a scroll timeline on an animation with a FAIL Switching from one scroll timeline to another updates currentTime promise_test: Unhandled rejection with value: object "TypeError: null is not an object (evaluating 'actual.unit')" PASS Switching from a document timeline to a scroll timeline updates currentTime when unpaused via CSS. PASS Switching from a document timeline to a scroll timeline and updating currentTime preserves the progress while paused. -FAIL Switching from a document timeline to a scroll timeline on an infinite duration animation. assert_equals: 'actual' unit type must be 'percent' for "undefined" expected (string) "percent" but got (undefined) undefined +FAIL Switching from a document timeline to a scroll timeline on an infinite duration animation. assert_approx_equals: values do not match for "undefined" expected 100 +/- 0.125 but got 200 FAIL Changing from a scroll-timeline to a view-timeline updates start time. assert_approx_equals: Timeline's currentTime aligns with the scroll position even when paused expected a number but got a "object" diff --git a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/view-timelines/view-timeline-get-set-range-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/view-timelines/view-timeline-get-set-range-expected.txt index ece72f33a8b96..e60c0b963f683 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/view-timelines/view-timeline-get-set-range-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/view-timelines/view-timeline-get-set-range-expected.txt @@ -1,3 +1,3 @@ -FAIL Getting and setting the animation range assert_equals: Initial value for rangeStart expected (string) "normal" but got (object) object "[object Object]" +FAIL Getting and setting the animation range assert_equals: Opacity with range set to [normal, normal] expected "0.5" but got "1" diff --git a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/view-timelines/zero-intrinsic-iteration-duration.tentative-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/view-timelines/zero-intrinsic-iteration-duration.tentative-expected.txt index 03b55c7e78324..b47814e504c8a 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/view-timelines/zero-intrinsic-iteration-duration.tentative-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/scroll-animations/view-timelines/zero-intrinsic-iteration-duration.tentative-expected.txt @@ -1,3 +1,3 @@ -FAIL Intrinsic iteration duration is non-negative assert_equals: 'actual' unit type must be 'percent' for "Default duration is 100%" expected (string) "percent" but got (undefined) undefined +FAIL Intrinsic iteration duration is non-negative assert_approx_equals: values do not match for "Duration is zero when boundaries coincide" expected 0 +/- 0.125 but got 100 diff --git a/LayoutTests/imported/w3c/web-platform-tests/shadow-dom/Document-caretPositionFromPoint.tentative-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/shadow-dom/Document-caretPositionFromPoint.tentative-expected.txt new file mode 100644 index 0000000000000..2e0ead002f821 --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/shadow-dom/Document-caretPositionFromPoint.tentative-expected.txt @@ -0,0 +1,17 @@ +a +b + +PASS document.caretPositionFromPoint() throws when called without the correct parameters +PASS document.caretPositionFromPoint() should return a CaretPosition at the specified location +PASS document.caretPositionFromPoint() should return a CaretPosition at the specified location pointing to an input element which is the offsetNode. +PASS document.caretPositionFromPoint() should return a CaretPosition at the specified location pointing to a textarea element which is the offsetNode. +PASS document.caretPositionFromPoint() should return a CaretPosition at the specified location pointing to a closed shadaw tree when the shadow tree is specified as an argument +PASS document.caretPositionFromPoint() should return a CaretPosition at the specified location when the non-intersecting shadow tree is specified as an argument +PASS document.caretPositionFromPoint() should return a CaretPosition at the specified location pointing to an input element when the shadow tree is specified as an argument. +PASS document.caretPositionFromPoint() should return a CaretPosition at the specified location pointing to the input element's shadow host's parent when the shadow tree is not specified as an argument. +PASS document.caretPositionFromPoint() should return a CaretPosition at the specified location pointing to the shadow host's parent when the shadow tree is not specified as an argument +PASS document.caretPositionFromPoint() should return a CaretPosition at the specified location pointing to the outer shadow host's parent when the point is in an inner shadow tree and no shadow tree is specified as an argument +PASS document.caretPositionFromPoint() should return a CaretPosition at the specified location pointing to the inner shadow tree when the point is in an inner shadow tree and the inner shadow tree is specified as an argument +PASS document.caretPositionFromPoint() should return a CaretPosition at the specified location pointing to the outer shadow tree when the point is in an inner shadow tree and the outer shadow tree is specified as an argument +PASS document.caretPositionFromPoint() should return a CaretPosition at the specified location pointing to the inner shadow tree when the point is in an inner shadow tree and the inner shadow tree and the outer shadow tree are specified as an argument + diff --git a/LayoutTests/imported/w3c/web-platform-tests/shadow-dom/Document-caretPositionFromPoint.tentative.html b/LayoutTests/imported/w3c/web-platform-tests/shadow-dom/Document-caretPositionFromPoint.tentative.html new file mode 100644 index 0000000000000..b01bc0ae6edfe --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/shadow-dom/Document-caretPositionFromPoint.tentative.html @@ -0,0 +1,286 @@ + + + + + + + + +
    + + + diff --git a/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.any-expected.txt index c88240d2cee88..58946c9bcfba7 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.any-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.any-expected.txt @@ -115,20 +115,20 @@ FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/bar/bar"}] FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/bar/baz"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/"}] The operation is not supported. -FAIL Pattern: [{"protocol":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"username":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"password":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"protocol":"(café)"}] Inputs: undefined +PASS Pattern: [{"username":"(café)"}] Inputs: undefined +PASS Pattern: [{"password":"(café)"}] Inputs: undefined +PASS Pattern: [{"hostname":"(café)"}] Inputs: undefined FAIL Pattern: [{"pathname":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"search":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hash":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"protocol":":café"}] Inputs: [{"protocol":"foo"}] The operation is not supported. -FAIL Pattern: [{"username":":café"}] Inputs: [{"username":"foo"}] The operation is not supported. -FAIL Pattern: [{"password":":café"}] Inputs: [{"password":"foo"}] The operation is not supported. -FAIL Pattern: [{"hostname":":café"}] Inputs: [{"hostname":"foo"}] The operation is not supported. +PASS Pattern: [{"search":"(café)"}] Inputs: undefined +PASS Pattern: [{"hash":"(café)"}] Inputs: undefined +FAIL Pattern: [{"protocol":":café"}] Inputs: [{"protocol":"foo"}] Invalid input to canonicalize a URL protocol string. +FAIL Pattern: [{"username":":café"}] Inputs: [{"username":"foo"}] assert_equals: compiled pattern property 'username' expected ":café" but got "{:caf}é" +FAIL Pattern: [{"password":":café"}] Inputs: [{"password":"foo"}] assert_equals: compiled pattern property 'password' expected ":café" but got "{:caf}é" +FAIL Pattern: [{"hostname":":café"}] Inputs: [{"hostname":"foo"}] assert_equals: compiled pattern property 'hostname' expected ":café" but got "{:caf}é" FAIL Pattern: [{"pathname":"/:café"}] Inputs: [{"pathname":"/foo"}] The operation is not supported. -FAIL Pattern: [{"search":":café"}] Inputs: [{"search":"foo"}] The operation is not supported. -FAIL Pattern: [{"hash":":café"}] Inputs: [{"hash":"foo"}] The operation is not supported. +FAIL Pattern: [{"search":":café"}] Inputs: [{"search":"foo"}] assert_equals: compiled pattern property 'search' expected ":café" but got ":caf%C3%A9" +FAIL Pattern: [{"hash":":café"}] Inputs: [{"hash":"foo"}] assert_equals: compiled pattern property 'hash' expected ":café" but got ":caf%C3%A9" FAIL Pattern: [{"protocol":":℘"}] Inputs: [{"protocol":"foo"}] The operation is not supported. FAIL Pattern: [{"username":":℘"}] Inputs: [{"username":"foo"}] The operation is not supported. FAIL Pattern: [{"password":":℘"}] Inputs: [{"password":"foo"}] The operation is not supported. @@ -143,15 +143,15 @@ FAIL Pattern: [{"hostname":":㐀"}] Inputs: [{"hostname":"foo"}] The operation i FAIL Pattern: [{"pathname":"/:㐀"}] Inputs: [{"pathname":"/foo"}] The operation is not supported. FAIL Pattern: [{"search":":㐀"}] Inputs: [{"search":"foo"}] The operation is not supported. FAIL Pattern: [{"hash":":㐀"}] Inputs: [{"hash":"foo"}] The operation is not supported. -FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"café"}] assert_equals: compiled pattern property 'protocol' expected "*" but got "(.*)" -FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"cafe"}] assert_equals: compiled pattern property 'protocol' expected "*" but got "(.*)" +FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"café"}] The operation is not supported. +FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"cafe"}] The operation is not supported. FAIL Pattern: [{"protocol":"foo-bar"}] Inputs: [{"protocol":"foo-bar"}] The operation is not supported. -FAIL Pattern: [{"username":"caf%C3%A9"}] Inputs: [{"username":"café"}] The operation is not supported. +FAIL Pattern: [{"username":"caf%C3%A9"}] Inputs: [{"username":"café"}] assert_equals: compiled pattern property 'username' expected "caf%C3%A9" but got "café" FAIL Pattern: [{"username":"café"}] Inputs: [{"username":"café"}] assert_equals: compiled pattern property 'username' expected "caf%C3%A9" but got "café" -FAIL Pattern: [{"username":"caf%c3%a9"}] Inputs: [{"username":"café"}] The operation is not supported. -FAIL Pattern: [{"password":"caf%C3%A9"}] Inputs: [{"password":"café"}] The operation is not supported. +FAIL Pattern: [{"username":"caf%c3%a9"}] Inputs: [{"username":"café"}] assert_equals: compiled pattern property 'username' expected "caf%c3%a9" but got "café" +FAIL Pattern: [{"password":"caf%C3%A9"}] Inputs: [{"password":"café"}] assert_equals: compiled pattern property 'password' expected "caf%C3%A9" but got "café" FAIL Pattern: [{"password":"café"}] Inputs: [{"password":"café"}] assert_equals: compiled pattern property 'password' expected "caf%C3%A9" but got "café" -FAIL Pattern: [{"password":"caf%c3%a9"}] Inputs: [{"password":"café"}] The operation is not supported. +FAIL Pattern: [{"password":"caf%c3%a9"}] Inputs: [{"password":"café"}] assert_equals: compiled pattern property 'password' expected "caf%c3%a9" but got "café" FAIL Pattern: [{"hostname":"xn--caf-dma.com"}] Inputs: [{"hostname":"café.com"}] The operation is not supported. FAIL Pattern: [{"hostname":"café.com"}] Inputs: [{"hostname":"café.com"}] assert_equals: compiled pattern property 'hostname' expected "xn--caf-dma.com" but got "café.com" FAIL Pattern: [{"port":""}] Inputs: [{"protocol":"http","port":"80"}] The operation is not supported. @@ -161,7 +161,7 @@ FAIL Pattern: [{"protocol":"http","port":"80 "}] Inputs: [{"protocol":"http","po FAIL Pattern: [{"port":"80"}] Inputs: [{"protocol":"http","port":"80"}] The operation is not supported. FAIL Pattern: [{"protocol":"http{s}?","port":"80"}] Inputs: [{"protocol":"http","port":"80"}] The operation is not supported. FAIL Pattern: [{"port":"80"}] Inputs: [{"port":"80"}] The operation is not supported. -FAIL Pattern: [{"port":"(.*)"}] Inputs: [{"port":"invalid80"}] assert_equals: compiled pattern property 'port' expected "*" but got "(.*)" +FAIL Pattern: [{"port":"(.*)"}] Inputs: [{"port":"invalid80"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo/bar"}] Inputs: [{"pathname":"/foo/./bar"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo/baz"}] Inputs: [{"pathname":"/foo/bar/../baz"}] The operation is not supported. FAIL Pattern: [{"pathname":"/caf%C3%A9"}] Inputs: [{"pathname":"/café"}] The operation is not supported. @@ -179,10 +179,10 @@ FAIL Pattern: [{"pathname":"foo/bar"}] Inputs: ["https://example.com/foo/bar"] T FAIL Pattern: [{"pathname":"foo/bar","baseURL":"https://example.com"}] Inputs: ["https://example.com/foo/bar"] assert_equals: compiled pattern property 'pathname' expected "/foo/bar" but got "foo/bar" FAIL Pattern: [{"pathname":":name.html","baseURL":"https://example.com"}] Inputs: ["https://example.com/foo.html"] assert_equals: compiled pattern property 'pathname' expected "/:name.html" but got ":name.html" FAIL Pattern: [{"search":"q=caf%C3%A9"}] Inputs: [{"search":"q=café"}] The operation is not supported. -FAIL Pattern: [{"search":"q=café"}] Inputs: [{"search":"q=café"}] assert_equals: compiled pattern property 'search' expected "q=caf%C3%A9" but got "q=café" +FAIL Pattern: [{"search":"q=café"}] Inputs: [{"search":"q=café"}] The operation is not supported. FAIL Pattern: [{"search":"q=caf%c3%a9"}] Inputs: [{"search":"q=café"}] The operation is not supported. FAIL Pattern: [{"hash":"caf%C3%A9"}] Inputs: [{"hash":"café"}] The operation is not supported. -FAIL Pattern: [{"hash":"café"}] Inputs: [{"hash":"café"}] assert_equals: compiled pattern property 'hash' expected "caf%C3%A9" but got "café" +FAIL Pattern: [{"hash":"café"}] Inputs: [{"hash":"café"}] The operation is not supported. FAIL Pattern: [{"hash":"caf%c3%a9"}] Inputs: [{"hash":"café"}] The operation is not supported. FAIL Pattern: [{"protocol":"about","pathname":"(blank|sourcedoc)"}] Inputs: ["about:blank"] The operation is not supported. FAIL Pattern: [{"protocol":"data","pathname":":number([0-9]+)"}] Inputs: ["data:8675309"] The operation is not supported. @@ -272,13 +272,13 @@ FAIL Pattern: ["http://[\\:\\:1]:8080/"] Inputs: ["http://[::1]:8080/"] Not impl FAIL Pattern: ["http://[\\:\\:a]/"] Inputs: ["http://[::a]/"] Not implemented. FAIL Pattern: ["http://[:address]/"] Inputs: ["http://[::1]/"] Not implemented. FAIL Pattern: ["http://[\\:\\:AB\\::num]/"] Inputs: ["http://[::ab:1]/"] Not implemented. -FAIL Pattern: [{"hostname":"[\\:\\:AB\\::num]"}] Inputs: [{"hostname":"[::ab:1]"}] assert_equals: compiled pattern property 'hostname' expected "[\\:\\:ab\\::num]" but got "[\\:\\:AB\\::num]" -FAIL Pattern: [{"hostname":"[\\:\\:xY\\::num]"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"{[\\:\\:ab\\::num]}"}] Inputs: [{"hostname":"[::ab:1]"}] The operation is not supported. -FAIL Pattern: [{"hostname":"{[\\:\\:fé\\::num]}"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"{[\\:\\::num\\:1]}"}] Inputs: [{"hostname":"[::ab:1]"}] The operation is not supported. -FAIL Pattern: [{"hostname":"{[\\:\\::num\\:fé]}"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"[*\\:1]"}] Inputs: [{"hostname":"[::ab:1]"}] The operation is not supported. +FAIL Pattern: [{"hostname":"[\\:\\:AB\\::num]"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. +PASS Pattern: [{"hostname":"[\\:\\:xY\\::num]"}] Inputs: undefined +FAIL Pattern: [{"hostname":"{[\\:\\:ab\\::num]}"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. +PASS Pattern: [{"hostname":"{[\\:\\:fé\\::num]}"}] Inputs: undefined +FAIL Pattern: [{"hostname":"{[\\:\\::num\\:1]}"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. +PASS Pattern: [{"hostname":"{[\\:\\::num\\:fé]}"}] Inputs: undefined +FAIL Pattern: [{"hostname":"[*\\:1]"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. FAIL Pattern: [{"hostname":"*\\:1]"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: ["https://foo{{@}}example.com"] Inputs: ["https://foo@example.com"] assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" threw object "NotSupportedError: Not implemented." ("NotSupportedError") expected instance of function "function TypeError() { [native code] @@ -299,20 +299,20 @@ FAIL Pattern: [{"pathname":":name"}] Inputs: [{"pathname":"foobar"}] The operati FAIL Pattern: [{"protocol":":name*"}] Inputs: [{"protocol":"foobar"}] The operation is not supported. FAIL Pattern: [{"protocol":":name+"}] Inputs: [{"protocol":"foobar"}] The operation is not supported. FAIL Pattern: [{"protocol":":name"}] Inputs: [{"protocol":"foobar"}] The operation is not supported. -FAIL Pattern: [{"hostname":"bad hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad#hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad%hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad%hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad/hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: [{"hostname":"bad\\:hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad>hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad?hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"badhostname"}] Inputs: undefined +PASS Pattern: [{"hostname":"bad?hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad@hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad[hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad]hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad[hostname"}] Inputs: undefined +PASS Pattern: [{"hostname":"bad]hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad\\\\hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad^hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad|hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad^hostname"}] Inputs: undefined +PASS Pattern: [{"hostname":"bad|hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad\nhostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: [{"hostname":"bad\rhostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: [{"hostname":"bad\thostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw diff --git a/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.any.serviceworker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.any.serviceworker-expected.txt index c88240d2cee88..58946c9bcfba7 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.any.serviceworker-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.any.serviceworker-expected.txt @@ -115,20 +115,20 @@ FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/bar/bar"}] FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/bar/baz"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/"}] The operation is not supported. -FAIL Pattern: [{"protocol":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"username":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"password":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"protocol":"(café)"}] Inputs: undefined +PASS Pattern: [{"username":"(café)"}] Inputs: undefined +PASS Pattern: [{"password":"(café)"}] Inputs: undefined +PASS Pattern: [{"hostname":"(café)"}] Inputs: undefined FAIL Pattern: [{"pathname":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"search":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hash":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"protocol":":café"}] Inputs: [{"protocol":"foo"}] The operation is not supported. -FAIL Pattern: [{"username":":café"}] Inputs: [{"username":"foo"}] The operation is not supported. -FAIL Pattern: [{"password":":café"}] Inputs: [{"password":"foo"}] The operation is not supported. -FAIL Pattern: [{"hostname":":café"}] Inputs: [{"hostname":"foo"}] The operation is not supported. +PASS Pattern: [{"search":"(café)"}] Inputs: undefined +PASS Pattern: [{"hash":"(café)"}] Inputs: undefined +FAIL Pattern: [{"protocol":":café"}] Inputs: [{"protocol":"foo"}] Invalid input to canonicalize a URL protocol string. +FAIL Pattern: [{"username":":café"}] Inputs: [{"username":"foo"}] assert_equals: compiled pattern property 'username' expected ":café" but got "{:caf}é" +FAIL Pattern: [{"password":":café"}] Inputs: [{"password":"foo"}] assert_equals: compiled pattern property 'password' expected ":café" but got "{:caf}é" +FAIL Pattern: [{"hostname":":café"}] Inputs: [{"hostname":"foo"}] assert_equals: compiled pattern property 'hostname' expected ":café" but got "{:caf}é" FAIL Pattern: [{"pathname":"/:café"}] Inputs: [{"pathname":"/foo"}] The operation is not supported. -FAIL Pattern: [{"search":":café"}] Inputs: [{"search":"foo"}] The operation is not supported. -FAIL Pattern: [{"hash":":café"}] Inputs: [{"hash":"foo"}] The operation is not supported. +FAIL Pattern: [{"search":":café"}] Inputs: [{"search":"foo"}] assert_equals: compiled pattern property 'search' expected ":café" but got ":caf%C3%A9" +FAIL Pattern: [{"hash":":café"}] Inputs: [{"hash":"foo"}] assert_equals: compiled pattern property 'hash' expected ":café" but got ":caf%C3%A9" FAIL Pattern: [{"protocol":":℘"}] Inputs: [{"protocol":"foo"}] The operation is not supported. FAIL Pattern: [{"username":":℘"}] Inputs: [{"username":"foo"}] The operation is not supported. FAIL Pattern: [{"password":":℘"}] Inputs: [{"password":"foo"}] The operation is not supported. @@ -143,15 +143,15 @@ FAIL Pattern: [{"hostname":":㐀"}] Inputs: [{"hostname":"foo"}] The operation i FAIL Pattern: [{"pathname":"/:㐀"}] Inputs: [{"pathname":"/foo"}] The operation is not supported. FAIL Pattern: [{"search":":㐀"}] Inputs: [{"search":"foo"}] The operation is not supported. FAIL Pattern: [{"hash":":㐀"}] Inputs: [{"hash":"foo"}] The operation is not supported. -FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"café"}] assert_equals: compiled pattern property 'protocol' expected "*" but got "(.*)" -FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"cafe"}] assert_equals: compiled pattern property 'protocol' expected "*" but got "(.*)" +FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"café"}] The operation is not supported. +FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"cafe"}] The operation is not supported. FAIL Pattern: [{"protocol":"foo-bar"}] Inputs: [{"protocol":"foo-bar"}] The operation is not supported. -FAIL Pattern: [{"username":"caf%C3%A9"}] Inputs: [{"username":"café"}] The operation is not supported. +FAIL Pattern: [{"username":"caf%C3%A9"}] Inputs: [{"username":"café"}] assert_equals: compiled pattern property 'username' expected "caf%C3%A9" but got "café" FAIL Pattern: [{"username":"café"}] Inputs: [{"username":"café"}] assert_equals: compiled pattern property 'username' expected "caf%C3%A9" but got "café" -FAIL Pattern: [{"username":"caf%c3%a9"}] Inputs: [{"username":"café"}] The operation is not supported. -FAIL Pattern: [{"password":"caf%C3%A9"}] Inputs: [{"password":"café"}] The operation is not supported. +FAIL Pattern: [{"username":"caf%c3%a9"}] Inputs: [{"username":"café"}] assert_equals: compiled pattern property 'username' expected "caf%c3%a9" but got "café" +FAIL Pattern: [{"password":"caf%C3%A9"}] Inputs: [{"password":"café"}] assert_equals: compiled pattern property 'password' expected "caf%C3%A9" but got "café" FAIL Pattern: [{"password":"café"}] Inputs: [{"password":"café"}] assert_equals: compiled pattern property 'password' expected "caf%C3%A9" but got "café" -FAIL Pattern: [{"password":"caf%c3%a9"}] Inputs: [{"password":"café"}] The operation is not supported. +FAIL Pattern: [{"password":"caf%c3%a9"}] Inputs: [{"password":"café"}] assert_equals: compiled pattern property 'password' expected "caf%c3%a9" but got "café" FAIL Pattern: [{"hostname":"xn--caf-dma.com"}] Inputs: [{"hostname":"café.com"}] The operation is not supported. FAIL Pattern: [{"hostname":"café.com"}] Inputs: [{"hostname":"café.com"}] assert_equals: compiled pattern property 'hostname' expected "xn--caf-dma.com" but got "café.com" FAIL Pattern: [{"port":""}] Inputs: [{"protocol":"http","port":"80"}] The operation is not supported. @@ -161,7 +161,7 @@ FAIL Pattern: [{"protocol":"http","port":"80 "}] Inputs: [{"protocol":"http","po FAIL Pattern: [{"port":"80"}] Inputs: [{"protocol":"http","port":"80"}] The operation is not supported. FAIL Pattern: [{"protocol":"http{s}?","port":"80"}] Inputs: [{"protocol":"http","port":"80"}] The operation is not supported. FAIL Pattern: [{"port":"80"}] Inputs: [{"port":"80"}] The operation is not supported. -FAIL Pattern: [{"port":"(.*)"}] Inputs: [{"port":"invalid80"}] assert_equals: compiled pattern property 'port' expected "*" but got "(.*)" +FAIL Pattern: [{"port":"(.*)"}] Inputs: [{"port":"invalid80"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo/bar"}] Inputs: [{"pathname":"/foo/./bar"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo/baz"}] Inputs: [{"pathname":"/foo/bar/../baz"}] The operation is not supported. FAIL Pattern: [{"pathname":"/caf%C3%A9"}] Inputs: [{"pathname":"/café"}] The operation is not supported. @@ -179,10 +179,10 @@ FAIL Pattern: [{"pathname":"foo/bar"}] Inputs: ["https://example.com/foo/bar"] T FAIL Pattern: [{"pathname":"foo/bar","baseURL":"https://example.com"}] Inputs: ["https://example.com/foo/bar"] assert_equals: compiled pattern property 'pathname' expected "/foo/bar" but got "foo/bar" FAIL Pattern: [{"pathname":":name.html","baseURL":"https://example.com"}] Inputs: ["https://example.com/foo.html"] assert_equals: compiled pattern property 'pathname' expected "/:name.html" but got ":name.html" FAIL Pattern: [{"search":"q=caf%C3%A9"}] Inputs: [{"search":"q=café"}] The operation is not supported. -FAIL Pattern: [{"search":"q=café"}] Inputs: [{"search":"q=café"}] assert_equals: compiled pattern property 'search' expected "q=caf%C3%A9" but got "q=café" +FAIL Pattern: [{"search":"q=café"}] Inputs: [{"search":"q=café"}] The operation is not supported. FAIL Pattern: [{"search":"q=caf%c3%a9"}] Inputs: [{"search":"q=café"}] The operation is not supported. FAIL Pattern: [{"hash":"caf%C3%A9"}] Inputs: [{"hash":"café"}] The operation is not supported. -FAIL Pattern: [{"hash":"café"}] Inputs: [{"hash":"café"}] assert_equals: compiled pattern property 'hash' expected "caf%C3%A9" but got "café" +FAIL Pattern: [{"hash":"café"}] Inputs: [{"hash":"café"}] The operation is not supported. FAIL Pattern: [{"hash":"caf%c3%a9"}] Inputs: [{"hash":"café"}] The operation is not supported. FAIL Pattern: [{"protocol":"about","pathname":"(blank|sourcedoc)"}] Inputs: ["about:blank"] The operation is not supported. FAIL Pattern: [{"protocol":"data","pathname":":number([0-9]+)"}] Inputs: ["data:8675309"] The operation is not supported. @@ -272,13 +272,13 @@ FAIL Pattern: ["http://[\\:\\:1]:8080/"] Inputs: ["http://[::1]:8080/"] Not impl FAIL Pattern: ["http://[\\:\\:a]/"] Inputs: ["http://[::a]/"] Not implemented. FAIL Pattern: ["http://[:address]/"] Inputs: ["http://[::1]/"] Not implemented. FAIL Pattern: ["http://[\\:\\:AB\\::num]/"] Inputs: ["http://[::ab:1]/"] Not implemented. -FAIL Pattern: [{"hostname":"[\\:\\:AB\\::num]"}] Inputs: [{"hostname":"[::ab:1]"}] assert_equals: compiled pattern property 'hostname' expected "[\\:\\:ab\\::num]" but got "[\\:\\:AB\\::num]" -FAIL Pattern: [{"hostname":"[\\:\\:xY\\::num]"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"{[\\:\\:ab\\::num]}"}] Inputs: [{"hostname":"[::ab:1]"}] The operation is not supported. -FAIL Pattern: [{"hostname":"{[\\:\\:fé\\::num]}"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"{[\\:\\::num\\:1]}"}] Inputs: [{"hostname":"[::ab:1]"}] The operation is not supported. -FAIL Pattern: [{"hostname":"{[\\:\\::num\\:fé]}"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"[*\\:1]"}] Inputs: [{"hostname":"[::ab:1]"}] The operation is not supported. +FAIL Pattern: [{"hostname":"[\\:\\:AB\\::num]"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. +PASS Pattern: [{"hostname":"[\\:\\:xY\\::num]"}] Inputs: undefined +FAIL Pattern: [{"hostname":"{[\\:\\:ab\\::num]}"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. +PASS Pattern: [{"hostname":"{[\\:\\:fé\\::num]}"}] Inputs: undefined +FAIL Pattern: [{"hostname":"{[\\:\\::num\\:1]}"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. +PASS Pattern: [{"hostname":"{[\\:\\::num\\:fé]}"}] Inputs: undefined +FAIL Pattern: [{"hostname":"[*\\:1]"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. FAIL Pattern: [{"hostname":"*\\:1]"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: ["https://foo{{@}}example.com"] Inputs: ["https://foo@example.com"] assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" threw object "NotSupportedError: Not implemented." ("NotSupportedError") expected instance of function "function TypeError() { [native code] @@ -299,20 +299,20 @@ FAIL Pattern: [{"pathname":":name"}] Inputs: [{"pathname":"foobar"}] The operati FAIL Pattern: [{"protocol":":name*"}] Inputs: [{"protocol":"foobar"}] The operation is not supported. FAIL Pattern: [{"protocol":":name+"}] Inputs: [{"protocol":"foobar"}] The operation is not supported. FAIL Pattern: [{"protocol":":name"}] Inputs: [{"protocol":"foobar"}] The operation is not supported. -FAIL Pattern: [{"hostname":"bad hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad#hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad%hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad%hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad/hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: [{"hostname":"bad\\:hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad>hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad?hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"badhostname"}] Inputs: undefined +PASS Pattern: [{"hostname":"bad?hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad@hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad[hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad]hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad[hostname"}] Inputs: undefined +PASS Pattern: [{"hostname":"bad]hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad\\\\hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad^hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad|hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad^hostname"}] Inputs: undefined +PASS Pattern: [{"hostname":"bad|hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad\nhostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: [{"hostname":"bad\rhostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: [{"hostname":"bad\thostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw diff --git a/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.any.sharedworker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.any.sharedworker-expected.txt index c88240d2cee88..58946c9bcfba7 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.any.sharedworker-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.any.sharedworker-expected.txt @@ -115,20 +115,20 @@ FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/bar/bar"}] FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/bar/baz"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/"}] The operation is not supported. -FAIL Pattern: [{"protocol":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"username":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"password":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"protocol":"(café)"}] Inputs: undefined +PASS Pattern: [{"username":"(café)"}] Inputs: undefined +PASS Pattern: [{"password":"(café)"}] Inputs: undefined +PASS Pattern: [{"hostname":"(café)"}] Inputs: undefined FAIL Pattern: [{"pathname":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"search":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hash":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"protocol":":café"}] Inputs: [{"protocol":"foo"}] The operation is not supported. -FAIL Pattern: [{"username":":café"}] Inputs: [{"username":"foo"}] The operation is not supported. -FAIL Pattern: [{"password":":café"}] Inputs: [{"password":"foo"}] The operation is not supported. -FAIL Pattern: [{"hostname":":café"}] Inputs: [{"hostname":"foo"}] The operation is not supported. +PASS Pattern: [{"search":"(café)"}] Inputs: undefined +PASS Pattern: [{"hash":"(café)"}] Inputs: undefined +FAIL Pattern: [{"protocol":":café"}] Inputs: [{"protocol":"foo"}] Invalid input to canonicalize a URL protocol string. +FAIL Pattern: [{"username":":café"}] Inputs: [{"username":"foo"}] assert_equals: compiled pattern property 'username' expected ":café" but got "{:caf}é" +FAIL Pattern: [{"password":":café"}] Inputs: [{"password":"foo"}] assert_equals: compiled pattern property 'password' expected ":café" but got "{:caf}é" +FAIL Pattern: [{"hostname":":café"}] Inputs: [{"hostname":"foo"}] assert_equals: compiled pattern property 'hostname' expected ":café" but got "{:caf}é" FAIL Pattern: [{"pathname":"/:café"}] Inputs: [{"pathname":"/foo"}] The operation is not supported. -FAIL Pattern: [{"search":":café"}] Inputs: [{"search":"foo"}] The operation is not supported. -FAIL Pattern: [{"hash":":café"}] Inputs: [{"hash":"foo"}] The operation is not supported. +FAIL Pattern: [{"search":":café"}] Inputs: [{"search":"foo"}] assert_equals: compiled pattern property 'search' expected ":café" but got ":caf%C3%A9" +FAIL Pattern: [{"hash":":café"}] Inputs: [{"hash":"foo"}] assert_equals: compiled pattern property 'hash' expected ":café" but got ":caf%C3%A9" FAIL Pattern: [{"protocol":":℘"}] Inputs: [{"protocol":"foo"}] The operation is not supported. FAIL Pattern: [{"username":":℘"}] Inputs: [{"username":"foo"}] The operation is not supported. FAIL Pattern: [{"password":":℘"}] Inputs: [{"password":"foo"}] The operation is not supported. @@ -143,15 +143,15 @@ FAIL Pattern: [{"hostname":":㐀"}] Inputs: [{"hostname":"foo"}] The operation i FAIL Pattern: [{"pathname":"/:㐀"}] Inputs: [{"pathname":"/foo"}] The operation is not supported. FAIL Pattern: [{"search":":㐀"}] Inputs: [{"search":"foo"}] The operation is not supported. FAIL Pattern: [{"hash":":㐀"}] Inputs: [{"hash":"foo"}] The operation is not supported. -FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"café"}] assert_equals: compiled pattern property 'protocol' expected "*" but got "(.*)" -FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"cafe"}] assert_equals: compiled pattern property 'protocol' expected "*" but got "(.*)" +FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"café"}] The operation is not supported. +FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"cafe"}] The operation is not supported. FAIL Pattern: [{"protocol":"foo-bar"}] Inputs: [{"protocol":"foo-bar"}] The operation is not supported. -FAIL Pattern: [{"username":"caf%C3%A9"}] Inputs: [{"username":"café"}] The operation is not supported. +FAIL Pattern: [{"username":"caf%C3%A9"}] Inputs: [{"username":"café"}] assert_equals: compiled pattern property 'username' expected "caf%C3%A9" but got "café" FAIL Pattern: [{"username":"café"}] Inputs: [{"username":"café"}] assert_equals: compiled pattern property 'username' expected "caf%C3%A9" but got "café" -FAIL Pattern: [{"username":"caf%c3%a9"}] Inputs: [{"username":"café"}] The operation is not supported. -FAIL Pattern: [{"password":"caf%C3%A9"}] Inputs: [{"password":"café"}] The operation is not supported. +FAIL Pattern: [{"username":"caf%c3%a9"}] Inputs: [{"username":"café"}] assert_equals: compiled pattern property 'username' expected "caf%c3%a9" but got "café" +FAIL Pattern: [{"password":"caf%C3%A9"}] Inputs: [{"password":"café"}] assert_equals: compiled pattern property 'password' expected "caf%C3%A9" but got "café" FAIL Pattern: [{"password":"café"}] Inputs: [{"password":"café"}] assert_equals: compiled pattern property 'password' expected "caf%C3%A9" but got "café" -FAIL Pattern: [{"password":"caf%c3%a9"}] Inputs: [{"password":"café"}] The operation is not supported. +FAIL Pattern: [{"password":"caf%c3%a9"}] Inputs: [{"password":"café"}] assert_equals: compiled pattern property 'password' expected "caf%c3%a9" but got "café" FAIL Pattern: [{"hostname":"xn--caf-dma.com"}] Inputs: [{"hostname":"café.com"}] The operation is not supported. FAIL Pattern: [{"hostname":"café.com"}] Inputs: [{"hostname":"café.com"}] assert_equals: compiled pattern property 'hostname' expected "xn--caf-dma.com" but got "café.com" FAIL Pattern: [{"port":""}] Inputs: [{"protocol":"http","port":"80"}] The operation is not supported. @@ -161,7 +161,7 @@ FAIL Pattern: [{"protocol":"http","port":"80 "}] Inputs: [{"protocol":"http","po FAIL Pattern: [{"port":"80"}] Inputs: [{"protocol":"http","port":"80"}] The operation is not supported. FAIL Pattern: [{"protocol":"http{s}?","port":"80"}] Inputs: [{"protocol":"http","port":"80"}] The operation is not supported. FAIL Pattern: [{"port":"80"}] Inputs: [{"port":"80"}] The operation is not supported. -FAIL Pattern: [{"port":"(.*)"}] Inputs: [{"port":"invalid80"}] assert_equals: compiled pattern property 'port' expected "*" but got "(.*)" +FAIL Pattern: [{"port":"(.*)"}] Inputs: [{"port":"invalid80"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo/bar"}] Inputs: [{"pathname":"/foo/./bar"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo/baz"}] Inputs: [{"pathname":"/foo/bar/../baz"}] The operation is not supported. FAIL Pattern: [{"pathname":"/caf%C3%A9"}] Inputs: [{"pathname":"/café"}] The operation is not supported. @@ -179,10 +179,10 @@ FAIL Pattern: [{"pathname":"foo/bar"}] Inputs: ["https://example.com/foo/bar"] T FAIL Pattern: [{"pathname":"foo/bar","baseURL":"https://example.com"}] Inputs: ["https://example.com/foo/bar"] assert_equals: compiled pattern property 'pathname' expected "/foo/bar" but got "foo/bar" FAIL Pattern: [{"pathname":":name.html","baseURL":"https://example.com"}] Inputs: ["https://example.com/foo.html"] assert_equals: compiled pattern property 'pathname' expected "/:name.html" but got ":name.html" FAIL Pattern: [{"search":"q=caf%C3%A9"}] Inputs: [{"search":"q=café"}] The operation is not supported. -FAIL Pattern: [{"search":"q=café"}] Inputs: [{"search":"q=café"}] assert_equals: compiled pattern property 'search' expected "q=caf%C3%A9" but got "q=café" +FAIL Pattern: [{"search":"q=café"}] Inputs: [{"search":"q=café"}] The operation is not supported. FAIL Pattern: [{"search":"q=caf%c3%a9"}] Inputs: [{"search":"q=café"}] The operation is not supported. FAIL Pattern: [{"hash":"caf%C3%A9"}] Inputs: [{"hash":"café"}] The operation is not supported. -FAIL Pattern: [{"hash":"café"}] Inputs: [{"hash":"café"}] assert_equals: compiled pattern property 'hash' expected "caf%C3%A9" but got "café" +FAIL Pattern: [{"hash":"café"}] Inputs: [{"hash":"café"}] The operation is not supported. FAIL Pattern: [{"hash":"caf%c3%a9"}] Inputs: [{"hash":"café"}] The operation is not supported. FAIL Pattern: [{"protocol":"about","pathname":"(blank|sourcedoc)"}] Inputs: ["about:blank"] The operation is not supported. FAIL Pattern: [{"protocol":"data","pathname":":number([0-9]+)"}] Inputs: ["data:8675309"] The operation is not supported. @@ -272,13 +272,13 @@ FAIL Pattern: ["http://[\\:\\:1]:8080/"] Inputs: ["http://[::1]:8080/"] Not impl FAIL Pattern: ["http://[\\:\\:a]/"] Inputs: ["http://[::a]/"] Not implemented. FAIL Pattern: ["http://[:address]/"] Inputs: ["http://[::1]/"] Not implemented. FAIL Pattern: ["http://[\\:\\:AB\\::num]/"] Inputs: ["http://[::ab:1]/"] Not implemented. -FAIL Pattern: [{"hostname":"[\\:\\:AB\\::num]"}] Inputs: [{"hostname":"[::ab:1]"}] assert_equals: compiled pattern property 'hostname' expected "[\\:\\:ab\\::num]" but got "[\\:\\:AB\\::num]" -FAIL Pattern: [{"hostname":"[\\:\\:xY\\::num]"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"{[\\:\\:ab\\::num]}"}] Inputs: [{"hostname":"[::ab:1]"}] The operation is not supported. -FAIL Pattern: [{"hostname":"{[\\:\\:fé\\::num]}"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"{[\\:\\::num\\:1]}"}] Inputs: [{"hostname":"[::ab:1]"}] The operation is not supported. -FAIL Pattern: [{"hostname":"{[\\:\\::num\\:fé]}"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"[*\\:1]"}] Inputs: [{"hostname":"[::ab:1]"}] The operation is not supported. +FAIL Pattern: [{"hostname":"[\\:\\:AB\\::num]"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. +PASS Pattern: [{"hostname":"[\\:\\:xY\\::num]"}] Inputs: undefined +FAIL Pattern: [{"hostname":"{[\\:\\:ab\\::num]}"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. +PASS Pattern: [{"hostname":"{[\\:\\:fé\\::num]}"}] Inputs: undefined +FAIL Pattern: [{"hostname":"{[\\:\\::num\\:1]}"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. +PASS Pattern: [{"hostname":"{[\\:\\::num\\:fé]}"}] Inputs: undefined +FAIL Pattern: [{"hostname":"[*\\:1]"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. FAIL Pattern: [{"hostname":"*\\:1]"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: ["https://foo{{@}}example.com"] Inputs: ["https://foo@example.com"] assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" threw object "NotSupportedError: Not implemented." ("NotSupportedError") expected instance of function "function TypeError() { [native code] @@ -299,20 +299,20 @@ FAIL Pattern: [{"pathname":":name"}] Inputs: [{"pathname":"foobar"}] The operati FAIL Pattern: [{"protocol":":name*"}] Inputs: [{"protocol":"foobar"}] The operation is not supported. FAIL Pattern: [{"protocol":":name+"}] Inputs: [{"protocol":"foobar"}] The operation is not supported. FAIL Pattern: [{"protocol":":name"}] Inputs: [{"protocol":"foobar"}] The operation is not supported. -FAIL Pattern: [{"hostname":"bad hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad#hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad%hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad%hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad/hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: [{"hostname":"bad\\:hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad>hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad?hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"badhostname"}] Inputs: undefined +PASS Pattern: [{"hostname":"bad?hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad@hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad[hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad]hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad[hostname"}] Inputs: undefined +PASS Pattern: [{"hostname":"bad]hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad\\\\hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad^hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad|hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad^hostname"}] Inputs: undefined +PASS Pattern: [{"hostname":"bad|hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad\nhostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: [{"hostname":"bad\rhostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: [{"hostname":"bad\thostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw diff --git a/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.any.worker-expected.txt index c88240d2cee88..58946c9bcfba7 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.any.worker-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.any.worker-expected.txt @@ -115,20 +115,20 @@ FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/bar/bar"}] FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/bar/baz"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/"}] The operation is not supported. -FAIL Pattern: [{"protocol":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"username":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"password":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"protocol":"(café)"}] Inputs: undefined +PASS Pattern: [{"username":"(café)"}] Inputs: undefined +PASS Pattern: [{"password":"(café)"}] Inputs: undefined +PASS Pattern: [{"hostname":"(café)"}] Inputs: undefined FAIL Pattern: [{"pathname":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"search":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hash":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"protocol":":café"}] Inputs: [{"protocol":"foo"}] The operation is not supported. -FAIL Pattern: [{"username":":café"}] Inputs: [{"username":"foo"}] The operation is not supported. -FAIL Pattern: [{"password":":café"}] Inputs: [{"password":"foo"}] The operation is not supported. -FAIL Pattern: [{"hostname":":café"}] Inputs: [{"hostname":"foo"}] The operation is not supported. +PASS Pattern: [{"search":"(café)"}] Inputs: undefined +PASS Pattern: [{"hash":"(café)"}] Inputs: undefined +FAIL Pattern: [{"protocol":":café"}] Inputs: [{"protocol":"foo"}] Invalid input to canonicalize a URL protocol string. +FAIL Pattern: [{"username":":café"}] Inputs: [{"username":"foo"}] assert_equals: compiled pattern property 'username' expected ":café" but got "{:caf}é" +FAIL Pattern: [{"password":":café"}] Inputs: [{"password":"foo"}] assert_equals: compiled pattern property 'password' expected ":café" but got "{:caf}é" +FAIL Pattern: [{"hostname":":café"}] Inputs: [{"hostname":"foo"}] assert_equals: compiled pattern property 'hostname' expected ":café" but got "{:caf}é" FAIL Pattern: [{"pathname":"/:café"}] Inputs: [{"pathname":"/foo"}] The operation is not supported. -FAIL Pattern: [{"search":":café"}] Inputs: [{"search":"foo"}] The operation is not supported. -FAIL Pattern: [{"hash":":café"}] Inputs: [{"hash":"foo"}] The operation is not supported. +FAIL Pattern: [{"search":":café"}] Inputs: [{"search":"foo"}] assert_equals: compiled pattern property 'search' expected ":café" but got ":caf%C3%A9" +FAIL Pattern: [{"hash":":café"}] Inputs: [{"hash":"foo"}] assert_equals: compiled pattern property 'hash' expected ":café" but got ":caf%C3%A9" FAIL Pattern: [{"protocol":":℘"}] Inputs: [{"protocol":"foo"}] The operation is not supported. FAIL Pattern: [{"username":":℘"}] Inputs: [{"username":"foo"}] The operation is not supported. FAIL Pattern: [{"password":":℘"}] Inputs: [{"password":"foo"}] The operation is not supported. @@ -143,15 +143,15 @@ FAIL Pattern: [{"hostname":":㐀"}] Inputs: [{"hostname":"foo"}] The operation i FAIL Pattern: [{"pathname":"/:㐀"}] Inputs: [{"pathname":"/foo"}] The operation is not supported. FAIL Pattern: [{"search":":㐀"}] Inputs: [{"search":"foo"}] The operation is not supported. FAIL Pattern: [{"hash":":㐀"}] Inputs: [{"hash":"foo"}] The operation is not supported. -FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"café"}] assert_equals: compiled pattern property 'protocol' expected "*" but got "(.*)" -FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"cafe"}] assert_equals: compiled pattern property 'protocol' expected "*" but got "(.*)" +FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"café"}] The operation is not supported. +FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"cafe"}] The operation is not supported. FAIL Pattern: [{"protocol":"foo-bar"}] Inputs: [{"protocol":"foo-bar"}] The operation is not supported. -FAIL Pattern: [{"username":"caf%C3%A9"}] Inputs: [{"username":"café"}] The operation is not supported. +FAIL Pattern: [{"username":"caf%C3%A9"}] Inputs: [{"username":"café"}] assert_equals: compiled pattern property 'username' expected "caf%C3%A9" but got "café" FAIL Pattern: [{"username":"café"}] Inputs: [{"username":"café"}] assert_equals: compiled pattern property 'username' expected "caf%C3%A9" but got "café" -FAIL Pattern: [{"username":"caf%c3%a9"}] Inputs: [{"username":"café"}] The operation is not supported. -FAIL Pattern: [{"password":"caf%C3%A9"}] Inputs: [{"password":"café"}] The operation is not supported. +FAIL Pattern: [{"username":"caf%c3%a9"}] Inputs: [{"username":"café"}] assert_equals: compiled pattern property 'username' expected "caf%c3%a9" but got "café" +FAIL Pattern: [{"password":"caf%C3%A9"}] Inputs: [{"password":"café"}] assert_equals: compiled pattern property 'password' expected "caf%C3%A9" but got "café" FAIL Pattern: [{"password":"café"}] Inputs: [{"password":"café"}] assert_equals: compiled pattern property 'password' expected "caf%C3%A9" but got "café" -FAIL Pattern: [{"password":"caf%c3%a9"}] Inputs: [{"password":"café"}] The operation is not supported. +FAIL Pattern: [{"password":"caf%c3%a9"}] Inputs: [{"password":"café"}] assert_equals: compiled pattern property 'password' expected "caf%c3%a9" but got "café" FAIL Pattern: [{"hostname":"xn--caf-dma.com"}] Inputs: [{"hostname":"café.com"}] The operation is not supported. FAIL Pattern: [{"hostname":"café.com"}] Inputs: [{"hostname":"café.com"}] assert_equals: compiled pattern property 'hostname' expected "xn--caf-dma.com" but got "café.com" FAIL Pattern: [{"port":""}] Inputs: [{"protocol":"http","port":"80"}] The operation is not supported. @@ -161,7 +161,7 @@ FAIL Pattern: [{"protocol":"http","port":"80 "}] Inputs: [{"protocol":"http","po FAIL Pattern: [{"port":"80"}] Inputs: [{"protocol":"http","port":"80"}] The operation is not supported. FAIL Pattern: [{"protocol":"http{s}?","port":"80"}] Inputs: [{"protocol":"http","port":"80"}] The operation is not supported. FAIL Pattern: [{"port":"80"}] Inputs: [{"port":"80"}] The operation is not supported. -FAIL Pattern: [{"port":"(.*)"}] Inputs: [{"port":"invalid80"}] assert_equals: compiled pattern property 'port' expected "*" but got "(.*)" +FAIL Pattern: [{"port":"(.*)"}] Inputs: [{"port":"invalid80"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo/bar"}] Inputs: [{"pathname":"/foo/./bar"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo/baz"}] Inputs: [{"pathname":"/foo/bar/../baz"}] The operation is not supported. FAIL Pattern: [{"pathname":"/caf%C3%A9"}] Inputs: [{"pathname":"/café"}] The operation is not supported. @@ -179,10 +179,10 @@ FAIL Pattern: [{"pathname":"foo/bar"}] Inputs: ["https://example.com/foo/bar"] T FAIL Pattern: [{"pathname":"foo/bar","baseURL":"https://example.com"}] Inputs: ["https://example.com/foo/bar"] assert_equals: compiled pattern property 'pathname' expected "/foo/bar" but got "foo/bar" FAIL Pattern: [{"pathname":":name.html","baseURL":"https://example.com"}] Inputs: ["https://example.com/foo.html"] assert_equals: compiled pattern property 'pathname' expected "/:name.html" but got ":name.html" FAIL Pattern: [{"search":"q=caf%C3%A9"}] Inputs: [{"search":"q=café"}] The operation is not supported. -FAIL Pattern: [{"search":"q=café"}] Inputs: [{"search":"q=café"}] assert_equals: compiled pattern property 'search' expected "q=caf%C3%A9" but got "q=café" +FAIL Pattern: [{"search":"q=café"}] Inputs: [{"search":"q=café"}] The operation is not supported. FAIL Pattern: [{"search":"q=caf%c3%a9"}] Inputs: [{"search":"q=café"}] The operation is not supported. FAIL Pattern: [{"hash":"caf%C3%A9"}] Inputs: [{"hash":"café"}] The operation is not supported. -FAIL Pattern: [{"hash":"café"}] Inputs: [{"hash":"café"}] assert_equals: compiled pattern property 'hash' expected "caf%C3%A9" but got "café" +FAIL Pattern: [{"hash":"café"}] Inputs: [{"hash":"café"}] The operation is not supported. FAIL Pattern: [{"hash":"caf%c3%a9"}] Inputs: [{"hash":"café"}] The operation is not supported. FAIL Pattern: [{"protocol":"about","pathname":"(blank|sourcedoc)"}] Inputs: ["about:blank"] The operation is not supported. FAIL Pattern: [{"protocol":"data","pathname":":number([0-9]+)"}] Inputs: ["data:8675309"] The operation is not supported. @@ -272,13 +272,13 @@ FAIL Pattern: ["http://[\\:\\:1]:8080/"] Inputs: ["http://[::1]:8080/"] Not impl FAIL Pattern: ["http://[\\:\\:a]/"] Inputs: ["http://[::a]/"] Not implemented. FAIL Pattern: ["http://[:address]/"] Inputs: ["http://[::1]/"] Not implemented. FAIL Pattern: ["http://[\\:\\:AB\\::num]/"] Inputs: ["http://[::ab:1]/"] Not implemented. -FAIL Pattern: [{"hostname":"[\\:\\:AB\\::num]"}] Inputs: [{"hostname":"[::ab:1]"}] assert_equals: compiled pattern property 'hostname' expected "[\\:\\:ab\\::num]" but got "[\\:\\:AB\\::num]" -FAIL Pattern: [{"hostname":"[\\:\\:xY\\::num]"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"{[\\:\\:ab\\::num]}"}] Inputs: [{"hostname":"[::ab:1]"}] The operation is not supported. -FAIL Pattern: [{"hostname":"{[\\:\\:fé\\::num]}"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"{[\\:\\::num\\:1]}"}] Inputs: [{"hostname":"[::ab:1]"}] The operation is not supported. -FAIL Pattern: [{"hostname":"{[\\:\\::num\\:fé]}"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"[*\\:1]"}] Inputs: [{"hostname":"[::ab:1]"}] The operation is not supported. +FAIL Pattern: [{"hostname":"[\\:\\:AB\\::num]"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. +PASS Pattern: [{"hostname":"[\\:\\:xY\\::num]"}] Inputs: undefined +FAIL Pattern: [{"hostname":"{[\\:\\:ab\\::num]}"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. +PASS Pattern: [{"hostname":"{[\\:\\:fé\\::num]}"}] Inputs: undefined +FAIL Pattern: [{"hostname":"{[\\:\\::num\\:1]}"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. +PASS Pattern: [{"hostname":"{[\\:\\::num\\:fé]}"}] Inputs: undefined +FAIL Pattern: [{"hostname":"[*\\:1]"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. FAIL Pattern: [{"hostname":"*\\:1]"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: ["https://foo{{@}}example.com"] Inputs: ["https://foo@example.com"] assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" threw object "NotSupportedError: Not implemented." ("NotSupportedError") expected instance of function "function TypeError() { [native code] @@ -299,20 +299,20 @@ FAIL Pattern: [{"pathname":":name"}] Inputs: [{"pathname":"foobar"}] The operati FAIL Pattern: [{"protocol":":name*"}] Inputs: [{"protocol":"foobar"}] The operation is not supported. FAIL Pattern: [{"protocol":":name+"}] Inputs: [{"protocol":"foobar"}] The operation is not supported. FAIL Pattern: [{"protocol":":name"}] Inputs: [{"protocol":"foobar"}] The operation is not supported. -FAIL Pattern: [{"hostname":"bad hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad#hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad%hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad%hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad/hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: [{"hostname":"bad\\:hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad>hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad?hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"badhostname"}] Inputs: undefined +PASS Pattern: [{"hostname":"bad?hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad@hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad[hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad]hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad[hostname"}] Inputs: undefined +PASS Pattern: [{"hostname":"bad]hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad\\\\hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad^hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad|hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad^hostname"}] Inputs: undefined +PASS Pattern: [{"hostname":"bad|hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad\nhostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: [{"hostname":"bad\rhostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: [{"hostname":"bad\thostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw diff --git a/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.https.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.https.any-expected.txt index c88240d2cee88..58946c9bcfba7 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.https.any-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.https.any-expected.txt @@ -115,20 +115,20 @@ FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/bar/bar"}] FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/bar/baz"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/"}] The operation is not supported. -FAIL Pattern: [{"protocol":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"username":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"password":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"protocol":"(café)"}] Inputs: undefined +PASS Pattern: [{"username":"(café)"}] Inputs: undefined +PASS Pattern: [{"password":"(café)"}] Inputs: undefined +PASS Pattern: [{"hostname":"(café)"}] Inputs: undefined FAIL Pattern: [{"pathname":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"search":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hash":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"protocol":":café"}] Inputs: [{"protocol":"foo"}] The operation is not supported. -FAIL Pattern: [{"username":":café"}] Inputs: [{"username":"foo"}] The operation is not supported. -FAIL Pattern: [{"password":":café"}] Inputs: [{"password":"foo"}] The operation is not supported. -FAIL Pattern: [{"hostname":":café"}] Inputs: [{"hostname":"foo"}] The operation is not supported. +PASS Pattern: [{"search":"(café)"}] Inputs: undefined +PASS Pattern: [{"hash":"(café)"}] Inputs: undefined +FAIL Pattern: [{"protocol":":café"}] Inputs: [{"protocol":"foo"}] Invalid input to canonicalize a URL protocol string. +FAIL Pattern: [{"username":":café"}] Inputs: [{"username":"foo"}] assert_equals: compiled pattern property 'username' expected ":café" but got "{:caf}é" +FAIL Pattern: [{"password":":café"}] Inputs: [{"password":"foo"}] assert_equals: compiled pattern property 'password' expected ":café" but got "{:caf}é" +FAIL Pattern: [{"hostname":":café"}] Inputs: [{"hostname":"foo"}] assert_equals: compiled pattern property 'hostname' expected ":café" but got "{:caf}é" FAIL Pattern: [{"pathname":"/:café"}] Inputs: [{"pathname":"/foo"}] The operation is not supported. -FAIL Pattern: [{"search":":café"}] Inputs: [{"search":"foo"}] The operation is not supported. -FAIL Pattern: [{"hash":":café"}] Inputs: [{"hash":"foo"}] The operation is not supported. +FAIL Pattern: [{"search":":café"}] Inputs: [{"search":"foo"}] assert_equals: compiled pattern property 'search' expected ":café" but got ":caf%C3%A9" +FAIL Pattern: [{"hash":":café"}] Inputs: [{"hash":"foo"}] assert_equals: compiled pattern property 'hash' expected ":café" but got ":caf%C3%A9" FAIL Pattern: [{"protocol":":℘"}] Inputs: [{"protocol":"foo"}] The operation is not supported. FAIL Pattern: [{"username":":℘"}] Inputs: [{"username":"foo"}] The operation is not supported. FAIL Pattern: [{"password":":℘"}] Inputs: [{"password":"foo"}] The operation is not supported. @@ -143,15 +143,15 @@ FAIL Pattern: [{"hostname":":㐀"}] Inputs: [{"hostname":"foo"}] The operation i FAIL Pattern: [{"pathname":"/:㐀"}] Inputs: [{"pathname":"/foo"}] The operation is not supported. FAIL Pattern: [{"search":":㐀"}] Inputs: [{"search":"foo"}] The operation is not supported. FAIL Pattern: [{"hash":":㐀"}] Inputs: [{"hash":"foo"}] The operation is not supported. -FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"café"}] assert_equals: compiled pattern property 'protocol' expected "*" but got "(.*)" -FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"cafe"}] assert_equals: compiled pattern property 'protocol' expected "*" but got "(.*)" +FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"café"}] The operation is not supported. +FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"cafe"}] The operation is not supported. FAIL Pattern: [{"protocol":"foo-bar"}] Inputs: [{"protocol":"foo-bar"}] The operation is not supported. -FAIL Pattern: [{"username":"caf%C3%A9"}] Inputs: [{"username":"café"}] The operation is not supported. +FAIL Pattern: [{"username":"caf%C3%A9"}] Inputs: [{"username":"café"}] assert_equals: compiled pattern property 'username' expected "caf%C3%A9" but got "café" FAIL Pattern: [{"username":"café"}] Inputs: [{"username":"café"}] assert_equals: compiled pattern property 'username' expected "caf%C3%A9" but got "café" -FAIL Pattern: [{"username":"caf%c3%a9"}] Inputs: [{"username":"café"}] The operation is not supported. -FAIL Pattern: [{"password":"caf%C3%A9"}] Inputs: [{"password":"café"}] The operation is not supported. +FAIL Pattern: [{"username":"caf%c3%a9"}] Inputs: [{"username":"café"}] assert_equals: compiled pattern property 'username' expected "caf%c3%a9" but got "café" +FAIL Pattern: [{"password":"caf%C3%A9"}] Inputs: [{"password":"café"}] assert_equals: compiled pattern property 'password' expected "caf%C3%A9" but got "café" FAIL Pattern: [{"password":"café"}] Inputs: [{"password":"café"}] assert_equals: compiled pattern property 'password' expected "caf%C3%A9" but got "café" -FAIL Pattern: [{"password":"caf%c3%a9"}] Inputs: [{"password":"café"}] The operation is not supported. +FAIL Pattern: [{"password":"caf%c3%a9"}] Inputs: [{"password":"café"}] assert_equals: compiled pattern property 'password' expected "caf%c3%a9" but got "café" FAIL Pattern: [{"hostname":"xn--caf-dma.com"}] Inputs: [{"hostname":"café.com"}] The operation is not supported. FAIL Pattern: [{"hostname":"café.com"}] Inputs: [{"hostname":"café.com"}] assert_equals: compiled pattern property 'hostname' expected "xn--caf-dma.com" but got "café.com" FAIL Pattern: [{"port":""}] Inputs: [{"protocol":"http","port":"80"}] The operation is not supported. @@ -161,7 +161,7 @@ FAIL Pattern: [{"protocol":"http","port":"80 "}] Inputs: [{"protocol":"http","po FAIL Pattern: [{"port":"80"}] Inputs: [{"protocol":"http","port":"80"}] The operation is not supported. FAIL Pattern: [{"protocol":"http{s}?","port":"80"}] Inputs: [{"protocol":"http","port":"80"}] The operation is not supported. FAIL Pattern: [{"port":"80"}] Inputs: [{"port":"80"}] The operation is not supported. -FAIL Pattern: [{"port":"(.*)"}] Inputs: [{"port":"invalid80"}] assert_equals: compiled pattern property 'port' expected "*" but got "(.*)" +FAIL Pattern: [{"port":"(.*)"}] Inputs: [{"port":"invalid80"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo/bar"}] Inputs: [{"pathname":"/foo/./bar"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo/baz"}] Inputs: [{"pathname":"/foo/bar/../baz"}] The operation is not supported. FAIL Pattern: [{"pathname":"/caf%C3%A9"}] Inputs: [{"pathname":"/café"}] The operation is not supported. @@ -179,10 +179,10 @@ FAIL Pattern: [{"pathname":"foo/bar"}] Inputs: ["https://example.com/foo/bar"] T FAIL Pattern: [{"pathname":"foo/bar","baseURL":"https://example.com"}] Inputs: ["https://example.com/foo/bar"] assert_equals: compiled pattern property 'pathname' expected "/foo/bar" but got "foo/bar" FAIL Pattern: [{"pathname":":name.html","baseURL":"https://example.com"}] Inputs: ["https://example.com/foo.html"] assert_equals: compiled pattern property 'pathname' expected "/:name.html" but got ":name.html" FAIL Pattern: [{"search":"q=caf%C3%A9"}] Inputs: [{"search":"q=café"}] The operation is not supported. -FAIL Pattern: [{"search":"q=café"}] Inputs: [{"search":"q=café"}] assert_equals: compiled pattern property 'search' expected "q=caf%C3%A9" but got "q=café" +FAIL Pattern: [{"search":"q=café"}] Inputs: [{"search":"q=café"}] The operation is not supported. FAIL Pattern: [{"search":"q=caf%c3%a9"}] Inputs: [{"search":"q=café"}] The operation is not supported. FAIL Pattern: [{"hash":"caf%C3%A9"}] Inputs: [{"hash":"café"}] The operation is not supported. -FAIL Pattern: [{"hash":"café"}] Inputs: [{"hash":"café"}] assert_equals: compiled pattern property 'hash' expected "caf%C3%A9" but got "café" +FAIL Pattern: [{"hash":"café"}] Inputs: [{"hash":"café"}] The operation is not supported. FAIL Pattern: [{"hash":"caf%c3%a9"}] Inputs: [{"hash":"café"}] The operation is not supported. FAIL Pattern: [{"protocol":"about","pathname":"(blank|sourcedoc)"}] Inputs: ["about:blank"] The operation is not supported. FAIL Pattern: [{"protocol":"data","pathname":":number([0-9]+)"}] Inputs: ["data:8675309"] The operation is not supported. @@ -272,13 +272,13 @@ FAIL Pattern: ["http://[\\:\\:1]:8080/"] Inputs: ["http://[::1]:8080/"] Not impl FAIL Pattern: ["http://[\\:\\:a]/"] Inputs: ["http://[::a]/"] Not implemented. FAIL Pattern: ["http://[:address]/"] Inputs: ["http://[::1]/"] Not implemented. FAIL Pattern: ["http://[\\:\\:AB\\::num]/"] Inputs: ["http://[::ab:1]/"] Not implemented. -FAIL Pattern: [{"hostname":"[\\:\\:AB\\::num]"}] Inputs: [{"hostname":"[::ab:1]"}] assert_equals: compiled pattern property 'hostname' expected "[\\:\\:ab\\::num]" but got "[\\:\\:AB\\::num]" -FAIL Pattern: [{"hostname":"[\\:\\:xY\\::num]"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"{[\\:\\:ab\\::num]}"}] Inputs: [{"hostname":"[::ab:1]"}] The operation is not supported. -FAIL Pattern: [{"hostname":"{[\\:\\:fé\\::num]}"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"{[\\:\\::num\\:1]}"}] Inputs: [{"hostname":"[::ab:1]"}] The operation is not supported. -FAIL Pattern: [{"hostname":"{[\\:\\::num\\:fé]}"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"[*\\:1]"}] Inputs: [{"hostname":"[::ab:1]"}] The operation is not supported. +FAIL Pattern: [{"hostname":"[\\:\\:AB\\::num]"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. +PASS Pattern: [{"hostname":"[\\:\\:xY\\::num]"}] Inputs: undefined +FAIL Pattern: [{"hostname":"{[\\:\\:ab\\::num]}"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. +PASS Pattern: [{"hostname":"{[\\:\\:fé\\::num]}"}] Inputs: undefined +FAIL Pattern: [{"hostname":"{[\\:\\::num\\:1]}"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. +PASS Pattern: [{"hostname":"{[\\:\\::num\\:fé]}"}] Inputs: undefined +FAIL Pattern: [{"hostname":"[*\\:1]"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. FAIL Pattern: [{"hostname":"*\\:1]"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: ["https://foo{{@}}example.com"] Inputs: ["https://foo@example.com"] assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" threw object "NotSupportedError: Not implemented." ("NotSupportedError") expected instance of function "function TypeError() { [native code] @@ -299,20 +299,20 @@ FAIL Pattern: [{"pathname":":name"}] Inputs: [{"pathname":"foobar"}] The operati FAIL Pattern: [{"protocol":":name*"}] Inputs: [{"protocol":"foobar"}] The operation is not supported. FAIL Pattern: [{"protocol":":name+"}] Inputs: [{"protocol":"foobar"}] The operation is not supported. FAIL Pattern: [{"protocol":":name"}] Inputs: [{"protocol":"foobar"}] The operation is not supported. -FAIL Pattern: [{"hostname":"bad hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad#hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad%hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad%hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad/hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: [{"hostname":"bad\\:hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad>hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad?hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"badhostname"}] Inputs: undefined +PASS Pattern: [{"hostname":"bad?hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad@hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad[hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad]hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad[hostname"}] Inputs: undefined +PASS Pattern: [{"hostname":"bad]hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad\\\\hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad^hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad|hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad^hostname"}] Inputs: undefined +PASS Pattern: [{"hostname":"bad|hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad\nhostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: [{"hostname":"bad\rhostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: [{"hostname":"bad\thostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw diff --git a/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.https.any.serviceworker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.https.any.serviceworker-expected.txt index c88240d2cee88..58946c9bcfba7 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.https.any.serviceworker-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.https.any.serviceworker-expected.txt @@ -115,20 +115,20 @@ FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/bar/bar"}] FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/bar/baz"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/"}] The operation is not supported. -FAIL Pattern: [{"protocol":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"username":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"password":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"protocol":"(café)"}] Inputs: undefined +PASS Pattern: [{"username":"(café)"}] Inputs: undefined +PASS Pattern: [{"password":"(café)"}] Inputs: undefined +PASS Pattern: [{"hostname":"(café)"}] Inputs: undefined FAIL Pattern: [{"pathname":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"search":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hash":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"protocol":":café"}] Inputs: [{"protocol":"foo"}] The operation is not supported. -FAIL Pattern: [{"username":":café"}] Inputs: [{"username":"foo"}] The operation is not supported. -FAIL Pattern: [{"password":":café"}] Inputs: [{"password":"foo"}] The operation is not supported. -FAIL Pattern: [{"hostname":":café"}] Inputs: [{"hostname":"foo"}] The operation is not supported. +PASS Pattern: [{"search":"(café)"}] Inputs: undefined +PASS Pattern: [{"hash":"(café)"}] Inputs: undefined +FAIL Pattern: [{"protocol":":café"}] Inputs: [{"protocol":"foo"}] Invalid input to canonicalize a URL protocol string. +FAIL Pattern: [{"username":":café"}] Inputs: [{"username":"foo"}] assert_equals: compiled pattern property 'username' expected ":café" but got "{:caf}é" +FAIL Pattern: [{"password":":café"}] Inputs: [{"password":"foo"}] assert_equals: compiled pattern property 'password' expected ":café" but got "{:caf}é" +FAIL Pattern: [{"hostname":":café"}] Inputs: [{"hostname":"foo"}] assert_equals: compiled pattern property 'hostname' expected ":café" but got "{:caf}é" FAIL Pattern: [{"pathname":"/:café"}] Inputs: [{"pathname":"/foo"}] The operation is not supported. -FAIL Pattern: [{"search":":café"}] Inputs: [{"search":"foo"}] The operation is not supported. -FAIL Pattern: [{"hash":":café"}] Inputs: [{"hash":"foo"}] The operation is not supported. +FAIL Pattern: [{"search":":café"}] Inputs: [{"search":"foo"}] assert_equals: compiled pattern property 'search' expected ":café" but got ":caf%C3%A9" +FAIL Pattern: [{"hash":":café"}] Inputs: [{"hash":"foo"}] assert_equals: compiled pattern property 'hash' expected ":café" but got ":caf%C3%A9" FAIL Pattern: [{"protocol":":℘"}] Inputs: [{"protocol":"foo"}] The operation is not supported. FAIL Pattern: [{"username":":℘"}] Inputs: [{"username":"foo"}] The operation is not supported. FAIL Pattern: [{"password":":℘"}] Inputs: [{"password":"foo"}] The operation is not supported. @@ -143,15 +143,15 @@ FAIL Pattern: [{"hostname":":㐀"}] Inputs: [{"hostname":"foo"}] The operation i FAIL Pattern: [{"pathname":"/:㐀"}] Inputs: [{"pathname":"/foo"}] The operation is not supported. FAIL Pattern: [{"search":":㐀"}] Inputs: [{"search":"foo"}] The operation is not supported. FAIL Pattern: [{"hash":":㐀"}] Inputs: [{"hash":"foo"}] The operation is not supported. -FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"café"}] assert_equals: compiled pattern property 'protocol' expected "*" but got "(.*)" -FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"cafe"}] assert_equals: compiled pattern property 'protocol' expected "*" but got "(.*)" +FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"café"}] The operation is not supported. +FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"cafe"}] The operation is not supported. FAIL Pattern: [{"protocol":"foo-bar"}] Inputs: [{"protocol":"foo-bar"}] The operation is not supported. -FAIL Pattern: [{"username":"caf%C3%A9"}] Inputs: [{"username":"café"}] The operation is not supported. +FAIL Pattern: [{"username":"caf%C3%A9"}] Inputs: [{"username":"café"}] assert_equals: compiled pattern property 'username' expected "caf%C3%A9" but got "café" FAIL Pattern: [{"username":"café"}] Inputs: [{"username":"café"}] assert_equals: compiled pattern property 'username' expected "caf%C3%A9" but got "café" -FAIL Pattern: [{"username":"caf%c3%a9"}] Inputs: [{"username":"café"}] The operation is not supported. -FAIL Pattern: [{"password":"caf%C3%A9"}] Inputs: [{"password":"café"}] The operation is not supported. +FAIL Pattern: [{"username":"caf%c3%a9"}] Inputs: [{"username":"café"}] assert_equals: compiled pattern property 'username' expected "caf%c3%a9" but got "café" +FAIL Pattern: [{"password":"caf%C3%A9"}] Inputs: [{"password":"café"}] assert_equals: compiled pattern property 'password' expected "caf%C3%A9" but got "café" FAIL Pattern: [{"password":"café"}] Inputs: [{"password":"café"}] assert_equals: compiled pattern property 'password' expected "caf%C3%A9" but got "café" -FAIL Pattern: [{"password":"caf%c3%a9"}] Inputs: [{"password":"café"}] The operation is not supported. +FAIL Pattern: [{"password":"caf%c3%a9"}] Inputs: [{"password":"café"}] assert_equals: compiled pattern property 'password' expected "caf%c3%a9" but got "café" FAIL Pattern: [{"hostname":"xn--caf-dma.com"}] Inputs: [{"hostname":"café.com"}] The operation is not supported. FAIL Pattern: [{"hostname":"café.com"}] Inputs: [{"hostname":"café.com"}] assert_equals: compiled pattern property 'hostname' expected "xn--caf-dma.com" but got "café.com" FAIL Pattern: [{"port":""}] Inputs: [{"protocol":"http","port":"80"}] The operation is not supported. @@ -161,7 +161,7 @@ FAIL Pattern: [{"protocol":"http","port":"80 "}] Inputs: [{"protocol":"http","po FAIL Pattern: [{"port":"80"}] Inputs: [{"protocol":"http","port":"80"}] The operation is not supported. FAIL Pattern: [{"protocol":"http{s}?","port":"80"}] Inputs: [{"protocol":"http","port":"80"}] The operation is not supported. FAIL Pattern: [{"port":"80"}] Inputs: [{"port":"80"}] The operation is not supported. -FAIL Pattern: [{"port":"(.*)"}] Inputs: [{"port":"invalid80"}] assert_equals: compiled pattern property 'port' expected "*" but got "(.*)" +FAIL Pattern: [{"port":"(.*)"}] Inputs: [{"port":"invalid80"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo/bar"}] Inputs: [{"pathname":"/foo/./bar"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo/baz"}] Inputs: [{"pathname":"/foo/bar/../baz"}] The operation is not supported. FAIL Pattern: [{"pathname":"/caf%C3%A9"}] Inputs: [{"pathname":"/café"}] The operation is not supported. @@ -179,10 +179,10 @@ FAIL Pattern: [{"pathname":"foo/bar"}] Inputs: ["https://example.com/foo/bar"] T FAIL Pattern: [{"pathname":"foo/bar","baseURL":"https://example.com"}] Inputs: ["https://example.com/foo/bar"] assert_equals: compiled pattern property 'pathname' expected "/foo/bar" but got "foo/bar" FAIL Pattern: [{"pathname":":name.html","baseURL":"https://example.com"}] Inputs: ["https://example.com/foo.html"] assert_equals: compiled pattern property 'pathname' expected "/:name.html" but got ":name.html" FAIL Pattern: [{"search":"q=caf%C3%A9"}] Inputs: [{"search":"q=café"}] The operation is not supported. -FAIL Pattern: [{"search":"q=café"}] Inputs: [{"search":"q=café"}] assert_equals: compiled pattern property 'search' expected "q=caf%C3%A9" but got "q=café" +FAIL Pattern: [{"search":"q=café"}] Inputs: [{"search":"q=café"}] The operation is not supported. FAIL Pattern: [{"search":"q=caf%c3%a9"}] Inputs: [{"search":"q=café"}] The operation is not supported. FAIL Pattern: [{"hash":"caf%C3%A9"}] Inputs: [{"hash":"café"}] The operation is not supported. -FAIL Pattern: [{"hash":"café"}] Inputs: [{"hash":"café"}] assert_equals: compiled pattern property 'hash' expected "caf%C3%A9" but got "café" +FAIL Pattern: [{"hash":"café"}] Inputs: [{"hash":"café"}] The operation is not supported. FAIL Pattern: [{"hash":"caf%c3%a9"}] Inputs: [{"hash":"café"}] The operation is not supported. FAIL Pattern: [{"protocol":"about","pathname":"(blank|sourcedoc)"}] Inputs: ["about:blank"] The operation is not supported. FAIL Pattern: [{"protocol":"data","pathname":":number([0-9]+)"}] Inputs: ["data:8675309"] The operation is not supported. @@ -272,13 +272,13 @@ FAIL Pattern: ["http://[\\:\\:1]:8080/"] Inputs: ["http://[::1]:8080/"] Not impl FAIL Pattern: ["http://[\\:\\:a]/"] Inputs: ["http://[::a]/"] Not implemented. FAIL Pattern: ["http://[:address]/"] Inputs: ["http://[::1]/"] Not implemented. FAIL Pattern: ["http://[\\:\\:AB\\::num]/"] Inputs: ["http://[::ab:1]/"] Not implemented. -FAIL Pattern: [{"hostname":"[\\:\\:AB\\::num]"}] Inputs: [{"hostname":"[::ab:1]"}] assert_equals: compiled pattern property 'hostname' expected "[\\:\\:ab\\::num]" but got "[\\:\\:AB\\::num]" -FAIL Pattern: [{"hostname":"[\\:\\:xY\\::num]"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"{[\\:\\:ab\\::num]}"}] Inputs: [{"hostname":"[::ab:1]"}] The operation is not supported. -FAIL Pattern: [{"hostname":"{[\\:\\:fé\\::num]}"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"{[\\:\\::num\\:1]}"}] Inputs: [{"hostname":"[::ab:1]"}] The operation is not supported. -FAIL Pattern: [{"hostname":"{[\\:\\::num\\:fé]}"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"[*\\:1]"}] Inputs: [{"hostname":"[::ab:1]"}] The operation is not supported. +FAIL Pattern: [{"hostname":"[\\:\\:AB\\::num]"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. +PASS Pattern: [{"hostname":"[\\:\\:xY\\::num]"}] Inputs: undefined +FAIL Pattern: [{"hostname":"{[\\:\\:ab\\::num]}"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. +PASS Pattern: [{"hostname":"{[\\:\\:fé\\::num]}"}] Inputs: undefined +FAIL Pattern: [{"hostname":"{[\\:\\::num\\:1]}"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. +PASS Pattern: [{"hostname":"{[\\:\\::num\\:fé]}"}] Inputs: undefined +FAIL Pattern: [{"hostname":"[*\\:1]"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. FAIL Pattern: [{"hostname":"*\\:1]"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: ["https://foo{{@}}example.com"] Inputs: ["https://foo@example.com"] assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" threw object "NotSupportedError: Not implemented." ("NotSupportedError") expected instance of function "function TypeError() { [native code] @@ -299,20 +299,20 @@ FAIL Pattern: [{"pathname":":name"}] Inputs: [{"pathname":"foobar"}] The operati FAIL Pattern: [{"protocol":":name*"}] Inputs: [{"protocol":"foobar"}] The operation is not supported. FAIL Pattern: [{"protocol":":name+"}] Inputs: [{"protocol":"foobar"}] The operation is not supported. FAIL Pattern: [{"protocol":":name"}] Inputs: [{"protocol":"foobar"}] The operation is not supported. -FAIL Pattern: [{"hostname":"bad hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad#hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad%hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad%hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad/hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: [{"hostname":"bad\\:hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad>hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad?hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"badhostname"}] Inputs: undefined +PASS Pattern: [{"hostname":"bad?hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad@hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad[hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad]hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad[hostname"}] Inputs: undefined +PASS Pattern: [{"hostname":"bad]hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad\\\\hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad^hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad|hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad^hostname"}] Inputs: undefined +PASS Pattern: [{"hostname":"bad|hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad\nhostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: [{"hostname":"bad\rhostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: [{"hostname":"bad\thostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw diff --git a/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.https.any.sharedworker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.https.any.sharedworker-expected.txt index c88240d2cee88..58946c9bcfba7 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.https.any.sharedworker-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.https.any.sharedworker-expected.txt @@ -115,20 +115,20 @@ FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/bar/bar"}] FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/bar/baz"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/"}] The operation is not supported. -FAIL Pattern: [{"protocol":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"username":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"password":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"protocol":"(café)"}] Inputs: undefined +PASS Pattern: [{"username":"(café)"}] Inputs: undefined +PASS Pattern: [{"password":"(café)"}] Inputs: undefined +PASS Pattern: [{"hostname":"(café)"}] Inputs: undefined FAIL Pattern: [{"pathname":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"search":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hash":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"protocol":":café"}] Inputs: [{"protocol":"foo"}] The operation is not supported. -FAIL Pattern: [{"username":":café"}] Inputs: [{"username":"foo"}] The operation is not supported. -FAIL Pattern: [{"password":":café"}] Inputs: [{"password":"foo"}] The operation is not supported. -FAIL Pattern: [{"hostname":":café"}] Inputs: [{"hostname":"foo"}] The operation is not supported. +PASS Pattern: [{"search":"(café)"}] Inputs: undefined +PASS Pattern: [{"hash":"(café)"}] Inputs: undefined +FAIL Pattern: [{"protocol":":café"}] Inputs: [{"protocol":"foo"}] Invalid input to canonicalize a URL protocol string. +FAIL Pattern: [{"username":":café"}] Inputs: [{"username":"foo"}] assert_equals: compiled pattern property 'username' expected ":café" but got "{:caf}é" +FAIL Pattern: [{"password":":café"}] Inputs: [{"password":"foo"}] assert_equals: compiled pattern property 'password' expected ":café" but got "{:caf}é" +FAIL Pattern: [{"hostname":":café"}] Inputs: [{"hostname":"foo"}] assert_equals: compiled pattern property 'hostname' expected ":café" but got "{:caf}é" FAIL Pattern: [{"pathname":"/:café"}] Inputs: [{"pathname":"/foo"}] The operation is not supported. -FAIL Pattern: [{"search":":café"}] Inputs: [{"search":"foo"}] The operation is not supported. -FAIL Pattern: [{"hash":":café"}] Inputs: [{"hash":"foo"}] The operation is not supported. +FAIL Pattern: [{"search":":café"}] Inputs: [{"search":"foo"}] assert_equals: compiled pattern property 'search' expected ":café" but got ":caf%C3%A9" +FAIL Pattern: [{"hash":":café"}] Inputs: [{"hash":"foo"}] assert_equals: compiled pattern property 'hash' expected ":café" but got ":caf%C3%A9" FAIL Pattern: [{"protocol":":℘"}] Inputs: [{"protocol":"foo"}] The operation is not supported. FAIL Pattern: [{"username":":℘"}] Inputs: [{"username":"foo"}] The operation is not supported. FAIL Pattern: [{"password":":℘"}] Inputs: [{"password":"foo"}] The operation is not supported. @@ -143,15 +143,15 @@ FAIL Pattern: [{"hostname":":㐀"}] Inputs: [{"hostname":"foo"}] The operation i FAIL Pattern: [{"pathname":"/:㐀"}] Inputs: [{"pathname":"/foo"}] The operation is not supported. FAIL Pattern: [{"search":":㐀"}] Inputs: [{"search":"foo"}] The operation is not supported. FAIL Pattern: [{"hash":":㐀"}] Inputs: [{"hash":"foo"}] The operation is not supported. -FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"café"}] assert_equals: compiled pattern property 'protocol' expected "*" but got "(.*)" -FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"cafe"}] assert_equals: compiled pattern property 'protocol' expected "*" but got "(.*)" +FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"café"}] The operation is not supported. +FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"cafe"}] The operation is not supported. FAIL Pattern: [{"protocol":"foo-bar"}] Inputs: [{"protocol":"foo-bar"}] The operation is not supported. -FAIL Pattern: [{"username":"caf%C3%A9"}] Inputs: [{"username":"café"}] The operation is not supported. +FAIL Pattern: [{"username":"caf%C3%A9"}] Inputs: [{"username":"café"}] assert_equals: compiled pattern property 'username' expected "caf%C3%A9" but got "café" FAIL Pattern: [{"username":"café"}] Inputs: [{"username":"café"}] assert_equals: compiled pattern property 'username' expected "caf%C3%A9" but got "café" -FAIL Pattern: [{"username":"caf%c3%a9"}] Inputs: [{"username":"café"}] The operation is not supported. -FAIL Pattern: [{"password":"caf%C3%A9"}] Inputs: [{"password":"café"}] The operation is not supported. +FAIL Pattern: [{"username":"caf%c3%a9"}] Inputs: [{"username":"café"}] assert_equals: compiled pattern property 'username' expected "caf%c3%a9" but got "café" +FAIL Pattern: [{"password":"caf%C3%A9"}] Inputs: [{"password":"café"}] assert_equals: compiled pattern property 'password' expected "caf%C3%A9" but got "café" FAIL Pattern: [{"password":"café"}] Inputs: [{"password":"café"}] assert_equals: compiled pattern property 'password' expected "caf%C3%A9" but got "café" -FAIL Pattern: [{"password":"caf%c3%a9"}] Inputs: [{"password":"café"}] The operation is not supported. +FAIL Pattern: [{"password":"caf%c3%a9"}] Inputs: [{"password":"café"}] assert_equals: compiled pattern property 'password' expected "caf%c3%a9" but got "café" FAIL Pattern: [{"hostname":"xn--caf-dma.com"}] Inputs: [{"hostname":"café.com"}] The operation is not supported. FAIL Pattern: [{"hostname":"café.com"}] Inputs: [{"hostname":"café.com"}] assert_equals: compiled pattern property 'hostname' expected "xn--caf-dma.com" but got "café.com" FAIL Pattern: [{"port":""}] Inputs: [{"protocol":"http","port":"80"}] The operation is not supported. @@ -161,7 +161,7 @@ FAIL Pattern: [{"protocol":"http","port":"80 "}] Inputs: [{"protocol":"http","po FAIL Pattern: [{"port":"80"}] Inputs: [{"protocol":"http","port":"80"}] The operation is not supported. FAIL Pattern: [{"protocol":"http{s}?","port":"80"}] Inputs: [{"protocol":"http","port":"80"}] The operation is not supported. FAIL Pattern: [{"port":"80"}] Inputs: [{"port":"80"}] The operation is not supported. -FAIL Pattern: [{"port":"(.*)"}] Inputs: [{"port":"invalid80"}] assert_equals: compiled pattern property 'port' expected "*" but got "(.*)" +FAIL Pattern: [{"port":"(.*)"}] Inputs: [{"port":"invalid80"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo/bar"}] Inputs: [{"pathname":"/foo/./bar"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo/baz"}] Inputs: [{"pathname":"/foo/bar/../baz"}] The operation is not supported. FAIL Pattern: [{"pathname":"/caf%C3%A9"}] Inputs: [{"pathname":"/café"}] The operation is not supported. @@ -179,10 +179,10 @@ FAIL Pattern: [{"pathname":"foo/bar"}] Inputs: ["https://example.com/foo/bar"] T FAIL Pattern: [{"pathname":"foo/bar","baseURL":"https://example.com"}] Inputs: ["https://example.com/foo/bar"] assert_equals: compiled pattern property 'pathname' expected "/foo/bar" but got "foo/bar" FAIL Pattern: [{"pathname":":name.html","baseURL":"https://example.com"}] Inputs: ["https://example.com/foo.html"] assert_equals: compiled pattern property 'pathname' expected "/:name.html" but got ":name.html" FAIL Pattern: [{"search":"q=caf%C3%A9"}] Inputs: [{"search":"q=café"}] The operation is not supported. -FAIL Pattern: [{"search":"q=café"}] Inputs: [{"search":"q=café"}] assert_equals: compiled pattern property 'search' expected "q=caf%C3%A9" but got "q=café" +FAIL Pattern: [{"search":"q=café"}] Inputs: [{"search":"q=café"}] The operation is not supported. FAIL Pattern: [{"search":"q=caf%c3%a9"}] Inputs: [{"search":"q=café"}] The operation is not supported. FAIL Pattern: [{"hash":"caf%C3%A9"}] Inputs: [{"hash":"café"}] The operation is not supported. -FAIL Pattern: [{"hash":"café"}] Inputs: [{"hash":"café"}] assert_equals: compiled pattern property 'hash' expected "caf%C3%A9" but got "café" +FAIL Pattern: [{"hash":"café"}] Inputs: [{"hash":"café"}] The operation is not supported. FAIL Pattern: [{"hash":"caf%c3%a9"}] Inputs: [{"hash":"café"}] The operation is not supported. FAIL Pattern: [{"protocol":"about","pathname":"(blank|sourcedoc)"}] Inputs: ["about:blank"] The operation is not supported. FAIL Pattern: [{"protocol":"data","pathname":":number([0-9]+)"}] Inputs: ["data:8675309"] The operation is not supported. @@ -272,13 +272,13 @@ FAIL Pattern: ["http://[\\:\\:1]:8080/"] Inputs: ["http://[::1]:8080/"] Not impl FAIL Pattern: ["http://[\\:\\:a]/"] Inputs: ["http://[::a]/"] Not implemented. FAIL Pattern: ["http://[:address]/"] Inputs: ["http://[::1]/"] Not implemented. FAIL Pattern: ["http://[\\:\\:AB\\::num]/"] Inputs: ["http://[::ab:1]/"] Not implemented. -FAIL Pattern: [{"hostname":"[\\:\\:AB\\::num]"}] Inputs: [{"hostname":"[::ab:1]"}] assert_equals: compiled pattern property 'hostname' expected "[\\:\\:ab\\::num]" but got "[\\:\\:AB\\::num]" -FAIL Pattern: [{"hostname":"[\\:\\:xY\\::num]"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"{[\\:\\:ab\\::num]}"}] Inputs: [{"hostname":"[::ab:1]"}] The operation is not supported. -FAIL Pattern: [{"hostname":"{[\\:\\:fé\\::num]}"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"{[\\:\\::num\\:1]}"}] Inputs: [{"hostname":"[::ab:1]"}] The operation is not supported. -FAIL Pattern: [{"hostname":"{[\\:\\::num\\:fé]}"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"[*\\:1]"}] Inputs: [{"hostname":"[::ab:1]"}] The operation is not supported. +FAIL Pattern: [{"hostname":"[\\:\\:AB\\::num]"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. +PASS Pattern: [{"hostname":"[\\:\\:xY\\::num]"}] Inputs: undefined +FAIL Pattern: [{"hostname":"{[\\:\\:ab\\::num]}"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. +PASS Pattern: [{"hostname":"{[\\:\\:fé\\::num]}"}] Inputs: undefined +FAIL Pattern: [{"hostname":"{[\\:\\::num\\:1]}"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. +PASS Pattern: [{"hostname":"{[\\:\\::num\\:fé]}"}] Inputs: undefined +FAIL Pattern: [{"hostname":"[*\\:1]"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. FAIL Pattern: [{"hostname":"*\\:1]"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: ["https://foo{{@}}example.com"] Inputs: ["https://foo@example.com"] assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" threw object "NotSupportedError: Not implemented." ("NotSupportedError") expected instance of function "function TypeError() { [native code] @@ -299,20 +299,20 @@ FAIL Pattern: [{"pathname":":name"}] Inputs: [{"pathname":"foobar"}] The operati FAIL Pattern: [{"protocol":":name*"}] Inputs: [{"protocol":"foobar"}] The operation is not supported. FAIL Pattern: [{"protocol":":name+"}] Inputs: [{"protocol":"foobar"}] The operation is not supported. FAIL Pattern: [{"protocol":":name"}] Inputs: [{"protocol":"foobar"}] The operation is not supported. -FAIL Pattern: [{"hostname":"bad hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad#hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad%hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad%hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad/hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: [{"hostname":"bad\\:hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad>hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad?hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"badhostname"}] Inputs: undefined +PASS Pattern: [{"hostname":"bad?hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad@hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad[hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad]hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad[hostname"}] Inputs: undefined +PASS Pattern: [{"hostname":"bad]hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad\\\\hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad^hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad|hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad^hostname"}] Inputs: undefined +PASS Pattern: [{"hostname":"bad|hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad\nhostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: [{"hostname":"bad\rhostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: [{"hostname":"bad\thostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw diff --git a/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.https.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.https.any.worker-expected.txt index c88240d2cee88..58946c9bcfba7 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.https.any.worker-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/urlpattern/urlpattern.https.any.worker-expected.txt @@ -115,20 +115,20 @@ FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/bar/bar"}] FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/bar/baz"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo{/bar}*"}] Inputs: [{"pathname":"/foo/"}] The operation is not supported. -FAIL Pattern: [{"protocol":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"username":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"password":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"protocol":"(café)"}] Inputs: undefined +PASS Pattern: [{"username":"(café)"}] Inputs: undefined +PASS Pattern: [{"password":"(café)"}] Inputs: undefined +PASS Pattern: [{"hostname":"(café)"}] Inputs: undefined FAIL Pattern: [{"pathname":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"search":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hash":"(café)"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"protocol":":café"}] Inputs: [{"protocol":"foo"}] The operation is not supported. -FAIL Pattern: [{"username":":café"}] Inputs: [{"username":"foo"}] The operation is not supported. -FAIL Pattern: [{"password":":café"}] Inputs: [{"password":"foo"}] The operation is not supported. -FAIL Pattern: [{"hostname":":café"}] Inputs: [{"hostname":"foo"}] The operation is not supported. +PASS Pattern: [{"search":"(café)"}] Inputs: undefined +PASS Pattern: [{"hash":"(café)"}] Inputs: undefined +FAIL Pattern: [{"protocol":":café"}] Inputs: [{"protocol":"foo"}] Invalid input to canonicalize a URL protocol string. +FAIL Pattern: [{"username":":café"}] Inputs: [{"username":"foo"}] assert_equals: compiled pattern property 'username' expected ":café" but got "{:caf}é" +FAIL Pattern: [{"password":":café"}] Inputs: [{"password":"foo"}] assert_equals: compiled pattern property 'password' expected ":café" but got "{:caf}é" +FAIL Pattern: [{"hostname":":café"}] Inputs: [{"hostname":"foo"}] assert_equals: compiled pattern property 'hostname' expected ":café" but got "{:caf}é" FAIL Pattern: [{"pathname":"/:café"}] Inputs: [{"pathname":"/foo"}] The operation is not supported. -FAIL Pattern: [{"search":":café"}] Inputs: [{"search":"foo"}] The operation is not supported. -FAIL Pattern: [{"hash":":café"}] Inputs: [{"hash":"foo"}] The operation is not supported. +FAIL Pattern: [{"search":":café"}] Inputs: [{"search":"foo"}] assert_equals: compiled pattern property 'search' expected ":café" but got ":caf%C3%A9" +FAIL Pattern: [{"hash":":café"}] Inputs: [{"hash":"foo"}] assert_equals: compiled pattern property 'hash' expected ":café" but got ":caf%C3%A9" FAIL Pattern: [{"protocol":":℘"}] Inputs: [{"protocol":"foo"}] The operation is not supported. FAIL Pattern: [{"username":":℘"}] Inputs: [{"username":"foo"}] The operation is not supported. FAIL Pattern: [{"password":":℘"}] Inputs: [{"password":"foo"}] The operation is not supported. @@ -143,15 +143,15 @@ FAIL Pattern: [{"hostname":":㐀"}] Inputs: [{"hostname":"foo"}] The operation i FAIL Pattern: [{"pathname":"/:㐀"}] Inputs: [{"pathname":"/foo"}] The operation is not supported. FAIL Pattern: [{"search":":㐀"}] Inputs: [{"search":"foo"}] The operation is not supported. FAIL Pattern: [{"hash":":㐀"}] Inputs: [{"hash":"foo"}] The operation is not supported. -FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"café"}] assert_equals: compiled pattern property 'protocol' expected "*" but got "(.*)" -FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"cafe"}] assert_equals: compiled pattern property 'protocol' expected "*" but got "(.*)" +FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"café"}] The operation is not supported. +FAIL Pattern: [{"protocol":"(.*)"}] Inputs: [{"protocol":"cafe"}] The operation is not supported. FAIL Pattern: [{"protocol":"foo-bar"}] Inputs: [{"protocol":"foo-bar"}] The operation is not supported. -FAIL Pattern: [{"username":"caf%C3%A9"}] Inputs: [{"username":"café"}] The operation is not supported. +FAIL Pattern: [{"username":"caf%C3%A9"}] Inputs: [{"username":"café"}] assert_equals: compiled pattern property 'username' expected "caf%C3%A9" but got "café" FAIL Pattern: [{"username":"café"}] Inputs: [{"username":"café"}] assert_equals: compiled pattern property 'username' expected "caf%C3%A9" but got "café" -FAIL Pattern: [{"username":"caf%c3%a9"}] Inputs: [{"username":"café"}] The operation is not supported. -FAIL Pattern: [{"password":"caf%C3%A9"}] Inputs: [{"password":"café"}] The operation is not supported. +FAIL Pattern: [{"username":"caf%c3%a9"}] Inputs: [{"username":"café"}] assert_equals: compiled pattern property 'username' expected "caf%c3%a9" but got "café" +FAIL Pattern: [{"password":"caf%C3%A9"}] Inputs: [{"password":"café"}] assert_equals: compiled pattern property 'password' expected "caf%C3%A9" but got "café" FAIL Pattern: [{"password":"café"}] Inputs: [{"password":"café"}] assert_equals: compiled pattern property 'password' expected "caf%C3%A9" but got "café" -FAIL Pattern: [{"password":"caf%c3%a9"}] Inputs: [{"password":"café"}] The operation is not supported. +FAIL Pattern: [{"password":"caf%c3%a9"}] Inputs: [{"password":"café"}] assert_equals: compiled pattern property 'password' expected "caf%c3%a9" but got "café" FAIL Pattern: [{"hostname":"xn--caf-dma.com"}] Inputs: [{"hostname":"café.com"}] The operation is not supported. FAIL Pattern: [{"hostname":"café.com"}] Inputs: [{"hostname":"café.com"}] assert_equals: compiled pattern property 'hostname' expected "xn--caf-dma.com" but got "café.com" FAIL Pattern: [{"port":""}] Inputs: [{"protocol":"http","port":"80"}] The operation is not supported. @@ -161,7 +161,7 @@ FAIL Pattern: [{"protocol":"http","port":"80 "}] Inputs: [{"protocol":"http","po FAIL Pattern: [{"port":"80"}] Inputs: [{"protocol":"http","port":"80"}] The operation is not supported. FAIL Pattern: [{"protocol":"http{s}?","port":"80"}] Inputs: [{"protocol":"http","port":"80"}] The operation is not supported. FAIL Pattern: [{"port":"80"}] Inputs: [{"port":"80"}] The operation is not supported. -FAIL Pattern: [{"port":"(.*)"}] Inputs: [{"port":"invalid80"}] assert_equals: compiled pattern property 'port' expected "*" but got "(.*)" +FAIL Pattern: [{"port":"(.*)"}] Inputs: [{"port":"invalid80"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo/bar"}] Inputs: [{"pathname":"/foo/./bar"}] The operation is not supported. FAIL Pattern: [{"pathname":"/foo/baz"}] Inputs: [{"pathname":"/foo/bar/../baz"}] The operation is not supported. FAIL Pattern: [{"pathname":"/caf%C3%A9"}] Inputs: [{"pathname":"/café"}] The operation is not supported. @@ -179,10 +179,10 @@ FAIL Pattern: [{"pathname":"foo/bar"}] Inputs: ["https://example.com/foo/bar"] T FAIL Pattern: [{"pathname":"foo/bar","baseURL":"https://example.com"}] Inputs: ["https://example.com/foo/bar"] assert_equals: compiled pattern property 'pathname' expected "/foo/bar" but got "foo/bar" FAIL Pattern: [{"pathname":":name.html","baseURL":"https://example.com"}] Inputs: ["https://example.com/foo.html"] assert_equals: compiled pattern property 'pathname' expected "/:name.html" but got ":name.html" FAIL Pattern: [{"search":"q=caf%C3%A9"}] Inputs: [{"search":"q=café"}] The operation is not supported. -FAIL Pattern: [{"search":"q=café"}] Inputs: [{"search":"q=café"}] assert_equals: compiled pattern property 'search' expected "q=caf%C3%A9" but got "q=café" +FAIL Pattern: [{"search":"q=café"}] Inputs: [{"search":"q=café"}] The operation is not supported. FAIL Pattern: [{"search":"q=caf%c3%a9"}] Inputs: [{"search":"q=café"}] The operation is not supported. FAIL Pattern: [{"hash":"caf%C3%A9"}] Inputs: [{"hash":"café"}] The operation is not supported. -FAIL Pattern: [{"hash":"café"}] Inputs: [{"hash":"café"}] assert_equals: compiled pattern property 'hash' expected "caf%C3%A9" but got "café" +FAIL Pattern: [{"hash":"café"}] Inputs: [{"hash":"café"}] The operation is not supported. FAIL Pattern: [{"hash":"caf%c3%a9"}] Inputs: [{"hash":"café"}] The operation is not supported. FAIL Pattern: [{"protocol":"about","pathname":"(blank|sourcedoc)"}] Inputs: ["about:blank"] The operation is not supported. FAIL Pattern: [{"protocol":"data","pathname":":number([0-9]+)"}] Inputs: ["data:8675309"] The operation is not supported. @@ -272,13 +272,13 @@ FAIL Pattern: ["http://[\\:\\:1]:8080/"] Inputs: ["http://[::1]:8080/"] Not impl FAIL Pattern: ["http://[\\:\\:a]/"] Inputs: ["http://[::a]/"] Not implemented. FAIL Pattern: ["http://[:address]/"] Inputs: ["http://[::1]/"] Not implemented. FAIL Pattern: ["http://[\\:\\:AB\\::num]/"] Inputs: ["http://[::ab:1]/"] Not implemented. -FAIL Pattern: [{"hostname":"[\\:\\:AB\\::num]"}] Inputs: [{"hostname":"[::ab:1]"}] assert_equals: compiled pattern property 'hostname' expected "[\\:\\:ab\\::num]" but got "[\\:\\:AB\\::num]" -FAIL Pattern: [{"hostname":"[\\:\\:xY\\::num]"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"{[\\:\\:ab\\::num]}"}] Inputs: [{"hostname":"[::ab:1]"}] The operation is not supported. -FAIL Pattern: [{"hostname":"{[\\:\\:fé\\::num]}"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"{[\\:\\::num\\:1]}"}] Inputs: [{"hostname":"[::ab:1]"}] The operation is not supported. -FAIL Pattern: [{"hostname":"{[\\:\\::num\\:fé]}"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"[*\\:1]"}] Inputs: [{"hostname":"[::ab:1]"}] The operation is not supported. +FAIL Pattern: [{"hostname":"[\\:\\:AB\\::num]"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. +PASS Pattern: [{"hostname":"[\\:\\:xY\\::num]"}] Inputs: undefined +FAIL Pattern: [{"hostname":"{[\\:\\:ab\\::num]}"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. +PASS Pattern: [{"hostname":"{[\\:\\:fé\\::num]}"}] Inputs: undefined +FAIL Pattern: [{"hostname":"{[\\:\\::num\\:1]}"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. +PASS Pattern: [{"hostname":"{[\\:\\::num\\:fé]}"}] Inputs: undefined +FAIL Pattern: [{"hostname":"[*\\:1]"}] Inputs: [{"hostname":"[::ab:1]"}] Invalid input to canonicalize a URL host string. FAIL Pattern: [{"hostname":"*\\:1]"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: ["https://foo{{@}}example.com"] Inputs: ["https://foo@example.com"] assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" threw object "NotSupportedError: Not implemented." ("NotSupportedError") expected instance of function "function TypeError() { [native code] @@ -299,20 +299,20 @@ FAIL Pattern: [{"pathname":":name"}] Inputs: [{"pathname":"foobar"}] The operati FAIL Pattern: [{"protocol":":name*"}] Inputs: [{"protocol":"foobar"}] The operation is not supported. FAIL Pattern: [{"protocol":":name+"}] Inputs: [{"protocol":"foobar"}] The operation is not supported. FAIL Pattern: [{"protocol":":name"}] Inputs: [{"protocol":"foobar"}] The operation is not supported. -FAIL Pattern: [{"hostname":"bad hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad#hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad%hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad%hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad/hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: [{"hostname":"bad\\:hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad>hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad?hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"badhostname"}] Inputs: undefined +PASS Pattern: [{"hostname":"bad?hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad@hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad[hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad]hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad[hostname"}] Inputs: undefined +PASS Pattern: [{"hostname":"bad]hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad\\\\hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad^hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw -FAIL Pattern: [{"hostname":"bad|hostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw +PASS Pattern: [{"hostname":"bad^hostname"}] Inputs: undefined +PASS Pattern: [{"hostname":"bad|hostname"}] Inputs: undefined FAIL Pattern: [{"hostname":"bad\nhostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: [{"hostname":"bad\rhostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw FAIL Pattern: [{"hostname":"bad\thostname"}] Inputs: undefined assert_throws_js: URLPattern() constructor function "_ => new URLPattern(...entry.pattern)" did not throw diff --git a/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/accumulation-per-property-001-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/accumulation-per-property-001-expected.txt index 8150eac886521..bdd7595dab0f1 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/accumulation-per-property-001-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/accumulation-per-property-001-expected.txt @@ -44,8 +44,12 @@ PASS background-repeat (type: discrete) has testAccumulation function PASS background-repeat: "round" onto "space" PASS background-repeat: "space" onto "round" PASS block-step-insert (type: discrete) has testAccumulation function -PASS block-step-insert: "padding" onto "margin" -PASS block-step-insert: "margin" onto "padding" +PASS block-step-insert: "padding-box" onto "margin-box" +PASS block-step-insert: "margin-box" onto "padding-box" +PASS block-step-insert: "content-box" onto "margin-box" +PASS block-step-insert: "margin-box" onto "content-box" +PASS block-step-insert: "content-box" onto "padding-box" +PASS block-step-insert: "padding-box" onto "content-box" PASS block-step-size (type: length) has testAccumulation function PASS block-step-size: length PASS block-step-size: length of rem diff --git a/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/addition-per-property-001-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/addition-per-property-001-expected.txt index 58d7764d83f4a..c1d4a931a37c6 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/addition-per-property-001-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/addition-per-property-001-expected.txt @@ -44,8 +44,12 @@ PASS background-repeat (type: discrete) has testAddition function PASS background-repeat: "round" onto "space" PASS background-repeat: "space" onto "round" PASS block-step-insert (type: discrete) has testAddition function -PASS block-step-insert: "padding" onto "margin" -PASS block-step-insert: "margin" onto "padding" +PASS block-step-insert: "padding-box" onto "margin-box" +PASS block-step-insert: "margin-box" onto "padding-box" +PASS block-step-insert: "content-box" onto "margin-box" +PASS block-step-insert: "margin-box" onto "content-box" +PASS block-step-insert: "content-box" onto "padding-box" +PASS block-step-insert: "padding-box" onto "content-box" PASS block-step-size (type: length) has testAddition function PASS block-step-size: length PASS block-step-size: length of rem diff --git a/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/interpolation-per-property-001-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/interpolation-per-property-001-expected.txt index c5d606210e840..769935865f727 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/interpolation-per-property-001-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/interpolation-per-property-001-expected.txt @@ -56,9 +56,15 @@ PASS background-repeat uses discrete animation when animating between "space" an PASS background-repeat uses discrete animation when animating between "space" and "round" with effect easing PASS background-repeat uses discrete animation when animating between "space" and "round" with keyframe easing PASS block-step-insert (type: discrete) has testInterpolation function -PASS block-step-insert uses discrete animation when animating between "margin" and "padding" with linear easing -PASS block-step-insert uses discrete animation when animating between "margin" and "padding" with effect easing -PASS block-step-insert uses discrete animation when animating between "margin" and "padding" with keyframe easing +PASS block-step-insert uses discrete animation when animating between "margin-box" and "padding-box" with linear easing +PASS block-step-insert uses discrete animation when animating between "margin-box" and "padding-box" with effect easing +PASS block-step-insert uses discrete animation when animating between "margin-box" and "padding-box" with keyframe easing +PASS block-step-insert uses discrete animation when animating between "margin-box" and "content-box" with linear easing +PASS block-step-insert uses discrete animation when animating between "margin-box" and "content-box" with effect easing +PASS block-step-insert uses discrete animation when animating between "margin-box" and "content-box" with keyframe easing +PASS block-step-insert uses discrete animation when animating between "padding-box" and "content-box" with linear easing +PASS block-step-insert uses discrete animation when animating between "padding-box" and "content-box" with effect easing +PASS block-step-insert uses discrete animation when animating between "padding-box" and "content-box" with keyframe easing PASS block-step-size (type: length) has testInterpolation function PASS block-step-size supports animating as a length PASS block-step-size supports animating as a length of rem diff --git a/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/property-list.js b/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/property-list.js index ee791e884c57a..c7659905c2228 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/property-list.js +++ b/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/property-list.js @@ -107,7 +107,7 @@ const gCSSProperties1 = { 'block-step-insert': { // https://drafts.csswg.org/css-rhythm/#block-step-insert types: [ - { type: 'discrete', options: [ [ 'margin', 'padding' ] ] } + { type: 'discrete', options: [ [ 'margin-box', 'padding-box'], ['margin-box', 'content-box'], ['padding-box', 'content-box'] ] } ] }, 'block-step-size': { diff --git a/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/overallProgress.tentative-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/overallProgress.tentative-expected.txt new file mode 100644 index 0000000000000..68459249e5c24 --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/overallProgress.tentative-expected.txt @@ -0,0 +1,8 @@ + +PASS overallProgress of a newly created animation without an effect is unresolved +PASS overallProgress of an animation whose currentTime is unresolved is unresolved. +PASS overallProgress of an animation whose effect's endTime is zero is zero if its currentTime is negative. +PASS overallProgress of an animation whose effect's endTime is zero is one if its currentTime is non-negative. +PASS overallProgress of an animation whose effect's endTime is infinity is zero. +PASS overallProgress of an animation is calculated by currentTime / effect endTime. + diff --git a/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/progress.tentative.html b/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/overallProgress.tentative.html similarity index 63% rename from LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/progress.tentative.html rename to LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/overallProgress.tentative.html index 38f37cbfeb8df..8024eb834b662 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/progress.tentative.html +++ b/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/overallProgress.tentative.html @@ -1,8 +1,8 @@ -Animation.progress +Animation.overallProgress +href="https://drafts.csswg.org/web-animations-2/#the-overall-progress-of-an-animation"> @@ -16,16 +16,16 @@ const animation = new Animation(null); animation.startTime = document.timeline.currentTime; assert_time_equals_literal(animation.currentTime, 0, 'currentTime is zero'); - assert_equals(animation.progress, null, 'progress is unresolved'); -}, 'progress of a newly created animation without an effect is unresolved'); + assert_equals(animation.overallProgress, null, 'overallProgress is unresolved'); +}, 'overallProgress of a newly created animation without an effect is unresolved'); test(t => { // currentTime should be unresolved because the animation has no associated // timeline. const animation = new Animation(new KeyframeEffect(createDiv(t), null), null); assert_equals(animation.currentTime, null, 'currentTime is unresolved'); - assert_equals(animation.progress, null, 'progress is unresolved'); -}, 'progress of an animation whose currentTime is unresolved is unresolved.'); + assert_equals(animation.overallProgress, null, 'overallProgress is unresolved'); +}, 'overallProgress of an animation whose currentTime is unresolved is unresolved.'); test(t => { const animation = new Animation(new KeyframeEffect(createDiv(t), null, @@ -33,8 +33,8 @@ // Set the startTime to 20 seconds into the future. animation.startTime = document.timeline.currentTime + 20 * MS_PER_SEC; assert_less_than(animation.currentTime, 0, 'currentTime is negative'); - assert_approx_equals(animation.progress, 0, 0.01, 'progress is zero'); -}, "progress of an animation whose effect's endTime is zero is zero if its " + + assert_approx_equals(animation.overallProgress, 0, 0.01, 'overallProgress is zero'); +}, "overallProgress of an animation whose effect's endTime is zero is zero if its " + "currentTime is negative."); test(t => { @@ -42,12 +42,12 @@ { duration: 0 }), document.timeline); animation.startTime = document.timeline.currentTime; assert_time_equals_literal(animation.currentTime, 0, 'currentTime is zero'); - assert_approx_equals(animation.progress, 1, 0.01, 'progress is one'); + assert_approx_equals(animation.overallProgress, 1, 0.01, 'overallProgress is one'); animation.startTime = document.timeline.currentTime - 20 * MS_PER_SEC; assert_greater_than(animation.currentTime, 0, 'currentTime greater than zero'); - assert_approx_equals(animation.progress, 1, 0.01, 'progress is one'); -}, "progress of an animation whose effect's endTime is zero is one if its " + + assert_approx_equals(animation.overallProgress, 1, 0.01, 'overallProgress is one'); +}, "overallProgress of an animation whose effect's endTime is zero is one if its " + "currentTime is non-negative."); test(t => { @@ -56,8 +56,8 @@ animation.startTime = document.timeline.currentTime - 20 * MS_PER_SEC; assert_greater_than(animation.currentTime, 0, 'currentTime is positive'); - assert_approx_equals(animation.progress, 0, 0.01, 'progress is zero'); -}, "progress of an animation whose effect's endTime is infinity is zero."); + assert_approx_equals(animation.overallProgress, 0, 0.01, 'overallProgress is zero'); +}, "overallProgress of an animation whose effect's endTime is infinity is zero."); test(t => { const animation = new Animation(new KeyframeEffect(createDiv(t), null, @@ -66,16 +66,16 @@ animation.startTime = document.timeline.currentTime - 50 * MS_PER_SEC; assert_time_equals_literal(animation.currentTime, 100 * MS_PER_SEC, 'currentTime is 100s'); - assert_approx_equals(animation.progress, 0.5, 0.01, 'progress is zero'); + assert_approx_equals(animation.overallProgress, 0.5, 0.01, 'overallProgress is zero'); animation.startTime = document.timeline.currentTime - 100 * MS_PER_SEC; assert_time_equals_literal(animation.currentTime, 200 * MS_PER_SEC, 'currentTime is 200s'); - assert_approx_equals(animation.progress, 1, 0.01, 'progress is one'); + assert_approx_equals(animation.overallProgress, 1, 0.01, 'overallProgress is one'); animation.startTime = document.timeline.currentTime - 150 * MS_PER_SEC; assert_time_equals_literal(animation.currentTime, 300 * MS_PER_SEC, 'currentTime is 300s'); - assert_approx_equals(animation.progress, 1, 0.01, 'progress is still one'); -}, "progress of an animation is calculated by currentTime / effect endTime."); + assert_approx_equals(animation.overallProgress, 1, 0.01, 'overallProgress is still one'); +}, "overallProgress of an animation is calculated by currentTime / effect endTime."); diff --git a/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/progress.tentative-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/progress.tentative-expected.txt deleted file mode 100644 index 68545e88b7f51..0000000000000 --- a/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/progress.tentative-expected.txt +++ /dev/null @@ -1,8 +0,0 @@ - -PASS progress of a newly created animation without an effect is unresolved -PASS progress of an animation whose currentTime is unresolved is unresolved. -PASS progress of an animation whose effect's endTime is zero is zero if its currentTime is negative. -PASS progress of an animation whose effect's endTime is zero is one if its currentTime is non-negative. -PASS progress of an animation whose effect's endTime is infinity is zero. -PASS progress of an animation is calculated by currentTime / effect endTime. - diff --git a/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/scroll-timeline-overallProgress.tentative-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/scroll-timeline-overallProgress.tentative-expected.txt new file mode 100644 index 0000000000000..998131d5b9f7c --- /dev/null +++ b/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/scroll-timeline-overallProgress.tentative-expected.txt @@ -0,0 +1,6 @@ + +PASS animation.overallProgress reflects the progress of a scroll animation as a number between 0 and 1 +PASS animation.overallProgress reflects the overall progress of a scroll animation with multiple iterations. +FAIL animation.overallProgress reflects the overall progress of a scroll animation that uses a view-timeline. assert_approx_equals: values do not match for "currentTime reflects progress as a percentage" expected 10.666666666666671 +/- 0.125 but got 100 +FAIL overallProgresss of a view-timeline is bounded between 0 and 1. assert_less_than: currentTime is negative expected a number less than 0 but got 100 + diff --git a/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/scroll-timeline-progress.tentative.html b/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/scroll-timeline-overallProgress.tentative.html similarity index 74% rename from LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/scroll-timeline-progress.tentative.html rename to LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/scroll-timeline-overallProgress.tentative.html index b40e72482ba9c..d81c549b0b7d2 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/scroll-timeline-progress.tentative.html +++ b/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/scroll-timeline-overallProgress.tentative.html @@ -1,8 +1,8 @@ -Animation.progress +Animation.overallProgress +href="https://drafts.csswg.org/web-animations-2/#the-overall-progress-of-an-animation"> @@ -21,8 +21,8 @@ width: 100%; } #target { - height: 100px; - width: 100px; + height: 100px; + width: 100px; background-color: green; margin-top: -1000px; } @@ -38,30 +38,30 @@ assert_equals(animation.currentTime, null, "The current time is null in Idle state."); - assert_equals(animation.progress, null, - "The progress is null since the currentTime is unresolved."); + assert_equals(animation.overallProgress, null, + "The overallProgress is null since the currentTime is unresolved."); animation.play(); assert_true(animation.pending, "Animation is in the pending state."); assert_equals(animation.currentTime, null, "The current time remains null while in the pending state."); - assert_equals(animation.progress, null, - "The progress is null since the currentTime is unresolved."); + assert_equals(animation.overallProgress, null, + "The overallProgress is null since the currentTime is unresolved."); await animation.ready; // Verify initial start and current times once ready. assert_percents_equal(animation.currentTime, 0, "The current time is resolved when ready."); - assert_equals(animation.progress, 0, "The progress is should be zero."); + assert_equals(animation.overallProgress, 0, "The overallProgress should be zero."); scroller.scrollTop = 0.4 * maxScroll; await waitForNextFrame(); assert_percents_equal(animation.currentTime, 40, "currentTime reflects progress as a percentage"); - assert_approx_equals(animation.progress, 0.4, 0.01, - "The progress is should match the scroll progress."); -}, "animation.progress reflects the progress of a scroll animation as a "+ + assert_approx_equals(animation.overallProgress, 0.4, 0.01, + "The overallProgress should match the scroll progress."); +}, "animation.overallProgress reflects the progress of a scroll animation as a "+ "number between 0 and 1"); promise_test(async t => { @@ -74,7 +74,7 @@ // Verify initial start and current times once ready. assert_percents_equal(animation.currentTime, 0, "The current time is resolved when ready."); - assert_equals(animation.progress, 0, "The progress is should be zero."); + assert_equals(animation.overallProgress, 0, "The overallProgress should be zero."); scroller.scrollTop = 0.4 * maxScroll; await waitForNextFrame(); @@ -84,8 +84,8 @@ assert_percents_equal(timing.duration, 100); assert_percents_equal(animation.currentTime, 40, "currentTime reflects progress as a percentage"); - assert_approx_equals(animation.progress, 0.4, 0.01, - "The progress is should match the scroll progress."); + assert_approx_equals(animation.overallProgress, 0.4, 0.01, + "The overallProgress should match the scroll progress."); timing = animation.effect.getComputedTiming(); animation.effect.updateTiming({ iterations: 2 }); @@ -96,9 +96,9 @@ assert_percents_equal(timing.duration, 50); assert_percents_equal(animation.currentTime, 40, "currentTime reflects progress as a percentage"); - assert_approx_equals(animation.progress, 0.4, 0.01, - "The progress is should match the scroll progress."); -}, "animation.progress reflects the overall progress of a scroll animation " + + assert_approx_equals(animation.overallProgress, 0.4, 0.01, + "The overallProgress should match the scroll progress."); +}, "animation.overallProgress reflects the overall progress of a scroll animation " + "with multiple iterations."); promise_test(async t => { @@ -126,9 +126,9 @@ const expected_current_time = timeline_time - start_time; assert_percents_equal(animation.currentTime, expected_current_time, "currentTime reflects progress as a percentage"); - assert_approx_equals(animation.progress, target_pct / 100, 0.01, - "progress should reflect fraction of view timeline range scroll through."); -}, "animation.progress reflects the overall progress of a scroll animation " + + assert_approx_equals(animation.overallProgress, target_pct / 100, 0.01, + "overallProgress should reflect fraction of view timeline range scroll through."); +}, "animation.overallProgress reflects the overall progress of a scroll animation " + "that uses a view-timeline."); promise_test(async t => { @@ -151,16 +151,16 @@ await waitForNextFrame(); let timing = animation.effect.getComputedTiming(); assert_less_than(animation.currentTime.value, 0, "currentTime is negative"); - assert_approx_equals(animation.progress, 0, 0.01, "progress is zero when " + + assert_approx_equals(animation.overallProgress, 0, 0.01, "overallProgress is zero when " + "scroll offset is less than range start."); scroller.scrollTop = 200; await waitForNextFrame(); assert_approx_equals(animation.currentTime.value, timing.endTime.value, 0.01, "currentTime has reached endTime"); - assert_approx_equals(animation.progress, 1, 0.01, "progress is one when " + + assert_approx_equals(animation.overallProgress, 1, 0.01, "overallProgress is one when " + "scroll offset goes past than range end."); -}, "progresss of a view-timeline is bounded between 0 and 1."); +}, "overallProgresss of a view-timeline is bounded between 0 and 1."); diff --git a/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/scroll-timeline-progress.tentative-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/scroll-timeline-progress.tentative-expected.txt deleted file mode 100644 index 5aba735ad7635..0000000000000 --- a/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/scroll-timeline-progress.tentative-expected.txt +++ /dev/null @@ -1,6 +0,0 @@ - -PASS animation.progress reflects the progress of a scroll animation as a number between 0 and 1 -FAIL animation.progress reflects the overall progress of a scroll animation with multiple iterations. assert_equals: 'actual' unit type must be 'percent' for "undefined" expected (string) "percent" but got (undefined) undefined -FAIL animation.progress reflects the overall progress of a scroll animation that uses a view-timeline. assert_approx_equals: values do not match for "currentTime reflects progress as a percentage" expected 10.666666666666671 +/- 0.125 but got 100 -FAIL progresss of a view-timeline is bounded between 0 and 1. assert_less_than: currentTime is negative expected a number less than 0 but got 100 - diff --git a/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/style-change-events-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/style-change-events-expected.txt index bcadee538347e..1fe2035d5ed24 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/style-change-events-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/style-change-events-expected.txt @@ -8,7 +8,7 @@ PASS Animation.currentTime produces expected style change events PASS Animation.rangeStart produces expected style change events PASS Animation.rangeEnd produces expected style change events PASS Animation.playbackRate produces expected style change events -PASS Animation.progress produces expected style change events +PASS Animation.overallProgress produces expected style change events FAIL Animation.frameRate produces expected style change events assert_own_property: Should have a test for 'frameRate' property expected property "frameRate" missing PASS Animation.playState produces expected style change events PASS Animation.replaceState produces expected style change events diff --git a/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/style-change-events.html b/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/style-change-events.html index d2d6e9d4c9be9..d1c1c96f7b03e 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/style-change-events.html +++ b/LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/Animation/style-change-events.html @@ -169,7 +169,7 @@ // no effect. rangeStart: UsePropertyTest(animation => animation.rangeStart), rangeEnd: UsePropertyTest(animation => animation.rangeEnd), - progress: UsePropertyTest(animation => animation.progress), + overallProgress: UsePropertyTest(animation => animation.overallProgress), replaceState: UsePropertyTest(animation => animation.replaceState), ready: UsePropertyTest(animation => animation.ready), finished: UsePropertyTest(animation => { diff --git a/LayoutTests/imported/w3c/web-platform-tests/websockets/idlharness.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/websockets/idlharness.any-expected.txt index f98c50678ad1f..b041d023a15d9 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/websockets/idlharness.any-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/websockets/idlharness.any-expected.txt @@ -1,18 +1,18 @@ PASS idl_test setup -FAIL idl_test validation Validation error at line 2210 in html, inside `enum BinaryType`: +FAIL idl_test validation Validation error at line 2209 in html, inside `enum BinaryType`: enum BinaryType { "blob", "arraybuffer" ^ The name "BinaryType" of type "enum" was already seen -Validation error at line 2212 in html, inside `interface WebSocket`: +Validation error at line 2211 in html, inside `interface WebSocket`: interface WebSocket : EventTarget { ^ The name "WebSocket" of type "interface" was already seen -Validation error at line 2243 in html, inside `interface CloseEvent`: +Validation error at line 2242 in html, inside `interface CloseEvent`: interface CloseEvent : Event { ^ The name "CloseEvent" of type "interface" was already seen -Validation error at line 2251 in html, inside `dictionary CloseEventInit`: +Validation error at line 2250 in html, inside `dictionary CloseEventInit`: dictionary CloseEventInit : EventInit { ^ The name "CloseEventInit" of type "dictionary" was already seen PASS WebSocket interface: existence and properties of interface object diff --git a/LayoutTests/imported/w3c/web-platform-tests/websockets/idlharness.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/websockets/idlharness.any.worker-expected.txt index f98c50678ad1f..b041d023a15d9 100644 --- a/LayoutTests/imported/w3c/web-platform-tests/websockets/idlharness.any.worker-expected.txt +++ b/LayoutTests/imported/w3c/web-platform-tests/websockets/idlharness.any.worker-expected.txt @@ -1,18 +1,18 @@ PASS idl_test setup -FAIL idl_test validation Validation error at line 2210 in html, inside `enum BinaryType`: +FAIL idl_test validation Validation error at line 2209 in html, inside `enum BinaryType`: enum BinaryType { "blob", "arraybuffer" ^ The name "BinaryType" of type "enum" was already seen -Validation error at line 2212 in html, inside `interface WebSocket`: +Validation error at line 2211 in html, inside `interface WebSocket`: interface WebSocket : EventTarget { ^ The name "WebSocket" of type "interface" was already seen -Validation error at line 2243 in html, inside `interface CloseEvent`: +Validation error at line 2242 in html, inside `interface CloseEvent`: interface CloseEvent : Event { ^ The name "CloseEvent" of type "interface" was already seen -Validation error at line 2251 in html, inside `dictionary CloseEventInit`: +Validation error at line 2250 in html, inside `dictionary CloseEventInit`: dictionary CloseEventInit : EventInit { ^ The name "CloseEventInit" of type "dictionary" was already seen PASS WebSocket interface: existence and properties of interface object diff --git a/LayoutTests/inspector/canvas/resources/recording-2d.js b/LayoutTests/inspector/canvas/resources/recording-2d.js index d3cf1badaba0c..8a46dc03dbfc9 100644 --- a/LayoutTests/inspector/canvas/resources/recording-2d.js +++ b/LayoutTests/inspector/canvas/resources/recording-2d.js @@ -400,11 +400,6 @@ function performActions() { ctx.roundRect(0, 0, 50, 50, [23]); ctx.roundRect(0, 0, 150, 150, [{x: 24, y: 42}]); }, - /* FIXME: Disabled as per webkit.org/b/272591. Should be fully removed if we manage to remove this method. - () => { - ctx.commit?.(); - }, - */ () => { TestPage.dispatchEventToFrontend("LastFrame"); }, diff --git a/LayoutTests/media/content/test-par-16-9.webm b/LayoutTests/media/content/test-par-16-9.webm new file mode 100644 index 0000000000000..22ecd19fb17bd Binary files /dev/null and b/LayoutTests/media/content/test-par-16-9.webm differ diff --git a/LayoutTests/media/media-rvfc-paused-mp4-expected.txt b/LayoutTests/media/media-rvfc-paused-mp4-expected.txt new file mode 100644 index 0000000000000..b5cd2e7c5a1aa --- /dev/null +++ b/LayoutTests/media/media-rvfc-paused-mp4-expected.txt @@ -0,0 +1,11 @@ + +EVENT(loadedmetadata) +EXPECTED (0 == '0') OK +EXPECTED (0 == '0') OK +EXPECTED (320 == '320') OK +EXPECTED (240 == '240') OK +EXPECTED (6.009 == '6.009') OK +EXPECTED (6.009 == '6.009') OK +EXPECTED (320 == '320') OK +EXPECTED (240 == '240') OK + diff --git a/LayoutTests/media/media-rvfc-paused-mp4.html b/LayoutTests/media/media-rvfc-paused-mp4.html new file mode 100644 index 0000000000000..411a8c4b41a35 --- /dev/null +++ b/LayoutTests/media/media-rvfc-paused-mp4.html @@ -0,0 +1,43 @@ + + +requestVideoFrameCallback with paused webm + + + + + + +