Browse Source

Merge remote-tracking branch 'origin/chromium-upgrade/72'

Samuel Attard 6 years ago
parent
commit
f3e30c7ae3
100 changed files with 490 additions and 394 deletions
  1. 1 0
      .circleci/config.yml
  2. 5 6
      BUILD.gn
  3. 2 2
      DEPS
  4. 34 0
      atom/app/atom_main_delegate.cc
  5. 1 0
      atom/app/atom_main_delegate.h
  6. 8 6
      atom/browser/api/atom_api_app.cc
  7. 3 1
      atom/browser/api/atom_api_auto_updater.cc
  8. 3 2
      atom/browser/api/atom_api_browser_view.cc
  9. 4 3
      atom/browser/api/atom_api_browser_window_mac.mm
  10. 3 1
      atom/browser/api/atom_api_debugger.cc
  11. 3 2
      atom/browser/api/atom_api_download_item.cc
  12. 3 2
      atom/browser/api/atom_api_in_app_purchase.cc
  13. 3 1
      atom/browser/api/atom_api_menu.cc
  14. 2 2
      atom/browser/api/atom_api_menu_mac.mm
  15. 5 2
      atom/browser/api/atom_api_net.cc
  16. 3 2
      atom/browser/api/atom_api_notification.cc
  17. 3 2
      atom/browser/api/atom_api_power_monitor.cc
  18. 3 1
      atom/browser/api/atom_api_screen.cc
  19. 9 6
      atom/browser/api/atom_api_session.cc
  20. 3 2
      atom/browser/api/atom_api_system_preferences.cc
  21. 3 2
      atom/browser/api/atom_api_top_level_window.cc
  22. 3 1
      atom/browser/api/atom_api_tray.cc
  23. 3 2
      atom/browser/api/atom_api_view.cc
  24. 24 20
      atom/browser/api/atom_api_web_contents.cc
  25. 2 1
      atom/browser/api/atom_api_web_contents.h
  26. 12 1
      atom/browser/api/atom_api_web_contents_impl.cc
  27. 1 1
      atom/browser/api/atom_api_web_contents_mac.mm
  28. 2 1
      atom/browser/api/event_emitter.cc
  29. 23 3
      atom/browser/atom_browser_client.cc
  30. 6 1
      atom/browser/atom_browser_client.h
  31. 0 5
      atom/browser/atom_browser_context.cc
  32. 0 1
      atom/browser/atom_browser_context.h
  33. 1 28
      atom/browser/atom_browser_main_parts.cc
  34. 0 1
      atom/browser/atom_browser_main_parts.h
  35. 1 1
      atom/browser/browser_mac.mm
  36. 6 1
      atom/browser/browser_process_impl.cc
  37. 4 2
      atom/browser/browser_process_impl.h
  38. 3 2
      atom/browser/common_web_contents_delegate.cc
  39. 1 1
      atom/browser/common_web_contents_delegate.h
  40. 13 6
      atom/browser/common_web_contents_delegate_mac.mm
  41. 6 3
      atom/browser/common_web_contents_delegate_views.cc
  42. 21 0
      atom/browser/mac/atom_application.mm
  43. 11 6
      atom/browser/native_browser_view_mac.mm
  44. 21 13
      atom/browser/native_window_mac.mm
  45. 8 0
      atom/browser/native_window_views.cc
  46. 1 0
      atom/browser/native_window_views.h
  47. 1 5
      atom/browser/net/atom_network_delegate.cc
  48. 2 4
      atom/browser/net/atom_network_delegate.h
  49. 0 10
      atom/browser/net/url_request_context_getter.cc
  50. 3 1
      atom/browser/ui/certificate_trust_mac.mm
  51. 5 5
      atom/browser/ui/cocoa/atom_inspectable_web_contents_view.mm
  52. 1 1
      atom/browser/ui/cocoa/atom_native_widget_mac.h
  53. 1 1
      atom/browser/ui/cocoa/atom_native_widget_mac.mm
  54. 11 8
      atom/browser/ui/cocoa/atom_ns_window_delegate.mm
  55. 10 9
      atom/browser/ui/drag_util_mac.mm
  56. 6 3
      atom/browser/ui/file_dialog_mac.mm
  57. 2 3
      atom/browser/ui/inspectable_web_contents_impl.cc
  58. 1 1
      atom/browser/ui/inspectable_web_contents_impl.h
  59. 4 2
      atom/browser/ui/message_box_mac.mm
  60. 0 3
      atom/browser/ui/views/atom_views_delegate.cc
  61. 0 2
      atom/browser/ui/views/atom_views_delegate.h
  62. 2 3
      atom/browser/ui/views/submenu_button.cc
  63. 27 0
      atom/browser/web_contents_preferences.cc
  64. 2 2
      atom/browser/web_dialog_helper.cc
  65. 4 2
      atom/browser/web_view_guest_delegate.cc
  66. 1 1
      atom/common/api/atom_api_native_image_mac.mm
  67. 3 3
      atom/common/api/atom_bindings.cc
  68. 1 1
      atom/common/api/constructor.h
  69. 2 8
      atom/common/common_message_generator.cc
  70. 22 21
      atom/common/native_mate_converters/blink_converter.cc
  71. 3 3
      atom/common/native_mate_converters/blink_converter.h
  72. 10 6
      atom/common/native_mate_converters/callback.cc
  73. 8 3
      atom/common/native_mate_converters/callback.h
  74. 3 2
      atom/common/native_mate_converters/v8_value_converter.cc
  75. 1 1
      atom/common/node_bindings_win.cc
  76. 3 2
      atom/renderer/api/atom_api_spell_check_client.cc
  77. 7 3
      atom/renderer/api/atom_api_web_frame.cc
  78. 0 1
      atom/renderer/content_settings_observer.cc
  79. 1 2
      atom/renderer/content_settings_observer.h
  80. 14 6
      atom/utility/atom_content_utility_client.cc
  81. 5 0
      atom/utility/atom_content_utility_client.h
  82. 6 8
      chromium_src/BUILD.gn
  83. 5 0
      docs/api/browser-window.md
  84. 1 0
      filenames.gni
  85. 2 2
      lib/browser/guest-view-manager.js
  86. 3 1
      native_mate/native_mate/dictionary.h
  87. 2 1
      native_mate/native_mate/wrappable.cc
  88. 0 1
      patches/common/boringssl/.patches
  89. 3 3
      patches/common/boringssl/add_ec_group_order_bits_for_openssl_compatibility.patch
  90. 1 1
      patches/common/boringssl/add_ec_key_key2buf_for_openssl_compatibility.patch
  91. 0 58
      patches/common/boringssl/implement_ssl_get_tlsext_status_type.patch
  92. 2 4
      patches/common/chromium/.patches
  93. 6 6
      patches/common/chromium/accelerator.patch
  94. 4 4
      patches/common/chromium/add_realloc.patch
  95. 2 2
      patches/common/chromium/allow_webview_file_url.patch
  96. 0 19
      patches/common/chromium/app_indicator_icon_menu.patch
  97. 2 2
      patches/common/chromium/blink-worker-enable-csp-in-file-scheme.patch
  98. 2 2
      patches/common/chromium/blink_file_path.patch
  99. 2 2
      patches/common/chromium/blink_fix_prototype_assert.patch
  100. 4 4
      patches/common/chromium/blink_initialization_order.patch

+ 1 - 0
.circleci/config.yml

@@ -167,6 +167,7 @@ step-gn-gen-default: &step-gn-gen-default
 step-electron-build: &step-electron-build
   run:
     name: Electron build
+    no_output_timeout: 30m
     command: |
       cd src
       ninja -C out/Default electron -j18

+ 5 - 6
BUILD.gn

@@ -1,8 +1,3 @@
-import("build/asar.gni")
-import("build/npm.gni")
-import("buildflags/buildflags.gni")
-import("electron_paks.gni")
-import("filenames.gni")
 import("//build/config/locales.gni")
 import("//build/config/ui.gni")
 import("//build/config/win/manifest.gni")
@@ -14,6 +9,11 @@ import("//tools/grit/grit_rule.gni")
 import("//tools/grit/repack.gni")
 import("//tools/v8_context_snapshot/v8_context_snapshot.gni")
 import("//v8/snapshot_toolchain.gni")
