Browse Source

chore: bump chromium to 7dff37844cb3 (master) (#18059)

Electron Bot 6 years ago
parent
commit
2616911f7a
77 changed files with 1636 additions and 294 deletions
  1. 7 1
      BUILD.gn
  2. 1 1
      DEPS
  3. 3 3
      atom/browser/api/atom_api_app.cc
  4. 10 4
      atom/browser/api/atom_api_auto_updater.cc
  5. 8 6
      atom/browser/api/atom_api_web_contents.cc
  6. 1 1
      atom/browser/api/atom_api_web_contents.h
  7. 4 1
      atom/browser/api/event.cc
  8. 7 2
      atom/browser/api/event_emitter.h
  9. 2 2
      atom/browser/browser_win.cc
  10. 1 1
      atom/browser/io_thread.cc
  11. 1 1
      atom/browser/net/atom_cert_verifier.cc
  12. 1 1
      atom/browser/notifications/win/notification_presenter_win.cc
  13. 1 0
      atom/browser/osr/osr_host_display_client.cc
  14. 1 1
      atom/browser/osr/osr_host_display_client.h
  15. 1 2
      atom/browser/osr/osr_render_widget_host_view.cc
  16. 1 1
      atom/browser/osr/osr_render_widget_host_view.h
  17. 5 2
      atom/browser/ui/inspectable_web_contents_impl.cc
  18. 2 1
      atom/browser/ui/inspectable_web_contents_impl.h
  19. 5 4
      atom/browser/ui/views/autofill_popup_view.cc
  20. 4 3
      atom/browser/ui/views/menu_delegate.cc
  21. 2 2
      atom/browser/ui/views/root_view.cc
  22. 6 2
      atom/common/api/atom_api_v8_util.cc
  23. 2 1
      atom/common/native_mate_converters/callback.cc
  24. 2 1
      atom/common/native_mate_converters/net_converter.cc
  25. 6 4
      atom/common/native_mate_converters/v8_value_converter.cc
  26. 1 1
      atom/common/platform_util_win.cc
  27. 1 1
      atom/renderer/atom_sandboxed_renderer_client.cc
  28. 1 1
      atom/renderer/electron_api_service_impl.cc
  29. 21 8
      native_mate/native_mate/converter.h
  30. 6 5
      native_mate/native_mate/dictionary.h
  31. 1 1
      patches/common/chromium/add_realloc.patch
  32. 1 1
      patches/common/chromium/allow_webview_file_url.patch
  33. 2 2
      patches/common/chromium/blink-worker-enable-csp-in-file-scheme.patch
  34. 2 2
      patches/common/chromium/blink_initialization_order.patch
  35. 1 1
      patches/common/chromium/blink_local_frame.patch
  36. 4 4
      patches/common/chromium/blink_world_context.patch
  37. 10 10
      patches/common/chromium/can_create_window.patch
  38. 2 2
      patches/common/chromium/content_allow_embedder_to_prevent_locking_scheme_registry.patch
  39. 2 2
      patches/common/chromium/content_browser_main_loop.patch
  40. 3 3
      patches/common/chromium/cross_site_document_resource_handler.patch
  41. 1 1
      patches/common/chromium/disable-redraw-lock.patch
  42. 18 18
      patches/common/chromium/disable_color_correct_rendering.patch
  43. 5 5
      patches/common/chromium/disable_detach_webview_frame.patch
  44. 3 3
      patches/common/chromium/disable_hidden.patch
  45. 1 1
      patches/common/chromium/disable_network_services_by_default.patch
  46. 2 2
      patches/common/chromium/disable_user_gesture_requirement_for_beforeunload_dialogs.patch
  47. 2 2
      patches/common/chromium/exclude-a-few-test-files-from-build.patch
  48. 2 2
      patches/common/chromium/fix_disable_usage_of_setapplicationisdaemon_and.patch
  49. 7 7
      patches/common/chromium/frame_host_manager.patch
  50. 2 2
      patches/common/chromium/gritsettings_resource_ids.patch
  51. 18 18
      patches/common/chromium/mas_no_private_api.patch
  52. 3 3
      patches/common/chromium/notification_provenance.patch
  53. 1 1
      patches/common/chromium/pepper_flash.patch
  54. 1 1
      patches/common/chromium/render_widget_host_view_base.patch
  55. 1 1
      patches/common/chromium/render_widget_host_view_mac.patch
  56. 3 3
      patches/common/chromium/resource_file_conflict.patch
  57. 2 7
      patches/common/chromium/revert_roll_clang_356356_357569.patch
  58. 1 1
      patches/common/chromium/scroll_bounce_flag.patch
  59. 1 1
      patches/common/chromium/support_mixed_sandbox_with_zygote.patch
  60. 1 1
      patches/common/chromium/unsandboxed_ppapi_processes_skip_zygote.patch
  61. 13 13
      patches/common/chromium/viz_osr.patch
  62. 3 3
      patches/common/chromium/web_contents.patch
  63. 2 2
      patches/common/chromium/webview_cross_drag.patch
  64. 8 8
      patches/common/chromium/worker_context_will_destroy.patch
  65. 3 1
      patches/common/v8/.patches
  66. 3 3
      patches/common/v8/add_realloc.patch
  67. 3 3
      patches/common/v8/build_gn.patch
  68. 4 4
      patches/common/v8/dcheck.patch
  69. 27 29
      patches/common/v8/deps_provide_more_v8_backwards_compatibility.patch
  70. 2 2
      patches/common/v8/export_symbols_needed_for_windows_build.patch
  71. 2 2
      patches/common/v8/expose_mksnapshot.patch
  72. 13 13
      patches/common/v8/fixme_revert_heap_api_remove_deprecated_apis.patch
  73. 142 0
      patches/common/v8/revert_api_remove_deprecated_conversion_functions.patch
  74. 21 21
      patches/common/v8/revert_cctest_add_v8_export_private_to_arm_arm64_ports.patch
  75. 1159 0
      patches/common/v8/revert_reland_api_heap_remove_deprecated_persistent_apis.patch
  76. 10 17
      patches/common/v8/workaround_an_undefined_symbol_error.patch
  77. 4 1
      spec-main/api-app-spec.ts

+ 7 - 1
BUILD.gn

@@ -1069,6 +1069,7 @@ template("dist_zip") {
                              "deps",
                              "data_deps",
                              "data",
+                             "testonly",
                            ])
     write_runtime_deps = _runtime_deps_file
   }
