Skip to content

script: Avoid double adjustment of Selection ranges during contenteditable node movement - #47393

Merged
mrobinson merged 3 commits into
servo:mainfrom
mrobinson:do-not-double-apply-live-range-update
Aug 20, 2026
Merged

mrobinson merged 3 commits into
servo:mainfrom
mrobinson:do-not-double-apply-live-range-update

Conversation

@mrobinson

Copy link
Copy Markdown
Member

The editing specification has a different way of updating selection
ranges than the typical live range update method in the insert and
remove algorithms. Because selections are currently represented as
live ranges (something that will change soon), this means that the
adjustment was being applied twice: once by the live range update and
then once by the contenteditable code's range fixup. This change makes
it so that the contenteditable fixup runs against the original
selection boundaries, meaning that the final fixup is done only once.

Testing: This change adds a WPT crash test.
Fixes: #47333.

@servo-wpt-sync

Copy link
Copy Markdown
Collaborator

🤖 Opened new upstream WPT pull request (web-platform-tests/wpt#62082) with upstreamable changes.

…itable` node movement

The editing specification has a different way of updating selection
ranges than the typical live range update method in the `insert` and
`remove` algorithms. Because selections are currently represented as
live ranges (something that will change soon), this means that the
adjustment was being applied twice: once by the live range update and
then once by the `contenteditable` code's range fixup. This change makes
it so that the `contenteditable` fixup runs against the original
selection boundaries, meaning that the final fixup is done only once.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
@mrobinson
mrobinson force-pushed the do-not-double-apply-live-range-update branch from a3b2b48 to 23a4c39 Compare August 20, 2026 10:55
@mrobinson mrobinson added the T-linux-wpt Do a try run of the WPT label Aug 20, 2026
@github-actions github-actions Bot removed the T-linux-wpt Do a try run of the WPT label Aug 20, 2026
@github-actions

Copy link
Copy Markdown

🔨 Triggering try run (#32361340553) for Linux (WPT)

@servo-wpt-sync

Copy link
Copy Markdown
Collaborator

📝 Transplanted new upstreamable changes to existing upstream WPT pull request (web-platform-tests/wpt#62082).

@mrobinson
mrobinson requested a review from TimvdLippe August 20, 2026 11:13
@github-actions

Copy link
Copy Markdown

Test results for linux-wpt from try job (#32361340553):

Flaky unexpected result (37)
  • TIMEOUT [expected OK] /_webgl/conformance/reading/read-pixels-test.html
  • OK [expected TIMEOUT] /_webgl/conformance/textures/misc/tex-video-using-tex-unit-non-zero.html (#39735)
    • PASS [expected NOTRUN] subtest: Overall test
    • PASS [expected FAIL] subtest: WebGL test #0
  • OK /_webgl/conformance/textures/misc/texture-upload-size.html (#21770)
    • FAIL [expected PASS] subtest: WebGL test #45

      assert_true: Texture was smaller than the expected size 2x2 expected true got false
      

    • FAIL [expected PASS] subtest: WebGL test #47

      assert_true: getError expected: INVALID_VALUE. Was NO_ERROR : when calling texSubImage2D with the same texture upload with offset 1, 1 expected true got false
      

    • FAIL [expected PASS] subtest: WebGL test #49

      assert_true: Texture was smaller than the expected size 2x2 expected true got false
      

    • FAIL [expected PASS] subtest: WebGL test #51

      assert_true: getError expected: INVALID_VALUE. Was NO_ERROR : when calling texSubImage2D with the same texture upload with offset 1, 1 expected true got false
      

    • PASS [expected FAIL] subtest: WebGL test #53
    • PASS [expected FAIL] subtest: WebGL test #55
    • PASS [expected FAIL] subtest: WebGL test #57
    • PASS [expected FAIL] subtest: WebGL test #59
    • FAIL [expected PASS] subtest: WebGL test #61

      assert_true: Texture was smaller than the expected size 2x2 expected true got false
      

    • FAIL [expected PASS] subtest: WebGL test #63

      assert_true: getError expected: INVALID_VALUE. Was NO_ERROR : when calling texSubImage2D with the same texture upload with offset 1, 1 expected true got false
      

    • And 22 more unexpected results...
  • CRASH [expected OK] /_webgl/conformance/uniforms/no-over-optimization-on-uniform-array-06.html
  • CRASH [expected OK] /_webgl/conformance/uniforms/no-over-optimization-on-uniform-array-16.html
  • CRASH [expected OK] /_webgl/conformance2/transform_feedback/transform_feedback.html
  • CRASH [expected OK] /_webgl/conformance2/wasm/readpixels-2gb-in-4gb-wasm-memory.html
  • OK /cookies/partitioned-cookies/partitioned-cookies-samesite-attribute.https.html (#45255)
    • FAIL [expected PASS] subtest: In embedded cross-site contexts, partitioned cookies can only be set with explicit SameSite=None

      assert_equals: expected 0 but got 3
      

  • FAIL [expected PASS] /css/css-sizing/dynamic-available-size-iframe.html (#45763)
  • ERROR [expected TIMEOUT] /css/css-sizing/responsive-iframe/responsive-iframe-allow-origins.html?container=subdomain,origin=cross,allowed=wildcard,expect=400 (#47268)
  • OK /dom/nodes/moveBefore/iframe-document-preserve.window.html (#43152)
    • FAIL [expected PASS] subtest: moveBefore(): cross-origin iframe is preserved: remove self via replaceChildren()

      assert_equals: iframe does not fire a second load event expected 1 but got 0
      

    • FAIL [expected PASS] subtest: moveBefore(): cross-origin iframe is preserved: remove self via innerHTML

      assert_equals: iframe does not fire a second load event expected 1 but got 0
      

  • TIMEOUT [expected OK] /fetch/content-encoding/br/big-br-body.https.any.html
    • TIMEOUT [expected PASS] subtest: large br data should be decompressed successfully

      Test timed out
      

    • NOTRUN [expected FAIL] subtest: large br data should be decompressed successfully with byte stream
  • TIMEOUT [expected OK] /fetch/content-encoding/br/big-br-body.https.any.worker.html
    • TIMEOUT [expected PASS] subtest: large br data should be decompressed successfully

      Test timed out
      

    • NOTRUN [expected FAIL] subtest: large br data should be decompressed successfully with byte stream
  • TIMEOUT [expected OK] /fetch/content-encoding/zstd/big-zstd-body.https.any.worker.html
    • TIMEOUT [expected PASS] subtest: large zstd data should be decompressed successfully

      Test timed out
      

    • NOTRUN [expected FAIL] subtest: large zstd data should be decompressed successfully with byte stream
  • OK [expected ERROR] /fetch/fetch-later/quota/same-origin-iframe/multiple-iframes.https.window.html (#35176)
  • OK /html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-cross-origin.sub.window.html (#29056)
    • PASS [expected FAIL] subtest: Cross-origin navigation started from unload handler must be ignored
  • OK /html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin-fragment.html (#20768)
    • PASS [expected FAIL] subtest: Tests that a fragment navigation in the unload handler will not block the initial navigation
  • OK /html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.html (#29049)
    • PASS [expected FAIL] subtest: Same-origin navigation started from unload handler must be ignored
  • OK /html/browsers/browsing-the-web/navigating-across-documents/refresh/same-document-refresh.html (#34597)
    • FAIL [expected PASS] subtest: Same-Document Referrer from Refresh

      assert_equals: original page loads expected "http://web-platform.test:8000/html/browsers/browsing-the-web/navigating-across-documents/refresh/resources/refresh-with-section.sub.html?url=%23section" but got "http://web-platform.test:8000/html/browsers/browsing-the-web/navigating-across-documents/refresh/resources/refresh-with-section.sub.html?url=%23section#section"
      

  • OK [expected TIMEOUT] /html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/form-submit-button-click.html (#44099)
    • FAIL [expected TIMEOUT] subtest: Replace before load, triggered by submitButton.click()

      assert_equals: expected "http://web-platform.test:8000/common/blank.html?thereplacement=" but got "http://web-platform.test:8000/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/resources/code-injector.html?pipe=sub(none)&amp;code=%0A%20%20%20%20const%20form%20%3D%20document.createElement(%22form%22)%3B%0A%20%20%20%20form.action%20%3D%20%22%2Fcommon%2Fblank.html%22%3B%0A%0A%20%20%20%20const%20input%20%3D%20document.createElement(%22input%22)%3B%0A%20%20%20%20input.type%20%3D%20%22hidden%22%3B%0A%20%20%20%20input.name%20%3D%20%22thereplacement%22%3B%0A%20%20%20%20form.append(input)%3B%0A%0A%20%20%20%20const%20button%20%3D%20document.createElement(%22button%22)%3B%0A%20%20%20%20button.type%20%3D%20%22submit%22%3B%0A%20%20%20%20form.append(button)%3B%0A%0A%20%20%20%20document.currentScript.before(form)%3B%0A%20%20%20%20button.click()%3B%0A%20%20"
      

  • CRASH [expected ERROR] /html/browsers/history/the-location-interface/location_replace_session_history.html (#41896)
  • OK [expected TIMEOUT] /html/infrastructure/urls/base-url/document-base-url-window-initiator-is-not-opener.https.window.html (#30970)
  • TIMEOUT [expected OK] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigate_other_frame_popup.sub.html (#39702)
    • TIMEOUT [expected FAIL] subtest: Sandboxed iframe can not navigate other frame's popup

      Test timed out
      

  • TIMEOUT [expected OK] /html/semantics/forms/form-submission-0/form-submit-iframe-then-location-navigate.html (#29634)
    • TIMEOUT [expected FAIL] subtest: Verifies that location navigations take precedence when following form submissions.

      Test timed out
      

  • OK /html/semantics/forms/form-submission-0/jsurl-form-submit.tentative.html (#36489)
    • PASS [expected FAIL] subtest: Verifies that form submissions scheduled inside javascript: urls take precedence over the javascript: url's return value.
  • CRASH [expected TIMEOUT] /html/semantics/forms/the-select-element/customizable-select/select-appearance-option-with-label.html
  • TIMEOUT [expected OK] /html/syntax/parsing/html5lib_write_single.html?file=scripted_adoption01
    • TIMEOUT [expected PASS] subtest: &lt;p&gt;&lt;b id="A"&gt;&lt;script&gt;document.getElementById("A").id = "B"&lt;/script&gt;&lt;/p&gt;TEXT&lt;/b&gt;

      Test timed out
      

  • TIMEOUT [expected OK] /html/syntax/parsing/html5lib_write_single.html?file=tests1 (#46327)
    • TIMEOUT [expected PASS] subtest: &lt;!COM--MENT&gt;

      Test timed out
      

  • TIMEOUT [expected OK] /html/user-activation/navigation-state-reset-sameorigin.html (#45151)
    • TIMEOUT [expected FAIL] subtest: Post-navigation state reset.

      Test timed out
      

  • TIMEOUT [expected OK] /pointerevents/compat/pointerevent_touch-action_two-finger_interaction.html (#44693)
    • NOTRUN [expected PASS] subtest: touch two-finger pan on 'touch-action: pan-x pan-y'
    • NOTRUN [expected FAIL] subtest: touch two-finger pan on 'touch-action: pinch-zoom'
  • TIMEOUT /resource-timing/response-status-code.html
    • TIMEOUT [expected FAIL] subtest: This test validates the response status of resources. 98

      Test timed out
      

    • NOTRUN [expected TIMEOUT] subtest: This test validates the response status of resources. 99
  • CRASH [expected OK] /trusted-types/navigate-to-javascript-url-001.html
  • OK [expected TIMEOUT] /trusted-types/trusted-types-navigation.html?11-15 (#44834)
    • PASS [expected TIMEOUT] subtest: Navigate a window via area with javascript:-urls in report-only mode.
  • TIMEOUT [expected OK] /trusted-types/trusted-types-navigation.html?16-20 (#44835)
    • TIMEOUT [expected PASS] subtest: Navigate a frame via area with javascript:-urls w/ default policy in report-only mode.

      Test timed out
      

  • OK /upgrade-insecure-requests/gen/sharedworker-module-data.meta/unset/fetch.https.html
    • FAIL [expected PASS] subtest: Upgrade-Insecure-Requests: Expects blocked for fetch to cross-http-downgrade origin and downgrade redirection from https context.

      assert_equals: The resource request should be 'blocked'. expected "blocked" but got "allowed"
      

    • FAIL [expected PASS] subtest: Upgrade-Insecure-Requests: Expects blocked for fetch to cross-http-downgrade origin and no-redirect redirection from https context.

      assert_equals: The resource request should be 'blocked'. expected "blocked" but got "allowed"
      

    • FAIL [expected PASS] subtest: Upgrade-Insecure-Requests: Expects blocked for fetch to cross-https origin and downgrade redirection from https context.

      assert_equals: The resource request should be 'blocked'. expected "blocked" but got "allowed"
      

    • FAIL [expected PASS] subtest: Upgrade-Insecure-Requests: Expects blocked for fetch to same-http-downgrade origin and downgrade redirection from https context.

      assert_equals: The resource request should be 'blocked'. expected "blocked" but got "allowed"
      

    • FAIL [expected PASS] subtest: Upgrade-Insecure-Requests: Expects blocked for fetch to same-http-downgrade origin and no-redirect redirection from https context.

      assert_equals: The resource request should be 'blocked'. expected "blocked" but got "allowed"
      

    • FAIL [expected PASS] subtest: Upgrade-Insecure-Requests: Expects blocked for fetch to same-https origin and downgrade redirection from https context.

      assert_equals: The resource request should be 'blocked'. expected "blocked" but got "allowed"
      

  • OK [expected TIMEOUT] /webstorage/localstorage-about-blank-3P-iframe-opens-3P-window.partitioned.html (#29053)
    • FAIL [expected TIMEOUT] subtest: StorageKey: test 3P about:blank window opened from a 3P iframe

      assert_true: about:blank window opened by 3P iframe does not inherit 3P iframe's StorageKey expected true got false
      

  • OK /webxr/xrSession_features_deviceSupport.https.html (#24357)
    • FAIL [expected PASS] subtest: Immersive XRSession requests with no supported device should reject

      assert_unreached: Should have rejected: undefined Reached unreachable code
      

Stable unexpected results that are known to be intermittent (14)
  • OK /beacon/beacon-basic.https.window.html (#41723)
    • PASS [expected FAIL] subtest: Payload size restriction should be accumulated: type = blob
  • ERROR [expected OK] /css/css-sizing/responsive-iframe/responsive-iframe-allow-origins.html?container=subdomain,origin=same,allowed=wildcard,expect=400 (#47268)
  • TIMEOUT /fetch/metadata/generated/css-images.sub.tentative.html (#29047)
    • TIMEOUT [expected PASS] subtest: background-image sec-fetch-site - Not sent to non-trustworthy same-origin destination

      Test timed out
      

  • OK /html/browsers/browsing-the-web/navigating-across-documents/005.html (#27062)
    • PASS [expected FAIL] subtest: Link with onclick navigation and href navigation
  • OK [expected TIMEOUT] /html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/form-requestsubmit.html (#44098)
    • FAIL [expected TIMEOUT] subtest: Replace before load, triggered by formElement.requestSubmit()

      assert_equals: expected "http://web-platform.test:8000/common/blank.html?thereplacement=" but got "http://web-platform.test:8000/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/resources/code-injector.html?pipe=sub(none)&amp;code=%0A%20%20%20%20const%20form%20%3D%20document.createElement(%22form%22)%3B%0A%20%20%20%20form.action%20%3D%20%22%2Fcommon%2Fblank.html%22%3B%0A%0A%20%20%20%20const%20input%20%3D%20document.createElement(%22input%22)%3B%0A%20%20%20%20input.type%20%3D%20%22hidden%22%3B%0A%20%20%20%20input.name%20%3D%20%22thereplacement%22%3B%0A%20%20%20%20form.append(input)%3B%0A%0A%20%20%20%20document.currentScript.before(form)%3B%0A%20%20%20%20form.requestSubmit()%3B%0A%20%20"
      

  • TIMEOUT [expected OK] /html/interaction/focus/the-autofocus-attribute/supported-elements.html (#24145)
    • TIMEOUT [expected FAIL] subtest: Element with tabindex should support autofocus

      Test timed out
      

    • NOTRUN [expected PASS] subtest: Non-HTMLElement should not support autofocus
    • NOTRUN [expected FAIL] subtest: Host element with delegatesFocus should support autofocus
    • NOTRUN [expected FAIL] subtest: Host element with delegatesFocus including no focusable descendants should be skipped
    • NOTRUN [expected FAIL] subtest: Area element should support autofocus
  • TIMEOUT /html/semantics/embedded-content/media-elements/autoplay-allowed-by-permissions-policy.https.sub.html (#46803)
    • PASS [expected TIMEOUT] subtest: Permissions-Policy header: autoplay * allows same-origin iframes.
  • TIMEOUT /html/semantics/embedded-content/media-elements/autoplay-disabled-by-permissions-policy.https.sub.html (#46012, #46804)
    • TIMEOUT [expected FAIL] subtest: Permissions-Policy header: autoplay "none" disallows same-origin iframes.

      Test timed out
      

  • OK [expected TIMEOUT] /html/semantics/embedded-content/media-elements/src_object_blob.html (#40340)
    • PASS [expected TIMEOUT] subtest: HTMLMediaElement.srcObject blob
  • TIMEOUT /html/syntax/parsing/html5lib_write.html?file=processing-instructions (#46205)
    • TIMEOUT [expected FAIL] subtest: &lt;body&gt;&lt;?v-123&gt;

      Test timed out
      

  • TIMEOUT [expected OK] /html/syntax/parsing/html5lib_write_single.html?file=processing-instructions (#46206)
    • TIMEOUT [expected PASS] subtest: &lt;body&gt;&lt;?1st-place&gt;

      Test timed out
      

  • OK /preload/prefetch-document.html (#37210)
    • FAIL [expected PASS] subtest: different-site document prefetch with 'as=document' should not be consumed

      assert_equals: expected 2 but got 1
      

  • OK /touch-events/single-tap-when-touchend-listener-use-sync-xhr.html (#41175)
    • PASS [expected FAIL] subtest: Click event should be fired when touchend opens synchronous XHR
  • OK [expected TIMEOUT] /trusted-types/trusted-types-navigation.html?31-35 (#38034)
    • PASS [expected TIMEOUT] subtest: Navigate a frame via form-submission with javascript:-urls in report-only mode.
    • PASS [expected NOTRUN] subtest: Navigate a frame via form-submission with javascript:-urls w/ default policy in report-only mode.
    • FAIL [expected NOTRUN] subtest: Navigate a window via form-submission with javascript:-urls w/ a default policy throwing an exception in enforcing mode.

      promise_test: Unhandled rejection with value: "Unexpected message received: \"No securitypolicyviolation reported!\""
      

    • FAIL [expected NOTRUN] subtest: Navigate a window via form-submission with javascript:-urls w/ a default policy throwing an exception in report-only mode.

      promise_test: Unhandled rejection with value: "Unexpected message received: \"No securitypolicyviolation reported!\""
      

    • FAIL [expected NOTRUN] subtest: Navigate a window via form-submission with javascript:-urls w/ a default policy making the URL invalid in enforcing mode.

      promise_test: Unhandled rejection with value: "Unexpected message received: \"No securitypolicyviolation reported!\""
      

Stable unexpected results (19)
  • OK /editing/run/backcolor.html
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["backcolor","#00FFFF"]] "foo[&lt;span style=background-color:tan&gt;b]ar&lt;/span&gt;baz" queryCommandValue("backcolor") after
    • PASS [expected FAIL] subtest: [["stylewithcss","false"],["backcolor","#00FFFF"]] "foo[&lt;span style=background-color:tan&gt;b]ar&lt;/span&gt;baz" queryCommandValue("backcolor") after
    • FAIL [expected PASS] subtest: [["backcolor","#00FFFF"]] "foo{&lt;span style=background-color:tan&gt;bar&lt;/span&gt;}baz" compare innerHTML

      assert_equals: Unexpected innerHTML (after normalizing inline style) expected "foo&lt;span style=\"background-color:rgb(0, 255, 255)\"&gt;bar&lt;/span&gt;baz" but got "foo&lt;span style=\"background-color:rgb(0, 255, 255)\"&gt;bar&lt;/span&gt;&lt;span style=\"background-color:rgb(0, 255, 255)\"&gt;baz&lt;/span&gt;"
      

    • FAIL [expected PASS] subtest: [["stylewithcss","false"],["backcolor","#00FFFF"]] "{ &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt; ; &lt;span contenteditable=\"false\"&gt;B&lt;/span&gt; ; &lt;span contenteditable=\"false\"&gt;C&lt;/span&gt; }" compare innerHTML

      assert_equals: Unexpected innerHTML (after normalizing inline style) expected " &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt;&lt;span style=\"background-color:rgb(0, 255, 255)\"&gt; ; &lt;/span&gt;&lt;span contenteditable=\"false\"&gt;B&lt;/span&gt;&lt;span style=\"background-color:rgb(0, 255, 255)\"&gt; ; &lt;/span&gt;&lt;span contenteditable=\"false\"&gt;C&lt;/span&gt; " but got " &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt;&lt;span style=\"background-color:rgb(0, 255, 255)\"&gt; ; &lt;/span&gt;&lt;span contenteditable=\"false\"&gt;B&lt;/span&gt;&lt;span style=\"background-color:rgb(0, 255, 255)\"&gt; ; &lt;/span&gt;&lt;span contenteditable=\"false\"&gt;C&lt;/span&gt;&lt;span style=\"background-color:rgb(0, 255, 255)\"&gt; &lt;/span&gt;"
      

  • OK /editing/run/bold.html?1001-2000
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["bold",""]] "foo[&lt;span style=\"font-weight: 400\"&gt;bar]&lt;/span&gt;baz" compare innerHTML
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["bold",""]] "foo[&lt;span style=\"font-weight: 400\"&gt;bar]&lt;/span&gt;baz" queryCommandState("bold") after
    • PASS [expected FAIL] subtest: [["stylewithcss","false"],["bold",""]] "foo[&lt;span style=\"font-weight: 400\"&gt;bar]&lt;/span&gt;baz" compare innerHTML
    • PASS [expected FAIL] subtest: [["stylewithcss","false"],["bold",""]] "foo[&lt;span style=\"font-weight: 400\"&gt;bar]&lt;/span&gt;baz" queryCommandState("bold") after
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["bold",""]] "{&lt;span style=\"font-weight: 100\"&gt;foobar]baz&lt;/span&gt;" queryCommandState("bold") after
    • PASS [expected FAIL] subtest: [["stylewithcss","false"],["bold",""]] "{&lt;span style=\"font-weight: 100\"&gt;foobar]baz&lt;/span&gt;" queryCommandState("bold") after
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["bold",""]] "{&lt;span style=\"font-weight: 400\"&gt;foobar]baz&lt;/span&gt;" queryCommandState("bold") after
    • PASS [expected FAIL] subtest: [["stylewithcss","false"],["bold",""]] "{&lt;span style=\"font-weight: 400\"&gt;foobar]baz&lt;/span&gt;" queryCommandState("bold") after
  • OK /editing/run/bold.html?2001-3000
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["bold",""]] "foo&lt;span style=\"font-weight: normal\"&gt;&lt;b&gt;{bar}&lt;/b&gt;&lt;/span&gt;baz" compare innerHTML
    • PASS [expected FAIL] subtest: [["stylewithcss","false"],["bold",""]] "foo&lt;span style=\"font-weight: normal\"&gt;&lt;b&gt;{bar}&lt;/b&gt;&lt;/span&gt;baz" compare innerHTML
  • OK /editing/run/bold.html?3001-last
    • FAIL [expected PASS] subtest: [["stylewithcss","false"],["bold",""]] "abc{&lt;i&gt;def&lt;/i&gt;}ghi" compare innerHTML

      assert_equals: Unexpected innerHTML (after normalizing inline style) expected "abc&lt;b&gt;&lt;i&gt;def&lt;/i&gt;&lt;/b&gt;ghi" but got "abc&lt;b&gt;&lt;i&gt;def&lt;/i&gt;ghi&lt;/b&gt;"
      

    • FAIL [expected PASS] subtest: [["stylewithcss","false"],["bold",""]] "{ &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt; ; &lt;span contenteditable=\"false\"&gt;B&lt;/span&gt; ; &lt;span contenteditable=\"false\"&gt;C&lt;/span&gt; }" compare innerHTML

      assert_equals: Unexpected innerHTML (after normalizing inline style) expected " &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt;&lt;b&gt; ; &lt;/b&gt;&lt;span contenteditable=\"false\"&gt;B&lt;/span&gt;&lt;b&gt; ; &lt;/b&gt;&lt;span contenteditable=\"false\"&gt;C&lt;/span&gt; " but got " &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt;&lt;b&gt; ; &lt;/b&gt;&lt;span contenteditable=\"false\"&gt;B&lt;/span&gt;&lt;b&gt; ; &lt;/b&gt;&lt;span contenteditable=\"false\"&gt;C&lt;/span&gt;&lt;b&gt; &lt;/b&gt;"
      

  • OK /editing/run/createlink.html
    • PASS [expected FAIL] subtest: [["createlink","http://www.google.com/"]] "[foo&lt;a href=http://www.google.com/&gt;bar]&lt;/a&gt;baz" compare innerHTML
    • PASS [expected FAIL] subtest: [["createlink","http://www.google.com/"]] "[foo&lt;a href=otherurl&gt;bar]&lt;/a&gt;baz" compare innerHTML
  • OK /editing/run/fontname.html?1001-2000
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["fontname","sans-serif"]] "foo&lt;tt&gt;{&lt;br&gt;&lt;/tt&gt;b]ar" queryCommandValue("fontname") after
    • PASS [expected FAIL] subtest: [["stylewithcss","false"],["fontname","sans-serif"]] "foo&lt;tt&gt;{&lt;br&gt;&lt;/tt&gt;b]ar" queryCommandValue("fontname") after
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["fontname","sans-serif"]] "foo[&lt;span style=font-family:monospace&gt;b]ar&lt;/span&gt;baz" queryCommandValue("fontname") after
    • PASS [expected FAIL] subtest: [["stylewithcss","false"],["fontname","sans-serif"]] "foo[&lt;span style=font-family:monospace&gt;b]ar&lt;/span&gt;baz" queryCommandValue("fontname") after
    • FAIL [expected PASS] subtest: [["stylewithcss","true"],["fontname","sans-serif"]] "foo{&lt;span style=font-family:monospace&gt;bar&lt;/span&gt;}baz" compare innerHTML

      assert_equals: Unexpected innerHTML (after normalizing inline style) expected "foo&lt;span style=\"font-family:sans-serif\"&gt;bar&lt;/span&gt;baz" but got "foo&lt;span style=\"font-family:sans-serif\"&gt;barbaz&lt;/span&gt;"
      

    • FAIL [expected PASS] subtest: [["stylewithcss","false"],["fontname","sans-serif"]] "foo{&lt;span style=font-family:monospace&gt;bar&lt;/span&gt;}baz" compare innerHTML

      assert_equals: Unexpected innerHTML (after normalizing inline style) expected "foo&lt;font face=\"sans-serif\"&gt;bar&lt;/font&gt;baz" but got "foo&lt;font face=\"sans-serif\"&gt;bar&lt;/font&gt;&lt;font face=\"sans-serif\"&gt;baz&lt;/font&gt;"
      

  • OK /editing/run/fontname.html?2001-last
    • FAIL [expected PASS] subtest: [["stylewithcss","false"],["fontname","sans-serif"]] "{ &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt; ; &lt;span contenteditable=\"false\"&gt;B&lt;/span&gt; ; &lt;span contenteditable=\"false\"&gt;C&lt;/span&gt; }" compare innerHTML

      assert_equals: Unexpected innerHTML (after normalizing inline style) expected " &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt;&lt;font face=\"sans-serif\"&gt; ; &lt;/font&gt;&lt;span contenteditable=\"false\"&gt;B&lt;/span&gt;&lt;font face=\"sans-serif\"&gt; ; &lt;/font&gt;&lt;span contenteditable=\"false\"&gt;C&lt;/span&gt; " but got " &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt;&lt;font face=\"sans-serif\"&gt; ; &lt;/font&gt;&lt;span contenteditable=\"false\"&gt;B&lt;/span&gt;&lt;font face=\"sans-serif\"&gt; ; &lt;/font&gt;&lt;span contenteditable=\"false\"&gt;C&lt;/span&gt;&lt;font face=\"sans-serif\"&gt; &lt;/font&gt;"
      

  • OK /editing/run/fontsize.html?2001-last
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["fontsize","4"]] "foo[&lt;font size=2&gt;b]ar&lt;/font&gt;baz" queryCommandValue("fontsize") after
    • PASS [expected FAIL] subtest: [["stylewithcss","false"],["fontsize","4"]] "foo[&lt;font size=2&gt;b]ar&lt;/font&gt;baz" queryCommandValue("fontsize") after
    • FAIL [expected PASS] subtest: [["stylewithcss","true"],["fontsize","4"]] "foo{&lt;font size=2&gt;bar&lt;/font&gt;}baz" compare innerHTML

      assert_equals: Unexpected innerHTML (after normalizing inline style) expected "foo&lt;span style=\"font-size:large\"&gt;bar&lt;/span&gt;baz" but got "foo&lt;span style=\"font-size:large\"&gt;barbaz&lt;/span&gt;"
      

    • FAIL [expected PASS] subtest: [["stylewithcss","false"],["fontsize","4"]] "foo{&lt;font size=2&gt;bar&lt;/font&gt;}baz" compare innerHTML

      assert_equals: Unexpected innerHTML (after normalizing inline style) expected "foo&lt;font size=\"4\"&gt;bar&lt;/font&gt;baz" but got "foo&lt;font size=\"4\"&gt;bar&lt;/font&gt;&lt;font size=\"4\"&gt;baz&lt;/font&gt;"
      

    • FAIL [expected PASS] subtest: [["stylewithcss","false"],["fontsize","5"]] "{ &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt; ; &lt;span contenteditable=\"false\"&gt;B&lt;/span&gt; ; &lt;span contenteditable=\"false\"&gt;C&lt;/span&gt; }" compare innerHTML

      assert_equals: Unexpected innerHTML (after normalizing inline style) expected " &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt;&lt;font size=\"5\"&gt; ; &lt;/font&gt;&lt;span contenteditable=\"false\"&gt;B&lt;/span&gt;&lt;font size=\"5\"&gt; ; &lt;/font&gt;&lt;span contenteditable=\"false\"&gt;C&lt;/span&gt; " but got " &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt;&lt;font size=\"5\"&gt; ; &lt;/font&gt;&lt;span contenteditable=\"false\"&gt;B&lt;/span&gt;&lt;font size=\"5\"&gt; ; &lt;/font&gt;&lt;span contenteditable=\"false\"&gt;C&lt;/span&gt;&lt;font size=\"5\"&gt; &lt;/font&gt;"
      

  • OK /editing/run/forecolor.html?2001-last
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["forecolor","#0000FF"]] "foo[&lt;font color=brown&gt;b]ar&lt;/font&gt;baz" queryCommandValue("forecolor") after
    • PASS [expected FAIL] subtest: [["stylewithcss","false"],["forecolor","#0000FF"]] "foo[&lt;font color=brown&gt;b]ar&lt;/font&gt;baz" queryCommandValue("forecolor") after
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["forecolor","#0000FF"]] "foo{&lt;font color=brown&gt;bar&lt;/font&gt;}baz" queryCommandValue("forecolor") after
    • PASS [expected FAIL] subtest: [["stylewithcss","false"],["forecolor","#0000FF"]] "foo{&lt;font color=brown&gt;bar&lt;/font&gt;}baz" queryCommandValue("forecolor") after
    • FAIL [expected PASS] subtest: [["stylewithcss","false"],["foreColor","#ff0000"]] "{ &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt; ; &lt;span contenteditable=\"false\"&gt;B&lt;/span&gt; ; &lt;span contenteditable=\"false\"&gt;C&lt;/span&gt; }" compare innerHTML

      assert_equals: Unexpected innerHTML (after normalizing inline style) expected " &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt;&lt;font color=\"#ff0000\"&gt; ; &lt;/font&gt;&lt;span contenteditable=\"false\"&gt;B&lt;/span&gt;&lt;font color=\"#ff0000\"&gt; ; &lt;/font&gt;&lt;span contenteditable=\"false\"&gt;C&lt;/span&gt; " but got " &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt;&lt;font color=\"#ff0000\"&gt; ; &lt;/font&gt;&lt;span contenteditable=\"false\"&gt;B&lt;/span&gt;&lt;font color=\"#ff0000\"&gt; ; &lt;/font&gt;&lt;span contenteditable=\"false\"&gt;C&lt;/span&gt;&lt;font color=\"#ff0000\"&gt; &lt;/font&gt;"
      

  • OK /editing/run/hilitecolor.html
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["hilitecolor","#00FFFF"]] "foo[&lt;span style=background-color:tan&gt;b]ar&lt;/span&gt;baz" queryCommandValue("hilitecolor") after
    • PASS [expected FAIL] subtest: [["stylewithcss","false"],["hilitecolor","#00FFFF"]] "foo[&lt;span style=background-color:tan&gt;b]ar&lt;/span&gt;baz" queryCommandValue("hilitecolor") after
    • FAIL [expected PASS] subtest: [["hilitecolor","#00FFFF"]] "foo{&lt;span style=background-color:tan&gt;bar&lt;/span&gt;}baz" compare innerHTML

      assert_equals: Unexpected innerHTML (after normalizing inline style) expected "foo&lt;span style=\"background-color:rgb(0, 255, 255)\"&gt;bar&lt;/span&gt;baz" but got "foo&lt;span style=\"background-color:rgb(0, 255, 255)\"&gt;bar&lt;/span&gt;&lt;span style=\"background-color:rgb(0, 255, 255)\"&gt;baz&lt;/span&gt;"
      

    • FAIL [expected PASS] subtest: [["stylewithcss","false"],["hilitecolor","#00FFFF"]] "{ &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt; ; &lt;span contenteditable=\"false\"&gt;B&lt;/span&gt; ; &lt;span contenteditable=\"false\"&gt;C&lt;/span&gt; }" compare innerHTML

      assert_equals: Unexpected innerHTML (after normalizing inline style) expected " &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt;&lt;span style=\"background-color:rgb(0, 255, 255)\"&gt; ; &lt;/span&gt;&lt;span contenteditable=\"false\"&gt;B&lt;/span&gt;&lt;span style=\"background-color:rgb(0, 255, 255)\"&gt; ; &lt;/span&gt;&lt;span contenteditable=\"false\"&gt;C&lt;/span&gt; " but got " &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt;&lt;span style=\"background-color:rgb(0, 255, 255)\"&gt; ; &lt;/span&gt;&lt;span contenteditable=\"false\"&gt;B&lt;/span&gt;&lt;span style=\"background-color:rgb(0, 255, 255)\"&gt; ; &lt;/span&gt;&lt;span contenteditable=\"false\"&gt;C&lt;/span&gt;&lt;span style=\"background-color:rgb(0, 255, 255)\"&gt; &lt;/span&gt;"
      

  • OK /editing/run/insertparagraph.html?1001-2000
    • FAIL [expected PASS] subtest: [["defaultparagraphseparator","div"],["insertparagraph",""]] "&lt;p&gt;foo&lt;/p&gt;{}&lt;br&gt;&lt;h1&gt;bar&lt;/h1&gt;" compare innerHTML

      assert_equals: Unexpected innerHTML (after normalizing inline style) expected "&lt;p&gt;foo&lt;/p&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;h1&gt;bar&lt;/h1&gt;" but got "&lt;p&gt;foo&lt;/p&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;h1&gt;bar&lt;/h1&gt;"
      

    • FAIL [expected PASS] subtest: [["defaultparagraphseparator","p"],["insertparagraph",""]] "&lt;p&gt;foo&lt;/p&gt;{}&lt;br&gt;&lt;h1&gt;bar&lt;/h1&gt;" compare innerHTML

      assert_equals: Unexpected innerHTML (after normalizing inline style) expected "&lt;p&gt;foo&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;h1&gt;bar&lt;/h1&gt;" but got "&lt;p&gt;foo&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;/p&gt;&lt;h1&gt;bar&lt;/h1&gt;"
      

    • FAIL [expected PASS] subtest: [["defaultparagraphseparator","div"],["insertparagraph",""]] "&lt;h1&gt;foo&lt;/h1&gt;{}&lt;br&gt;&lt;p&gt;bar&lt;/p&gt;" compare innerHTML

      assert_equals: Unexpected innerHTML (after normalizing inline style) expected "&lt;h1&gt;foo&lt;/h1&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;p&gt;bar&lt;/p&gt;" but got "&lt;h1&gt;foo&lt;/h1&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;bar&lt;/p&gt;"
      

    • FAIL [expected PASS] subtest: [["defaultparagraphseparator","p"],["insertparagraph",""]] "&lt;h1&gt;foo&lt;/h1&gt;{}&lt;br&gt;&lt;p&gt;bar&lt;/p&gt;" compare innerHTML

      assert_equals: Unexpected innerHTML (after normalizing inline style) expected "&lt;h1&gt;foo&lt;/h1&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;bar&lt;/p&gt;" but got "&lt;h1&gt;foo&lt;/h1&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;bar&lt;/p&gt;"
      

    • FAIL [expected PASS] subtest: [["defaultparagraphseparator","div"],["insertparagraph",""]] "&lt;h1&gt;foo&lt;/h1&gt;{}&lt;br&gt;&lt;h2&gt;bar&lt;/h2&gt;" compare innerHTML

      assert_equals: Unexpected innerHTML (after normalizing inline style) expected "&lt;h1&gt;foo&lt;/h1&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;h2&gt;bar&lt;/h2&gt;" but got "&lt;h1&gt;foo&lt;/h1&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2&gt;bar&lt;/h2&gt;"
      

    • FAIL [expected PASS] subtest: [["defaultparagraphseparator","p"],["insertparagraph",""]] "&lt;h1&gt;foo&lt;/h1&gt;{}&lt;br&gt;&lt;h2&gt;bar&lt;/h2&gt;" compare innerHTML

      assert_equals: Unexpected innerHTML (after normalizing inline style) expected "&lt;h1&gt;foo&lt;/h1&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;h2&gt;bar&lt;/h2&gt;" but got "&lt;h1&gt;foo&lt;/h1&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;/p&gt;&lt;h2&gt;bar&lt;/h2&gt;"
      

  • OK /editing/run/italic.html?2001-last
    • FAIL [expected PASS] subtest: [["stylewithcss","false"],["italic",""]] "{ &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt; ; &lt;span contenteditable=\"false\"&gt;B&lt;/span&gt; ; &lt;span contenteditable=\"false\"&gt;C&lt;/span&gt; }" compare innerHTML

      assert_equals: Unexpected innerHTML (after normalizing inline style) expected " &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt;&lt;i&gt; ; &lt;/i&gt;&lt;span contenteditable=\"false\"&gt;B&lt;/span&gt;&lt;i&gt; ; &lt;/i&gt;&lt;span contenteditable=\"false\"&gt;C&lt;/span&gt; " but got " &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt;&lt;i&gt; ; &lt;/i&gt;&lt;span contenteditable=\"false\"&gt;B&lt;/span&gt;&lt;i&gt; ; &lt;/i&gt;&lt;span contenteditable=\"false\"&gt;C&lt;/span&gt;&lt;i&gt; &lt;/i&gt;"
      

  • OK /editing/run/strikethrough.html?1-1000
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["strikethrough",""]] "&lt;s&gt;foo[b&lt;span style=\"color:blue\"&gt;ar]ba&lt;/span&gt;z&lt;/s&gt;" queryCommandState("strikethrough") after
    • PASS [expected FAIL] subtest: [["stylewithcss","false"],["strikethrough",""]] "&lt;s&gt;foo[b&lt;span style=\"color:blue\"&gt;ar]ba&lt;/span&gt;z&lt;/s&gt;" queryCommandState("strikethrough") after
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["strikethrough",""]] "&lt;s&gt;foo[b&lt;span style=\"color:blue\" id=foo&gt;ar]ba&lt;/span&gt;z&lt;/s&gt;" queryCommandState("strikethrough") after
    • PASS [expected FAIL] subtest: [["stylewithcss","false"],["strikethrough",""]] "&lt;s&gt;foo[b&lt;span style=\"color:blue\" id=foo&gt;ar]ba&lt;/span&gt;z&lt;/s&gt;" queryCommandState("strikethrough") after
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["strikethrough",""]] "&lt;s&gt;foo[b&lt;span style=\"font-size:3em\"&gt;ar]ba&lt;/span&gt;z&lt;/s&gt;" queryCommandState("strikethrough") after
    • PASS [expected FAIL] subtest: [["stylewithcss","false"],["strikethrough",""]] "&lt;s&gt;foo[b&lt;span style=\"font-size:3em\"&gt;ar]ba&lt;/span&gt;z&lt;/s&gt;" queryCommandState("strikethrough") after
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["strikethrough",""]] "&lt;s&gt;foo[b&lt;i&gt;ar]ba&lt;/i&gt;z&lt;/s&gt;" queryCommandState("strikethrough") after
    • PASS [expected FAIL] subtest: [["stylewithcss","false"],["strikethrough",""]] "&lt;s&gt;foo[b&lt;i&gt;ar]ba&lt;/i&gt;z&lt;/s&gt;" queryCommandState("strikethrough") after
  • OK /editing/run/strikethrough.html?1001-2000
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["strikethrough",""]] "&lt;strike&gt;foo[b&lt;span style=\"color:blue\"&gt;ar]ba&lt;/span&gt;z&lt;/strike&gt;" compare innerHTML
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["strikethrough",""]] "&lt;strike&gt;foo[b&lt;span style=\"color:blue\"&gt;ar]ba&lt;/span&gt;z&lt;/strike&gt;" queryCommandState("strikethrough") after
    • PASS [expected FAIL] subtest: [["stylewithcss","false"],["strikethrough",""]] "&lt;strike&gt;foo[b&lt;span style=\"color:blue\"&gt;ar]ba&lt;/span&gt;z&lt;/strike&gt;" compare innerHTML
    • PASS [expected FAIL] subtest: [["stylewithcss","false"],["strikethrough",""]] "&lt;strike&gt;foo[b&lt;span style=\"color:blue\"&gt;ar]ba&lt;/span&gt;z&lt;/strike&gt;" queryCommandState("strikethrough") after
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["strikethrough",""]] "&lt;strike&gt;foo[b&lt;span style=\"color:blue\" id=foo&gt;ar]ba&lt;/span&gt;z&lt;/strike&gt;" compare innerHTML
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["strikethrough",""]] "&lt;strike&gt;foo[b&lt;span style=\"color:blue\" id=foo&gt;ar]ba&lt;/span&gt;z&lt;/strike&gt;" queryCommandState("strikethrough") after
    • PASS [expected FAIL] subtest: [["stylewithcss","false"],["strikethrough",""]] "&lt;strike&gt;foo[b&lt;span style=\"color:blue\" id=foo&gt;ar]ba&lt;/span&gt;z&lt;/strike&gt;" compare innerHTML
    • PASS [expected FAIL] subtest: [["stylewithcss","false"],["strikethrough",""]] "&lt;strike&gt;foo[b&lt;span style=\"color:blue\" id=foo&gt;ar]ba&lt;/span&gt;z&lt;/strike&gt;" queryCommandState("strikethrough") after
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["strikethrough",""]] "&lt;strike&gt;foo[b&lt;span style=\"font-size:3em\"&gt;ar]ba&lt;/span&gt;z&lt;/strike&gt;" compare innerHTML
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["strikethrough",""]] "&lt;strike&gt;foo[b&lt;span style=\"font-size:3em\"&gt;ar]ba&lt;/span&gt;z&lt;/strike&gt;" queryCommandState("strikethrough") after
    • And 6 more unexpected results...
  • OK /editing/run/strikethrough.html?2001-last
    • FAIL [expected PASS] subtest: [["stylewithcss","false"],["strikethrough",""]] "{ &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt; ; &lt;span contenteditable=\"false\"&gt;B&lt;/span&gt; ; &lt;span contenteditable=\"false\"&gt;C&lt;/span&gt; }" compare innerHTML

      assert_equals: Unexpected innerHTML (after normalizing inline style) expected " &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt;&lt;strike&gt; ; &lt;/strike&gt;&lt;span contenteditable=\"false\"&gt;B&lt;/span&gt;&lt;strike&gt; ; &lt;/strike&gt;&lt;span contenteditable=\"false\"&gt;C&lt;/span&gt; " but got " &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt;&lt;strike&gt; ; &lt;/strike&gt;&lt;span contenteditable=\"false\"&gt;B&lt;/span&gt;&lt;strike&gt; ; &lt;/strike&gt;&lt;span contenteditable=\"false\"&gt;C&lt;/span&gt;&lt;strike&gt; &lt;/strike&gt;"
      

  • OK /editing/run/subscript.html
    • PASS [expected FAIL] subtest: [["subscript",""]] "fo[o&lt;sub&gt;b]ar&lt;/sub&gt;baz" compare innerHTML
    • PASS [expected FAIL] subtest: [["subscript",""]] "&lt;sub&gt;fo[o&lt;/sub&gt;&lt;sup&gt;b]ar&lt;/sup&gt;" compare innerHTML
    • FAIL [expected PASS] subtest: [["stylewithcss","false"],["subscript",""]] "{ &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt; ; &lt;span contenteditable=\"false\"&gt;B&lt;/span&gt; ; &lt;span contenteditable=\"false\"&gt;C&lt;/span&gt; }" compare innerHTML

      assert_equals: Unexpected innerHTML (after normalizing inline style) expected " &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt;&lt;sub&gt; ; &lt;/sub&gt;&lt;span contenteditable=\"false\"&gt;B&lt;/span&gt;&lt;sub&gt; ; &lt;/sub&gt;&lt;span contenteditable=\"false\"&gt;C&lt;/span&gt; " but got " &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt;&lt;sub&gt; ; &lt;/sub&gt;&lt;span contenteditable=\"false\"&gt;B&lt;/span&gt;&lt;sub&gt; ; &lt;/sub&gt;&lt;span contenteditable=\"false\"&gt;C&lt;/span&gt;&lt;sub&gt; &lt;/sub&gt;"
      

  • OK /editing/run/superscript.html
    • PASS [expected FAIL] subtest: [["superscript",""]] "fo[o&lt;sup&gt;b]ar&lt;/sup&gt;baz" compare innerHTML
    • PASS [expected FAIL] subtest: [["superscript",""]] "&lt;sup&gt;fo[o&lt;/sup&gt;&lt;sub&gt;b]ar&lt;/sub&gt;" compare innerHTML
    • FAIL [expected PASS] subtest: [["stylewithcss","false"],["superscript",""]] "{ &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt; ; &lt;span contenteditable=\"false\"&gt;B&lt;/span&gt; ; &lt;span contenteditable=\"false\"&gt;C&lt;/span&gt; }" compare innerHTML

      assert_equals: Unexpected innerHTML (after normalizing inline style) expected " &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt;&lt;sup&gt; ; &lt;/sup&gt;&lt;span contenteditable=\"false\"&gt;B&lt;/span&gt;&lt;sup&gt; ; &lt;/sup&gt;&lt;span contenteditable=\"false\"&gt;C&lt;/span&gt; " but got " &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt;&lt;sup&gt; ; &lt;/sup&gt;&lt;span contenteditable=\"false\"&gt;B&lt;/span&gt;&lt;sup&gt; ; &lt;/sup&gt;&lt;span contenteditable=\"false\"&gt;C&lt;/span&gt;&lt;sup&gt; &lt;/sup&gt;"
      

  • OK /editing/run/underline.html?1-1000
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["underline",""]] "&lt;u&gt;foo[b&lt;span style=\"color:blue\"&gt;ar]ba&lt;/span&gt;z&lt;/u&gt;" compare innerHTML
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["underline",""]] "&lt;u&gt;foo[b&lt;span style=\"color:blue\"&gt;ar]ba&lt;/span&gt;z&lt;/u&gt;" queryCommandState("underline") after
    • PASS [expected FAIL] subtest: [["stylewithcss","false"],["underline",""]] "&lt;u&gt;foo[b&lt;span style=\"color:blue\"&gt;ar]ba&lt;/span&gt;z&lt;/u&gt;" compare innerHTML
    • PASS [expected FAIL] subtest: [["stylewithcss","false"],["underline",""]] "&lt;u&gt;foo[b&lt;span style=\"color:blue\"&gt;ar]ba&lt;/span&gt;z&lt;/u&gt;" queryCommandState("underline") after
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["underline",""]] "&lt;u&gt;foo[b&lt;span style=\"color:blue\" id=foo&gt;ar]ba&lt;/span&gt;z&lt;/u&gt;" compare innerHTML
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["underline",""]] "&lt;u&gt;foo[b&lt;span style=\"color:blue\" id=foo&gt;ar]ba&lt;/span&gt;z&lt;/u&gt;" queryCommandState("underline") after
    • PASS [expected FAIL] subtest: [["stylewithcss","false"],["underline",""]] "&lt;u&gt;foo[b&lt;span style=\"color:blue\" id=foo&gt;ar]ba&lt;/span&gt;z&lt;/u&gt;" compare innerHTML
    • PASS [expected FAIL] subtest: [["stylewithcss","false"],["underline",""]] "&lt;u&gt;foo[b&lt;span style=\"color:blue\" id=foo&gt;ar]ba&lt;/span&gt;z&lt;/u&gt;" queryCommandState("underline") after
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["underline",""]] "&lt;u&gt;foo[b&lt;span style=\"font-size:3em\"&gt;ar]ba&lt;/span&gt;z&lt;/u&gt;" compare innerHTML
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["underline",""]] "&lt;u&gt;foo[b&lt;span style=\"font-size:3em\"&gt;ar]ba&lt;/span&gt;z&lt;/u&gt;" queryCommandState("underline") after
    • And 6 more unexpected results...
  • OK /editing/run/underline.html?2001-last
    • PASS [expected FAIL] subtest: [["stylewithcss","true"],["underline",""]] "&lt;ins&gt;fo[o&lt;/ins&gt;&lt;u&gt;b]ar&lt;/u&gt;" queryCommandState("underline") after
    • PASS [expected FAIL] subtest: [["stylewithcss","false"],["underline",""]] "&lt;ins&gt;fo[o&lt;/ins&gt;&lt;u&gt;b]ar&lt;/u&gt;" queryCommandState("underline") after
    • FAIL [expected PASS] subtest: [["stylewithcss","false"],["underline",""]] "{ &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt; ; &lt;span contenteditable=\"false\"&gt;B&lt;/span&gt; ; &lt;span contenteditable=\"false\"&gt;C&lt;/span&gt; }" compare innerHTML

      assert_equals: Unexpected innerHTML (after normalizing inline style) expected " &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt;&lt;u&gt; ; &lt;/u&gt;&lt;span contenteditable=\"false\"&gt;B&lt;/span&gt;&lt;u&gt; ; &lt;/u&gt;&lt;span contenteditable=\"false\"&gt;C&lt;/span&gt; " but got " &lt;span contenteditable=\"false\"&gt;A&lt;/span&gt;&lt;u&gt; ; &lt;/u&gt;&lt;span contenteditable=\"false\"&gt;B&lt;/span&gt;&lt;u&gt; ; &lt;/u&gt;&lt;span contenteditable=\"false\"&gt;C&lt;/span&gt;&lt;u&gt; &lt;/u&gt;"
      

@github-actions

Copy link
Copy Markdown

⚠️ Try run (#32361340553) failed!

@TimvdLippe TimvdLippe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Those test results generally look like they improve the status quo. It's often that with fixes, test results flip. Therefore we generally look if things move in the right direction. There are some tests that pass now that I would expect to pass as well, which is why I think this is the correct change to make. Thanks for tackling!

@servo-highfive servo-highfive removed the S-awaiting-review There is new code that needs to be reviewed. label Aug 20, 2026
@mrobinson

Copy link
Copy Markdown
Member Author

@TimvdLippe Thanks for the review. I'm digging into the failures now and will land this if they end up being unrelated, but it may turn out that they are a similar issue that is worth fixing in this commit. In that case I'll add a new commit and post here.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Signed-off-by: Martin Robinson <mrobinson@igalia.com>
@servo-highfive servo-highfive added the S-awaiting-review There is new code that needs to be reviewed. label Aug 20, 2026
@mrobinson

Copy link
Copy Markdown
Member Author

I fixed one inverted condition and the amount of failing newly failing subtests has greatly decreased (still much less than the number of newly passing ones).

@mrobinson mrobinson added the T-linux-wpt Do a try run of the WPT label Aug 20, 2026
@github-actions github-actions Bot removed the T-linux-wpt Do a try run of the WPT label Aug 20, 2026
@github-actions

Copy link
Copy Markdown

🔨 Triggering try run (#32367571804) for Linux (WPT)

@servo-wpt-sync

Copy link
Copy Markdown
Collaborator

📝 Transplanted new upstreamable changes to existing upstream WPT pull request (web-platform-tests/wpt#62082).

@github-actions

Copy link
Copy Markdown

Test results for linux-wpt from try job (#32367571804):

Flaky unexpected result (41)
  • FAIL [expected PASS] /_mozilla/css/image-percentage-dimen.html
  • TIMEOUT [expected OK] /_webgl/conformance2/state/gl-object-get-calls.html
  • TIMEOUT [expected OK] /content-security-policy/navigation/to-javascript-parent-initiated-parent-csp.html (#46400)
    • TIMEOUT [expected PASS] subtest: Should not have executed the javascript url for area[target=iframe].href

      Test timed out
      

    • NOTRUN [expected PASS] subtest: Should not have executed the javascript url for area[target=otherTab].href
    • NOTRUN [expected PASS] subtest: Should not have executed the javascript url for a[target=otherTab].href
    • NOTRUN [expected PASS] subtest: Should not have executed the javascript url for a[target=iframe].href
  • TIMEOUT [expected OK] /cookies/attributes/domain.sub.html
    • TIMEOUT [expected PASS] subtest: Return cookie with valid domain after domain with single dot ('.') value.

      Test timed out
      

    • NOTRUN [expected FAIL] subtest: Empty domain treated as host cookie 1
    • NOTRUN [expected FAIL] subtest: Empty domain treated as host cookie 2
    • NOTRUN [expected PASS] subtest: Empty domain treated as host cookie 3
    • NOTRUN [expected PASS] subtest: No host cookies returned for host cookies after non-host redirect 1
    • NOTRUN [expected PASS] subtest: No host cookies returned for host cookies after non-host redirect 2
    • NOTRUN [expected PASS] subtest: No host cookies returned for host cookies after non-host redirect 3
  • OK /cookies/partitioned-cookies/partitioned-cookies-samesite-attribute.https.html (#45255)
    • FAIL [expected PASS] subtest: In embedded cross-site contexts, partitioned cookies can only be set with explicit SameSite=None

      assert_equals: expected 0 but got 3
      

  • FAIL [expected PASS] /css/css-sizing/dynamic-available-size-iframe.html (#45763)
  • FAIL [expected PASS] /css/css-text-decor/text-underline-position-from-font-variable.html (#45615)
  • TIMEOUT [expected OK] /dom/nodes/NodeList-static-length-getter-tampered-indexOf-3.html
  • TIMEOUT [expected OK] /fetch/content-encoding/br/big-br-body.https.any.worker.html
    • TIMEOUT [expected PASS] subtest: large br data should be decompressed successfully

      Test timed out
      

    • NOTRUN [expected FAIL] subtest: large br data should be decompressed successfully with byte stream
  • TIMEOUT [expected OK] /fetch/content-encoding/gzip/big-gzip-body.https.any.worker.html
    • TIMEOUT [expected PASS] subtest: large gzip data should be decompressed successfully

      Test timed out
      

    • NOTRUN [expected FAIL] subtest: large gzip data should be decompressed successfully with byte stream
  • TIMEOUT [expected OK] /fetch/content-encoding/zstd/big-window-zstd-body.tentative.https.any.worker.html
    • TIMEOUT [expected FAIL] subtest: Consuming the body of a resource with too large of a zstd window size should reject

      Test timed out
      

  • TIMEOUT [expected OK] /fetch/content-encoding/zstd/big-zstd-body.https.any.html
  • TIMEOUT [expected OK] /fetch/content-encoding/zstd/big-zstd-body.https.any.worker.html
    • TIMEOUT [expected PASS] subtest: large zstd data should be decompressed successfully

      Test timed out
      

    • NOTRUN [expected FAIL] subtest: large zstd data should be decompressed successfully with byte stream
  • OK [expected ERROR] /fetch/fetch-later/quota/same-origin-iframe/multiple-iframes.https.window.html (#35176)
  • ERROR [expected TIMEOUT] /html/browsers/browsing-the-web/history-traversal/pageswap/pageswap-initial-navigation.html (#40387)
  • OK /html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin-fragment.html (#20768)
    • PASS [expected FAIL] subtest: Tests that a fragment navigation in the unload handler will not block the initial navigation
  • TIMEOUT /html/browsers/history/the-history-interface/001.html (#12580)
    • PASS [expected FAIL] subtest: traversing history must also traverse hash changes
  • CRASH [expected ERROR] /html/browsers/history/the-location-interface/location_replace_session_history.html (#41896)
  • OK /html/semantics/embedded-content/media-elements/audio_loop_seek_to_eos.html (#41226)
    • FAIL [expected PASS] subtest: seeking to the end of looping audio

      promise_test: Unhandled rejection with value: object "TypeError: this argument is not a finite floating-point value"
      

  • TIMEOUT /html/semantics/embedded-content/media-elements/autoplay-allowed-by-permissions-policy.https.sub.html (#46803)
    • PASS [expected TIMEOUT] subtest: Permissions-Policy header: autoplay * allows same-origin iframes.
  • OK /html/semantics/embedded-content/media-elements/media_fragment_seek.html (#24114)
    • FAIL [expected PASS] subtest: Video should seek to time specified in media fragment syntax

      assert_equals: expected 3 but got 0
      

  • OK /html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-reload-location-reload.html (#32595)
    • FAIL [expected PASS] subtest: Reloading iframe loading='lazy' before it is loaded: location.reload

      uncaught exception: Error: assert_equals: expected "http://web-platform.test:8000/html/semantics/embedded-content/the-iframe-element/support/blank.htm?src" but got "about:blank"
      

  • TIMEOUT [expected OK] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigate_other_frame_popup.sub.html (#39702)
    • TIMEOUT [expected FAIL] subtest: Sandboxed iframe can not navigate other frame's popup

      Test timed out
      

  • TIMEOUT [expected OK] /html/syntax/parsing/html5lib_write.html?file=template
    • TIMEOUT [expected PASS] subtest: &lt;body&gt;&lt;template&gt;Hello&lt;/template&gt;

      Test timed out
      

    • TIMEOUT [expected PASS] subtest: &lt;template&gt;Hello&lt;/template&gt;

      Test timed out
      

    • TIMEOUT [expected PASS] subtest: &lt;template&gt;&lt;/template&gt;&lt;div&gt;&lt;/div&gt;

      Test timed out
      

    • TIMEOUT [expected PASS] subtest: &lt;html&gt;&lt;template&gt;Hello&lt;/template&gt;

      Test timed out
      

    • TIMEOUT [expected PASS] subtest: &lt;head&gt;&lt;template&gt;&lt;div&gt;&lt;/div&gt;&lt;/template&gt;&lt;/head&gt;

      Test timed out
      

    • TIMEOUT [expected PASS] subtest: &lt;div&gt;&lt;template&gt;&lt;div&gt;&lt;span&gt;&lt;/template&gt;&lt;b&gt;

      Test timed out
      

    • TIMEOUT [expected PASS] subtest: &lt;div&gt;&lt;template&gt;&lt;/div&gt;Hello

      Test timed out
      

    • TIMEOUT [expected PASS] subtest: &lt;div&gt;&lt;/template&gt;&lt;/div&gt;

      Test timed out
      

    • NOTRUN [expected PASS] subtest: &lt;table&gt;&lt;template&gt;&lt;/template&gt;&lt;/table&gt;
    • NOTRUN [expected PASS] subtest: &lt;table&gt;&lt;template&gt;&lt;/template&gt;&lt;/div&gt;
    • And 101 more unexpected results...
  • TIMEOUT [expected OK] /html/syntax/parsing/html5lib_write_single.html?file=processing-instructions (#46206)
    • TIMEOUT [expected FAIL] subtest: &lt;body&gt;&lt;?v-123&gt;

      Test timed out
      

    • TIMEOUT [expected FAIL] subtest: &lt;html&gt;&lt;?something&gt;&lt;head&gt;

      Test timed out
      

  • TIMEOUT [expected OK] /html/user-activation/navigation-state-reset-sameorigin.html (#45151)
    • TIMEOUT [expected FAIL] subtest: Post-navigation state reset.

      Test timed out
      

  • OK [expected TIMEOUT] /infrastructure/testdriver/click_nested.html (#43887)
    • FAIL [expected NOTRUN] subtest: TestDriver click method with multiple windows and nested iframe

      can't access property "document", child.frames[2] is undefined
      

  • ERROR [expected OK] /intersection-observer/v2/animated-opacity.html (#40827)
  • TIMEOUT [expected OK] /pointerevents/compat/pointerevent_touch-action_two-finger_interaction.html (#44693)
    • NOTRUN [expected PASS] subtest: touch two-finger pan on 'touch-action: pan-x pan-y'
    • NOTRUN [expected FAIL] subtest: touch two-finger pan on 'touch-action: pinch-zoom'
  • OK /pointerevents/compat/pointerevent_touch_target_after_pointerdown_target_removed.tentative.html (#42813)
    • PASS [expected FAIL] subtest: After a pointerdown listener moves the target to different position, touch events should be fired on the pointerdown target, but pointer events should be fired on the pointerdown target parent
    • PASS [expected FAIL] subtest: After a pointerdown listener moves the target to different position, touchmove event should be fired on the pointerdown target parent
  • OK /pointerevents/pointerevent_pointercapture_in_frame.html?pen (#45536)
    • FAIL [expected PASS] subtest: Test penpointer capture in same-origin frame: Pointer down at inner frame and set pointer capture to outer frame should not capture.

      assert_array_equals: Received events: innerFrame received pointerdown,innerFrame received pointermove,innerFrame received pointerup,innerFrame received lostpointercapture lengths differ, expected array ["innerFrame received pointerdown", "innerFrame received pointermove", "innerFrame received pointerup"] length 3, got ["innerFrame received pointerdown", "innerFrame received pointermove", "innerFrame received pointerup", "innerFrame received lostpointercapture"] length 4
      

  • OK /preload/prefetch-document.html (#37210)
    • FAIL [expected PASS] subtest: different-site document prefetch with 'as=document' should not be consumed

      assert_equals: expected 2 but got 1
      

  • OK /resource-timing/buffer-full-then-increased.html (#44408)
    • FAIL [expected PASS] subtest: Test that overflowing the buffer and immediately increasing its limit does not trigger the resourcetimingbufferfull event

      assert_equals: Number of entries does not match the expected value. expected 3 but got 1
      

  • OK /touch-events/hover-state-caused-by-compatibility-mouse-events.tentative.html (#46277)
    • PASS [expected FAIL] subtest: The compatibility mouse events should set :hover: The compatibility mouse events should be fired
    • PASS [expected FAIL] subtest: The compatibility mouse events should set :hover, but shouldn't be preserved after the target is replaced: The compatibility mouse events should be fired
  • OK /touch-events/mouseevents-after-touchend.tentative.html (#46497)
    • PASS [expected FAIL] subtest: Single tap should cause a click
    • PASS [expected FAIL] subtest: Tapping too far points should not cause a dblclick
  • OK /touch-events/single-tap-when-touchend-listener-use-sync-xhr.html (#41175)
    • PASS [expected FAIL] subtest: Click event should be fired when touchend opens synchronous XHR
  • CRASH [expected OK] /trusted-types/TrustedTypePolicyFactory-createPolicy-unenforced.html
  • TIMEOUT /trusted-types/trusted-types-navigation.html?06-10 (#37920)
    • FAIL [expected PASS] subtest: Navigate a frame via anchor with javascript:-urls in report-only mode.

      promise_test: Unhandled rejection with value: "Unexpected message received: \"No securitypolicyviolation reported!\""
      

  • OK /upgrade-insecure-requests/gen/sharedworker-classic-data.meta/upgrade/websocket.https.html
    • FAIL [expected PASS] subtest: Upgrade-Insecure-Requests: Expects allowed for websocket to cross-ws-downgrade origin and no-redirect redirection from https context.

      assert_equals: The resource request should be 'allowed'. expected "allowed" but got "blocked"
      

    • FAIL [expected PASS] subtest: Upgrade-Insecure-Requests: Expects allowed for websocket to same-ws-downgrade origin and no-redirect redirection from https context.

      assert_equals: The resource request should be 'allowed'. expected "allowed" but got "blocked"
      

  • OK /user-timing/measure_associated_with_navigation_timing.html (#47273)
    • FAIL [expected PASS] subtest: loadTime plus loadEventEnd to a mark "a" should equal to navigationStart to "a".

      assert_equals: loadTime plus loadEventEnd to a mark "a" should equal to navigationStart to "a". expected 18.71 but got 18.709999999999997
      

  • OK /webdriver/tests/classic/find_element/user_prompts.py
    • FAIL [expected PASS] subtest: test_accept[alert-None]

      webdriver.error.ScriptTimeoutException: script timeout (500)
      

Stable unexpected results that are known to be intermittent (13)
  • OK /_webgl/conformance/textures/misc/texture-upload-size.html (#21770)
    • FAIL [expected PASS] subtest: WebGL test #45

      assert_true: Texture was smaller than the expected size 2x2 expected true got false
      

    • FAIL [expected PASS] subtest: WebGL test #47

      assert_true: getError expected: INVALID_VALUE. Was NO_ERROR : when calling texSubImage2D with the same texture upload with offset 1, 1 expected true got false
      

    • FAIL [expected PASS] subtest: WebGL test #49

      assert_true: Texture was smaller than the expected size 2x2 expected true got false
      

    • FAIL [expected PASS] subtest: WebGL test #51

      assert_true: getError expected: INVALID_VALUE. Was NO_ERROR : when calling texSubImage2D with the same texture upload with offset 1, 1 expected true got false
      

    • PASS [expected FAIL] subtest: WebGL test #53
    • PASS [expected FAIL] subtest: WebGL test #55
    • PASS [expected FAIL] subtest: WebGL test #57
    • PASS [expected FAIL] subtest: WebGL test #59
    • FAIL [expected PASS] subtest: WebGL test #61

      assert_true: Texture was smaller than the expected size 2x2 expected true got false
      

    • FAIL [expected PASS] subtest: WebGL test #63

      assert_true: getError expected: INVALID_VALUE. Was NO_ERROR : when calling texSubImage2D with the same texture upload with offset 1, 1 expected true got false
      

    • And 10 more unexpected results...
  • OK /beacon/beacon-basic.https.window.html (#41723)
    • FAIL [expected PASS] subtest: Payload size restriction should be accumulated: type = arraybuffer

      assert_false: expected false got true
      

    • PASS [expected FAIL] subtest: Payload size restriction should be accumulated: type = blob
  • OK /css/css-fonts/variations/at-font-face-font-matching.html (#20684)
    • FAIL [expected PASS] subtest: Matching font-style: 'oblique 0deg' should prefer 'oblique 5deg' over 'oblique 15deg 20deg'

      assert_equals: Unexpected font on test element expected 487 but got 532
      

  • ERROR [expected OK] /css/css-sizing/responsive-iframe/responsive-iframe-allow-origins.html?container=subdomain,origin=same,allowed=wildcard,expect=400 (#47268)
  • TIMEOUT /fetch/metadata/generated/css-images.sub.tentative.html (#29047)
    • FAIL [expected PASS] subtest: content sec-fetch-site - HTTPS downgrade-upgrade

      assert_unreached: Reached unreachable code
      

  • OK [expected ERROR] /focus/focus-event-after-switching-iframes.sub.html (#40368)
  • TIMEOUT /html/semantics/embedded-content/media-elements/autoplay-disabled-by-permissions-policy.https.sub.html (#46012, #46804)
    • TIMEOUT [expected FAIL] subtest: Permissions-Policy header: autoplay "none" disallows same-origin iframes.

      Test timed out
      

  • TIMEOUT /html/syntax/parsing/html5lib_write.html?file=processing-instructions (#46205)
    • TIMEOUT [expected FAIL] subtest: &lt;body&gt;&lt;?user_name data&gt;

      Test timed out
      

    • TIMEOUT [expected FAIL] subtest: &lt;body&gt;&lt;?S_S-S_S&gt;

      Test timed out
      

  • TIMEOUT [expected OK] /largest-contentful-paint/performance-entry-sequence.html (#47373)
    • TIMEOUT [expected PASS] subtest: Exactly one LargestContentfulPaint entry is emitted per frame when a new candidate is rendered

      Test timed out
      

  • OK /resource-timing/test_resource_timing.https.html (#25216)
    • PASS [expected FAIL] subtest: PerformanceEntry has correct name, initiatorType, startTime, and duration (xmlhttprequest)
  • TIMEOUT [expected OK] /trusted-types/trusted-types-navigation.html?16-20 (#44835)
    • TIMEOUT [expected PASS] subtest: Navigate a frame via area with javascript:-urls w/ default policy in enforcing mode.

      Test timed out
      

    • NOTRUN [expected FAIL] subtest: Navigate a frame via area with javascript:-urls in report-only mode.
    • NOTRUN [expected PASS] subtest: Navigate a frame via area with javascript:-urls w/ default policy in report-only mode.
  • OK [expected TIMEOUT] /trusted-types/trusted-types-navigation.html?31-35 (#38034)
    • PASS [expected TIMEOUT] subtest: Navigate a frame via form-submission with javascript:-urls in report-only mode.
    • PASS [expected NOTRUN] subtest: Navigate a frame via form-submission with javascript:-urls w/ default policy in report-only mode.
    • FAIL [expected NOTRUN] subtest: Navigate a window via form-submission with javascript:-urls w/ a default policy throwing an exception in enforcing mode.

      promise_test: Unhandled rejection with value: "Unexpected message received: \"No securitypolicyviolation reported!\""
      

    • FAIL [expected NOTRUN] subtest: Navigate a window via form-submission with javascript:-urls w/ a default policy throwing an exception in report-only mode.

      promise_test: Unhandled rejection with value: "Unexpected message received: \"No securitypolicyviolation reported!\""
      

    • FAIL [expected NOTRUN] subtest: Navigate a window via form-submission with javascript:-urls w/ a default policy making the URL invalid in enforcing mode.

      promise_test: Unhandled rejection with value: "Unexpected message received: \"No securitypolicyviolation reported!\""
      

  • OK /visual-viewport/resize-event-order.html (#41981)
    • PASS [expected FAIL] subtest: Popup: DOMWindow resize fired before VisualViewport.
Stable unexpected results (1)
  • TIMEOUT [expected OK] /html/interaction/focus/the-autofocus-attribute/supported-elements.html
    • TIMEOUT [expected FAIL] subtest: Host element with delegatesFocus including no focusable descendants should be skipped

      Test timed out
      

    • NOTRUN [expected FAIL] subtest: Area element should support autofocus

@github-actions

Copy link
Copy Markdown

⚠️ Try run (#32367571804) failed!

@mrobinson
mrobinson added this pull request to the merge queue Aug 20, 2026
@servo-highfive servo-highfive added the S-awaiting-merge The PR is in the process of compiling and running tests on the automated CI. label Aug 20, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Aug 20, 2026
@servo-highfive servo-highfive removed the S-awaiting-merge The PR is in the process of compiling and running tests on the automated CI. label Aug 20, 2026
@servo-highfive servo-highfive added the S-tests-failed The changes caused existing tests to fail. label Aug 20, 2026
@mrobinson
mrobinson added this pull request to the merge queue Aug 20, 2026
@servo-highfive servo-highfive added S-awaiting-merge The PR is in the process of compiling and running tests on the automated CI. and removed S-tests-failed The changes caused existing tests to fail. labels Aug 20, 2026
Merged via the queue into servo:main with commit e3ce86a Aug 20, 2026
80 of 82 checks passed
@mrobinson
mrobinson deleted the do-not-double-apply-live-range-update branch August 20, 2026 20:24
@servo-highfive servo-highfive removed the S-awaiting-merge The PR is in the process of compiling and running tests on the automated CI. label Aug 20, 2026
RichardTjokroutomo pushed a commit to RichardTjokroutomo/servo that referenced this pull request Oct 6, 2026
…itable` node movement (servo#47393)

The editing specification has a different way of updating selection
ranges than the typical live range update method in the `insert` and
`remove` algorithms. Because selections are currently represented as
live ranges (something that will change soon), this means that the
adjustment was being applied twice: once by the live range update and
then once by the `contenteditable` code's range fixup. This change makes
it so that the `contenteditable` fixup runs against the original
selection boundaries, meaning that the final fixup is done only once.

Testing: This change adds a WPT crash test.
Fixes: servo#47333.

---------

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-awaiting-review There is new code that needs to be reviewed.

Projects

None yet

4 participants