+import("build/asar.gni")
+import("build/npm.gni")
+import("buildflags/buildflags.gni")
+import("electron_paks.gni")
+import("filenames.gni")
 
 if (is_mac) {
   import("//build/config/mac/rules.gni")
@@ -421,7 +421,6 @@ static_library("electron_lib") {
 
   if (enable_osr) {
     sources += [
-      "atom/browser/api/atom_api_web_contents_osr.cc",
       "atom/browser/osr/osr_output_device.cc",
       "atom/browser/osr/osr_output_device.h",
       "atom/browser/osr/osr_render_widget_host_view.cc",

+ 2 - 2
DEPS

@@ -10,9 +10,9 @@ gclient_gn_args = [
 
 vars = {
   'chromium_version':
-    '71.0.3578.98',
+    '72.0.3626.52',
   'node_version':
-    'aeae08cda811ed122918bfd48fd9e56f8204d818',
+    'ad2c89ec3be0f5db3ea02b0f591d36a5d84c51ad',
 
   'boto_version': 'f7574aa6cc2c819430c1f05e9a1a1a666ef8169b',
   'pyyaml_version': '3.12',

+ 34 - 0
atom/app/atom_main_delegate.cc

@@ -8,6 +8,10 @@
 #include <memory>
 #include <string>
 
+#if defined(OS_LINUX)
+#include <glib.h>  // for g_setenv()
+#endif
+
 #include "atom/app/atom_content_client.h"
 #include "atom/browser/atom_browser_client.h"
 #include "atom/browser/relauncher.h"
@@ -182,6 +186,36 @@ bool AtomMainDelegate::BasicStartupComplete(int* exit_code) {
   return false;
 }
 
+void AtomMainDelegate::PostEarlyInitialization(bool is_running_tests) {
+  std::string custom_locale;
+  ui::ResourceBundle::InitSharedInstanceWithLocale(
+      custom_locale, nullptr, ui::ResourceBundle::LOAD_COMMON_RESOURCES);
+  auto* cmd_line = base::CommandLine::ForCurrentProcess();
+  if (cmd_line->HasSwitch(::switches::kLang)) {
+    const std::string locale = cmd_line->GetSwitchValueASCII(::switches::kLang);
+    const base::FilePath locale_file_path =
+        ui::ResourceBundle::GetSharedInstance().GetLocaleFilePath(locale, true);
+    if (!locale_file_path.empty()) {
+      custom_locale = locale;
+#if defined(OS_LINUX)
+      /* When built with USE_GLIB, libcc's GetApplicationLocaleInternal() uses
+       * glib's g_get_language_names(), which keys off of getenv("LC_ALL") */
+      g_setenv("LC_ALL", custom_locale.c_str(), TRUE);
+#endif
+    }
+  }
+
+#if defined(OS_MACOSX)
+  if (custom_locale.empty())
+    l10n_util::OverrideLocaleWithCocoaLocale();
+#endif
+
+  LoadResourceBundle(custom_locale);
+
+  AtomBrowserClient::SetApplicationLocale(
+      l10n_util::GetApplicationLocale(custom_locale));
+}
+
 void AtomMainDelegate::PreSandboxStartup() {
   auto* command_line = base::CommandLine::ForCurrentProcess();
 

+ 1 - 0
atom/app/atom_main_delegate.h

@@ -25,6 +25,7 @@ class AtomMainDelegate : public content::ContentMainDelegate {
   bool BasicStartupComplete(int* exit_code) override;
   void PreSandboxStartup() override;
   void PreCreateMainMessageLoop() override;
+  void PostEarlyInitialization(bool is_running_tests) override;
   content::ContentBrowserClient* CreateContentBrowserClient() override;
   content::ContentRendererClient* CreateContentRendererClient() override;
   content::ContentUtilityClient* CreateContentUtilityClient() override;

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

@@ -30,7 +30,7 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/path_service.h"
-#include "base/sys_info.h"
+#include "base/system/sys_info.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/icon_manager.h"
 #include "chrome/common/chrome_paths.h"
@@ -780,24 +780,24 @@ void App::OnGpuProcessCrashed(base::TerminationStatus status) {
 
 void App::BrowserChildProcessLaunchedAndConnected(
     const content::ChildProcessData& data) {
-  ChildProcessLaunched(data.process_type, data.GetHandle());
+  ChildProcessLaunched(data.process_type, data.GetProcess().Handle());
 }
 
 void App::BrowserChildProcessHostDisconnected(
     const content::ChildProcessData& data) {
-  ChildProcessDisconnected(base::GetProcId(data.GetHandle()));
+  ChildProcessDisconnected(base::GetProcId(data.GetProcess().Handle()));
 }
 
 void App::BrowserChildProcessCrashed(
     const content::ChildProcessData& data,
     const content::ChildProcessTerminationInfo& info) {
-  ChildProcessDisconnected(base::GetProcId(data.GetHandle()));
+  ChildProcessDisconnected(base::GetProcId(data.GetProcess().Handle()));
 }
 
 void App::BrowserChildProcessKilled(
     const content::ChildProcessData& data,
     const content::ChildProcessTerminationInfo& info) {
-  ChildProcessDisconnected(base::GetProcId(data.GetHandle()));
+  ChildProcessDisconnected(base::GetProcId(data.GetProcess().Handle()));
 }
 
 void App::RenderProcessReady(content::RenderProcessHost* host) {
@@ -1387,7 +1387,9 @@ void Initialize(v8::Local<v8::Object> exports,
                 void* priv) {
   v8::Isolate* isolate = context->GetIsolate();
   mate::Dictionary dict(isolate, exports);
-  dict.Set("App", atom::api::App::GetConstructor(isolate)->GetFunction());
+  dict.Set("App", atom::api::App::GetConstructor(isolate)
+                      ->GetFunction(context)
+                      .ToLocalChecked());
   dict.Set("app", atom::api::App::Create(isolate));
 #if defined(OS_MACOSX)
   auto browser = base::Unretained(Browser::Get());

+ 3 - 1
atom/browser/api/atom_api_auto_updater.cc

@@ -147,7 +147,9 @@ void Initialize(v8::Local<v8::Object> exports,
   v8::Isolate* isolate = context->GetIsolate();
   mate::Dictionary dict(isolate, exports);
   dict.Set("autoUpdater", AutoUpdater::Create(isolate));
-  dict.Set("AutoUpdater", AutoUpdater::GetConstructor(isolate)->GetFunction());
+  dict.Set("AutoUpdater", AutoUpdater::GetConstructor(isolate)
+                              ->GetFunction(context)
+                              .ToLocalChecked());
 }
 
 }  // namespace

+ 3 - 2
atom/browser/api/atom_api_browser_view.cc

@@ -159,8 +159,9 @@ void Initialize(v8::Local<v8::Object> exports,
   v8::Isolate* isolate = context->GetIsolate();
   BrowserView::SetConstructor(isolate, base::Bind(&BrowserView::New));
 
-  mate::Dictionary browser_view(
-      isolate, BrowserView::GetConstructor(isolate)->GetFunction());
+  mate::Dictionary browser_view(isolate, BrowserView::GetConstructor(isolate)
+                                             ->GetFunction(context)
+                                             .ToLocalChecked());
   browser_view.SetMethod("fromId",
                          &mate::TrackableObject<BrowserView>::FromWeakMapID);
   browser_view.SetMethod("getAllViews",

+ 4 - 3
atom/browser/api/atom_api_browser_window_mac.mm

@@ -59,8 +59,9 @@ void BrowserWindow::OverrideNSWindowContentView(InspectableWebContents* iwc) {
   // Make NativeWindow use a NSView as content view.
   static_cast<NativeWindowMac*>(window())->OverrideNSWindowContentView();
   // Add webview to contentView.
-  NSView* webView = iwc->GetView()->GetNativeView();
-  NSView* contentView = [window()->GetNativeWindow() contentView];
+  NSView* webView = iwc->GetView()->GetNativeView().GetNativeNSView();
+  NSView* contentView =
+      [window()->GetNativeWindow().GetNativeNSWindow() contentView];
   [webView setFrame:[contentView bounds]];
 
   // ensure that buttons view is floated to top of view hierarchy
@@ -80,7 +81,7 @@ void BrowserWindow::UpdateDraggableRegions(
   // All ControlRegionViews should be added as children of the WebContentsView,
   // because WebContentsView will be removed and re-added when entering and
   // leaving fullscreen mode.
-  NSView* webView = web_contents()->GetNativeView();
+  NSView* webView = web_contents()->GetNativeView().GetNativeNSView();
   NSInteger webViewWidth = NSWidth([webView bounds]);
   NSInteger webViewHeight = NSHeight([webView bounds]);
 

+ 3 - 1
atom/browser/api/atom_api_debugger.cc

@@ -194,7 +194,9 @@ void Initialize(v8::Local<v8::Object> exports,
                 void* priv) {
   v8::Isolate* isolate = context->GetIsolate();
   mate::Dictionary(isolate, exports)
-      .Set("Debugger", Debugger::GetConstructor(isolate)->GetFunction());
+      .Set("Debugger", Debugger::GetConstructor(isolate)
+                           ->GetFunction(context)
+                           .ToLocalChecked());
 }
 
 }  // namespace

+ 3 - 2
atom/browser/api/atom_api_download_item.cc

@@ -244,8 +244,9 @@ void Initialize(v8::Local<v8::Object> exports,
                 void* priv) {
   v8::Isolate* isolate = context->GetIsolate();
   mate::Dictionary(isolate, exports)
-      .Set("DownloadItem",
-           atom::api::DownloadItem::GetConstructor(isolate)->GetFunction());
+      .Set("DownloadItem", atom::api::DownloadItem::GetConstructor(isolate)
+                               ->GetFunction(context)
+                               .ToLocalChecked());
 }
 
 }  // namespace

+ 3 - 2
atom/browser/api/atom_api_in_app_purchase.cc

@@ -132,8 +132,9 @@ void Initialize(v8::Local<v8::Object> exports,
   v8::Isolate* isolate = context->GetIsolate();
   mate::Dictionary dict(isolate, exports);
   dict.Set("inAppPurchase", InAppPurchase::Create(isolate));
-  dict.Set("InAppPurchase",
-           InAppPurchase::GetConstructor(isolate)->GetFunction());
+  dict.Set("InAppPurchase", InAppPurchase::GetConstructor(isolate)
+                                ->GetFunction(context)
+                                .ToLocalChecked());
 #endif
 }
 

+ 3 - 1
atom/browser/api/atom_api_menu.cc

@@ -233,7 +233,9 @@ void Initialize(v8::Local<v8::Object> exports,
   Menu::SetConstructor(isolate, base::Bind(&Menu::New));
 
   mate::Dictionary dict(isolate, exports);
-  dict.Set("Menu", Menu::GetConstructor(isolate)->GetFunction());
+  dict.Set(
+      "Menu",
+      Menu::GetConstructor(isolate)->GetFunction(context).ToLocalChecked());
 #if defined(OS_MACOSX)
   dict.SetMethod("setApplicationMenu", &Menu::SetApplicationMenu);
   dict.SetMethod("sendActionToFirstResponder",

+ 2 - 2
atom/browser/api/atom_api_menu_mac.mm

@@ -56,7 +56,7 @@ void MenuMac::PopupOnUI(const base::WeakPtr<NativeWindow>& native_window,
                         base::Closure callback) {
   if (!native_window)
     return;
-  NSWindow* nswindow = native_window->GetNativeWindow();
+  NSWindow* nswindow = native_window->GetNativeWindow().GetNativeNSWindow();
 
   auto close_callback = base::Bind(
       &MenuMac::OnClosed, weak_factory_.GetWeakPtr(), window_id, callback);
@@ -99,7 +99,7 @@ void MenuMac::PopupOnUI(const base::WeakPtr<NativeWindow>& native_window,
 
   [popup_controllers_[window_id] setCloseCallback:close_callback];
   // Make sure events can be pumped while the menu is up.
-  base::MessageLoop::ScopedNestableTaskAllower allow;
+  base::MessageLoopCurrent::ScopedNestableTaskAllower allow;
 
   // One of the events that could be pumped is |window.close()|.
   // User-initiated event-tracking loops protect against this by

+ 5 - 2
atom/browser/api/atom_api_net.cc

@@ -31,7 +31,9 @@ void Net::BuildPrototype(v8::Isolate* isolate,
 }
 
 v8::Local<v8::Value> Net::URLRequest(v8::Isolate* isolate) {
-  return URLRequest::GetConstructor(isolate)->GetFunction();
+  return URLRequest::GetConstructor(isolate)
+      ->GetFunction(isolate->GetCurrentContext())
+      .ToLocalChecked();
 }
 
 }  // namespace api
@@ -53,7 +55,8 @@ void Initialize(v8::Local<v8::Object> exports,
 
   mate::Dictionary dict(isolate, exports);
   dict.Set("net", Net::Create(isolate));
-  dict.Set("Net", Net::GetConstructor(isolate)->GetFunction());
+  dict.Set("Net",
+           Net::GetConstructor(isolate)->GetFunction(context).ToLocalChecked());
 }
 
 }  // namespace

+ 3 - 2
atom/browser/api/atom_api_notification.cc

@@ -263,8 +263,9 @@ void Initialize(v8::Local<v8::Object> exports,
   Notification::SetConstructor(isolate, base::Bind(&Notification::New));
 
   mate::Dictionary dict(isolate, exports);
-  dict.Set("Notification",
-           Notification::GetConstructor(isolate)->GetFunction());
+  dict.Set("Notification", Notification::GetConstructor(isolate)
+                               ->GetFunction(context)
+                               .ToLocalChecked());
 
   dict.SetMethod("isSupported", &Notification::IsSupported);
 }

+ 3 - 2
atom/browser/api/atom_api_power_monitor.cc

@@ -141,8 +141,9 @@ void Initialize(v8::Local<v8::Object> exports,
   v8::Isolate* isolate = context->GetIsolate();
   mate::Dictionary dict(isolate, exports);
   dict.Set("powerMonitor", PowerMonitor::Create(isolate));
-  dict.Set("PowerMonitor",
-           PowerMonitor::GetConstructor(isolate)->GetFunction());
+  dict.Set("PowerMonitor", PowerMonitor::GetConstructor(isolate)
+                               ->GetFunction(context)
+                               .ToLocalChecked());
 }
 
 }  // namespace

+ 3 - 1
atom/browser/api/atom_api_screen.cc

@@ -164,7 +164,9 @@ void Initialize(v8::Local<v8::Object> exports,
   v8::Isolate* isolate = context->GetIsolate();
   mate::Dictionary dict(isolate, exports);
   dict.Set("screen", Screen::Create(isolate));
-  dict.Set("Screen", Screen::GetConstructor(isolate)->GetFunction());
+  dict.Set(
+      "Screen",
+      Screen::GetConstructor(isolate)->GetFunction(context).ToLocalChecked());
 }
 
 }  // namespace

+ 9 - 6
atom/browser/api/atom_api_session.cc

@@ -444,10 +444,9 @@ void Session::ClearStorageData(mate::Arguments* args) {
     // https://w3c.github.io/mediacapture-main/#dom-mediadeviceinfo-deviceid
     MediaDeviceIDSalt::Reset(browser_context()->prefs());
   }
-  storage_partition->ClearData(
-      options.storage_types, options.quota_types, options.origin,
-      content::StoragePartition::OriginMatcherFunction(), base::Time(),
-      base::Time::Max(), base::Bind(&OnClearStorageDataDone, callback));
+  storage_partition->ClearData(options.storage_types, options.quota_types,
+                               options.origin, base::Time(), base::Time::Max(),
+                               base::Bind(&OnClearStorageDataDone, callback));
 }
 
 void Session::FlushStorageData() {
@@ -805,8 +804,12 @@ void Initialize(v8::Local<v8::Object> exports,
                 void* priv) {
   v8::Isolate* isolate = context->GetIsolate();
   mate::Dictionary dict(isolate, exports);
-  dict.Set("Session", Session::GetConstructor(isolate)->GetFunction());
-  dict.Set("Cookies", Cookies::GetConstructor(isolate)->GetFunction());
+  dict.Set(
+      "Session",
+      Session::GetConstructor(isolate)->GetFunction(context).ToLocalChecked());
+  dict.Set(
+      "Cookies",
+      Cookies::GetConstructor(isolate)->GetFunction(context).ToLocalChecked());
   dict.SetMethod("fromPartition", &FromPartition);
 }
 

+ 3 - 2
atom/browser/api/atom_api_system_preferences.cc

@@ -121,8 +121,9 @@ void Initialize(v8::Local<v8::Object> exports,
   v8::Isolate* isolate = context->GetIsolate();
   mate::Dictionary dict(isolate, exports);
   dict.Set("systemPreferences", SystemPreferences::Create(isolate));
-  dict.Set("SystemPreferences",
-           SystemPreferences::GetConstructor(isolate)->GetFunction());
+  dict.Set("SystemPreferences", SystemPreferences::GetConstructor(isolate)
+                                    ->GetFunction(context)
+                                    .ToLocalChecked());
 }
 
 }  // namespace

+ 3 - 2
atom/browser/api/atom_api_top_level_window.cc

@@ -1179,8 +1179,9 @@ void Initialize(v8::Local<v8::Object> exports,
   v8::Isolate* isolate = context->GetIsolate();
   TopLevelWindow::SetConstructor(isolate, base::Bind(&TopLevelWindow::New));
 
-  mate::Dictionary constructor(
-      isolate, TopLevelWindow::GetConstructor(isolate)->GetFunction());
+  mate::Dictionary constructor(isolate, TopLevelWindow::GetConstructor(isolate)
+                                            ->GetFunction(context)
+                                            .ToLocalChecked());
   constructor.SetMethod("fromId",
                         &mate::TrackableObject<TopLevelWindow>::FromWeakMapID);
   constructor.SetMethod("getAllWindows",

+ 3 - 1
atom/browser/api/atom_api_tray.cc

@@ -254,7 +254,9 @@ void Initialize(v8::Local<v8::Object> exports,
   Tray::SetConstructor(isolate, base::Bind(&Tray::New));
 
   mate::Dictionary dict(isolate, exports);
-  dict.Set("Tray", Tray::GetConstructor(isolate)->GetFunction());
+  dict.Set(
+      "Tray",
+      Tray::GetConstructor(isolate)->GetFunction(context).ToLocalChecked());
 }
 
 }  // namespace

+ 3 - 2
atom/browser/api/atom_api_view.cc

@@ -76,8 +76,9 @@ void Initialize(v8::Local<v8::Object> exports,
   v8::Isolate* isolate = context->GetIsolate();
   View::SetConstructor(isolate, base::Bind(&View::New));
 
-  mate::Dictionary constructor(isolate,
-                               View::GetConstructor(isolate)->GetFunction());
+  mate::Dictionary constructor(
+      isolate,
+      View::GetConstructor(isolate)->GetFunction(context).ToLocalChecked());
 
   mate::Dictionary dict(isolate, exports);
   dict.Set("View", constructor);

+ 24 - 20
atom/browser/api/atom_api_web_contents.cc

@@ -47,6 +47,7 @@
 #include "atom/common/native_mate_converters/value_converter.h"
 #include "atom/common/options_switches.h"
 #include "base/message_loop/message_loop.h"
+#include "base/no_destructor.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/threading/thread_task_runner_handle.h"
@@ -240,7 +241,7 @@ namespace api {
 namespace {
 
 content::ServiceWorkerContext* GetServiceWorkerContext(
-    const content::WebContents* web_contents) {
+    content::WebContents* web_contents) {
   auto* context = web_contents->GetBrowserContext();
   auto* site_instance = web_contents->GetSiteInstance();
   if (!context || !site_instance)
@@ -421,15 +422,14 @@ void WebContents::InitWithSessionAndOptions(
 
 #if defined(OS_LINUX) || defined(OS_WIN)
   // Update font settings.
-  CR_DEFINE_STATIC_LOCAL(
-      const gfx::FontRenderParams, params,
-      (gfx::GetFontRenderParams(gfx::FontRenderParamsQuery(), nullptr)));
-  prefs->should_antialias_text = params.antialiasing;
-  prefs->use_subpixel_positioning = params.subpixel_positioning;
-  prefs->hinting = params.hinting;
-  prefs->use_autohinter = params.autohinter;
-  prefs->use_bitmaps = params.use_bitmaps;
-  prefs->subpixel_rendering = params.subpixel_rendering;
+  static const base::NoDestructor<gfx::FontRenderParams> params(
+      gfx::GetFontRenderParams(gfx::FontRenderParamsQuery(), nullptr));
+  prefs->should_antialias_text = params->antialiasing;
+  prefs->use_subpixel_positioning = params->subpixel_positioning;
+  prefs->hinting = params->hinting;
+  prefs->use_autohinter = params->autohinter;
+  prefs->use_bitmaps = params->use_bitmaps;
+  prefs->subpixel_rendering = params->subpixel_rendering;
 #endif
 
   // Save the preferences in C++.
@@ -470,9 +470,9 @@ WebContents::~WebContents() {
     RenderViewDeleted(web_contents()->GetRenderViewHost());
 
     if (type_ == WEB_VIEW) {
+      DCHECK(!web_contents()->GetOuterWebContents())
+          << "Should never manually destroy an attached webview";
       // For webview simply destroy the WebContents immediately.
-      // TODO(zcbenz): Add an internal API for webview instead of using
-      // destroy(), so we don't have to add a special branch here.
       DestroyWebContents(false /* async */);
     } else if (type_ == BROWSER_WINDOW && owner_window()) {
       // For BrowserWindow we should close the window and clean up everything
@@ -617,15 +617,15 @@ void WebContents::UpdateTargetURL(content::WebContents* source,
   Emit("update-target-url", url);
 }
 
-void WebContents::HandleKeyboardEvent(
+bool WebContents::HandleKeyboardEvent(
     content::WebContents* source,
     const content::NativeWebKeyboardEvent& event) {
   if (type_ == WEB_VIEW && embedder_) {
     // Send the unhandled keyboard events back to the embedder.
-    embedder_->HandleKeyboardEvent(source, event);
+    return embedder_->HandleKeyboardEvent(source, event);
   } else {
     // Go to the default keyboard handling.
-    CommonWebContentsDelegate::HandleKeyboardEvent(source, event);
+    return CommonWebContentsDelegate::HandleKeyboardEvent(source, event);
   }
 }
 
@@ -1129,7 +1129,7 @@ void WebContents::NavigationEntryCommitted(
 void WebContents::SetBackgroundThrottling(bool allowed) {
   background_throttling_ = allowed;
 
-  const auto* contents = web_contents();
+  auto* contents = web_contents();
   if (!contents) {
     return;
   }
@@ -1188,8 +1188,9 @@ void WebContents::LoadURL(const GURL& url, const mate::Dictionary& options) {
   if (!options.Get("httpReferrer", &params.referrer)) {
     GURL http_referrer;
     if (options.Get("httpReferrer", &http_referrer))
-      params.referrer = content::Referrer(http_referrer.GetAsReferrer(),
-                                          blink::kWebReferrerPolicyDefault);
+      params.referrer =
+          content::Referrer(http_referrer.GetAsReferrer(),
+                            network::mojom::ReferrerPolicy::kDefault);
   }
 
   std::string user_agent;
@@ -1793,7 +1794,7 @@ void WebContents::StartDrag(const mate::Dictionary& item,
 
   // Start dragging.
   if (!files.empty()) {
-    base::MessageLoop::ScopedNestableTaskAllower allow;
+    base::MessageLoopCurrent::ScopedNestableTaskAllower allow;
     DragFileItems(files, icon->image(), web_contents()->GetNativeView());
   } else {
     args->ThrowError("Must specify either 'file' or 'files' option");
@@ -2149,6 +2150,7 @@ void WebContents::BuildPrototype(v8::Isolate* isolate,
       .SetMethod("startDrag", &WebContents::StartDrag)
       .SetMethod("isGuest", &WebContents::IsGuest)
       .SetMethod("attachToIframe", &WebContents::AttachToIframe)
+      .SetMethod("detachFromOuterFrame", &WebContents::DetachFromOuterFrame)
       .SetMethod("isOffscreen", &WebContents::IsOffScreen)
 #if BUILDFLAG(ENABLE_OSR)
       .SetMethod("startPainting", &WebContents::StartPainting)
@@ -2284,7 +2286,9 @@ void Initialize(v8::Local<v8::Object> exports,
                 void* priv) {
   v8::Isolate* isolate = context->GetIsolate();
   mate::Dictionary dict(isolate, exports);
-  dict.Set("WebContents", WebContents::GetConstructor(isolate)->GetFunction());
+  dict.Set("WebContents", WebContents::GetConstructor(isolate)
+                              ->GetFunction(context)
+                              .ToLocalChecked());
   dict.SetMethod("create", &WebContents::Create);
   dict.SetMethod("fromId", &mate::TrackableObject<WebContents>::FromWeakMapID);
   dict.SetMethod("getAllWebContents",

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

@@ -242,6 +242,7 @@ class WebContents : public mate::TrackableObject<WebContents>,
   bool IsGuest() const;
   void AttachToIframe(content::WebContents* embedder_web_contents,
                       int embedder_frame_id);
+  void DetachFromOuterFrame();
 
   // Methods for offscreen rendering
   bool IsOffScreen() const;
@@ -362,7 +363,7 @@ class WebContents : public mate::TrackableObject<WebContents>,
   void CloseContents(content::WebContents* source) override;
   void ActivateContents(content::WebContents* contents) override;
   void UpdateTargetURL(content::WebContents* source, const GURL& url) override;
-  void HandleKeyboardEvent(
+  bool HandleKeyboardEvent(
       content::WebContents* source,
       const content::NativeWebKeyboardEvent& event) override;
   content::KeyboardEventProcessingResult PreHandleKeyboardEvent(

+ 12 - 1
atom/browser/api/atom_api_web_contents_osr.cc → atom/browser/api/atom_api_web_contents_impl.cc

@@ -4,9 +4,12 @@
 
 #include "atom/browser/api/atom_api_web_contents.h"
 
+#include "content/browser/web_contents/web_contents_impl.h"
+
+#if BUILDFLAG(ENABLE_OSR)
 #include "atom/browser/osr/osr_render_widget_host_view.h"
 #include "atom/browser/osr/osr_web_contents_view.h"
-#include "content/browser/web_contents/web_contents_impl.h"
+#endif
 
 // Including both web_contents_impl.h and node.h would introduce a error, we
 // have to isolate the usage of WebContentsImpl into a clean file to fix it:
@@ -16,6 +19,13 @@ namespace atom {
 
 namespace api {
 
+void WebContents::DetachFromOuterFrame() {
+  // See detach_webview_frame.patch on how to detach.
+  auto* impl = static_cast<content::WebContentsImpl*>(web_contents());
+  impl->GetRenderManagerForTesting()->RemoveOuterDelegateFrame();
+}
+
+#if BUILDFLAG(ENABLE_OSR)
 OffScreenWebContentsView* WebContents::GetOffScreenWebContentsView() const {
   if (IsOffScreen()) {
     const auto* impl =
@@ -35,6 +45,7 @@ OffScreenRenderWidgetHostView* WebContents::GetOffScreenRenderWidgetHostView()
     return nullptr;
   }
 }
+#endif
 
 }  // namespace api
 

+ 1 - 1
atom/browser/api/atom_api_web_contents_mac.mm

@@ -17,7 +17,7 @@ bool WebContents::IsFocused() const {
     return false;
 
   if (GetType() != BACKGROUND_PAGE) {
-    auto window = [web_contents()->GetNativeView() window];
+    auto window = [web_contents()->GetNativeView().GetNativeNSView() window];
     // On Mac the render widget host view does not lose focus when the window
     // loses focus so check if the top level window is the key window.
     if (window && ![window isKeyWindow])

+ 2 - 1
atom/browser/api/event_emitter.cc

@@ -35,7 +35,8 @@ v8::Local<v8::Object> CreateEventObject(v8::Isolate* isolate) {
   }
 
   return v8::Local<v8::ObjectTemplate>::New(isolate, event_template)
-      ->NewInstance();
+      ->NewInstance(isolate->GetCurrentContext())
+      .ToLocalChecked();
 }
 
 }  // namespace

+ 23 - 3
atom/browser/atom_browser_client.cc

@@ -95,6 +95,7 @@
 #endif  // BUILDFLAG(OVERRIDE_LOCATION_PROVIDER)
 
 #if BUILDFLAG(ENABLE_TTS)
+#include "chrome/browser/speech/tts_controller_delegate_impl.h"
 #include "chrome/browser/speech/tts_message_filter.h"
 #endif  // BUILDFLAG(ENABLE_TTS)
 
@@ -158,8 +159,6 @@ AtomBrowserClient* AtomBrowserClient::Get() {
 
 // static
 void AtomBrowserClient::SetApplicationLocale(const std::string& locale) {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
-
   if (!BrowserThread::IsThreadInitialized(BrowserThread::IO) ||
       !base::PostTaskWithTraits(
           FROM_HERE, {BrowserThread::IO},
@@ -368,6 +367,14 @@ AtomBrowserClient::CreateSpeechRecognitionManagerDelegate() {
   return new AtomSpeechRecognitionManagerDelegate;
 }
 
+content::TtsControllerDelegate* AtomBrowserClient::GetTtsControllerDelegate() {
+#if BUILDFLAG(ENABLE_TTS)
+  return TtsControllerDelegateImpl::GetInstance();
+#else
+  return nullptr;
+#endif
+}
+
 void AtomBrowserClient::OverrideWebkitPrefs(content::RenderViewHost* host,
                                             content::WebPreferences* prefs) {
   prefs->javascript_enabled = true;
@@ -536,6 +543,17 @@ AtomBrowserClient::CreateQuotaPermissionContext() {
   return new AtomQuotaPermissionContext;
 }
 
+content::GeneratedCodeCacheSettings
+AtomBrowserClient::GetGeneratedCodeCacheSettings(
+    content::BrowserContext* context) {
+  // TODO(deepak1556): Use platform cache directory.
+  base::FilePath cache_path = context->GetPath();
+  // If we pass 0 for size, disk_cache will pick a default size using the
+  // heuristics based on available disk size. These are implemented in
+  // disk_cache::PreferredCacheSize in net/disk_cache/cache_util.cc.
+  return content::GeneratedCodeCacheSettings(true, 0, cache_path);
+}
+
 void AtomBrowserClient::AllowCertificateError(
     content::WebContents* web_contents,
     int cert_error,
@@ -804,7 +822,9 @@ bool AtomBrowserClient::HandleExternalProtocol(
     content::NavigationUIData* navigation_data,
     bool is_main_frame,
     ui::PageTransition page_transition,
-    bool has_user_gesture) {
+    bool has_user_gesture,
+    const std::string& method,
+    const net::HttpRequestHeaders& headers) {
   base::PostTaskWithTraits(
       FROM_HERE, {BrowserThread::UI},
       base::BindOnce(&HandleExternalProtocolInUI, url, web_contents_getter,

+ 6 - 1
atom/browser/atom_browser_client.h

@@ -74,6 +74,7 @@ class AtomBrowserClient : public content::ContentBrowserClient,
       service_manager::mojom::ServiceRequest* service_request) override;
   content::SpeechRecognitionManagerDelegate*
   CreateSpeechRecognitionManagerDelegate() override;
+  content::TtsControllerDelegate* GetTtsControllerDelegate() override;
   void OverrideWebkitPrefs(content::RenderViewHost* render_view_host,
                            content::WebPreferences* prefs) override;
   SiteInstanceForNavigationType ShouldOverrideSiteInstanceForNavigation(
@@ -91,6 +92,8 @@ class AtomBrowserClient : public content::ContentBrowserClient,
   void DidCreatePpapiPlugin(content::BrowserPpapiHost* browser_host) override;
   std::string GetGeolocationApiKey() override;
   content::QuotaPermissionContext* CreateQuotaPermissionContext() override;
+  content::GeneratedCodeCacheSettings GetGeneratedCodeCacheSettings(
+      content::BrowserContext* context) override;
   void AllowCertificateError(
       content::WebContents* web_contents,
       int cert_error,
@@ -165,7 +168,9 @@ class AtomBrowserClient : public content::ContentBrowserClient,
       content::NavigationUIData* navigation_data,
       bool is_main_frame,
       ui::PageTransition page_transition,
-      bool has_user_gesture) override;
+      bool has_user_gesture,
+      const std::string& method,
+      const net::HttpRequestHeaders& headers) override;
 
  private:
   struct ProcessPreferences {

+ 0 - 5
atom/browser/atom_browser_context.cc

@@ -191,11 +191,6 @@ base::FilePath AtomBrowserContext::GetPath() const {
   return path_;
 }
 
-base::FilePath AtomBrowserContext::GetCachePath() const {
-  // TODO(deepak1556): Use platform cache directory.
-  return path_;
-}
-
 bool AtomBrowserContext::IsOffTheRecord() const {
   return in_memory_;
 }

+ 0 - 1
atom/browser/atom_browser_context.h

@@ -60,7 +60,6 @@ class AtomBrowserContext
 
   // content::BrowserContext:
   base::FilePath GetPath() const override;
-  base::FilePath GetCachePath() const override;
   bool IsOffTheRecord() const override;
   content::ResourceContext* GetResourceContext() override;
   std::unique_ptr<content::ZoomLevelDelegate> CreateZoomLevelDelegate(

+ 1 - 28
atom/browser/atom_browser_main_parts.cc

@@ -47,9 +47,7 @@
 #include "services/device/public/mojom/constants.mojom.h"
 #include "services/service_manager/public/cpp/connector.h"
 #include "ui/base/idle/idle.h"
-#include "ui/base/l10n/l10n_util.h"
 #include "ui/base/material_design/material_design_controller.h"
-#include "ui/base/resource/resource_bundle.h"
 #include "ui/base/ui_base_switches.h"
 
 #if defined(USE_AURA)
@@ -73,6 +71,7 @@
 
 #if defined(OS_WIN)
 #include "ui/base/cursor/cursor_loader_win.h"
+#include "ui/base/l10n/l10n_util.h"
 #include "ui/base/l10n/l10n_util_win.h"
 #include "ui/display/win/dpi.h"
 #include "ui/gfx/platform_font_win.h"
@@ -355,9 +354,6 @@ int AtomBrowserMainParts::PreCreateThreads() {
     layout_provider_.reset(new views::LayoutProvider());
 
   // Initialize the app locale.
-  AtomBrowserClient::SetApplicationLocale(
-      l10n_util::GetApplicationLocale(custom_locale_));
-
   fake_browser_process_->SetApplicationLocale(
       AtomBrowserClient::Get()->GetApplicationLocale());
 
@@ -513,29 +509,6 @@ void AtomBrowserMainParts::PreMainMessageLoopStart() {
 #endif
 
 void AtomBrowserMainParts::PreMainMessageLoopStartCommon() {
-  // Initialize ui::ResourceBundle.
-  ui::ResourceBundle::InitSharedInstanceWithLocale(
-      "", nullptr, ui::ResourceBundle::DO_NOT_LOAD_COMMON_RESOURCES);
-  auto* cmd_line = base::CommandLine::ForCurrentProcess();
-  if (cmd_line->HasSwitch(switches::kLang)) {
-    const std::string locale = cmd_line->GetSwitchValueASCII(switches::kLang);
-    const base::FilePath locale_file_path =
-        ui::ResourceBundle::GetSharedInstance().GetLocaleFilePath(locale, true);
-    if (!locale_file_path.empty()) {
-      custom_locale_ = locale;
-#if defined(OS_LINUX)
-      /* When built with USE_GLIB, libcc's GetApplicationLocaleInternal() uses
-       * glib's g_get_language_names(), which keys off of getenv("LC_ALL") */
-      g_setenv("LC_ALL", custom_locale_.c_str(), TRUE);
-#endif
-    }
-  }
-
-#if defined(OS_MACOSX)
-  if (custom_locale_.empty())
-    l10n_util::OverrideLocaleWithCocoaLocale();
-#endif
-  LoadResourceBundle(custom_locale_);
 #if defined(OS_MACOSX)
   InitializeMainNib();
 #endif

+ 0 - 1
atom/browser/atom_browser_main_parts.h

@@ -112,7 +112,6 @@ class AtomBrowserMainParts : public content::BrowserMainParts {
 #endif
 
   std::unique_ptr<views::LayoutProvider> layout_provider_;
-  std::string custom_locale_;
 
   // A fake BrowserProcess object that used to feed the source code from chrome.
   std::unique_ptr<BrowserProcessImpl> fake_browser_process_;

+ 1 - 1
atom/browser/browser_mac.mm

@@ -325,7 +325,7 @@ std::string Browser::DockGetBadgeText() {
 
 void Browser::DockHide() {
   for (auto* const& window : WindowList::GetWindows())
-    [window->GetNativeWindow() setCanHide:NO];
+    [window->GetNativeWindow().GetNativeNSWindow() setCanHide:NO];
 
   ProcessSerialNumber psn = {0, kCurrentProcess};
   TransformProcessType(&psn, kProcessTransformToUIElementApplication);

+ 6 - 1
atom/browser/browser_process_impl.cc

@@ -258,7 +258,7 @@ BrowserProcessImpl::safe_browsing_detection_service() {
   return nullptr;
 }
 
-subresource_filter::ContentRulesetService*
+subresource_filter::RulesetService*
 BrowserProcessImpl::subresource_filter_ruleset_service() {
   return nullptr;
 }
@@ -299,6 +299,11 @@ gcm::GCMDriver* BrowserProcessImpl::gcm_driver() {
   return nullptr;
 }
 
+resource_coordinator::ResourceCoordinatorParts*
+BrowserProcessImpl::resource_coordinator_parts() {
+  return nullptr;
+}
+
 resource_coordinator::TabManager* BrowserProcessImpl::GetTabManager() {
   return nullptr;
 }

+ 4 - 2
atom/browser/browser_process_impl.h

@@ -86,8 +86,8 @@ class BrowserProcessImpl : public BrowserProcess {
   safe_browsing::SafeBrowsingService* safe_browsing_service() override;
   safe_browsing::ClientSideDetectionService* safe_browsing_detection_service()
       override;
-  subresource_filter::ContentRulesetService*
-  subresource_filter_ruleset_service() override;
+  subresource_filter::RulesetService* subresource_filter_ruleset_service()
+      override;
   optimization_guide::OptimizationGuideService* optimization_guide_service()
       override;
   net_log::ChromeNetLog* net_log() override;
@@ -98,6 +98,8 @@ class BrowserProcessImpl : public BrowserProcess {
   WebRtcLogUploader* webrtc_log_uploader() override;
   network_time::NetworkTimeTracker* network_time_tracker() override;
   gcm::GCMDriver* gcm_driver() override;
+  resource_coordinator::ResourceCoordinatorParts* resource_coordinator_parts()
+      override;
   resource_coordinator::TabManager* GetTabManager() override;
   shell_integration::DefaultWebClientState CachedDefaultWebClientState()
       override;

+ 3 - 2
atom/browser/common_web_contents_delegate.cc

@@ -20,6 +20,7 @@
 #include "base/files/file_util.h"
 #include "base/json/json_reader.h"
 #include "base/task/post_task.h"
+#include "base/threading/scoped_blocking_call.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "chrome/browser/ssl/security_state_tab_helper.h"
 #include "chrome/browser/ui/browser_dialogs.h"
@@ -121,14 +122,14 @@ std::unique_ptr<base::DictionaryValue> CreateFileSystemValue(
 }
 
 void WriteToFile(const base::FilePath& path, const std::string& content) {
-  base::AssertBlockingAllowed();
+  base::ScopedBlockingCall scoped_blocking_call(base::BlockingType::WILL_BLOCK);
   DCHECK(!path.empty());
 
   base::WriteFile(path, content.data(), content.size());
 }
 
 void AppendToFile(const base::FilePath& path, const std::string& content) {
-  base::AssertBlockingAllowed();
+  base::ScopedBlockingCall scoped_blocking_call(base::BlockingType::WILL_BLOCK);
   DCHECK(!path.empty());
 
   base::AppendToFile(path, content.data(), content.size());

+ 1 - 1
atom/browser/common_web_contents_delegate.h

@@ -100,7 +100,7 @@ class CommonWebContentsDelegate : public content::WebContentsDelegate,
       content::WebContents* web_contents,
       content::SecurityStyleExplanations* explanations) override;
   bool TakeFocus(content::WebContents* source, bool reverse) override;
-  void HandleKeyboardEvent(
+  bool HandleKeyboardEvent(
       content::WebContents* source,
       const content::NativeWebKeyboardEvent& event) override;
 

+ 13 - 6
atom/browser/common_web_contents_delegate_mac.mm

@@ -17,33 +17,40 @@
 
 namespace atom {
 
-void CommonWebContentsDelegate::HandleKeyboardEvent(
+bool CommonWebContentsDelegate::HandleKeyboardEvent(
     content::WebContents* source,
     const content::NativeWebKeyboardEvent& event) {
   if (event.skip_in_browser ||
       event.GetType() == content::NativeWebKeyboardEvent::kChar)
-    return;
+    return false;
 
   // Escape exits tabbed fullscreen mode.
   if (event.windows_key_code == ui::VKEY_ESCAPE && is_html_fullscreen()) {
     ExitFullscreenModeForTab(source);
-    return;
+    return true;
   }
 
   // Check if the webContents has preferences and to ignore shortcuts
   auto* web_preferences = WebContentsPreferences::From(source);
   if (web_preferences &&
       web_preferences->IsEnabled("ignoreMenuShortcuts", false))
-    return;
+    return false;
 
   // Send the event to the menu before sending it to the window
   if (event.os_event.type == NSKeyDown &&
       [[NSApp mainMenu] performKeyEquivalent:event.os_event])
-    return;
+    return true;
 
   if (event.os_event.window &&
-      [event.os_event.window isKindOfClass:[EventDispatchingWindow class]])
+      [event.os_event.window isKindOfClass:[EventDispatchingWindow class]]) {
     [event.os_event.window redispatchKeyEvent:event.os_event];
+    // FIXME(nornagon): this isn't the right return value; we should implement
+    // devtools windows as Widgets in order to take advantage of the
+    // pre-existing redispatch code in bridged_native_widget.
+    return false;
+  }
+
+  return false;
 }
 
 }  // namespace atom

+ 6 - 3
atom/browser/common_web_contents_delegate_views.cc

@@ -17,25 +17,28 @@
 
 namespace atom {
 
-void CommonWebContentsDelegate::HandleKeyboardEvent(
+bool CommonWebContentsDelegate::HandleKeyboardEvent(
     content::WebContents* source,
     const content::NativeWebKeyboardEvent& event) {
   // Escape exits tabbed fullscreen mode.
   if (event.windows_key_code == ui::VKEY_ESCAPE && is_html_fullscreen()) {
     ExitFullscreenModeForTab(source);
-    return;
+    return true;
   }
 
   // Check if the webContents has preferences and to ignore shortcuts
   auto* web_preferences = WebContentsPreferences::From(source);
   if (web_preferences &&
       web_preferences->IsEnabled("ignoreMenuShortcuts", false))
-    return;
+    return false;
 
   // Let the NativeWindow handle other parts.
   if (owner_window()) {
     owner_window()->HandleKeyboardEvent(source, event);
+    return true;
   }
+
+  return false;
 }
 
 void CommonWebContentsDelegate::ShowAutofillPopup(

+ 21 - 0
atom/browser/mac/atom_application.mm

@@ -8,8 +8,11 @@
 #import "atom/browser/mac/atom_application_delegate.h"
 #include "atom/browser/mac/dict_util.h"
 #include "base/auto_reset.h"
+#include "base/observer_list.h"
 #include "base/strings/sys_string_conversions.h"
 #include "content/public/browser/browser_accessibility_state.h"
+#include "content/public/browser/native_event_processor_mac.h"
+#include "content/public/browser/native_event_processor_observer_mac.h"
 
 namespace {
 
@@ -22,6 +25,12 @@ inline void dispatch_sync_main(dispatch_block_t block) {
 
 }  // namespace
 
+@interface AtomApplication () <NativeEventProcessor> {
+  base::ObserverList<content::NativeEventProcessorObserver>::Unchecked
+      observers_;
+}
+@end
+
 @implementation AtomApplication
 
 + (AtomApplication*)sharedApplication {
@@ -48,6 +57,8 @@ inline void dispatch_sync_main(dispatch_block_t block) {
 
 - (void)sendEvent:(NSEvent*)event {
   base::AutoReset<BOOL> scoper(&handlingSendEvent_, YES);
+  content::ScopedNotifyNativeEventProcessorObserver scopedObserverNotifier(
+      &observers_, event);
   [super sendEvent:event];
 }
 
@@ -188,4 +199,14 @@ inline void dispatch_sync_main(dispatch_block_t block) {
   atom::Browser::Get()->ShowAboutPanel();
 }
 
+- (void)addNativeEventProcessorObserver:
+    (content::NativeEventProcessorObserver*)observer {
+  observers_.AddObserver(observer);
+}
+
+- (void)removeNativeEventProcessorObserver:
+    (content::NativeEventProcessorObserver*)observer {
+  observers_.RemoveObserver(observer);
+}
+
 @end

+ 11 - 6
atom/browser/native_browser_view_mac.mm

@@ -160,7 +160,8 @@ namespace atom {
 NativeBrowserViewMac::NativeBrowserViewMac(
     InspectableWebContents* inspectable_web_contents)
     : NativeBrowserView(inspectable_web_contents) {
-  auto* view = GetInspectableWebContentsView()->GetNativeView();
+  auto* view =
+      GetInspectableWebContentsView()->GetNativeView().GetNativeNSView();
   view.autoresizingMask = kDefaultAutoResizingMask;
 }
 
@@ -175,12 +176,14 @@ void NativeBrowserViewMac::SetAutoResizeFlags(uint8_t flags) {
     autoresizing_mask |= NSViewHeightSizable;
   }
 
-  auto* view = GetInspectableWebContentsView()->GetNativeView();
+  auto* view =
+      GetInspectableWebContentsView()->GetNativeView().GetNativeNSView();
   view.autoresizingMask = autoresizing_mask;
 }
 
 void NativeBrowserViewMac::SetBounds(const gfx::Rect& bounds) {
-  auto* view = GetInspectableWebContentsView()->GetNativeView();
+  auto* view =
+      GetInspectableWebContentsView()->GetNativeView().GetNativeNSView();
   auto* superview = view.superview;
   const auto superview_height = superview ? superview.frame.size.height : 0;
   view.frame =
@@ -189,15 +192,17 @@ void NativeBrowserViewMac::SetBounds(const gfx::Rect& bounds) {
 }
 
 void NativeBrowserViewMac::SetBackgroundColor(SkColor color) {
-  auto* view = GetInspectableWebContentsView()->GetNativeView();
+  auto* view =
+      GetInspectableWebContentsView()->GetNativeView().GetNativeNSView();
   view.wantsLayer = YES;
   view.layer.backgroundColor = skia::CGColorCreateFromSkColor(color);
 }
 
 void NativeBrowserViewMac::UpdateDraggableRegions(
     const std::vector<gfx::Rect>& drag_exclude_rects) {
-  NSView* web_view = GetWebContents()->GetNativeView();
-  NSView* inspectable_view = GetInspectableWebContentsView()->GetNativeView();
+  NSView* web_view = GetWebContents()->GetNativeView().GetNativeNSView();
+  NSView* inspectable_view =
+      GetInspectableWebContentsView()->GetNativeView().GetNativeNSView();
   NSView* window_content_view = inspectable_view.superview;
   const auto window_content_view_height = NSHeight(window_content_view.bounds);
 

+ 21 - 13
atom/browser/native_window_mac.mm

@@ -347,7 +347,8 @@ NativeWindowMac::NativeWindowMac(const mate::Dictionary& options,
   params.type = views::Widget::InitParams::TYPE_WINDOW;
   params.native_widget = new AtomNativeWidgetMac(this, styleMask, widget());
   widget()->Init(params);
-  window_ = static_cast<AtomNSWindow*>(widget()->GetNativeWindow());
+  window_ = static_cast<AtomNSWindow*>(
+      widget()->GetNativeWindow().GetNativeNSWindow());
 
   [window_ setEnableLargerThanScreen:enable_larger_than_screen()];
 
@@ -497,7 +498,7 @@ void NativeWindowMac::SetContentView(views::View* view) {
 void NativeWindowMac::Close() {
   // When this is a sheet showing, performClose won't work.
   if (is_modal() && parent() && IsVisible()) {
-    [parent()->GetNativeWindow() endSheet:window_];
+    [parent()->GetNativeWindow().GetNativeNSWindow() endSheet:window_];
     CloseImmediately();
     return;
   }
@@ -545,9 +546,10 @@ bool NativeWindowMac::IsFocused() {
 void NativeWindowMac::Show() {
   if (is_modal() && parent()) {
     if ([window_ sheetParent] == nil)
-      [parent()->GetNativeWindow() beginSheet:window_
-                            completionHandler:^(NSModalResponse){
-                            }];
+      [parent()->GetNativeWindow().GetNativeNSWindow()
+                 beginSheet:window_
+          completionHandler:^(NSModalResponse){
+          }];
     return;
   }
 
@@ -573,7 +575,7 @@ void NativeWindowMac::ShowInactive() {
 void NativeWindowMac::Hide() {
   if (is_modal() && parent()) {
     [window_ orderOut:nil];
-    [parent()->GetNativeWindow() endSheet:window_];
+    [parent()->GetNativeWindow().GetNativeNSWindow() endSheet:window_];
     return;
   }
 
@@ -897,7 +899,7 @@ void NativeWindowMac::FlashFrame(bool flash) {
 void NativeWindowMac::SetSkipTaskbar(bool skip) {}
 
 void NativeWindowMac::SetSimpleFullScreen(bool simple_fullscreen) {
-  NSWindow* window = GetNativeWindow();
+  NSWindow* window = GetNativeWindow().GetNativeNSWindow();
 
   if (simple_fullscreen && !is_simple_fullscreen_) {
     is_simple_fullscreen_ = true;
@@ -1079,7 +1081,8 @@ void NativeWindowMac::AddBrowserView(NativeBrowserView* view) {
   }
 
   add_browser_view(view);
-  auto* native_view = view->GetInspectableWebContentsView()->GetNativeView();
+  auto* native_view =
+      view->GetInspectableWebContentsView()->GetNativeView().GetNativeNSView();
   [[window_ contentView] addSubview:native_view
                          positioned:NSWindowAbove
                          relativeTo:nil];
@@ -1097,7 +1100,8 @@ void NativeWindowMac::RemoveBrowserView(NativeBrowserView* view) {
     return;
   }
 
-  [view->GetInspectableWebContentsView()->GetNativeView() removeFromSuperview];
+  [view->GetInspectableWebContentsView()->GetNativeView().GetNativeNSView()
+          removeFromSuperview];
   remove_browser_view(view);
 
   [CATransaction commit];
@@ -1212,11 +1216,12 @@ void NativeWindowMac::ToggleTabBar() {
 }
 
 bool NativeWindowMac::AddTabbedWindow(NativeWindow* window) {
-  if (window_ == window->GetNativeWindow()) {
+  if (window_ == window->GetNativeWindow().GetNativeNSWindow()) {
     return false;
   } else {
     if (@available(macOS 10.12, *))
-      [window_ addTabbedWindow:window->GetNativeWindow() ordered:NSWindowAbove];
+      [window_ addTabbedWindow:window->GetNativeWindow().GetNativeNSWindow()
+                       ordered:NSWindowAbove];
   }
   return true;
 }
@@ -1441,7 +1446,8 @@ void NativeWindowMac::InternalSetParentWindow(NativeWindow* parent,
   NativeWindow::SetParentWindow(parent);
 
   // Do not remove/add if we are already properly attached.
-  if (attach && parent && [window_ parentWindow] == parent->GetNativeWindow())
+  if (attach && parent &&
+      [window_ parentWindow] == parent->GetNativeWindow().GetNativeNSWindow())
     return;
 
   // Remove current parent window.
@@ -1451,7 +1457,9 @@ void NativeWindowMac::InternalSetParentWindow(NativeWindow* parent,
   // Set new parent window.
   // Note that this method will force the window to become visible.
   if (parent && attach)
-    [parent->GetNativeWindow() addChildWindow:window_ ordered:NSWindowAbove];
+    [parent->GetNativeWindow().GetNativeNSWindow()
+        addChildWindow:window_
+               ordered:NSWindowAbove];
 }
 
 void NativeWindowMac::ShowWindowButton(NSWindowButton button) {

+ 8 - 0
atom/browser/native_window_views.cc

@@ -1216,6 +1216,14 @@ void NativeWindowViews::OnWidgetBoundsChanged(views::Widget* changed_widget,
   }
 }
 
+void NativeWindowViews::OnWidgetDestroying(views::Widget* widget) {
+#if defined(OS_LINUX)
+  aura::Window* window = GetNativeWindow();
+  if (window)
+    window->RemovePreTargetHandler(this);
+#endif
+}
+
 void NativeWindowViews::DeleteDelegate() {
   if (is_modal() && this->parent()) {
     auto* parent = this->parent();

+ 1 - 0
atom/browser/native_window_views.h

@@ -161,6 +161,7 @@ class NativeWindowViews : public NativeWindow,
   void AutoresizeBrowserView(int width_delta,
                              int height_delta,
                              NativeBrowserView* browser_view);
+  void OnWidgetDestroying(views::Widget* widget) override;
   // views::WidgetDelegate:
   void DeleteDelegate() override;
   views::View* GetInitiallyFocusedView() override;

+ 1 - 5
atom/browser/net/atom_network_delegate.cc

@@ -419,16 +419,12 @@ bool AtomNetworkDelegate::OnCanAccessFile(
   return true;
 }
 
-bool AtomNetworkDelegate::OnCanEnablePrivacyMode(
+bool AtomNetworkDelegate::OnForcePrivacyMode(
     const GURL& url,
     const GURL& first_party_for_cookies) const {
   return false;
 }
 
-bool AtomNetworkDelegate::OnAreExperimentalCookieFeaturesEnabled() const {
-  return true;
-}
-
 bool AtomNetworkDelegate::OnCancelURLRequestWithPolicyViolatingReferrerHeader(
     const net::URLRequest& request,
     const GURL& target_url,

+ 2 - 4
atom/browser/net/atom_network_delegate.h

@@ -127,10 +127,8 @@ class AtomNetworkDelegate : public net::NetworkDelegate {
   bool OnCanAccessFile(const net::URLRequest& request,
                        const base::FilePath& original_path,
                        const base::FilePath& absolute_path) const override;
-  bool OnCanEnablePrivacyMode(
-      const GURL& url,
-      const GURL& first_party_for_cookies) const override;
-  bool OnAreExperimentalCookieFeaturesEnabled() const override;
+  bool OnForcePrivacyMode(const GURL& url,
+                          const GURL& first_party_for_cookies) const override;
   bool OnCancelURLRequestWithPolicyViolatingReferrerHeader(
       const net::URLRequest& request,
       const GURL& target_url,

+ 0 - 10
atom/browser/net/url_request_context_getter.cc

@@ -107,15 +107,7 @@ class ResourceContext : public content::ResourceContext {
   ResourceContext() = default;
   ~ResourceContext() override = default;
 
-  net::URLRequestContext* GetRequestContext() override {
-    return request_context_;
-  }
-
  private:
-  friend class URLRequestContextGetter;
-
-  net::URLRequestContext* request_context_ = nullptr;
-
   DISALLOW_COPY_AND_ASSIGN(ResourceContext);
 };
 
@@ -332,8 +324,6 @@ net::URLRequestContext* URLRequestContextGetter::GetURLRequestContext() {
     }
     top_job_factory_->Chain(std::move(inner_job_factory));
     url_request_context_->set_job_factory(top_job_factory_.get());
-
-    context_handle_->resource_context_->request_context_ = url_request_context_;
   }
 
   return url_request_context_;

+ 3 - 1
atom/browser/ui/certificate_trust_mac.mm

@@ -92,7 +92,9 @@ void ShowCertificateTrust(atom::NativeWindow* parent_window,
   SecTrustRef trust = nullptr;
   SecTrustCreateWithCertificates(cert_chain, sec_policy, &trust);
 
-  NSWindow* window = parent_window ? parent_window->GetNativeWindow() : nil;
+  NSWindow* window = parent_window
+                         ? parent_window->GetNativeWindow().GetNativeNSWindow()
+                         : nil;
   auto msg = base::SysUTF8ToNSString(message);
 
   auto panel = [[SFCertificateTrustPanel alloc] init];

+ 5 - 5
atom/browser/ui/cocoa/atom_inspectable_web_contents_view.mm

@@ -43,7 +43,7 @@
   } else {
     auto* contents = inspectableWebContentsView_->inspectable_web_contents()
                          ->GetWebContents();
-    auto contentsView = contents->GetNativeView();
+    auto* contentsView = contents->GetNativeView().GetNativeNSView();
     [contentsView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
     [self addSubview:contentsView];
   }
@@ -79,7 +79,7 @@
       inspectableWebContentsView_->inspectable_web_contents();
   auto* devToolsWebContents =
       inspectable_web_contents->GetDevToolsWebContents();
-  auto devToolsView = devToolsWebContents->GetNativeView();
+  auto* devToolsView = devToolsWebContents->GetNativeView().GetNativeNSView();
 
   devtools_visible_ = visible;
   if (devtools_docked_) {
@@ -134,7 +134,7 @@
         inspectableWebContentsView_->inspectable_web_contents();
     auto* devToolsWebContents =
         inspectable_web_contents->GetDevToolsWebContents();
-    auto devToolsView = devToolsWebContents->GetNativeView();
+    auto devToolsView = devToolsWebContents->GetNativeView().GetNativeNSView();
 
     auto styleMask = NSWindowStyleMaskTitled | NSWindowStyleMaskClosable |
                      NSMiniaturizableWindowMask | NSWindowStyleMaskResizable |
@@ -203,7 +203,7 @@
   if (!inspectable_web_contents || inspectable_web_contents->IsGuest())
     return;
   auto* webContents = inspectable_web_contents->GetWebContents();
-  auto webContentsView = webContents->GetNativeView();
+  auto* webContentsView = webContents->GetNativeView().GetNativeNSView();
 
   NSView* view = [notification object];
   if ([[webContentsView subviews] containsObject:view]) {
@@ -215,7 +215,7 @@
       inspectable_web_contents->GetDevToolsWebContents();
   if (!devToolsWebContents)
     return;
-  auto devToolsView = devToolsWebContents->GetNativeView();
+  auto devToolsView = devToolsWebContents->GetNativeView().GetNativeNSView();
 
   if ([[devToolsView subviews] containsObject:view]) {
     devtools_is_first_responder_ = YES;

+ 1 - 1
atom/browser/ui/cocoa/atom_native_widget_mac.h

@@ -21,7 +21,7 @@ class AtomNativeWidgetMac : public views::NativeWidgetMac {
  protected:
   // NativeWidgetMac:
   NativeWidgetMacNSWindow* CreateNSWindow(
-      const views::Widget::InitParams& params) override;
+      const views_bridge_mac::mojom::CreateWindowParams* params) override;
 
  private:
   NativeWindowMac* shell_;

+ 1 - 1
atom/browser/ui/cocoa/atom_native_widget_mac.mm

@@ -19,7 +19,7 @@ AtomNativeWidgetMac::AtomNativeWidgetMac(
 AtomNativeWidgetMac::~AtomNativeWidgetMac() {}
 
 NativeWidgetMacNSWindow* AtomNativeWidgetMac::CreateNSWindow(
-    const views::Widget::InitParams& params) {
+    const views_bridge_mac::mojom::CreateWindowParams* params) {
   return [[[AtomNSWindow alloc] initWithShell:shell_ styleMask:style_mask_]
       autorelease];
 }

+ 11 - 8
atom/browser/ui/cocoa/atom_ns_window_delegate.mm

@@ -9,6 +9,7 @@
 #include "atom/browser/ui/cocoa/atom_preview_item.h"
 #include "atom/browser/ui/cocoa/atom_touch_bar.h"
 #include "base/mac/mac_util.h"
+#include "ui/views/cocoa/bridged_native_widget_host_impl.h"
 #include "ui/views/widget/native_widget_mac.h"
 #include "ui/views_bridge_mac/bridged_native_widget_impl.h"
 
@@ -21,12 +22,13 @@
   // on the fly.
   // TODO(zcbenz): Add interface in NativeWidgetMac to allow overriding creating
   // window delegate.
-  auto* bridged_view = views::BridgedNativeWidgetImpl::GetFromNativeWindow(
+  auto* bridge_host = views::BridgedNativeWidgetHostImpl::GetFromNativeWindow(
       shell->GetNativeWindow());
+  auto* bridged_view = bridge_host->bridge_impl();
   if ((self = [super initWithBridgedNativeWidget:bridged_view])) {
     shell_ = shell;
     is_zooming_ = false;
-    level_ = [shell_->GetNativeWindow() level];
+    level_ = [shell_->GetNativeWindow().GetNativeNSWindow() level];
   }
   return self;
 }
@@ -138,7 +140,7 @@
 }
 
 - (void)windowWillMiniaturize:(NSNotification*)notification {
-  NSWindow* window = shell_->GetNativeWindow();
+  NSWindow* window = shell_->GetNativeWindow().GetNativeNSWindow();
   // store the current status window level to be restored in
   // windowDidDeminiaturize
   level_ = [window level];
@@ -152,7 +154,7 @@
 
 - (void)windowDidDeminiaturize:(NSNotification*)notification {
   [super windowDidDeminiaturize:notification];
-  [shell_->GetNativeWindow() setLevel:level_];
+  [shell_->GetNativeWindow().GetNativeNSWindow() setLevel:level_];
   shell_->NotifyWindowRestore();
 }
 
@@ -179,7 +181,7 @@
   // artifacts.
   if (@available(macOS 10.10, *)) {
     if (shell_->title_bar_style() == atom::NativeWindowMac::HIDDEN_INSET) {
-      NSWindow* window = shell_->GetNativeWindow();
+      NSWindow* window = shell_->GetNativeWindow().GetNativeNSWindow();
       [window setToolbar:nil];
     }
   }
@@ -192,7 +194,7 @@
     // For frameless window we don't show set title for normal mode since the
     // titlebar is expected to be empty, but after entering fullscreen mode we
     // have to set one, because title bar is visible here.
-    NSWindow* window = shell_->GetNativeWindow();
+    NSWindow* window = shell_->GetNativeWindow().GetNativeNSWindow();
     if ((shell_->transparent() || !shell_->has_frame()) &&
         // FIXME(zcbenz): Showing titlebar for hiddenInset window is weird under
         // fullscreen mode.
@@ -221,7 +223,7 @@
 - (void)windowWillExitFullScreen:(NSNotification*)notification {
   if (@available(macOS 10.10, *)) {
     // Restore the titlebar visibility.
-    NSWindow* window = shell_->GetNativeWindow();
+    NSWindow* window = shell_->GetNativeWindow().GetNativeNSWindow();
     if ((shell_->transparent() || !shell_->has_frame()) &&
         (shell_->title_bar_style() != atom::NativeWindowMac::HIDDEN_INSET ||
          shell_->fullscreen_window_title())) {
@@ -247,8 +249,9 @@
   // Clears the delegate when window is going to be closed, since EL Capitan it
   // is possible that the methods of delegate would get called after the window
   // has been closed.
-  auto* bridged_view = views::BridgedNativeWidgetImpl::GetFromNativeWindow(
+  auto* bridge_host = views::BridgedNativeWidgetHostImpl::GetFromNativeWindow(
       shell_->GetNativeWindow());
+  auto* bridged_view = bridge_host->bridge_impl();
   bridged_view->OnWindowWillClose();
 }
 

+ 10 - 9
atom/browser/ui/drag_util_mac.mm

@@ -33,26 +33,27 @@ void DragFileItems(const std::vector<base::FilePath>& files,
 
   // Synthesize a drag event, since we don't have access to the actual event
   // that initiated a drag (possibly consumed by the Web UI, for example).
-  NSPoint position = [[view window] mouseLocationOutsideOfEventStream];
+  NSWindow* window = [view.GetNativeNSView() window];
+  NSPoint position = [window mouseLocationOutsideOfEventStream];
   NSTimeInterval eventTime = [[NSApp currentEvent] timestamp];
   NSEvent* dragEvent = [NSEvent mouseEventWithType:NSLeftMouseDragged
                                           location:position
                                      modifierFlags:NSLeftMouseDraggedMask
                                          timestamp:eventTime
-                                      windowNumber:[[view window] windowNumber]
+                                      windowNumber:[window windowNumber]
                                            context:nil
                                        eventNumber:0
                                         clickCount:1
                                           pressure:1.0];
 
   // Run the drag operation.
-  [[view window] dragImage:icon.ToNSImage()
-                        at:position
-                    offset:NSZeroSize
-                     event:dragEvent
-                pasteboard:pasteboard
-                    source:view
-                 slideBack:YES];
+  [window dragImage:icon.ToNSImage()
+                 at:position
+             offset:NSZeroSize
+              event:dragEvent
+         pasteboard:pasteboard
+             source:view.GetNativeNSView()
+          slideBack:YES];
 }
 
 }  // namespace atom

+ 6 - 3
atom/browser/ui/file_dialog_mac.mm

@@ -210,7 +210,8 @@ int RunModalDialog(NSSavePanel* dialog, const DialogSettings& settings) {
       settings.force_detached) {
     chosen = [dialog runModal];
   } else {
-    NSWindow* window = settings.parent_window->GetNativeWindow();
+    NSWindow* window =
+        settings.parent_window->GetNativeWindow().GetNativeNSWindow();
 
     [dialog beginSheetModalForWindow:window
                    completionHandler:^(NSInteger c) {
@@ -328,7 +329,8 @@ void ShowOpenDialog(const DialogSettings& settings,
       OpenDialogCompletion(chosen, dialog, settings, callback);
     }];
   } else {
-    NSWindow* window = settings.parent_window->GetNativeWindow();
+    NSWindow* window =
+        settings.parent_window->GetNativeWindow().GetNativeNSWindow();
     [dialog beginSheetModalForWindow:window
                    completionHandler:^(NSInteger chosen) {
                      OpenDialogCompletion(chosen, dialog, settings, callback);
@@ -389,7 +391,8 @@ void ShowSaveDialog(const DialogSettings& settings,
       SaveDialogCompletion(chosen, dialog, settings, callback);
     }];
   } else {
-    NSWindow* window = settings.parent_window->GetNativeWindow();
+    NSWindow* window =
+        settings.parent_window->GetNativeWindow().GetNativeNSWindow();
     [dialog beginSheetModalForWindow:window
                    completionHandler:^(NSInteger chosen) {
                      SaveDialogCompletion(chosen, dialog, settings, callback);

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

@@ -779,12 +779,11 @@ bool InspectableWebContentsImpl::ShouldCreateWebContents(
   return false;
 }
 
-void InspectableWebContentsImpl::HandleKeyboardEvent(
+bool InspectableWebContentsImpl::HandleKeyboardEvent(
     content::WebContents* source,
     const content::NativeWebKeyboardEvent& event) {
   auto* delegate = web_contents_->GetDelegate();
-  if (delegate)
-    delegate->HandleKeyboardEvent(source, event);
+  return !delegate || delegate->HandleKeyboardEvent(source, event);
 }
 
 void InspectableWebContentsImpl::CloseContents(content::WebContents* source) {

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

@@ -182,7 +182,7 @@ class InspectableWebContentsImpl
       const GURL& target_url,
       const std::string& partition_id,
       content::SessionStorageNamespace* session_storage_namespace) override;
-  void HandleKeyboardEvent(content::WebContents*,
+  bool HandleKeyboardEvent(content::WebContents*,
                            const content::NativeWebKeyboardEvent&) override;
   void CloseContents(content::WebContents* source) override;
   content::ColorChooser* OpenColorChooser(

+ 4 - 2
atom/browser/ui/message_box_mac.mm

@@ -156,7 +156,7 @@ int ShowMessageBox(NativeWindow* parent_window,
               andAlert:alert
           callEndModal:true];
 
-  NSWindow* window = parent_window->GetNativeWindow();
+  NSWindow* window = parent_window->GetNativeWindow().GetNativeNSWindow();
   [alert beginSheetModalForWindow:window
                     modalDelegate:delegate
                    didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:)
@@ -193,7 +193,9 @@ void ShowMessageBox(NativeWindow* parent_window,
                                                              andAlert:alert
                                                          callEndModal:false];
 
-    NSWindow* window = parent_window ? parent_window->GetNativeWindow() : nil;
+    NSWindow* window =
+        parent_window ? parent_window->GetNativeWindow().GetNativeNSWindow()
+                      : nil;
     [alert
         beginSheetModalForWindow:window
                    modalDelegate:delegate

+ 0 - 3
atom/browser/ui/views/atom_views_delegate.cc

@@ -47,9 +47,6 @@ bool ViewsDelegate::GetSavedWindowPlacement(
   return false;
 }
 
-void ViewsDelegate::NotifyAccessibilityEvent(views::View* view,
-                                             ax::mojom::Event event_type) {}
-
 void ViewsDelegate::NotifyMenuItemFocused(const base::string16& menu_name,
                                           const base::string16& menu_item_name,
                                           int item_index,

+ 0 - 2
atom/browser/ui/views/atom_views_delegate.h

@@ -27,8 +27,6 @@ class ViewsDelegate : public views::ViewsDelegate {
                                const std::string& window_name,
                                gfx::Rect* bounds,
                                ui::WindowShowState* show_state) const override;
-  void NotifyAccessibilityEvent(views::View* view,
-                                ax::mojom::Event event_type) override;
   void NotifyMenuItemFocused(const base::string16& menu_name,
                              const base::string16& menu_item_name,
                              int item_index,

+ 2 - 3
atom/browser/ui/views/submenu_button.cc

@@ -23,8 +23,7 @@ SubmenuButton::SubmenuButton(const base::string16& title,
                              views::MenuButtonListener* menu_button_listener,
                              const SkColor& background_color)
     : views::MenuButton(gfx::RemoveAcceleratorChar(title, '&', NULL, NULL),
-                        menu_button_listener,
-                        false),
+                        menu_button_listener),
       background_color_(background_color) {
 #if defined(OS_LINUX)
   // Dont' use native style border.
@@ -72,7 +71,7 @@ void SubmenuButton::SetUnderlineColor(SkColor color) {
 }
 
 void SubmenuButton::GetAccessibleNodeData(ui::AXNodeData* node_data) {
-  node_data->SetName(accessible_name());
+  node_data->SetName(GetAccessibleName());
   node_data->role = ax::mojom::Role::kPopUpButton;
 }
 

+ 27 - 0
atom/browser/web_contents_preferences.cc

@@ -73,6 +73,29 @@ bool GetAsInteger(const base::Value* val,
   return false;
 }
 
+bool GetAsAutoplayPolicy(const base::Value* val,
+                         const base::StringPiece& path,
+                         content::AutoplayPolicy* out) {
+  std::string policy_str;
+  if (GetAsString(val, path, &policy_str)) {
+    if (policy_str == "no-user-gesture-required") {
+      *out = content::AutoplayPolicy::kNoUserGestureRequired;
+      return true;
+    } else if (policy_str == "user-gesture-required") {
+      *out = content::AutoplayPolicy::kUserGestureRequired;
+      return true;
+    } else if (policy_str == "user-gesture-required-for-cross-origin") {
+      *out = content::AutoplayPolicy::kUserGestureRequiredForCrossOrigin;
+      return true;
+    } else if (policy_str == "document-user-activation-required") {
+      *out = content::AutoplayPolicy::kDocumentUserActivationRequired;
+      return true;
+    }
+    return false;
+  }
+  return false;
+}
+
 }  // namespace
 
 namespace atom {
@@ -364,6 +387,10 @@ void WebContentsPreferences::OverrideWebkitPrefs(
       IsEnabled("textAreasAreResizable", true /* default_value */);
   prefs->navigate_on_drag_drop =
       IsEnabled("navigateOnDragDrop", false /* default_value */);
+  if (!GetAsAutoplayPolicy(&preference_, "autoplayPolicy",
+                           &prefs->autoplay_policy)) {
+    prefs->autoplay_policy = content::AutoplayPolicy::kNoUserGestureRequired;
+  }
 
   // Check if webgl should be enabled.
   bool is_webgl_enabled = IsEnabled("webgl", true /* default_value */);

+ 2 - 2
atom/browser/web_dialog_helper.cc

@@ -105,7 +105,7 @@ class FileSelectHelper : public base::RefCounted<FileSelectHelper>,
 
   void OnFilesSelected(std::vector<FileChooserFileInfoPtr> file_info) {
     if (listener_) {
-      listener_->FileSelected(std::move(file_info), mode_);
+      listener_->FileSelected(std::move(file_info), base::FilePath(), mode_);
       listener_.reset();
     }
     render_frame_host_ = nullptr;
@@ -265,7 +265,7 @@ void WebDialogHelper::EnumerateDirectory(
         blink::mojom::NativeFileInfo::New(path, base::string16())));
   }
 
-  listener->FileSelected(std::move(file_info),
+  listener->FileSelected(std::move(file_info), dir,
                          FileChooserParams::Mode::kUploadFolder);
 }
 

+ 4 - 2
atom/browser/web_view_guest_delegate.cc

@@ -38,11 +38,13 @@ void WebViewGuestDelegate::AttachToIframe(
   DCHECK_EQ(embedder_web_contents_,
             content::WebContents::FromRenderFrameHost(embedder_frame));
 
+  content::WebContents* guest_web_contents = api_web_contents_->web_contents();
   // Attach this inner WebContents |guest_web_contents| to the outer
   // WebContents |embedder_web_contents|. The outer WebContents's
   // frame |embedder_frame| hosts the inner WebContents.
-  api_web_contents_->web_contents()->AttachToOuterWebContentsFrame(
-      embedder_web_contents_, embedder_frame);
+  guest_web_contents->AttachToOuterWebContentsFrame(
+      base::WrapUnique<content::WebContents>(guest_web_contents),
+      embedder_frame);
 
   ResetZoomController();
 

+ 1 - 1
atom/common/api/atom_api_native_image_mac.mm

@@ -52,7 +52,7 @@ mate::Handle<NativeImage> NativeImage::CreateFromNamedImage(
       png_data = bufferFromNSImage(
           gfx::Image(gfx::ImageSkiaOperations::CreateHSLShiftedImage(
                          gfx_image.AsImageSkia(), shift))
-              .CopyNSImage());
+              .AsNSImage());
     }
 
     return CreateFromPNG(args->isolate(), (char*)[png_data bytes],

+ 3 - 3
atom/common/api/atom_bindings.cc

@@ -19,10 +19,10 @@
 #include "atom/common/native_mate_converters/string16_converter.h"
 #include "atom/common/promise_util.h"
 #include "base/logging.h"
+#include "base/process/process.h"
 #include "base/process/process_handle.h"
-#include "base/process/process_info.h"
 #include "base/process/process_metrics_iocounters.h"
-#include "base/sys_info.h"
+#include "base/system/sys_info.h"
 #include "base/threading/thread_restrictions.h"
 #include "chrome/common/chrome_version.h"
 #include "native_mate/dictionary.h"
@@ -189,7 +189,7 @@ v8::Local<v8::Value> AtomBindings::GetHeapStatistics(v8::Isolate* isolate) {
 
 // static
 v8::Local<v8::Value> AtomBindings::GetCreationTime(v8::Isolate* isolate) {
-  auto timeValue = base::CurrentProcessInfo::CreationTime();
+  auto timeValue = base::Process::Current().CreationTime();
   if (timeValue.is_null()) {
     return v8::Null(isolate);
   }

+ 1 - 1
atom/common/api/constructor.h

@@ -25,7 +25,7 @@ v8::Local<v8::Function> CreateConstructor(v8::Isolate* isolate,
       isolate, base::Bind(&mate::internal::InvokeNew<Sig>, func));
   templ->InstanceTemplate()->SetInternalFieldCount(1);
   T::BuildPrototype(isolate, templ);
-  return templ->GetFunction();
+  return templ->GetFunction(isolate->GetCurrentContext()).ToLocalChecked();
 }
 
 }  // namespace mate

+ 2 - 8
atom/common/common_message_generator.cc

@@ -9,13 +9,7 @@
 // Generate constructors.
 #include "ipc/struct_constructor_macros.h"
 
-// must go after struct_contructor_macros
-#include "atom/common/common_message_generator.h"
-
-// Generate destructors.
-#include "ipc/struct_destructor_macros.h"
-
-// must go after struct_destructor_macros
+// lint: must come after struct_constructor_macros.
 #include "atom/common/common_message_generator.h"
 
 // Generate param traits write methods.
@@ -34,4 +28,4 @@ namespace IPC {
 #include "ipc/param_traits_log_macros.h"
 namespace IPC {
 #include "atom/common/common_message_generator.h"
-}  // namespace IPC
+}  // namespace IPC

+ 22 - 21
atom/common/native_mate_converters/blink_converter.cc

@@ -473,25 +473,26 @@ v8::Local<v8::Value> Converter<blink::WebCache::ResourceTypeStats>::ToV8(
 }
 
 // static
-v8::Local<v8::Value> Converter<blink::WebReferrerPolicy>::ToV8(
+v8::Local<v8::Value> Converter<network::mojom::ReferrerPolicy>::ToV8(
     v8::Isolate* isolate,
-    const blink::WebReferrerPolicy& in) {
+    const network::mojom::ReferrerPolicy& in) {
   switch (in) {
-    case blink::kWebReferrerPolicyDefault:
+    case network::mojom::ReferrerPolicy::kDefault:
       return mate::StringToV8(isolate, "default");
-    case blink::kWebReferrerPolicyAlways:
+    case network::mojom::ReferrerPolicy::kAlways:
       return mate::StringToV8(isolate, "unsafe-url");
-    case blink::kWebReferrerPolicyNoReferrerWhenDowngrade:
+    case network::mojom::ReferrerPolicy::kNoReferrerWhenDowngrade:
       return mate::StringToV8(isolate, "no-referrer-when-downgrade");
-    case blink::kWebReferrerPolicyNever:
+    case network::mojom::ReferrerPolicy::kNever:
       return mate::StringToV8(isolate, "no-referrer");
-    case blink::kWebReferrerPolicyOrigin:
+    case network::mojom::ReferrerPolicy::kOrigin:
       return mate::StringToV8(isolate, "origin");
-    case blink::kWebReferrerPolicyNoReferrerWhenDowngradeOriginWhenCrossOrigin:
+    case network::mojom::ReferrerPolicy::
+        kNoReferrerWhenDowngradeOriginWhenCrossOrigin:
       return mate::StringToV8(isolate, "strict-origin-when-cross-origin");
-    case blink::kWebReferrerPolicySameOrigin:
+    case network::mojom::ReferrerPolicy::kSameOrigin:
       return mate::StringToV8(isolate, "same-origin");
-    case blink::kWebReferrerPolicyStrictOrigin:
+    case network::mojom::ReferrerPolicy::kStrictOrigin:
       return mate::StringToV8(isolate, "strict-origin");
     default:
       return mate::StringToV8(isolate, "no-referrer");
@@ -499,28 +500,28 @@ v8::Local<v8::Value> Converter<blink::WebReferrerPolicy>::ToV8(
 }
 
 // static
-bool Converter<blink::WebReferrerPolicy>::FromV8(
+bool Converter<network::mojom::ReferrerPolicy>::FromV8(
     v8::Isolate* isolate,
     v8::Handle<v8::Value> val,
-    blink::WebReferrerPolicy* out) {
+    network::mojom::ReferrerPolicy* out) {
   std::string policy = base::ToLowerASCII(gin::V8ToString(isolate, val));
   if (policy == "default")
-    *out = blink::kWebReferrerPolicyDefault;
+    *out = network::mojom::ReferrerPolicy::kDefault;
   else if (policy == "unsafe-url")
-    *out = blink::kWebReferrerPolicyAlways;
+    *out = network::mojom::ReferrerPolicy::kAlways;
   else if (policy == "no-referrer-when-downgrade")
-    *out = blink::kWebReferrerPolicyNoReferrerWhenDowngrade;
+    *out = network::mojom::ReferrerPolicy::kNoReferrerWhenDowngrade;
   else if (policy == "no-referrer")
-    *out = blink::kWebReferrerPolicyNever;
+    *out = network::mojom::ReferrerPolicy::kNever;
   else if (policy == "origin")
-    *out = blink::kWebReferrerPolicyOrigin;
+    *out = network::mojom::ReferrerPolicy::kOrigin;
   else if (policy == "strict-origin-when-cross-origin")
-    *out =
-        blink::kWebReferrerPolicyNoReferrerWhenDowngradeOriginWhenCrossOrigin;
+    *out = network::mojom::ReferrerPolicy::
+        kNoReferrerWhenDowngradeOriginWhenCrossOrigin;
   else if (policy == "same-origin")
-    *out = blink::kWebReferrerPolicySameOrigin;
+    *out = network::mojom::ReferrerPolicy::kSameOrigin;
   else if (policy == "strict-origin")
-    *out = blink::kWebReferrerPolicyStrictOrigin;
+    *out = network::mojom::ReferrerPolicy::kStrictOrigin;
   else
     return false;
   return true;

+ 3 - 3
atom/common/native_mate_converters/blink_converter.h

@@ -123,12 +123,12 @@ struct Converter<blink::WebCache::ResourceTypeStats> {
 };
 
 template <>
-struct Converter<blink::WebReferrerPolicy> {
+struct Converter<network::mojom::ReferrerPolicy> {
   static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
-                                   const blink::WebReferrerPolicy& in);
+                                   const network::mojom::ReferrerPolicy& in);
   static bool FromV8(v8::Isolate* isolate,
                      v8::Local<v8::Value> val,
-                     blink::WebReferrerPolicy* out);
+                     network::mojom::ReferrerPolicy* out);
 };
 
 v8::Local<v8::Value> EditFlagsToV8(v8::Isolate* isolate, int editFlags);

+ 10 - 6
atom/common/native_mate_converters/callback.cc

@@ -43,16 +43,19 @@ void CallTranslater(v8::Local<v8::External> external,
                     mate::Arguments* args) {
   // Whether the callback should only be called for once.
   v8::Isolate* isolate = args->isolate();
-  bool one_time = state->Has(mate::StringToSymbol(isolate, "oneTime"));
+  auto context = isolate->GetCurrentContext();
+  bool one_time =
+      state->Has(context, mate::StringToSymbol(isolate, "oneTime")).ToChecked();
 
   // Check if the callback has already been called.
   if (one_time) {
     auto called_symbol = mate::StringToSymbol(isolate, "called");
-    if (state->Has(called_symbol)) {
+    if (state->Has(context, called_symbol).ToChecked()) {
       args->ThrowError("callback can only be called for once");
       return;
     } else {
-      state->Set(called_symbol, v8::Boolean::New(isolate, true));
+      state->Set(context, called_symbol, v8::Boolean::New(isolate, true))
+          .ToChecked();
     }
   }
 
@@ -130,9 +133,10 @@ v8::Local<v8::Value> CreateFunctionFromTranslater(v8::Isolate* isolate,
   Dictionary state = mate::Dictionary::CreateEmpty(isolate);
   if (one_time)
     state.Set("oneTime", true);
-  return BindFunctionWith(isolate, isolate->GetCurrentContext(),
-                          call_translater->GetFunction(),
-                          holder->handle.Get(isolate), state.GetHandle());
+  auto context = isolate->GetCurrentContext();
+  return BindFunctionWith(
+      isolate, context, call_translater->GetFunction(context).ToLocalChecked(),
+      holder->handle.Get(isolate), state.GetHandle());
 }
 
 // func.bind(func, arg1).

+ 8 - 3
atom/common/native_mate_converters/callback.h

@@ -55,8 +55,10 @@ struct V8FunctionInvoker<v8::Local<v8::Value>(ArgTypes...)> {
     v8::Local<v8::Context> context = holder->CreationContext();
     v8::Context::Scope context_scope(context);
     std::vector<v8::Local<v8::Value>> args{ConvertToV8(isolate, raw)...};
-    v8::Local<v8::Value> ret(holder->Call(
-        holder, args.size(), args.empty() ? nullptr : &args.front()));
+    v8::Local<v8::Value> ret(holder
+                                 ->Call(context, holder, args.size(),
+                                        args.empty() ? nullptr : &args.front())
+                                 .ToLocalChecked());
     return handle_scope.Escape(ret);
   }
 };
@@ -76,7 +78,10 @@ struct V8FunctionInvoker<void(ArgTypes...)> {
     v8::Local<v8::Context> context = holder->CreationContext();
     v8::Context::Scope context_scope(context);
     std::vector<v8::Local<v8::Value>> args{ConvertToV8(isolate, raw)...};
-    holder->Call(holder, args.size(), args.empty() ? nullptr : &args.front());
+    holder
+        ->Call(context, holder, args.size(),
+               args.empty() ? nullptr : &args.front())
+        .ToLocalChecked();
   }
 };
 

+ 3 - 2
atom/common/native_mate_converters/v8_value_converter.cc

@@ -331,8 +331,9 @@ base::Value* V8ValueConverter::FromV8ValueImpl(FromV8ValueState* state,
     v8::Local<v8::Value> toISOString =
         date->Get(v8::String::NewFromUtf8(isolate, "toISOString"));
     if (toISOString->IsFunction()) {
-      v8::Local<v8::Value> result =
-          toISOString.As<v8::Function>()->Call(val, 0, nullptr);
+      v8::Local<v8::Value> result = toISOString.As<v8::Function>()
+                                        ->Call(context, val, 0, nullptr)
+                                        .ToLocalChecked();
       if (!result.IsEmpty()) {
         v8::String::Utf8Value utf8(isolate,
                                    result->ToString(context).ToLocalChecked());

+ 1 - 1
atom/common/node_bindings_win.cc

@@ -7,7 +7,7 @@
 #include <windows.h>
 
 #include "base/logging.h"
-#include "base/sys_info.h"
+#include "base/system/sys_info.h"
 
 namespace atom {
 

+ 3 - 2
atom/renderer/api/atom_api_spell_check_client.cc

@@ -211,10 +211,11 @@ void SpellCheckClient::SpellCheckWords(
   v8::Local<v8::FunctionTemplate> templ = mate::CreateFunctionTemplate(
       isolate_, base::Bind(&SpellCheckClient::OnSpellCheckDone, AsWeakPtr()));
 
+  auto context = isolate_->GetCurrentContext();
   v8::Local<v8::Value> args[] = {mate::ConvertToV8(isolate_, words),
-                                 templ->GetFunction()};
+                                 templ->GetFunction(context).ToLocalChecked()};
   // Call javascript with the words and the callback function
-  scope.spell_check_->Call(scope.provider_, 2, args);
+  scope.spell_check_->Call(context, scope.provider_, 2, args).ToLocalChecked();
 }
 
 // Returns whether or not the given string is a contraction.

+ 7 - 3
atom/renderer/api/atom_api_web_frame.cc

@@ -222,7 +222,9 @@ int WebFrame::GetWebFrameId(v8::Local<v8::Value> content_window) {
 void WebFrame::SetSpellCheckProvider(mate::Arguments* args,
                                      const std::string& language,
                                      v8::Local<v8::Object> provider) {
-  if (!provider->Has(mate::StringToV8(args->isolate(), "spellCheck"))) {
+  auto context = args->isolate()->GetCurrentContext();
+  if (!provider->Has(context, mate::StringToV8(args->isolate(), "spellCheck"))
+           .ToChecked()) {
     args->ThrowError("\"spellCheck\" has to be defined");
     return;
   }
@@ -282,7 +284,7 @@ void WebFrame::RegisterURLSchemeAsPrivileged(const std::string& scheme,
         privileged_scheme);
   }
   if (corsEnabled) {
-    url::AddCORSEnabledScheme(scheme.c_str());
+    url::AddCorsEnabledScheme(scheme.c_str());
   }
 }
 
@@ -541,7 +543,9 @@ void Initialize(v8::Local<v8::Object> exports,
   v8::Isolate* isolate = context->GetIsolate();
   mate::Dictionary dict(isolate, exports);
   dict.Set("webFrame", WebFrame::Create(isolate));
-  dict.Set("WebFrame", WebFrame::GetConstructor(isolate)->GetFunction());
+  dict.Set(
+      "WebFrame",
+      WebFrame::GetConstructor(isolate)->GetFunction(context).ToLocalChecked());
 }
 
 }  // namespace

+ 0 - 1
atom/renderer/content_settings_observer.cc

@@ -45,7 +45,6 @@ bool ContentSettingsObserver::AllowStorage(bool local) {
 }
 
 bool ContentSettingsObserver::AllowIndexedDB(
-    const blink::WebString& name,
     const blink::WebSecurityOrigin& security_origin) {
   blink::WebFrame* frame = render_frame()->GetWebFrame();
   if (frame->GetSecurityOrigin().IsUnique() ||

+ 1 - 2
atom/renderer/content_settings_observer.h

@@ -22,8 +22,7 @@ class ContentSettingsObserver : public content::RenderFrameObserver,
                      const blink::WebString& display_name,
                      unsigned estimated_size) override;
   bool AllowStorage(bool local) override;
-  bool AllowIndexedDB(const blink::WebString& name,
-                      const blink::WebSecurityOrigin& security_origin) override;
+  bool AllowIndexedDB(const blink::WebSecurityOrigin& security_origin) override;
 
  private:
   // content::RenderFrameObserver implementation.

+ 14 - 6
atom/utility/atom_content_utility_client.cc

@@ -4,7 +4,6 @@
 
 #include "atom/utility/atom_content_utility_client.h"
 
-#include <string>
 #include <utility>
 
 #include "base/command_line.h"
@@ -95,11 +94,6 @@ void AtomContentUtilityClient::RegisterServices(StaticServiceMap* services) {
                     proxy_resolver_info);
 
 #if BUILDFLAG(ENABLE_PRINTING)
-  service_manager::EmbeddedServiceInfo pdf_compositor_info;
-  pdf_compositor_info.factory =
-      base::BindRepeating(&printing::CreatePdfCompositorService, std::string());
-  services->emplace(printing::mojom::kServiceName, pdf_compositor_info);
-
   service_manager::EmbeddedServiceInfo printing_info;
   printing_info.factory =
       base::BindRepeating(&printing::PrintingService::CreateService);
@@ -107,4 +101,18 @@ void AtomContentUtilityClient::RegisterServices(StaticServiceMap* services) {
 #endif
 }
 
+std::unique_ptr<service_manager::Service>
+AtomContentUtilityClient::HandleServiceRequest(
+    const std::string& service_name,
+    service_manager::mojom::ServiceRequest request) {
+#if BUILDFLAG(ENABLE_PRINTING)
+  if (service_name == printing::mojom::kServiceName) {
+    return printing::CreatePdfCompositorService(std::string(),
+                                                std::move(request));
+  }
+#endif
+
+  return nullptr;
+}
+
 }  // namespace atom

+ 5 - 0
atom/utility/atom_content_utility_client.h

@@ -6,6 +6,7 @@
 #define ATOM_UTILITY_ATOM_CONTENT_UTILITY_CLIENT_H_
 
 #include <memory>
+#include <string>
 #include <vector>
 
 #include "base/compiler_specific.h"
@@ -27,6 +28,10 @@ class AtomContentUtilityClient : public content::ContentUtilityClient {
   bool OnMessageReceived(const IPC::Message& message) override;
   void RegisterServices(StaticServiceMap* services) override;
 
+  std::unique_ptr<service_manager::Service> HandleServiceRequest(
+      const std::string& service_name,
+      service_manager::mojom::ServiceRequest request) override;
+
  private:
 #if BUILDFLAG(ENABLE_PRINTING) && defined(OS_WIN)
   std::unique_ptr<printing::PrintingHandler> printing_handler_;

+ 6 - 8
chromium_src/BUILD.gn

@@ -90,6 +90,7 @@ static_library("chrome") {
         "//chrome/browser/ui/views/color_chooser_aura.cc",
         "//chrome/browser/ui/views/color_chooser_aura.h",
       ]
+      deps += [ "//components/feature_engagement" ]
     }
 
     if (is_mac) {
@@ -112,18 +113,15 @@ static_library("chrome") {
 
   if (enable_tts) {
     sources += [
-      "//chrome/browser/speech/tts_controller.h",
-      "//chrome/browser/speech/tts_controller_impl.cc",
-      "//chrome/browser/speech/tts_controller_impl.h",
+      "//chrome/browser/speech/tts_controller_delegate_impl.cc",
+      "//chrome/browser/speech/tts_controller_delegate_impl.h",
       "//chrome/browser/speech/tts_mac.mm",
       "//chrome/browser/speech/tts_message_filter.cc",
       "//chrome/browser/speech/tts_message_filter.h",
-      "//chrome/browser/speech/tts_platform.cc",
-      "//chrome/browser/speech/tts_platform.h",
+      "//chrome/browser/speech/tts_platform.h ",
+      "//chrome/browser/speech/tts_platform_impl.cc",
+      "//chrome/browser/speech/tts_platform_impl.h",
       "//chrome/browser/speech/tts_win.cc",
-      "//chrome/common/tts_messages.h",
-      "//chrome/common/tts_utterance_request.cc",
-      "//chrome/common/tts_utterance_request.h",
       "//chrome/renderer/tts_dispatcher.cc",
       "//chrome/renderer/tts_dispatcher.h",
     ]

+ 5 - 0
docs/api/browser-window.md

@@ -375,6 +375,11 @@ It creates a new `BrowserWindow` with native properties as set by the `options`.
       English and not localized.
     * `navigateOnDragDrop` Boolean (optional) - Whether dragging and dropping a
       file or link onto the page causes a navigation. Default is `false`.
+    * `autoplayPolicy` String (optional) - Autoplay policy to apply to
+      content in the window, can be `no-user-gesture-required`,
+      `user-gesture-required`, `user-gesture-required-for-cross-origin`,
+      `document-user-activation-required`. Defaults to
+      `no-user-gesture-required`.
 
 When setting minimum or maximum window size with `minWidth`/`maxWidth`/
 `minHeight`/`maxHeight`, it only constrains the users. It won't prevent you from

+ 1 - 0
filenames.gni

@@ -177,6 +177,7 @@ filenames = {
     "atom/browser/api/atom_api_view.h",
     "atom/browser/api/atom_api_web_contents.cc",
     "atom/browser/api/atom_api_web_contents.h",
+    "atom/browser/api/atom_api_web_contents_impl.cc",
     "atom/browser/api/atom_api_web_contents_mac.mm",
     "atom/browser/api/atom_api_web_contents_view.cc",
     "atom/browser/api/atom_api_web_contents_view.h",

+ 2 - 2
lib/browser/guest-view-manager.js

@@ -181,7 +181,7 @@ const attachGuest = function (event, embedderFrameId, elementInstanceId, guestIn
 
     const oldGuestInstance = guestInstances[oldGuestInstanceId]
     if (oldGuestInstance) {
-      oldGuestInstance.guest.destroy()
+      oldGuestInstance.guest.detachFromOuterFrame()
     }
   }
 
@@ -361,7 +361,7 @@ handleMessage('ELECTRON_GUEST_VIEW_MANAGER_CREATE_GUEST_SYNC', function (event,
 handleMessage('ELECTRON_GUEST_VIEW_MANAGER_DESTROY_GUEST', function (event, guestInstanceId) {
   try {
     const guest = getGuestForWebContents(guestInstanceId, event.sender)
-    guest.destroy()
+    guest.detachFromOuterFrame()
   } catch (error) {
     console.error(`Guest destroy failed: ${error}`)
   }

+ 3 - 1
native_mate/native_mate/dictionary.h

@@ -106,7 +106,9 @@ class Dictionary {
   bool SetMethod(const base::StringPiece& key, const T& callback) {
     return GetHandle()->Set(
         StringToV8(isolate_, key),
-        CallbackTraits<T>::CreateTemplate(isolate_, callback)->GetFunction());
+        CallbackTraits<T>::CreateTemplate(isolate_, callback)
+            ->GetFunction(isolate_->GetCurrentContext())
+            .ToLocalChecked());
   }
 
   bool Delete(const base::StringPiece& key) {

+ 2 - 1
native_mate/native_mate/wrappable.cc

@@ -39,7 +39,8 @@ void WrappableBase::InitWith(v8::Isolate* isolate,
   // Call object._init if we have one.
   v8::Local<v8::Function> init;
   if (Dictionary(isolate, wrapper).Get("_init", &init))
-    init->Call(wrapper, 0, nullptr);
+    init->Call(isolate->GetCurrentContext(), wrapper, 0, nullptr)
+        .ToLocalChecked();
 
   AfterInit(isolate);
 }

+ 0 - 1
patches/common/boringssl/.patches

@@ -1,3 +1,2 @@
-implement_ssl_get_tlsext_status_type.patch
 add_ec_group_order_bits_for_openssl_compatibility.patch
 add_ec_key_key2buf_for_openssl_compatibility.patch

+ 3 - 3
patches/common/boringssl/add_ec_group_order_bits_for_openssl_compatibility.patch

@@ -9,10 +9,10 @@ Commit-Queue: Adam Langley <[email protected]>
 Reviewed-by: Adam Langley <[email protected]>
 
 diff --git a/crypto/fipsmodule/ec/ec.c b/crypto/fipsmodule/ec/ec.c
-index 908e35e9d04e657c13ba61c8ea5bf4a4519228c5..43e170b9190bf1813216b10863bbaf6402331161 100644
+index bd0662a703d6285df51735c5d4870d21a82b39cf..90b9d71f61f8d6d7ddf838c47a59729748d0d0f2 100644
 --- a/crypto/fipsmodule/ec/ec.c
 +++ b/crypto/fipsmodule/ec/ec.c
-@@ -605,6 +605,10 @@ int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx) {
+@@ -625,6 +625,10 @@ int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx) {
    return 1;
  }
  
@@ -24,7 +24,7 @@ index 908e35e9d04e657c13ba61c8ea5bf4a4519228c5..43e170b9190bf1813216b10863bbaf64
                            BN_CTX *ctx) {
    // All |EC_GROUP|s have cofactor 1.
 diff --git a/include/openssl/ec.h b/include/openssl/ec.h
-index 41a9c34c5ad1bbfdff8e37c1e245ac7fac7a3869..e4195fc15a26e61ef1e74ac7054ddabb256ae9a3 100644
+index 966393ea3b726214aa84a604c8e5a13654dcdf76..c65a1a7519fd80b681d1cf899792ee46aaa8bad6 100644
 --- a/include/openssl/ec.h
 +++ b/include/openssl/ec.h
 @@ -133,6 +133,9 @@ OPENSSL_EXPORT const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group);

+ 1 - 1
patches/common/boringssl/add_ec_key_key2buf_for_openssl_compatibility.patch

@@ -9,7 +9,7 @@ Reviewed-by: Adam Langley <[email protected]>
 Commit-Queue: Adam Langley <[email protected]>
 
 diff --git a/crypto/fipsmodule/ec/ec_key.c b/crypto/fipsmodule/ec/ec_key.c
-index a6d469767adfad1c9095cc58c567b10c71e95cfa..ba69e83cb8f49c70a98c8fd68fd7fa4b122da5cd 100644
+index 632dc9b2d902dfba01567f4c02ad7ad6d0c8c3e8..4bc12a073650f66f5ae8ba2beabb9a6fb2b21878 100644
 --- a/crypto/fipsmodule/ec/ec_key.c
 +++ b/crypto/fipsmodule/ec/ec_key.c
 @@ -394,6 +394,33 @@ err:

+ 0 - 58
patches/common/boringssl/implement_ssl_get_tlsext_status_type.patch

@@ -1,58 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Jeremy Apthorp <[email protected]>
-Date: Thu, 18 Oct 2018 14:18:05 -0700
-Subject: Implement SSL_get_tlsext_status_type
-
-It's used by Node.js[1], and is simple to implement.
-
-[1]: https://github.com/nodejs/node/blob/e2f58c71ddf0f91256cc85e6bb226a068256c5eb/src/node_crypto.cc#L2390
-
-Change-Id: Ie5c76b848623d00f7478aeae0214c25472de523c
-Reviewed-on: https://boringssl-review.googlesource.com/c/32525
-Reviewed-by: David Benjamin <[email protected]>
-Commit-Queue: David Benjamin <[email protected]>
-CQ-Verified: CQ bot account: [email protected] <[email protected]>
-
-diff --git a/include/openssl/ssl.h b/include/openssl/ssl.h
-index c0d44ce2820fb20273b453def0b5bcb5ddcc14e9..f0d9dd45e2c41968a84c8a3f31a8c9e4f621f018 100644
---- a/include/openssl/ssl.h
-+++ b/include/openssl/ssl.h
-@@ -4268,6 +4268,14 @@ OPENSSL_EXPORT int OPENSSL_init_ssl(uint64_t opts,
- // Use |SSL_enable_ocsp_stapling| instead.
- OPENSSL_EXPORT int SSL_set_tlsext_status_type(SSL *ssl, int type);
- 
-+// SSL_get_tlsext_status_type returns |TLSEXT_STATUSTYPE_ocsp| if the client
-+// requested OCSP stapling and |TLSEXT_STATUSTYPE_nothing| otherwise. On the
-+// client, this reflects whether OCSP stapling was enabled via, e.g.,
-+// |SSL_set_tlsext_status_type|. On the server, this is determined during the
-+// handshake. It may be queried in callbacks set by |SSL_CTX_set_cert_cb|. The
-+// result is undefined after the handshake completes.
-+OPENSSL_EXPORT int SSL_get_tlsext_status_type(const SSL *ssl);
-+
- // SSL_set_tlsext_status_ocsp_resp sets the OCSP response. It returns one on
- // success and zero on error. On success, |ssl| takes ownership of |resp|, which
- // must have been allocated by |OPENSSL_malloc|.
-diff --git a/ssl/ssl_lib.cc b/ssl/ssl_lib.cc
-index 9c16de4958ef29d638e05e0f90b9b15b11b15cac..1f648658b8cb6ae7b82132b276b927e8fb11a47a 100644
---- a/ssl/ssl_lib.cc
-+++ b/ssl/ssl_lib.cc
-@@ -2751,6 +2751,19 @@ int SSL_set_tlsext_status_type(SSL *ssl, int type) {
-   return 1;
- }
- 
-+int SSL_get_tlsext_status_type(const SSL *ssl) {
-+  if (ssl->server) {
-+    SSL_HANDSHAKE *hs = ssl->s3->hs.get();
-+    return hs != nullptr && hs->ocsp_stapling_requested
-+        ? TLSEXT_STATUSTYPE_ocsp
-+        : TLSEXT_STATUSTYPE_nothing;
-+  }
-+
-+  return ssl->config != nullptr && ssl->config->ocsp_stapling_enabled
-+             ? TLSEXT_STATUSTYPE_ocsp
-+             : TLSEXT_STATUSTYPE_nothing;
-+}
-+
- int SSL_set_tlsext_status_ocsp_resp(SSL *ssl, uint8_t *resp, size_t resp_len) {
-   if (SSL_set_ocsp_response(ssl, resp, resp_len)) {
-     OPENSSL_free(resp);

+ 2 - 4
patches/common/chromium/.patches

@@ -2,7 +2,6 @@ add_realloc.patch
 build_gn.patch
 dcheck.patch
 accelerator.patch
-app_indicator_icon_menu.patch
 blink_file_path.patch
 blink_local_frame.patch
 blink_world_context.patch
@@ -43,7 +42,6 @@ mas-cgdisplayusesforcetogray.patch
 mas-audiodeviceduck.patch
 mas-lssetapplicationlaunchservicesserverconnectionstatus.patch
 allow_webview_file_url.patch
-windows_cc_wrapper.patch
 enable_osr_components.patch
 ignore_rc_check.patch
 enable_widevine.patch
@@ -66,9 +64,9 @@ tts.patch
 color_chooser.patch
 printing.patch
 verbose_generate_breakpad_symbols.patch
-customizable_app_indicator_id_prefix.patch
 cross_site_document_resource_handler.patch
 content_allow_embedder_to_prevent_locking_scheme_registry.patch
-fix_trackpad_scrolling.patch
 support_mixed_sandbox_with_zygote.patch
 disable_color_correct_rendering.patch
+disable_time_ticks_dcheck.patch
+fix_test_compilation_error.patch

+ 6 - 6
patches/common/chromium/accelerator.patch

@@ -5,7 +5,7 @@ Subject: accelerator.patch
 
 
 diff --git a/ui/base/accelerators/accelerator.cc b/ui/base/accelerators/accelerator.cc
-index d56e87be04cb4d765d0aa0eae1af86a9f562b222..9364ac4b75debc61e201e0da7eaef104acea770d 100644
+index bf214d0b04ea5cf6711cd50618ad843bd054e538..7f245b1e8b9b3c5dc6666be4d74b69c86e80a351 100644
 --- a/ui/base/accelerators/accelerator.cc
 +++ b/ui/base/accelerators/accelerator.cc
 @@ -11,6 +11,7 @@
@@ -16,7 +16,7 @@ index d56e87be04cb4d765d0aa0eae1af86a9f562b222..9364ac4b75debc61e201e0da7eaef104
  #include "base/strings/utf_string_conversions.h"
  #include "build/build_config.h"
  #include "ui/base/l10n/l10n_util.h"
-@@ -21,9 +22,7 @@
+@@ -22,9 +23,7 @@
  #include <windows.h>
  #endif
  
@@ -26,7 +26,7 @@ index d56e87be04cb4d765d0aa0eae1af86a9f562b222..9364ac4b75debc61e201e0da7eaef104
  
  namespace ui {
  
-@@ -147,7 +146,15 @@ base::string16 Accelerator::GetShortcutText() const {
+@@ -148,7 +147,15 @@ base::string16 Accelerator::GetShortcutText() const {
    shortcut = KeyCodeToName(key_code_);
  #endif
  
@@ -42,7 +42,7 @@ index d56e87be04cb4d765d0aa0eae1af86a9f562b222..9364ac4b75debc61e201e0da7eaef104
  #if defined(OS_WIN)
      // Our fallback is to try translate the key code to a regular character
      // unless it is one of digits (VK_0 to VK_9). Some keyboard
-@@ -156,18 +163,14 @@ base::string16 Accelerator::GetShortcutText() const {
+@@ -157,18 +164,14 @@ base::string16 Accelerator::GetShortcutText() const {
      // accent' for '0'). For display in the menu (e.g. Ctrl-0 for the
      // default zoom level), we leave VK_[0-9] alone without translation.
      wchar_t key;
@@ -52,7 +52,7 @@ index d56e87be04cb4d765d0aa0eae1af86a9f562b222..9364ac4b75debc61e201e0da7eaef104
 -    else
 -      key = LOWORD(::MapVirtualKeyW(key_code_, MAPVK_VK_TO_CHAR));
 -    shortcut += key;
--#elif defined(USE_AURA) || defined(OS_MACOSX)
+-#elif defined(USE_AURA) || defined(OS_MACOSX) || defined(OS_ANDROID)
 -    const uint16_t c = DomCodeToUsLayoutCharacter(
 -        UsLayoutKeyboardCodeToDomCode(key_code_), false);
 -    if (c != 0)
@@ -67,7 +67,7 @@ index d56e87be04cb4d765d0aa0eae1af86a9f562b222..9364ac4b75debc61e201e0da7eaef104
    }
  
    // Checking whether the character used for the accelerator is alphanumeric.
-@@ -231,7 +234,7 @@ base::string16 Accelerator::ApplyLongFormModifiers(
+@@ -232,7 +235,7 @@ base::string16 Accelerator::ApplyLongFormModifiers(
    // more information.
    if (IsCtrlDown())
      shortcut = ApplyModifierToAcceleratorString(shortcut, IDS_APP_CTRL_KEY);

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

@@ -39,10 +39,10 @@ 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 5db87633802ccc7efbd6b673505cd5c00deabf6e..235be280c4d9e54bcc2e3f60fc10036ad3b08356 100644
+index 0050eb07bf1f1e8515663dfd14f2a3a1292edd96..96e8702f7e9f2a04a4edbc794d5c45e3e04bf8fb 100644
 --- a/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc
 +++ b/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc
-@@ -660,6 +660,10 @@ class ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
+@@ -662,6 +662,10 @@ class ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
          size, WTF::ArrayBufferContents::kDontInitialize);
    }
  
@@ -54,7 +54,7 @@ index 5db87633802ccc7efbd6b673505cd5c00deabf6e..235be280c4d9e54bcc2e3f60fc10036a
      WTF::ArrayBufferContents::FreeMemory(data);
    }
 diff --git a/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_contents.cc b/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_contents.cc
-index 127d6d39d5b089f3a91edc100be24b046c4da4fe..5ee94712c0fbf0a16eeca7aadd1a5be187bcf49e 100644
+index 5a8dbf109f4f7eb682c23bf24c391b70a7717a0c..e0b33e815f2eb98aa494a8489543acdb873e1597 100644
 --- a/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_contents.cc
 +++ b/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_contents.cc
 @@ -122,6 +122,11 @@ void* ArrayBufferContents::AllocateMemoryOrNull(size_t size,
@@ -70,7 +70,7 @@ index 127d6d39d5b089f3a91edc100be24b046c4da4fe..5ee94712c0fbf0a16eeca7aadd1a5be1
    Partitions::ArrayBufferPartition()->Free(data);
  }
 diff --git a/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_contents.h b/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_contents.h
-index 19ae6eb4a08c3499674f906c53164fa9194e5cf2..2f75c4b46c361f411c41242c406358da974ff7e4 100644
+index 3cc1abe8e48c8e45d1f3ebb98a6a6ea1a4e3fbd9..1e2438cc6da97a89fefc86148bb1037d3c84f765 100644
 --- a/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_contents.h
 +++ b/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_contents.h
 @@ -134,6 +134,7 @@ class WTF_EXPORT ArrayBufferContents {

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

@@ -6,10 +6,10 @@ 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 8f33f39eb1d4bcae2e1d78890ee5e9e2d88b1e75..7645b12dbccf5a714e32c74c437216fdca9ac286 100644
+index 83b81f3e28f5f4f3a9fe3c2146c50a966f7e2ec2..d0f2bde4f6f7bb1a8b6cfc5dc990cb30d4432504 100644
 --- a/content/browser/loader/resource_dispatcher_host_impl.cc
 +++ b/content/browser/loader/resource_dispatcher_host_impl.cc
-@@ -1480,6 +1480,8 @@ void ResourceDispatcherHostImpl::BeginNavigationRequest(
+@@ -1462,6 +1462,8 @@ void ResourceDispatcherHostImpl::BeginNavigationRequest(
        !policy->IsWebSafeScheme(info.common_params.url.scheme()) &&
        !is_external_protocol;
  

+ 0 - 19
patches/common/chromium/app_indicator_icon_menu.patch

@@ -1,19 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Anonymous <[email protected]>
-Date: Thu, 20 Sep 2018 17:44:52 -0700
-Subject: app_indicator_icon_menu.patch
-
-
-diff --git a/chrome/browser/ui/libgtkui/app_indicator_icon_menu.cc b/chrome/browser/ui/libgtkui/app_indicator_icon_menu.cc
-index 40399a35f8d2c70827adec732c898a5be09cf69b..1d3a0da948dca3fef3af53256d23e8ae2bd23bfa 100644
---- a/chrome/browser/ui/libgtkui/app_indicator_icon_menu.cc
-+++ b/chrome/browser/ui/libgtkui/app_indicator_icon_menu.cc
-@@ -116,7 +116,7 @@ void AppIndicatorIconMenu::OnMenuItemActivated(GtkWidget* menu_item) {
-     return;
- 
-   // The menu item can still be activated by hotkeys even if it is disabled.
--  if (menu_model_->IsEnabledAt(id))
-+  if (model->IsEnabledAt(id))
-     ExecuteCommand(model, id);
- }
- 

+ 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 4bc3d11ba0270bb4bba863724688ee5b6bc063d2..4f9accd65348b9c8f23f3e2d160e836c7841420b 100644
+index c0cec745454d8e7ec0730852bb324bcae72ed42e..4550698d31ae2c1a511820ae88ce1d914fe10f7f 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
-@@ -261,7 +261,6 @@ void WorkerClassicScriptLoader::ProcessContentSecurityPolicy(
+@@ -285,7 +285,6 @@ void WorkerClassicScriptLoader::ProcessContentSecurityPolicy(
    // document (which is implemented in WorkerMessagingProxy, and
    // m_contentSecurityPolicy should be left as nullptr to inherit the policy).
    if (!response.Url().ProtocolIs("blob") &&

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

@@ -7,10 +7,10 @@ This is used by editors to obtain the filesystem path from a dragged file. See
 documentation at https://electronjs.org/docs/api/file-object
 
 diff --git a/third_party/blink/renderer/core/fileapi/file.h b/third_party/blink/renderer/core/fileapi/file.h
-index 39831f1902c6ab85a0a4cac61a614931ee050ed6..fddb013aa122049de7142bca624d7d0749b58372 100644
+index 2ca09ab8903d56b466e186203279e865ed4dd058..d522b53111a1c452220a1ca08ffcc7206adaa309 100644
 --- a/third_party/blink/renderer/core/fileapi/file.h
 +++ b/third_party/blink/renderer/core/fileapi/file.h
-@@ -168,6 +168,9 @@ class CORE_EXPORT File final : public Blob {
+@@ -193,6 +193,9 @@ class CORE_EXPORT File final : public Blob {
    }
    const String& name() const { return name_; }
  

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

@@ -11,7 +11,7 @@ In the long term we should investigate why it happened, and take a more
 formal fix. But for now I'm just make this assertion silently pass away.
 
 diff --git a/third_party/blink/renderer/platform/bindings/v8_object_constructor.cc b/third_party/blink/renderer/platform/bindings/v8_object_constructor.cc
-index 87f2176ce897583b6682e8f49d1e4cac1392aacb..ce3d9ce19bff686640be08776a7dc5736e9bd83a 100644
+index e1378ffcd7e061aae635ad25078ee23674542786..6b07828930a9d5691609da394c192b9b5f531b5a 100644
 --- a/third_party/blink/renderer/platform/bindings/v8_object_constructor.cc
 +++ b/third_party/blink/renderer/platform/bindings/v8_object_constructor.cc
 @@ -98,8 +98,10 @@ v8::Local<v8::Function> V8ObjectConstructor::CreateInterfaceObject(
@@ -26,4 +26,4 @@ index 87f2176ce897583b6682e8f49d1e4cac1392aacb..ce3d9ce19bff686640be08776a7dc573
 +      return v8::Local<v8::Function>();
  
      prototype_object = prototype_value.As<v8::Object>();
-     if (prototype_object->InternalFieldCount() ==
+   }

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

@@ -10,7 +10,7 @@ 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 e148eda29606cdf8856c6875dc8e370f29e90f8a..c7289e9c60fc75d0db0d3671d7dd4b428bd80329 100644
+index b43ca24b2595bbd20fb5cfa68a22ebec87acda33..496e5d16d49977cb2107a7101064093be19b1515 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
 @@ -177,11 +177,10 @@ void LocalWindowProxy::Initialize() {
@@ -23,6 +23,6 @@ index e148eda29606cdf8856c6875dc8e370f29e90f8a..c7289e9c60fc75d0db0d3671d7dd4b42
  
 -  InstallConditionalFeatures();
 -
-   if (World().IsMainWorld()) {
-     GetFrame()->Loader().DispatchDidClearWindowObjectInMainWorld();
-   }
+   // This needs to go after everything else since it accesses the window object.
+   InitializeV8ExtrasBinding(script_state_);
+ 

Some files were not shown because too many files changed in this diff