Browse Source

chore: cherry-pick fe85e04a1797 from chromium (#28798)

* chore: cherry-pick fe85e04a1797 from chromium

* update patches

* update patches

Co-authored-by: Electron Bot <[email protected]>
Co-authored-by: Shelley Vohr <[email protected]>
Co-authored-by: John Kleinschmidt <[email protected]>
Co-authored-by: Cheng Zhao <[email protected]>
Pedro Pontes 4 years ago
parent
commit
1f6e825a9f
2 changed files with 294 additions and 2 deletions
  1. 3 2
      patches/chromium/.patches
  2. 291 0
      patches/chromium/cherry-pick-fe85e04a1797.patch

+ 3 - 2
patches/chromium/.patches

@@ -166,8 +166,9 @@ cherry-pick-6a6361c9f31c.patch
 cherry-pick-012e9baf46c9.patch
 cherry-pick-8c3eb9d1c409.patch
 use_idtype_for_permission_change_subscriptions.patch
+cherry-pick-fe85e04a1797.patch
+m86-lts_add_null_pointer_check_in_renderwidgethostinputeventrouter.patch
+m86-lts_add_weak_pointer_to_rwhier_framesinkidownermap_and.patch
 cherry-pick-406ae3e8a9a8.patch
 cherry-pick-fe20b05a0e5e.patch
 cherry-pick-6b84dc72351b.patch
-m86-lts_add_null_pointer_check_in_renderwidgethostinputeventrouter.patch
-m86-lts_add_weak_pointer_to_rwhier_framesinkidownermap_and.patch

+ 291 - 0
patches/chromium/cherry-pick-fe85e04a1797.patch

@@ -0,0 +1,291 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Ken Rockot <[email protected]>
+Date: Wed, 31 Mar 2021 18:44:06 +0000
+Subject: Don't use BigBuffer for IPC::Message transport
+
+M86 merge conflicts and resolution:
+* ipc/ipc_message_pipe_reader.cc
+  Fixed extra include.
+
+(cherry picked from commit 85bd7c88523545ab0e497d5e7b3e929793813358)
+
+(cherry picked from commit fad3b9ffe7c7ff82909d911c573bd185aa3b3b50)
+
+Fixed: 1184399
+Change-Id: Iddd91ae8d7ae63022b61c96239f5e39261dfb735
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2737012
+Commit-Queue: Ken Rockot <[email protected]>
+Reviewed-by: Daniel Cheng <[email protected]>
+Cr-Original-Original-Commit-Position: refs/heads/master@{#860010}
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2779918
+Auto-Submit: Ken Rockot <[email protected]>
+Reviewed-by: Adrian Taylor <[email protected]>
+Reviewed-by: Alex Gough <[email protected]>
+Commit-Queue: Alex Gough <[email protected]>
+Cr-Original-Commit-Position: refs/branch-heads/4389@{#1597}
+Cr-Original-Branched-From: 9251c5db2b6d5a59fe4eac7aafa5fed37c139bb7-refs/heads/master@{#843830}
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2794488
+Reviewed-by: Victor-Gabriel Savu <[email protected]>
+Reviewed-by: Artem Sumaneev <[email protected]>
+Reviewed-by: Ken Rockot <[email protected]>
+Auto-Submit: Artem Sumaneev <[email protected]>
+Commit-Queue: Artem Sumaneev <[email protected]>
+Cr-Commit-Position: refs/branch-heads/4240@{#1587}
+Cr-Branched-From: f297677702651916bbf65e59c0d4bbd4ce57d1ee-refs/heads/master@{#800218}
+
+diff --git a/ipc/BUILD.gn b/ipc/BUILD.gn
+index 994d45e84502670f544742a3011a8f9381a711bc..281e84df83ae73e8c4716fda1624cb4065342c76 100644
+--- a/ipc/BUILD.gn
++++ b/ipc/BUILD.gn
+@@ -187,10 +187,7 @@ mojom_component("mojom") {
+   output_prefix = "ipc_mojom"
+   macro_prefix = "IPC_MOJOM"
+   sources = [ "ipc.mojom" ]
+-  public_deps = [
+-    "//mojo/public/interfaces/bindings",
+-    "//mojo/public/mojom/base",
+-  ]
++  public_deps = [ "//mojo/public/interfaces/bindings" ]
+ 
+   cpp_typemaps = [
+     {
+@@ -207,10 +204,7 @@ mojom_component("mojom") {
+         "//ipc/message_view.cc",
+         "//ipc/message_view.h",
+       ]
+-      traits_public_deps = [
+-        "//ipc:message_support",
+-        "//mojo/public/cpp/base:shared_typemap_traits",
+-      ]
++      traits_public_deps = [ "//ipc:message_support" ]
+     },
+   ]
+ 
+diff --git a/ipc/ipc.mojom b/ipc/ipc.mojom
+index c66799642fbee2cef3449ff5d52cd5f187808cfe..4606022b28bca1df06ba6eb8eaac025573475b10 100644
+--- a/ipc/ipc.mojom
++++ b/ipc/ipc.mojom
+@@ -4,7 +4,6 @@
+ 
+ module IPC.mojom;
+ 
+-import "mojo/public/mojom/base/big_buffer.mojom";
+ import "mojo/public/interfaces/bindings/native_struct.mojom";
+ 
+ // A placeholder interface type since we don't yet support generic associated
+@@ -14,7 +13,7 @@ interface GenericInterface {};
+ // Typemapped such that arbitrarily large IPC::Message objects can be sent and
+ // received with minimal copying.
+ struct Message {
+-  mojo_base.mojom.BigBuffer buffer;
++  array<uint8> bytes;
+   array<mojo.native.SerializedHandle>? handles;
+ };
+ 
+@@ -24,6 +23,7 @@ interface Channel {
+   SetPeerPid(int32 pid);
+ 
+   // Transmits a classical Chrome IPC message.
++  [UnlimitedSize]
+   Receive(Message message);
+ 
+   // Requests a Channel-associated interface.
+diff --git a/ipc/ipc_message_pipe_reader.cc b/ipc/ipc_message_pipe_reader.cc
+index bdc5dd680d0f9107719765334d0a1ea3e864e200..cbf0363a9d941db1ab34ae835e707b7825447659 100644
+--- a/ipc/ipc_message_pipe_reader.cc
++++ b/ipc/ipc_message_pipe_reader.cc
+@@ -10,6 +10,7 @@
+ 
+ #include "base/bind.h"
+ #include "base/bind_helpers.h"
++#include "base/containers/span.h"
+ #include "base/location.h"
+ #include "base/logging.h"
+ #include "base/macros.h"
+@@ -62,7 +63,9 @@ bool MessagePipeReader::Send(std::unique_ptr<Message> message) {
+   if (!sender_)
+     return false;
+ 
+-  sender_->Receive(MessageView(*message, std::move(handles)));
++  base::span<const uint8_t> bytes(static_cast<const uint8_t*>(message->data()),
++                                  message->size());
++  sender_->Receive(MessageView(bytes, std::move(handles)));
+   DVLOG(4) << "Send " << message->type() << ": " << message->size();
+   return true;
+ }
+@@ -82,11 +85,12 @@ void MessagePipeReader::SetPeerPid(int32_t peer_pid) {
+ }
+ 
+ void MessagePipeReader::Receive(MessageView message_view) {
+-  if (!message_view.size()) {
++  if (message_view.bytes().empty()) {
+     delegate_->OnBrokenDataReceived();
+     return;
+   }
+-  Message message(message_view.data(), message_view.size());
++  Message message(reinterpret_cast<const char*>(message_view.bytes().data()),
++                  message_view.bytes().size());
+   if (!message.IsValid()) {
+     delegate_->OnBrokenDataReceived();
+     return;
+diff --git a/ipc/ipc_mojo_bootstrap_unittest.cc b/ipc/ipc_mojo_bootstrap_unittest.cc
+index 47a7ad79a30165c76041075be10b9be8c13f5e75..b32941da752a54ba7317e439150982adbb9fbcad 100644
+--- a/ipc/ipc_mojo_bootstrap_unittest.cc
++++ b/ipc/ipc_mojo_bootstrap_unittest.cc
+@@ -77,7 +77,9 @@ class PeerPidReceiver : public IPC::mojom::Channel {
+     ASSERT_NE(MessageExpectation::kNotExpected, message_expectation_);
+     received_message_ = true;
+ 
+-    IPC::Message message(message_view.data(), message_view.size());
++    IPC::Message message(
++        reinterpret_cast<const char*>(message_view.bytes().data()),
++        message_view.bytes().size());
+     bool expected_valid =
+         message_expectation_ == MessageExpectation::kExpectedValid;
+     EXPECT_EQ(expected_valid, message.IsValid());
+@@ -196,8 +198,7 @@ MULTIPROCESS_TEST_MAIN_WITH_SETUP(
+ 
+   uint8_t data = 0;
+   sender->Receive(
+-      IPC::MessageView(mojo_base::BigBufferView(base::make_span(&data, 0)),
+-                       base::nullopt /* handles */));
++      IPC::MessageView(base::make_span(&data, 0), base::nullopt /* handles */));
+ 
+   base::RunLoop run_loop;
+   PeerPidReceiver impl(std::move(receiver), run_loop.QuitClosure());
+diff --git a/ipc/message_mojom_traits.cc b/ipc/message_mojom_traits.cc
+index 4aab9248e9ff6ca8e2d7d085ae3e996ac04666e8..d8ad4a2f919b01362e3e2746bfb7f4fae77b059d 100644
+--- a/ipc/message_mojom_traits.cc
++++ b/ipc/message_mojom_traits.cc
+@@ -4,15 +4,13 @@
+ 
+ #include "ipc/message_mojom_traits.h"
+ 
+-#include "mojo/public/cpp/base/big_buffer_mojom_traits.h"
+-
+ namespace mojo {
+ 
+ // static
+-mojo_base::BigBufferView
+-StructTraits<IPC::mojom::MessageDataView, IPC::MessageView>::buffer(
++base::span<const uint8_t>
++StructTraits<IPC::mojom::MessageDataView, IPC::MessageView>::bytes(
+     IPC::MessageView& view) {
+-  return view.TakeBufferView();
++  return view.bytes();
+ }
+ 
+ // static
+@@ -26,14 +24,14 @@ StructTraits<IPC::mojom::MessageDataView, IPC::MessageView>::handles(
+ bool StructTraits<IPC::mojom::MessageDataView, IPC::MessageView>::Read(
+     IPC::mojom::MessageDataView data,
+     IPC::MessageView* out) {
+-  mojo_base::BigBufferView buffer_view;
+-  if (!data.ReadBuffer(&buffer_view))
+-    return false;
++  mojo::ArrayDataView<uint8_t> bytes;
++  data.GetBytesDataView(&bytes);
++
+   base::Optional<std::vector<mojo::native::SerializedHandlePtr>> handles;
+   if (!data.ReadHandles(&handles))
+     return false;
+ 
+-  *out = IPC::MessageView(std::move(buffer_view), std::move(handles));
++  *out = IPC::MessageView(bytes, std::move(handles));
+   return true;
+ }
+ 
+diff --git a/ipc/message_mojom_traits.h b/ipc/message_mojom_traits.h
+index 617ffbe37309946464e3f180a0ebde97f56dbd75..6b5064a12191e9a663519e7b5cb7c5f907a75054 100644
+--- a/ipc/message_mojom_traits.h
++++ b/ipc/message_mojom_traits.h
+@@ -7,10 +7,10 @@
+ 
+ #include <vector>
+ 
++#include "base/containers/span.h"
+ #include "base/optional.h"
+ #include "ipc/ipc.mojom-shared.h"
+ #include "ipc/message_view.h"
+-#include "mojo/public/cpp/base/big_buffer.h"
+ #include "mojo/public/cpp/bindings/struct_traits.h"
+ #include "mojo/public/interfaces/bindings/native_struct.mojom.h"
+ 
+@@ -19,7 +19,7 @@ namespace mojo {
+ template <>
+ class StructTraits<IPC::mojom::MessageDataView, IPC::MessageView> {
+  public:
+-  static mojo_base::BigBufferView buffer(IPC::MessageView& view);
++  static base::span<const uint8_t> bytes(IPC::MessageView& view);
+   static base::Optional<std::vector<mojo::native::SerializedHandlePtr>> handles(
+       IPC::MessageView& view);
+ 
+diff --git a/ipc/message_view.cc b/ipc/message_view.cc
+index 49a80878e7a92cda13105ea0f2fea36ad7ed05e6..39c6608dd507c3ca051b619d966ae521e95fe8e2 100644
+--- a/ipc/message_view.cc
++++ b/ipc/message_view.cc
+@@ -11,16 +11,9 @@ namespace IPC {
+ MessageView::MessageView() = default;
+ 
+ MessageView::MessageView(
+-    const Message& message,
++    base::span<const uint8_t> bytes,
+     base::Optional<std::vector<mojo::native::SerializedHandlePtr>> handles)
+-    : buffer_view_(base::make_span(static_cast<const uint8_t*>(message.data()),
+-                                   message.size())),
+-      handles_(std::move(handles)) {}
+-
+-MessageView::MessageView(
+-    mojo_base::BigBufferView buffer_view,
+-    base::Optional<std::vector<mojo::native::SerializedHandlePtr>> handles)
+-    : buffer_view_(std::move(buffer_view)), handles_(std::move(handles)) {}
++    : bytes_(bytes), handles_(std::move(handles)) {}
+ 
+ MessageView::MessageView(MessageView&&) = default;
+ 
+diff --git a/ipc/message_view.h b/ipc/message_view.h
+index 4ec059bf3639b9c75178f2300d0796b433e1d2ed..c7801bb963f06b03c51ba87bffc307792b592dae 100644
+--- a/ipc/message_view.h
++++ b/ipc/message_view.h
+@@ -11,7 +11,6 @@
+ #include "base/containers/span.h"
+ #include "base/macros.h"
+ #include "ipc/ipc_message.h"
+-#include "mojo/public/cpp/base/big_buffer.h"
+ #include "mojo/public/interfaces/bindings/native_struct.mojom-forward.h"
+ 
+ namespace IPC {
+@@ -20,30 +19,18 @@ class COMPONENT_EXPORT(IPC_MOJOM) MessageView {
+  public:
+   MessageView();
+   MessageView(
+-      const Message& message,
+-      base::Optional<std::vector<mojo::native::SerializedHandlePtr>> handles);
+-  MessageView(
+-      mojo_base::BigBufferView buffer_view,
++      base::span<const uint8_t> bytes,
+       base::Optional<std::vector<mojo::native::SerializedHandlePtr>> handles);
+   MessageView(MessageView&&);
+   ~MessageView();
+ 
+   MessageView& operator=(MessageView&&);
+ 
+-  const char* data() const {
+-    return reinterpret_cast<const char*>(buffer_view_.data().data());
+-  }
+-
+-  uint32_t size() const {
+-    return static_cast<uint32_t>(buffer_view_.data().size());
+-  }
+-
+-  mojo_base::BigBufferView TakeBufferView() { return std::move(buffer_view_); }
+-
++  base::span<const uint8_t> bytes() const { return bytes_; }
+   base::Optional<std::vector<mojo::native::SerializedHandlePtr>> TakeHandles();
+ 
+  private:
+-  mojo_base::BigBufferView buffer_view_;
++  base::span<const uint8_t> bytes_;
+   base::Optional<std::vector<mojo::native::SerializedHandlePtr>> handles_;
+ 
+   DISALLOW_COPY_AND_ASSIGN(MessageView);