Browse Source

chore: cherry-pick 1 changes from 1-M127 (#43167)

* chore: [30-x-y] cherry-pick 1 changes from 1-M127

* d9f7652c867c from chromium

* chore: e patches all

to make GH actions happy

---------

Co-authored-by: Charles Kerr <[email protected]>
Pedro Pontes 8 months ago
parent
commit
b91a920128
2 changed files with 160 additions and 0 deletions
  1. 1 0
      patches/chromium/.patches
  2. 159 0
      patches/chromium/cherry-pick-d9f7652c867c.patch

+ 1 - 0
patches/chromium/.patches

@@ -144,3 +144,4 @@ cherry-pick-c5dd8839bfaf.patch
 cherry-pick-38e4483e47f9.patch
 cherry-pick-1b9040817119.patch
 cherry-pick-99cafbf4b4b9.patch
+cherry-pick-d9f7652c867c.patch

+ 159 - 0
patches/chromium/cherry-pick-d9f7652c867c.patch

@@ -0,0 +1,159 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Adam Rice <[email protected]>
+Date: Thu, 25 Jul 2024 05:28:45 +0000
+Subject: Don't allocate WebTransportCloseInfo on stack
+
+blink::WebTransport::OnClosed() was allocating a WebTransportCloseInfo
+object on the stack. Since it is a garbage-collected object, this is
+wrong. Allocate it with MakeGarbageCollected<>() instead.
+
+(cherry picked from commit 84c1481d8a8d5e7f51316b648d1bf71f2ae52122)
+
+Fixed: 352872238
+Change-Id: I83484021d5f3f6d49d3c222c8f2dc34219f2d240
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5725413
+Commit-Queue: Nidhi Jaju <[email protected]>
+Reviewed-by: Nidhi Jaju <[email protected]>
+Auto-Submit: Adam Rice <[email protected]>
+Cr-Original-Commit-Position: refs/heads/main@{#1331525}
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5740536
+Commit-Queue: Adam Rice <[email protected]>
+Cr-Commit-Position: refs/branch-heads/6478@{#1848}
+Cr-Branched-From: e6143acc03189c5e52959545b110d6d17ecd5286-refs/heads/main@{#1300313}
+
+diff --git a/third_party/blink/renderer/modules/webtransport/web_transport.cc b/third_party/blink/renderer/modules/webtransport/web_transport.cc
+index bcfa17448f3051dc2b292aa3e19dbfb915cf692a..4922359605b53c6b9ac5339f6ce6b3613bfe275b 100644
+--- a/third_party/blink/renderer/modules/webtransport/web_transport.cc
++++ b/third_party/blink/renderer/modules/webtransport/web_transport.cc
+@@ -1092,17 +1092,17 @@ void WebTransport::OnClosed(
+ 
+   latest_stats_ = ConvertStatsFromMojom(std::move(final_stats));
+ 
+-  WebTransportCloseInfo idl_close_info;
++  auto* idl_close_info = MakeGarbageCollected<WebTransportCloseInfo>();
+   if (close_info) {
+-    idl_close_info.setCloseCode(close_info->code);
+-    idl_close_info.setReason(close_info->reason);
++    idl_close_info->setCloseCode(close_info->code);
++    idl_close_info->setReason(close_info->reason);
+   }
+ 
+   v8::Local<v8::Value> error = WebTransportError::Create(
+       isolate, /*stream_error_code=*/std::nullopt, "The session is closed.",
+       WebTransportError::Source::kSession);
+ 
+-  Cleanup(&idl_close_info, error, /*abruptly=*/false);
++  Cleanup(idl_close_info, error, /*abruptly=*/false);
+ }
+ 
+ void WebTransport::OnOutgoingStreamClosed(uint32_t stream_id) {
+diff --git a/third_party/blink/renderer/modules/webtransport/web_transport_test.cc b/third_party/blink/renderer/modules/webtransport/web_transport_test.cc
+index 01f5a0fca58d88e342298e03231dd2263ca5a678..fc05ad637888df648f8692683f8a626c8d6a38dd 100644
+--- a/third_party/blink/renderer/modules/webtransport/web_transport_test.cc
++++ b/third_party/blink/renderer/modules/webtransport/web_transport_test.cc
+@@ -1959,6 +1959,21 @@ TEST_F(WebTransportTest, OnClosed) {
+   EXPECT_EQ(close_info->reason(), "reason");
+ }
+ 
++// Regression test for https://crbug.com/347710668.
++TEST_F(WebTransportTest, ClosedAccessorCalledAfterOnClosed) {
++  V8TestingScope scope;
++
++  auto* web_transport =
++      CreateAndConnectSuccessfully(scope, "https://example.com");
++
++  web_transport->OnClosed(
++      network::mojom::blink::WebTransportCloseInfo::New(99, "reason"),
++      network::mojom::blink::WebTransportStats::New());
++
++  // If this doesn't crash then the test passed.
++  EXPECT_FALSE(web_transport->closed(scope.GetScriptState()).IsEmpty());
++}
++
+ TEST_F(WebTransportTest, OnClosedWithNull) {
+   V8TestingScope scope;
+   v8::Isolate* isolate = scope.GetIsolate();
+diff --git a/third_party/blink/web_tests/external/wpt/webtransport/close.https.any-expected.txt b/third_party/blink/web_tests/external/wpt/webtransport/close.https.any-expected.txt
+index d4e43edbd19a9eb16f3384c1c95e5c3d1a2f2619..09e2bbddaa40e1cfc192d3adbeb9538e7aeaebfe 100644
+--- a/third_party/blink/web_tests/external/wpt/webtransport/close.https.any-expected.txt
++++ b/third_party/blink/web_tests/external/wpt/webtransport/close.https.any-expected.txt
+@@ -1,4 +1,5 @@
+ This is a testharness.js-based test.
++Harness Error. harness_status.status = 1 , harness_status.message = Unhandled rejection: promise_rejects_dom: function "function() { throw e }" threw object "NetworkError: Failed to execute 'createBidirectionalStream' on 'WebTransport': No connection." that is not a DOMException InvalidStateError: property "code" is equal to 19, expected 11
+ [FAIL] opening unidirectional stream before ready
+   promise_test: Unhandled rejection with value: object "NetworkError: Failed to execute 'createUnidirectionalStream' on 'WebTransport': No connection."
+ [FAIL] opening bidirectional stream before ready
+diff --git a/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.js b/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.js
+index 0d8579584fbb21e74595588f663ef21c3b028c63..d69967ba70bb716f8664f973fe83d4158ba6da89 100644
+--- a/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.js
++++ b/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.js
+@@ -163,3 +163,24 @@ promise_test(async t => {
+   const wt = new WebTransport(webtransport_url('server-close.py'));
+   promise_rejects_dom(t, "InvalidStateError", wt.createBidirectionalStream());
+ }, 'server initiated closure while opening bidirectional stream before ready');
++
++// Regression test for https://crbug.com/347710668.
++promise_test(async t => {
++  const wt = new WebTransport(webtransport_url('server-read-then-close.py'));
++  add_completion_callback(() => wt.close());
++  await wt.ready;
++
++  const bidi_reader = wt.incomingBidirectionalStreams.getReader();
++  const { value: bidi } = await bidi_reader.read();
++
++  bidi.writable.getWriter().write(new TextEncoder().encode('some data'));
++  const reader = bidi.readable.getReader();
++  await reader.closed.catch(t.step_func(
++      e => assert_true(e instanceof WebTransportError)));
++
++  // The WebTransport session will already be closed.
++  const {reason, closeCode} = await wt.closed;
++
++  assert_equals(reason, '', 'reason should be default');
++  assert_equals(closeCode, 0, 'closeCode should be default');
++}, 'reading closed property after close should work');
+diff --git a/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.serviceworker-expected.txt b/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.serviceworker-expected.txt
+index d4e43edbd19a9eb16f3384c1c95e5c3d1a2f2619..09e2bbddaa40e1cfc192d3adbeb9538e7aeaebfe 100644
+--- a/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.serviceworker-expected.txt
++++ b/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.serviceworker-expected.txt
+@@ -1,4 +1,5 @@
+ This is a testharness.js-based test.
++Harness Error. harness_status.status = 1 , harness_status.message = Unhandled rejection: promise_rejects_dom: function "function() { throw e }" threw object "NetworkError: Failed to execute 'createBidirectionalStream' on 'WebTransport': No connection." that is not a DOMException InvalidStateError: property "code" is equal to 19, expected 11
+ [FAIL] opening unidirectional stream before ready
+   promise_test: Unhandled rejection with value: object "NetworkError: Failed to execute 'createUnidirectionalStream' on 'WebTransport': No connection."
+ [FAIL] opening bidirectional stream before ready
+diff --git a/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.sharedworker-expected.txt b/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.sharedworker-expected.txt
+index d4e43edbd19a9eb16f3384c1c95e5c3d1a2f2619..09e2bbddaa40e1cfc192d3adbeb9538e7aeaebfe 100644
+--- a/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.sharedworker-expected.txt
++++ b/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.sharedworker-expected.txt
+@@ -1,4 +1,5 @@
+ This is a testharness.js-based test.
++Harness Error. harness_status.status = 1 , harness_status.message = Unhandled rejection: promise_rejects_dom: function "function() { throw e }" threw object "NetworkError: Failed to execute 'createBidirectionalStream' on 'WebTransport': No connection." that is not a DOMException InvalidStateError: property "code" is equal to 19, expected 11
+ [FAIL] opening unidirectional stream before ready
+   promise_test: Unhandled rejection with value: object "NetworkError: Failed to execute 'createUnidirectionalStream' on 'WebTransport': No connection."
+ [FAIL] opening bidirectional stream before ready
+diff --git a/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.worker-expected.txt b/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.worker-expected.txt
+index d4e43edbd19a9eb16f3384c1c95e5c3d1a2f2619..09e2bbddaa40e1cfc192d3adbeb9538e7aeaebfe 100644
+--- a/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.worker-expected.txt
++++ b/third_party/blink/web_tests/external/wpt/webtransport/close.https.any.worker-expected.txt
+@@ -1,4 +1,5 @@
+ This is a testharness.js-based test.
++Harness Error. harness_status.status = 1 , harness_status.message = Unhandled rejection: promise_rejects_dom: function "function() { throw e }" threw object "NetworkError: Failed to execute 'createBidirectionalStream' on 'WebTransport': No connection." that is not a DOMException InvalidStateError: property "code" is equal to 19, expected 11
+ [FAIL] opening unidirectional stream before ready
+   promise_test: Unhandled rejection with value: object "NetworkError: Failed to execute 'createUnidirectionalStream' on 'WebTransport': No connection."
+ [FAIL] opening bidirectional stream before ready
+diff --git a/third_party/blink/web_tests/external/wpt/webtransport/handlers/server-read-then-close.py b/third_party/blink/web_tests/external/wpt/webtransport/handlers/server-read-then-close.py
+new file mode 100644
+index 0000000000000000000000000000000000000000..7f992e0dcca3ae62277cac0fa39355fce3e57be0
+--- /dev/null
++++ b/third_party/blink/web_tests/external/wpt/webtransport/handlers/server-read-then-close.py
+@@ -0,0 +1,9 @@
++def session_established(session):
++    stream_id = session.create_bidirectional_stream()
++
++
++def stream_data_received(session,
++                         stream_id: int,
++                         data: bytes,
++                         stream_ended: bool):
++    session.close(None)