Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

layout: Linebreak the entire InlineFormattingContext at once #32483

Merged
merged 1 commit into from
Jun 13, 2024

Conversation

mrobinson
Copy link
Member

@mrobinson mrobinson commented Jun 12, 2024

Instead of linebreaking inside each single-font text segment, linebreak
the entire inline formatting context at once. This has several benefits:

  1. It allows us to use icu_segmenter (already in use from style),
    which is written against a newer version of the Unicode spec --
    preventing breaking emoji clusters.
  2. Opens up the possibility of changing the way that linebreaking and
    shaping work -- eventually allowing shaping across inline box
    boundaries and line breaking after shaping.

Some tests start to fail:

  • A large portion of the unexpected results is that the linebreaker no longer seems to be putting a soft line break opportunity after the zero-width joiner. This causes the Arabic ('ع') character to render differently when it's shaped together with a zero-width joiner and no followup character. This happens in tests because the character that it is supposed to join with is in a different inline box and we do not shape across inline box boundaries. So, in summary, changes in the line breaker are causing tests that were passing by accident to start failing, when they should have been failing all along.
  • Some tests fail because we do not support line-break: anywhere and word-break: manual.

Co-authored-by: Rakhi Sharma atbrakhi@igalia.com


  • ./mach build -d does not report any errors
  • ./mach test-tidy does not report any errors
  • There are tests for these changes

@mrobinson mrobinson added the T-linux-wpt-2020 Do a try run of the WPT label Jun 12, 2024
@github-actions github-actions bot removed the T-linux-wpt-2020 Do a try run of the WPT label Jun 12, 2024
Copy link