@@ -1078,7 +1079,11 @@ template("dist_zip") {
     deps = [
       ":$_runtime_deps_target",
     ]
-    forward_variables_from(invoker, [ "outputs" ])
+    forward_variables_from(invoker,
+                           [
+                             "outputs",
+                             "testonly",
+                           ])
     args = rebase_path(outputs + [ _runtime_deps_file ], root_build_dir) + [
              target_cpu,
              target_os,
@@ -1146,6 +1151,7 @@ dist_zip("electron_ffmpeg_zip") {
 }
 
 dist_zip("electron_chromedriver_zip") {
+  testonly = true
   data_deps = [
     "//chrome/test/chromedriver",
     ":licenses",

+ 1 - 1
DEPS

@@ -10,7 +10,7 @@ gclient_gn_args = [
 
 vars = {
   'chromium_version':
-    '1e9f9a24aa12bea9cf194a82a7e249bd1242ec4f',
+    '7dff37844cb359ec96a63c4526574ec71138c2ec',
   'node_version':
     '696d8fb66d6f65fc82869d390e0d2078970b1eb4',
 

+ 3 - 3
atom/browser/api/atom_api_app.cc

@@ -530,9 +530,9 @@ int ImportIntoCertStore(CertificateManagerModel* model,
 }
 #endif
 
-void OnIconDataAvailable(util::Promise promise, gfx::Image* icon) {
-  if (icon && !icon->IsEmpty()) {
-    promise.Resolve(*icon);
+void OnIconDataAvailable(util::Promise promise, gfx::Image icon) {
+  if (!icon.IsEmpty()) {
+    promise.Resolve(icon);
   } else {
     promise.RejectWithErrorMessage("Failed to get file icon.");
   }

+ 10 - 4
atom/browser/api/atom_api_auto_updater.cc

@@ -64,11 +64,17 @@ void AutoUpdater::OnError(const std::string& message,
   auto errorObject =
       error->ToObject(isolate()->GetCurrentContext()).ToLocalChecked();
 
+  auto context = isolate()->GetCurrentContext();
+
   // add two new params for better error handling
-  errorObject->Set(mate::StringToV8(isolate(), "code"),
-                   v8::Integer::New(isolate(), code));
-  errorObject->Set(mate::StringToV8(isolate(), "domain"),
-                   mate::StringToV8(isolate(), domain));
+  errorObject
+      ->Set(context, mate::StringToV8(isolate(), "code"),
+            v8::Integer::New(isolate(), code))
+      .Check();
+  errorObject
+      ->Set(context, mate::StringToV8(isolate(), "domain"),
+            mate::StringToV8(isolate(), domain))
+      .Check();
 
   mate::EmitEvent(isolate(), GetWrapper(), "error", errorObject, message);
 }

+ 8 - 6
atom/browser/api/atom_api_web_contents.cc

@@ -491,12 +491,14 @@ void WebContents::DestroyWebContents(bool async) {
   ResetManagedWebContents(async);
 }
 
-bool WebContents::DidAddMessageToConsole(content::WebContents* source,
-                                         int32_t level,
-                                         const base::string16& message,
-                                         int32_t line_no,
-                                         const base::string16& source_id) {
-  return Emit("console-message", level, message, line_no, source_id);
+bool WebContents::DidAddMessageToConsole(
+    content::WebContents* source,
+    blink::mojom::ConsoleMessageLevel level,
+    const base::string16& message,
+    int32_t line_no,
+    const base::string16& source_id) {
+  return Emit("console-message", static_cast<int32_t>(level), message, line_no,
+              source_id);
 }
 
 void WebContents::OnCreateWindow(

+ 1 - 1
atom/browser/api/atom_api_web_contents.h

@@ -336,7 +336,7 @@ class WebContents : public mate::TrackableObject<WebContents>,
 
   // content::WebContentsDelegate:
   bool DidAddMessageToConsole(content::WebContents* source,
-                              int32_t level,
+                              blink::mojom::ConsoleMessageLevel level,
                               const base::string16& message,
                               int32_t line_no,
                               const base::string16& source_id) override;

+ 4 - 1
atom/browser/api/event.cc

@@ -52,7 +52,10 @@ void Event::FrameDeleted(content::RenderFrameHost* rfh) {
 }
 
 void Event::PreventDefault(v8::Isolate* isolate) {
-  GetWrapper()->Set(StringToV8(isolate, "defaultPrevented"), v8::True(isolate));
+  GetWrapper()
+      ->Set(isolate->GetCurrentContext(),
+            StringToV8(isolate, "defaultPrevented"), v8::True(isolate))
+      .Check();
 }
 
 bool Event::SendReply(const base::ListValue& result) {

+ 7 - 2
atom/browser/api/event_emitter.h

@@ -108,8 +108,13 @@ class EventEmitter : public Wrappable<T> {
     v8::HandleScope handle_scope(isolate());
     EmitEvent(isolate(), GetWrapper(), name, event,
               std::forward<Args>(args)...);
-    return event->Get(StringToV8(isolate(), "defaultPrevented"))
-        ->BooleanValue(isolate());
+    auto context = isolate()->GetCurrentContext();
+    v8::Local<v8::Value> defaultPrevented;
+    if (event->Get(context, StringToV8(isolate(), "defaultPrevented"))
+            .ToLocal(&defaultPrevented)) {
+      return defaultPrevented->BooleanValue(isolate());
+    }
+    return false;
   }
 
   DISALLOW_COPY_AND_ASSIGN(EventEmitter);

+ 2 - 2
atom/browser/browser_win.cc

@@ -96,7 +96,7 @@ void Browser::Focus() {
 }
 
 void Browser::AddRecentDocument(const base::FilePath& path) {
-  if (base::win::GetVersion() < base::win::VERSION_WIN7)
+  if (base::win::GetVersion() < base::win::Version::WIN7)
     return;
 
   CComPtr<IShellItem> item;
@@ -346,7 +346,7 @@ std::string Browser::GetExecutableFileProductName() const {
 
 bool Browser::IsEmojiPanelSupported() {
   // emoji picker is supported on Windows 10's Spring 2018 update & above.
-  return base::win::GetVersion() >= base::win::Version::VERSION_WIN10_RS4;
+  return base::win::GetVersion() >= base::win::Version::WIN10_RS4;
 }
 
 void Browser::ShowEmojiPanel() {

+ 1 - 1
atom/browser/io_thread.cc

@@ -45,7 +45,7 @@ void IOThread::Init() {
 
     auto cert_verifier = std::make_unique<net::CachingCertVerifier>(
         std::make_unique<net::MultiThreadedCertVerifier>(
-            net::CertVerifyProc::CreateDefault()));
+            net::CertVerifyProc::CreateDefault(nullptr)));
     builder->SetCertVerifier(std::move(cert_verifier));
 
     // Create the network service, so that shared host resolver

+ 1 - 1
atom/browser/net/atom_cert_verifier.cc

@@ -152,7 +152,7 @@ class CertVerifierRequest : public AtomCertVerifier::Request {
 };
 
 AtomCertVerifier::AtomCertVerifier(RequireCTDelegate* ct_delegate)
-    : default_cert_verifier_(net::CertVerifier::CreateDefault()),
+    : default_cert_verifier_(net::CertVerifier::CreateDefault(nullptr)),
       ct_delegate_(ct_delegate) {}
 
 AtomCertVerifier::~AtomCertVerifier() {}

+ 1 - 1
atom/browser/notifications/win/notification_presenter_win.cc

@@ -47,7 +47,7 @@ bool SaveIconToPath(const SkBitmap& bitmap, const base::FilePath& path) {
 // static
 NotificationPresenter* NotificationPresenter::Create() {
   auto version = base::win::GetVersion();
-  if (version < base::win::VERSION_WIN8)
+  if (version < base::win::Version::WIN8)
     return new NotificationPresenterWin7;
   if (!WindowsToastNotification::Initialize())
     return nullptr;

+ 1 - 0
atom/browser/osr/osr_host_display_client.cc

@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/memory/shared_memory.h"
 #include "components/viz/common/resources/resource_format.h"
 #include "components/viz/common/resources/resource_sizes.h"
 #include "mojo/public/cpp/system/platform_handle.h"

+ 1 - 1
atom/browser/osr/osr_host_display_client.h

@@ -8,7 +8,7 @@
 #include <memory>
 
 #include "base/callback.h"
-#include "base/memory/shared_memory.h"
+#include "base/memory/shared_memory_mapping.h"
 #include "components/viz/host/host_display_client.h"
 #include "services/viz/privileged/interfaces/compositing/layered_window_updater.mojom.h"
 #include "third_party/skia/include/core/SkBitmap.h"

+ 1 - 2
atom/browser/osr/osr_render_widget_host_view.cc

@@ -531,8 +531,7 @@ void OffScreenRenderWidgetHostView::TextInputStateChanged(
 
 void OffScreenRenderWidgetHostView::ImeCancelComposition() {}
 
-void OffScreenRenderWidgetHostView::RenderProcessGone(base::TerminationStatus,
-                                                      int) {
+void OffScreenRenderWidgetHostView::RenderProcessGone() {
   Destroy();
 }
 

+ 1 - 1
atom/browser/osr/osr_render_widget_host_view.h

@@ -131,7 +131,7 @@ class OffScreenRenderWidgetHostView : public content::RenderWidgetHostViewBase,
   void SetIsLoading(bool is_loading) override;
   void TextInputStateChanged(const content::TextInputState& params) override;
   void ImeCancelComposition(void) override;
-  void RenderProcessGone(base::TerminationStatus, int) override;
+  void RenderProcessGone() override;
   void Destroy(void) override;
   void SetTooltipText(const base::string16&) override;
   content::CursorManager* GetCursorManager() override;

+ 5 - 2
atom/browser/ui/inspectable_web_contents_impl.cc

@@ -41,6 +41,7 @@
 #include "net/http/http_response_headers.h"
 #include "services/network/public/cpp/simple_url_loader.h"
 #include "services/network/public/cpp/simple_url_loader_stream_consumer.h"
+#include "third_party/blink/public/common/logging/logging_utils.h"
 #include "ui/display/display.h"
 #include "ui/display/screen.h"
 
@@ -779,11 +780,13 @@ void InspectableWebContentsImpl::WebContentsDestroyed() {
 
 bool InspectableWebContentsImpl::DidAddMessageToConsole(
     content::WebContents* source,
-    int32_t level,
+    blink::mojom::ConsoleMessageLevel level,
     const base::string16& message,
     int32_t line_no,
     const base::string16& source_id) {
-  logging::LogMessage("CONSOLE", line_no, level).stream()
+  logging::LogMessage("CONSOLE", line_no,
+                      blink::ConsoleMessageLevelToLogSeverity(level))
+          .stream()
       << "\"" << message << "\", source: " << source_id << " (" << line_no
       << ")";
   return true;

+ 2 - 1
atom/browser/ui/inspectable_web_contents_impl.h

@@ -145,6 +145,7 @@ class InspectableWebContentsImpl
   void SetOpenNewWindowForPopups(bool value) override {}
   void RecordPerformanceHistogram(const std::string& name,
                                   double duration) override {}
+  void RecordUserMetricsAction(const std::string& name) override {}
 
   // content::DevToolsFrontendHostDelegate:
   void HandleMessageFromDevToolsFrontend(const std::string& message);
@@ -167,7 +168,7 @@ class InspectableWebContentsImpl
 
   // content::WebContentsDelegate:
   bool DidAddMessageToConsole(content::WebContents* source,
-                              int32_t level,
+                              blink::mojom::ConsoleMessageLevel level,
                               const base::string16& message,
                               int32_t line_no,
                               const base::string16& source_id) override;

+ 5 - 4
atom/browser/ui/views/autofill_popup_view.cc

@@ -150,10 +150,10 @@ void AutofillPopupView::OnSelectedRowChanged(
 
   if (current_row_selection) {
     int selected = current_row_selection.value_or(-1);
-    if (selected == -1 || selected >= child_count())
+    if (selected == -1 || static_cast<size_t>(selected) >= children().size())
       return;
-    child_at(selected)->NotifyAccessibilityEvent(ax::mojom::Event::kSelection,
-                                                 true);
+    children().at(selected)->NotifyAccessibilityEvent(
+        ax::mojom::Event::kSelection, true);
   }
 }
 
@@ -232,7 +232,8 @@ void AutofillPopupView::DoUpdateBoundsAndRedrawPopup() {
 }
 
 void AutofillPopupView::OnPaint(gfx::Canvas* canvas) {
-  if (!popup_ || popup_->GetLineCount() != child_count())
+  if (!popup_ ||
+      static_cast<size_t>(popup_->GetLineCount()) != children().size())
     return;
   gfx::Canvas* draw_canvas = canvas;
   SkBitmap bitmap;

+ 4 - 3
atom/browser/ui/views/menu_delegate.cc

@@ -43,9 +43,10 @@ void MenuDelegate::RunMenu(AtomMenuModel* model,
   menu_runner_.reset(new views::MenuRunner(
       item,
       views::MenuRunner::CONTEXT_MENU | views::MenuRunner::HAS_MNEMONICS));
-  menu_runner_->RunMenuAt(button->GetWidget()->GetTopLevelWidget(),
-                          static_cast<views::MenuButton*>(button), bounds,
-                          views::MenuAnchorPosition::kTopRight, source_type);
+  menu_runner_->RunMenuAt(
+      button->GetWidget()->GetTopLevelWidget(),
+      static_cast<views::MenuButton*>(button)->button_controller(), bounds,
+      views::MenuAnchorPosition::kTopRight, source_type);
 }
 
 void MenuDelegate::ExecuteCommand(int id) {

+ 2 - 2
atom/browser/ui/views/root_view.cc

@@ -92,10 +92,10 @@ void RootView::SetMenuBarVisibility(bool visible) {
 
   menu_bar_visible_ = visible;
   if (visible) {
-    DCHECK_EQ(child_count(), 1);
+    DCHECK_EQ(children().size(), 1ul);
     AddChildView(menu_bar_.get());
   } else {
-    DCHECK_EQ(child_count(), 2);
+    DCHECK_EQ(children().size(), 2ul);
     RemoveChildView(menu_bar_.get());
   }
 

+ 6 - 2
atom/common/api/atom_api_v8_util.cc

@@ -41,8 +41,12 @@ struct Converter<std::pair<Type1, Type2>> {
     v8::Local<v8::Array> array(v8::Local<v8::Array>::Cast(val));
     if (array->Length() != 2)
       return false;
-    return Converter<Type1>::FromV8(isolate, array->Get(0), &out->first) &&
-           Converter<Type2>::FromV8(isolate, array->Get(1), &out->second);
+
+    auto context = isolate->GetCurrentContext();
+    return Converter<Type1>::FromV8(
+               isolate, array->Get(context, 0).ToLocalChecked(), &out->first) &&
+           Converter<Type2>::FromV8(
+               isolate, array->Get(context, 1).ToLocalChecked(), &out->second);
   }
 };
 

+ 2 - 1
atom/common/native_mate_converters/callback.cc

@@ -147,7 +147,8 @@ v8::Local<v8::Value> BindFunctionWith(v8::Isolate* isolate,
                                       v8::Local<v8::Function> func,
                                       v8::Local<v8::Value> arg1,
                                       v8::Local<v8::Value> arg2) {
-  v8::MaybeLocal<v8::Value> bind = func->Get(mate::StringToV8(isolate, "bind"));
+  v8::MaybeLocal<v8::Value> bind =
+      func->Get(context, mate::StringToV8(isolate, "bind"));
   CHECK(!bind.IsEmpty());
   v8::Local<v8::Function> bind_func =
       v8::Local<v8::Function>::Cast(bind.ToLocalChecked());

+ 2 - 1
atom/common/native_mate_converters/net_converter.cc

@@ -211,7 +211,8 @@ bool Converter<net::HttpResponseHeaders*>::FromV8(
     if (localVal->IsArray()) {
       auto values = v8::Local<v8::Array>::Cast(localVal);
       for (uint32_t j = 0; j < values->Length(); j++) {
-        if (!addHeaderFromValue(key, values->Get(j))) {
+        if (!addHeaderFromValue(key,
+                                values->Get(context, j).ToLocalChecked())) {
           return false;
         }
       }

+ 6 - 4
atom/common/native_mate_converters/v8_value_converter.cc

@@ -204,6 +204,7 @@ v8::Local<v8::Value> V8ValueConverter::ToV8Array(
     v8::Isolate* isolate,
     const base::ListValue* val) const {
   v8::Local<v8::Array> result(v8::Array::New(isolate, val->GetSize()));
+  auto context = isolate->GetCurrentContext();
 
   for (size_t i = 0; i < val->GetSize(); ++i) {
     const base::Value* child = nullptr;
@@ -212,7 +213,7 @@ v8::Local<v8::Value> V8ValueConverter::ToV8Array(
     v8::Local<v8::Value> child_v8 = ToV8ValueImpl(isolate, child);
 
     v8::TryCatch try_catch(isolate);
-    result->Set(static_cast<uint32_t>(i), child_v8);
+    result->Set(context, static_cast<uint32_t>(i), child_v8).Check();
     if (try_catch.HasCaught())
       LOG(ERROR) << "Setter for index " << i << " threw an exception.";
   }
@@ -330,9 +331,10 @@ std::unique_ptr<base::Value> V8ValueConverter::FromV8ValueImpl(
   if (val->IsDate()) {
     v8::Date* date = v8::Date::Cast(*val);
     v8::Local<v8::Value> toISOString =
-        date->Get(v8::String::NewFromUtf8(isolate, "toISOString",
-                                          v8::NewStringType::kNormal)
-                      .ToLocalChecked());
+        date->Get(context, v8::String::NewFromUtf8(isolate, "toISOString",
+                                                   v8::NewStringType::kNormal)
+                               .ToLocalChecked())
+            .ToLocalChecked();
     if (toISOString->IsFunction()) {
       v8::MaybeLocal<v8::Value> result =
           toISOString.As<v8::Function>()->Call(context, val, 0, nullptr);

+ 1 - 1
atom/common/platform_util_win.cc

@@ -341,7 +341,7 @@ bool MoveItemToTrash(const base::FilePath& path) {
   // Elevation prompt enabled for UAC protected files.  This overrides the
   // SILENT, NO_UI and NOERRORUI flags.
 
-  if (base::win::GetVersion() >= base::win::VERSION_WIN8) {
+  if (base::win::GetVersion() >= base::win::Version::WIN8) {
     // Windows 8 introduces the flag RECYCLEONDELETE and deprecates the
     // ALLOWUNDO in favor of ADDUNDORECORD.
     if (FAILED(pfo->SetOperationFlags(

+ 1 - 1
atom/renderer/atom_sandboxed_renderer_client.cc

@@ -110,7 +110,7 @@ void InvokeHiddenCallback(v8::Handle<v8::Context> context,
   auto callback_key = mate::ConvertToV8(isolate, callback_name)
                           ->ToString(context)
                           .ToLocalChecked();
-  auto callback_value = binding->Get(callback_key);
+  auto callback_value = binding->Get(context, callback_key).ToLocalChecked();
   DCHECK(callback_value->IsFunction());  // set by sandboxed_renderer/init.js
   auto callback = v8::Handle<v8::Function>::Cast(callback_value);
   ignore_result(callback->Call(context, binding, 0, nullptr));

+ 1 - 1
atom/renderer/electron_api_service_impl.cc

@@ -60,7 +60,7 @@ void InvokeIpcCallback(v8::Local<v8::Context> context,
   auto callback_key = mate::ConvertToV8(isolate, callback_name)
                           ->ToString(context)
                           .ToLocalChecked();
-  auto callback_value = ipcNative->Get(callback_key);
+  auto callback_value = ipcNative->Get(context, callback_key).ToLocalChecked();
   DCHECK(callback_value->IsFunction());  // set by init.ts
   auto callback = v8::Local<v8::Function>::Cast(callback_value);
   ignore_result(callback->Call(context, ipcNative, args.size(), args.data()));

+ 21 - 8
native_mate/native_mate/converter.h

@@ -207,8 +207,12 @@ struct Converter<std::vector<T>> {
                                    const std::vector<T>& val) {
     v8::Local<v8::Array> result(
         v8::Array::New(isolate, static_cast<int>(val.size())));
+    auto context = isolate->GetCurrentContext();
     for (size_t i = 0; i < val.size(); ++i) {
-      result->Set(static_cast<int>(i), Converter<T>::ToV8(isolate, val[i]));
+      result
+          ->Set(context, static_cast<int>(i),
+                Converter<T>::ToV8(isolate, val[i]))
+          .Check();
     }
     return result;
   }
@@ -219,12 +223,14 @@ struct Converter<std::vector<T>> {
     if (!val->IsArray())
       return false;
 
+    auto context = isolate->GetCurrentContext();
     std::vector<T> result;
     v8::Local<v8::Array> array(v8::Local<v8::Array>::Cast(val));
     uint32_t length = array->Length();
     for (uint32_t i = 0; i < length; ++i) {
       T item;
-      if (!Converter<T>::FromV8(isolate, array->Get(i), &item))
+      if (!Converter<T>::FromV8(isolate,
+                                array->Get(context, i).ToLocalChecked(), &item))
         return false;
       result.push_back(item);
     }
@@ -240,10 +246,11 @@ struct Converter<std::set<T>> {
                                    const std::set<T>& val) {
     v8::Local<v8::Array> result(
         v8::Array::New(isolate, static_cast<int>(val.size())));
+    auto context = isolate->GetCurrentContext();
     typename std::set<T>::const_iterator it;
     int i;
     for (i = 0, it = val.begin(); it != val.end(); ++it, ++i)
-      result->Set(i, Converter<T>::ToV8(isolate, *it));
+      result->Set(context, i, Converter<T>::ToV8(isolate, *it)).Check();
     return result;
   }
 
@@ -253,12 +260,14 @@ struct Converter<std::set<T>> {
     if (!val->IsArray())
       return false;
 
+    auto context = isolate->GetCurrentContext();
     std::set<T> result;
     v8::Local<v8::Array> array(v8::Local<v8::Array>::Cast(val));
     uint32_t length = array->Length();
     for (uint32_t i = 0; i < length; ++i) {
       T item;
-      if (!Converter<T>::FromV8(isolate, array->Get(i), &item))
+      if (!Converter<T>::FromV8(isolate,
+                                array->Get(context, i).ToLocalChecked(), &item))
         return false;
       result.insert(item);
     }
@@ -281,9 +290,10 @@ struct Converter<std::map<std::string, T>> {
     v8::Local<v8::Array> keys =
         dict->GetOwnPropertyNames(context).ToLocalChecked();
     for (uint32_t i = 0; i < keys->Length(); ++i) {
-      v8::Local<v8::Value> key = keys->Get(i);
+      v8::Local<v8::Value> key = keys->Get(context, i).ToLocalChecked();
       T value;
-      if (Converter<T>::FromV8(isolate, dict->Get(key), &value))
+      if (Converter<T>::FromV8(
+              isolate, dict->Get(context, key).ToLocalChecked(), &value))
         (*out)[gin::V8ToString(isolate, key)] = std::move(value);
     }
     return true;
@@ -291,9 +301,12 @@ struct Converter<std::map<std::string, T>> {
   static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
                                    const std::map<std::string, T>& val) {
     v8::Local<v8::Object> result = v8::Object::New(isolate);
+    auto context = isolate->GetCurrentContext();
     for (auto i = val.begin(); i != val.end(); i++) {
-      result->Set(Converter<T>::ToV8(isolate, i->first),
-                  Converter<T>::ToV8(isolate, i->second));
+      result
+          ->Set(context, Converter<T>::ToV8(isolate, i->first),
+                Converter<T>::ToV8(isolate, i->second))
+          .Check();
     }
     return result;
   }

+ 6 - 5
native_mate/native_mate/dictionary.h

@@ -104,11 +104,12 @@ class Dictionary {
 
   template <typename T>
   bool SetMethod(const base::StringPiece& key, const T& callback) {
-    return GetHandle()->Set(
-        StringToV8(isolate_, key),
-        CallbackTraits<T>::CreateTemplate(isolate_, callback)
-            ->GetFunction(isolate_->GetCurrentContext())
-            .ToLocalChecked());
+    return GetHandle()
+        ->Set(isolate_->GetCurrentContext(), StringToV8(isolate_, key),
+              CallbackTraits<T>::CreateTemplate(isolate_, callback)
+                  ->GetFunction(isolate_->GetCurrentContext())
+                  .ToLocalChecked())
+        .ToChecked();
   }
 
   bool Delete(const base::StringPiece& key) {

+ 1 - 1
patches/common/chromium/add_realloc.patch

@@ -39,7 +39,7 @@ index 2aef366ac8194aa261cbca6abc051f7da8a988d3..3c7d66c81032636abcca4f1538ce9b7f
  
    GIN_EXPORT static ArrayBufferAllocator* SharedInstance();
 diff --git a/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc b/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc
-index 1df2ce89d245c5965fe957c3b48a977ab2b19ee3..9efa1d3a330b08826e2ec3bde75ac5b228c7f9cf 100644
+index 1f3f5e263585fbec3844b45116797084483006cb..8e13c4edbf98f380ddacad6447c4e0656fcb0bb2 100644
 --- a/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc
 +++ b/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc
 @@ -553,6 +553,10 @@ class ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {

+ 1 - 1
patches/common/chromium/allow_webview_file_url.patch

@@ -6,7 +6,7 @@ Subject: allow_webview_file_url.patch
 Allow webview to load non-web URLs.
 
 diff --git a/content/browser/loader/resource_dispatcher_host_impl.cc b/content/browser/loader/resource_dispatcher_host_impl.cc
-index 86b891fafe246644bdfc11b8e102143dde667134..33390464e1c7e1a7e484284f0f9994d4313106c5 100644
+index 27f7edf204a0f22917cc7b62a63723e7ff396702..ea25f04910803f34248674c42a43574fa884b8ab 100644
 --- a/content/browser/loader/resource_dispatcher_host_impl.cc
 +++ b/content/browser/loader/resource_dispatcher_host_impl.cc
 @@ -1496,6 +1496,8 @@ void ResourceDispatcherHostImpl::BeginNavigationRequest(

+ 2 - 2
patches/common/chromium/blink-worker-enable-csp-in-file-scheme.patch

@@ -5,10 +5,10 @@ Subject: blink-worker-enable-csp-in-file-scheme.patch
 
 
 diff --git a/third_party/blink/renderer/core/workers/worker_classic_script_loader.cc b/third_party/blink/renderer/core/workers/worker_classic_script_loader.cc
-index e2134f58fe7c59a17a24e428a4ba27d1f8db838e..174386d0768123c290094e6cf7e9a2ba95bc887c 100644
+index d90b74ba141ee7f9609bea8698ca7b7c2f630d9f..f66233507fb26b4a2626b75b4eb38ff340d2d91c 100644
 --- a/third_party/blink/renderer/core/workers/worker_classic_script_loader.cc
 +++ b/third_party/blink/renderer/core/workers/worker_classic_script_loader.cc
-@@ -308,7 +308,6 @@ void WorkerClassicScriptLoader::ProcessContentSecurityPolicy(
+@@ -310,7 +310,6 @@ void WorkerClassicScriptLoader::ProcessContentSecurityPolicy(
    // document (which is implemented in WorkerMessagingProxy, and
    // m_contentSecurityPolicy should be left as nullptr to inherit the policy).
    if (!response.CurrentRequestUrl().ProtocolIs("blob") &&

+ 2 - 2
patches/common/chromium/blink_initialization_order.patch

@@ -10,10 +10,10 @@ to fix electron/electron#13787.  The backport landed in Chromium 67 but the
 DidCreateScriptContext re-ordering needs to be upstreamed or kept indefinitely
 
 diff --git a/third_party/blink/renderer/bindings/core/v8/local_window_proxy.cc b/third_party/blink/renderer/bindings/core/v8/local_window_proxy.cc
-index 02d087e9ed5a91280bc00c75d70fc460b53cda1d..27c72802bc474610c8bc9083a7a41845223ed5cf 100644
+index 59af62ece264de7f392f8b13ae373700d6aafc56..2d547910eaef8ba2194a012f8a6c9a444b7de741 100644
 --- a/third_party/blink/renderer/bindings/core/v8/local_window_proxy.cc
 +++ b/third_party/blink/renderer/bindings/core/v8/local_window_proxy.cc
-@@ -190,11 +190,10 @@ void LocalWindowProxy::Initialize() {
+@@ -191,11 +191,10 @@ void LocalWindowProxy::Initialize() {
                   GetFrame()->IsMainFrame());
      MainThreadDebugger::Instance()->ContextCreated(script_state_, GetFrame(),
                                                     origin);

+ 1 - 1
patches/common/chromium/blink_local_frame.patch

@@ -14,7 +14,7 @@ when there is code doing that.
 This patch reverts the change to fix the crash in Electron.
 
 diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc
-index dd0e2f0df7b59ff0899473b96eac6ed3fb2f4122..6a8258a68d1e026ab5ad0c28d6d47883032a2a66 100644
+index f5e5cfbd9f07c3c7140e43d1fd6804762aa6fe49..0c300bf86535de1091c757565e12b6e6e5168a77 100644
 --- a/third_party/blink/renderer/core/frame/local_frame.cc
 +++ b/third_party/blink/renderer/core/frame/local_frame.cc
 @@ -413,10 +413,6 @@ void LocalFrame::DetachImpl(FrameDetachType type) {

+ 4 - 4
patches/common/chromium/blink_world_context.patch

@@ -5,7 +5,7 @@ Subject: blink_world_context.patch
 
 
 diff --git a/third_party/blink/public/web/web_local_frame.h b/third_party/blink/public/web/web_local_frame.h
-index 6b1777713b03ee58d875377226d9827589388d79..5871096511969db7f029148679195bb7cdc7839f 100644
+index 641a24b04dcf6602f8da660e4d84d591bc38573a..f9f1871d73dce74375084dd1786dee2806f973fb 100644
 --- a/third_party/blink/public/web/web_local_frame.h
 +++ b/third_party/blink/public/web/web_local_frame.h
 @@ -355,6 +355,9 @@ class WebLocalFrame : public WebFrame {
@@ -19,10 +19,10 @@ index 6b1777713b03ee58d875377226d9827589388d79..5871096511969db7f029148679195bb7
    // that the script evaluated to with callback. Script execution can be
    // suspend.
 diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
-index 481c9b9bdebef21fa7a78698a95be7fa6901673b..165406a76deedf1c4f34d451eb43be2977431481 100644
+index 412e7553b657077c4ed5587dd7763ad4f14dc649..295ccca27242d3583697e4cda3460476ea38b231 100644
 --- a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
 +++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
-@@ -867,6 +867,13 @@ v8::Local<v8::Object> WebLocalFrameImpl::GlobalProxy() const {
+@@ -868,6 +868,13 @@ v8::Local<v8::Object> WebLocalFrameImpl::GlobalProxy() const {
    return MainWorldScriptContext()->Global();
  }
  
@@ -37,7 +37,7 @@ index 481c9b9bdebef21fa7a78698a95be7fa6901673b..165406a76deedf1c4f34d451eb43be29
    return BindingSecurity::ShouldAllowAccessToFrame(
        CurrentDOMWindow(V8PerIsolateData::MainThreadIsolate()),
 diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.h b/third_party/blink/renderer/core/frame/web_local_frame_impl.h
-index 04874b65153227a208a114736a036c34507a3148..67a894cb7327fee07f70cd5749f445f708d35503 100644
+index c6d881efbe2ecbb9170521020ac12590df3a74fd..a32f8cd49ab2f8ce9c462af04260453889ebcd92 100644
 --- a/third_party/blink/renderer/core/frame/web_local_frame_impl.h
 +++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.h
 @@ -147,6 +147,8 @@ class CORE_EXPORT WebLocalFrameImpl final

+ 10 - 10
patches/common/chromium/can_create_window.patch

@@ -5,7 +5,7 @@ Subject: can_create_window.patch
 
 
 diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
-index a3651be4e397f85350bdf13179ca826c18b44cb5..6f3b476f027d768140813654033e44cd121365db 100644
+index 6a42afb61eadb92a18c7506254aa015b2e7092e3..ed3f60d9230ae7ca902ba28caf8193ad895fe497 100644
 --- a/content/browser/frame_host/render_frame_host_impl.cc
 +++ b/content/browser/frame_host/render_frame_host_impl.cc
 @@ -3669,6 +3669,7 @@ void RenderFrameHostImpl::CreateNewWindow(
@@ -17,10 +17,10 @@ index a3651be4e397f85350bdf13179ca826c18b44cb5..6f3b476f027d768140813654033e44cd
            &no_javascript_access);
  
 diff --git a/content/common/frame.mojom b/content/common/frame.mojom
-index 7deab3ea78fc85815a7c713dc7718723f9302975..cf352ff127ea9aee0dcf5eff3915b21def76f0bb 100644
+index 88471bc49cd5b00a9494cc3998ba9c44c2c87088..b78d5facf5fad5385d205f5cdc40f3609efa3741 100644
 --- a/content/common/frame.mojom
 +++ b/content/common/frame.mojom
-@@ -288,6 +288,10 @@ struct CreateNewWindowParams {
+@@ -289,6 +289,10 @@ struct CreateNewWindowParams {
  
    // The window features to use for the new window.
    blink.mojom.WindowFeatures features;
@@ -32,10 +32,10 @@ index 7deab3ea78fc85815a7c713dc7718723f9302975..cf352ff127ea9aee0dcf5eff3915b21d
  
  // Operation result when the renderer asks the browser to create a new window.
 diff --git a/content/public/browser/content_browser_client.cc b/content/public/browser/content_browser_client.cc
-index 445e1febebe62b014d995a2bfb8ceefedc1e5e6a..03999fb7f9bfc1bb21cda1bfe15e95fb3bc9b678 100644
+index bf0bbe26b5dfd43539b47a9dda8ec079f24adca4..bac5261c293f1c9aeec1ce077d483378538b9046 100644
 --- a/content/public/browser/content_browser_client.cc
 +++ b/content/public/browser/content_browser_client.cc
-@@ -519,6 +519,8 @@ bool ContentBrowserClient::CanCreateWindow(
+@@ -518,6 +518,8 @@ bool ContentBrowserClient::CanCreateWindow(
      const std::string& frame_name,
      WindowOpenDisposition disposition,
      const blink::mojom::WindowFeatures& features,
@@ -45,10 +45,10 @@ index 445e1febebe62b014d995a2bfb8ceefedc1e5e6a..03999fb7f9bfc1bb21cda1bfe15e95fb
      bool opener_suppressed,
      bool* no_javascript_access) {
 diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h
-index 0a1bf5d0b4d1fddcef30d2da697dc77b5b7f8c79..424bdb1dde40cc4003e022908de702a9d9e488d4 100644
+index e295f5a9b4c27ddcb5128c041dfbb91378dda791..2539e6fce69fd0eb68f0439ae93393f88c670566 100644
 --- a/content/public/browser/content_browser_client.h
 +++ b/content/public/browser/content_browser_client.h
-@@ -178,6 +178,7 @@ class RenderFrameHost;
+@@ -175,6 +175,7 @@ class RenderFrameHost;
  class RenderProcessHost;
  class RenderViewHost;
  class ResourceContext;
@@ -56,7 +56,7 @@ index 0a1bf5d0b4d1fddcef30d2da697dc77b5b7f8c79..424bdb1dde40cc4003e022908de702a9
  class SerialDelegate;
  class ServiceManagerConnection;
  class SiteInstance;
-@@ -798,6 +799,8 @@ class CONTENT_EXPORT ContentBrowserClient {
+@@ -801,6 +802,8 @@ class CONTENT_EXPORT ContentBrowserClient {
        const std::string& frame_name,
        WindowOpenDisposition disposition,
        const blink::mojom::WindowFeatures& features,
@@ -66,7 +66,7 @@ index 0a1bf5d0b4d1fddcef30d2da697dc77b5b7f8c79..424bdb1dde40cc4003e022908de702a9
        bool opener_suppressed,
        bool* no_javascript_access);
 diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
-index 3e328daa58275e05b30b7a3fabb03f69db2fd7d2..d207e3760d8b48c1283085da132ee03eddb4c17c 100644
+index a9508139d626447ebf54edf1281337b9f7a3f406..ee84732bc535538f95fc2c767060dca50fbdf561 100644
 --- a/content/renderer/render_view_impl.cc
 +++ b/content/renderer/render_view_impl.cc
 @@ -77,6 +77,7 @@
@@ -77,7 +77,7 @@ index 3e328daa58275e05b30b7a3fabb03f69db2fd7d2..d207e3760d8b48c1283085da132ee03e
  #include "content/renderer/media/audio/audio_device_factory.h"
  #include "content/renderer/media/stream/media_stream_device_observer.h"
  #include "content/renderer/media/video_capture/video_capture_impl_manager.h"
-@@ -1370,6 +1371,8 @@ WebView* RenderViewImpl::CreateView(
+@@ -1368,6 +1369,8 @@ WebView* RenderViewImpl::CreateView(
    }
    params->features = ConvertWebWindowFeaturesToMojoWindowFeatures(features);
  

+ 2 - 2
patches/common/chromium/content_allow_embedder_to_prevent_locking_scheme_registry.patch

@@ -12,10 +12,10 @@ Without this patch, calling `registerStandardSchemes` during initialization
 when in debug mode will cause a DCHECK to fire.
 
 diff --git a/content/app/content_main_runner_impl.cc b/content/app/content_main_runner_impl.cc
-index 4dc87d822f1290475d756d1b12237ac31a8a7581..62997d683a83be4fd399a1474a5598aee28d379a 100644
+index 732dc46b8bab153bb16228745a0161e42a9c1dd8..a9e907487f5d0dd502b593a147f816c1a0db9206 100644
 --- a/content/app/content_main_runner_impl.cc
 +++ b/content/app/content_main_runner_impl.cc
-@@ -757,7 +757,7 @@ int ContentMainRunnerImpl::Initialize(const ContentMainParams& params) {
+@@ -758,7 +758,7 @@ int ContentMainRunnerImpl::Initialize(const ContentMainParams& params) {
  #endif
  
      RegisterPathProvider();

+ 2 - 2
patches/common/chromium/content_browser_main_loop.patch

@@ -8,10 +8,10 @@ run before shutdown. This is required to cleanup WebContents asynchronously
 in atom::CommonWebContentsDelegate::ResetManageWebContents.
 
 diff --git a/content/browser/browser_main_loop.cc b/content/browser/browser_main_loop.cc
-index 6e3dfde1019beee050e542934470beebd7a0c43e..76dd73f3ccfb43d0e74016a5a84afd4a2db22ca4 100644
+index 76a2d13bc732916c304aecb493aba548e935e052..be90711e6e2ea740d41c8da41234b3db1fd5aea7 100644
 --- a/content/browser/browser_main_loop.cc
 +++ b/content/browser/browser_main_loop.cc
-@@ -1564,7 +1564,7 @@ void BrowserMainLoop::MainMessageLoopRun() {
+@@ -1574,7 +1574,7 @@ void BrowserMainLoop::MainMessageLoopRun() {
    }
  
    base::RunLoop run_loop;

+ 3 - 3
patches/common/chromium/cross_site_document_resource_handler.patch

@@ -22,7 +22,7 @@ index 9e65e50de1d45d8435145b56bf7108a8c0272065..3103e4caa2adf853277774092cbd645f
  }
  
 diff --git a/content/public/browser/content_browser_client.cc b/content/public/browser/content_browser_client.cc
-index 7e15121545795d39ec3326856919e6582b239506..0c2798cdae8166d792a4bf4ef94fa00cc4b8afa0 100644
+index d31af66d884a36b1f10ba845bd3df77394296cf1..f57d0f9d0aef241e648a6a4a3aa390efcf16c690 100644
 --- a/content/public/browser/content_browser_client.cc
 +++ b/content/public/browser/content_browser_client.cc
 @@ -61,6 +61,10 @@ ContentBrowserClient::SiteInstanceForNavigationType ContentBrowserClient::Should
@@ -37,10 +37,10 @@ index 7e15121545795d39ec3326856919e6582b239506..0c2798cdae8166d792a4bf4ef94fa00c
      const MainFunctionParams& parameters) {
    return nullptr;
 diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h
-index e89f60b3c6297a90e95058c19fc953c82af043e9..e1585d687026cc5d0528dd99ae9e36ffb6699dfc 100644
+index 87967723939dc85f89ed0be793f3371200860e45..ec60fa98d994b07881dbb15d397f8b7844af911a 100644
 --- a/content/public/browser/content_browser_client.h
 +++ b/content/public/browser/content_browser_client.h
-@@ -244,6 +244,9 @@ class CONTENT_EXPORT ContentBrowserClient {
+@@ -241,6 +241,9 @@ class CONTENT_EXPORT ContentBrowserClient {
        content::RenderFrameHost* rfh,
        content::SiteInstance* pending_site_instance) {}
  

+ 1 - 1
patches/common/chromium/disable-redraw-lock.patch

@@ -15,7 +15,7 @@ the redraw locking mechanism, which fixes these issues. The electron issue
 can be found at https://github.com/electron/electron/issues/1821
 
 diff --git a/ui/views/win/hwnd_message_handler.cc b/ui/views/win/hwnd_message_handler.cc
-index fb8e820175ac06b5eb8adee5a106491cff03d77b..ec954beab8861f569f48242c52ca249635e89bf4 100644
+index 9e686fc3ec97bbb4a67b391f344dc8eb7aad2fbd..566929def5c8a9de82b5f7238cc50657521249d9 100644
 --- a/ui/views/win/hwnd_message_handler.cc
 +++ b/ui/views/win/hwnd_message_handler.cc
 @@ -284,6 +284,10 @@ constexpr int kSynthesizedMouseMessagesTimeDifference = 500;

+ 18 - 18
patches/common/chromium/disable_color_correct_rendering.patch

@@ -19,7 +19,7 @@ to deal with color spaces. That is being tracked at
 https://crbug.com/634542 and https://crbug.com/711107.
 
 diff --git a/cc/trees/layer_tree_settings.h b/cc/trees/layer_tree_settings.h
-index 644305bc4259de680c0589d8d572e2145bf5318e..711efdc623ff3bbca9a9e21161d3385e1ed181eb 100644
+index 092fb1b7ea3626b7649472c35ec20bf1a6aaf4cd..fed8dd322faba387ebd0508228f847766a76011e 100644
 --- a/cc/trees/layer_tree_settings.h
 +++ b/cc/trees/layer_tree_settings.h
 @@ -99,6 +99,8 @@ class CC_EXPORT LayerTreeSettings {
@@ -65,7 +65,7 @@ index 78a6b5739caed8c3925f303c52ed107be8e4ccfe..ddbf660e594c1a991d4e758fa11b1b2e
        !command_line->HasSwitch(switches::kUIDisablePartialSwap);
  #if defined(OS_WIN)
 diff --git a/components/viz/service/display/gl_renderer.cc b/components/viz/service/display/gl_renderer.cc
-index 336484b6fdf407aeba78fb94d28ad35cec8c39cc..2f7ca3493e4e1d8a6bcc7e3aa48b0512e21d4161 100644
+index faa61cee3a961b57c2abc5f4bdf6e8cd0954985b..76a73e7bb9dc1954da9a9f9f548c9e8d2a4c05c7 100644
 --- a/components/viz/service/display/gl_renderer.cc
 +++ b/components/viz/service/display/gl_renderer.cc
 @@ -79,6 +79,9 @@
@@ -78,7 +78,7 @@ index 336484b6fdf407aeba78fb94d28ad35cec8c39cc..2f7ca3493e4e1d8a6bcc7e3aa48b0512
  namespace viz {
  namespace {
  
-@@ -550,8 +553,9 @@ void GLRenderer::DoDrawQuad(const DrawQuad* quad,
+@@ -553,8 +556,9 @@ void GLRenderer::DoDrawQuad(const DrawQuad* quad,
  void GLRenderer::DrawDebugBorderQuad(const DebugBorderDrawQuad* quad) {
    SetBlendEnabled(quad->ShouldDrawWithBlending());
  
@@ -90,7 +90,7 @@ index 336484b6fdf407aeba78fb94d28ad35cec8c39cc..2f7ca3493e4e1d8a6bcc7e3aa48b0512
  
    // Use the full quad_rect for debug quads to not move the edges based on
    // partial swaps.
-@@ -1368,7 +1372,8 @@ void GLRenderer::ChooseRPDQProgram(DrawRenderPassDrawQuadParams* params,
+@@ -1372,7 +1376,8 @@ void GLRenderer::ChooseRPDQProgram(DrawRenderPassDrawQuadParams* params,
            params->use_aa ? USE_AA : NO_AA, mask_mode, mask_for_background,
            params->use_color_matrix, tint_gl_composited_content_,
            ShouldApplyRoundedCorner(params->quad)),
@@ -100,7 +100,7 @@ index 336484b6fdf407aeba78fb94d28ad35cec8c39cc..2f7ca3493e4e1d8a6bcc7e3aa48b0512
  }
  
  void GLRenderer::UpdateRPDQUniforms(DrawRenderPassDrawQuadParams* params) {
-@@ -1840,8 +1845,8 @@ void GLRenderer::DrawSolidColorQuad(const SolidColorDrawQuad* quad,
+@@ -1843,8 +1848,8 @@ void GLRenderer::DrawSolidColorQuad(const SolidColorDrawQuad* quad,
    SetUseProgram(ProgramKey::SolidColor(use_aa ? USE_AA : NO_AA,
                                         tint_gl_composited_content_,
                                         ShouldApplyRoundedCorner(quad)),
@@ -111,7 +111,7 @@ index 336484b6fdf407aeba78fb94d28ad35cec8c39cc..2f7ca3493e4e1d8a6bcc7e3aa48b0512
    SetShaderColor(color, opacity);
    if (current_program_->rounded_corner_rect_location() != -1) {
      SetShaderRoundedCorner(
-@@ -1997,8 +2002,8 @@ void GLRenderer::DrawContentQuadAA(const ContentDrawQuadBase* quad,
+@@ -2000,8 +2005,8 @@ void GLRenderer::DrawContentQuadAA(const ContentDrawQuadBase* quad,
                                                : NON_PREMULTIPLIED_ALPHA,
                         false, false, tint_gl_composited_content_,
                         ShouldApplyRoundedCorner(quad)),
@@ -122,7 +122,7 @@ index 336484b6fdf407aeba78fb94d28ad35cec8c39cc..2f7ca3493e4e1d8a6bcc7e3aa48b0512
  
    if (current_program_->tint_color_matrix_location() != -1) {
      auto matrix = cc::DebugColors::TintCompositedContentColorTransformMatrix();
-@@ -2095,8 +2100,8 @@ void GLRenderer::DrawContentQuadNoAA(const ContentDrawQuadBase* quad,
+@@ -2098,8 +2103,8 @@ void GLRenderer::DrawContentQuadNoAA(const ContentDrawQuadBase* quad,
                         !quad->ShouldDrawWithBlending(), has_tex_clamp_rect,
                         tint_gl_composited_content_,
                         ShouldApplyRoundedCorner(quad)),
@@ -133,7 +133,7 @@ index 336484b6fdf407aeba78fb94d28ad35cec8c39cc..2f7ca3493e4e1d8a6bcc7e3aa48b0512
  
    if (current_program_->tint_color_matrix_location() != -1) {
      auto matrix = cc::DebugColors::TintCompositedContentColorTransformMatrix();
-@@ -2199,7 +2204,7 @@ void GLRenderer::DrawYUVVideoQuad(const YUVVideoDrawQuad* quad,
+@@ -2202,7 +2207,7 @@ void GLRenderer::DrawYUVVideoQuad(const YUVVideoDrawQuad* quad,
    DCHECK_NE(src_color_space, src_color_space.GetAsFullRangeRGB());
  
    gfx::ColorSpace dst_color_space =
@@ -142,7 +142,7 @@ index 336484b6fdf407aeba78fb94d28ad35cec8c39cc..2f7ca3493e4e1d8a6bcc7e3aa48b0512
    // Force sRGB output on Windows for overlay candidate video quads to match
    // DirectComposition behavior in case these switch between overlays and
    // compositing. See https://crbug.com/811118 for details.
-@@ -2355,8 +2360,8 @@ void GLRenderer::DrawStreamVideoQuad(const StreamVideoDrawQuad* quad,
+@@ -2358,8 +2363,8 @@ void GLRenderer::DrawStreamVideoQuad(const StreamVideoDrawQuad* quad,
  
    SetUseProgram(ProgramKey::VideoStream(tex_coord_precision,
                                          ShouldApplyRoundedCorner(quad)),
@@ -153,7 +153,7 @@ index 336484b6fdf407aeba78fb94d28ad35cec8c39cc..2f7ca3493e4e1d8a6bcc7e3aa48b0512
  
    DCHECK_EQ(GL_TEXTURE0, GetActiveTextureUnit(gl_));
    gl_->BindTexture(GL_TEXTURE_EXTERNAL_OES, lock.texture_id());
-@@ -2413,8 +2418,8 @@ void GLRenderer::FlushTextureQuadCache(BoundGeometry flush_binding) {
+@@ -2416,8 +2421,8 @@ void GLRenderer::FlushTextureQuadCache(BoundGeometry flush_binding) {
        draw_cache_.nearest_neighbor ? GL_NEAREST : GL_LINEAR);
  
    // Bind the program to the GL state.
@@ -164,7 +164,7 @@ index 336484b6fdf407aeba78fb94d28ad35cec8c39cc..2f7ca3493e4e1d8a6bcc7e3aa48b0512
  
    if (current_program_->rounded_corner_rect_location() != -1) {
      SetShaderRoundedCorner(
-@@ -3107,7 +3112,9 @@ void GLRenderer::PrepareGeometry(BoundGeometry binding) {
+@@ -3110,7 +3115,9 @@ void GLRenderer::PrepareGeometry(BoundGeometry binding) {
  void GLRenderer::SetUseProgram(const ProgramKey& program_key_no_color,
                                 const gfx::ColorSpace& src_color_space,
                                 const gfx::ColorSpace& dst_color_space) {
@@ -175,7 +175,7 @@ index 336484b6fdf407aeba78fb94d28ad35cec8c39cc..2f7ca3493e4e1d8a6bcc7e3aa48b0512
  
    ProgramKey program_key = program_key_no_color;
    const gfx::ColorTransform* color_transform =
-@@ -3461,7 +3468,7 @@ void GLRenderer::CopyRenderPassDrawQuadToOverlayResource(
+@@ -3464,7 +3471,7 @@ void GLRenderer::CopyRenderPassDrawQuadToOverlayResource(
  
    *overlay_texture = FindOrCreateOverlayTexture(
        params.quad->render_pass_id, iosurface_width, iosurface_height,
@@ -184,7 +184,7 @@ index 336484b6fdf407aeba78fb94d28ad35cec8c39cc..2f7ca3493e4e1d8a6bcc7e3aa48b0512
    *new_bounds = gfx::RectF(updated_dst_rect.origin(),
                             gfx::SizeF((*overlay_texture)->texture.size()));
  
-@@ -3665,8 +3672,9 @@ void GLRenderer::FlushOverdrawFeedback(const gfx::Rect& output_rect) {
+@@ -3668,8 +3675,9 @@ void GLRenderer::FlushOverdrawFeedback(const gfx::Rect& output_rect) {
  
    PrepareGeometry(SHARED_BINDING);
  
@@ -196,7 +196,7 @@ index 336484b6fdf407aeba78fb94d28ad35cec8c39cc..2f7ca3493e4e1d8a6bcc7e3aa48b0512
  
    gfx::Transform render_matrix;
    render_matrix.Translate(0.5 * output_rect.width() + output_rect.x(),
-@@ -3826,3 +3834,5 @@ gfx::Size GLRenderer::GetRenderPassBackingPixelSize(
+@@ -3829,3 +3837,5 @@ gfx::Size GLRenderer::GetRenderPassBackingPixelSize(
  }
  
  }  // namespace viz
@@ -215,7 +215,7 @@ index 53fc82c1f2cc0cfb7a6ce909fea6c025dff26b43..ec00a673df6a8f1c372fc8dff7cf5085
      service_manager::switches::kGpuSandboxAllowSysVShm,
      service_manager::switches::kGpuSandboxFailuresFatal,
 diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
-index 721ea34bcd930dece08173366375ace0a16bc7d0..1c5d5acd48cfb42d6cd41d24f21fc025f25f6de7 100644
+index c44c20c07828242eb3b7000252636d30a6fab2e1..c520a44f451c0274ed6af832eadb0129876df409 100644
 --- a/content/browser/renderer_host/render_process_host_impl.cc
 +++ b/content/browser/renderer_host/render_process_host_impl.cc
 @@ -220,6 +220,7 @@
@@ -235,7 +235,7 @@ index 721ea34bcd930dece08173366375ace0a16bc7d0..1c5d5acd48cfb42d6cd41d24f21fc025
      network::switches::kExplicitlyAllowedPorts,
      service_manager::switches::kDisableInProcessStackTraces,
 diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
-index 970bdf426edcb0ffbd89ccdee69cf35ad37d3d9f..989eab3f13938888c335a1ebbc2a033ee5ee5414 100644
+index abbcf4ba59a1f3f31ae83055030414de61ec20c5..0f34f2ef40afcda39bc3297dc69128e441be6cf5 100644
 --- a/content/renderer/render_widget.cc
 +++ b/content/renderer/render_widget.cc
 @@ -2818,6 +2818,9 @@ cc::LayerTreeSettings RenderWidget::GenerateLayerTreeSettings(
@@ -288,7 +288,7 @@ index 88ec94963569588ed2882193a28197879dcb1090..eae37577bc9b1872c0162f55de218553
    if (color_space == ColorSpace::CreateSRGB()) {
      base::ScopedCFTypeRef<CFDataRef> srgb_icc(
 diff --git a/ui/gfx/switches.cc b/ui/gfx/switches.cc
-index 0ea5e08a40203cdd0fc0f9ea3ef49818bfd185d4..0368f2565686e367d1a95fb47306596797583663 100644
+index 53de88695661a12f9820a0319901d4565a775c4a..12735b7b95a0bb45e08707467d21e59f4b77e2b5 100644
 --- a/ui/gfx/switches.cc
 +++ b/ui/gfx/switches.cc
 @@ -7,6 +7,8 @@
@@ -301,7 +301,7 @@ index 0ea5e08a40203cdd0fc0f9ea3ef49818bfd185d4..0368f2565686e367d1a95fb473065967
  // sharpness, kerning, hinting and layout.
  const char kDisableFontSubpixelPositioning[] =
 diff --git a/ui/gfx/switches.h b/ui/gfx/switches.h
-index 91d10770c24107de723403c6ce47e1b00fff28ad..da35618e6e3c36ebf38ffc7c2b428bcf6671227e 100644
+index 3b87320bf5318ad4d30205f8a48f19c8037e61c6..f18f8db6feab73169ad9f95f33c52799d5d53049 100644
 --- a/ui/gfx/switches.h
 +++ b/ui/gfx/switches.h
 @@ -11,6 +11,8 @@

+ 5 - 5
patches/common/chromium/disable_detach_webview_frame.patch

@@ -12,19 +12,19 @@ this patch was introduced in Chrome 66.
 Update(zcbenz): The bug is still in Chrome 72.
 
 diff --git a/content/browser/frame_host/render_frame_proxy_host.cc b/content/browser/frame_host/render_frame_proxy_host.cc
-index f0ede24b7a723485996b9181d1521ffce87449de..6d4815276f6c2e44b16e7ad8bd0983788cd1fbcf 100644
+index f93a9b7747c6501df48ffa6be286cdba3f0344d5..bff8ed632f878f74caab9b4184127f480877305c 100644
 --- a/content/browser/frame_host/render_frame_proxy_host.cc
 +++ b/content/browser/frame_host/render_frame_proxy_host.cc
-@@ -270,6 +270,12 @@ void RenderFrameProxyHost::SetDestructionCallback(
+@@ -268,6 +268,12 @@ void RenderFrameProxyHost::SetDestructionCallback(
  
  void RenderFrameProxyHost::OnDetach() {
-   if (frame_tree_node_->render_manager()->ForInnerDelegate()) {
+   if (frame_tree_node_->render_manager()->IsMainFrameForInnerDelegate()) {
 +    // Don't detach the frame for webview, we will manage the WebContents
 +    // manually.
 +    // We should revisit this bug after upgrading to newer versions of Chrome,
 +    // this patch was introduced in Chrome 66.
 +    return;
 +
-     // Only main frame proxy can detach for inner WebContents.
-     DCHECK(frame_tree_node_->IsMainFrame());
      frame_tree_node_->render_manager()->RemoveOuterDelegateFrame();
+     return;
+   }

+ 3 - 3
patches/common/chromium/disable_hidden.patch

@@ -5,7 +5,7 @@ Subject: disable_hidden.patch
 
 
 diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
-index 4ccf75d1c1f4f8a8375874c0adfc583639bc2e9d..8aa2889137a0f3a7ffaaa439a39475428fbcfc7c 100644
+index d9831e4d2cc2e24d07ab34957be0112992112b6e..5f0e4c3b44a4da7de94f2beb54cbc545c418679d 100644
 --- a/content/browser/renderer_host/render_widget_host_impl.cc
 +++ b/content/browser/renderer_host/render_widget_host_impl.cc
 @@ -736,6 +736,9 @@ void RenderWidgetHostImpl::WasHidden() {
@@ -19,10 +19,10 @@ index 4ccf75d1c1f4f8a8375874c0adfc583639bc2e9d..8aa2889137a0f3a7ffaaa439a3947542
  
    TRACE_EVENT0("renderer_host", "RenderWidgetHostImpl::WasHidden");
 diff --git a/content/browser/renderer_host/render_widget_host_impl.h b/content/browser/renderer_host/render_widget_host_impl.h
-index f9a68845dc4a5ed1eb4f81f391c4a75c51a2e02e..8fc5af102d9650862d3bc697609954dff67982f2 100644
+index 2bf7891372c8744edd2e99a0fb81ff2bd66e5952..cb37e6b0d0f2c6447a404312c4ef36622b8fdc9e 100644
 --- a/content/browser/renderer_host/render_widget_host_impl.h
 +++ b/content/browser/renderer_host/render_widget_host_impl.h
-@@ -153,6 +153,9 @@ class CONTENT_EXPORT RenderWidgetHostImpl
+@@ -155,6 +155,9 @@ class CONTENT_EXPORT RenderWidgetHostImpl
    // RenderWidgetHostImpl.
    static RenderWidgetHostImpl* From(RenderWidgetHost* rwh);
  

+ 1 - 1
patches/common/chromium/disable_network_services_by_default.patch

@@ -12,7 +12,7 @@ We should remove this patch after all Electron's code has been migrated to the
 NetworkService.
 
 diff --git a/services/network/public/cpp/features.cc b/services/network/public/cpp/features.cc
-index f7bf09f21ab1084128c21af90fe0bcb81066e894..ef2f5d880fd7ae839fff8bbd6bb33bf5aa244053 100644
+index b12f83da65dd3d5f3959e8ea421fabb46dab7ad2..683890831cd9a34796caf26a80f2baf863d5f04f 100644
 --- a/services/network/public/cpp/features.cc
 +++ b/services/network/public/cpp/features.cc
 @@ -21,7 +21,7 @@ const base::Feature kNetworkService {

+ 2 - 2
patches/common/chromium/disable_user_gesture_requirement_for_beforeunload_dialogs.patch

@@ -6,10 +6,10 @@ Subject: disable_user_gesture_requirement_for_beforeunload_dialogs.patch
 See https://github.com/electron/electron/issues/10754
 
 diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc
-index 94a6fbd928290ebdfe0b60aee19b4a51d61a3514..a1ba9cb375203818be222ecae57486ad3c6daa3c 100644
+index c3e77bc86d0b77fec2a0db459aefd749c6f04934..167235e72d20e1beb65abdf3b3c64a02f76796c9 100644
 --- a/third_party/blink/renderer/core/dom/document.cc
 +++ b/third_party/blink/renderer/core/dom/document.cc
-@@ -3574,7 +3574,9 @@ bool Document::DispatchBeforeUnloadEvent(ChromeClient* chrome_client,
+@@ -3568,7 +3568,9 @@ bool Document::DispatchBeforeUnloadEvent(ChromeClient* chrome_client,
          "frame that never had a user gesture since its load. "
          "https://www.chromestatus.com/feature/5082396709879808";
      Intervention::GenerateReport(frame_, "BeforeUnloadNoGesture", message);

+ 2 - 2
patches/common/chromium/exclude-a-few-test-files-from-build.patch

@@ -7,10 +7,10 @@ Compilation of those files fails with the Chromium 68.
 Remove the patch during the Chromium 69 upgrade.
 
 diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/renderer/platform/BUILD.gn
-index eee1b8766987c0fec4061fef98d5816c1dd429a4..062a147b94ca6ecdd68417da61465ed295f0db6f 100644
+index 277254a4f8cd2c26d09cae73796e59353f7e7108..f9061edf1d17dae129210a7db1b8ff9a48be52f5 100644
 --- a/third_party/blink/renderer/platform/BUILD.gn
 +++ b/third_party/blink/renderer/platform/BUILD.gn
-@@ -1745,7 +1745,7 @@ jumbo_source_set("blink_platform_unittests_sources") {
+@@ -1749,7 +1749,7 @@ jumbo_source_set("blink_platform_unittests_sources") {
      "graphics/paint/drawing_display_item_test.cc",
      "graphics/paint/drawing_recorder_test.cc",
      "graphics/paint/float_clip_rect_test.cc",

+ 2 - 2
patches/common/chromium/fix_disable_usage_of_setapplicationisdaemon_and.patch

@@ -5,13 +5,13 @@ Subject: fix: disable usage of SetApplicationIsDaemon and
  _LSSetApplicationLaunchServicesServerConnectionStatus in MAS builds
 
 diff --git a/content/utility/utility_service_factory.cc b/content/utility/utility_service_factory.cc
-index 3a4a72dbbfeb2ce480fd7ae3b3e5de018585c36c..87c0821d88b8092d8ba7e82b588a0a5eed1ef8a5 100644
+index 2e098ff3c2d0052984a96ffc72e393a20418b445..bf07ae34c286f03225535f6082a9151f12a3a5f2 100644
 --- a/content/utility/utility_service_factory.cc
 +++ b/content/utility/utility_service_factory.cc
 @@ -207,7 +207,7 @@ void UtilityServiceFactory::RunService(
  std::unique_ptr<service_manager::Service>
  UtilityServiceFactory::CreateAudioService(
-     service_manager::mojom::ServiceRequest request) {
+     mojo::PendingReceiver<service_manager::mojom::Service> receiver) {
 -#if defined(OS_MACOSX)
 +#if defined(OS_MACOSX) && !defined(MAS_BUILD)
    // Don't connect to launch services when running sandboxed

+ 7 - 7
patches/common/chromium/frame_host_manager.patch

@@ -7,10 +7,10 @@ Allows embedder to intercept site instances chosen by chromium
 and respond with custom instance.
 
 diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/browser/frame_host/render_frame_host_manager.cc
-index 56aa5739aa3e364fb56c20e5cafe60302693d85d..725be2485879b1c9aebf67ee65dc86cf4b755496 100644
+index 2314c6d1d29ebc61d5156644617e9eb088df5d43..9c75367a173b836027b3b7628b49b363e2875338 100644
 --- a/content/browser/frame_host/render_frame_host_manager.cc
 +++ b/content/browser/frame_host/render_frame_host_manager.cc
-@@ -2102,6 +2102,16 @@ bool RenderFrameHostManager::InitRenderView(
+@@ -2108,6 +2108,16 @@ bool RenderFrameHostManager::InitRenderView(
  scoped_refptr<SiteInstance>
  RenderFrameHostManager::GetSiteInstanceForNavigationRequest(
      const NavigationRequest& request) {
@@ -27,7 +27,7 @@ index 56aa5739aa3e364fb56c20e5cafe60302693d85d..725be2485879b1c9aebf67ee65dc86cf
    // First, check if the navigation can switch SiteInstances. If not, the
    // navigation should use the current SiteInstance.
    SiteInstance* current_site_instance = render_frame_host_->GetSiteInstance();
-@@ -2134,6 +2144,51 @@ RenderFrameHostManager::GetSiteInstanceForNavigationRequest(
+@@ -2140,6 +2150,51 @@ RenderFrameHostManager::GetSiteInstanceForNavigationRequest(
                                                request.common_params().url);
      no_renderer_swap_allowed |=
          request.from_begin_navigation() && !can_renderer_initiate_transfer;
@@ -79,7 +79,7 @@ index 56aa5739aa3e364fb56c20e5cafe60302693d85d..725be2485879b1c9aebf67ee65dc86cf
    } else {
      // Subframe navigations will use the current renderer, unless specifically
      // allowed to swap processes.
-@@ -2145,23 +2200,17 @@ RenderFrameHostManager::GetSiteInstanceForNavigationRequest(
+@@ -2151,23 +2206,17 @@ RenderFrameHostManager::GetSiteInstanceForNavigationRequest(
    if (no_renderer_swap_allowed && !should_swap_for_error_isolation)
      return scoped_refptr<SiteInstance>(current_site_instance);
  
@@ -108,7 +108,7 @@ index 56aa5739aa3e364fb56c20e5cafe60302693d85d..725be2485879b1c9aebf67ee65dc86cf
  }
  
 diff --git a/content/public/browser/content_browser_client.cc b/content/public/browser/content_browser_client.cc
-index 03999fb7f9bfc1bb21cda1bfe15e95fb3bc9b678..7e15121545795d39ec3326856919e6582b239506 100644
+index bac5261c293f1c9aeec1ce077d483378538b9046..d31af66d884a36b1f10ba845bd3df77394296cf1 100644
 --- a/content/public/browser/content_browser_client.cc
 +++ b/content/public/browser/content_browser_client.cc
 @@ -51,6 +51,16 @@ void OverrideOnBindInterface(const service_manager::BindSourceInfo& remote_info,
@@ -129,10 +129,10 @@ index 03999fb7f9bfc1bb21cda1bfe15e95fb3bc9b678..7e15121545795d39ec3326856919e658
      const MainFunctionParams& parameters) {
    return nullptr;
 diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h
-index 424bdb1dde40cc4003e022908de702a9d9e488d4..e89f60b3c6297a90e95058c19fc953c82af043e9 100644
+index 2539e6fce69fd0eb68f0439ae93393f88c670566..87967723939dc85f89ed0be793f3371200860e45 100644
 --- a/content/public/browser/content_browser_client.h
 +++ b/content/public/browser/content_browser_client.h
-@@ -213,8 +213,37 @@ CONTENT_EXPORT void OverrideOnBindInterface(
+@@ -210,8 +210,37 @@ CONTENT_EXPORT void OverrideOnBindInterface(
  // the observer interfaces.)
  class CONTENT_EXPORT ContentBrowserClient {
   public:

+ 2 - 2
patches/common/chromium/gritsettings_resource_ids.patch

@@ -6,10 +6,10 @@ Subject: gritsettings_resource_ids.patch
 Add electron resources file to the list of resource ids generation.
 
 diff --git a/tools/gritsettings/resource_ids b/tools/gritsettings/resource_ids
-index 33dc98925f5f6090daf2ee002dd53bd2454d774b..507fa685080d2a48b0974c5c9104eedecf3ad6d4 100644
+index 5c8eb8c98ce8150446bf32451dbd523af2f00fb6..a960b01a46da8b58616fddc33f04da167640ba0e 100644
 --- a/tools/gritsettings/resource_ids
 +++ b/tools/gritsettings/resource_ids
-@@ -435,6 +435,11 @@
+@@ -438,6 +438,11 @@
      "includes": [28880],
    },
  

+ 18 - 18
patches/common/chromium/mas_no_private_api.patch

@@ -38,7 +38,7 @@ index d38fa48b8b890d90f2911995a2a51c249005c827..5fe68c71fe101a307ef565013a91b109
  // is concerned.
  @property(nonatomic, readonly) NSString* subrole;
 diff --git a/content/browser/accessibility/browser_accessibility_cocoa.mm b/content/browser/accessibility/browser_accessibility_cocoa.mm
-index 575957842225a102337a71fe2a4a10625505a647..01ee760aa0853517631add692e7e8279cada714c 100644
+index 21934df3a2bf46d54f65bff09ccd7c02b9fb6a40..0c1c8850f50808aab44892221d834f496b15ca99 100644
 --- a/content/browser/accessibility/browser_accessibility_cocoa.mm
 +++ b/content/browser/accessibility/browser_accessibility_cocoa.mm
 @@ -141,6 +141,7 @@
@@ -49,7 +49,7 @@ index 575957842225a102337a71fe2a4a10625505a647..01ee760aa0853517631add692e7e8279
  extern "C" {
  
  // The following are private accessibility APIs required for cursor navigation
-@@ -345,6 +346,7 @@ void AddMisspelledTextAttributes(
+@@ -346,6 +347,7 @@ void AddMisspelledTextAttributes(
    AddMisspelledTextAttributes(text_only_objects, attributed_text);
    return [attributed_text attributedSubstringFromRange:range];
  }
@@ -57,7 +57,7 @@ index 575957842225a102337a71fe2a4a10625505a647..01ee760aa0853517631add692e7e8279
  
  // Returns an autoreleased copy of the AXNodeData's attribute.
  NSString* NSStringForStringAttribute(BrowserAccessibility* browserAccessibility,
-@@ -612,7 +614,9 @@ + (void)initialize {
+@@ -613,7 +615,9 @@ + (void)initialize {
        {NSAccessibilityEditableAncestorAttribute, @"editableAncestor"},
        {NSAccessibilityElementBusyAttribute, @"elementBusy"},
        {NSAccessibilityEnabledAttribute, @"enabled"},
@@ -67,7 +67,7 @@ index 575957842225a102337a71fe2a4a10625505a647..01ee760aa0853517631add692e7e8279
        {NSAccessibilityExpandedAttribute, @"expanded"},
        {NSAccessibilityFocusableAncestorAttribute, @"focusableAncestor"},
        {NSAccessibilityFocusedAttribute, @"focused"},
-@@ -647,13 +651,17 @@ + (void)initialize {
+@@ -648,13 +652,17 @@ + (void)initialize {
        {NSAccessibilityRowsAttribute, @"rows"},
        // TODO(aboxhall): expose
        // NSAccessibilityServesAsTitleForUIElementsAttribute
@@ -85,7 +85,7 @@ index 575957842225a102337a71fe2a4a10625505a647..01ee760aa0853517631add692e7e8279
        {NSAccessibilitySizeAttribute, @"size"},
        {NSAccessibilitySortDirectionAttribute, @"sortDirection"},
        {NSAccessibilitySubroleAttribute, @"subrole"},
-@@ -1142,6 +1150,7 @@ - (NSNumber*)enabled {
+@@ -1143,6 +1151,7 @@ - (NSNumber*)enabled {
                                    ax::mojom::Restriction::kDisabled];
  }
  
@@ -93,7 +93,7 @@ index 575957842225a102337a71fe2a4a10625505a647..01ee760aa0853517631add692e7e8279
  // Returns a text marker that points to the last character in the document that
  // can be selected with VoiceOver.
  - (id)endTextMarker {
-@@ -1152,6 +1161,7 @@ - (id)endTextMarker {
+@@ -1153,6 +1162,7 @@ - (id)endTextMarker {
    BrowserAccessibilityPositionInstance position = root->CreatePositionAt(0);
    return CreateTextMarker(position->CreatePositionAtEndOfAnchor());
  }
@@ -101,7 +101,7 @@ index 575957842225a102337a71fe2a4a10625505a647..01ee760aa0853517631add692e7e8279
  
  - (NSNumber*)expanded {
    if (![self instanceActive])
-@@ -2027,6 +2037,7 @@ - (NSValue*)selectedTextRange {
+@@ -2028,6 +2038,7 @@ - (NSValue*)selectedTextRange {
    return [NSValue valueWithRange:NSMakeRange(selStart, selLength)];
  }
  
@@ -109,7 +109,7 @@ index 575957842225a102337a71fe2a4a10625505a647..01ee760aa0853517631add692e7e8279
  - (id)selectedTextMarkerRange {
    if (![self instanceActive])
      return nil;
-@@ -2059,6 +2070,7 @@ - (id)selectedTextMarkerRange {
+@@ -2060,6 +2071,7 @@ - (id)selectedTextMarkerRange {
                                                 anchorAffinity, *focusObject,
                                                 focusOffset, focusAffinity));
  }
@@ -117,7 +117,7 @@ index 575957842225a102337a71fe2a4a10625505a647..01ee760aa0853517631add692e7e8279
  
  - (NSValue*)size {
    if (![self instanceActive])
-@@ -2091,6 +2103,7 @@ - (NSString*)sortDirection {
+@@ -2092,6 +2104,7 @@ - (NSString*)sortDirection {
    return nil;
  }
  
@@ -125,7 +125,7 @@ index 575957842225a102337a71fe2a4a10625505a647..01ee760aa0853517631add692e7e8279
  // Returns a text marker that points to the first character in the document that
  // can be selected with VoiceOver.
  - (id)startTextMarker {
-@@ -2101,6 +2114,7 @@ - (id)startTextMarker {
+@@ -2102,6 +2115,7 @@ - (id)startTextMarker {
    BrowserAccessibilityPositionInstance position = root->CreatePositionAt(0);
    return CreateTextMarker(position->CreatePositionAtStartOfAnchor());
  }
@@ -133,7 +133,7 @@ index 575957842225a102337a71fe2a4a10625505a647..01ee760aa0853517631add692e7e8279
  
  // Returns a subrole based upon the role.
  - (NSString*)subrole {
-@@ -2401,12 +2415,14 @@ - (NSAttributedString*)attributedValueForRange:(NSRange)range {
+@@ -2402,12 +2416,14 @@ - (NSAttributedString*)attributedValueForRange:(NSRange)range {
    NSMutableAttributedString* attributedValue =
        [[[NSMutableAttributedString alloc] initWithString:value] autorelease];
  
@@ -148,7 +148,7 @@ index 575957842225a102337a71fe2a4a10625505a647..01ee760aa0853517631add692e7e8279
  
    return [attributedValue attributedSubstringFromRange:range];
  }
-@@ -2491,6 +2507,7 @@ - (id)accessibilityAttributeValue:(NSString*)attribute
+@@ -2492,6 +2508,7 @@ - (id)accessibilityAttributeValue:(NSString*)attribute
        return ToBrowserAccessibilityCocoa(cell);
    }
  
@@ -156,7 +156,7 @@ index 575957842225a102337a71fe2a4a10625505a647..01ee760aa0853517631add692e7e8279
    if ([attribute isEqualToString:@"AXUIElementForTextMarker"]) {
      BrowserAccessibilityPositionInstance position =
          CreatePositionFromTextMarker(parameter);
-@@ -2668,6 +2685,7 @@ - (id)accessibilityAttributeValue:(NSString*)attribute
+@@ -2669,6 +2686,7 @@ - (id)accessibilityAttributeValue:(NSString*)attribute
      NSString* text = GetTextForTextMarkerRange(parameter);
      return [NSNumber numberWithInt:[text length]];
    }
@@ -164,7 +164,7 @@ index 575957842225a102337a71fe2a4a10625505a647..01ee760aa0853517631add692e7e8279
  
    if ([attribute isEqualToString:
                       NSAccessibilityBoundsForRangeParameterizedAttribute]) {
-@@ -2701,6 +2719,7 @@ - (id)accessibilityAttributeValue:(NSString*)attribute
+@@ -2702,6 +2720,7 @@ - (id)accessibilityAttributeValue:(NSString*)attribute
      return nil;
    }
  
@@ -172,7 +172,7 @@ index 575957842225a102337a71fe2a4a10625505a647..01ee760aa0853517631add692e7e8279
    if ([attribute
            isEqualToString:
                NSAccessibilityLineTextMarkerRangeForTextMarkerParameterizedAttribute]) {
-@@ -2780,6 +2799,7 @@ AXPlatformRange range(position->CreatePreviousLineStartPosition(
+@@ -2782,6 +2801,7 @@ AXPlatformRange range(position->CreatePreviousLineStartPosition(
  
      return @(child->GetIndexInParent());
    }
@@ -181,10 +181,10 @@ index 575957842225a102337a71fe2a4a10625505a647..01ee760aa0853517631add692e7e8279
    return nil;
  }
 diff --git a/content/browser/accessibility/browser_accessibility_manager_mac.mm b/content/browser/accessibility/browser_accessibility_manager_mac.mm
-index eb2f9c29b30b016eff979e06a432f804c4318503..a76f1aa4e24346dabb94089c77a260c9b6b19243 100644
+index 350a17a75fed37eb887560956a6e5378a1b46759..e298becdb574fd254c131068ace58c0d1be49043 100644
 --- a/content/browser/accessibility/browser_accessibility_manager_mac.mm
 +++ b/content/browser/accessibility/browser_accessibility_manager_mac.mm
-@@ -484,6 +484,7 @@ void PostAnnouncementNotification(NSString* announcement) {
+@@ -485,6 +485,7 @@ void PostAnnouncementNotification(NSString* announcement) {
        [user_info setObject:native_focus_object
                      forKey:NSAccessibilityTextChangeElement];
  
@@ -192,7 +192,7 @@ index eb2f9c29b30b016eff979e06a432f804c4318503..a76f1aa4e24346dabb94089c77a260c9
        id selected_text = [native_focus_object selectedTextMarkerRange];
        if (selected_text) {
          NSString* const NSAccessibilitySelectedTextMarkerRangeAttribute =
-@@ -491,6 +492,7 @@ void PostAnnouncementNotification(NSString* announcement) {
+@@ -492,6 +493,7 @@ void PostAnnouncementNotification(NSString* announcement) {
          [user_info setObject:selected_text
                        forKey:NSAccessibilitySelectedTextMarkerRangeAttribute];
        }

+ 3 - 3
patches/common/chromium/notification_provenance.patch

@@ -67,10 +67,10 @@ index cbac30fa7a12db927ba6a15173ba1181e03e0723..4d26fd795a7ce1ffd046c4a0f2ec1779
          mojo::MakeRequest(&notification_service_ptr_));
  
 diff --git a/content/browser/notifications/platform_notification_context_impl.cc b/content/browser/notifications/platform_notification_context_impl.cc
-index d0b32520a30c1807117a3dc02d5d55bcb3d7b995..f868d3c40f78fa105477d7f22e47a75c5281de14 100644
+index 258d4235cc977ce0aed3cb31020244b26a8c19dd..436ebd7927eec6b007724c988248c418114491e5 100644
 --- a/content/browser/notifications/platform_notification_context_impl.cc
 +++ b/content/browser/notifications/platform_notification_context_impl.cc
-@@ -199,12 +199,13 @@ void PlatformNotificationContextImpl::Shutdown() {
+@@ -207,12 +207,13 @@ void PlatformNotificationContextImpl::Shutdown() {
  }
  
  void PlatformNotificationContextImpl::CreateService(
@@ -87,7 +87,7 @@ index d0b32520a30c1807117a3dc02d5d55bcb3d7b995..f868d3c40f78fa105477d7f22e47a75c
  
  void PlatformNotificationContextImpl::RemoveService(
 diff --git a/content/browser/notifications/platform_notification_context_impl.h b/content/browser/notifications/platform_notification_context_impl.h
-index 11eed749075c7c17d4beb86674c253b5f296d82d..8a7c7f3f7a069e2339a4234a21dd4536fcf0c6a1 100644
+index de7f9d4c1b670b6955ec62e562b133a86b770652..a7daada96b6ebed404d6fa3eef1048ab022d443f 100644
 --- a/content/browser/notifications/platform_notification_context_impl.h
 +++ b/content/browser/notifications/platform_notification_context_impl.h
 @@ -24,6 +24,7 @@

+ 1 - 1
patches/common/chromium/pepper_flash.patch

@@ -435,7 +435,7 @@ index d63e90b6c5079ab3237c4bad3d5e63ce2f99c657..c98a7bd07ddd9527fc67b05b24463ed4
    return nullptr;
  }
 diff --git a/chrome/renderer/pepper/pepper_flash_renderer_host.cc b/chrome/renderer/pepper/pepper_flash_renderer_host.cc
-index 880dd83122400909c2768c339ea1e8835b214406..2eab439f74e3d65c0a07c4aba7f2119b598037e8 100644
+index 36edbfd997d0dfaa998a4e288caf29af418a28f5..7f4012a4a5b8194a1e44f35f458612099e09fbe4 100644
 --- a/chrome/renderer/pepper/pepper_flash_renderer_host.cc
 +++ b/chrome/renderer/pepper/pepper_flash_renderer_host.cc
 @@ -13,7 +13,9 @@

+ 1 - 1
patches/common/chromium/render_widget_host_view_base.patch

@@ -25,7 +25,7 @@ index 6986a9b55908f989275115ba8bd290f9e1d40ace..90c51ca81795547f7ec116e6c57af704
      const blink::WebMouseEvent& event,
      const ui::LatencyInfo& latency) {
 diff --git a/content/browser/renderer_host/render_widget_host_view_base.h b/content/browser/renderer_host/render_widget_host_view_base.h
-index 11c2dcff17aac3e789c096642d1ac82fa8426232..8e1cd769e8a3aa83376ea8f74274a21c6f819101 100644
+index e8dadd66ca8b81638c198d6ce5490b43384116a9..82534c4d1cc44b0192fd0e9a5e082d7d01dfab41 100644
 --- a/content/browser/renderer_host/render_widget_host_view_base.h
 +++ b/content/browser/renderer_host/render_widget_host_view_base.h
 @@ -23,8 +23,10 @@

+ 1 - 1
patches/common/chromium/render_widget_host_view_mac.patch

@@ -66,7 +66,7 @@ index 03ee233d5e07fd59f07227d5f925590a08935049..c9ca2bd46987a56901fb0d15969e1b29
    return validAttributesForMarkedText_.get();
  }
 diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
-index 4db5f275ff7ce4c64251f1acf178805a55e51a90..aaf8feb7d93a473fdffdc53e907f9bfba216c551 100644
+index 2f23c1b11c41fc368ce5f05c6b8bf2c8e66849c2..7ab6f530193a7e19da6222c9b396733327ec6006 100644
 --- a/content/browser/renderer_host/render_widget_host_view_mac.mm
 +++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
 @@ -61,6 +61,7 @@

+ 3 - 3
patches/common/chromium/resource_file_conflict.patch

@@ -52,10 +52,10 @@ Some alternatives to this patch:
 None of these options seems like a substantial maintainability win over this patch to me (@nornagon).
 
 diff --git a/chrome/BUILD.gn b/chrome/BUILD.gn
-index 64c7fbccee69e037e6c2360f4025f87530fe14ed..cf97b6a0ae411ac375db8d798fb9ca29655ecebc 100644
+index 645bf391f2e7ffa9974c4cdfb0e323dc14cbf931..def59a7885004ee42b331f3af3241f4e6947b0c1 100644
 --- a/chrome/BUILD.gn
 +++ b/chrome/BUILD.gn
-@@ -1647,7 +1647,7 @@ if (is_chrome_branded && !is_android) {
+@@ -1646,7 +1646,7 @@ if (is_chrome_branded && !is_android) {
    }
  }
  
@@ -64,7 +64,7 @@ index 64c7fbccee69e037e6c2360f4025f87530fe14ed..cf97b6a0ae411ac375db8d798fb9ca29
    chrome_paks("packed_resources") {
      if (is_mac) {
        output_dir = "$root_gen_dir/repack"
-@@ -1671,6 +1671,12 @@ if (!is_android) {
+@@ -1670,6 +1670,12 @@ if (!is_android) {
    }
  }
  

+ 2 - 7
patches/common/chromium/revert_roll_clang_356356_357569.patch

@@ -8,21 +8,16 @@ This reverts commit a50f2f33843d26fd7c0d1f1a2331aa45a392c6cd.
 This roll broke ARM builds. Tracking bug: crbug.com/953815
 
 diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py
-index c284aff1e3b73977050dcc9ee0608aae6c650f5c..39a4c86ee5fbfbd8f9f8d5b2b08d12af3be078ee 100755
+index ab0311650bffadf8d3cfe03f8a55cea319e15550..b9faaefcd3c5f978af9d72f08f1ba230d5a27b24 100755
 --- a/tools/clang/scripts/update.py
 +++ b/tools/clang/scripts/update.py
-@@ -35,7 +35,7 @@ import zipfile
+@@ -35,10 +35,10 @@ import zipfile
  # Do NOT CHANGE this if you don't know what you're doing -- see
  # https://chromium.googlesource.com/chromium/src/+/master/docs/updating_clang.md
  # Reverting problematic clang rolls is safe, though.
 -CLANG_REVISION = '357692'
 +CLANG_REVISION = '356356'
  
- use_head_revision = bool(os.environ.get('LLVM_FORCE_HEAD_REVISION', '0')
-                          in ('1', 'YES'))
-@@ -43,7 +43,7 @@ if use_head_revision:
-   CLANG_REVISION = 'HEAD'
- 
  # This is incremented when pushing a new build of Clang at the same revision.
 -CLANG_SUB_REVISION=1
 +CLANG_SUB_REVISION=3

+ 1 - 1
patches/common/chromium/scroll_bounce_flag.patch

@@ -6,7 +6,7 @@ Subject: scroll_bounce_flag.patch
 Patch to make scrollBounce option work.
 
 diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
-index e47b89dbbe1c9d428750d564bca8aa30e8915298..462d3693cc5dadc8677dac2d0e98ee274bd8b783 100644
+index d4c55a577bde40d8d28641a7aa42a5218540cb32..6dcd14f54ba4f0778fbcf1e82689755033feb1ca 100644
 --- a/content/renderer/render_thread_impl.cc
 +++ b/content/renderer/render_thread_impl.cc
 @@ -1534,7 +1534,7 @@ bool RenderThreadImpl::IsGpuMemoryBufferCompositorResourcesEnabled() {

+ 1 - 1
patches/common/chromium/support_mixed_sandbox_with_zygote.patch

@@ -22,7 +22,7 @@ However, the patch would need to be reviewed by the security team, as it
 does touch a security-sensitive class.
 
 diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
-index 6546420e33164c612298d76e8fdf32bfde061b98..721ea34bcd930dece08173366375ace0a16bc7d0 100644
+index abb4caa2a04c50d11165005768891f416aa684d3..c44c20c07828242eb3b7000252636d30a6fab2e1 100644
 --- a/content/browser/renderer_host/render_process_host_impl.cc
 +++ b/content/browser/renderer_host/render_process_host_impl.cc
 @@ -420,6 +420,10 @@ class RendererSandboxedProcessLauncherDelegate

+ 1 - 1
patches/common/chromium/unsandboxed_ppapi_processes_skip_zygote.patch

@@ -5,7 +5,7 @@ Subject: unsandboxed ppapi processes skip zygote
 
 
 diff --git a/content/browser/ppapi_plugin_process_host.cc b/content/browser/ppapi_plugin_process_host.cc
-index 2d57937dfffb4ea85739f27780e53c04ef087f58..39a21171b4584cc6f45e2407a02dee2609603249 100644
+index 817fa41a2dcb4692b33915281b1efc66d1b07334..e7c58a83517061bc127b57e6e0e6875d681b3430 100644
 --- a/content/browser/ppapi_plugin_process_host.cc
 +++ b/content/browser/ppapi_plugin_process_host.cc
 @@ -106,6 +106,9 @@ class PpapiPluginSandboxedProcessLauncherDelegate

+ 13 - 13
patches/common/chromium/viz_osr.patch

@@ -97,10 +97,10 @@ index 93c52d2b928cba6e98723e19b005fb7bd7089a58..4dc645e770a2a039ed8e4ff4de555767
   private:
    const HWND hwnd_;
 diff --git a/components/viz/service/BUILD.gn b/components/viz/service/BUILD.gn
-index bc3f8a7ee8e1ad4d3aa23baf85638eff48158987..e6610ac4289997386ff17b1adeab80672572c3f7 100644
+index b87dda651d12d8b6bd1c58bc323ec06667418794..58aaf1bb6692d7365fbd4fe2f4d6daa86886e126 100644
 --- a/components/viz/service/BUILD.gn
 +++ b/components/viz/service/BUILD.gn
-@@ -115,6 +115,8 @@ viz_component("service") {
+@@ -116,6 +116,8 @@ viz_component("service") {
      "display_embedder/in_process_gpu_memory_buffer_manager.h",
      "display_embedder/server_shared_bitmap_manager.cc",
      "display_embedder/server_shared_bitmap_manager.h",
@@ -110,7 +110,7 @@ index bc3f8a7ee8e1ad4d3aa23baf85638eff48158987..e6610ac4289997386ff17b1adeab8067
      "display_embedder/software_output_surface.h",
      "display_embedder/viz_process_context_provider.cc",
 diff --git a/components/viz/service/display_embedder/gpu_display_provider.cc b/components/viz/service/display_embedder/gpu_display_provider.cc
-index 1c79ef0c20e611eaf547dabd9936a59c954c0bb8..a9bf01500052bc1e4fbacc133a7feacd68bf6057 100644
+index e57ba4becd8453d8fc452df7b571d4a0794c4b74..b8ef7e9410f172ff09b90087655ea85f89a748eb 100644
 --- a/components/viz/service/display_embedder/gpu_display_provider.cc
 +++ b/components/viz/service/display_embedder/gpu_display_provider.cc
 @@ -19,6 +19,7 @@
@@ -121,7 +121,7 @@ index 1c79ef0c20e611eaf547dabd9936a59c954c0bb8..a9bf01500052bc1e4fbacc133a7feacd
  #include "components/viz/service/display_embedder/software_output_surface.h"
  #include "components/viz/service/display_embedder/viz_process_context_provider.h"
  #include "components/viz/service/gl/gpu_service_impl.h"
-@@ -282,6 +283,19 @@ GpuDisplayProvider::CreateSoftwareOutputDeviceForPlatform(
+@@ -277,6 +278,19 @@ GpuDisplayProvider::CreateSoftwareOutputDeviceForPlatform(
    if (headless_)
      return std::make_unique<SoftwareOutputDevice>();
  
@@ -479,10 +479,10 @@ index a339eaa4dc9ccec292b3df9f31adf1ad45119a77..33146bbe7bb01fbe24cea10d79cad274
      return std::make_unique<SoftwareOutputDeviceWinDirect>(hwnd, backing);
    }
 diff --git a/services/viz/privileged/interfaces/compositing/display_private.mojom b/services/viz/privileged/interfaces/compositing/display_private.mojom
-index 997b82c91539a947fefde5671f898ee97b72f3b8..78b70b490fcc92f0d14e1cde08d3eddf7fa1e562 100644
+index f43ad2f0aeeb4e088c087b0c83cbf35aa764dfef..f88fda16a6f6e88d38b3a3e27a7daed8c4c270f8 100644
 --- a/services/viz/privileged/interfaces/compositing/display_private.mojom
 +++ b/services/viz/privileged/interfaces/compositing/display_private.mojom
-@@ -62,12 +62,14 @@ interface DisplayPrivate {
+@@ -73,12 +73,14 @@ interface DisplayPrivate {
  };
  
  interface DisplayClient {
@@ -510,7 +510,7 @@ index 360cab3eee4c5189a55269d76daa1d78a98ed3d3..6834242f23d27fd6d428c2cd6040206a
 +  Draw(gfx.mojom.Rect damage_rect) => ();
  };
 diff --git a/ui/compositor/compositor.h b/ui/compositor/compositor.h
-index 102c2fcef1124058edc74ab329fa7a073dceef13..2794f5bad7b0ad52a43c044ef2822d4e29aed5ab 100644
+index d1352c059e0ef414e36408648d389b479aab9e28..9326d44cdf9d92b6c7603e8697255b9c204eccf0 100644
 --- a/ui/compositor/compositor.h
 +++ b/ui/compositor/compositor.h
 @@ -24,6 +24,7 @@
@@ -519,9 +519,9 @@ index 102c2fcef1124058edc74ab329fa7a073dceef13..2794f5bad7b0ad52a43c044ef2822d4e
  #include "components/viz/common/surfaces/local_surface_id_allocation.h"
 +#include "components/viz/host/host_display_client.h"
  #include "components/viz/host/host_frame_sink_client.h"
+ #include "services/viz/privileged/interfaces/compositing/vsync_parameter_observer.mojom-forward.h"
  #include "third_party/skia/include/core/SkColor.h"
- #include "third_party/skia/include/core/SkMatrix44.h"
-@@ -194,6 +195,15 @@ class COMPOSITOR_EXPORT ContextFactory {
+@@ -199,6 +200,15 @@ class COMPOSITOR_EXPORT ContextFactory {
    virtual bool SyncTokensRequiredForDisplayCompositor() = 0;
  };
  
@@ -537,7 +537,7 @@ index 102c2fcef1124058edc74ab329fa7a073dceef13..2794f5bad7b0ad52a43c044ef2822d4e
  // Compositor object to take care of GPU painting.
  // A Browser compositor object is responsible for generating the final
  // displayable form of pixels comprising a single widget's contents. It draws an
-@@ -236,6 +246,9 @@ class COMPOSITOR_EXPORT Compositor : public cc::LayerTreeHostClient,
+@@ -238,6 +248,9 @@ class COMPOSITOR_EXPORT Compositor : public cc::LayerTreeHostClient,
    // Schedules a redraw of the layer tree associated with this compositor.
    void ScheduleDraw();
  
@@ -547,7 +547,7 @@ index 102c2fcef1124058edc74ab329fa7a073dceef13..2794f5bad7b0ad52a43c044ef2822d4e
    // Sets the root of the layer tree drawn by this Compositor. The root layer
    // must have no parent. The compositor's root layer is reset if the root layer
    // is destroyed. NULL can be passed to reset the root layer, in which case the
-@@ -460,6 +473,8 @@ class COMPOSITOR_EXPORT Compositor : public cc::LayerTreeHostClient,
+@@ -463,6 +476,8 @@ class COMPOSITOR_EXPORT Compositor : public cc::LayerTreeHostClient,
    ui::ContextFactory* context_factory_;
    ui::ContextFactoryPrivate* context_factory_private_;
  
@@ -557,10 +557,10 @@ index 102c2fcef1124058edc74ab329fa7a073dceef13..2794f5bad7b0ad52a43c044ef2822d4e
    Layer* root_layer_ = nullptr;
  
 diff --git a/ui/compositor/host/host_context_factory_private.cc b/ui/compositor/host/host_context_factory_private.cc
-index 2b23ed42a93399127cb9e67623fafd51c6bdb003..c934258b5de8fa6758bd8d118126b97bbe61ac30 100644
+index f8b1e4b8c64809bf3b151f0578e3bfe6f5b2d6b6..d866753c01bce623c45435fc01cfbac3841afc90 100644
 --- a/ui/compositor/host/host_context_factory_private.cc
 +++ b/ui/compositor/host/host_context_factory_private.cc
-@@ -69,8 +69,12 @@ void HostContextFactoryPrivate::ConfigureCompositor(
+@@ -70,8 +70,12 @@ void HostContextFactoryPrivate::ConfigureCompositor(
        mojo::MakeRequest(&root_params->compositor_frame_sink_client);
    root_params->display_private =
        mojo::MakeRequest(&compositor_data.display_private);

+ 3 - 3
patches/common/chromium/web_contents.patch

@@ -5,10 +5,10 @@ Subject: web_contents.patch
 
 
 diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
-index 1491bf580c59b6550194aae03c4bdd7f9d6ffc06..673416eaff000df8c9a9b9266a84cd1dbd7d3773 100644
+index 1729f407f21be18891393f08e763ab18eceb1c1a..fab77addce46c326aa1e493808a0f4b61ecadd0e 100644
 --- a/content/browser/web_contents/web_contents_impl.cc
 +++ b/content/browser/web_contents/web_contents_impl.cc
-@@ -2068,6 +2068,12 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params) {
+@@ -2066,6 +2066,12 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params) {
    std::string unique_name;
    frame_tree_.root()->SetFrameName(params.main_frame_name, unique_name);
  
@@ -21,7 +21,7 @@ index 1491bf580c59b6550194aae03c4bdd7f9d6ffc06..673416eaff000df8c9a9b9266a84cd1d
    WebContentsViewDelegate* delegate =
        GetContentClient()->browser()->GetWebContentsViewDelegate(this);
  
-@@ -2083,6 +2089,7 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params) {
+@@ -2081,6 +2087,7 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params) {
            &render_view_host_delegate_view_);
      }
    }

+ 2 - 2
patches/common/chromium/webview_cross_drag.patch

@@ -5,10 +5,10 @@ Subject: webview_cross_drag.patch
 
 
 diff --git a/content/browser/web_contents/web_contents_view_aura.cc b/content/browser/web_contents/web_contents_view_aura.cc
-index 74f537d116187d74f54e8285475d9f0a1c318576..9a64f45a08ed788d59b4f34f8bdb6a1e969dce30 100644
+index 2ff912c1b4fbf02a5c00dfd0206f21f9a3608160..a81fce5c072b91f2dda2fea0f87110d1499603a1 100644
 --- a/content/browser/web_contents/web_contents_view_aura.cc
 +++ b/content/browser/web_contents/web_contents_view_aura.cc
-@@ -630,6 +630,7 @@ gfx::NativeView WebContentsViewAura::GetRenderWidgetHostViewParent() const {
+@@ -754,6 +754,7 @@ gfx::NativeView WebContentsViewAura::GetRenderWidgetHostViewParent() const {
  
  bool WebContentsViewAura::IsValidDragTarget(
      RenderWidgetHostImpl* target_rwh) const {

+ 8 - 8
patches/common/chromium/worker_context_will_destroy.patch

@@ -21,10 +21,10 @@ index fad5f104f0113813133c69fe8a4392d73f153ba5..01c826ef12b4e04033377d4e5e50fcb8
    // An empty URL is returned if the URL is not overriden.
    virtual GURL OverrideFlashEmbedWithHTML(const GURL& url);
 diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer/renderer_blink_platform_impl.cc
-index 30273211857b6aa7b9f98dfaa46e3f539c4e7931..f98cb1d4e72c2fd0fffbe177d3e19ef8dc6afe1e 100644
+index 812c9b48c817cf01837e6513336c9dc76f1fda60..440339726d0bd5359f98dda971dbc4fd806c4094 100644
 --- a/content/renderer/renderer_blink_platform_impl.cc
 +++ b/content/renderer/renderer_blink_platform_impl.cc
-@@ -1095,6 +1095,12 @@ void RendererBlinkPlatformImpl::WillStopWorkerThread() {
+@@ -1086,6 +1086,12 @@ void RendererBlinkPlatformImpl::WillStopWorkerThread() {
    WorkerThreadRegistry::Instance()->WillStopCurrentWorkerThread();
  }
  
@@ -38,10 +38,10 @@ index 30273211857b6aa7b9f98dfaa46e3f539c4e7931..f98cb1d4e72c2fd0fffbe177d3e19ef8
      const v8::Local<v8::Context>& worker) {
    GetContentClient()->renderer()->DidInitializeWorkerContextOnWorkerThread(
 diff --git a/content/renderer/renderer_blink_platform_impl.h b/content/renderer/renderer_blink_platform_impl.h
-index 629362d2f99059f941220dbc50645f7f7f838e99..cc0654a4555cea5281353756e80bb9e5b7a398c7 100644
+index 752d0929185111f4b8ad8bdb0ba5d54e4c9de294..924d3182acccf3e2f8030a3f7a7b1f62f5f29fc3 100644
 --- a/content/renderer/renderer_blink_platform_impl.h
 +++ b/content/renderer/renderer_blink_platform_impl.h
-@@ -214,6 +214,7 @@ class CONTENT_EXPORT RendererBlinkPlatformImpl : public BlinkPlatformImpl {
+@@ -212,6 +212,7 @@ class CONTENT_EXPORT RendererBlinkPlatformImpl : public BlinkPlatformImpl {
    void DidStartWorkerThread() override;
    void WillStopWorkerThread() override;
    void WorkerContextCreated(const v8::Local<v8::Context>& worker) override;
@@ -50,10 +50,10 @@ index 629362d2f99059f941220dbc50645f7f7f838e99..cc0654a4555cea5281353756e80bb9e5
    void RecordMetricsForBackgroundedRendererPurge() override;
  
 diff --git a/third_party/blink/public/platform/platform.h b/third_party/blink/public/platform/platform.h
-index 198d6649ef4164800b8c8ba86e522e643d7a420f..9841217dcdb9fc2c0e6506206103b9192d9d15d9 100644
+index 89475620b73b66b336842cee144cee53242a1403..b0e110e04329b0e55b42e9f57aa0d28499049222 100644
 --- a/third_party/blink/public/platform/platform.h
 +++ b/third_party/blink/public/platform/platform.h
-@@ -682,6 +682,7 @@ class BLINK_PLATFORM_EXPORT Platform {
+@@ -676,6 +676,7 @@ class BLINK_PLATFORM_EXPORT Platform {
    virtual void DidStartWorkerThread() {}
    virtual void WillStopWorkerThread() {}
    virtual void WorkerContextCreated(const v8::Local<v8::Context>& worker) {}
@@ -62,10 +62,10 @@ index 198d6649ef4164800b8c8ba86e522e643d7a420f..9841217dcdb9fc2c0e6506206103b919
        const WebSecurityOrigin& script_origin) {
      return false;
 diff --git a/third_party/blink/renderer/core/workers/worker_thread.cc b/third_party/blink/renderer/core/workers/worker_thread.cc
-index 96dacc97cac57a039f2506ab4d4e3ca2664e18ef..5a31664f44ec87d87e1500b00ec4732918ede625 100644
+index 3b579edbe368f1974d352123729a748b7acf0583..9a0554c7cdd61ce73133a42ab10ba21e08430f07 100644
 --- a/third_party/blink/renderer/core/workers/worker_thread.cc
 +++ b/third_party/blink/renderer/core/workers/worker_thread.cc
-@@ -558,6 +558,12 @@ void WorkerThread::PrepareForShutdownOnWorkerThread() {
+@@ -569,6 +569,12 @@ void WorkerThread::PrepareForShutdownOnWorkerThread() {
        SetExitCode(ExitCode::kGracefullyTerminated);
    }
  

+ 3 - 1
patches/common/v8/.patches

@@ -1,9 +1,11 @@
 add_realloc.patch
 build_gn.patch
 expose_mksnapshot.patch
+revert_api_remove_deprecated_conversion_functions.patch
 deps_provide_more_v8_backwards_compatibility.patch
 dcheck.patch
+revert_reland_api_heap_remove_deprecated_persistent_apis.patch
 fixme_revert_heap_api_remove_deprecated_apis.patch
 revert_cctest_add_v8_export_private_to_arm_arm64_ports.patch
 export_symbols_needed_for_windows_build.patch
-woa_symbol_workaround.patch
+workaround_an_undefined_symbol_error.patch

+ 3 - 3
patches/common/v8/add_realloc.patch

@@ -12,10 +12,10 @@ when we override ReallocateBufferMemory, so we therefore need to implement
 Realloc on the v8 side.
 
 diff --git a/include/v8.h b/include/v8.h
-index 6ea19f43013af0b53dcd673e6175f36f95959e1a..f3ec969c25f121514588f762332c914a22f34527 100644
+index a3ae21f1a9fcacd1f007f9c77c9ba48c2818df05..0e21793b1214c681770b72f64b9f0d6188c6a385 100644
 --- a/include/v8.h
 +++ b/include/v8.h
-@@ -4694,6 +4694,13 @@ class V8_EXPORT ArrayBuffer : public Object {
+@@ -4647,6 +4647,13 @@ class V8_EXPORT ArrayBuffer : public Object {
       */
      virtual void* AllocateUninitialized(size_t length) = 0;
  
@@ -30,7 +30,7 @@ index 6ea19f43013af0b53dcd673e6175f36f95959e1a..f3ec969c25f121514588f762332c914a
       * Free the memory block of size |length|, pointed to by |data|.
       * That memory is guaranteed to be previously allocated by |Allocate|.
 diff --git a/src/api.cc b/src/api.cc
-index 64c4ae9bc1d70fa5cdc88ee0d2ea9a9f891ae2c4..3b3e84456431bdff91f32ca856fcc0a939fc47cb 100644
+index 7c496e2e857073057cb519c4b66b867b4a16929e..c2fc1fc9827f896c521606a75baecef6c60e8f8a 100644
 --- a/src/api.cc
 +++ b/src/api.cc
 @@ -520,6 +520,10 @@ void V8::SetSnapshotDataBlob(StartupData* snapshot_blob) {

+ 3 - 3
patches/common/v8/build_gn.patch

@@ -5,7 +5,7 @@ Subject: build_gn.patch
 
 
 diff --git a/BUILD.gn b/BUILD.gn
-index a8aa8d820e88ad056b5b72861f35f640acdc9ff4..ade81276041c70e7e9198489e5e0cab41f279562 100644
+index 5b6ba9872f5b5b6844a6cd9094fc1d61b7089b5e..24bb79afe2458e64738ddd1b910250ede75c2a83 100644
 --- a/BUILD.gn
 +++ b/BUILD.gn
 @@ -262,7 +262,7 @@ config("internal_config") {
@@ -17,7 +17,7 @@ index a8aa8d820e88ad056b5b72861f35f640acdc9ff4..ade81276041c70e7e9198489e5e0cab4
      defines += [ "BUILDING_V8_SHARED" ]
    }
  }
-@@ -3655,7 +3655,7 @@ if (current_toolchain == v8_generator_toolchain) {
+@@ -3708,7 +3708,7 @@ if (current_toolchain == v8_generator_toolchain) {
        "src/interpreter/bytecodes.h",
      ]
  
@@ -26,7 +26,7 @@ index a8aa8d820e88ad056b5b72861f35f640acdc9ff4..ade81276041c70e7e9198489e5e0cab4
  
      deps = [
        ":v8_libbase",
-@@ -3676,6 +3676,8 @@ if (v8_use_snapshot && current_toolchain == v8_snapshot_toolchain) {
+@@ -3729,6 +3729,8 @@ if (v8_use_snapshot && current_toolchain == v8_snapshot_toolchain) {
  
      configs = [ ":internal_config" ]
  

+ 4 - 4
patches/common/v8/dcheck.patch

@@ -5,10 +5,10 @@ Subject: dcheck.patch
 
 
 diff --git a/src/api.cc b/src/api.cc
-index bf68b0966d4f92e99810578b0d385334706f0018..e2d409057aa0f333b61e3d6e03f2358feab2081f 100644
+index a91a11b9dedf375b7d3950dfd6eab3f63b23e0ca..1102e5d9ca745ec57257379acef92a17d374362d 100644
 --- a/src/api.cc
 +++ b/src/api.cc
-@@ -8631,7 +8631,7 @@ void Isolate::SetPromiseRejectCallback(PromiseRejectCallback callback) {
+@@ -8633,7 +8633,7 @@ void Isolate::SetPromiseRejectCallback(PromiseRejectCallback callback) {
  
  
  void Isolate::RunMicrotasks() {
@@ -18,10 +18,10 @@ index bf68b0966d4f92e99810578b0d385334706f0018..e2d409057aa0f333b61e3d6e03f2358f
    isolate->default_microtask_queue()->RunMicrotasks(isolate);
  }
 diff --git a/src/heap/heap.cc b/src/heap/heap.cc
-index a6b3f5dd1d9475ac4ceea55273f20fe9dea9a818..e73de4020d355fb126a59f0c42c8655330d3d40e 100644
+index c1bbe6ee3e8fd8e93a49200e3369be98b340a889..0750431050b07ac38c8f9c341ea4ec13ad5a2586 100644
 --- a/src/heap/heap.cc
 +++ b/src/heap/heap.cc
-@@ -4936,9 +4936,9 @@ void Heap::TearDown() {
+@@ -4943,9 +4943,9 @@ void Heap::TearDown() {
  void Heap::AddGCPrologueCallback(v8::Isolate::GCCallbackWithData callback,
                                   GCType gc_type, void* data) {
    DCHECK_NOT_NULL(callback);

+ 27 - 29
patches/common/v8/deps_provide_more_v8_backwards_compatibility.patch

@@ -22,10 +22,10 @@ Reviewed-By: Yang Guo <[email protected]>
 Reviewed-By: Michaël Zasso <[email protected]>
 
 diff --git a/include/v8.h b/include/v8.h
-index f3ec969c25f121514588f762332c914a22f34527..4757ef851b6bb6f0606686c30312d6c38e2d3fb8 100644
+index 4a3b94897f01f7d770770abc26b030f54060d3de..26ac2cb01da36529e99dcd5cc878523601addc0d 100644
 --- a/include/v8.h
 +++ b/include/v8.h
-@@ -1141,6 +1141,10 @@ class V8_EXPORT PrimitiveArray {
+@@ -1109,6 +1109,10 @@ class V8_EXPORT PrimitiveArray {
   public:
    static Local<PrimitiveArray> New(Isolate* isolate, int length);
    int Length() const;
@@ -36,7 +36,7 @@ index f3ec969c25f121514588f762332c914a22f34527..4757ef851b6bb6f0606686c30312d6c3
    void Set(Isolate* isolate, int index, Local<Primitive> item);
    Local<Primitive> Get(Isolate* isolate, int index);
  };
-@@ -1849,6 +1853,8 @@ class V8_EXPORT StackTrace {
+@@ -1817,6 +1821,8 @@ class V8_EXPORT StackTrace {
    /**
     * Returns a StackFrame at a particular index.
     */
@@ -45,7 +45,7 @@ index f3ec969c25f121514588f762332c914a22f34527..4757ef851b6bb6f0606686c30312d6c3
    Local<StackFrame> GetFrame(Isolate* isolate, uint32_t index) const;
  
    /**
-@@ -2549,6 +2555,13 @@ class V8_EXPORT Value : public Data {
+@@ -2518,6 +2524,13 @@ class V8_EXPORT Value : public Data {
    V8_DEPRECATED("Use maybe version",
                  Local<Int32> ToInt32(Isolate* isolate) const);
  
@@ -59,7 +59,7 @@ index f3ec969c25f121514588f762332c914a22f34527..4757ef851b6bb6f0606686c30312d6c3
    /**
     * Attempts to convert a string to an array index.
     * Returns an empty handle if the conversion fails.
-@@ -2568,7 +2581,14 @@ class V8_EXPORT Value : public Data {
+@@ -2537,7 +2550,14 @@ class V8_EXPORT Value : public Data {
        Local<Context> context) const;
    V8_WARN_UNUSED_RESULT Maybe<int32_t> Int32Value(Local<Context> context) const;
  
@@ -74,7 +74,7 @@ index f3ec969c25f121514588f762332c914a22f34527..4757ef851b6bb6f0606686c30312d6c3
    V8_WARN_UNUSED_RESULT Maybe<bool> Equals(Local<Context> context,
                                             Local<Value> that) const;
    bool StrictEquals(Local<Value> that) const;
-@@ -2675,6 +2695,8 @@ class V8_EXPORT String : public Name {
+@@ -2644,6 +2664,8 @@ class V8_EXPORT String : public Name {
     * Returns the number of bytes in the UTF-8 encoded
     * representation of this string.
     */
@@ -83,7 +83,7 @@ index f3ec969c25f121514588f762332c914a22f34527..4757ef851b6bb6f0606686c30312d6c3
    int Utf8Length(Isolate* isolate) const;
  
    /**
-@@ -2731,12 +2753,23 @@ class V8_EXPORT String : public Name {
+@@ -2700,12 +2722,23 @@ class V8_EXPORT String : public Name {
    // 16-bit character codes.
    int Write(Isolate* isolate, uint16_t* buffer, int start = 0, int length = -1,
              int options = NO_OPTIONS) const;
@@ -107,7 +107,7 @@ index f3ec969c25f121514588f762332c914a22f34527..4757ef851b6bb6f0606686c30312d6c3
  
    /**
     * A zero length string.
-@@ -2924,6 +2957,9 @@ class V8_EXPORT String : public Name {
+@@ -2893,6 +2926,9 @@ class V8_EXPORT String : public Name {
     */
    static Local<String> Concat(Isolate* isolate, Local<String> left,
                                Local<String> right);
@@ -117,7 +117,7 @@ index f3ec969c25f121514588f762332c914a22f34527..4757ef851b6bb6f0606686c30312d6c3
  
    /**
     * Creates a new external string using the data defined in the given
-@@ -2992,6 +3028,8 @@ class V8_EXPORT String : public Name {
+@@ -2961,6 +2997,8 @@ class V8_EXPORT String : public Name {
     */
    class V8_EXPORT Utf8Value {
     public:
@@ -126,7 +126,7 @@ index f3ec969c25f121514588f762332c914a22f34527..4757ef851b6bb6f0606686c30312d6c3
      Utf8Value(Isolate* isolate, Local<v8::Value> obj);
      ~Utf8Value();
      char* operator*() { return str_; }
-@@ -3015,6 +3053,7 @@ class V8_EXPORT String : public Name {
+@@ -2984,6 +3022,7 @@ class V8_EXPORT String : public Name {
     */
    class V8_EXPORT Value {
     public:
@@ -134,7 +134,7 @@ index f3ec969c25f121514588f762332c914a22f34527..4757ef851b6bb6f0606686c30312d6c3
      Value(Isolate* isolate, Local<v8::Value> obj);
      ~Value();
      uint16_t* operator*() { return str_; }
-@@ -5383,6 +5422,8 @@ class V8_EXPORT BooleanObject : public Object {
+@@ -5352,6 +5391,8 @@ class V8_EXPORT BooleanObject : public Object {
  class V8_EXPORT StringObject : public Object {
   public:
    static Local<Value> New(Isolate* isolate, Local<String> value);
@@ -143,7 +143,7 @@ index f3ec969c25f121514588f762332c914a22f34527..4757ef851b6bb6f0606686c30312d6c3
  
    Local<String> ValueOf() const;
  
-@@ -10496,6 +10537,30 @@ template <class T> Value* Value::Cast(T* value) {
+@@ -10457,6 +10498,30 @@ template <class T> Value* Value::Cast(T* value) {
  }
  
  
@@ -175,10 +175,10 @@ index f3ec969c25f121514588f762332c914a22f34527..4757ef851b6bb6f0606686c30312d6c3
  #ifdef V8_ENABLE_CHECKS
    CheckCast(value);
 diff --git a/src/api.cc b/src/api.cc
-index 3b3e84456431bdff91f32ca856fcc0a939fc47cb..bf68b0966d4f92e99810578b0d385334706f0018 100644
+index 9124d03fa6195269eaf851591bb95125c2081e2f..a91a11b9dedf375b7d3950dfd6eab3f63b23e0ca 100644
 --- a/src/api.cc
 +++ b/src/api.cc
-@@ -2224,6 +2224,10 @@ int PrimitiveArray::Length() const {
+@@ -2227,6 +2227,10 @@ int PrimitiveArray::Length() const {
    return array->length();
  }
  
@@ -189,7 +189,7 @@ index 3b3e84456431bdff91f32ca856fcc0a939fc47cb..bf68b0966d4f92e99810578b0d385334
  void PrimitiveArray::Set(Isolate* v8_isolate, int index,
                           Local<Primitive> item) {
    i::Isolate* isolate = reinterpret_cast<i::Isolate*>(v8_isolate);
-@@ -2237,6 +2241,10 @@ void PrimitiveArray::Set(Isolate* v8_isolate, int index,
+@@ -2240,6 +2244,10 @@ void PrimitiveArray::Set(Isolate* v8_isolate, int index,
    array->set(index, *i_item);
  }
  
@@ -200,7 +200,7 @@ index 3b3e84456431bdff91f32ca856fcc0a939fc47cb..bf68b0966d4f92e99810578b0d385334
  Local<Primitive> PrimitiveArray::Get(Isolate* v8_isolate, int index) {
    i::Isolate* isolate = reinterpret_cast<i::Isolate*>(v8_isolate);
    i::Handle<i::FixedArray> array = Utils::OpenHandle(this);
-@@ -2942,6 +2950,10 @@ void Message::PrintCurrentStackTrace(Isolate* isolate, FILE* out) {
+@@ -2945,6 +2953,10 @@ void Message::PrintCurrentStackTrace(Isolate* isolate, FILE* out) {
  
  // --- S t a c k T r a c e ---
  
@@ -211,10 +211,10 @@ index 3b3e84456431bdff91f32ca856fcc0a939fc47cb..bf68b0966d4f92e99810578b0d385334
  Local<StackFrame> StackTrace::GetFrame(Isolate* v8_isolate,
                                         uint32_t index) const {
    i::Isolate* isolate = reinterpret_cast<i::Isolate*>(v8_isolate);
-@@ -3906,6 +3918,36 @@ void v8::RegExp::CheckCast(v8::Value* that) {
+@@ -3908,6 +3920,34 @@ void v8::RegExp::CheckCast(v8::Value* that) {
+                   "Could not convert to regular expression");
  }
  
- 
 +bool Value::BooleanValue() const {
 +  return BooleanValue(Isolate::GetCurrent()->GetCurrentContext())
 +      .FromJust();
@@ -243,12 +243,10 @@ index 3b3e84456431bdff91f32ca856fcc0a939fc47cb..bf68b0966d4f92e99810578b0d385334
 +  return Int32Value(Isolate::GetCurrent()->GetCurrentContext())
 +      .FromMaybe(0);
 +}
-+
-+
+ 
  Maybe<bool> Value::BooleanValue(Local<Context> context) const {
    i::Isolate* isolate = reinterpret_cast<i::Isolate*>(context->GetIsolate());
-   return Just(Utils::OpenHandle(this)->BooleanValue(isolate));
-@@ -3994,6 +4036,12 @@ MaybeLocal<Uint32> Value::ToArrayIndex(Local<Context> context) const {
+@@ -3997,6 +4037,12 @@ MaybeLocal<Uint32> Value::ToArrayIndex(Local<Context> context) const {
  }
  
  
@@ -261,7 +259,7 @@ index 3b3e84456431bdff91f32ca856fcc0a939fc47cb..bf68b0966d4f92e99810578b0d385334
  Maybe<bool> Value::Equals(Local<Context> context, Local<Value> that) const {
    i::Isolate* isolate = Utils::OpenHandle(*context)->GetIsolate();
    auto self = Utils::OpenHandle(this);
-@@ -5272,6 +5320,10 @@ bool String::ContainsOnlyOneByte() const {
+@@ -5275,6 +5321,10 @@ bool String::ContainsOnlyOneByte() const {
    return helper.Check(*str);
  }
  
@@ -272,7 +270,7 @@ index 3b3e84456431bdff91f32ca856fcc0a939fc47cb..bf68b0966d4f92e99810578b0d385334
  int String::Utf8Length(Isolate* isolate) const {
    i::Handle<i::String> str = Utils::OpenHandle(this);
    str = i::String::Flatten(reinterpret_cast<i::Isolate*>(isolate), str);
-@@ -5424,6 +5476,14 @@ static int WriteUtf8Impl(i::Vector<const Char> string, char* write_start,
+@@ -5427,6 +5477,14 @@ static int WriteUtf8Impl(i::Vector<const Char> string, char* write_start,
  }
  }  // anonymous namespace
  
@@ -287,7 +285,7 @@ index 3b3e84456431bdff91f32ca856fcc0a939fc47cb..bf68b0966d4f92e99810578b0d385334
  int String::WriteUtf8(Isolate* v8_isolate, char* buffer, int capacity,
                        int* nchars_ref, int options) const {
    i::Handle<i::String> str = Utils::OpenHandle(this);
-@@ -5464,6 +5524,18 @@ static inline int WriteHelper(i::Isolate* isolate, const String* string,
+@@ -5467,6 +5525,18 @@ static inline int WriteHelper(i::Isolate* isolate, const String* string,
  }
  
  
@@ -306,7 +304,7 @@ index 3b3e84456431bdff91f32ca856fcc0a939fc47cb..bf68b0966d4f92e99810578b0d385334
  int String::WriteOneByte(Isolate* isolate, uint8_t* buffer, int start,
                           int length, int options) const {
    return WriteHelper(reinterpret_cast<i::Isolate*>(isolate), this, buffer,
-@@ -6430,6 +6502,11 @@ MaybeLocal<String> String::NewFromTwoByte(Isolate* isolate,
+@@ -6434,6 +6504,11 @@ MaybeLocal<String> String::NewFromTwoByte(Isolate* isolate,
    return result;
  }
  
@@ -318,7 +316,7 @@ index 3b3e84456431bdff91f32ca856fcc0a939fc47cb..bf68b0966d4f92e99810578b0d385334
  Local<String> v8::String::Concat(Isolate* v8_isolate, Local<String> left,
                                   Local<String> right) {
    i::Isolate* isolate = reinterpret_cast<i::Isolate*>(v8_isolate);
-@@ -6712,6 +6789,11 @@ bool v8::BooleanObject::ValueOf() const {
+@@ -6716,6 +6791,11 @@ bool v8::BooleanObject::ValueOf() const {
  }
  
  
@@ -330,7 +328,7 @@ index 3b3e84456431bdff91f32ca856fcc0a939fc47cb..bf68b0966d4f92e99810578b0d385334
  Local<v8::Value> v8::StringObject::New(Isolate* v8_isolate,
                                         Local<String> value) {
    i::Handle<i::String> string = Utils::OpenHandle(*value);
-@@ -8995,6 +9077,9 @@ bool MicrotasksScope::IsRunningMicrotasks(Isolate* v8_isolate) {
+@@ -8998,6 +9078,9 @@ bool MicrotasksScope::IsRunningMicrotasks(Isolate* v8_isolate) {
    return microtask_queue->IsRunningMicrotasks();
  }
  
@@ -340,7 +338,7 @@ index 3b3e84456431bdff91f32ca856fcc0a939fc47cb..bf68b0966d4f92e99810578b0d385334
  String::Utf8Value::Utf8Value(v8::Isolate* isolate, v8::Local<v8::Value> obj)
      : str_(nullptr), length_(0) {
    if (obj.IsEmpty()) return;
-@@ -9014,6 +9099,9 @@ String::Utf8Value::~Utf8Value() {
+@@ -9017,6 +9100,9 @@ String::Utf8Value::~Utf8Value() {
    i::DeleteArray(str_);
  }
  

+ 2 - 2
patches/common/v8/export_symbols_needed_for_windows_build.patch

@@ -6,10 +6,10 @@ Subject: Export symbols needed for Windows build
 These symbols are required to build v8 with BUILD_V8_SHARED on Windows.
 
 diff --git a/src/objects.h b/src/objects.h
-index ab8c564e8eca2f729d98c902d1bd5429a95da1fd..6f5f6d9dfc9092870fecf23d34f2e48f1c100921 100644
+index 60f6557423cf1d2e844739484883985deb9c764d..5043de65fe5224742f701b9445d232ce92d7262a 100644
 --- a/src/objects.h
 +++ b/src/objects.h
-@@ -1122,7 +1122,7 @@ enum class KeyCollectionMode {
+@@ -816,7 +816,7 @@ enum class KeyCollectionMode {
  // Utility superclass for stack-allocated objects that must be updated
  // on gc.  It provides two ways for the gc to update instances, either
  // iterating or updating after gc.

+ 2 - 2
patches/common/v8/expose_mksnapshot.patch

@@ -6,10 +6,10 @@ Subject: expose_mksnapshot.patch
 Needed in order to target mksnapshot for mksnapshot zip.
 
 diff --git a/BUILD.gn b/BUILD.gn
-index ade81276041c70e7e9198489e5e0cab41f279562..b4350c88822023f5c52c081746de034401d0c47c 100644
+index 24bb79afe2458e64738ddd1b910250ede75c2a83..6344f50aa999f38e95d04e62c64d76420f39eb84 100644
 --- a/BUILD.gn
 +++ b/BUILD.gn
-@@ -3666,8 +3666,6 @@ if (current_toolchain == v8_generator_toolchain) {
+@@ -3719,8 +3719,6 @@ if (current_toolchain == v8_generator_toolchain) {
  
  if (v8_use_snapshot && current_toolchain == v8_snapshot_toolchain) {
    v8_executable("mksnapshot") {

+ 13 - 13
patches/common/v8/fixme_revert_heap_api_remove_deprecated_apis.patch

@@ -9,7 +9,7 @@ This commit removes deprecated APIs that nan relies on, temporarily
 reverting but we need to solve this with nan upstream
 
 diff --git a/include/v8-internal.h b/include/v8-internal.h
-index cbdce1c3f60eed53f67968e6b89755f418aecc3f..9254f7c9a2f3cf7dc92421e2863109b410a09da0 100644
+index 8e700a4d4d401bb58cdc6128e3e96dbf2d791d5c..94a6e3c1932a06ef1eee1be403b031f50d0d7baf 100644
 --- a/include/v8-internal.h
 +++ b/include/v8-internal.h
 @@ -165,6 +165,7 @@ class Internals {
@@ -21,7 +21,7 @@ index cbdce1c3f60eed53f67968e6b89755f418aecc3f..9254f7c9a2f3cf7dc92421e2863109b4
    static const int kNodeIsActiveShift = 4;
  
 diff --git a/include/v8.h b/include/v8.h
-index 4757ef851b6bb6f0606686c30312d6c38e2d3fb8..aeadbbe3e4341eb1f7242f68ac5accb502585e70 100644
+index c5e22bb14043ade00b4ecf73b6115e747d5232ad..b96cbdee06a305776e062f5b8362e1b17106e1dd 100644
 --- a/include/v8.h
 +++ b/include/v8.h
 @@ -577,6 +577,10 @@ template <class T> class PersistentBase {
@@ -35,7 +35,7 @@ index 4757ef851b6bb6f0606686c30312d6c38e2d3fb8..aeadbbe3e4341eb1f7242f68ac5accb5
    /** Returns true if the handle's reference is weak.  */
    V8_INLINE bool IsWeak() const;
  
-@@ -8571,6 +8575,17 @@ class V8_EXPORT Isolate {
+@@ -8596,6 +8600,17 @@ class V8_EXPORT Isolate {
     */
    void VisitHandlesWithClassIds(PersistentHandleVisitor* visitor);
  
@@ -53,7 +53,7 @@ index 4757ef851b6bb6f0606686c30312d6c38e2d3fb8..aeadbbe3e4341eb1f7242f68ac5accb5
    /**
     * Iterates through all the persistent handles in the current isolate's heap
     * that have class_ids and are weak to be marked as inactive if there is no
-@@ -9838,6 +9853,17 @@ bool PersistentBase<T>::IsIndependent() const {
+@@ -9867,6 +9882,17 @@ bool PersistentBase<T>::IsIndependent() const {
                          I::kNodeIsIndependentShift);
  }
  
@@ -72,10 +72,10 @@ index 4757ef851b6bb6f0606686c30312d6c38e2d3fb8..aeadbbe3e4341eb1f7242f68ac5accb5
  bool PersistentBase<T>::IsWeak() const {
    typedef internal::Internals I;
 diff --git a/src/api.cc b/src/api.cc
-index e2d409057aa0f333b61e3d6e03f2358feab2081f..d360e5009a52b0ce131ef15fc25636c25349210c 100644
+index 2a2311454ba37e557b1c1f046f46e7f5881516b9..10553d5bc638ceb81f4dd14d5231df3e9ae887dc 100644
 --- a/src/api.cc
 +++ b/src/api.cc
-@@ -8982,6 +8982,15 @@ void Isolate::VisitHandlesWithClassIds(PersistentHandleVisitor* visitor) {
+@@ -8989,6 +8989,15 @@ void Isolate::VisitHandlesWithClassIds(PersistentHandleVisitor* visitor) {
    isolate->global_handles()->IterateAllRootsWithClassIds(visitor);
  }
  
@@ -141,10 +141,10 @@ index 6b8ca0c93fa344ed0155106fef3a0aabf13bdf44..f5f51bb00761f37b7182e0be5e878383
    static bool IsWeak(Address* location);
  
 diff --git a/test/cctest/heap/test-heap.cc b/test/cctest/heap/test-heap.cc
-index 50ac47a7ab0453f35a68932b63c33c352758302f..13a3fc9047760d1065d073f3423c0d44344a58f2 100644
+index 4c791d128e6126ea67c3240ee48ac689a55fd29a..03d702487091c40f575e8028f97849d5f6e6c92f 100644
 --- a/test/cctest/heap/test-heap.cc
 +++ b/test/cctest/heap/test-heap.cc
-@@ -531,9 +531,14 @@ TEST(WeakGlobalHandlesScavenge) {
+@@ -528,9 +528,14 @@ TEST(WeakGlobalHandlesScavenge) {
  
    // Scavenge treats weak pointers as normal roots.
    CcTest::CollectGarbage(NEW_SPACE);
@@ -159,7 +159,7 @@ index 50ac47a7ab0453f35a68932b63c33c352758302f..13a3fc9047760d1065d073f3423c0d44
    GlobalHandles::Destroy(h1.location());
    GlobalHandles::Destroy(h2.location());
  }
-@@ -571,8 +576,11 @@ TEST(WeakGlobalUnmodifiedApiHandlesScavenge) {
+@@ -568,8 +573,11 @@ TEST(WeakGlobalUnmodifiedApiHandlesScavenge) {
        &TestWeakGlobalHandleCallback, v8::WeakCallbackType::kParameter);
  
    CcTest::CollectGarbage(NEW_SPACE);
@@ -171,7 +171,7 @@ index 50ac47a7ab0453f35a68932b63c33c352758302f..13a3fc9047760d1065d073f3423c0d44
    GlobalHandles::Destroy(h1.location());
  }
  
-@@ -609,7 +617,10 @@ TEST(WeakGlobalApiHandleModifiedMapScavenge) {
+@@ -606,7 +614,10 @@ TEST(WeakGlobalApiHandleModifiedMapScavenge) {
        &TestWeakGlobalHandleCallback, v8::WeakCallbackType::kParameter);
  
    CcTest::CollectGarbage(NEW_SPACE);
@@ -182,7 +182,7 @@ index 50ac47a7ab0453f35a68932b63c33c352758302f..13a3fc9047760d1065d073f3423c0d44
    GlobalHandles::Destroy(h1.location());
  }
  
-@@ -650,7 +661,10 @@ TEST(WeakGlobalApiHandleWithElementsScavenge) {
+@@ -647,7 +658,10 @@ TEST(WeakGlobalApiHandleWithElementsScavenge) {
        &TestWeakGlobalHandleCallback, v8::WeakCallbackType::kParameter);
  
    CcTest::CollectGarbage(NEW_SPACE);
@@ -193,7 +193,7 @@ index 50ac47a7ab0453f35a68932b63c33c352758302f..13a3fc9047760d1065d073f3423c0d44
    GlobalHandles::Destroy(h1.location());
  }
  
-@@ -685,11 +699,17 @@ TEST(WeakGlobalHandlesMark) {
+@@ -682,11 +696,17 @@ TEST(WeakGlobalHandlesMark) {
    GlobalHandles::MakeWeak(
        h2.location(), reinterpret_cast<void*>(&handle_and_id),
        &TestWeakGlobalHandleCallback, v8::WeakCallbackType::kParameter);
@@ -212,7 +212,7 @@ index 50ac47a7ab0453f35a68932b63c33c352758302f..13a3fc9047760d1065d073f3423c0d44
  }
  
 diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc
-index 59903ddd928b2ade29332b09b02fcd8343215b56..1d561debc0da00867949b1e09f3d5bed81fa61bb 100644
+index 2e097336572cbd82e6d9dba69c8388904f8ecaee..ebcdab3c27e8fb0b4ccfae9e0aab7bb8a4f10ce2 100644
 --- a/test/cctest/test-api.cc
 +++ b/test/cctest/test-api.cc
 @@ -20472,6 +20472,43 @@ TEST(WrapperClassId) {

+ 142 - 0
patches/common/v8/revert_api_remove_deprecated_conversion_functions.patch

@@ -0,0 +1,142 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jeremy Apthorp <[email protected]>
+Date: Mon, 29 Apr 2019 14:16:31 -0700
+Subject: Revert "[api] Remove deprecated conversion functions"
+
+This reverts commit c76f377a990343b18953123c2726337b38c59812.
+
+diff --git a/include/v8.h b/include/v8.h
+index 0e21793b1214c681770b72f64b9f0d6188c6a385..4a3b94897f01f7d770770abc26b030f54060d3de 100644
+--- a/include/v8.h
++++ b/include/v8.h
+@@ -2489,6 +2489,9 @@ class V8_EXPORT Value : public Data {
+ 
+   V8_WARN_UNUSED_RESULT MaybeLocal<BigInt> ToBigInt(
+       Local<Context> context) const;
++  V8_DEPRECATED("ToBoolean can never throw. Use Local version.",
++                V8_WARN_UNUSED_RESULT MaybeLocal<Boolean> ToBoolean(
++                    Local<Context> context) const);
+   V8_WARN_UNUSED_RESULT MaybeLocal<Number> ToNumber(
+       Local<Context> context) const;
+   V8_WARN_UNUSED_RESULT MaybeLocal<String> ToString(
+@@ -2504,6 +2507,16 @@ class V8_EXPORT Value : public Data {
+   V8_WARN_UNUSED_RESULT MaybeLocal<Int32> ToInt32(Local<Context> context) const;
+ 
+   Local<Boolean> ToBoolean(Isolate* isolate) const;
++  V8_DEPRECATED("Use maybe version",
++                Local<Number> ToNumber(Isolate* isolate) const);
++  V8_DEPRECATED("Use maybe version",
++                Local<String> ToString(Isolate* isolate) const);
++  V8_DEPRECATED("Use maybe version",
++                Local<Object> ToObject(Isolate* isolate) const);
++  V8_DEPRECATED("Use maybe version",
++                Local<Integer> ToInteger(Isolate* isolate) const);
++  V8_DEPRECATED("Use maybe version",
++                Local<Int32> ToInt32(Isolate* isolate) const);
+ 
+   /**
+    * Attempts to convert a string to an array index.
+@@ -2514,6 +2527,9 @@ class V8_EXPORT Value : public Data {
+ 
+   bool BooleanValue(Isolate* isolate) const;
+ 
++  V8_DEPRECATED("BooleanValue can never throw. Use Isolate version.",
++                V8_WARN_UNUSED_RESULT Maybe<bool> BooleanValue(
++                    Local<Context> context) const);
+   V8_WARN_UNUSED_RESULT Maybe<double> NumberValue(Local<Context> context) const;
+   V8_WARN_UNUSED_RESULT Maybe<int64_t> IntegerValue(
+       Local<Context> context) const;
+diff --git a/src/api.cc b/src/api.cc
+index c2fc1fc9827f896c521606a75baecef6c60e8f8a..9124d03fa6195269eaf851591bb95125c2081e2f 100644
+--- a/src/api.cc
++++ b/src/api.cc
+@@ -3537,6 +3537,12 @@ MaybeLocal<String> Value::ToString(Local<Context> context) const {
+   RETURN_ESCAPED(result);
+ }
+ 
++
++Local<String> Value::ToString(Isolate* isolate) const {
++  RETURN_TO_LOCAL_UNCHECKED(ToString(isolate->GetCurrentContext()), String);
++}
++
++
+ MaybeLocal<String> Value::ToDetailString(Local<Context> context) const {
+   i::Handle<i::Object> obj = Utils::OpenHandle(this);
+   if (obj->IsString()) return ToApiHandle<String>(obj);
+@@ -3559,6 +3565,11 @@ MaybeLocal<Object> Value::ToObject(Local<Context> context) const {
+   RETURN_ESCAPED(result);
+ }
+ 
++
++Local<v8::Object> Value::ToObject(Isolate* isolate) const {
++  RETURN_TO_LOCAL_UNCHECKED(ToObject(isolate->GetCurrentContext()), Object);
++}
++
+ MaybeLocal<BigInt> Value::ToBigInt(Local<Context> context) const {
+   i::Handle<i::Object> obj = Utils::OpenHandle(this);
+   if (obj->IsBigInt()) return ToApiHandle<BigInt>(obj);
+@@ -3575,6 +3586,11 @@ bool Value::BooleanValue(Isolate* v8_isolate) const {
+       reinterpret_cast<i::Isolate*>(v8_isolate));
+ }
+ 
++MaybeLocal<Boolean> Value::ToBoolean(Local<Context> context) const {
++  return ToBoolean(context->GetIsolate());
++}
++
++
+ Local<Boolean> Value::ToBoolean(Isolate* v8_isolate) const {
+   auto isolate = reinterpret_cast<i::Isolate*>(v8_isolate);
+   return ToApiHandle<Boolean>(
+@@ -3593,6 +3609,12 @@ MaybeLocal<Number> Value::ToNumber(Local<Context> context) const {
+   RETURN_ESCAPED(result);
+ }
+ 
++
++Local<Number> Value::ToNumber(Isolate* isolate) const {
++  RETURN_TO_LOCAL_UNCHECKED(ToNumber(isolate->GetCurrentContext()), Number);
++}
++
++
+ MaybeLocal<Integer> Value::ToInteger(Local<Context> context) const {
+   auto obj = Utils::OpenHandle(this);
+   if (obj->IsSmi()) return ToApiHandle<Integer>(obj);
+@@ -3604,6 +3626,12 @@ MaybeLocal<Integer> Value::ToInteger(Local<Context> context) const {
+   RETURN_ESCAPED(result);
+ }
+ 
++
++Local<Integer> Value::ToInteger(Isolate* isolate) const {
++  RETURN_TO_LOCAL_UNCHECKED(ToInteger(isolate->GetCurrentContext()), Integer);
++}
++
++
+ MaybeLocal<Int32> Value::ToInt32(Local<Context> context) const {
+   auto obj = Utils::OpenHandle(this);
+   if (obj->IsSmi()) return ToApiHandle<Int32>(obj);
+@@ -3615,6 +3643,12 @@ MaybeLocal<Int32> Value::ToInt32(Local<Context> context) const {
+   RETURN_ESCAPED(result);
+ }
+ 
++
++Local<Int32> Value::ToInt32(Isolate* isolate) const {
++  RETURN_TO_LOCAL_UNCHECKED(ToInt32(isolate->GetCurrentContext()), Int32);
++}
++
++
+ MaybeLocal<Uint32> Value::ToUint32(Local<Context> context) const {
+   auto obj = Utils::OpenHandle(this);
+   if (obj->IsSmi()) return ToApiHandle<Uint32>(obj);
+@@ -3874,6 +3908,13 @@ void v8::RegExp::CheckCast(v8::Value* that) {
+                   "Could not convert to regular expression");
+ }
+ 
++
++Maybe<bool> Value::BooleanValue(Local<Context> context) const {
++  i::Isolate* isolate = reinterpret_cast<i::Isolate*>(context->GetIsolate());
++  return Just(Utils::OpenHandle(this)->BooleanValue(isolate));
++}
++
++
+ Maybe<double> Value::NumberValue(Local<Context> context) const {
+   auto obj = Utils::OpenHandle(this);
+   if (obj->IsNumber()) return Just(obj->Number());

+ 21 - 21
patches/common/v8/revert_cctest_add_v8_export_private_to_arm_arm64_ports.patch

@@ -245,10 +245,10 @@ index 8514469227042b5740da73d42fc210a2282414e4..6f46e4b88c2e7c77f6fd58567e9aa2ae
    static bool IsValidImmPCOffset(ImmBranchType branch_type, ptrdiff_t offset);
    bool IsTargetInImmPCOffsetRange(Instruction* target);
 diff --git a/src/arm64/macro-assembler-arm64.h b/src/arm64/macro-assembler-arm64.h
-index 4c81c5b5f1832e2e5cf32d585012bf0acc3e43aa..785fae04e5c6722d3097824799b4240649489e71 100644
+index 7521eadf696e9594d835d0088594da0ac768e9ff..6174e5b745976d0af5647ca945fcb8e72a0e6e91 100644
 --- a/src/arm64/macro-assembler-arm64.h
 +++ b/src/arm64/macro-assembler-arm64.h
-@@ -2081,7 +2081,7 @@ class InstructionAccurateScope {
+@@ -2080,7 +2080,7 @@ class InstructionAccurateScope {
  // original state, even if the lists were modified by some other means. Note
  // that this scope can be nested but the destructors need to run in the opposite
  // order as the constructors. We do not have assertions for this.
@@ -257,7 +257,7 @@ index 4c81c5b5f1832e2e5cf32d585012bf0acc3e43aa..785fae04e5c6722d3097824799b42406
   public:
    explicit UseScratchRegisterScope(TurboAssembler* tasm)
        : available_(tasm->TmpList()),
-@@ -2092,7 +2092,7 @@ class V8_EXPORT_PRIVATE UseScratchRegisterScope {
+@@ -2091,7 +2091,7 @@ class V8_EXPORT_PRIVATE UseScratchRegisterScope {
      DCHECK_EQ(availablefp_->type(), CPURegister::kVRegister);
    }
  
@@ -266,7 +266,7 @@ index 4c81c5b5f1832e2e5cf32d585012bf0acc3e43aa..785fae04e5c6722d3097824799b42406
  
    // Take a register from the appropriate temps list. It will be returned
    // automatically when the scope ends.
-@@ -2109,8 +2109,7 @@ class V8_EXPORT_PRIVATE UseScratchRegisterScope {
+@@ -2108,8 +2108,7 @@ class V8_EXPORT_PRIVATE UseScratchRegisterScope {
    VRegister AcquireSameSizeAs(const VRegister& reg);
  
   private:
@@ -277,10 +277,10 @@ index 4c81c5b5f1832e2e5cf32d585012bf0acc3e43aa..785fae04e5c6722d3097824799b42406
    // Available scratch registers.
    CPURegList* available_;     // kRegister
 diff --git a/src/arm64/register-arm64.h b/src/arm64/register-arm64.h
-index 014252eb0cbb4b49d9229edafa3423b43becec80..008268de590b50b94eb31b9c83fb96c5a81535d5 100644
+index b19f41ef8488a9a117a8c88305c6dbe0dc188d39..956fd9ab04bcc4b314eb6253636e776463332b1b 100644
 --- a/src/arm64/register-arm64.h
 +++ b/src/arm64/register-arm64.h
-@@ -323,14 +323,14 @@ VectorFormat ScalarFormatFromLaneSize(int lanesize);
+@@ -316,14 +316,14 @@ VectorFormat ScalarFormatFromLaneSize(int lanesize);
  VectorFormat VectorFormatHalfWidthDoubleLanes(VectorFormat vform);
  VectorFormat VectorFormatFillQ(VectorFormat vform);
  VectorFormat ScalarFormatFromFormat(VectorFormat vform);
@@ -298,7 +298,7 @@ index 014252eb0cbb4b49d9229edafa3423b43becec80..008268de590b50b94eb31b9c83fb96c5
  int64_t MaxIntFromFormat(VectorFormat vform);
  int64_t MinIntFromFormat(VectorFormat vform);
  uint64_t MaxUintFromFormat(VectorFormat vform);
-@@ -536,7 +536,7 @@ bool AreAliased(const CPURegister& reg1, const CPURegister& reg2,
+@@ -529,7 +529,7 @@ bool AreAliased(const CPURegister& reg1, const CPURegister& reg2,
  // same size, and are of the same type. The system stack pointer may be
  // specified. Arguments set to NoReg are ignored, as are any subsequent
  // arguments. At least one argument (reg1) must be valid (not NoCPUReg).
@@ -307,7 +307,7 @@ index 014252eb0cbb4b49d9229edafa3423b43becec80..008268de590b50b94eb31b9c83fb96c5
      const CPURegister& reg1, const CPURegister& reg2 = NoCPUReg,
      const CPURegister& reg3 = NoCPUReg, const CPURegister& reg4 = NoCPUReg,
      const CPURegister& reg5 = NoCPUReg, const CPURegister& reg6 = NoCPUReg,
-@@ -553,10 +553,9 @@ bool AreSameFormat(const VRegister& reg1, const VRegister& reg2,
+@@ -546,10 +546,9 @@ bool AreSameFormat(const VRegister& reg1, const VRegister& reg2,
  // consecutive in the register file. Arguments may be set to NoVReg, and if so,
  // subsequent arguments must also be NoVReg. At least one argument (reg1) must
  // be valid (not NoVReg).
@@ -321,7 +321,7 @@ index 014252eb0cbb4b49d9229edafa3423b43becec80..008268de590b50b94eb31b9c83fb96c5
  
  typedef VRegister FloatRegister;
  typedef VRegister DoubleRegister;
-@@ -564,7 +563,7 @@ typedef VRegister Simd128Register;
+@@ -557,7 +556,7 @@ typedef VRegister Simd128Register;
  
  // -----------------------------------------------------------------------------
  // Lists of registers.
@@ -444,7 +444,7 @@ index d6bb84cd274575c78291eafdb6794d7ff690915c..5315d5598f3064cbf5563246bd5bd17f
  
  }  // namespace internal
 diff --git a/src/objects.cc b/src/objects.cc
-index 15e504960bd12ee11c06dd4356b6ad8d8ba1ea44..73ce3773a4c1139ab98adb723e0758acb7b2f7f5 100644
+index cf301643a84e2a39a66909eab32a33c418990f28..bc526499502937a10eb56bfd6c75c0f5f9d678ad 100644
 --- a/src/objects.cc
 +++ b/src/objects.cc
 @@ -1237,7 +1237,7 @@ bool Object::ToInt32(int32_t* value) {
@@ -457,7 +457,7 @@ index 15e504960bd12ee11c06dd4356b6ad8d8ba1ea44..73ce3773a4c1139ab98adb723e0758ac
  Handle<SharedFunctionInfo> FunctionTemplateInfo::GetOrCreateSharedFunctionInfo(
      Isolate* isolate, Handle<FunctionTemplateInfo> info,
 diff --git a/src/objects/code.h b/src/objects/code.h
-index 647cfebe69fcb5c68e3d3fbc653de6011e3025de..855cf1a89aeb55575b59f6595335dc901dbdee6f 100644
+index a02495c960d531355c62a11c26271ab08685b39e..310584c0b8808fa917f73fb822adaf855ac423a0 100644
 --- a/src/objects/code.h
 +++ b/src/objects/code.h
 @@ -650,10 +650,9 @@ class DependentCode : public WeakFixedArray {
@@ -475,10 +475,10 @@ index 647cfebe69fcb5c68e3d3fbc653de6011e3025de..855cf1a89aeb55575b59f6595335dc90
    void DeoptimizeDependentCodeGroup(Isolate* isolate, DependencyGroup group);
  
 diff --git a/src/objects/shared-function-info.h b/src/objects/shared-function-info.h
-index 137137e7f532e46c3d398438342cf9576b40d11b..f6f030b1c05b55b766e57e9f64b496a856334ce9 100644
+index 5b79098fc0619b0d6ebaf48b5d8c6e56af7c32f0..688890ccd5d6a7ea7c4e7e265cea0e4a41d008c5 100644
 --- a/src/objects/shared-function-info.h
 +++ b/src/objects/shared-function-info.h
-@@ -227,9 +227,7 @@ class InterpreterData : public Struct {
+@@ -220,9 +220,7 @@ class InterpreterData : public Struct {
  class SharedFunctionInfo : public HeapObject {
   public:
    NEVER_READ_ONLY_SPACE
@@ -490,10 +490,10 @@ index 137137e7f532e46c3d398438342cf9576b40d11b..f6f030b1c05b55b766e57e9f64b496a8
    // [name]: Returns shared name if it exists or an empty string otherwise.
    inline String Name() const;
 diff --git a/src/objects/string.cc b/src/objects/string.cc
-index b1dfa38f91ebc6fd0a8cc429bc77c0cdba36caaa..fe5f5c9d54dc7518fdc62e77e66a419e28091878 100644
+index 323d7ed73dd26531e436d504878ba3fe7c4df6d7..98579e5753a6eafbbd4f0e44b518dc5377631d8a 100644
 --- a/src/objects/string.cc
 +++ b/src/objects/string.cc
-@@ -1514,8 +1514,5 @@ String ConsStringIterator::NextLeaf(bool* blew_stack) {
+@@ -1517,8 +1517,5 @@ String ConsStringIterator::NextLeaf(bool* blew_stack) {
    UNREACHABLE();
  }
  
@@ -503,7 +503,7 @@ index b1dfa38f91ebc6fd0a8cc429bc77c0cdba36caaa..fe5f5c9d54dc7518fdc62e77e66a419e
  }  // namespace internal
  }  // namespace v8
 diff --git a/src/objects/string.h b/src/objects/string.h
-index 7c6616a6f6abd4f9d6bf3e57499983847ad1f3f2..08eea111822705b5eb37d1325651adc4854b7454 100644
+index 707f29a2ae1d6a0b5effc5e88b192ba1980a7be0..72359fd0c1ad9c1d816b325d263bb613c9de3af0 100644
 --- a/src/objects/string.h
 +++ b/src/objects/string.h
 @@ -6,7 +6,6 @@
@@ -514,7 +514,7 @@ index 7c6616a6f6abd4f9d6bf3e57499983847ad1f3f2..08eea111822705b5eb37d1325651adc4
  #include "src/objects/instance-type.h"
  #include "src/objects/name.h"
  #include "src/objects/smi.h"
-@@ -363,8 +362,8 @@ class String : public Name {
+@@ -365,8 +364,8 @@ class String : public Name {
  
    // Helper function for flattening strings.
    template <typename sinkchar>
@@ -523,9 +523,9 @@ index 7c6616a6f6abd4f9d6bf3e57499983847ad1f3f2..08eea111822705b5eb37d1325651adc4
 +  V8_EXPORT_PRIVATE static void WriteToFlat(String source, sinkchar* sink,
 +                                            int from, int to);
  
-   // The return value may point to the first aligned word containing the first
-   // non-one-byte character, rather than directly to the non-one-byte character.
-@@ -458,11 +457,6 @@ class String : public Name {
+   static inline bool IsAscii(const char* chars, int length) {
+     return IsAscii(reinterpret_cast<const uint8_t*>(chars), length);
+@@ -422,11 +421,6 @@ class String : public Name {
    OBJECT_CONSTRUCTORS(String, Name);
  };
  
@@ -552,7 +552,7 @@ index 0a0b5c10d66d65054e4865d7e920c082daa93158..a44e9f95866ca93659cb3423284352e0
  
  
 diff --git a/src/wasm/wasm-module.h b/src/wasm/wasm-module.h
-index c4f171ecf8f7b4acddf9d52dc9bfeb53cac04d1a..89d7db6981c7a01004741404f6c71e764298995d 100644
+index d31f5ff067c9b096a94705769c64586ffd546341..cce60d015af915e0984060dd2e84d6f7b46fc79a 100644
 --- a/src/wasm/wasm-module.h
 +++ b/src/wasm/wasm-module.h
 @@ -120,7 +120,7 @@ struct WasmElemSegment {

+ 1159 - 0
patches/common/v8/revert_reland_api_heap_remove_deprecated_persistent_apis.patch

@@ -0,0 +1,1159 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jeremy Apthorp <[email protected]>
+Date: Mon, 29 Apr 2019 13:52:07 -0700
+Subject: Revert "Reland "[api,heap] Remove deprecated Persistent APIs""
+
+This reverts commit 4214933c6bb4d1815f07a40eaf008cb1e37ef217.
+
+diff --git a/include/v8-internal.h b/include/v8-internal.h
+index 61bdb58c1a967d58faf3bb3ccbe1c90942b413f8..8e700a4d4d401bb58cdc6128e3e96dbf2d791d5c 100644
+--- a/include/v8-internal.h
++++ b/include/v8-internal.h
+@@ -165,6 +165,8 @@ class Internals {
+   static const int kNodeStateMask = 0x7;
+   static const int kNodeStateIsWeakValue = 2;
+   static const int kNodeStateIsPendingValue = 3;
++  static const int kNodeIsIndependentShift = 3;
++  static const int kNodeIsActiveShift = 4;
+ 
+   static const int kFirstNonstringType = 0x40;
+   static const int kOddballType = 0x43;
+diff --git a/include/v8-util.h b/include/v8-util.h
+index 29d813e4274d16939b77e5e1d13f097c5e08b0af..24962607076f780105365700d5aff10336eb1dac 100644
+--- a/include/v8-util.h
++++ b/include/v8-util.h
+@@ -194,6 +194,14 @@ class PersistentValueMapBase {
+     return SetReturnValueFromVal(&returnValue, Traits::Get(&impl_, key));
+   }
+ 
++  /**
++   * Call V8::RegisterExternallyReferencedObject with the map value for given
++   * key.
++   */
++  V8_DEPRECATED(
++      "Used TracedGlobal and EmbedderHeapTracer::RegisterEmbedderReference",
++      inline void RegisterExternallyReferencedObject(K& key));
++
+   /**
+    * Return value for key and remove it from the map.
+    */
+@@ -344,6 +352,16 @@ class PersistentValueMapBase {
+   const char* label_;
+ };
+ 
++template <typename K, typename V, typename Traits>
++inline void
++PersistentValueMapBase<K, V, Traits>::RegisterExternallyReferencedObject(
++    K& key) {
++  assert(Contains(key));
++  V8::RegisterExternallyReferencedObject(
++      reinterpret_cast<internal::Address*>(FromVal(Traits::Get(&impl_, key))),
++      reinterpret_cast<internal::Isolate*>(GetIsolate()));
++}
++
+ template <typename K, typename V, typename Traits>
+ class PersistentValueMap : public PersistentValueMapBase<K, V, Traits> {
+  public:
+diff --git a/include/v8.h b/include/v8.h
+index 26ac2cb01da36529e99dcd5cc878523601addc0d..c5e22bb14043ade00b4ecf73b6115e747d5232ad 100644
+--- a/include/v8.h
++++ b/include/v8.h
+@@ -545,6 +545,38 @@ template <class T> class PersistentBase {
+    */
+   V8_INLINE void AnnotateStrongRetainer(const char* label);
+ 
++  /**
++   * Allows the embedder to tell the v8 garbage collector that a certain object
++   * is alive. Only allowed when the embedder is asked to trace its heap by
++   * EmbedderHeapTracer.
++   */
++  V8_DEPRECATED(
++      "Used TracedGlobal and EmbedderHeapTracer::RegisterEmbedderReference",
++      V8_INLINE void RegisterExternalReference(Isolate* isolate) const);
++
++  /**
++   * Marks the reference to this object independent. Garbage collector is free
++   * to ignore any object groups containing this object. Weak callback for an
++   * independent handle should not assume that it will be preceded by a global
++   * GC prologue callback or followed by a global GC epilogue callback.
++   */
++  V8_DEPRECATED(
++      "Weak objects are always considered independent. "
++      "Use TracedGlobal when trying to use EmbedderHeapTracer. "
++      "Use a strong handle when trying to keep an object alive.",
++      V8_INLINE void MarkIndependent());
++
++  /**
++   * Marks the reference to this object as active. The scavenge garbage
++   * collection should not reclaim the objects marked as active, even if the
++   * object held by the handle is otherwise unreachable.
++   *
++   * This bit is cleared after the each garbage collection pass.
++   */
++  V8_DEPRECATED("Use TracedGlobal.", V8_INLINE void MarkActive());
++
++  V8_DEPRECATED("See MarkIndependent.", V8_INLINE bool IsIndependent() const);
++
+   /** Returns true if the handle's reference is weak.  */
+   V8_INLINE bool IsWeak() const;
+ 
+@@ -8878,6 +8910,9 @@ class V8_EXPORT V8 {
+                                      const char* label);
+   static Value* Eternalize(Isolate* isolate, Value* handle);
+ 
++  static void RegisterExternallyReferencedObject(internal::Address* location,
++                                                 internal::Isolate* isolate);
++
+   template <class K, class V, class T>
+   friend class PersistentValueMapBase;
+ 
+@@ -9824,6 +9859,14 @@ void Persistent<T, M>::Copy(const Persistent<S, M2>& that) {
+   M::Copy(that, this);
+ }
+ 
++template <class T>
++bool PersistentBase<T>::IsIndependent() const {
++  typedef internal::Internals I;
++  if (this->IsEmpty()) return false;
++  return I::GetNodeFlag(reinterpret_cast<internal::Address*>(this->val_),
++                        I::kNodeIsIndependentShift);
++}
++
+ template <class T>
+ bool PersistentBase<T>::IsWeak() const {
+   typedef internal::Internals I;
+@@ -9890,6 +9933,31 @@ void PersistentBase<T>::AnnotateStrongRetainer(const char* label) {
+                              label);
+ }
+ 
++template <class T>
++void PersistentBase<T>::RegisterExternalReference(Isolate* isolate) const {
++  if (IsEmpty()) return;
++  V8::RegisterExternallyReferencedObject(
++      reinterpret_cast<internal::Address*>(this->val_),
++      reinterpret_cast<internal::Isolate*>(isolate));
++}
++
++template <class T>
++void PersistentBase<T>::MarkIndependent() {
++  typedef internal::Internals I;
++  if (this->IsEmpty()) return;
++  I::UpdateNodeFlag(reinterpret_cast<internal::Address*>(this->val_), true,
++                    I::kNodeIsIndependentShift);
++}
++
++template <class T>
++void PersistentBase<T>::MarkActive() {
++  typedef internal::Internals I;
++  if (this->IsEmpty()) return;
++  I::UpdateNodeFlag(reinterpret_cast<internal::Address*>(this->val_), true,
++                    I::kNodeIsActiveShift);
++}
++
++
+ template <class T>
+ void PersistentBase<T>::SetWrapperClassId(uint16_t class_id) {
+   typedef internal::Internals I;
+diff --git a/src/api.cc b/src/api.cc
+index 1102e5d9ca745ec57257379acef92a17d374362d..2a2311454ba37e557b1c1f046f46e7f5881516b9 100644
+--- a/src/api.cc
++++ b/src/api.cc
+@@ -1049,6 +1049,11 @@ void V8::MoveTracedGlobalReference(internal::Address** from,
+   i::GlobalHandles::MoveTracedGlobal(from, to);
+ }
+ 
++void V8::RegisterExternallyReferencedObject(i::Address* location,
++                                            i::Isolate* isolate) {
++  isolate->heap()->RegisterExternallyReferencedObject(location);
++}
++
+ void V8::MakeWeak(i::Address* location, void* parameter,
+                   WeakCallbackInfo<void>::Callback weak_callback,
+                   WeakCallbackType type) {
+diff --git a/src/global-handles.cc b/src/global-handles.cc
+index fb5087b8a781cce05839dbbb79c5beaf2fddaa06..350380b23ce6f4fe89e628285d2e69fb1cac88ee 100644
+--- a/src/global-handles.cc
++++ b/src/global-handles.cc
+@@ -379,6 +379,10 @@ class GlobalHandles::Node final : public NodeBase<GlobalHandles::Node> {
+                   Internals::kNodeStateMask);
+     STATIC_ASSERT(WEAK == Internals::kNodeStateIsWeakValue);
+     STATIC_ASSERT(PENDING == Internals::kNodeStateIsPendingValue);
++    STATIC_ASSERT(static_cast<int>(IsIndependent::kShift) ==
++                  Internals::kNodeIsIndependentShift);
++    STATIC_ASSERT(static_cast<int>(IsActive::kShift) ==
++                  Internals::kNodeIsActiveShift);
+     set_in_young_list(false);
+   }
+ 
+@@ -402,6 +406,16 @@ class GlobalHandles::Node final : public NodeBase<GlobalHandles::Node> {
+     flags_ = NodeState::update(flags_, state);
+   }
+ 
++  bool is_independent() { return IsIndependent::decode(flags_); }
++  void set_independent(bool v) { flags_ = IsIndependent::update(flags_, v); }
++
++  bool is_active() {
++    return IsActive::decode(flags_);
++  }
++  void set_active(bool v) {
++    flags_ = IsActive::update(flags_, v);
++  }
++
+   bool is_in_young_list() const { return IsInYoungList::decode(flags_); }
+   void set_in_young_list(bool v) { flags_ = IsInYoungList::update(flags_, v); }
+ 
+@@ -548,6 +562,7 @@ class GlobalHandles::Node final : public NodeBase<GlobalHandles::Node> {
+     // This method invokes a finalizer. Updating the method name would require
+     // adjusting CFI blacklist as weak_callback_ is invoked on the wrong type.
+     CHECK(IsPendingFinalizer());
++    CHECK(!is_active());
+     set_state(NEAR_DEATH);
+     // Check that we are not passing a finalized external string to
+     // the callback.
+@@ -578,17 +593,24 @@ class GlobalHandles::Node final : public NodeBase<GlobalHandles::Node> {
+  private:
+   // Fields that are not used for managing node memory.
+   void ClearImplFields() {
++    set_independent(false);
++    set_active(false);
+     weak_callback_ = nullptr;
+   }
+ 
+   void CheckImplFieldsAreCleared() {
++    DCHECK(!is_independent());
++    DCHECK(!is_active());
+     DCHECK_EQ(nullptr, weak_callback_);
+   }
+ 
+   // This stores three flags (independent, partially_dependent and
+   // in_young_list) and a State.
+   class NodeState : public BitField8<State, 0, 3> {};
+-  class IsInYoungList : public BitField8<bool, NodeState::kNext, 1> {};
++  class IsIndependent : public BitField8<bool, NodeState::kNext, 1> {};
++  // The following two fields are mutually exclusive
++  class IsActive : public BitField8<bool, IsIndependent::kNext, 1> {};
++  class IsInYoungList : public BitField8<bool, IsActive::kNext, 1> {};
+   class NodeWeaknessType
+       : public BitField8<WeaknessType, IsInYoungList::kNext, 2> {};
+ 
+@@ -851,6 +873,12 @@ void GlobalHandles::IterateWeakRootsIdentifyFinalizers(
+ 
+ void GlobalHandles::IdentifyWeakUnmodifiedObjects(
+     WeakSlotCallback is_unmodified) {
++  for (Node* node : young_nodes_) {
++    if (node->IsWeak() && !is_unmodified(node->location())) {
++      node->set_active(true);
++    }
++  }
++
+   LocalEmbedderHeapTracer* const tracer =
+       isolate()->heap()->local_embedder_heap_tracer();
+   for (TracedNode* node : traced_young_nodes_) {
+@@ -867,7 +895,9 @@ void GlobalHandles::IdentifyWeakUnmodifiedObjects(
+ 
+ void GlobalHandles::IterateYoungStrongAndDependentRoots(RootVisitor* v) {
+   for (Node* node : young_nodes_) {
+-    if (node->IsStrongRetainer()) {
++    if (node->IsStrongRetainer() ||
++        (node->IsWeakRetainer() && !node->is_independent() &&
++         node->is_active())) {
+       v->VisitRootPointer(Root::kGlobalHandles, node->label(),
+                           node->location());
+     }
+@@ -883,7 +913,8 @@ void GlobalHandles::MarkYoungWeakUnmodifiedObjectsPending(
+     WeakSlotCallbackWithHeap is_dead) {
+   for (Node* node : young_nodes_) {
+     DCHECK(node->is_in_young_list());
+-    if (node->IsWeak() && is_dead(isolate_->heap(), node->location())) {
++    if ((node->is_independent() || !node->is_active()) && node->IsWeak() &&
++        is_dead(isolate_->heap(), node->location())) {
+       if (!node->IsPhantomCallback() && !node->IsPhantomResetHandle()) {
+         node->MarkPending();
+       }
+@@ -895,7 +926,8 @@ void GlobalHandles::IterateYoungWeakUnmodifiedRootsForFinalizers(
+     RootVisitor* v) {
+   for (Node* node : young_nodes_) {
+     DCHECK(node->is_in_young_list());
+-    if (node->IsWeakRetainer() && (node->state() == Node::PENDING)) {
++    if ((node->is_independent() || !node->is_active()) &&
++        node->IsWeakRetainer() && (node->state() == Node::PENDING)) {
+       DCHECK(!node->IsPhantomCallback());
+       DCHECK(!node->IsPhantomResetHandle());
+       // Finalizers need to survive.
+@@ -909,7 +941,8 @@ void GlobalHandles::IterateYoungWeakUnmodifiedRootsForPhantomHandles(
+     RootVisitor* v, WeakSlotCallbackWithHeap should_reset_handle) {
+   for (Node* node : young_nodes_) {
+     DCHECK(node->is_in_young_list());
+-    if (node->IsWeakRetainer() && (node->state() != Node::PENDING)) {
++    if ((node->is_independent() || !node->is_active()) &&
++        node->IsWeakRetainer() && (node->state() != Node::PENDING)) {
+       if (should_reset_handle(isolate_->heap(), node->location())) {
+         DCHECK(node->IsPhantomResetHandle() || node->IsPhantomCallback());
+         if (node->IsPhantomResetHandle()) {
+@@ -975,6 +1008,9 @@ size_t GlobalHandles::PostScavengeProcessing(unsigned post_processing_count) {
+     // Filter free nodes.
+     if (!node->IsRetainer()) continue;
+ 
++    // Reset active state for all affected nodes.
++    node->set_active(false);
++
+     if (node->IsPending()) {
+       DCHECK(node->has_callback());
+       DCHECK(node->IsPendingFinalizer());
+@@ -993,6 +1029,9 @@ size_t GlobalHandles::PostMarkSweepProcessing(unsigned post_processing_count) {
+     // Filter free nodes.
+     if (!node->IsRetainer()) continue;
+ 
++    // Reset active state for all affected nodes.
++    node->set_active(false);
++
+     if (node->IsPending()) {
+       DCHECK(node->has_callback());
+       DCHECK(node->IsPendingFinalizer());
+diff --git a/src/profiler/sampling-heap-profiler.cc b/src/profiler/sampling-heap-profiler.cc
+index a13dd2916a535aee0b7a95fd89abd2c545eb2f13..659ed25c00d35d69b9353e3dc693f865cbe89715 100644
+--- a/src/profiler/sampling-heap-profiler.cc
++++ b/src/profiler/sampling-heap-profiler.cc
+@@ -97,6 +97,16 @@ void SamplingHeapProfiler::SampleObject(Address soon_object, size_t size) {
+       base::make_unique<Sample>(size, node, loc, this, next_sample_id());
+   sample->global.SetWeak(sample.get(), OnWeakCallback,
+                          WeakCallbackType::kParameter);
++#if __clang__
++#pragma clang diagnostic push
++#pragma clang diagnostic ignored "-Wdeprecated"
++#endif
++  // MarkIndependent is marked deprecated but we still rely on it here
++  // temporarily.
++  sample->global.MarkIndependent();
++#if __clang__
++#pragma clang diagnostic pop
++#endif
+   samples_.emplace(sample.get(), std::move(sample));
+ }
+ 
+diff --git a/test/cctest/heap/heap-utils.h b/test/cctest/heap/heap-utils.h
+index 082d255a3fdc889ba86d5117bc234f70f0525aad..dbe8e30a495b8af53451f5692810128e8b52453e 100644
+--- a/test/cctest/heap/heap-utils.h
++++ b/test/cctest/heap/heap-utils.h
+@@ -12,22 +12,6 @@ namespace v8 {
+ namespace internal {
+ namespace heap {
+ 
+-class TemporaryEmbedderHeapTracerScope {
+- public:
+-  TemporaryEmbedderHeapTracerScope(v8::Isolate* isolate,
+-                                   v8::EmbedderHeapTracer* tracer)
+-      : isolate_(isolate) {
+-    isolate_->SetEmbedderHeapTracer(tracer);
+-  }
+-
+-  ~TemporaryEmbedderHeapTracerScope() {
+-    isolate_->SetEmbedderHeapTracer(nullptr);
+-  }
+-
+- private:
+-  v8::Isolate* const isolate_;
+-};
+-
+ void SealCurrentObjects(Heap* heap);
+ 
+ int FixedArrayLenFromSize(int size);
+diff --git a/test/cctest/heap/test-embedder-tracing.cc b/test/cctest/heap/test-embedder-tracing.cc
+index 9ca2509e6c0913ad946cf3879d2f5fe69d301075..3d19538a180243cfdfcdfb9a496fa3471e8e9435 100644
+--- a/test/cctest/heap/test-embedder-tracing.cc
++++ b/test/cctest/heap/test-embedder-tracing.cc
+@@ -103,6 +103,22 @@ class TestEmbedderHeapTracer final : public v8::EmbedderHeapTracer {
+   v8::Global<v8::Array> array_;
+ };
+ 
++class TemporaryEmbedderHeapTracerScope {
++ public:
++  TemporaryEmbedderHeapTracerScope(v8::Isolate* isolate,
++                                   EmbedderHeapTracer* tracer)
++      : isolate_(isolate) {
++    isolate_->SetEmbedderHeapTracer(tracer);
++  }
++
++  ~TemporaryEmbedderHeapTracerScope() {
++    isolate_->SetEmbedderHeapTracer(nullptr);
++  }
++
++ private:
++  v8::Isolate* const isolate_;
++};
++
+ }  // namespace
+ 
+ TEST(V8RegisteringEmbedderReference) {
+@@ -112,7 +128,7 @@ TEST(V8RegisteringEmbedderReference) {
+   CcTest::InitializeVM();
+   v8::Isolate* isolate = CcTest::isolate();
+   TestEmbedderHeapTracer tracer;
+-  heap::TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
++  TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
+   v8::HandleScope scope(isolate);
+   v8::Local<v8::Context> context = v8::Context::New(isolate);
+   v8::Context::Scope context_scope(context);
+@@ -132,7 +148,7 @@ TEST(EmbedderRegisteringV8Reference) {
+   CcTest::InitializeVM();
+   v8::Isolate* isolate = CcTest::isolate();
+   TestEmbedderHeapTracer tracer;
+-  heap::TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
++  TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
+   v8::HandleScope scope(isolate);
+   v8::Local<v8::Context> context = v8::Context::New(isolate);
+   v8::Context::Scope context_scope(context);
+@@ -165,7 +181,7 @@ TEST(TracingInRevivedSubgraph) {
+   CcTest::InitializeVM();
+   v8::Isolate* isolate = CcTest::isolate();
+   TestEmbedderHeapTracer tracer;
+-  heap::TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
++  TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
+   v8::HandleScope scope(isolate);
+   v8::Local<v8::Context> context = v8::Context::New(isolate);
+   v8::Context::Scope context_scope(context);
+@@ -193,7 +209,7 @@ TEST(TracingInEphemerons) {
+   CcTest::InitializeVM();
+   v8::Isolate* isolate = CcTest::isolate();
+   TestEmbedderHeapTracer tracer;
+-  heap::TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
++  TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
+   v8::HandleScope scope(isolate);
+   v8::Local<v8::Context> context = v8::Context::New(isolate);
+   v8::Context::Scope context_scope(context);
+@@ -224,7 +240,7 @@ TEST(FinalizeTracingIsNoopWhenNotMarking) {
+   v8::Isolate* isolate = CcTest::isolate();
+   Isolate* i_isolate = CcTest::i_isolate();
+   TestEmbedderHeapTracer tracer;
+-  heap::TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
++  TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
+ 
+   // Finalize a potentially running garbage collection.
+   i_isolate->heap()->CollectGarbage(OLD_SPACE,
+@@ -243,7 +259,7 @@ TEST(FinalizeTracingWhenMarking) {
+   v8::Isolate* isolate = CcTest::isolate();
+   Isolate* i_isolate = CcTest::i_isolate();
+   TestEmbedderHeapTracer tracer;
+-  heap::TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
++  TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
+ 
+   // Finalize a potentially running garbage collection.
+   i_isolate->heap()->CollectGarbage(OLD_SPACE,
+@@ -268,7 +284,7 @@ TEST(GarbageCollectionForTesting) {
+   v8::Isolate* isolate = CcTest::isolate();
+   Isolate* i_isolate = CcTest::i_isolate();
+   TestEmbedderHeapTracer tracer;
+-  heap::TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
++  TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
+ 
+   int saved_gc_counter = i_isolate->heap()->gc_count();
+   tracer.GarbageCollectionForTesting(EmbedderHeapTracer::kUnknown);
+@@ -398,7 +414,7 @@ TEST(TracedGlobalToUnmodifiedJSObjectSurvivesScavengeWhenExcludedFromRoots) {
+   CcTest::InitializeVM();
+   v8::Isolate* isolate = CcTest::isolate();
+   TestEmbedderHeapTracer tracer;
+-  heap::TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
++  TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
+   tracer.ConsiderTracedGlobalAsRoot(false);
+   TracedGlobalTest(
+       CcTest::isolate(), ConstructJSObject,
+@@ -411,7 +427,7 @@ TEST(TracedGlobalToUnmodifiedJSApiObjectSurvivesScavengePerDefault) {
+   CcTest::InitializeVM();
+   v8::Isolate* isolate = CcTest::isolate();
+   TestEmbedderHeapTracer tracer;
+-  heap::TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
++  TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
+   tracer.ConsiderTracedGlobalAsRoot(true);
+   TracedGlobalTest(
+       CcTest::isolate(), ConstructJSApiObject,
+@@ -424,7 +440,7 @@ TEST(TracedGlobalToUnmodifiedJSApiObjectDiesOnScavengeWhenExcludedFromRoots) {
+   CcTest::InitializeVM();
+   v8::Isolate* isolate = CcTest::isolate();
+   TestEmbedderHeapTracer tracer;
+-  heap::TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
++  TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
+   tracer.ConsiderTracedGlobalAsRoot(false);
+   TracedGlobalTest(
+       CcTest::isolate(), ConstructJSApiObject,
+@@ -438,7 +454,7 @@ TEST(TracedGlobalWrapperClassId) {
+   v8::Isolate* isolate = CcTest::isolate();
+   v8::HandleScope scope(isolate);
+   TestEmbedderHeapTracer tracer;
+-  heap::TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
++  TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
+ 
+   v8::TracedGlobal<v8::Object> traced;
+   ConstructJSObject(isolate, isolate->GetCurrentContext(), &traced);
+@@ -473,7 +489,7 @@ TEST(TracedGlobalIteration) {
+   v8::Isolate* isolate = CcTest::isolate();
+   v8::HandleScope scope(isolate);
+   TestEmbedderHeapTracer tracer;
+-  heap::TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
++  TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
+ 
+   v8::TracedGlobal<v8::Object> traced;
+   ConstructJSObject(isolate, isolate->GetCurrentContext(), &traced);
+@@ -506,7 +522,7 @@ TEST(TracedGlobalSetFinalizationCallbackScavenge) {
+   v8::HandleScope scope(isolate);
+   TestEmbedderHeapTracer tracer;
+   tracer.ConsiderTracedGlobalAsRoot(false);
+-  heap::TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
++  TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
+ 
+   v8::TracedGlobal<v8::Object> traced;
+   ConstructJSApiObject(isolate, isolate->GetCurrentContext(), &traced);
+@@ -528,7 +544,7 @@ TEST(TracedGlobalSetFinalizationCallbackMarkSweep) {
+   v8::Isolate* isolate = CcTest::isolate();
+   v8::HandleScope scope(isolate);
+   TestEmbedderHeapTracer tracer;
+-  heap::TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
++  TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
+ 
+   v8::TracedGlobal<v8::Object> traced;
+   ConstructJSApiObject(isolate, isolate->GetCurrentContext(), &traced);
+@@ -558,7 +574,7 @@ TEST(TracePrologueCallingIntoV8WriteBarrier) {
+   }
+   TestEmbedderHeapTracer tracer(TracePrologueBehavior::kCallV8WriteBarrier,
+                                 std::move(global));
+-  heap::TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
++  TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
+   SimulateIncrementalMarking(CcTest::i_isolate()->heap());
+ }
+ 
+diff --git a/test/cctest/heap/test-heap.cc b/test/cctest/heap/test-heap.cc
+index 770452bacd8bbfae833439f68efc518056d97ead..4c791d128e6126ea67c3240ee48ac689a55fd29a 100644
+--- a/test/cctest/heap/test-heap.cc
++++ b/test/cctest/heap/test-heap.cc
+@@ -497,6 +497,44 @@ static void TestWeakGlobalHandleCallback(
+   p->first->Reset();
+ }
+ 
++
++TEST(WeakGlobalHandlesScavenge) {
++  FLAG_stress_compaction = false;
++  FLAG_stress_incremental_marking = false;
++  CcTest::InitializeVM();
++  Isolate* isolate = CcTest::i_isolate();
++  Factory* factory = isolate->factory();
++  GlobalHandles* global_handles = isolate->global_handles();
++
++  WeakPointerCleared = false;
++
++  Handle<Object> h1;
++  Handle<Object> h2;
++
++  {
++    HandleScope scope(isolate);
++
++    Handle<Object> i = factory->NewStringFromStaticChars("fisk");
++    Handle<Object> u = factory->NewNumber(1.12344);
++
++    h1 = global_handles->Create(*i);
++    h2 = global_handles->Create(*u);
++  }
++
++  std::pair<Handle<Object>*, int> handle_and_id(&h2, 1234);
++  GlobalHandles::MakeWeak(
++      h2.location(), reinterpret_cast<void*>(&handle_and_id),
++      &TestWeakGlobalHandleCallback, v8::WeakCallbackType::kParameter);
++
++  // Scavenge treats weak pointers as normal roots.
++  CcTest::CollectGarbage(NEW_SPACE);
++  CHECK((*h1)->IsString());
++  CHECK((*h2)->IsHeapNumber());
++  CHECK(!WeakPointerCleared);
++  GlobalHandles::Destroy(h1.location());
++  GlobalHandles::Destroy(h2.location());
++}
++
+ TEST(WeakGlobalUnmodifiedApiHandlesScavenge) {
+   CcTest::InitializeVM();
+   Isolate* isolate = CcTest::i_isolate();
+@@ -535,6 +573,84 @@ TEST(WeakGlobalUnmodifiedApiHandlesScavenge) {
+   GlobalHandles::Destroy(h1.location());
+ }
+ 
++TEST(WeakGlobalApiHandleModifiedMapScavenge) {
++  CcTest::InitializeVM();
++  Isolate* isolate = CcTest::i_isolate();
++  LocalContext context;
++  GlobalHandles* global_handles = isolate->global_handles();
++
++  WeakPointerCleared = false;
++
++  Handle<Object> h1;
++
++  {
++    HandleScope scope(isolate);
++
++    // Create an API object which does not have the same map as constructor.
++    auto function_template = FunctionTemplate::New(context->GetIsolate());
++    auto instance_t = function_template->InstanceTemplate();
++    instance_t->Set(v8::String::NewFromUtf8(context->GetIsolate(), "a",
++                                            NewStringType::kNormal)
++                        .ToLocalChecked(),
++                    v8::Number::New(context->GetIsolate(), 10));
++    auto function =
++        function_template->GetFunction(context.local()).ToLocalChecked();
++    auto i = function->NewInstance(context.local()).ToLocalChecked();
++
++    h1 = global_handles->Create(*(reinterpret_cast<internal::Address*>(*i)));
++  }
++
++  std::pair<Handle<Object>*, int> handle_and_id(&h1, 1234);
++  GlobalHandles::MakeWeak(
++      h1.location(), reinterpret_cast<void*>(&handle_and_id),
++      &TestWeakGlobalHandleCallback, v8::WeakCallbackType::kParameter);
++
++  CcTest::CollectGarbage(NEW_SPACE);
++  CHECK(!WeakPointerCleared);
++  GlobalHandles::Destroy(h1.location());
++}
++
++TEST(WeakGlobalApiHandleWithElementsScavenge) {
++  CcTest::InitializeVM();
++  Isolate* isolate = CcTest::i_isolate();
++  LocalContext context;
++  GlobalHandles* global_handles = isolate->global_handles();
++
++  WeakPointerCleared = false;
++
++  Handle<Object> h1;
++
++  {
++    HandleScope scope(isolate);
++
++    // Create an API object which has elements.
++    auto function_template = FunctionTemplate::New(context->GetIsolate());
++    auto instance_t = function_template->InstanceTemplate();
++    instance_t->Set(v8::String::NewFromUtf8(context->GetIsolate(), "1",
++                                            NewStringType::kNormal)
++                        .ToLocalChecked(),
++                    v8::Number::New(context->GetIsolate(), 10));
++    instance_t->Set(v8::String::NewFromUtf8(context->GetIsolate(), "2",
++                                            NewStringType::kNormal)
++                        .ToLocalChecked(),
++                    v8::Number::New(context->GetIsolate(), 10));
++    auto function =
++        function_template->GetFunction(context.local()).ToLocalChecked();
++    auto i = function->NewInstance(context.local()).ToLocalChecked();
++
++    h1 = global_handles->Create(*(reinterpret_cast<internal::Address*>(*i)));
++  }
++
++  std::pair<Handle<Object>*, int> handle_and_id(&h1, 1234);
++  GlobalHandles::MakeWeak(
++      h1.location(), reinterpret_cast<void*>(&handle_and_id),
++      &TestWeakGlobalHandleCallback, v8::WeakCallbackType::kParameter);
++
++  CcTest::CollectGarbage(NEW_SPACE);
++  CHECK(!WeakPointerCleared);
++  GlobalHandles::Destroy(h1.location());
++}
++
+ TEST(WeakGlobalHandlesMark) {
+   FLAG_stress_incremental_marking = false;
+   CcTest::InitializeVM();
+@@ -584,7 +700,9 @@ TEST(DeleteWeakGlobalHandle) {
+   GlobalHandles* global_handles = isolate->global_handles();
+ 
+   WeakPointerCleared = false;
++
+   Handle<Object> h;
++
+   {
+     HandleScope scope(isolate);
+ 
+@@ -596,8 +714,15 @@ TEST(DeleteWeakGlobalHandle) {
+   GlobalHandles::MakeWeak(h.location(), reinterpret_cast<void*>(&handle_and_id),
+                           &TestWeakGlobalHandleCallback,
+                           v8::WeakCallbackType::kParameter);
++
++  // Scanvenge does not recognize weak reference.
++  CcTest::CollectGarbage(NEW_SPACE);
++
+   CHECK(!WeakPointerCleared);
++
++  // Mark-compact treats weak reference properly.
+   CcTest::CollectGarbage(OLD_SPACE);
++
+   CHECK(WeakPointerCleared);
+ }
+ 
+diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc
+index e3f036ee9028513924846295239d76859909f454..2e097336572cbd82e6d9dba69c8388904f8ecaee 100644
+--- a/test/cctest/test-api.cc
++++ b/test/cctest/test-api.cc
+@@ -7956,6 +7956,18 @@ static void IndependentWeakHandle(bool global_gc, bool interlinked) {
+                           v8::WeakCallbackType::kParameter);
+   object_b.handle.SetWeak(&object_b, &SetFlag,
+                           v8::WeakCallbackType::kParameter);
++#if __clang__
++#pragma clang diagnostic push
++#pragma clang diagnostic ignored "-Wdeprecated"
++#endif
++  // MarkIndependent is marked deprecated but we still rely on it temporarily.
++  CHECK(!object_b.handle.IsIndependent());
++  object_a.handle.MarkIndependent();
++  object_b.handle.MarkIndependent();
++  CHECK(object_b.handle.IsIndependent());
++#if __clang__
++#pragma clang diagnostic pop
++#endif
+   if (global_gc) {
+     CcTest::CollectAllGarbage();
+   } else {
+@@ -8106,6 +8118,19 @@ void v8::internal::heap::HeapTester::ResetWeakHandle(bool global_gc) {
+                           v8::WeakCallbackType::kParameter);
+   object_b.handle.SetWeak(&object_b, &ResetUseValueAndSetFlag,
+                           v8::WeakCallbackType::kParameter);
++  if (!global_gc) {
++#if __clang__
++#pragma clang diagnostic push
++#pragma clang diagnostic ignored "-Wdeprecated"
++#endif
++    // MarkIndependent is marked deprecated but we still rely on it temporarily.
++    object_a.handle.MarkIndependent();
++    object_b.handle.MarkIndependent();
++    CHECK(object_b.handle.IsIndependent());
++#if __clang__
++#pragma clang diagnostic pop
++#endif
++  }
+   if (global_gc) {
+     CcTest::PreciseCollectAllGarbage();
+   } else {
+@@ -8173,6 +8198,16 @@ THREADED_TEST(GCFromWeakCallbacks) {
+       object.flag = false;
+       object.handle.SetWeak(&object, gc_forcing_callback[inner_gc],
+                             v8::WeakCallbackType::kParameter);
++#if __clang__
++#pragma clang diagnostic push
++#pragma clang diagnostic ignored "-Wdeprecated"
++#endif
++      // MarkIndependent is marked deprecated but we still rely on it
++      // temporarily.
++      object.handle.MarkIndependent();
++#if __clang__
++#pragma clang diagnostic pop
++#endif
+       invoke_gc[outer_gc]();
+       EmptyMessageQueues(isolate);
+       CHECK(object.flag);
+diff --git a/test/cctest/test-global-handles.cc b/test/cctest/test-global-handles.cc
+index 75ad7035f15e03f9b8b19917998e21bfea560440..2c620b4963623e4ae4c589832963dbd03cb36296 100644
+--- a/test/cctest/test-global-handles.cc
++++ b/test/cctest/test-global-handles.cc
+@@ -39,25 +39,6 @@ namespace internal {
+ 
+ namespace {
+ 
+-// Empty v8::EmbedderHeapTracer that never keeps objects alive on Scavenge. See
+-// |IsRootForNonTracingGC|.
+-class NonRootingEmbedderHeapTracer final : public v8::EmbedderHeapTracer {
+- public:
+-  NonRootingEmbedderHeapTracer() = default;
+-
+-  void RegisterV8References(
+-      const std::vector<std::pair<void*, void*>>& embedder_fields) final {}
+-  bool AdvanceTracing(double deadline_in_ms) final { return true; }
+-  bool IsTracingDone() final { return true; }
+-  void TracePrologue() final {}
+-  void TraceEpilogue() final {}
+-  void EnterFinalPause(EmbedderStackState) final {}
+-
+-  bool IsRootForNonTracingGC(const v8::TracedGlobal<v8::Value>& handle) final {
+-    return false;
+-  }
+-};
+-
+ void InvokeScavenge() { CcTest::CollectGarbage(i::NEW_SPACE); }
+ 
+ void InvokeMarkSweep() { CcTest::CollectAllGarbage(); }
+@@ -66,23 +47,23 @@ void SimpleCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+   info.GetReturnValue().Set(v8_num(0));
+ }
+ 
+-struct FlagAndGlobal {
++struct FlagAndPersistent {
+   bool flag;
+   v8::Global<v8::Object> handle;
+ };
+ 
+-struct TracedGlobalWrapper {
+-  v8::TracedGlobal<v8::Object> handle;
+-};
+-
+-void ResetHandleAndSetFlag(const v8::WeakCallbackInfo<FlagAndGlobal>& data) {
++void ResetHandleAndSetFlag(
++    const v8::WeakCallbackInfo<FlagAndPersistent>& data) {
+   data.GetParameter()->handle.Reset();
+   data.GetParameter()->flag = true;
+ }
+ 
+-template <typename HandleContainer>
++using ConstructFunction = void (*)(v8::Isolate* isolate,
++                                   v8::Local<v8::Context> context,
++                                   FlagAndPersistent* flag_and_persistent);
++
+ void ConstructJSObject(v8::Isolate* isolate, v8::Local<v8::Context> context,
+-                       HandleContainer* flag_and_persistent) {
++                       FlagAndPersistent* flag_and_persistent) {
+   v8::HandleScope handle_scope(isolate);
+   v8::Local<v8::Object> object(v8::Object::New(isolate));
+   CHECK(!object.IsEmpty());
+@@ -98,9 +79,8 @@ void ConstructJSObject(v8::Isolate* isolate, v8::Global<v8::Object>* global) {
+   CHECK(!global->IsEmpty());
+ }
+ 
+-template <typename HandleContainer>
+ void ConstructJSApiObject(v8::Isolate* isolate, v8::Local<v8::Context> context,
+-                          HandleContainer* flag_and_persistent) {
++                          FlagAndPersistent* flag_and_persistent) {
+   v8::HandleScope handle_scope(isolate);
+   v8::Local<v8::FunctionTemplate> fun =
+       v8::FunctionTemplate::New(isolate, SimpleCallback);
+@@ -115,8 +95,7 @@ void ConstructJSApiObject(v8::Isolate* isolate, v8::Local<v8::Context> context,
+ 
+ enum class SurvivalMode { kSurvives, kDies };
+ 
+-template <typename ConstructFunction, typename ModifierFunction,
+-          typename GCFunction>
++template <typename ModifierFunction, typename GCFunction>
+ void WeakHandleTest(v8::Isolate* isolate, ConstructFunction construct_function,
+                     ModifierFunction modifier_function, GCFunction gc_function,
+                     SurvivalMode survives) {
+@@ -124,7 +103,7 @@ void WeakHandleTest(v8::Isolate* isolate, ConstructFunction construct_function,
+   v8::Local<v8::Context> context = v8::Context::New(isolate);
+   v8::Context::Scope context_scope(context);
+ 
+-  FlagAndGlobal fp;
++  FlagAndPersistent fp;
+   construct_function(isolate, context, &fp);
+   CHECK(heap::InYoungGeneration(isolate, fp.handle));
+   fp.handle.SetWeak(&fp, &ResetHandleAndSetFlag,
+@@ -136,28 +115,6 @@ void WeakHandleTest(v8::Isolate* isolate, ConstructFunction construct_function,
+   CHECK_IMPLIES(survives == SurvivalMode::kDies, fp.flag);
+ }
+ 
+-template <typename ConstructFunction, typename ModifierFunction,
+-          typename GCFunction>
+-void TracedGlobalTest(v8::Isolate* isolate,
+-                      ConstructFunction construct_function,
+-                      ModifierFunction modifier_function,
+-                      GCFunction gc_function, SurvivalMode survives) {
+-  v8::HandleScope scope(isolate);
+-  v8::Local<v8::Context> context = v8::Context::New(isolate);
+-  v8::Context::Scope context_scope(context);
+-
+-  NonRootingEmbedderHeapTracer tracer;
+-  heap::TemporaryEmbedderHeapTracerScope tracer_scope(isolate, &tracer);
+-
+-  TracedGlobalWrapper fp;
+-  construct_function(isolate, context, &fp);
+-  CHECK(heap::InYoungGeneration(isolate, fp.handle));
+-  modifier_function(&fp);
+-  gc_function();
+-  CHECK_IMPLIES(survives == SurvivalMode::kSurvives, !fp.handle.IsEmpty());
+-  CHECK_IMPLIES(survives == SurvivalMode::kDies, fp.handle.IsEmpty());
+-}
+-
+ void ResurrectingFinalizer(
+     const v8::WeakCallbackInfo<v8::Global<v8::Object>>& data) {
+   data.GetParameter()->ClearWeak();
+@@ -320,36 +277,25 @@ TEST(PhatomHandlesWithoutCallbacks) {
+   CHECK_EQ(0u, isolate->NumberOfPhantomHandleResetsSinceLastCall());
+ }
+ 
+-TEST(WeakHandleToUnmodifiedJSObjectDiesOnScavenge) {
++TEST(WeakHandleToUnmodifiedJSObjectSurvivesScavenge) {
+   CcTest::InitializeVM();
+   WeakHandleTest(
+-      CcTest::isolate(), &ConstructJSObject<FlagAndGlobal>,
+-      [](FlagAndGlobal* fp) {}, []() { InvokeScavenge(); },
+-      SurvivalMode::kDies);
+-}
+-
+-TEST(TracedGlobalToUnmodifiedJSObjectSurvivesScavenge) {
+-  ManualGCScope manual_gc;
+-  CcTest::InitializeVM();
+-  TracedGlobalTest(
+-      CcTest::isolate(), &ConstructJSObject<TracedGlobalWrapper>,
+-      [](TracedGlobalWrapper* fp) {}, []() { InvokeScavenge(); },
+-      SurvivalMode::kSurvives);
++      CcTest::isolate(), &ConstructJSObject, [](FlagAndPersistent* fp) {},
++      []() { InvokeScavenge(); }, SurvivalMode::kSurvives);
+ }
+ 
+ TEST(WeakHandleToUnmodifiedJSObjectDiesOnMarkCompact) {
+   CcTest::InitializeVM();
+   WeakHandleTest(
+-      CcTest::isolate(), &ConstructJSObject<FlagAndGlobal>,
+-      [](FlagAndGlobal* fp) {}, []() { InvokeMarkSweep(); },
+-      SurvivalMode::kDies);
++      CcTest::isolate(), &ConstructJSObject, [](FlagAndPersistent* fp) {},
++      []() { InvokeMarkSweep(); }, SurvivalMode::kDies);
+ }
+ 
+ TEST(WeakHandleToUnmodifiedJSObjectSurvivesMarkCompactWhenInHandle) {
+   CcTest::InitializeVM();
+   WeakHandleTest(
+-      CcTest::isolate(), &ConstructJSObject<FlagAndGlobal>,
+-      [](FlagAndGlobal* fp) {
++      CcTest::isolate(), &ConstructJSObject,
++      [](FlagAndPersistent* fp) {
+         v8::Local<v8::Object> handle =
+             v8::Local<v8::Object>::New(CcTest::isolate(), fp->handle);
+         USE(handle);
+@@ -360,30 +306,19 @@ TEST(WeakHandleToUnmodifiedJSObjectSurvivesMarkCompactWhenInHandle) {
+ TEST(WeakHandleToUnmodifiedJSApiObjectDiesOnScavenge) {
+   CcTest::InitializeVM();
+   WeakHandleTest(
+-      CcTest::isolate(), &ConstructJSApiObject<FlagAndGlobal>,
+-      [](FlagAndGlobal* fp) {}, []() { InvokeScavenge(); },
+-      SurvivalMode::kDies);
+-}
+-
+-TEST(TracedGlobalToUnmodifiedJSApiObjectDiesOnScavenge) {
+-  ManualGCScope manual_gc;
+-  CcTest::InitializeVM();
+-  TracedGlobalTest(
+-      CcTest::isolate(), &ConstructJSApiObject<TracedGlobalWrapper>,
+-      [](TracedGlobalWrapper* fp) {}, []() { InvokeScavenge(); },
+-      SurvivalMode::kDies);
++      CcTest::isolate(), &ConstructJSApiObject, [](FlagAndPersistent* fp) {},
++      []() { InvokeScavenge(); }, SurvivalMode::kDies);
+ }
+ 
+-TEST(TracedGlobalToJSApiObjectWithIdentityHashSurvivesScavenge) {
+-  ManualGCScope manual_gc;
++TEST(WeakHandleToJSApiObjectWithIdentityHashSurvivesScavenge) {
+   CcTest::InitializeVM();
+   Isolate* i_isolate = CcTest::i_isolate();
+   HandleScope scope(i_isolate);
+   Handle<JSWeakMap> weakmap = i_isolate->factory()->NewJSWeakMap();
+ 
+-  TracedGlobalTest(
+-      CcTest::isolate(), &ConstructJSApiObject<TracedGlobalWrapper>,
+-      [&weakmap, i_isolate](TracedGlobalWrapper* fp) {
++  WeakHandleTest(
++      CcTest::isolate(), &ConstructJSApiObject,
++      [&weakmap, i_isolate](FlagAndPersistent* fp) {
+         v8::HandleScope scope(CcTest::isolate());
+         Handle<JSReceiver> key =
+             Utils::OpenHandle(*fp->handle.Get(CcTest::isolate()));
+@@ -397,8 +332,8 @@ TEST(TracedGlobalToJSApiObjectWithIdentityHashSurvivesScavenge) {
+ TEST(WeakHandleToUnmodifiedJSApiObjectSurvivesScavengeWhenInHandle) {
+   CcTest::InitializeVM();
+   WeakHandleTest(
+-      CcTest::isolate(), &ConstructJSApiObject<FlagAndGlobal>,
+-      [](FlagAndGlobal* fp) {
++      CcTest::isolate(), &ConstructJSApiObject,
++      [](FlagAndPersistent* fp) {
+         v8::Local<v8::Object> handle =
+             v8::Local<v8::Object>::New(CcTest::isolate(), fp->handle);
+         USE(handle);
+@@ -409,16 +344,15 @@ TEST(WeakHandleToUnmodifiedJSApiObjectSurvivesScavengeWhenInHandle) {
+ TEST(WeakHandleToUnmodifiedJSApiObjectDiesOnMarkCompact) {
+   CcTest::InitializeVM();
+   WeakHandleTest(
+-      CcTest::isolate(), &ConstructJSApiObject<FlagAndGlobal>,
+-      [](FlagAndGlobal* fp) {}, []() { InvokeMarkSweep(); },
+-      SurvivalMode::kDies);
++      CcTest::isolate(), &ConstructJSApiObject, [](FlagAndPersistent* fp) {},
++      []() { InvokeMarkSweep(); }, SurvivalMode::kDies);
+ }
+ 
+ TEST(WeakHandleToUnmodifiedJSApiObjectSurvivesMarkCompactWhenInHandle) {
+   CcTest::InitializeVM();
+   WeakHandleTest(
+-      CcTest::isolate(), &ConstructJSApiObject<FlagAndGlobal>,
+-      [](FlagAndGlobal* fp) {
++      CcTest::isolate(), &ConstructJSApiObject,
++      [](FlagAndPersistent* fp) {
+         v8::Local<v8::Object> handle =
+             v8::Local<v8::Object>::New(CcTest::isolate(), fp->handle);
+         USE(handle);
+@@ -426,57 +360,58 @@ TEST(WeakHandleToUnmodifiedJSApiObjectSurvivesMarkCompactWhenInHandle) {
+       []() { InvokeMarkSweep(); }, SurvivalMode::kSurvives);
+ }
+ 
+-TEST(TracedGlobalToJSApiObjectWithModifiedMapSurvivesScavenge) {
++TEST(WeakHandleToActiveUnmodifiedJSApiObjectSurvivesScavenge) {
+   CcTest::InitializeVM();
+-  v8::Isolate* isolate = CcTest::isolate();
+-  LocalContext context;
+-
+-  TracedGlobal<v8::Object> handle;
+-  {
+-    v8::HandleScope scope(isolate);
+-    // Create an API object which does not have the same map as constructor.
+-    auto function_template = FunctionTemplate::New(isolate);
+-    auto instance_t = function_template->InstanceTemplate();
+-    instance_t->Set(
+-        v8::String::NewFromUtf8(isolate, "a", NewStringType::kNormal)
+-            .ToLocalChecked(),
+-        v8::Number::New(isolate, 10));
+-    auto function =
+-        function_template->GetFunction(context.local()).ToLocalChecked();
+-    auto i = function->NewInstance(context.local()).ToLocalChecked();
+-    handle.Reset(isolate, i);
+-  }
+-  InvokeScavenge();
+-  CHECK(!handle.IsEmpty());
++  WeakHandleTest(
++      CcTest::isolate(), &ConstructJSApiObject,
++      [](FlagAndPersistent* fp) {
++#if __clang__
++#pragma clang diagnostic push
++#pragma clang diagnostic ignored "-Wdeprecated"
++#endif
++        fp->handle.MarkActive();
++#if __clang__
++#pragma clang diagnostic pop
++#endif
++      },
++      []() { InvokeScavenge(); }, SurvivalMode::kSurvives);
+ }
+ 
+-TEST(TracedGlobalTOJsApiObjectWithElementsSurvivesScavenge) {
++TEST(WeakHandleToActiveUnmodifiedJSApiObjectDiesOnMarkCompact) {
+   CcTest::InitializeVM();
+-  v8::Isolate* isolate = CcTest::isolate();
+-  LocalContext context;
+-
+-  TracedGlobal<v8::Object> handle;
+-  {
+-    v8::HandleScope scope(isolate);
++  WeakHandleTest(
++      CcTest::isolate(), &ConstructJSApiObject,
++      [](FlagAndPersistent* fp) {
++#if __clang__
++#pragma clang diagnostic push
++#pragma clang diagnostic ignored "-Wdeprecated"
++#endif
++        fp->handle.MarkActive();
++#if __clang__
++#pragma clang diagnostic pop
++#endif
++      },
++      []() { InvokeMarkSweep(); }, SurvivalMode::kDies);
++}
+ 
+-    // Create an API object which has elements.
+-    auto function_template = FunctionTemplate::New(isolate);
+-    auto instance_t = function_template->InstanceTemplate();
+-    instance_t->Set(
+-        v8::String::NewFromUtf8(isolate, "1", NewStringType::kNormal)
+-            .ToLocalChecked(),
+-        v8::Number::New(isolate, 10));
+-    instance_t->Set(
+-        v8::String::NewFromUtf8(isolate, "2", NewStringType::kNormal)
+-            .ToLocalChecked(),
+-        v8::Number::New(isolate, 10));
+-    auto function =
+-        function_template->GetFunction(context.local()).ToLocalChecked();
+-    auto i = function->NewInstance(context.local()).ToLocalChecked();
+-    handle.Reset(isolate, i);
+-  }
+-  InvokeScavenge();
+-  CHECK(!handle.IsEmpty());
++TEST(WeakHandleToActiveUnmodifiedJSApiObjectSurvivesMarkCompactWhenInHandle) {
++  CcTest::InitializeVM();
++  WeakHandleTest(
++      CcTest::isolate(), &ConstructJSApiObject,
++      [](FlagAndPersistent* fp) {
++#if __clang__
++#pragma clang diagnostic push
++#pragma clang diagnostic ignored "-Wdeprecated"
++#endif
++        fp->handle.MarkActive();
++#if __clang__
++#pragma clang diagnostic pop
++#endif
++        v8::Local<v8::Object> handle =
++            v8::Local<v8::Object>::New(CcTest::isolate(), fp->handle);
++        USE(handle);
++      },
++      []() { InvokeMarkSweep(); }, SurvivalMode::kSurvives);
+ }
+ 
+ TEST(FinalizerOnUnmodifiedJSApiObjectDoesNotCrash) {
+@@ -487,7 +422,8 @@ TEST(FinalizerOnUnmodifiedJSApiObjectDoesNotCrash) {
+   v8::Local<v8::Context> context = v8::Context::New(isolate);
+   v8::Context::Scope context_scope(context);
+ 
+-  FlagAndGlobal fp;
++  FlagAndPersistent fp;
++  // Could use a regular object and MarkIndependent too.
+   ConstructJSApiObject(isolate, context, &fp);
+   fp.handle.SetWeak(&fp, &ResetHandleAndSetFlag,
+                     v8::WeakCallbackType::kFinalizer);
+@@ -559,22 +495,22 @@ TEST(FinalizerDiesAndKeepsPhantomAliveOnMarkCompact) {
+ 
+ namespace {
+ 
+-void ForceScavenge2(const v8::WeakCallbackInfo<FlagAndGlobal>& data) {
++void ForceScavenge2(const v8::WeakCallbackInfo<FlagAndPersistent>& data) {
+   data.GetParameter()->flag = true;
+   InvokeScavenge();
+ }
+ 
+-void ForceScavenge1(const v8::WeakCallbackInfo<FlagAndGlobal>& data) {
++void ForceScavenge1(const v8::WeakCallbackInfo<FlagAndPersistent>& data) {
+   data.GetParameter()->handle.Reset();
+   data.SetSecondPassCallback(ForceScavenge2);
+ }
+ 
+-void ForceMarkSweep2(const v8::WeakCallbackInfo<FlagAndGlobal>& data) {
++void ForceMarkSweep2(const v8::WeakCallbackInfo<FlagAndPersistent>& data) {
+   data.GetParameter()->flag = true;
+   InvokeMarkSweep();
+ }
+ 
+-void ForceMarkSweep1(const v8::WeakCallbackInfo<FlagAndGlobal>& data) {
++void ForceMarkSweep1(const v8::WeakCallbackInfo<FlagAndPersistent>& data) {
+   data.GetParameter()->handle.Reset();
+   data.SetSecondPassCallback(ForceMarkSweep2);
+ }
+@@ -589,7 +525,7 @@ TEST(GCFromWeakCallbacks) {
+   v8::Context::Scope context_scope(context);
+ 
+   static const int kNumberOfGCTypes = 2;
+-  typedef v8::WeakCallbackInfo<FlagAndGlobal>::Callback Callback;
++  typedef v8::WeakCallbackInfo<FlagAndPersistent>::Callback Callback;
+   Callback gc_forcing_callback[kNumberOfGCTypes] = {&ForceScavenge1,
+                                                     &ForceMarkSweep1};
+ 
+@@ -598,7 +534,7 @@ TEST(GCFromWeakCallbacks) {
+ 
+   for (int outer_gc = 0; outer_gc < kNumberOfGCTypes; outer_gc++) {
+     for (int inner_gc = 0; inner_gc < kNumberOfGCTypes; inner_gc++) {
+-      FlagAndGlobal fp;
++      FlagAndPersistent fp;
+       ConstructJSApiObject(isolate, context, &fp);
+       CHECK(heap::InYoungGeneration(isolate, fp.handle));
+       fp.flag = false;
+@@ -613,11 +549,11 @@ TEST(GCFromWeakCallbacks) {
+ 
+ namespace {
+ 
+-void SecondPassCallback(const v8::WeakCallbackInfo<FlagAndGlobal>& data) {
++void SecondPassCallback(const v8::WeakCallbackInfo<FlagAndPersistent>& data) {
+   data.GetParameter()->flag = true;
+ }
+ 
+-void FirstPassCallback(const v8::WeakCallbackInfo<FlagAndGlobal>& data) {
++void FirstPassCallback(const v8::WeakCallbackInfo<FlagAndPersistent>& data) {
+   data.GetParameter()->handle.Reset();
+   data.SetSecondPassCallback(SecondPassCallback);
+ }
+@@ -630,7 +566,7 @@ TEST(SecondPassPhantomCallbacks) {
+   v8::HandleScope scope(isolate);
+   v8::Local<v8::Context> context = v8::Context::New(isolate);
+   v8::Context::Scope context_scope(context);
+-  FlagAndGlobal fp;
++  FlagAndPersistent fp;
+   ConstructJSApiObject(isolate, context, &fp);
+   fp.flag = false;
+   fp.handle.SetWeak(&fp, FirstPassCallback, v8::WeakCallbackType::kParameter);

+ 10 - 17
patches/common/v8/woa_symbol_workaround.patch → patches/common/v8/workaround_an_undefined_symbol_error.patch

@@ -1,7 +1,7 @@
-From 93a2903b1392fe70bccd32db67649487d88985bd Mon Sep 17 00:00:00 2001
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
 From: Richard Townsend <[email protected]>
 Date: Wed, 24 Apr 2019 13:57:36 +0100
-Subject: [PATCH] Workaround an undefined symbol error
+Subject: Workaround an undefined symbol error
 
 Previously, builds configured with dcheck_always_on=true would error
 with messages like this in the log:
@@ -10,19 +10,15 @@ with messages like this in the log:
 
 By moving some functions out of the the arm64-assembler header file,
 this error no longer seems to happen.
----
- src/arm64/assembler-arm64.cc | 16 ++++++++++++++++
- src/arm64/assembler-arm64.h  | 17 +++--------------
- 2 files changed, 19 insertions(+), 14 deletions(-)
 
 diff --git a/src/arm64/assembler-arm64.cc b/src/arm64/assembler-arm64.cc
-index 2763a647c7..7d19be5de8 100644
+index 5fd50f3643e8999423a77062ef353cd4eeeff0fd..ea907a59f7ad0c73287698a0600ce11a3629dafd 100644
 --- a/src/arm64/assembler-arm64.cc
 +++ b/src/arm64/assembler-arm64.cc
-@@ -4001,6 +4001,22 @@ void Assembler::MoveWide(const Register& rd, uint64_t imm, int shift,
+@@ -4013,6 +4013,22 @@ void Assembler::MoveWide(const Register& rd, uint64_t imm, int shift,
         ImmMoveWide(static_cast<int>(imm)) | ShiftMoveWide(shift));
  }
-
+ 
 +Instr Assembler::RmNot31(CPURegister rm) {
 +  DCHECK_NE(rm.code(), kSPRegInternalCode);
 +  DCHECK(!rm.IsZero());
@@ -43,24 +39,24 @@ index 2763a647c7..7d19be5de8 100644
                         const Operand& operand, FlagsUpdate S, AddSubOp op) {
    DCHECK_EQ(rd.SizeInBits(), rn.SizeInBits());
 diff --git a/src/arm64/assembler-arm64.h b/src/arm64/assembler-arm64.h
-index 586eff1241..30b8586f69 100644
+index 586eff1241fed0a5f6a6fbc9b858981058a75feb..30b8586f69c51c4a6bad82faf4e02f823838f15b 100644
 --- a/src/arm64/assembler-arm64.h
 +++ b/src/arm64/assembler-arm64.h
 @@ -2232,11 +2232,7 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase {
      return rm.code() << Rm_offset;
    }
-
+ 
 -  static Instr RmNot31(CPURegister rm) {
 -    DCHECK_NE(rm.code(), kSPRegInternalCode);
 -    DCHECK(!rm.IsZero());
 -    return Rm(rm);
 -  }
 +  static Instr RmNot31(CPURegister rm);
-
+ 
    static Instr Ra(CPURegister ra) {
      DCHECK_NE(ra.code(), kSPRegInternalCode);
 @@ -2260,15 +2256,8 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase {
-
+ 
    // These encoding functions allow the stack pointer to be encoded, and
    // disallow the zero register.
 -  static Instr RdSP(Register rd) {
@@ -74,9 +70,6 @@ index 586eff1241..30b8586f69 100644
 -  }
 +  static Instr RdSP(Register rd);
 +  static Instr RnSP(Register rn);
-
+ 
    // Flags encoding.
    inline static Instr Flags(FlagsUpdate S);
---
-2.19.1.windows.1
-

+ 4 - 1
spec-main/api-app-spec.ts

@@ -402,7 +402,10 @@ describe('app module', () => {
       w = new BrowserWindow({ show: false })
     })
 
-    it('should emit renderer-process-crashed event when renderer crashes', async () => {
+    it('should emit renderer-process-crashed event when renderer crashes', async function() {
+      // FIXME: re-enable this test on win32.
+      if (process.platform === 'win32')
+        return this.skip()
       w = new BrowserWindow({
         show: false,
         webPreferences: {