Skip to content

Use the flat tree for layout and style invalidation#35769

Merged
simonwuelker merged 1 commit intoservo:mainfrom
simonwuelker:slot-invalidation
Mar 6, 2025
Merged

Use the flat tree for layout and style invalidation#35769
simonwuelker merged 1 commit intoservo:mainfrom
simonwuelker:slot-invalidation

Conversation

@simonwuelker
Copy link
Copy Markdown
Contributor

@simonwuelker simonwuelker commented Mar 3, 2025

Layout invalidation currently happens on the regular dom. That is incorrect and we should use the flat tree instead.

The flat tree is equivalent to the DOM, except for the following:

  • Assigned slottables are children of their slots (and their slot is their parent)
  • Children of shadow roots are children of their hosts (and the hosts are their parents)

For example, when an assigned slottable becomes dirty then we want to mark its assigned slot as dirty, not it's parent.


  • ./mach build -d does not report any errors
  • ./mach test-tidy does not report any errors
  • These changes fix Nested <details> elements don't update properly #35727
  • There are no tests for these changes - I can't seem to replicate the issue with a script and to simulate "real" clicks we would need webdriver support

@simonwuelker simonwuelker added the T-linux-wpt Do a try run of the WPT label Mar 3, 2025
@github-actions github-actions bot removed the T-linux-wpt Do a try run of the WPT label Mar 3, 2025
@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 3, 2025

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

@simonwuelker simonwuelker added the T-linux-wpt Do a try run of the WPT label Mar 3, 2025
@github-actions github-actions bot removed the T-linux-wpt Do a try run of the WPT label Mar 3, 2025
@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 3, 2025

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

@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 3, 2025

