Skip to content

Conversation

@kkoyung
Copy link
Member

@kkoyung kkoyung commented Oct 4, 2025

The patch implements Compression (https://compression.spec.whatwg.org/) with the compression and decompression provided by the flate2 crate (https://crates.io/crates/flate2).

flate2 supports several different backends, controlled through the crate's features. By default, it uses miniz_oxide (https://crates.io/crates/miniz_oxide).

flate2 provides three modules read, write and bufread which work on instances of the std::io::Read, std::io::Write and std::io::Bufread traits, respectively. The write module is chosen in the patch since it matches the streaming model in the specification.

Testing: Enable WPT for Compression API, and introduce WPT expectation.

@kkoyung kkoyung requested a review from gterzian as a code owner October 4, 2025 08:22
@servo-highfive servo-highfive added the S-awaiting-review There is new code that needs to be reviewed. label Oct 4, 2025
@kkoyung kkoyung added the T-linux-wpt Do a try run of the WPT label Oct 4, 2025
@github-actions github-actions bot removed the T-linux-wpt Do a try run of the WPT label Oct 4, 2025
@github-actions
Copy link

github-actions bot commented Oct 4, 2025

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

@github-actions
Copy link

github-actions bot commented Oct 4, 2025

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

Flaky unexpected result (35)
  • OK /IndexedDB/idbfactory_open.any.html
    • FAIL [expected PASS] subtest: Calling open() with version argument 1.5 should not throw.

      assert_equals: version expected 1 but got 9007199254740991
      

  • FAIL [expected PASS] /_mozilla/css/iframe/hide_and_show.html (#15265)
  • FAIL [expected PASS] /_mozilla/gfx-rs-gecko/descriptor-ranges.html (#23258)
  • TIMEOUT [expected OK] /_webgl/conformance/reading/read-pixels-test.html
  • 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/CSS2/floats-clear/float-non-replaced-width-007.xht
  • FAIL [expected PASS] /css/CSS2/text/white-space-processing-043.xht
  • FAIL [expected PASS] /css/WOFF2/blocks-extraneous-data-007.xht
  • FAIL [expected PASS] /css/WOFF2/metadatadisplay-schema-description-024.xht
  • FAIL [expected PASS] /css/WOFF2/tabledata-decompressed-length-004.xht
  • OK /css/css-cascade/layer-cssom-order-reverse.html (#36094)
    • FAIL [expected PASS] subtest: Delete layer invalidates @font-face

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

  • OK /css/css-cascade/layer-font-face-override.html (#35935)
    • FAIL [expected PASS] subtest: @font-face override update with appended sheet 1

      assert_equals: expected "80px" but got "41.45px"
      

    • FAIL [expected PASS] subtest: @font-face override update with appended sheet 2

      assert_equals: expected "80px" but got "41.45px"
      

  • FAIL [expected PASS] /css/css-fonts/downloadable-font-scoped-to-document.html (#38691)
  • FAIL [expected PASS] /css/css-fonts/font-palette-23b.html
  • OK /css/css-fonts/generic-family-keywords-001.html (#37467)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(nastaliq)
  • OK /css/css-fonts/generic-family-keywords-003.html (#38994)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted serif (drawing text in a canvas)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted ui-rounded (drawing text in a canvas)
  • PASS [expected FAIL] /css/css-fonts/system-ui-ja.html
  • PASS [expected FAIL] /css/css-grid/grid-items/grid-auto-margin-and-replaced-item-001.html (#37162)
  • FAIL [expected PASS] /css/css-text/i18n/css3-text-line-break-opclns-226.html
  • OK /css/css-text/i18n/other-lang/css-text-line-break-de-po-normal.html
    • FAIL [expected PASS] subtest: 2033 DOUBLE PRIME may NOT appear at line start if de and normal

      assert_approx_equals: expected 82 +/- 1 but got 80
      

  • OK /custom-elements/form-associated/ElementInternals-setFormValue.html (#29174)
    • PASS [expected FAIL] subtest: Single value - name is missing
  • OK /html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html (#28681)
    • FAIL [expected PASS] subtest: load & pageshow events do not fire on contentWindow of <iframe> element created with src='about:blank'

      assert_unreached: load should not be fired Reached unreachable code
      

  • OK /html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin-fragment.html (#20768)
    • FAIL [expected PASS] subtest: Tests that a fragment navigation in the unload handler will not block the initial navigation

      assert_equals: expected "" but got "#fragment"
      

  • ERROR [expected OK] /html/semantics/embedded-content/media-elements/event_timeupdate_noautoplay.html (#25046)
  • OK /html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-nav-location-replace-set-src.html (#32697)
    • PASS [expected FAIL] subtest: Navigating iframe loading='lazy' and then setting src: location.replace
  • OK [expected CRASH] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html (#22647)
  • CRASH [expected OK] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html (#22154)
  • OK /html/webappapis/user-prompts/print-during-unload.html (#35944)
    • 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"])
      

  • OK /preload/preload-xhr.html (#39092)
    • FAIL [expected PASS] subtest: Make an XHR request immediately after creating link rel=preload.

      assert_equals: resources/dummy.xml?token=70d2d096-6b77-4977-a626-5fe7cb80d1e2 expected 1 but got 0
      

  • FAIL [expected PASS] /shadow-dom/shadow-style-invalidation-vw-units.html (#38468)
  • OK /trusted-types/trusted-types-navigation.html?26-30 (#38807)
    • FAIL [expected PASS] subtest: Navigate a window via form-submission with javascript:-urls in report-only mode.

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

  • OK /webdriver/tests/classic/dismiss_alert/dismiss.py (#39098)
    • FAIL [expected PASS] subtest: test_dismiss_in_popup_window

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

  • OK /webdriver/tests/classic/find_element_from_shadow_root/find.py
    • FAIL [expected PASS] subtest: test_null_parameter_value

      webdriver.error.NoSuchElementException: no such element (404)
      

  • TIMEOUT [expected OK] /webdriver/tests/classic/send_alert_text/send.py
  • OK [expected TIMEOUT] /webmessaging/without-ports/018.html (#24485)
    • PASS [expected TIMEOUT] subtest: origin of the script that invoked the method, javascript:
Stable unexpected results that are known to be intermittent (25)
  • OK /IndexedDB/idbcursor-continuePrimaryKey-exceptions.any.html (#39277)
    • PASS [expected FAIL] subtest: IDBCursor continuePrimaryKey() on object store cursor
  • OK /IndexedDB/idbcursor-continuePrimaryKey-exceptions.any.worker.html (#39277)
    • FAIL [expected PASS] subtest: IDBCursor continuePrimaryKey() on object store cursor

      assert_throws_dom: continuePrimaryKey() should throw if source is not an index function "function() {
              cursor.continuePrimaryKey(2, 2);
            }" threw object "TypeError: cursor.continuePrimaryKey is not a function" that is not a DOMException InvalidAccessError: property "code" is equal to undefined, expected 15
      

  • OK /IndexedDB/idbobjectstore_get.any.html (#38942)
    • PASS [expected FAIL] subtest: Attempts to retrieve a record that doesn't exist
  • OK /IndexedDB/idbobjectstore_getAll.any.html (#39276)
    • PASS [expected FAIL] subtest: Get all values with transaction.commit()
  • OK /IndexedDB/idbobjectstore_getAll.any.worker.html (#39400)
    • PASS [expected FAIL] subtest: Get all values with transaction.commit()
  • OK /IndexedDB/key-conversion-exceptions.any.html (#39305)
    • FAIL [expected PASS] subtest: IDBCursor continue() method with throwing/invalid keys

      assert_throws_exactly: key conversion with throwing getter should rethrow function "() => {
            receiver[method](key);
          }" threw object "TypeError: receiver[method] is not a function" but we expected it to throw object "getter: throwing from getter"
      

  • OK /IndexedDB/key-conversion-exceptions.any.worker.html (#39284)
    • FAIL [expected PASS] subtest: IDBCursor continue() method with throwing/invalid keys

      assert_throws_exactly: key conversion with throwing getter should rethrow function "() => {
            receiver[method](key);
          }" threw object "TypeError: receiver[method] is not a function" but we expected it to throw object "getter: throwing from getter"
      

  • FAIL [expected PASS] /_mozilla/mozilla/sslfail.html (#10760)
  • OK /_webgl/conformance/rendering/texture-switch-performance.html (#23384)
    • FAIL [expected PASS] subtest: WebGL test #0

      assert_true: Texture switching significantly hurt performance - achieved 88 frames in 2.006 seconds (0.52 times baseline performance) expected true got false
      

  • OK /_webgl/conformance2/rendering/texture-switch-performance.html (#23384)
    • FAIL [expected PASS] subtest: WebGL test #0

      assert_true: Texture switching significantly hurt performance - achieved 95 frames in 2.004 seconds (0.56 times baseline performance) expected true got false
      

  • OK /content-security-policy/frame-ancestors/frame-ancestors-path-ignored.window.html (#36468)
    • PASS [expected FAIL] subtest: A 'frame-ancestors' CSP directive with a URL that includes a path should be ignored.
  • TIMEOUT [expected FAIL] /dom/xslt/large-cdata.html (#38029)
  • TIMEOUT /fetch/fetch-later/send-on-deactivate.https.window.html (#39628)
    • FAIL [expected TIMEOUT] subtest: fetchLater() sends on navigating away a page w/o BFCache.

      assert_equals: expected (object) object "[object Object]" but got (undefined) undefined
      

  • OK /fetch/metadata/generated/css-font-face.https.sub.tentative.html (#32732)
    • PASS [expected FAIL] subtest: sec-fetch-user
    • PASS [expected FAIL] subtest: sec-fetch-storage-access - Same site
  • 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."
      

  • 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/urlencoded2.window.html (#28687)
    • FAIL [expected PASS] subtest: application/x-www-form-urlencoded: Basic test (normal form)

      assert_equals: expected "basic=test" but got ""
      

  • CRASH [expected OK] /html/semantics/forms/the-fieldset-element/disabled-003.html (#31730, #39631)
  • OK /preload/preload-error.sub.html (#37177)
    • PASS [expected FAIL] subtest: success (fetch): main
    • PASS [expected FAIL] subtest: CORS (fetch): main
  • TIMEOUT /preload/preload-resource-match.https.html (#38088)
    • PASS [expected TIMEOUT] subtest: Loading module (use-credentials) with link (anonymous) should discard the preloaded response
    • PASS [expected NOTRUN] subtest: Loading module (use-credentials) with link (use-credentials) should reuse the preloaded response
    • PASS [expected NOTRUN] subtest: Loading style (same-origin) with link (same-origin) should reuse the preloaded response
    • PASS [expected NOTRUN] subtest: Loading style (no-cors) with link (no-cors) should reuse the preloaded response
    • PASS [expected NOTRUN] subtest: Loading style (no-cors) with link (anonymous) should discard the preloaded response
    • PASS [expected NOTRUN] subtest: Loading style (no-cors) with link (use-credentials) should discard the preloaded response
    • PASS [expected NOTRUN] subtest: Loading style (anonymous) with link (no-cors) should discard the preloaded response
    • PASS [expected NOTRUN] subtest: Loading style (anonymous) with link (anonymous) should reuse the preloaded response
    • PASS [expected NOTRUN] subtest: Loading style (anonymous) with link (use-credentials) should discard the preloaded response
    • PASS [expected NOTRUN] subtest: Loading style (use-credentials) with link (no-cors) should discard the preloaded response
    • And 1 more unexpected results...
  • OK /trusted-types/trusted-types-navigation.html?01-05 (#38975)
    • PASS [expected FAIL] subtest: Navigate a window via anchor with javascript:-urls in enforcing mode.
    • PASS [expected FAIL] subtest: Navigate a frame via anchor with javascript:-urls in enforcing mode.
  • OK /trusted-types/trusted-types-navigation.html?21-25 (#38997)
    • FAIL [expected PASS] subtest: Navigate a window via form-submission with javascript:-urls in enforcing mode.

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

  • OK /webdriver/tests/classic/take_element_screenshot/scroll_into_view.py (#39306)
    • FAIL [expected PASS] subtest: test_scroll_into_view

      AssertionError: assert 'iVBORw0KGgoAAAANSUhEUgAAAI4AAAARCAYAAAALzZSeAAACoUlEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a/+3d/9nV/8xV+cq656Uf393/89lauu+tcjeKZxHHmv93ovtre3efEXf3GuuuqFoPJMP/MzP8Of/dmfcccdd3Ds2DGuuuqFoPJMf/3Xf80rvdIrcezYMa666l9A5ZkuXbrEbDbjqqteBATAm7/5m/P1X//1fMu3fAuS+PRP/3QA7rvvPt71Xd+Va665hmuvvZb3eq/34sKFC9zvvvvu413f9V255ppruPbaa3mv93ovLly4wFX/5xEAP//zP8+HfdiH8UEf9EHY5vM///MBeMd3fEcuXbrEX//1X/Pnf/7n3H777bzHe7wH93vHd3xHLl26xF//9V/z53/+59x+++28x3u8B1f9n0flBXja057G7/zO7/D0pz+dG264AYCv/dqv5SVe4iW4++67WS6X/M7v/A5Pf/rTueGGGwD42q/9Wl7iJV6Cu+++m+uvv56r/s8ieAFuv/12aq08+MEP5n4Pf/jDAbj99tu5/fbbqbXy4Ac/mPs9/OEPB+D222/nqv/TCF6Am2++mWmauO2227jfU57yFABuvvlmbr75ZqZp4rbbbuN+T3nKUwC4+eabuer/NIIX4KEPfSiv+ZqvyYd92Idx9913c/vtt/ORH/mRvMmbvAnXX389D33oQ3nN13xNPuzDPoy7776b22+/nY/8yI/kTd7kTbj++uu56v80ghfiR37kR9ja2uIlX/IlebmXezluvPFGvvd7v5f7/ciP/AhbW1u85Eu+JC/3ci/HjTfeyPd+7/dy1f956O/+7u/84i/+4lx11Yvq7//+76lcddW/HpWrrvrXowL8/d//PVdd9a/APwJaQbF56DF3BwAAAABJRU5ErkJggg==' == 'iVBORw0KGgoAAAANSUhEUgAAAI4AAAARCAYAAAALzZSeAAACoUlEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a/+3d/9nV/8xV+cq656Uf393/89wTON48h7vdd7sb29zYu/+Itz1VUvBJVn+pmf+Rn+7M/+jDvuuINjx45x1VUvBJVn+uu//mte6ZVeiWPHjnHVVf8CKs906dIlZrMZV131IiAA3vzN35yv//qv51u+5VuQxKd/+qcDcN999/Gu7/quXHPNNVx77bW813u9FxcuXOB+9913H+/6ru/KNddcw7XXXst7vdd7ceHCBa76P48A+Pmf/3k+7MM+jA/6oA/CNp//+Z8PwDu+4zty6dIl/vqv/5o///M/5/bbb+c93uM9uN87vuM7cunSJf76r/+aP//zP+f222/nPd7jPbjq/zwqL8DTnvY0fud3foenP/3p3HDDDQB87dd+LS/xEi/B3XffzXK55Hd+53d4+tOfzg033ADA137t1/ISL/ES3H333Vx//fVc9X8WwQtw++23U2vlwQ9+MPd7+MMfDsDtt9/O7bffTq2VBz/4wdzv4Q9/OAC33347V/2fRvAC3HzzzUzTxG233cb9nvKUpwBw8803c/PNNzNNE7fddhv3e8pTngLAzTffzFX/pxG8AA996EN5zdd8TT7swz6Mu+++m9tvv52P/MiP5E3e5E24/vrreehDH8prvuZr8mEf9mHcfffd3H777XzkR34kb/Imb8L111/PVf+nEbwQP/IjP8LW1hYv+ZIvycu93Mtx44038r3f+73c70d+5EfY2triJV/yJXm5l3s5brzxRr73e7+Xq/7PQ3/3d3/nF3/xF+eqq15Uf//3f0/lqqv+9ahcddW/HpWrrvrXowL8/d//PVdd9a/APwJma7F5RQE/xgAAAABJRU5ErkJggg=='
      

  • OK [expected ERROR] /webxr/render_state_update.https.html (#27535)
  • OK [expected ERROR] /workers/baseurl/alpha/sharedworker-in-worker.html (#21315)
Stable unexpected results (2)
  • OK /_mozilla/mozilla/interfaces.https.html
    • FAIL [expected PASS] subtest: Interfaces exposed on the window

      assert_true: If this is failing: DANGER, are you sure you want to expose the new interface DecompressionStream to all webpages as a property on the global? expected true got false
      

  • OK /_mozilla/mozilla/interfaces.worker.html
    • FAIL [expected PASS] subtest: interfaces

      assert_true: If this is failing: DANGER, are you sure you want to expose the new interface DecompressionStream to all webpages as a property on the global? expected true got false
      

@github-actions
Copy link

github-actions bot commented Oct 4, 2025

⚠️ Try run (#18242461313) failed.

Copy link
Contributor

@TimvdLippe TimvdLippe left a comment

Choose a reason for hiding this comment

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

Did a quick review. Given that almost all WPT tests pass, I think it is pretty much complete. Only one remaining question regarding the bad chunks.

@servo-highfive servo-highfive added S-awaiting-review There is new code that needs to be reviewed. and removed S-awaiting-review There is new code that needs to be reviewed. labels Oct 4, 2025
Copy link
Contributor

@TimvdLippe TimvdLippe left a comment

Choose a reason for hiding this comment

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

Last nit, but this still LGTM

@servo-highfive servo-highfive added S-awaiting-review There is new code that needs to be reviewed. and removed S-awaiting-review There is new code that needs to be reviewed. labels Oct 4, 2025
reflector_: Reflector,

/// <https://streams.spec.whatwg.org/#generictransformstream>
transform: Dom<TransformStream>,
Copy link
Member

Choose a reason for hiding this comment

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

Happy to see the stream work give results and make it easier to implement other browser APIs.

Copy link
Member Author

Choose a reason for hiding this comment

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

The stream work provides a great foundation for implementing this API. The TextEncoderStream and TextDecoderStream implementation also serve as good references for me. It turned out to be easier than I expected.

Copy link
Member

Choose a reason for hiding this comment

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

// NOTE: In our implementation, the enum type of context already indicates the format.
let mut decompressor = ds.context.borrow_mut();
let offset = decompressor.get_ref().len();
let is_ended = decompressor
Copy link
Member

Choose a reason for hiding this comment

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

you compute is_ended before calling try_finish, but you enqueue before checking !is_ended. That can emit bytes and then throw?!

Copy link
Member Author

@kkoyung kkoyung Oct 5, 2025

Choose a reason for hiding this comment

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

I also think it is weird, but the spec does emit bytes no matter whether the test passes or not.
https://compression.spec.whatwg.org/#decompress-flush-and-enqueue

p.s. I made a little change in the new commit. I flush and copy the buffer before doing the test. This guarantees the extra bytes won't go into the result. However, it does not resolve the weirdness here.
update: I reverted it, since this could turn a truncated stream (missing one zero byte at the end) into a valid stream.

// Step 6.1 If this throws an exception e,
let realm = enter_realm(self);
let p = Promise::new_in_current_realm((&realm).into(), can_gc);
// return a promise rejected with e.
Copy link
Member

@Taym95 Taym95 Oct 5, 2025

Choose a reason for hiding this comment

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

can you use Promise::new_rejected here?

Copy link
Member Author

Choose a reason for hiding this comment

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

Promise::new_rejected takes value: impl SafeToJSValConvertible, but e is a dom::bindings::error::Error, which currently does not implement this trait. If we use Promise::new_rejected, we still need extra few lines to do the conversion.

@kkoyung
Copy link
Member Author

kkoyung commented Oct 19, 2025

Rebased to resolve merge conflict. Also appended a fix for passing new WPT tests from upstream.

Cargo.toml Outdated
encoding_rs = "0.8"
env_logger = "0.11"
euclid = "0.22"
flate2 = "1.1.2"

Choose a reason for hiding this comment

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

The specificity was lower in net

Suggested change
flate2 = "1.1.2"
flate2 = "1.1"

Copy link
Member Author

Choose a reason for hiding this comment

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

Thanks for pointing out. It's now pinned to 1.1.

@TimvdLippe
Copy link
Contributor

This PR still LGTM. @Taym95 do you have any further review feedback or does somebody else wants to take a look? If not, then I would opt for merging this PR.

@jdm
Copy link
Member

jdm commented Oct 26, 2025

Let's press the button!

@jdm jdm added this pull request to the merge queue Oct 26, 2025
@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 Oct 26, 2025
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Oct 26, 2025
@servo-highfive servo-highfive added S-tests-failed The changes caused existing tests to fail. and removed S-awaiting-merge The PR is in the process of compiling and running tests on the automated CI. labels Oct 26, 2025
@TimvdLippe
Copy link
Contributor

Seems like the recent changes to CanGc on main clash with this PR. Can you rebase it so we can click the button again?

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
This helps passing WPT tests from
`compression/decompression-extra-input.any.js`.

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>


Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
@servo-highfive servo-highfive removed the S-tests-failed The changes caused existing tests to fail. label Oct 27, 2025
@kkoyung
Copy link
Member Author

kkoyung commented Oct 27, 2025

Rebased with 2 new commits to resolve the merge error

@TimvdLippe TimvdLippe added this pull request to the merge queue Oct 27, 2025
@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 Oct 27, 2025
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Oct 27, 2025
@servo-highfive servo-highfive added S-tests-failed The changes caused existing tests to fail. and removed S-awaiting-merge The PR is in the process of compiling and running tests on the automated CI. labels Oct 27, 2025
@jdm
Copy link
Member

jdm commented Oct 27, 2025

We will need to update the exposed interfaces test files to include the new DecompressionStream interface. Don't forget to use mach update-manifestafterwards!

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
@servo-highfive servo-highfive removed the S-tests-failed The changes caused existing tests to fail. label Oct 27, 2025
Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
@jdm jdm enabled auto-merge October 27, 2025 07:26
@jdm jdm added this pull request to the merge queue Oct 27, 2025
@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 Oct 27, 2025
@yezhizhen yezhizhen removed this pull request from the merge queue due to a manual request Oct 27, 2025
@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 Oct 27, 2025
@yezhizhen
Copy link
Member

https://github.com/servo/servo/actions/runs/18833881485/job/53730445402

Re-queuing this, as all tests are failing.

@yezhizhen yezhizhen added this pull request to the merge queue Oct 27, 2025
@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 Oct 27, 2025
Merged via the queue into servo:main with commit e061e5c Oct 27, 2025
33 checks passed
@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 Oct 27, 2025
@kkoyung kkoyung deleted the compression branch October 27, 2025 12:48
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.

7 participants