Skip to content

script: Add initial implementation of underline command#44194

Merged
TimvdLippe merged 3 commits into
servo:mainfrom
TimvdLippe:initial-underline-implementation
Apr 14, 2026
Merged

script: Add initial implementation of underline command#44194
TimvdLippe merged 3 commits into
servo:mainfrom
TimvdLippe:initial-underline-implementation

Conversation

@TimvdLippe

Copy link
Copy Markdown
Contributor

This puts in most of the required machinery for underline. There are still remaining test failures, but tackling these in separate PR's to keep things manageable.

Part of #25005

Testing: WPT

This puts in most of the required machinery for underline.
There are still remaining test failures, but tackling
these in separate PR's to keep things manageable.

Part of servo#25005

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
@TimvdLippe TimvdLippe requested a review from gterzian as a code owner April 14, 2026 06:59
@TimvdLippe TimvdLippe added the T-linux-wpt Do a try run of the WPT label Apr 14, 2026
@servo-highfive servo-highfive added the S-awaiting-review There is new code that needs to be reviewed. label Apr 14, 2026
@github-actions github-actions Bot removed the T-linux-wpt Do a try run of the WPT label Apr 14, 2026
@github-actions

Copy link
Copy Markdown

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

Signed-off-by: Tim van der Lippe <TimvdLippe@users.noreply.github.com>
@servo-highfive servo-highfive removed the S-awaiting-review There is new code that needs to be reviewed. label Apr 14, 2026
@github-actions

Copy link
Copy Markdown

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