Test results for linux-wpt-layout-2020 from try job (#13632900818):

Flaky unexpected result (18)
  • OK /FileAPI/url/url-with-fetch.any.worker.html (#21517)
    • PASS [expected FAIL] subtest: Revoke blob URL after calling fetch, fetch should succeed
  • OK /css/css-fonts/variations/at-font-face-font-matching.html (#20684)
    • PASS [expected FAIL] subtest: Matching font-style: 'oblique 20deg' should prefer 'oblique -40deg -30deg' over 'italic'
  • OK /css/css-grid/alignment/grid-content-alignment-with-abspos-001.html (#34339)
    • FAIL [expected PASS] subtest: .grid 1

      assert_equals: 
      &lt;div class="grid" data-expected-width="800" data-expected-height="600"&gt;
          &lt;div class="a" id="item" data-offset-x="329" data-offset-y="269" data-expected-width="142" data-expected-height="62" style="place-self: center;"&gt;&lt;/div&gt;
        &lt;/div&gt;
      offsetLeft expected 329 but got 0
      

  • OK /encoding/legacy-mb-japanese/shift_jis/sjis-encode-form.html?1-1000
    • FAIL [expected PASS] subtest: U+80 � %80

      assert_equals: expected "%80" but got ""
      

    • FAIL [expected PASS] subtest: U+A5 ¥ %5C

      str is undefined
      

    • FAIL [expected PASS] subtest: U+A7 § %81%98

      str is undefined
      

    • FAIL [expected PASS] subtest: U+A8 ¨ %81%4E

      str is undefined
      

    • FAIL [expected PASS] subtest: U+B0 ° %81%8B

      str is undefined
      

    • FAIL [expected PASS] subtest: U+B1 ± %81%7D

      str is undefined
      

    • FAIL [expected PASS] subtest: U+B4 ´ %81%4C

      str is undefined
      

    • FAIL [expected PASS] subtest: U+B6 ¶ %81%F7

      str is undefined
      

    • FAIL [expected PASS] subtest: U+D7 × %81%7E

      str is undefined
      

    • FAIL [expected PASS] subtest: U+F7 ÷ %81%80

      str is undefined
      

    • And 590 more unexpected results...
  • OK /encoding/legacy-mb-korean/euc-kr/euckr-encode-form-csksc56011987.html?1-1000
    • FAIL [expected PASS] subtest: U+A1 ¡ %A2%AE

      assert_equals: expected "%A2%AE" but got ""
      

    • FAIL [expected PASS] subtest: U+A4 ¤ %A2%B4

      str is undefined
      

    • FAIL [expected PASS] subtest: U+A7 § %A1%D7

      str is undefined
      

    • FAIL [expected PASS] subtest: U+A8 ¨ %A1%A7

      str is undefined
      

    • FAIL [expected PASS] subtest: U+AA ª %A8%A3

      str is undefined
      

    • FAIL [expected PASS] subtest: U+AD ­ %A1%A9

      str is undefined
      

    • FAIL [expected PASS] subtest: U+AE ® %A2%E7

      str is undefined
      

    • FAIL [expected PASS] subtest: U+B0 ° %A1%C6

      str is undefined
      

    • FAIL [expected PASS] subtest: U+B1 ± %A1%BE

      str is undefined
      

    • FAIL [expected PASS] subtest: U+B2 ² %A9%F7

      str is undefined
      

    • And 390 more unexpected results...
  • OK /encoding/legacy-mb-korean/euc-kr/euckr-encode-form-errors-misc.html?1-1000
    • FAIL [expected PASS] subtest: latin, greek, cyrillic, etc U+80 � %26%23128%3B

      assert_equals: expected "%26%23128%3B" but got ""
      

    • FAIL [expected PASS] subtest: latin, greek, cyrillic, etc U+81 � %26%23129%3B

      assert_equals: expected (string) "%26%23129%3B" but got (undefined) undefined
      

    • FAIL [expected PASS] subtest: latin, greek, cyrillic, etc U+82 � %26%23130%3B

      assert_equals: expected (string) "%26%23130%3B" but got (undefined) undefined
      

    • FAIL [expected PASS] subtest: latin, greek, cyrillic, etc U+83 � %26%23131%3B

      assert_equals: expected (string) "%26%23131%3B" but got (undefined) undefined
      

    • FAIL [expected PASS] subtest: latin, greek, cyrillic, etc U+84 � %26%23132%3B

      assert_equals: expected (string) "%26%23132%3B" but got (undefined) undefined
      

    • FAIL [expected PASS] subtest: latin, greek, cyrillic, etc U+85 � %26%23133%3B

      assert_equals: expected (string) "%26%23133%3B" but got (undefined) undefined
      

    • FAIL [expected PASS] subtest: latin, greek, cyrillic, etc U+86 � %26%23134%3B

      assert_equals: expected (string) "%26%23134%3B" but got (undefined) undefined
      

    • FAIL [expected PASS] subtest: latin, greek, cyrillic, etc U+87 � %26%23135%3B

      assert_equals: expected (string) "%26%23135%3B" but got (undefined) undefined
      

    • FAIL [expected PASS] subtest: latin, greek, cyrillic, etc U+88 � %26%23136%3B

      assert_equals: expected (string) "%26%23136%3B" but got (undefined) undefined
      

    • FAIL [expected PASS] subtest: latin, greek, cyrillic, etc U+89 � %26%23137%3B

      assert_equals: expected (string) "%26%23137%3B" but got (undefined) undefined
      

    • And 390 more unexpected results...
  • OK /fetch/metadata/generated/css-font-face.https.sub.tentative.html (#32732)
    • PASS [expected FAIL] subtest: sec-fetch-storage-access - Cross-site
  • OK /fetch/metadata/generated/css-font-face.sub.tentative.html (#34624)
    • PASS [expected FAIL] subtest: sec-fetch-storage-access - Not sent to non-trustworthy cross-site destination
  • OK /html/browsers/browsing-the-web/navigating-across-documents/008.html (#24456)
    • PASS [expected FAIL] subtest: Link with onclick form submit to javascript url and href navigation
  • 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
  • PASS [expected FAIL] /html/canvas/element/manual/drawing-text-to-the-canvas/canvas.2d.disconnected-font-size-math.html (#30063)
  • OK [expected ERROR] /html/canvas/element/manual/imagebitmap/createImageBitmap-colorSpaceConversion.html (#34151)
  • ERROR [expected TIMEOUT] /html/canvas/element/manual/imagebitmap/createImageBitmap-serializable.html (#34120)
  • OK /html/interaction/focus/the-autofocus-attribute/document-with-fragment-valid.html (#28259)
    • PASS [expected FAIL] subtest: Autofocus elements in top-level browsing context's documents with URL fragments should be skipped.
  • CRASH [expected TIMEOUT] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html (#24057)
  • CRASH [expected TIMEOUT] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html (#24066)
  • OK /html/semantics/forms/form-submission-0/text-plain.window.html (#28687)
    • PASS [expected FAIL] subtest: text/plain: Basic test (formdata event)
  • OK /html/semantics/forms/form-submission-0/urlencoded2.window.html (#28687)
    • PASS [expected FAIL] subtest: application/x-www-form-urlencoded: Basic test (formdata event)
Stable unexpected results that are known to be intermittent (13)
  • TIMEOUT /FileAPI/url/url-in-tags-revoke.window.html (#19978)
    • TIMEOUT [expected PASS] subtest: Fetching a blob URL immediately before revoking it works in &lt;script&gt; tags.

      Test timed out
      

  • PASS [expected FAIL] /css/compositing/mix-blend-mode/mix-blend-mode-video-sibling.html (#32849)
  • PASS [expected FAIL] /css/css-tables/table-cell-overflow-auto-scrolled.html (#35011)
  • OK /html/browsers/browsing-the-web/navigating-across-documents/009.html (#24456)
    • FAIL [expected PASS] subtest: Link with onclick form submit to javascript url with document.write and href navigation

      assert_array_equals: expected property 1 to be "href" but got "click" (expected array ["write", "href"] got ["write", "click"])
      

  • OK /html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-nosrc.html (#34819)
    • PASS [expected FAIL] subtest: form submission
  • 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"
      

  • TIMEOUT [expected OK] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html (#22667)
    • TIMEOUT [expected FAIL] subtest: Check that popups from a sandboxed iframe escape the sandbox if allow-popups-to-escape-sandbox is used

      Test timed out
      

  • CRASH [expected TIMEOUT] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html (#22154)
  • OK [expected TIMEOUT] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html (#24066)
  • OK /html/semantics/forms/form-submission-0/form-submit-iframe-then-location-navigate.html (#29634)
    • FAIL [expected PASS] subtest: Verifies that location navigations take precedence when following form submissions.

      assert_equals: expected "/html/semantics/forms/form-submission-0/resources/location.html" but got "/html/semantics/forms/form-submission-0/resources/form.html"
      

  • TIMEOUT [expected OK] /html/semantics/forms/form-submission-0/reparent-form-during-planned-navigation-task.html (#29724)
    • TIMEOUT [expected PASS] subtest: reparent-form-during-planned-navigation-task

      Test timed out
      

  • OK [expected TIMEOUT] /mixed-content/gen/top.http-rp/opt-in/audio-tag.https.html (#35744)
  • OK /navigation-timing/test-navigation-type-reload.html (#33334)
    • FAIL [expected PASS] subtest: Reload domComplete &gt; Original domComplete

      assert_true: Reload domComplete &gt; Original domComplete expected true got false
      

    • FAIL [expected PASS] subtest: Reload loadEventEnd &gt; Original loadEventEnd

      assert_true: Reload loadEventEnd &gt; Original loadEventEnd expected true got false
      

    • FAIL [expected PASS] subtest: Reload loadEventStart &gt; Original loadEventStart

      assert_true: Reload loadEventStart &gt; Original loadEventStart expected true got false
      

@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 3, 2025

✨ Try run (#13632900818) succeeded.

@simonwuelker simonwuelker marked this pull request as ready for review March 4, 2025 08:50
@simonwuelker simonwuelker requested a review from gterzian as a code owner March 4, 2025 08:50
@simonwuelker simonwuelker changed the title Invalidate slot when slot content changes Use the light tree for layout and style invalidation Mar 5, 2025
@simonwuelker
Copy link
Copy Markdown
Contributor Author

simonwuelker commented Mar 5, 2025

I included a few more related changes that fix the crash on wpt.fyi (:

@simonwuelker simonwuelker added the T-linux-wpt Do a try run of the WPT label Mar 5, 2025
@github-actions github-actions bot removed the T-linux-wpt Do a try run of the WPT label Mar 5, 2025
@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 5, 2025

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

@simonwuelker simonwuelker added the T-linux-wpt Do a try run of the WPT label Mar 5, 2025
@github-actions github-actions bot removed the T-linux-wpt Do a try run of the WPT label Mar 5, 2025
@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 5, 2025

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

@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 5, 2025

Test results for linux-wpt-layout-2020 from try job (#13674638541):

Flaky unexpected result (18)
  • FAIL [expected PASS] /_mozilla/css/dirty_viewport.html (#13731)
  • OK /css/css-cascade/layer-cssom-order-reverse.html
    • FAIL [expected PASS] subtest: Insert layer invalidates @font-face

      assert_equals: expected "220px" but got "133px"
      

  • OK /css/css-grid/alignment/grid-content-alignment-with-abspos-001.html (#34339)
    • FAIL [expected PASS] subtest: .grid 1

      assert_equals: 
      &lt;div class="grid" data-expected-width="800" data-expected-height="600"&gt;
          &lt;div class="a" id="item" data-offset-x="329" data-offset-y="269" data-expected-width="142" data-expected-height="62" style="place-self: center;"&gt;&lt;/div&gt;
        &lt;/div&gt;
      offsetLeft expected 329 but got 0
      

  • OK /encoding/legacy-mb-korean/euc-kr/euckr-encode-form-ks_c_5601-1987.html?1-1000
    • FAIL [expected PASS] subtest: U+2533 ┳ %A6%B3

      assert_equals: expected "%A6%B3" but got ""
      

    • FAIL [expected PASS] subtest: U+2534 ┴ %A6%AA

      str is undefined
      

    • FAIL [expected PASS] subtest: U+2535 ┵ %A6%D5

      str is undefined
      

    • FAIL [expected PASS] subtest: U+2536 ┶ %A6%D6

      str is undefined
      

    • FAIL [expected PASS] subtest: U+2537 ┷ %A6%BA

      str is undefined
      

    • FAIL [expected PASS] subtest: U+2538 ┸ %A6%BF

      str is undefined
      

    • FAIL [expected PASS] subtest: U+2539 ┹ %A6%D7

      str is undefined
      

    • FAIL [expected PASS] subtest: U+253A ┺ %A6%D8

      str is undefined
      

    • FAIL [expected PASS] subtest: U+253B ┻ %A6%B5

      str is undefined
      

    • FAIL [expected PASS] subtest: U+253C ┼ %A6%AB

      str is undefined
      

    • And 390 more unexpected results...
  • OK [expected ERROR] /fetch/fetch-later/quota/same-origin-iframe/oversized-payload.tentative.https.window.html (#35210)
  • OK /fetch/metadata/generated/css-font-face.sub.tentative.html (#34624)
    • PASS [expected FAIL] subtest: sec-fetch-storage-access - Not sent to non-trustworthy cross-site destination
  • 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/history/the-history-interface/traverse_the_history_5.html (#21383)
    • PASS [expected FAIL] subtest: Multiple history traversals, last would be aborted
  • TIMEOUT [expected ERROR] /html/canvas/element/manual/imagebitmap/createImageBitmap-invalid-args.html (#32745)
    • TIMEOUT [expected FAIL] subtest: createImageBitmap with an HTMLVideoElement from a data URL source and sw set to 0

      Test timed out
      

    • NOTRUN [expected FAIL] subtest: createImageBitmap with an HTMLVideoElement from a data URL source and sh set to 0
    • NOTRUN [expected FAIL] subtest: createImageBitmap with an HTMLVideoElement from a data URL source and oversized (unallocatable) crop region
    • NOTRUN [expected FAIL] subtest: createImageBitmap with an HTMLVideoElement from a data URL source and a value of 0 int resizeWidth
    • NOTRUN [expected FAIL] subtest: createImageBitmap with an HTMLVideoElement from a data URL source and a value of 0 in resizeHeight
    • NOTRUN [expected FAIL] subtest: createImageBitmap with an HTMLVideoElement from a data URL source and a value between 0 and 1 in resizeWidth
    • NOTRUN [expected FAIL] subtest: createImageBitmap with an HTMLVideoElement from a data URL source and a value between 0 and 1 in resizeHeight
    • NOTRUN [expected FAIL] subtest: createImageBitmap with a bitmap HTMLImageElement source and sw set to 0
    • NOTRUN [expected FAIL] subtest: createImageBitmap with a bitmap HTMLImageElement source and sh set to 0
    • NOTRUN [expected FAIL] subtest: createImageBitmap with a bitmap HTMLImageElement source and oversized (unallocatable) crop region
    • And 12 more unexpected results...
  • CRASH [expected OK] /html/canvas/offscreen/canvas-host/2d.canvas.host.size.large.html (#34117)
  • CRASH [expected OK] /html/canvas/offscreen/canvas-host/2d.canvas.host.size.large.worker.html (#30164)
  • TIMEOUT [expected OK] /html/infrastructure/urls/base-url/document-base-url-window-initiator-is-not-opener.https.window.html (#30970)
  • OK /html/interaction/focus/the-autofocus-attribute/document-with-fragment-valid.html (#28259)
    • PASS [expected FAIL] subtest: Autofocus elements in top-level browsing context's documents with URL fragments should be skipped.
  • TIMEOUT [expected OK] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html (#22667)
    • TIMEOUT [expected FAIL] subtest: Check that popups from a sandboxed iframe escape the sandbox if allow-popups-to-escape-sandbox is used

      Test timed out
      

  • OK /html/semantics/forms/form-submission-0/text-plain.window.html (#28687)
    • PASS [expected FAIL] subtest: text/plain: \r\n in filename (normal form)
  • OK /html/webappapis/user-prompts/print-during-unload.html
    • FAIL [expected PASS] subtest: print() during unload

      assert_array_equals: expected property 1 to be "destination" but got "error: window.print is not a function" (expected array ["start", "destination"] got ["start", "error: window.print is not a function"])
      

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

      Test timed out
      

  • ERROR [expected OK] /workers/baseurl/alpha/sharedworker-in-worker.html (#21315)
Stable unexpected results that are known to be intermittent (14)
  • OK /FileAPI/url/url-with-fetch.any.worker.html (#21517)
    • PASS [expected FAIL] subtest: Revoke blob URL after calling fetch, fetch should succeed
  • PASS [expected FAIL] /css/css-tables/table-cell-overflow-auto-scrolled.html (#35011)
  • OK /html/browsers/browsing-the-web/navigating-across-documents/008.html (#24456)
    • PASS [expected FAIL] subtest: Link with onclick form submit to javascript url and href navigation
  • OK /html/browsers/browsing-the-web/navigating-across-documents/009.html (#24456)
    • FAIL [expected PASS] subtest: Link with onclick form submit to javascript url with document.write and href navigation

      assert_array_equals: expected property 1 to be "href" but got "click" (expected array ["write", "href"] got ["write", "click"])
      

  • TIMEOUT [expected OK] /html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html (#29048)
    • TIMEOUT [expected PASS] subtest: Navigating to a different document with form submission

      Test timed out
      

  • CRASH [expected TIMEOUT] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html (#24057)
  • OK [expected TIMEOUT] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html (#24066)
    • FAIL [expected NOTRUN] subtest: Check that popups from a sandboxed iframe do not escape the sandbox

      assert_equals: It came from a sandboxed iframe expected "null" but got "http://web-platform.test:8000"
      

  • OK [expected TIMEOUT] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html (#22154)
  • OK [expected TIMEOUT] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html (#24066)
  • OK /html/semantics/forms/form-submission-0/form-submit-iframe-then-location-navigate.html (#29634)
    • FAIL [expected PASS] subtest: Verifies that location navigations take precedence when following form submissions.

      assert_equals: expected "/html/semantics/forms/form-submission-0/resources/location.html" but got "/html/semantics/forms/form-submission-0/resources/form.html"
      

  • OK /html/semantics/scripting-1/the-script-element/module/dynamic-import/blob-url.any.worker.html (#33909)
    • FAIL [expected PASS] subtest: Revoking a blob URL immediately after calling import will not fail

      promise_test: Unhandled rejection with value: object "TypeError: Dynamic import failed"
      

  • OK [expected TIMEOUT] /mixed-content/gen/top.http-rp/opt-in/audio-tag.https.html (#35744)
  • OK /navigation-timing/test-navigation-type-reload.html (#33334)
    • PASS [expected FAIL] subtest: Reload domContentLoadedEventStart &gt; Original domContentLoadedEventStart
    • PASS [expected FAIL] subtest: Reload fetchStart &gt; Original fetchStart
  • OK [expected TIMEOUT] /performance-timeline/navigation-id-detached-frame.tentative.html (#34773)
    • PASS [expected TIMEOUT] subtest: The navigation_id getter does not crash a window of detached frame
Stable unexpected results (1)
  • OK /encoding/legacy-mb-tchinese/big5/big5-encode-form-errors-hangul.html?1-1000
    • FAIL [expected PASS] subtest: hangul U+AD90 궐 %26%2344432%3B

      assert_equals: expected "%26%2344432%3B" but got ""
      

    • FAIL [expected PASS] subtest: hangul U+AD91 궑 %26%2344433%3B

      assert_equals: expected (string) "%26%2344433%3B" but got (undefined) undefined
      

    • FAIL [expected PASS] subtest: hangul U+AD92 궒 %26%2344434%3B

      assert_equals: expected (string) "%26%2344434%3B" but got (undefined) undefined
      

    • FAIL [expected PASS] subtest: hangul U+AD93 궓 %26%2344435%3B

      assert_equals: expected (string) "%26%2344435%3B" but got (undefined) undefined
      

    • FAIL [expected PASS] subtest: hangul U+AD94 궔 %26%2344436%3B

      assert_equals: expected (string) "%26%2344436%3B" but got (undefined) undefined
      

    • FAIL [expected PASS] subtest: hangul U+AD95 궕 %26%2344437%3B

      assert_equals: expected (string) "%26%2344437%3B" but got (undefined) undefined
      

    • FAIL [expected PASS] subtest: hangul U+AD96 궖 %26%2344438%3B

      assert_equals: expected (string) "%26%2344438%3B" but got (undefined) undefined
      

    • FAIL [expected PASS] subtest: hangul U+AD97 궗 %26%2344439%3B

      assert_equals: expected (string) "%26%2344439%3B" but got (undefined) undefined
      

    • FAIL [expected PASS] subtest: hangul U+AD98 궘 %26%2344440%3B

      assert_equals: expected (string) "%26%2344440%3B" but got (undefined) undefined
      

    • FAIL [expected PASS] subtest: hangul U+AD99 궙 %26%2344441%3B

      assert_equals: expected (string) "%26%2344441%3B" but got (undefined) undefined
      

    • And 390 more unexpected results...

@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 5, 2025

⚠️ Try run (#13674638541) failed.

@simonwuelker simonwuelker changed the title Use the light tree for layout and style invalidation Use the flat tree for layout and style invalidation Mar 5, 2025
When invalidating layout, computing dirty roots and such,
we want to work in the flat tree. That means that the
children of slots are their assigned slottables, parents
of assigned slottables are their slots and the children
of an element include children of a potential shadow dom.

Signed-off-by: Simon Wülker <[email protected]>
@simonwuelker simonwuelker added this pull request to the merge queue Mar 6, 2025
Merged via the queue into servo:main with commit 37634b1 Mar 6, 2025
25 checks passed
@simonwuelker simonwuelker deleted the slot-invalidation branch March 6, 2025 09:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Nested <details> elements don't update properly

2 participants