🔨 Triggering try run (#9485659762) for Linux WPT

Copy link

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

Flaky unexpected result (17)
  • FAIL [expected PASS] /_mozilla/css/dirty_viewport.html (#13731)
  • CRASH [expected PASS] /_mozilla/mozilla/webgl/tex_image_2d_mipmap.html
  • CRASH [expected PASS] /_webgl/conformance/glsl/bugs/long-expressions-should-not-crash.html (#19221)
  • TIMEOUT [expected PASS] /css/css-color/animation/opacity-animation-ending-correctly-001.html (#29215)
  • OK /css/css-fonts/variations/at-font-face-font-matching.html (#20684)
    • FAIL [expected PASS] subtest: Matching font-weight: '500' should prefer '450 460' over '400'

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

  • TIMEOUT [expected OK] /fetch/api/redirect/redirect-keepalive.https.any.html (#32153)
    • TIMEOUT [expected PASS] subtest: [keepalive][iframe][load] mixed content redirect; setting up

      Test timed out
      

  • OK /html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html (#28066)
    • FAIL [expected PASS] subtest: 0041 set in href="" targeting a frame and clicked

      assert_equals: expected "A" but got ""
      

    • FAIL [expected PASS] subtest: 0080 00FF set in href="" targeting a frame and clicked

      assert_equals: expected "�ÿ" but got ""
      

    • FAIL [expected PASS] subtest: 0080 00FF 0100 set in href="" targeting a frame and clicked

      assert_equals: expected "�ÿĀ" but got ""
      

    • FAIL [expected PASS] subtest: D83D DE0D set in href="" targeting a frame and clicked

      assert_equals: expected "😍" but got ""
      

    • FAIL [expected PASS] subtest: DE0D 0041 set in href="" targeting a frame and clicked

      assert_equals: expected "\ufffdA" but got ""
      

  • OK /html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-cross-origin.sub.window.html (#29056)
    • FAIL [expected PASS] subtest: Cross-origin navigation started from unload handler must be ignored

      promise_test: Unhandled rejection with value: object "SecurityError: The operation is insecure."
      

  • OK /html/browsers/history/the-history-interface/traverse_the_history_2.html (#21383)
    • PASS [expected FAIL] subtest: Multiple history traversals, last would be aborted
  • TIMEOUT [expected OK] /html/interaction/focus/the-autofocus-attribute/autofocus-dialog.html (#29087)
    • TIMEOUT [expected FAIL] subtest: <dialog>-contained autofocus element gets focused when the dialog is shown

      Test timed out
      

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

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

  • TIMEOUT [expected OK] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html (#24057)
    • 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
      

  • TIMEOUT [expected OK] /html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-user-activation-sticky.tentative.sub.window.html (#32154)
    • TIMEOUT [expected FAIL] subtest: Allow top with user activation + user activation

      Test timed out
      

  • OK /html/semantics/forms/form-submission-0/text-plain.window.html (#28687)
    • PASS [expected FAIL] subtest: text/plain: Basic test (formdata event)
  • OK /html/syntax/parsing/DOMContentLoaded-defer.html (#21550)
    • FAIL [expected PASS] subtest: The end: DOMContentLoaded and defer scripts

      assert_false: DOMContentLoaded should not have fired before executing a task queued from a defer script expected false got true
      

  • TIMEOUT /resource-timing/test_resource_timing.https.html (#25216)
    • FAIL [expected PASS] subtest: PerformanceEntry has correct name, initiatorType, startTime, and duration (img)

      assert_equals: expected 14500864 but got 14500608
      

  • OK [expected ERROR] /workers/constructors/Worker/Worker-constructor.html (#22991)
Stable unexpected results that are known to be intermittent (11)
  • TIMEOUT [expected OK] /css/css-transitions/disconnected-element-001.html (#32275)
    • TIMEOUT [expected PASS] subtest: Transitions are canceled when an element is re-parented to the same node

      Test timed out
      

  • TIMEOUT /fetch/metadata/generated/element-img-environment-change.https.sub.html (#30111)
    • TIMEOUT [expected FAIL] subtest: sec-fetch-site - Cross-site, no attributes

      Test timed out
      

  • OK /html/browsers/history/the-history-interface/traverse_the_history_5.html (#21383)
    • PASS [expected FAIL] subtest: Multiple history traversals, last would be aborted
  • OK [expected CRASH] /html/browsers/windows/embedded-opener-remove-frame.html (#23867)
  • CRASH [expected TIMEOUT] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html (#22647)
  • TIMEOUT [expected CRASH] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html (#22154)
  • OK [expected TIMEOUT] /html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-cross-site.tentative.sub.window.html (#31754)
    • FAIL [expected TIMEOUT] subtest: A cross-site unsandboxed iframe navigation consumes user activation and disallows top-level navigation.

      promise_test: Unhandled rejection with value: object "TypeError: element.scrollIntoView is not a function"
      

  • OK /html/semantics/forms/form-submission-0/urlencoded2.window.html (#28687)
    • PASS [expected FAIL] subtest: application/x-www-form-urlencoded: Basic test (formdata event)
    • PASS [expected FAIL] subtest: application/x-www-form-urlencoded: Basic File test (formdata event)
    • PASS [expected FAIL] subtest: application/x-www-form-urlencoded: non-ASCII in filename (formdata event)
  • OK /html/webappapis/dynamic-markup-insertion/document-write/module-delayed.html (#27659)
    • PASS [expected FAIL] subtest: async document.write in a module
  • TIMEOUT /resource-timing/test_resource_timing.html (#25720)
    • FAIL [expected PASS] subtest: PerformanceEntry has correct name, initiatorType, startTime, and duration (img)

      assert_equals: expected 8000000 but got 7999744
      

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

      Test timed out
      

Stable unexpected results (54)
  • FAIL [expected PASS] /css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-015.html
  • PASS [expected FAIL] /css/css-text/line-break/line-break-normal-015b.xht
  • PASS [expected FAIL] /css/css-text/line-break/line-break-strict-015b.xht
  • PASS [expected FAIL] /css/css-text/line-breaking/line-breaking-013.html
  • PASS [expected FAIL] /css/css-text/line-breaking/line-breaking-014.html
  • PASS [expected FAIL] /css/css-text/line-breaking/line-breaking-021.html
  • PASS [expected FAIL] /css/css-text/line-breaking/line-breaking-024.html
  • PASS [expected FAIL] /css/css-text/line-breaking/line-breaking-025.html
  • PASS [expected FAIL] /css/css-text/line-breaking/line-breaking-026.html
  • PASS [expected FAIL] /css/css-text/line-breaking/line-breaking-027.html
  • FAIL [expected PASS] /css/css-text/line-breaking/line-breaking-atomic-004.html
  • FAIL [expected PASS] /css/css-text/line-breaking/line-breaking-atomic-005.html
  • PASS [expected FAIL] /css/css-text/line-breaking/line-breaking-atomic-011.html
  • FAIL [expected PASS] /css/css-text/line-breaking/line-breaking-atomic-012.html
  • FAIL [expected PASS] /css/css-text/line-breaking/line-breaking-atomic-015.html
  • FAIL [expected PASS] /css/css-text/line-breaking/line-breaking-atomic-017.html
  • FAIL [expected PASS] /css/css-text/line-breaking/line-breaking-atomic-019.html
  • FAIL [expected PASS] /css/css-text/line-breaking/line-breaking-atomic-021.html
  • FAIL [expected PASS] /css/css-text/line-breaking/line-breaking-atomic-023.html
  • FAIL [expected PASS] /css/css-text/line-breaking/line-breaking-atomic-025.html
  • FAIL [expected PASS] /css/css-text/line-breaking/line-breaking-atomic-027.html
  • FAIL [expected PASS] /css/css-text/line-breaking/line-breaking-replaced-002.html
  • FAIL [expected PASS] /css/css-text/line-breaking/line-breaking-replaced-003.html
  • PASS [expected FAIL] /css/css-text/shaping/reference/shaping-001-ref.html
  • PASS [expected FAIL] /css/css-text/shaping/reference/shaping-002-ref.html
  • PASS [expected FAIL] /css/css-text/shaping/reference/shaping-003-ref.html
  • PASS [expected FAIL] /css/css-text/shaping/reference/shaping-008-ref.html
  • PASS [expected FAIL] /css/css-text/shaping/reference/shaping-009-ref.html
  • PASS [expected FAIL] /css/css-text/shaping/reference/shaping-010-ref.html
  • PASS [expected FAIL] /css/css-text/shaping/reference/shaping-011-ref.html
  • PASS [expected FAIL] /css/css-text/shaping/reference/shaping-014-ref.html
  • PASS [expected FAIL] /css/css-text/shaping/reference/shaping-016-ref.html
  • PASS [expected FAIL] /css/css-text/shaping/reference/shaping-020-ref.html
  • PASS [expected FAIL] /css/css-text/shaping/reference/shaping-021-ref.html
  • PASS [expected FAIL] /css/css-text/shaping/reference/shaping-022-ref.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-001.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-002.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-003.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-008.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-014.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-016.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-017.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-018.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-020.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-021.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-022.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-023.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-024.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-025.html
  • FAIL [expected PASS] /css/css-text/word-break/word-break-manual-001.html
  • PASS [expected FAIL] /css/css-text/word-break/word-break-normal-002.html
  • PASS [expected FAIL] /css/css-text/word-break/word-break-normal-003.html
  • PASS [expected FAIL] /css/css-text/word-break/word-break-normal-th-000.html
  • PASS [expected FAIL] /css/css-text/word-break/word-break-normal-th-001.html

Copy link

⚠️ Try run (#9485659762) failed.

@mrobinson mrobinson added the T-linux-wpt-2020 Do a try run of the WPT label Jun 13, 2024
@github-actions github-actions bot removed the T-linux-wpt-2020 Do a try run of the WPT label Jun 13, 2024
Copy link

🔨 Triggering try run (#9496542933) for Linux WPT

@mrobinson
Copy link
Member Author

A large portion of the unexpected results is that the linebreaker no longer seems to be putting a soft line break opportunity after the zero-width joiner. This causes the Arabic ('ع') character to render differently when it's shaped together with a zero-width joiner and no followup character. This happens in tests because the character that it is supposed to join with is in a different inline box and we do not shape across inline box boundaries. So, in summary, changes in the line breaker are causing tests that were passing by accident to start failing, when they should have been failing all along.

Copy link

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

Flaky unexpected result (17)
  • CRASH [expected OK] /_webgl/conformance/context/context-release-with-workers.html (#22541)
  • OK /css/css-fonts/variations/at-font-face-font-matching.html (#20684)
    • FAIL [expected PASS] subtest: Matching font-weight: '500' should prefer '400' over '350 399'

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

  • TIMEOUT [expected OK] /css/css-transitions/disconnected-element-001.html (#32275)
    • TIMEOUT [expected PASS] subtest: Transitions are canceled when an element is re-parented

      Test timed out
      

    • NOTRUN [expected PASS] subtest: Transitions are canceled when an element is re-parented to the same node
  • OK /css/css-values/calc-in-media-queries-with-mixed-units.html (#31731)
    • FAIL [expected PASS] subtest: box should be orange if the calc between vw+px in @media was correct

      assert_equals: expected "rgb(255, 165, 0)" but got "rgb(0, 0, 255)"
      

  • OK /css/cssom-view/MediaQueryList-addListener-removeListener.html (#24569)
    • FAIL [expected PASS] subtest: listeners are called correct number of times

      assert_equals: expected 4 but got 3
      

  • OK /custom-elements/form-associated/ElementInternals-setFormValue.html (#29174)
    • PASS [expected FAIL] subtest: Newline normalization - \r\n in name (urlencoded)
  • OK /html/browsers/browsing-the-web/navigating-across-documents/empty-iframe-load-event.html (#29066)
    • FAIL [expected PASS] subtest: Check execution order from nested timeout

      assert_equals: Expected nested setTimeout to run second expected true but got false
      

    • FAIL [expected PASS] subtest: Check execution order on load handler

      assert_equals: Expected onload to run first expected false but got true
      

  • OK /html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-cross-origin.sub.window.html (#29056)
    • FAIL [expected PASS] subtest: Cross-origin navigation started from unload handler must be ignored

      promise_test: Unhandled rejection with value: object "SecurityError: The operation is insecure."
      

  • OK /html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html (#28697)
    • FAIL [expected PASS] subtest: aElement.click() before the load event must NOT replace

      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)&code=%0A%20%20%20%20const%20a%20%3D%20document.createElement(%22a%22)%3B%0A%20%20%20%20a.href%20%3D%20%22%2Fcommon%2Fblank.html%3Fthereplacement%22%3B%0A%20%20%20%20document.currentScript.before(a)%3B%0A%20%20%20%20a.click()%3B%0A%20%20"
      

  • OK [expected CRASH] /html/browsers/windows/embedded-opener-remove-frame.html (#23867)
  • TIMEOUT /html/interaction/focus/the-autofocus-attribute/supported-elements.html (#24145)
    • FAIL [expected TIMEOUT] subtest: Element with tabindex should support autofocus

      assert_equals: expected "SPAN" but got "BODY"
      

    • TIMEOUT [expected NOTRUN] subtest: Non-HTMLElement should not support autofocus

      Test timed out
      

  • TIMEOUT [expected CRASH] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html (#22154)
  • TIMEOUT [expected OK] /html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-same-site.tentative.sub.window.html (#32117)
    • TIMEOUT [expected FAIL] subtest: A same-site unsandboxed iframe navigation does not consume user activation and allows top-level navigation.

      Test timed out
      

  • OK /html/webappapis/dynamic-markup-insertion/document-write/module-delayed.html (#27659)
    • PASS [expected FAIL] subtest: async document.write in a module
  • OK /html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html (#29137)
    • FAIL [expected PASS] subtest: document.write in an imported module

      assert_true: onload must be called expected true got false
      

  • TIMEOUT [expected OK] /resource-timing/nested-context-navigations-iframe.html (#24311)
    • TIMEOUT [expected PASS] subtest: Test that crossorigin iframe navigations are not observable by the parent, even after history navigations by the parent

      Test timed out
      

    • NOTRUN [expected PASS] subtest: Test that cross-site iframe navigations are not observable by the parent, even after history navigations by the parent
    • NOTRUN [expected PASS] subtest: Test that iframe navigations are not observable by the parent
    • NOTRUN [expected PASS] subtest: Test that crossorigin iframe navigations are not observable by the parent
    • NOTRUN [expected PASS] subtest: Test that cross-site iframe navigations are not observable by the parent
    • NOTRUN [expected PASS] subtest: Test that iframe refreshes are not observable by the parent
    • NOTRUN [expected PASS] subtest: Test that crossorigin iframe refreshes are not observable by the parent
    • NOTRUN [expected PASS] subtest: Test that cross-site iframe refreshes are not observable by the parent
  • OK [expected ERROR] /workers/constructors/Worker/Worker-constructor.html (#22991)
Stable unexpected results that are known to be intermittent (13)
  • FAIL [expected PASS] /_mozilla/css/dirty_viewport.html (#13731)
  • FAIL [expected PASS] /_mozilla/css/iframe/hide_and_show.html (#15265)
  • TIMEOUT /fetch/metadata/generated/element-img-environment-change.https.sub.html (#30111)
    • TIMEOUT [expected FAIL] subtest: sec-fetch-site - Cross-site, no attributes

      Test timed out
      

  • TIMEOUT [expected OK] /html/interaction/focus/the-autofocus-attribute/autofocus-dialog.html (#29087)
    • TIMEOUT [expected FAIL] subtest: <dialog>-contained autofocus element gets focused when the dialog is shown

      Test timed out
      

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

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

  • CRASH [expected OK] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html (#24057)
  • CRASH [expected OK] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html (#24066)
  • TIMEOUT [expected OK] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html (#24066)
    • NOTRUN [expected FAIL] subtest: Check that popups from a sandboxed iframe do not escape the sandbox
  • OK [expected TIMEOUT] /html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-cross-site.tentative.sub.window.html (#31754)
    • FAIL [expected TIMEOUT] subtest: A cross-site unsandboxed iframe navigation consumes user activation and disallows top-level navigation.

      promise_test: Unhandled rejection with value: object "TypeError: element.scrollIntoView is not a function"
      

  • OK /html/semantics/forms/form-submission-0/urlencoded2.window.html (#28687)
    • PASS [expected FAIL] subtest: application/x-www-form-urlencoded: 0x00 in name (normal form)
  • OK /html/syntax/parsing/DOMContentLoaded-defer.html (#21550)
    • FAIL [expected PASS] subtest: The end: DOMContentLoaded and defer scripts

      assert_false: DOMContentLoaded should not have fired before executing a task queued from a defer script expected false got true
      

  • TIMEOUT /resource-timing/test_resource_timing.https.html (#25216)
    • FAIL [expected PASS] subtest: PerformanceEntry has correct name, initiatorType, startTime, and duration (img)

      assert_equals: expected 11515136 but got 11514880
      

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

      Test timed out
      

Stable unexpected results (43)
  • FAIL [expected PASS] /css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-015.html
  • PASS [expected FAIL] /css/css-text/line-break/line-break-normal-015b.xht
  • PASS [expected FAIL] /css/css-text/line-break/line-break-strict-015b.xht
  • PASS [expected FAIL] /css/css-text/line-breaking/line-breaking-013.html
  • PASS [expected FAIL] /css/css-text/line-breaking/line-breaking-014.html
  • PASS [expected FAIL] /css/css-text/line-breaking/line-breaking-021.html
  • PASS [expected FAIL] /css/css-text/line-breaking/line-breaking-024.html
  • PASS [expected FAIL] /css/css-text/line-breaking/line-breaking-025.html
  • PASS [expected FAIL] /css/css-text/line-breaking/line-breaking-026.html
  • PASS [expected FAIL] /css/css-text/line-breaking/line-breaking-027.html
  • PASS [expected FAIL] /css/css-text/line-breaking/line-breaking-atomic-010.html
  • PASS [expected FAIL] /css/css-text/line-breaking/line-breaking-atomic-011.html
  • PASS [expected FAIL] /css/css-text/shaping/reference/shaping-001-ref.html
  • PASS [expected FAIL] /css/css-text/shaping/reference/shaping-002-ref.html
  • PASS [expected FAIL] /css/css-text/shaping/reference/shaping-003-ref.html
  • PASS [expected FAIL] /css/css-text/shaping/reference/shaping-008-ref.html
  • PASS [expected FAIL] /css/css-text/shaping/reference/shaping-009-ref.html
  • PASS [expected FAIL] /css/css-text/shaping/reference/shaping-010-ref.html
  • PASS [expected FAIL] /css/css-text/shaping/reference/shaping-011-ref.html
  • PASS [expected FAIL] /css/css-text/shaping/reference/shaping-014-ref.html
  • PASS [expected FAIL] /css/css-text/shaping/reference/shaping-016-ref.html
  • PASS [expected FAIL] /css/css-text/shaping/reference/shaping-020-ref.html
  • PASS [expected FAIL] /css/css-text/shaping/reference/shaping-021-ref.html
  • PASS [expected FAIL] /css/css-text/shaping/reference/shaping-022-ref.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-001.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-002.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-003.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-008.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-014.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-016.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-017.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-018.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-020.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-021.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-022.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-023.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-024.html
  • FAIL [expected PASS] /css/css-text/shaping/shaping-025.html
  • FAIL [expected PASS] /css/css-text/word-break/word-break-manual-001.html
  • PASS [expected FAIL] /css/css-text/word-break/word-break-normal-002.html
  • PASS [expected FAIL] /css/css-text/word-break/word-break-normal-003.html
  • PASS [expected FAIL] /css/css-text/word-break/word-break-normal-th-000.html
  • PASS [expected FAIL] /css/css-text/word-break/word-break-normal-th-001.html

Copy link

⚠️ Try run (#9496542933) failed.

Instead of linebreaking inside each single-font text segment, linebreak
the entire inline formatting context at once. This has several benefits:

1. It allows us to use `icu_segmenter` (already in use from style),
   which is written against a newer version of the Unicode spec --
   preventing breaking emoji clusters.
2. Opens up the possibility of changing the way that linebreaking and
   shaping work -- eventually allowing shaping across inline box
   boundaries and line breaking *after* shaping.

Co-authored-by: Rakhi Sharma <atbrakhi@igalia.com>
@mrobinson mrobinson added the T-linux-wpt-2020 Do a try run of the WPT label Jun 13, 2024
@github-actions github-actions bot removed the T-linux-wpt-2020 Do a try run of the WPT label Jun 13, 2024
Copy link

🔨 Triggering try run (#9498216149) for Linux WPT

Copy link

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

Flaky unexpected result (15)
  • OK /css/css-fonts/variations/at-font-face-font-matching.html (#20684)
    • FAIL [expected PASS] subtest: Matching font-weight: '501' should prefer '503 520' over '500'

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

    • FAIL [expected PASS] subtest: Matching font-style: 'oblique 20deg' should prefer 'oblique 30deg 60deg' over 'oblique 40deg 50deg'

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

    • FAIL [expected PASS] subtest: Matching font-style: 'oblique -10deg' should prefer 'italic' over 'oblique 0deg 10deg'

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

    • FAIL [expected PASS] subtest: Matching font-style: 'oblique -20deg' should prefer 'oblique 0deg' over 'oblique 30deg 60deg'

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

  • TIMEOUT [expected OK] /css/css-transitions/disconnected-element-001.html (#32275)
    • TIMEOUT [expected PASS] subtest: Transitions are canceled when an element is re-parented

      Test timed out
      

    • NOTRUN [expected PASS] subtest: Transitions are canceled when an element is re-parented to the same node
  • TIMEOUT [expected OK] /css/css-transitions/non-rendered-element-002.html (#32338)
    • TIMEOUT [expected PASS] subtest: Transitions on ::before/::after pseudo-elements are canceled when the content property is cleared

      Test timed out
      

  • TIMEOUT /fetch/api/basic/keepalive.any.html (#29536)
    • TIMEOUT [expected PASS] subtest: [keepalive] simple GET request on 'load' [no payload]; setting up

      Test timed out
      

    • NOTRUN [expected TIMEOUT] subtest: [keepalive] simple GET request on 'pagehide' [no payload]; setting up
  • TIMEOUT /fetch/metadata/generated/css-images.sub.tentative.html (#29047)
    • TIMEOUT [expected PASS] subtest: background-image sec-fetch-site - HTTPS downgrade (header not sent)

      Test timed out
      

  • OK /html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html (#28066)
    • FAIL [expected PASS] subtest: 0041 set in href="" targeting a frame and clicked

      assert_equals: expected "A" but got ""
      

  • OK /html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html (#28697)
    • FAIL [expected PASS] subtest: aElement.click() before the load event must NOT replace

      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%20a%20%3D%20document.createElement(%22a%22)%3B%0A%20%20%20%20a.href%20%3D%20%22%2Fcommon%2Fblank.html%3Fthereplacement%22%3B%0A%20%20%20%20document.currentScript.before(a)%3B%0A%20%20%20%20a.click()%3B%0A%20%20"
      

  • TIMEOUT [expected OK] /html/interaction/focus/the-autofocus-attribute/autofocus-dialog.html (#29087)
    • TIMEOUT [expected FAIL] subtest: &lt;dialog&gt;-contained autofocus element gets focused when the dialog is shown

      Test timed out
      

  • CRASH [expected OK] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html (#24057)
  • TIMEOUT [expected OK] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html (#24066)
    • NOTRUN [expected FAIL] subtest: Check that popups from a sandboxed iframe do not escape the sandbox
  • 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/forms/form-submission-0/text-plain.window.html (#28687)
    • PASS [expected FAIL] subtest: text/plain: 0x00 in value (formdata event)
    • PASS [expected FAIL] subtest: text/plain: \n in value (normal form)
  • OK /html/semantics/forms/form-submission-0/urlencoded2.window.html (#28687)
    • PASS [expected FAIL] subtest: application/x-www-form-urlencoded: Basic File test (formdata event)
  • OK /html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html (#29137)
    • FAIL [expected PASS] subtest: document.write in an imported module

      assert_true: onload must be called expected true got false
      

  • ERROR /resource-timing/content-type-parsing.html (#29131)
    • FAIL [expected TIMEOUT] subtest: mime-type 16 : text/html;charset=�gbk

      assert_equals: expected (string) "text/html" but got (undefined) undefined
      

    • TIMEOUT [expected NOTRUN] subtest: mime-type 17 : text/html;charset= gbk

      Test timed out
      

Stable unexpected results that are known to be intermittent (10)
  • TIMEOUT /fetch/metadata/generated/element-img-environment-change.https.sub.html (#30111)
    • TIMEOUT [expected FAIL] subtest: sec-fetch-site - Cross-site, no attributes

      Test timed out
      

  • OK /html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-cross-origin.sub.window.html (#29056)
    • FAIL [expected PASS] subtest: Cross-origin navigation started from unload handler must be ignored

      promise_test: Unhandled rejection with value: object "SecurityError: The operation is insecure."
      

  • OK [expected CRASH] /html/browsers/windows/embedded-opener-remove-frame.html (#23867)
  • TIMEOUT [expected OK] /html/semantics/embedded-content/media-elements/event_timeupdate_noautoplay.html (#25046)
    • NOTRUN [expected PASS] subtest: calling play() on a sufficiently long audio should trigger timeupdate event
    • NOTRUN [expected PASS] subtest: calling play() on a sufficiently long video should trigger timeupdate event
  • OK [expected TIMEOUT] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html (#22647)
    • FAIL [expected TIMEOUT] subtest: Check that popups from a sandboxed iframe escape the sandbox if allow-popups-to-escape-sandbox is used

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

  • TIMEOUT [expected OK] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html (#24066)
    • NOTRUN [expected FAIL] subtest: Check that popups from a sandboxed iframe do not escape the sandbox
  • OK [expected CRASH] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html (#22154)
    • 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/sandbox-top-navigation-cross-site.tentative.sub.window.html (#31754)
    • FAIL [expected TIMEOUT] subtest: A cross-site unsandboxed iframe navigation consumes user activation and disallows top-level navigation.

      promise_test: Unhandled rejection with value: object "TypeError: element.scrollIntoView is not a function"
      

  • OK /html/syntax/parsing/DOMContentLoaded-defer.html (#21550)
    • FAIL [expected PASS] subtest: The end: DOMContentLoaded and defer scripts

      assert_false: DOMContentLoaded should not have fired before executing a task queued from a defer script expected false got true
      

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

      Test timed out
      

Copy link

✨ Try run (#9498216149) succeeded.

@mrobinson mrobinson requested a review from atbrakhi June 13, 2024 11:56
@atbrakhi atbrakhi added this pull request to the merge queue Jun 13, 2024
Merged via the queue into servo:main with commit bae9f6d Jun 13, 2024
38 checks passed
@nicoburns
Copy link
Contributor

This collected inline layout would be the perfect boundary at which to break out an external library. Or indeed build upon an existing library: cosmic-text and parley both already exist at this level of abstraction and already implement things like shaping before line breaking. It seems such a shame to have duplicates of all this low-level text work when everyone needs the same thing.

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.

None yet

3 participants