Flaky unexpected result (40)
  • OK /_mozilla/css/offset_properties_inline.html (#40543)
    • FAIL [expected PASS] subtest: offsetTop

      assert_equals: offsetTop of #inline-1 should be 0. expected 0 but got -1
      

    • FAIL [expected PASS] subtest: offsetLeft

      assert_equals: offsetLeft of #inline-2 should be 40. expected 40 but got 25
      

  • TIMEOUT [expected OK] /credential-management/credentialscontainer-frame-basics.https.html (#39430)
    • TIMEOUT [expected FAIL] subtest: navigator.credentials should be undefined in documents generated from data: URLs.

      Test timed out
      

  • FAIL [expected PASS] /css/css-backgrounds/background-size-041.html
  • FAIL [expected PASS] /css/css-ui/appearance-menulist-button-001.html
  • CRASH [expected OK] /fetch/api/headers/headers-no-cors.any.worker.html
  • CRASH [expected OK] /fetch/http-cache/freshness.any.worker.html
  • TIMEOUT /fetch/metadata/generated/css-images.sub.tentative.html (#29047)
    • FAIL [expected PASS] subtest: content sec-fetch-dest - Not sent to non-trustworthy cross-site destination

      assert_unreached: Reached unreachable code
      

  • TIMEOUT [expected OK] /fetch/metadata/generated/element-video.sub.html
    • TIMEOUT [expected PASS] subtest: sec-fetch-site - Not sent to non-trustworthy same-origin destination, no attributes

      Test timed out
      

    • NOTRUN [expected PASS] subtest: sec-fetch-site - Not sent to non-trustworthy same-site destination, no attributes
    • NOTRUN [expected PASS] subtest: sec-fetch-site - Not sent to non-trustworthy cross-site destination, no attributes
    • NOTRUN [expected PASS] subtest: sec-fetch-mode - Not sent to non-trustworthy same-origin destination, no attributes
    • NOTRUN [expected PASS] subtest: sec-fetch-mode - Not sent to non-trustworthy same-site destination, no attributes
    • NOTRUN [expected PASS] subtest: sec-fetch-mode - Not sent to non-trustworthy cross-site destination, no attributes
    • NOTRUN [expected PASS] subtest: sec-fetch-dest - Not sent to non-trustworthy same-origin destination, no attributes
    • NOTRUN [expected PASS] subtest: sec-fetch-dest - Not sent to non-trustworthy same-site destination, no attributes
    • NOTRUN [expected PASS] subtest: sec-fetch-dest - Not sent to non-trustworthy cross-site destination, no attributes
    • NOTRUN [expected PASS] subtest: sec-fetch-user - Not sent to non-trustworthy same-origin destination, no attributes
    • And 8 more unexpected results...
  • OK /fetch/metadata/window-open.https.sub.html (#40339)
    • FAIL [expected PASS] subtest: Same-site window, forced, reloaded

      The operation is insecure.
      

  • CRASH [expected OK] /html/anonymous-iframe/worker-cookies.tentative.https.window.html?worker=dedicated_worker
  • TIMEOUT [expected ERROR] /html/browsers/browsing-the-web/history-traversal/pageswap/pageswap-initial-navigation.html (#40387)
  • OK /html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-window-open.html (#28691)
    • FAIL [expected PASS] subtest: load event does not fire on window.open('about:blank')

      assert_unreached: load should not be fired Reached unreachable code
      

  • 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 [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"
      

  • ERROR [expected OK] /html/canvas/offscreen/text/2d.text.measure.getActualBoundingBox.tentative.html (#43710)
  • CRASH [expected TIMEOUT] /html/editing/dnd/images/013.xhtml
  • TIMEOUT [expected OK] /html/interaction/focus/the-autofocus-attribute/document-with-fragment-nonexistent.html (#28259)
    • TIMEOUT [expected FAIL] subtest: Autofocus elements in top-level browsing context's documents with non-existent fragments should work.

      Test timed out
      

  • OK /html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-1.html (#39694)
    • FAIL [expected PASS] subtest: Meta refresh is blocked by the allow-scripts sandbox flag at its creation time, not when refresh comes due

      uncaught exception: Error: assert_unreached: The iframe from which the meta came from must not refresh Reached unreachable code
      

  • 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-nav-location-assign.html (#32863)
    • FAIL [expected PASS] subtest: Navigating iframe loading='lazy' before it is loaded: location.assign

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

  • 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/embedded-content/the-iframe-element/sandbox-top-navigation-child-cross-origin-frame.tentative.sub.window.html
    • TIMEOUT [expected FAIL] subtest: A cross-origin frame with frame sandbox flags can navigate top

      Test timed out
      

  • OK [expected TIMEOUT] /html/semantics/embedded-content/the-video-element/video_timeupdate_on_seek.html
    • PASS [expected TIMEOUT] subtest: timeupdate is emitted after a seek before the data is received: webm.
  • 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.
  • OK /html/semantics/scripting-1/the-script-element/module/choice-of-error-1.html (#44058)
    • PASS [expected FAIL] subtest: Parse errors in different files should be reported depending on different roots
  • TIMEOUT [expected OK] /html/user-activation/navigation-state-reset-sameorigin.html
    • TIMEOUT [expected PASS] subtest: Post-navigation state reset.

      Test timed out
      

  • CRASH [expected OK] /html/webappapis/timers/cleartimeout-clearinterval.any.worker.html
  • TIMEOUT [expected OK] /infrastructure/testdriver/click_nested.html (#43887)
    • NOTRUN [expected FAIL] subtest: TestDriver click method with multiple windows and nested iframe
  • ERROR /service-workers/idlharness.https.any.html (#36250)
    • PASS [expected TIMEOUT] subtest: ServiceWorkerContainer interface: operation register((TrustedScriptURL or USVString), optional RegistrationOptions)
    • PASS [expected TIMEOUT] subtest: NavigationPreloadManager interface: operation enable()
    • PASS [expected TIMEOUT] subtest: NavigationPreloadManager interface: operation disable()
    • PASS [expected TIMEOUT] subtest: NavigationPreloadManager interface: operation setHeaderValue(ByteString)
    • PASS [expected TIMEOUT] subtest: NavigationPreloadManager interface: operation getState()
  • 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
  • TIMEOUT /trusted-types/trusted-types-navigation.html?06-10 (#37920)
    • PASS [expected FAIL] subtest: Navigate a frame via anchor with javascript:-urls 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 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.
  • OK /wasm/webapi/abort.any.html (#39966)
    • FAIL [expected PASS] subtest: instantiateStreaming() asynchronously racing with abort should succeed or reject with AbortError

      assert_equals: expected "AbortError" but got "CompileError"
      

  • OK /webdriver/tests/classic/accept_alert/accept.py (#43194)
    • FAIL [expected PASS] subtest: test_accept_in_popup_window

      AssertionError: no such alert (404): No user prompt is currently active.
      

  • OK /webdriver/tests/classic/execute_script/window.py
    • FAIL [expected PASS] subtest: test_web_reference[frame]

      AssertionError: no such window (404): No such window
      

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

      webdriver.error.NoSuchWindowException: no such window (404): No such window
      

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

      webdriver.error.NoSuchWindowException: no such window (404): No such window
      

  • OK [expected ERROR] /webxr/render_state_update.https.html (#27535)
  • OK /xhr/send-redirect.htm (#32026)
    • FAIL [expected PASS] subtest: XMLHttpRequest: send() - Redirects (basics) (303, GET, content.py)

      assert_equals: expected (string) "GET" but got (object) null
      

Stable unexpected results that are known to be intermittent (21)
  • OK /IndexedDB/idbdatabase_deleteObjectStore.any.html (#43823)
    • PASS [expected FAIL] subtest: Deleted object store's name should be removed from database's list. Attempting to use a deleted IDBObjectStore should throw an InvalidStateError
  • FAIL [expected PASS] /_mozilla/mozilla/sslfail.html (#10760)
  • TIMEOUT [expected OK] /_mozilla/mozilla/window_resize_event.html (#36741)
    • TIMEOUT [expected PASS] subtest: Popup onresize event fires after resizeTo

      Test timed out
      

  • OK /css/css-cascade/layer-font-face-override.html (#35935)
    • PASS [expected FAIL] subtest: @font-face override update with appended sheet 1
    • PASS [expected FAIL] subtest: @font-face override update with appended sheet 2
  • OK /css/css-fonts/generic-family-keywords-001.html (#37467)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(kai)
  • OK /css/css-fonts/generic-family-keywords-003.html (#38994)
    • FAIL [expected PASS] subtest: @font-face matching for quoted and unquoted serif (drawing text in a canvas)

      assert_equals: quoted serif matches  @font-face rule expected 40 but got 125
      

    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted sans-serif (drawing text in a canvas)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted cursive (drawing text in a canvas)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted monospace (drawing text in a canvas)
    • FAIL [expected PASS] subtest: @font-face matching for quoted and unquoted system-ui (drawing text in a canvas)

      assert_equals: quoted system-ui matches  @font-face rule expected 40 but got 125
      

    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted math (drawing text in a canvas)
    • FAIL [expected PASS] subtest: @font-face matching for quoted and unquoted generic(fangsong) (drawing text in a canvas)

      assert_equals: quoted generic(fangsong) matches  @font-face rule expected 40 but got 125
      

    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(kai) (drawing text in a canvas)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted ui-rounded (drawing text in a canvas)
  • TIMEOUT /fetch/metadata/generated/css-images.https.sub.tentative.html (#42229)
    • FAIL [expected PASS] subtest: content sec-fetch-site - Same-Origin -&gt; Same Origin

      assert_unreached: Reached unreachable code
      

  • ERROR [expected OK] /focus/focus-event-after-switching-iframes.sub.html (#40368)
  • OK /html/browsers/history/the-history-interface/traverse_the_history_2.html (#21383)
    • PASS [expected FAIL] subtest: Multiple history traversals, last would be aborted
  • OK /html/browsers/history/the-history-interface/traverse_the_history_4.html (#21383)
    • FAIL [expected PASS] subtest: Multiple history traversals, last would be aborted

      assert_array_equals: Pages opened during history navigation expected property 1 to be 5 but got 3 (expected array [6, 5] got [6, 3])
      

  • OK /html/browsers/history/the-history-interface/traverse_the_history_5.html (#21383)
    • FAIL [expected PASS] subtest: Multiple history traversals, last would be aborted

      assert_array_equals: Pages opened during history navigation expected property 1 to be 5 but got 3 (expected array [6, 5] got [6, 3])
      

  • TIMEOUT /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
  • OK [expected TIMEOUT] /html/interaction/focus/the-autofocus-attribute/update-the-rendering.html (#24145)
    • FAIL [expected TIMEOUT] subtest: "Flush autofocus candidates" should be happen before a scroll event and animation frame callbacks

      assert_array_equals: animationFrame lengths differ, expected array ["autofocus", "scroll", "animationFrame"] length 3, got ["animationFrame"] length 1
      

  • OK /html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-2.html (#39703)
    • FAIL [expected PASS] subtest: Meta refresh of the original iframe is not blocked if moved into a sandboxed iframe

      uncaught exception: Error: assert_unreached: The iframe into which the meta was moved must not refresh Reached unreachable code
      

  • TIMEOUT /html/semantics/embedded-content/media-elements/preserves-pitch.html (#40352)
    • PASS [expected TIMEOUT] subtest: Speed-ups should not change the pitch when preservesPitch=true
    • PASS [expected NOTRUN] subtest: Slow-downs should not change the pitch when preservesPitch=true
    • TIMEOUT [expected NOTRUN] subtest: Speed-ups should change the pitch when preservesPitch=false

      Test timed out
      

  • OK /mixed-content/tentative/autoupgrades/audio-upgrade.https.sub.html (#41697)
    • FAIL [expected PASS] subtest: Audio autoupgraded

      assert_equals: Length expected 1 but got Infinity
      

  • OK /mixed-content/tentative/autoupgrades/mixed-content-cors.https.sub.html (#41123)
    • PASS [expected FAIL] subtest: Cross-Origin video should get upgraded even if CORS is set
  • OK /resource-timing/buffer-full-add-then-clear.html (#40819)
    • FAIL [expected PASS] subtest: Test that if the buffer is cleared after entries were added to the secondary buffer, those entries make it into the primary one

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

  • OK /resource-timing/test_resource_timing.https.html (#25216)
    • PASS [expected FAIL] subtest: PerformanceEntry has correct name, initiatorType, startTime, and duration (link)
  • TIMEOUT [expected OK] /trusted-types/trusted-types-navigation.html?26-30 (#38807)
    • TIMEOUT [expected PASS] subtest: Navigate a window via form-submission with javascript:-urls in report-only mode.

      Test timed out
      

    • NOTRUN [expected PASS] subtest: Navigate a window via form-submission with javascript:-urls w/ default policy in report-only mode.
    • NOTRUN [expected PASS] subtest: Navigate a frame via form-submission with javascript:-urls in enforcing mode.
    • NOTRUN [expected PASS] subtest: Navigate a frame via form-submission with javascript:-urls w/ default policy in enforcing mode.
  • OK /trusted-types/trusted-types-reporting.html (#43737)
    • PASS [expected FAIL] subtest: Trusted Type violation report: creating a forbidden-but-not-reported policy.
    • PASS [expected FAIL] subtest: Trusted Type violation report: sample for SVGScriptElement href assignment by setAttribute
Stable unexpected results (5)
  • OK /editing/event.html
    • PASS [expected FAIL] subtest: Command underline, value "": input event
    • PASS [expected FAIL] subtest: Command underline, value "quasit": input event
  • OK /editing/other/exec-command-with-text-editor.tentative.html?type=password
    • PASS [expected FAIL] subtest: In &lt;input type="password"&gt;, execCommand("underline", false, null), a[b]c): The command should be supported
    • PASS [expected FAIL] subtest: In &lt;input type="password"&gt; in contenteditable, execCommand("underline", false, null), a[b]c): The command should be supported
    • FAIL [expected PASS] subtest: In &lt;input type="password"&gt; in contenteditable, execCommand("underline", false, null), a[b]c): The command should not be enabled

      assert_equals: expected false but got true
      

    • FAIL [expected PASS] subtest: In &lt;input type="password"&gt; in contenteditable, execCommand("underline", false, null), a[b]c): execCommand() should return false

      assert_equals: expected false but got true
      

    • FAIL [expected PASS] subtest: In &lt;input type="password"&gt; in contenteditable, execCommand("underline", false, null), a[b]c): should not fire beforeinput event

      assert_false: Must not fire beforeinput event expected false got true
      

    • FAIL [expected PASS] subtest: In &lt;input type="password"&gt; in contenteditable, execCommand("underline", false, null), a[b]c): input.inputType should be undefined

      assert_equals: expected (undefined) undefined but got (string) ""
      

    • FAIL [expected PASS] subtest: In &lt;input type="password"&gt; in contenteditable, execCommand("underline", false, null), a[b]c): input.target should be undefined

      assert_equals: expected (undefined) undefined but got (object) Element node &lt;div id="container" contenteditable="true"&gt;Here &lt;b&gt;is&lt;/b&gt;...
      

  • OK /editing/other/exec-command-with-text-editor.tentative.html?type=text
    • PASS [expected FAIL] subtest: In &lt;input type="text"&gt;, execCommand("underline", false, null), a[b]c): The command should be supported
    • PASS [expected FAIL] subtest: In &lt;input type="text"&gt; in contenteditable, execCommand("underline", false, null), a[b]c): The command should be supported
    • FAIL [expected PASS] subtest: In &lt;input type="text"&gt; in contenteditable, execCommand("underline", false, null), a[b]c): The command should not be enabled

      assert_equals: expected false but got true
      

    • FAIL [expected PASS] subtest: In &lt;input type="text"&gt; in contenteditable, execCommand("underline", false, null), a[b]c): execCommand() should return false

      assert_equals: expected false but got true
      

    • FAIL [expected PASS] subtest: In &lt;input type="text"&gt; in contenteditable, execCommand("underline", false, null), a[b]c): should not fire beforeinput event

      assert_false: Must not fire beforeinput event expected false got true
      

    • FAIL [expected PASS] subtest: In &lt;input type="text"&gt; in contenteditable, execCommand("underline", false, null), a[b]c): input.inputType should be undefined

      assert_equals: expected (undefined) undefined but got (string) ""
      

    • FAIL [expected PASS] subtest: In &lt;input type="text"&gt; in contenteditable, execCommand("underline", false, null), a[b]c): input.target should be undefined

      assert_equals: expected (undefined) undefined but got (object) Element node &lt;div id="container" contenteditable="true"&gt;Here &lt;b&gt;is&lt;/b&gt;...
      

  • OK /editing/other/exec-command-with-text-editor.tentative.html?type=textarea
    • PASS [expected FAIL] subtest: In &lt;textarea&gt;, execCommand("underline", false, null), a[b]c): The command should be supported
    • PASS [expected FAIL] subtest: In &lt;textarea&gt; in contenteditable, execCommand("underline", false, null), a[b]c): The command should be supported
    • FAIL [expected PASS] subtest: In &lt;textarea&gt; in contenteditable, execCommand("underline", false, null), a[b]c): The command should not be enabled

      assert_equals: expected false but got true
      

    • FAIL [expected PASS] subtest: In &lt;textarea&gt; in contenteditable, execCommand("underline", false, null), a[b]c): execCommand() should return false

      assert_equals: expected false but got true
      

    • FAIL [expected PASS] subtest: In &lt;textarea&gt; in contenteditable, execCommand("underline", false, null), a[b]c): should not fire beforeinput event

      assert_false: Must not fire beforeinput event expected false got true
      

    • FAIL [expected PASS] subtest: In &lt;textarea&gt; in contenteditable, execCommand("underline", false, null), a[b]c): input.inputType should be undefined

      assert_equals: expected (undefined) undefined but got (string) ""
      

    • FAIL [expected PASS] subtest: In &lt;textarea&gt; in contenteditable, execCommand("underline", false, null), a[b]c): input.target should be undefined

      assert_equals: expected (undefined) undefined but got (object) Element node &lt;div id="container" contenteditable="true"&gt;Here &lt;b&gt;is&lt;/b&gt;...
      

  • OK /editing/other/removing-inline-style-specified-by-parent-block.tentative.html?u
    • FAIL [expected PASS] subtest: Disabling style to text, it's applied to the editing host

      assert_in_array: value "&lt;p&gt;&lt;u&gt;foo&lt;/u&gt;&lt;/p&gt;" not in array ["&lt;p&gt;foo&lt;/p&gt;", "&lt;p&gt;foo&lt;br&gt;&lt;/p&gt;"]
      

    • FAIL [expected PASS] subtest: Disabling style to text, it's applied to the body

      assert_in_array: value "&lt;p&gt;&lt;u&gt;foo&lt;/u&gt;&lt;/p&gt;" not in array ["&lt;p&gt;foo&lt;/p&gt;", "&lt;p&gt;foo&lt;br&gt;&lt;/p&gt;"]
      

@github-actions

Copy link
Copy Markdown

⚠️ Try run (#24385541303) failed!

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
@servo-highfive servo-highfive added the S-awaiting-review There is new code that needs to be reviewed. label Apr 14, 2026
@TimvdLippe TimvdLippe enabled auto-merge April 14, 2026 07:55
@TimvdLippe TimvdLippe added this pull request to the merge queue Apr 14, 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 Apr 14, 2026
Merged via the queue into servo:main with commit 143d7fe Apr 14, 2026
33 checks passed
@TimvdLippe TimvdLippe deleted the initial-underline-implementation branch April 14, 2026 08:50
@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 Apr 14, 2026
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

Development

Successfully merging this pull request may close these issues.

3 participants