Browse Source

chore: bump chromium to 32e0bab929213da1019992bf31d29 (master) (#19488)

Electron Bot 5 years ago
parent
commit
e959137a4b
100 changed files with 447 additions and 5605 deletions
  1. 2 2
      BUILD.gn
  2. 1 1
      DEPS
  3. 0 32
      filenames.gni
  4. 1 5
      lib/browser/chrome-extension.js
  5. 0 3
      patches/chromium/.patches
  6. 3 3
      patches/chromium/add_contentgpuclient_precreatemessageloop_callback.patch
  7. 2 2
      patches/chromium/add_realloc.patch
  8. 0 20
      patches/chromium/allow_webview_file_url.patch
  9. 2 2
      patches/chromium/blink_initialization_order.patch
  10. 1 1
      patches/chromium/blink_local_frame.patch
  11. 4 4
      patches/chromium/blink_world_context.patch
  12. 1 1
      patches/chromium/build_gn.patch
  13. 1 1
      patches/chromium/build_win_disable_zc_twophase.patch
  14. 14 14
      patches/chromium/can_create_window.patch
  15. 2 2
      patches/chromium/content_browser_main_loop.patch
  16. 0 52
      patches/chromium/cross_site_document_resource_handler.patch
  17. 3 3
      patches/chromium/dcheck.patch
  18. 3 3
      patches/chromium/desktop_media_list.patch
  19. 2 2
      patches/chromium/disable-redraw-lock.patch
  20. 18 18
      patches/chromium/disable_color_correct_rendering.patch
  21. 3 3
      patches/chromium/disable_hidden.patch
  22. 0 26
      patches/chromium/disable_network_services_by_default.patch
  23. 2 2
      patches/chromium/disable_user_gesture_requirement_for_beforeunload_dialogs.patch
  24. 2 2
      patches/chromium/exclude-a-few-test-files-from-build.patch
  25. 39 39
      patches/chromium/feat_offscreen_rendering_with_viz_compositor.patch
  26. 2 2
      patches/chromium/fix_disable_usage_of_setapplicationisdaemon_and.patch
  27. 3 3
      patches/chromium/frame_host_manager.patch
  28. 2 2
      patches/chromium/gritsettings_resource_ids.patch
  29. 3 3
      patches/chromium/mas-lssetapplicationlaunchservicesserverconnectionstatus.patch
  30. 1 1
      patches/chromium/mas_blink_no_private_api.patch
  31. 2 2
      patches/chromium/mas_no_private_api.patch
  32. 1 1
      patches/chromium/network_service_allow_remote_certificate_verification_logic.patch
  33. 1 1
      patches/chromium/no_cache_storage_check.patch
  34. 1 1
      patches/chromium/notification_provenance.patch
  35. 8 8
      patches/chromium/put_back_deleted_colors_for_autofill.patch
  36. 1 1
      patches/chromium/render_widget_host_view_base.patch
  37. 3 3
      patches/chromium/resource_file_conflict.patch
  38. 2 2
      patches/chromium/scroll_bounce_flag.patch
  39. 9 10
      patches/chromium/ssl_security_state_tab_helper.patch
  40. 5 5
      patches/chromium/support_mixed_sandbox_with_zygote.patch
  41. 4 4
      patches/chromium/web_contents.patch
  42. 8 8
      patches/chromium/worker_context_will_destroy.patch
  43. 3 11
      shell/browser/api/atom_api_net.cc
  44. 0 317
      shell/browser/api/atom_api_protocol.cc
  45. 0 198
      shell/browser/api/atom_api_protocol.h
  46. 144 0
      shell/browser/api/atom_api_protocol_ns.cc
  47. 6 0
      shell/browser/api/atom_api_protocol_ns.h
  48. 19 61
      shell/browser/api/atom_api_session.cc
  49. 0 496
      shell/browser/api/atom_api_url_request.cc
  50. 0 213
      shell/browser/api/atom_api_url_request.h
  51. 2 0
      shell/browser/api/atom_api_url_request_ns.cc
  52. 0 149
      shell/browser/api/atom_api_web_request.cc
  53. 0 49
      shell/browser/api/atom_api_web_request.h
  54. 0 119
      shell/browser/api/stream_subscriber.cc
  55. 0 68
      shell/browser/api/stream_subscriber.h
  56. 43 33
      shell/browser/atom_browser_client.cc
  57. 7 3
      shell/browser/atom_browser_client.h
  58. 5 60
      shell/browser/atom_browser_context.cc
  59. 0 11
      shell/browser/atom_browser_context.h
  60. 0 5
      shell/browser/browser_process_impl.cc
  61. 0 2
      shell/browser/browser_process_impl.h
  62. 2 104
      shell/browser/io_thread.cc
  63. 0 29
      shell/browser/loader/layered_resource_handler.cc
  64. 0 44
      shell/browser/loader/layered_resource_handler.h
  65. 1 1
      shell/browser/login_handler.h
  66. 0 25
      shell/browser/net/about_protocol_handler.cc
  67. 0 29
      shell/browser/net/about_protocol_handler.h
  68. 0 34
      shell/browser/net/asar/asar_protocol_handler.cc
  69. 0 37
      shell/browser/net/asar/asar_protocol_handler.h
  70. 40 33
      shell/browser/net/asar/asar_url_loader.cc
  71. 7 3
      shell/browser/net/atom_url_loader_factory.cc
  72. 0 522
      shell/browser/net/atom_url_request.cc
  73. 0 122
      shell/browser/net/atom_url_request.h
  74. 0 22
      shell/browser/net/http_protocol_handler.cc
  75. 0 30
      shell/browser/net/http_protocol_handler.h
  76. 0 1
      shell/browser/net/node_stream_loader.h
  77. 0 5
      shell/browser/net/proxying_url_loader_factory.cc
  78. 0 1
      shell/browser/net/proxying_url_loader_factory.h
  79. 2 2
      shell/browser/net/system_network_context_manager.cc
  80. 0 1
      shell/browser/net/url_pipe_loader.h
  81. 0 37
      shell/browser/net/url_request_about_job.cc
  82. 0 35
      shell/browser/net/url_request_about_job.h
  83. 0 138
      shell/browser/net/url_request_async_asar_job.cc
  84. 0 37
      shell/browser/net/url_request_async_asar_job.h
  85. 0 155
      shell/browser/net/url_request_buffer_job.cc
  86. 0 49
      shell/browser/net/url_request_buffer_job.h
  87. 0 365
      shell/browser/net/url_request_context_getter.cc
  88. 0 114
      shell/browser/net/url_request_context_getter.h
  89. 0 344
      shell/browser/net/url_request_fetch_job.cc
  90. 0 81
      shell/browser/net/url_request_fetch_job.h
  91. 0 258
      shell/browser/net/url_request_stream_job.cc
  92. 0 73
      shell/browser/net/url_request_stream_job.h
  93. 0 117
      shell/browser/net/url_request_string_job.cc
  94. 0 46
      shell/browser/net/url_request_string_job.h
  95. 1 1
      shell/browser/osr/osr_host_display_client.h
  96. 3 4
      shell/browser/ui/devtools_ui.cc
  97. 0 231
      shell/browser/ui/webui/pdf_viewer_handler.cc
  98. 0 61
      shell/browser/ui/webui/pdf_viewer_handler.h
  99. 0 258
      shell/browser/ui/webui/pdf_viewer_ui.cc
  100. 0 61
      shell/browser/ui/webui/pdf_viewer_ui.h

+ 2 - 2
BUILD.gn

@@ -384,7 +384,7 @@ source_set("electron_lib") {
     "//services/device/public/mojom",
     "//services/proxy_resolver:lib",
     "//services/video_capture/public/mojom:constants",
-    "//services/viz/privileged/interfaces/compositing",
+    "//services/viz/privileged/mojom/compositing",
     "//skia",
     "//third_party/blink/public:blink",
     "//third_party/boringssl",
@@ -579,7 +579,7 @@ source_set("electron_lib") {
     ]
     deps += [
       "//components/viz/service",
-      "//services/viz/public/interfaces",
+      "//services/viz/public/mojom",
       "//ui/compositor",
     ]
   }

+ 1 - 1
DEPS

@@ -10,7 +10,7 @@ gclient_gn_args = [
 
 vars = {
   'chromium_version':
-    '9eecb7a9f652bbf84f6437b49c70922b65b38bf3',
+    '0b543daaf04d9b3f4e4f485738a304e742b2ee7d',
   'node_version':
     'v12.6.0',
   'nan_version':

+ 0 - 32
filenames.gni

@@ -75,8 +75,6 @@ filenames = {
     "shell/browser/api/atom_api_power_monitor.h",
     "shell/browser/api/atom_api_power_save_blocker.cc",
     "shell/browser/api/atom_api_power_save_blocker.h",
-    "shell/browser/api/atom_api_protocol.cc",
-    "shell/browser/api/atom_api_protocol.h",
     "shell/browser/api/atom_api_protocol_ns.cc",
     "shell/browser/api/atom_api_protocol_ns.h",
     "shell/browser/api/atom_api_screen.cc",
@@ -91,8 +89,6 @@ filenames = {
     "shell/browser/api/atom_api_top_level_window.h",
     "shell/browser/api/atom_api_tray.cc",
     "shell/browser/api/atom_api_tray.h",
-    "shell/browser/api/atom_api_url_request.cc",
-    "shell/browser/api/atom_api_url_request.h",
     "shell/browser/api/atom_api_url_request_ns.cc",
     "shell/browser/api/atom_api_url_request_ns.h",
     "shell/browser/api/atom_api_view.cc",
@@ -103,8 +99,6 @@ filenames = {
     "shell/browser/api/atom_api_web_contents_mac.mm",
     "shell/browser/api/atom_api_web_contents_view.cc",
     "shell/browser/api/atom_api_web_contents_view.h",
-    "shell/browser/api/atom_api_web_request.cc",
-    "shell/browser/api/atom_api_web_request.h",
     "shell/browser/api/atom_api_web_request_ns.cc",
     "shell/browser/api/atom_api_web_request_ns.h",
     "shell/browser/api/atom_api_web_view_manager.cc",
@@ -116,8 +110,6 @@ filenames = {
     "shell/browser/api/event.h",
     "shell/browser/api/event_emitter.cc",
     "shell/browser/api/event_emitter.h",
-    "shell/browser/api/stream_subscriber.cc",
-    "shell/browser/api/stream_subscriber.h",
     "shell/browser/api/trackable_object.cc",
     "shell/browser/api/trackable_object.h",
     "shell/browser/api/frame_subscriber.cc",
@@ -185,8 +177,6 @@ filenames = {
     "shell/browser/lib/power_observer.h",
     "shell/browser/lib/power_observer_linux.h",
     "shell/browser/lib/power_observer_linux.cc",
-    "shell/browser/loader/layered_resource_handler.cc",
-    "shell/browser/loader/layered_resource_handler.h",
     "shell/browser/login_handler.cc",
     "shell/browser/login_handler.h",
     "shell/browser/mac/atom_application.h",
@@ -223,10 +213,6 @@ filenames = {
     "shell/browser/media/media_device_id_salt.h",
     "shell/browser/media/media_stream_devices_controller.cc",
     "shell/browser/media/media_stream_devices_controller.h",
-    "shell/browser/net/about_protocol_handler.cc",
-    "shell/browser/net/about_protocol_handler.h",
-    "shell/browser/net/asar/asar_protocol_handler.cc",
-    "shell/browser/net/asar/asar_protocol_handler.h",
     "shell/browser/net/asar/asar_url_loader.cc",
     "shell/browser/net/asar/asar_url_loader.h",
     "shell/browser/net/asar/url_request_asar_job.cc",
@@ -237,12 +223,8 @@ filenames = {
     "shell/browser/net/atom_network_delegate.h",
     "shell/browser/net/atom_url_loader_factory.cc",
     "shell/browser/net/atom_url_loader_factory.h",
-    "shell/browser/net/atom_url_request.cc",
-    "shell/browser/net/atom_url_request.h",
     "shell/browser/net/atom_url_request_job_factory.cc",
     "shell/browser/net/atom_url_request_job_factory.h",
-    "shell/browser/net/http_protocol_handler.cc",
-    "shell/browser/net/http_protocol_handler.h",
     "shell/browser/net/proxying_url_loader_factory.cc",
     "shell/browser/net/proxying_url_loader_factory.h",
     "shell/browser/net/js_asker.cc",
@@ -261,20 +243,6 @@ filenames = {
     "shell/browser/net/system_network_context_manager.h",
     "shell/browser/net/url_pipe_loader.cc",
     "shell/browser/net/url_pipe_loader.h",
-    "shell/browser/net/url_request_about_job.cc",
-    "shell/browser/net/url_request_about_job.h",
-    "shell/browser/net/url_request_async_asar_job.cc",
-    "shell/browser/net/url_request_async_asar_job.h",
-    "shell/browser/net/url_request_string_job.cc",
-    "shell/browser/net/url_request_string_job.h",
-    "shell/browser/net/url_request_buffer_job.cc",
-    "shell/browser/net/url_request_buffer_job.h",
-    "shell/browser/net/url_request_context_getter.cc",
-    "shell/browser/net/url_request_context_getter.h",
-    "shell/browser/net/url_request_fetch_job.cc",
-    "shell/browser/net/url_request_fetch_job.h",
-    "shell/browser/net/url_request_stream_job.cc",
-    "shell/browser/net/url_request_stream_job.h",
     "shell/browser/notifications/linux/libnotify_notification.cc",
     "shell/browser/notifications/linux/libnotify_notification.h",
     "shell/browser/notifications/linux/notification_presenter_linux.cc",

+ 1 - 5
lib/browser/chrome-extension.js

@@ -431,11 +431,7 @@ const chromeExtensionHandler = function (request, callback) {
 }
 
 app.on('session-created', function (ses) {
-  ses.protocol.registerBufferProtocol('chrome-extension', chromeExtensionHandler, function (error) {
-    if (error) {
-      console.error(`Unable to register chrome-extension protocol: ${error}`)
-    }
-  })
+  ses.protocol.registerBufferProtocol('chrome-extension', chromeExtensionHandler)
 })
 
 // The persistent path of "DevTools Extensions" preference file.

+ 0 - 3
patches/chromium/.patches

@@ -35,7 +35,6 @@ mas-cfisobjc.patch
 mas-cgdisplayusesforcetogray.patch
 mas-audiodeviceduck.patch
 mas-lssetapplicationlaunchservicesserverconnectionstatus.patch
-allow_webview_file_url.patch
 ignore_rc_check.patch
 enable_widevine.patch
 chrome_key_systems.patch
@@ -60,7 +59,6 @@ autofill_size_calculation.patch
 fix_disable_usage_of_abort_report_np_in_mas_builds.patch
 fix_disable_usage_of_pthread_fchdir_np_and_pthread_chdir_np_in_mas.patch
 fix_disable_usage_of_setapplicationisdaemon_and.patch
-disable_network_services_by_default.patch
 unsandboxed_ppapi_processes_skip_zygote.patch
 patch_the_ensure_gn_version_py_script_to_work_on_mac_ci.patch
 build_add_electron_tracing_category.patch
@@ -69,7 +67,6 @@ feat_offscreen_rendering_with_viz_compositor.patch
 worker_context_will_destroy.patch
 fix_breakpad_symbol_generation_on_linux_arm.patch
 frame_host_manager.patch
-cross_site_document_resource_handler.patch
 crashpad_pid_check.patch
 chore_add_debounce_on_the_updatewebcontentsvisibility_method_to.patch
 network_service_allow_remote_certificate_verification_logic.patch

+ 3 - 3
patches/chromium/add_contentgpuclient_precreatemessageloop_callback.patch

@@ -9,10 +9,10 @@ Allows Electron to restore WER when ELECTRON_DEFAULT_ERROR_MODE is set.
 This should be upstreamed
 
 diff --git a/content/gpu/gpu_main.cc b/content/gpu/gpu_main.cc
-index 69cb584e3b99a6989dbb2906bfa5bdf1c5cd3df5..7d1d9f871f7a0676b040651cf5a7122ee6cf2732 100644
+index 46d92835eadd6429ea0c6a53c5a39ff04f1c2634..1b99a1e601f4226280cdf1382af555b4d61b92fa 100644
 --- a/content/gpu/gpu_main.cc
 +++ b/content/gpu/gpu_main.cc
-@@ -235,6 +235,10 @@ int GpuMain(const MainFunctionParams& parameters) {
+@@ -236,6 +236,10 @@ int GpuMain(const MainFunctionParams& parameters) {
  
    logging::SetLogMessageHandler(GpuProcessLogMessageHandler);
  
@@ -23,7 +23,7 @@ index 69cb584e3b99a6989dbb2906bfa5bdf1c5cd3df5..7d1d9f871f7a0676b040651cf5a7122e
    // We are experiencing what appear to be memory-stomp issues in the GPU
    // process. These issues seem to be impacting the task executor and listeners
    // registered to it. Create the task executor on the heap to guard against
-@@ -348,7 +352,6 @@ int GpuMain(const MainFunctionParams& parameters) {
+@@ -349,7 +353,6 @@ int GpuMain(const MainFunctionParams& parameters) {
    GpuProcess gpu_process(io_thread_priority);
  #endif
  

+ 2 - 2
patches/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 fc77a1d2c717cbf6a4066082c4e941d73e707847..cde4f969cb799b9ede05f29148fba32d32309cc2 100644
+index e44b0d054d61914b43f4a3c36fa2578f452e1797..8b46714d15db976968ad084e7941ab503e11e65d 100644
 --- a/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc
 +++ b/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc
-@@ -643,6 +643,10 @@ class ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
+@@ -644,6 +644,10 @@ class ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
          size, WTF::ArrayBufferContents::kDontInitialize);
    }
  

+ 0 - 20
patches/chromium/allow_webview_file_url.patch

@@ -1,20 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Cheng Zhao <[email protected]>
-Date: Thu, 20 Sep 2018 17:49:42 -0700
-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 76bcf34f58ef62dc42927a94d1e4410c1a0bde2e..008d89fe6b46facb7b3f8ca908c76c36d19c396b 100644
---- a/content/browser/loader/resource_dispatcher_host_impl.cc
-+++ b/content/browser/loader/resource_dispatcher_host_impl.cc
-@@ -1426,6 +1426,8 @@ void ResourceDispatcherHostImpl::BeginNavigationRequest(
-       !policy->IsWebSafeScheme(info.common_params.url.scheme()) &&
-       !is_external_protocol;
- 
-+  non_web_url_in_guest = false;
-+
-   if (is_shutdown_ || non_web_url_in_guest) {
-     url_loader_client->OnComplete(
-         network::URLLoaderCompletionStatus(net::ERR_ABORTED));

+ 2 - 2
patches/chromium/blink_initialization_order.patch

@@ -10,10 +10,10 @@ to fix electron/electron#13787.  The backport landed in Chromium 67 but the
 DidCreateScriptContext re-ordering needs to be upstreamed or kept indefinitely
 
 diff --git a/third_party/blink/renderer/bindings/core/v8/local_window_proxy.cc b/third_party/blink/renderer/bindings/core/v8/local_window_proxy.cc
-index 50c06fddeff3647dc99f8ab9f1538723f91ec2a9..fa4b6c3c8081af03055ddeadc53606fcc9030d5c 100644
+index b6622fd132cc1b46127a2157b28c2fd2ab63e40d..1a3196aa5737e35237fd467260973fdf260587c4 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
-@@ -203,11 +203,10 @@ void LocalWindowProxy::Initialize() {
+@@ -205,11 +205,10 @@ void LocalWindowProxy::Initialize() {
                   GetFrame()->IsMainFrame());
      MainThreadDebugger::Instance()->ContextCreated(script_state_, GetFrame(),
                                                     origin);

+ 1 - 1
patches/chromium/blink_local_frame.patch

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

+ 4 - 4
patches/chromium/blink_world_context.patch

@@ -5,7 +5,7 @@ Subject: blink_world_context.patch
 
 
 diff --git a/third_party/blink/public/web/web_local_frame.h b/third_party/blink/public/web/web_local_frame.h
-index ea92c2747104615ac876b8322bd5e7acf039924d..1a5b6c4945de6e26a163fe653fef65838431d7b0 100644
+index f62985f20f9e89ec663141d09ccae7113f11124e..911e5601a3800e94720dcdc8c91cfeb0d7d72443 100644
 --- a/third_party/blink/public/web/web_local_frame.h
 +++ b/third_party/blink/public/web/web_local_frame.h
 @@ -357,6 +357,9 @@ class WebLocalFrame : public WebFrame {
@@ -19,10 +19,10 @@ index ea92c2747104615ac876b8322bd5e7acf039924d..1a5b6c4945de6e26a163fe653fef6583
    // that the script evaluated to with callback. Script execution can be
    // suspend.
 diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
-index 3215cba24c414f235c3149ffd45e30dfc7979060..752e04d1510d54ae525e4c7d1b5a149cba2b087a 100644
+index 48d73a37562595ca7f97d839c25df9c58f8efe32..b724c55007baa3c8e791bc7a4816d20861d26e65 100644
 --- a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
 +++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
-@@ -868,6 +868,13 @@ v8::Local<v8::Object> WebLocalFrameImpl::GlobalProxy() const {
+@@ -866,6 +866,13 @@ v8::Local<v8::Object> WebLocalFrameImpl::GlobalProxy() const {
    return MainWorldScriptContext()->Global();
  }
  
@@ -37,7 +37,7 @@ index 3215cba24c414f235c3149ffd45e30dfc7979060..752e04d1510d54ae525e4c7d1b5a149c
    return BindingSecurity::ShouldAllowAccessToFrame(
        CurrentDOMWindow(V8PerIsolateData::MainThreadIsolate()),
 diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.h b/third_party/blink/renderer/core/frame/web_local_frame_impl.h
-index c9a5d1d253d7ff16dc88667b07b883842a388c11..ee7079631e3a713f8b001c5d104fc2b1bbe99e8c 100644
+index bad60721541dc8b8f2552f3ba3ef720949eb2baa..b37439a62fd56baa56ca69394000976a3fbb8674 100644
 --- a/third_party/blink/renderer/core/frame/web_local_frame_impl.h
 +++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.h
 @@ -149,6 +149,8 @@ class CORE_EXPORT WebLocalFrameImpl final

+ 1 - 1
patches/chromium/build_gn.patch

@@ -5,7 +5,7 @@ Subject: build_gn.patch
 
 
 diff --git a/build/config/BUILDCONFIG.gn b/build/config/BUILDCONFIG.gn
-index 23695f67293383fe086ce56a7ab6fe08ed28cce7..1d01c7a33634fc749f7498377e96dc0467e698f5 100644
+index f9d5a2e5c06f6e2a1d50754a5771b8abaa3a146f..90d1b98b18585d3e628d0bf8adcaa69403e24888 100644
 --- a/build/config/BUILDCONFIG.gn
 +++ b/build/config/BUILDCONFIG.gn
 @@ -123,6 +123,9 @@ if (current_os == "") {

+ 1 - 1
patches/chromium/build_win_disable_zc_twophase.patch

@@ -8,7 +8,7 @@ This is to workaround the bug in crbug.com/969698#c10
 until fixes have landed in upstream.
 
 diff --git a/build/config/win/BUILD.gn b/build/config/win/BUILD.gn
-index a6c0aeaf98f7a860c131dc52161f52f308432a91..7b490d07d0f8383db5cea2703d7451db0108d252 100644
+index 781aeaaf46b6de0f98f26df4ddcbd13cac527d62..254ede050920993d6b283ffb67f13d2eea633113 100644
 --- a/build/config/win/BUILD.gn
 +++ b/build/config/win/BUILD.gn
 @@ -2,6 +2,7 @@

+ 14 - 14
patches/chromium/can_create_window.patch

@@ -5,10 +5,10 @@ Subject: can_create_window.patch
 
 
 diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
-index a9d30fa2e6b9b2f5fd96be4ecf90dafa9e7ea57a..b352615567a2719828626d9ad4b79ea8c494975f 100644
+index 111039f17535c7a6fec84a5d157e174044a30028..fe573789d280f0545d4ac5725789f3054a9fd492 100644
 --- a/content/browser/frame_host/render_frame_host_impl.cc
 +++ b/content/browser/frame_host/render_frame_host_impl.cc
-@@ -3831,6 +3831,7 @@ void RenderFrameHostImpl::CreateNewWindow(
+@@ -3805,6 +3805,7 @@ void RenderFrameHostImpl::CreateNewWindow(
            last_committed_origin_, params->window_container_type,
            params->target_url, params->referrer.To<Referrer>(),
            params->frame_name, params->disposition, *params->features,
@@ -17,10 +17,10 @@ index a9d30fa2e6b9b2f5fd96be4ecf90dafa9e7ea57a..b352615567a2719828626d9ad4b79ea8
            &no_javascript_access);
  
 diff --git a/content/common/frame.mojom b/content/common/frame.mojom
-index a2fe2dbd0d1c91a0bf5047b5c93f30758a0db277..d9f44fecaae883d861eea94c6cc16727967f0baa 100644
+index c9cb924bef70b9d186b5f622033f7f9206f890dd..0f7da5d076a3e89f4ea45e1e1d57ff2d8c681c41 100644
 --- a/content/common/frame.mojom
 +++ b/content/common/frame.mojom
-@@ -305,6 +305,10 @@ struct CreateNewWindowParams {
+@@ -307,6 +307,10 @@ struct CreateNewWindowParams {
  
    // The window features to use for the new window.
    blink.mojom.WindowFeatures features;
@@ -32,10 +32,10 @@ index a2fe2dbd0d1c91a0bf5047b5c93f30758a0db277..d9f44fecaae883d861eea94c6cc16727
  
  // Operation result when the renderer asks the browser to create a new window.
 diff --git a/content/public/browser/content_browser_client.cc b/content/public/browser/content_browser_client.cc
-index 21da9c9c43a94411787d7cab8513b88302383e97..44a574d3c621695d7d1304c7b8db08db8cf753d1 100644
+index 4aef09d612532f7c71656c24bca13e9b5887be8e..746f5893f95b940ac68610d9655aa46a3b85430a 100644
 --- a/content/public/browser/content_browser_client.cc
 +++ b/content/public/browser/content_browser_client.cc
-@@ -494,6 +494,8 @@ bool ContentBrowserClient::CanCreateWindow(
+@@ -493,6 +493,8 @@ bool ContentBrowserClient::CanCreateWindow(
      const std::string& frame_name,
      WindowOpenDisposition disposition,
      const blink::mojom::WindowFeatures& features,
@@ -45,10 +45,10 @@ index 21da9c9c43a94411787d7cab8513b88302383e97..44a574d3c621695d7d1304c7b8db08db
      bool opener_suppressed,
      bool* no_javascript_access) {
 diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h
-index b0709c05aec437c36498587e7a3bd79bf311c525..7d83d9e0d0c57511955921d85f15a27a88c3ac37 100644
+index da6420d62ef701c141d62d58c20a821b265cbe1d..3946cdec768f9f26a6710967f664b411012ef260 100644
 --- a/content/public/browser/content_browser_client.h
 +++ b/content/public/browser/content_browser_client.h
-@@ -175,6 +175,7 @@ class RenderFrameHost;
+@@ -176,6 +176,7 @@ class RenderFrameHost;
  class RenderProcessHost;
  class RenderViewHost;
  class ResourceContext;
@@ -66,7 +66,7 @@ index b0709c05aec437c36498587e7a3bd79bf311c525..7d83d9e0d0c57511955921d85f15a27a
        bool opener_suppressed,
        bool* no_javascript_access);
 diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
-index d0ca81590d2b5688022ca6045869dcae0ecd778e..7752c1e49dbee49c64a552ec249cabdb4d073109 100644
+index 0335070be844765bc685eed2899fba19093f6e49..227436a1954818ded4dd4b38047ed07ffc0b939d 100644
 --- a/content/renderer/render_view_impl.cc
 +++ b/content/renderer/render_view_impl.cc
 @@ -75,6 +75,7 @@
@@ -75,9 +75,9 @@ index d0ca81590d2b5688022ca6045869dcae0ecd778e..7752c1e49dbee49c64a552ec249cabdb
  #include "content/renderer/loader/request_extra_data.h"
 +#include "content/renderer/loader/web_url_request_util.h"
  #include "content/renderer/media/audio/audio_device_factory.h"
- #include "content/renderer/media/stream/media_stream_device_observer.h"
- #include "content/renderer/media/video_capture/video_capture_impl_manager.h"
-@@ -1366,6 +1367,8 @@ WebView* RenderViewImpl::CreateView(
+ #include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
+ #include "content/renderer/media/webrtc/rtc_peer_connection_handler.h"
+@@ -1368,6 +1369,8 @@ WebView* RenderViewImpl::CreateView(
    }
    params->features = ConvertWebWindowFeaturesToMojoWindowFeatures(features);
  
@@ -87,10 +87,10 @@ index d0ca81590d2b5688022ca6045869dcae0ecd778e..7752c1e49dbee49c64a552ec249cabdb
    // moved on send.
    bool is_background_tab =
 diff --git a/content/shell/browser/web_test/web_test_content_browser_client.cc b/content/shell/browser/web_test/web_test_content_browser_client.cc
-index dacecdd4d0195e999f11fd2e1dfaabe95a639263..c5b88ee2561561c0b8a8032d32255645ce30c450 100644
+index 14c8b66a426372c371c3aa4eb376dc2ed898b072..ab4d79b2b4bcdd42dbc9c44634155adf3334f2cf 100644
 --- a/content/shell/browser/web_test/web_test_content_browser_client.cc
 +++ b/content/shell/browser/web_test/web_test_content_browser_client.cc
-@@ -308,6 +308,8 @@ bool WebTestContentBrowserClient::CanCreateWindow(
+@@ -307,6 +307,8 @@ bool WebTestContentBrowserClient::CanCreateWindow(
      const std::string& frame_name,
      WindowOpenDisposition disposition,
      const blink::mojom::WindowFeatures& features,

+ 2 - 2
patches/chromium/content_browser_main_loop.patch

@@ -8,10 +8,10 @@ run before shutdown. This is required to cleanup WebContents asynchronously
 in atom::CommonWebContentsDelegate::ResetManageWebContents.
 
 diff --git a/content/browser/browser_main_loop.cc b/content/browser/browser_main_loop.cc
-index 5b9d42a924bdd121a3eab7145d3f62679e44b09e..78d3ce1ab15ffd1fba2a4a4c1d6447c7627ddb50 100644
+index 4858db38ad34b30601effa34aebe8bf4300f7271..c65550e35bf600aba4c9c091f8aef2b30bb736bd 100644
 --- a/content/browser/browser_main_loop.cc
 +++ b/content/browser/browser_main_loop.cc
-@@ -1508,7 +1508,7 @@ void BrowserMainLoop::MainMessageLoopRun() {
+@@ -1478,7 +1478,7 @@ void BrowserMainLoop::MainMessageLoopRun() {
    NOTREACHED();
  #else
    base::RunLoop run_loop;

+ 0 - 52
patches/chromium/cross_site_document_resource_handler.patch

@@ -1,52 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: deepak1556 <[email protected]>
-Date: Mon, 3 Jun 2019 14:07:40 -0700
-Subject: cross_site_document_resource_handler.patch
-
-Add a content layer hook to disable CORB for a renderer process,
-this patch can be removed once we switch to network service,
-where the embedders have a chance to design their URLLoaders.
-
-diff --git a/content/browser/loader/cross_site_document_resource_handler.cc b/content/browser/loader/cross_site_document_resource_handler.cc
-index b74bbef56038e29ca35403affd284a7a8868c201..d6887e576ac197f80a7e5261bd251cd761d1d814 100644
---- a/content/browser/loader/cross_site_document_resource_handler.cc
-+++ b/content/browser/loader/cross_site_document_resource_handler.cc
-@@ -582,6 +582,9 @@ bool CrossSiteDocumentResourceHandler::ShouldBlockBasedOnHeaders(
-       request()->initiator()->scheme() == url::kFileScheme)
-     return false;
- 
-+  if (GetContentClient()->browser()->ShouldBypassCORB(info->GetChildID()))
-+    return false;
-+
-   return true;
- }
- 
-diff --git a/content/public/browser/content_browser_client.cc b/content/public/browser/content_browser_client.cc
-index 39d3c28ca33fa1eeab14b67ec31a6ae09f25c354..1fc64dd493536f1aefafd6a683c19289920000b7 100644
---- a/content/public/browser/content_browser_client.cc
-+++ b/content/public/browser/content_browser_client.cc
-@@ -71,6 +71,10 @@ std::unique_ptr<BrowserMainParts> ContentBrowserClient::CreateBrowserMainParts(
-   return nullptr;
- }
- 
-+bool ContentBrowserClient::ShouldBypassCORB(int render_process_id) const {
-+  return false;
-+}
-+
- void ContentBrowserClient::PostAfterStartupTask(
-     const base::Location& from_here,
-     const scoped_refptr<base::TaskRunner>& task_runner,
-diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h
-index 3d518759a3bc190970a2d45ec178c97096fa250d..b2c12759d2cd94d7971f20bc289c7fa70f1fe863 100644
---- a/content/public/browser/content_browser_client.h
-+++ b/content/public/browser/content_browser_client.h
-@@ -249,6 +249,9 @@ class CONTENT_EXPORT ContentBrowserClient {
-   virtual std::unique_ptr<BrowserMainParts> CreateBrowserMainParts(
-       const MainFunctionParams& parameters);
- 
-+  // Electron: Allows bypassing CORB checks for a renderer process.
-+  virtual bool ShouldBypassCORB(int render_process_id) const;
-+
-   // Allows the embedder to change the default behavior of
-   // BrowserThread::PostAfterStartupTask to better match whatever
-   // definition of "startup" the embedder has in mind. This may be

+ 3 - 3
patches/chromium/dcheck.patch

@@ -17,10 +17,10 @@ only one or two specific checks fail. Then it's better to simply comment out the
 failing checks and allow the rest of the target to have them enabled.
 
 diff --git a/content/browser/frame_host/navigation_controller_impl.cc b/content/browser/frame_host/navigation_controller_impl.cc
-index 6a3cca0f846c944f23afe91ca149a0aa28bc18aa..20b3f2ef31d2f036fb0a08d5d7678bb9e67532e6 100644
+index 2b7c0c1a7b1c17cfd507ce65794a56a5849765e6..cc59e2b49ab0ecc9e917ff61cca99b6ec7c6f041 100644
 --- a/content/browser/frame_host/navigation_controller_impl.cc
 +++ b/content/browser/frame_host/navigation_controller_impl.cc
-@@ -1211,8 +1211,10 @@ NavigationType NavigationControllerImpl::ClassifyNavigation(
+@@ -1210,8 +1210,10 @@ NavigationType NavigationControllerImpl::ClassifyNavigation(
      return NAVIGATION_TYPE_NEW_SUBFRAME;
    }
  
@@ -33,7 +33,7 @@ index 6a3cca0f846c944f23afe91ca149a0aa28bc18aa..20b3f2ef31d2f036fb0a08d5d7678bb9
  
    if (rfh->GetParent()) {
      // All manual subframes would be did_create_new_entry and handled above, so
-@@ -1464,7 +1466,10 @@ void NavigationControllerImpl::RendererDidNavigateToNewPage(
+@@ -1463,7 +1465,10 @@ void NavigationControllerImpl::RendererDidNavigateToNewPage(
      new_entry->GetFavicon() = GetLastCommittedEntry()->GetFavicon();
    }
  

+ 3 - 3
patches/chromium/desktop_media_list.patch

@@ -133,12 +133,12 @@ index 47401abc984e6fe26c7f4c5399aa565c687060b0..ca6a527ffac877c27aac94337ec5a7b5
   protected:
    virtual ~DesktopMediaListObserver() {}
 diff --git a/chrome/browser/media/webrtc/native_desktop_media_list.cc b/chrome/browser/media/webrtc/native_desktop_media_list.cc
-index 872152cededb29ca3c04b2deb3fe6491be001af9..4ca62f03abf11bf9d0a48c85a79e098fb6758a30 100644
+index d284c0e67cbf302671514b23a64ecafedf2c9e02..b61fa02a75b4e65ab324b43f74bffcf4b9349fad 100644
 --- a/chrome/browser/media/webrtc/native_desktop_media_list.cc
 +++ b/chrome/browser/media/webrtc/native_desktop_media_list.cc
-@@ -7,14 +7,15 @@
- #include "base/bind.h"
+@@ -8,14 +8,15 @@
  #include "base/hash/hash.h"
+ #include "base/message_loop/message_pump_type.h"
  #include "base/single_thread_task_runner.h"
 +#include "base/strings/string_number_conversions.h"
  #include "base/strings/utf_string_conversions.h"

+ 2 - 2
patches/chromium/disable-redraw-lock.patch

@@ -15,7 +15,7 @@ the redraw locking mechanism, which fixes these issues. The electron issue
 can be found at https://github.com/electron/electron/issues/1821
 
 diff --git a/ui/views/win/hwnd_message_handler.cc b/ui/views/win/hwnd_message_handler.cc
-index 9b683f301913f85b6849439dd230cc4cf32eca1d..44dbae9b1ed1486a0119666eae8a531b7d9c50d3 100644
+index f6209967f11a0aa8b9c8cca5814462d83365c2d0..e0d736f9bceee25a09533782d10f3bc1325d68b9 100644
 --- a/ui/views/win/hwnd_message_handler.cc
 +++ b/ui/views/win/hwnd_message_handler.cc
 @@ -331,6 +331,10 @@ constexpr int kSynthesizedMouseMessagesTimeDifference = 500;
@@ -49,7 +49,7 @@ index 9b683f301913f85b6849439dd230cc4cf32eca1d..44dbae9b1ed1486a0119666eae8a531b
  // HWNDMessageHandler, gfx::WindowImpl overrides:
  
 diff --git a/ui/views/win/hwnd_message_handler.h b/ui/views/win/hwnd_message_handler.h
-index 9f0a1a8698838cd797f22cbc4fb100b024758927..2733d8d0220ef92458ca295484525006ddb9d5e8 100644
+index 6c4c93ed7f1ef41be152dad007c639bb84e8ae2c..f5af5cc6e8ec19562c2415c8e26d1148b93b49c7 100644
 --- a/ui/views/win/hwnd_message_handler.h
 +++ b/ui/views/win/hwnd_message_handler.h
 @@ -193,6 +193,8 @@ class VIEWS_EXPORT HWNDMessageHandler : public gfx::WindowImpl,

+ 18 - 18
patches/chromium/disable_color_correct_rendering.patch

@@ -32,7 +32,7 @@ index d62c52b53268b4ffab702a0dac3652edc472ccb9..f1ed520f123802469d94c98c418b9f5c
    // Image Decode Service and raster tiles without images until the decode is
    // ready.
 diff --git a/components/viz/common/display/renderer_settings.h b/components/viz/common/display/renderer_settings.h
-index e33255364c18298192cf26a783204235f2daedb5..eec7c487ce0bf2d36a48402773c35556c7fddb67 100644
+index 116a777d691deb61d58037aabfdc7a35e58cc17b..5a452b0dcf31be2a9d165b6d3b36ae87dee88a42 100644
 --- a/components/viz/common/display/renderer_settings.h
 +++ b/components/viz/common/display/renderer_settings.h
 @@ -23,6 +23,7 @@ class VIZ_COMMON_EXPORT RendererSettings {
@@ -44,12 +44,12 @@ index e33255364c18298192cf26a783204235f2daedb5..eec7c487ce0bf2d36a48402773c35556
    bool force_antialiasing = false;
    bool force_blending_with_shaders = false;
 diff --git a/components/viz/host/renderer_settings_creation.cc b/components/viz/host/renderer_settings_creation.cc
-index cf3b10af046e7ac0607b1935369e963d969c0b82..6a6c3520fe11511ee3855944091deeb882240d0f 100644
+index 642eaa528b061860b1dabf13fac63808284b5274..73a719b193e3e9bfec8113c005020822f81e0048 100644
 --- a/components/viz/host/renderer_settings_creation.cc
 +++ b/components/viz/host/renderer_settings_creation.cc
-@@ -12,6 +12,7 @@
- #include "components/viz/common/display/renderer_settings.h"
+@@ -13,6 +13,7 @@
  #include "components/viz/common/features.h"
+ #include "components/viz/common/switches.h"
  #include "ui/base/ui_base_switches.h"
 +#include "ui/gfx/switches.h"
  
@@ -65,7 +65,7 @@ index cf3b10af046e7ac0607b1935369e963d969c0b82..6a6c3520fe11511ee3855944091deeb8
        !command_line->HasSwitch(switches::kUIDisablePartialSwap);
  #if defined(OS_MACOSX)
 diff --git a/components/viz/service/display/gl_renderer.cc b/components/viz/service/display/gl_renderer.cc
-index 2fb123aa60201bfa912d0ec1e797a734f351b608..bf2bad3fce525df6e565e0387ffbefb59dd15052 100644
+index e2c5be9ed5bad3649770c1f0049e01de6494b4eb..303c41757bcc80d3fb21feae6a5a71a4366de0c7 100644
 --- a/components/viz/service/display/gl_renderer.cc
 +++ b/components/viz/service/display/gl_renderer.cc
 @@ -81,6 +81,9 @@
@@ -139,10 +139,10 @@ index 2fb123aa60201bfa912d0ec1e797a734f351b608..bf2bad3fce525df6e565e0387ffbefb5
    gfx::ColorSpace dst_color_space =
 -      current_frame()->current_render_pass->color_space;
 +      PATCH_CS(current_frame()->current_render_pass->color_space);
- 
- #if defined(OS_WIN)
    // Force sRGB output on Windows for overlay candidate video quads to match
-@@ -2393,8 +2398,8 @@ void GLRenderer::DrawStreamVideoQuad(const StreamVideoDrawQuad* quad,
+   // DirectComposition behavior in case these switch between overlays and
+   // compositing. See https://crbug.com/811118 for details.
+@@ -2390,8 +2395,8 @@ void GLRenderer::DrawStreamVideoQuad(const StreamVideoDrawQuad* quad,
  
    SetUseProgram(ProgramKey::VideoStream(tex_coord_precision,
                                          ShouldApplyRoundedCorner(quad)),
@@ -153,7 +153,7 @@ index 2fb123aa60201bfa912d0ec1e797a734f351b608..bf2bad3fce525df6e565e0387ffbefb5
  
    DCHECK_EQ(GL_TEXTURE0, GetActiveTextureUnit(gl_));
    gl_->BindTexture(GL_TEXTURE_EXTERNAL_OES, lock.texture_id());
-@@ -2451,8 +2456,8 @@ void GLRenderer::FlushTextureQuadCache(BoundGeometry flush_binding) {
+@@ -2448,8 +2453,8 @@ void GLRenderer::FlushTextureQuadCache(BoundGeometry flush_binding) {
        draw_cache_.nearest_neighbor ? GL_NEAREST : GL_LINEAR);
  
    // Bind the program to the GL state.
@@ -164,7 +164,7 @@ index 2fb123aa60201bfa912d0ec1e797a734f351b608..bf2bad3fce525df6e565e0387ffbefb5
  
    if (current_program_->rounded_corner_rect_location() != -1) {
      SetShaderRoundedCorner(
-@@ -3153,7 +3158,9 @@ void GLRenderer::PrepareGeometry(BoundGeometry binding) {
+@@ -3142,7 +3147,9 @@ void GLRenderer::PrepareGeometry(BoundGeometry binding) {
  void GLRenderer::SetUseProgram(const ProgramKey& program_key_no_color,
                                 const gfx::ColorSpace& src_color_space,
                                 const gfx::ColorSpace& dst_color_space) {
@@ -175,7 +175,7 @@ index 2fb123aa60201bfa912d0ec1e797a734f351b608..bf2bad3fce525df6e565e0387ffbefb5
  
    gfx::ColorSpace adjusted_color_space = src_color_space;
    float sdr_white_level = current_frame()->sdr_white_level;
-@@ -3540,7 +3547,7 @@ void GLRenderer::CopyRenderPassDrawQuadToOverlayResource(
+@@ -3511,7 +3518,7 @@ void GLRenderer::CopyRenderPassDrawQuadToOverlayResource(
  
    *overlay_texture = FindOrCreateOverlayTexture(
        params.quad->render_pass_id, iosurface_width, iosurface_height,
@@ -184,7 +184,7 @@ index 2fb123aa60201bfa912d0ec1e797a734f351b608..bf2bad3fce525df6e565e0387ffbefb5
    *new_bounds = gfx::RectF(updated_dst_rect.origin(),
                             gfx::SizeF((*overlay_texture)->texture.size()));
  
-@@ -3759,8 +3766,8 @@ void GLRenderer::FlushOverdrawFeedback(const gfx::Rect& output_rect) {
+@@ -3729,8 +3736,8 @@ void GLRenderer::FlushOverdrawFeedback(const gfx::Rect& output_rect) {
  
    PrepareGeometry(SHARED_BINDING);
  
@@ -195,14 +195,14 @@ index 2fb123aa60201bfa912d0ec1e797a734f351b608..bf2bad3fce525df6e565e0387ffbefb5
  
    gfx::Transform render_matrix;
    render_matrix.Translate(0.5 * output_rect.width() + output_rect.x(),
-@@ -3920,3 +3927,5 @@ gfx::Size GLRenderer::GetRenderPassBackingPixelSize(
+@@ -3890,3 +3897,5 @@ gfx::Size GLRenderer::GetRenderPassBackingPixelSize(
  }
  
  }  // namespace viz
 +
 +#undef PATCH_CS
 diff --git a/content/browser/gpu/gpu_process_host.cc b/content/browser/gpu/gpu_process_host.cc
-index a22390afced20c3a898aa5e84c403f90b1eb0fe2..d15b9978f6e9a2e0b51d1cf4c57a7fc5472b2b0c 100644
+index 4e949d20e9e914ddf8866cc7ad331562f2893971..40ff4c86e15383bc273a1d79cbe5cc6285e3be21 100644
 --- a/content/browser/gpu/gpu_process_host.cc
 +++ b/content/browser/gpu/gpu_process_host.cc
 @@ -192,6 +192,7 @@ GpuTerminationStatus ConvertToGpuTerminationStatus(
@@ -214,10 +214,10 @@ index a22390afced20c3a898aa5e84c403f90b1eb0fe2..d15b9978f6e9a2e0b51d1cf4c57a7fc5
      service_manager::switches::kGpuSandboxAllowSysVShm,
      service_manager::switches::kGpuSandboxFailuresFatal,
 diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
-index 6f0671a753879d7b327681979090508e610cc129..f1beaf3433d67014cff527a686fd3239862eb537 100644
+index 6e568d750c8b1520ad5e4e8ac2f39feeba992dc2..9b6b58f6b53c912635bcfefa5fbe6fd711851ee7 100644
 --- a/content/browser/renderer_host/render_process_host_impl.cc
 +++ b/content/browser/renderer_host/render_process_host_impl.cc
-@@ -219,6 +219,7 @@
+@@ -216,6 +216,7 @@
  #include "ui/base/ui_base_switches.h"
  #include "ui/base/ui_base_switches_util.h"
  #include "ui/display/display_switches.h"
@@ -225,7 +225,7 @@ index 6f0671a753879d7b327681979090508e610cc129..f1beaf3433d67014cff527a686fd3239
  #include "ui/gl/gl_switches.h"
  #include "ui/native_theme/native_theme_features.h"
  #include "url/url_constants.h"
-@@ -2933,6 +2934,7 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
+@@ -2883,6 +2884,7 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
    // Propagate the following switches to the renderer command line (along
    // with any associated values) if present in the browser command line.
    static const char* const kSwitchNames[] = {
@@ -234,7 +234,7 @@ index 6f0671a753879d7b327681979090508e610cc129..f1beaf3433d67014cff527a686fd3239
      network::switches::kExplicitlyAllowedPorts,
      service_manager::switches::kDisableInProcessStackTraces,
 diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
-index 734c561001cc625c60851590d69bc7485928538a..1f56e138ae967e8f7c39a4629f6cb7dc590cf42c 100644
+index 2c96d679729d6ceac7d2b5077b8bbf2b6d951fa5..61ef919b51a1712fb2c0d8eecee8f5b953532b32 100644
 --- a/content/renderer/render_widget.cc
 +++ b/content/renderer/render_widget.cc
 @@ -2854,6 +2854,9 @@ cc::LayerTreeSettings RenderWidget::GenerateLayerTreeSettings(

+ 3 - 3
patches/chromium/disable_hidden.patch

@@ -5,7 +5,7 @@ Subject: disable_hidden.patch
 
 
 diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
-index 8278ff4f07e5a18941521c92c819d099636b96b4..8606461c0422460e5d2d6adab0fea4ad8060ece5 100644
+index 0ccc622fd1891f921bee7ec1f162226081cccc4e..1fcbec659652d572bccd0ea03992f566846d65ac 100644
 --- a/content/browser/renderer_host/render_widget_host_impl.cc
 +++ b/content/browser/renderer_host/render_widget_host_impl.cc
 @@ -670,6 +670,9 @@ void RenderWidgetHostImpl::WasHidden() {
@@ -19,10 +19,10 @@ index 8278ff4f07e5a18941521c92c819d099636b96b4..8606461c0422460e5d2d6adab0fea4ad
  
    TRACE_EVENT0("renderer_host", "RenderWidgetHostImpl::WasHidden");
 diff --git a/content/browser/renderer_host/render_widget_host_impl.h b/content/browser/renderer_host/render_widget_host_impl.h
-index 350770092301beffa86a658a5c42276b238d0800..9296c0ad7f83cd4a5dce041de2fb97a537e44858 100644
+index cf54a5f5ead088055d83f32eba03a09cf6c530df..d22480ae0196d46ae7c5c60e153435bb7e0989fd 100644
 --- a/content/browser/renderer_host/render_widget_host_impl.h
 +++ b/content/browser/renderer_host/render_widget_host_impl.h
-@@ -156,6 +156,9 @@ class CONTENT_EXPORT RenderWidgetHostImpl
+@@ -155,6 +155,9 @@ class CONTENT_EXPORT RenderWidgetHostImpl
    // RenderWidgetHostImpl.
    static RenderWidgetHostImpl* From(RenderWidgetHost* rwh);
  

+ 0 - 26
patches/chromium/disable_network_services_by_default.patch

@@ -1,26 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Cheng Zhao <[email protected]>
-Date: Tue, 9 Apr 2019 14:57:02 -0700
-Subject: disable_network_services_by_default.patch
-
-Disable NetworkService by default.
-
-This allows us to enable NetworkService with command line flags, which makes it
-easier to work on NetworkService migration.
-
-We should remove this patch after all Electron's code has been migrated to the
-NetworkService.
-
-diff --git a/services/network/public/cpp/features.cc b/services/network/public/cpp/features.cc
-index d10016967b1ac607166e593fbddf39a8fc533fe0..2f8d69091a3eeb46e52d48c015d76df9fe41e350 100644
---- a/services/network/public/cpp/features.cc
-+++ b/services/network/public/cpp/features.cc
-@@ -23,7 +23,7 @@ const base::Feature kNetworkService {
- #else
-   "NetworkServiceNotSupported",
- #endif
--      base::FEATURE_ENABLED_BY_DEFAULT
-+      base::FEATURE_DISABLED_BY_DEFAULT
- };
- 
- // Out of Blink CORS

+ 2 - 2
patches/chromium/disable_user_gesture_requirement_for_beforeunload_dialogs.patch

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

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

@@ -7,10 +7,10 @@ Compilation of those files fails with the Chromium 68.
 Remove the patch during the Chromium 69 upgrade.
 
 diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/renderer/platform/BUILD.gn
-index 0764cc88a8c4753a1c682e4164ec1988f7b824dd..cb1314d44fe2150a049e1e6072f036ffd26a5bfb 100644
+index aaaa915ca862378c8e90e25a5a7bd656666dafc7..ec6fa54e08d4e7cf31310bf2a1ee481677a21604 100644
 --- a/third_party/blink/renderer/platform/BUILD.gn
 +++ b/third_party/blink/renderer/platform/BUILD.gn
-@@ -1706,7 +1706,7 @@ jumbo_source_set("blink_platform_unittests_sources") {
+@@ -1727,7 +1727,7 @@ jumbo_source_set("blink_platform_unittests_sources") {
      "graphics/paint/drawing_display_item_test.cc",
      "graphics/paint/drawing_recorder_test.cc",
      "graphics/paint/float_clip_rect_test.cc",

+ 39 - 39
patches/chromium/feat_offscreen_rendering_with_viz_compositor.patch

@@ -45,7 +45,7 @@ index f5e18df4e06e24d3bdd51308abde48e217444848..41017d9d53b1c0d563ea0901f5cae407
  #if defined(USE_X11)
  void HostDisplayClient::DidCompleteSwapWithNewSize(const gfx::Size& size) {
 diff --git a/components/viz/host/host_display_client.h b/components/viz/host/host_display_client.h
-index 5e5c5da4a3cfc927df3fb120fcab647e927271c1..8c6ec95f309660fb83012a13c7b9bb64b782e7d9 100644
+index b8177277ebca471fc147f2d5b53521cbadd8fa2d..72a807e138f80b4ab37cb1d368bc968e299d903f 100644
 --- a/components/viz/host/host_display_client.h
 +++ b/components/viz/host/host_display_client.h
 @@ -30,17 +30,17 @@ class VIZ_HOST_EXPORT HostDisplayClient : public mojom::DisplayClient {
@@ -85,7 +85,7 @@ index 65c26e2f7ae813e50f6740f73a4d145467da4366..39c04c4d6b644a4ad7b13b4e932b085f
  
    if (!canvas_) {
 diff --git a/components/viz/host/layered_window_updater_impl.h b/components/viz/host/layered_window_updater_impl.h
-index d9a9730a78b9aec833c64282ca868dbba5594d82..d98426e9f78931bd43061ec994559d594c96151c 100644
+index ced30727ab67e557265c3a61f7c213763da973ce..f422786fe6cd9cab47494fe6028f3c3be8bc763e 100644
 --- a/components/viz/host/layered_window_updater_impl.h
 +++ b/components/viz/host/layered_window_updater_impl.h
 @@ -33,7 +33,7 @@ class VIZ_HOST_EXPORT LayeredWindowUpdaterImpl
@@ -98,10 +98,10 @@ index d9a9730a78b9aec833c64282ca868dbba5594d82..d98426e9f78931bd43061ec994559d59
   private:
    const HWND hwnd_;
 diff --git a/components/viz/service/BUILD.gn b/components/viz/service/BUILD.gn
-index a43cee43701fc3c139c726d14b128de3ae71c2c2..32ce9f5634ddefd5cd0feaa551f04697b53da68d 100644
+index 892e89b990297f663fbf142c5d4b8c9b59cbc9ae..c83135ace35448876e130d949533dc600f201901 100644
 --- a/components/viz/service/BUILD.gn
 +++ b/components/viz/service/BUILD.gn
-@@ -113,6 +113,8 @@ viz_component("service") {
+@@ -119,6 +119,8 @@ viz_component("service") {
      "display_embedder/output_surface_provider_impl.h",
      "display_embedder/server_shared_bitmap_manager.cc",
      "display_embedder/server_shared_bitmap_manager.h",
@@ -111,7 +111,7 @@ index a43cee43701fc3c139c726d14b128de3ae71c2c2..32ce9f5634ddefd5cd0feaa551f04697
      "display_embedder/software_output_surface.h",
      "display_embedder/viz_process_context_provider.cc",
 diff --git a/components/viz/service/display_embedder/output_surface_provider_impl.cc b/components/viz/service/display_embedder/output_surface_provider_impl.cc
-index 7f61cb7c847bae88b50f2c32bbe9be6525a4c587..f059762b2c39c927b6bc6e40ad1c0641913082f2 100644
+index e3c8e9dbca69f2665e8dbbd798d45c3b7199e04c..d9fa2d536e977ac966065a9058661f887e995320 100644
 --- a/components/viz/service/display_embedder/output_surface_provider_impl.cc
 +++ b/components/viz/service/display_embedder/output_surface_provider_impl.cc
 @@ -20,6 +20,7 @@
@@ -122,15 +122,15 @@ index 7f61cb7c847bae88b50f2c32bbe9be6525a4c587..f059762b2c39c927b6bc6e40ad1c0641
  #include "components/viz/service/display_embedder/software_output_surface.h"
  #include "components/viz/service/display_embedder/viz_process_context_provider.h"
  #include "components/viz/service/gl/gpu_service_impl.h"
-@@ -32,6 +33,7 @@
- #include "gpu/ipc/common/surface_handle.h"
+@@ -33,6 +34,7 @@
+ #include "gpu/ipc/scheduler_sequence.h"
  #include "gpu/ipc/service/gpu_channel_manager_delegate.h"
  #include "gpu/ipc/service/image_transport_surface.h"
-+#include "services/viz/privileged/interfaces/compositing/layered_window_updater.mojom.h"
++#include "services/viz/privileged/mojom/compositing/layered_window_updater.mojom.h"
  #include "ui/base/ui_base_switches.h"
  #include "ui/gl/gl_context.h"
  #include "ui/gl/init/gl_factory.h"
-@@ -219,6 +221,19 @@ OutputSurfaceProviderImpl::CreateSoftwareOutputDeviceForPlatform(
+@@ -223,6 +225,19 @@ OutputSurfaceProviderImpl::CreateSoftwareOutputDeviceForPlatform(
    if (headless_)
      return std::make_unique<SoftwareOutputDevice>();
  
@@ -185,7 +185,7 @@ index f3867356e3d641416e00e6d115ae9ae2a0be90ab..b1d192d2b20ccb63fba07093101d745e
  
 diff --git a/components/viz/service/display_embedder/software_output_device_proxy.cc b/components/viz/service/display_embedder/software_output_device_proxy.cc
 new file mode 100644
-index 0000000000000000000000000000000000000000..f5fc4f37c10bdc8aca8c1618985d46d10c830437
+index 0000000000000000000000000000000000000000..c17b03e00089bfd301c63910426bb16afb8cdae7
 --- /dev/null
 +++ b/components/viz/service/display_embedder/software_output_device_proxy.cc
 @@ -0,0 +1,156 @@
@@ -200,7 +200,7 @@ index 0000000000000000000000000000000000000000..f5fc4f37c10bdc8aca8c1618985d46d1
 +#include "components/viz/common/resources/resource_sizes.h"
 +#include "components/viz/service/display_embedder/output_device_backing.h"
 +#include "mojo/public/cpp/system/platform_handle.h"
-+#include "services/viz/privileged/interfaces/compositing/layered_window_updater.mojom.h"
++#include "services/viz/privileged/mojom/compositing/layered_window_updater.mojom.h"
 +#include "skia/ext/platform_canvas.h"
 +#include "third_party/skia/include/core/SkCanvas.h"
 +#include "ui/gfx/skia_util.h"
@@ -347,7 +347,7 @@ index 0000000000000000000000000000000000000000..f5fc4f37c10bdc8aca8c1618985d46d1
 +}  // namespace viz
 diff --git a/components/viz/service/display_embedder/software_output_device_proxy.h b/components/viz/service/display_embedder/software_output_device_proxy.h
 new file mode 100644
-index 0000000000000000000000000000000000000000..ff3c0217812a8370a20aa528f117e928fd1b95f4
+index 0000000000000000000000000000000000000000..3865939d0445a23a468770f57207ba5ef23277ed
 --- /dev/null
 +++ b/components/viz/service/display_embedder/software_output_device_proxy.h
 @@ -0,0 +1,88 @@
@@ -367,8 +367,8 @@ index 0000000000000000000000000000000000000000..ff3c0217812a8370a20aa528f117e928
 +#include "components/viz/host/host_display_client.h"
 +#include "components/viz/service/display/software_output_device.h"
 +#include "components/viz/service/viz_service_export.h"
-+#include "services/viz/privileged/interfaces/compositing/display_private.mojom.h"
-+#include "services/viz/privileged/interfaces/compositing/layered_window_updater.mojom.h"
++#include "services/viz/privileged/mojom/compositing/display_private.mojom.h"
++#include "services/viz/privileged/mojom/compositing/layered_window_updater.mojom.h"
 +
 +namespace viz {
 +
@@ -440,7 +440,7 @@ index 0000000000000000000000000000000000000000..ff3c0217812a8370a20aa528f117e928
 +
 +#endif  // COMPONENTS_VIZ_SERVICE_DISPLAY_EMBEDDER_SOFTWARE_OUTPUT_DEVICE_PROXY_H_
 diff --git a/components/viz/service/display_embedder/software_output_device_win.cc b/components/viz/service/display_embedder/software_output_device_win.cc
-index 73ea1986b2140a3ffb87c5e23c7ab2174bac0a10..3ba3657ba12ec47cc3db3fec218496ffe817d35b 100644
+index 74316edc0e0bd28b1772e9d7cf34327d113462c4..9cbe5400458ce6e0b8ea9edfa3f0969fb936ee1e 100644
 --- a/components/viz/service/display_embedder/software_output_device_win.cc
 +++ b/components/viz/service/display_embedder/software_output_device_win.cc
 @@ -11,6 +11,7 @@
@@ -449,7 +449,7 @@ index 73ea1986b2140a3ffb87c5e23c7ab2174bac0a10..3ba3657ba12ec47cc3db3fec218496ff
  #include "components/viz/service/display_embedder/output_device_backing.h"
 +#include "components/viz/service/display_embedder/software_output_device_proxy.h"
  #include "mojo/public/cpp/system/platform_handle.h"
- #include "services/viz/privileged/interfaces/compositing/layered_window_updater.mojom.h"
+ #include "services/viz/privileged/mojom/compositing/layered_window_updater.mojom.h"
  #include "skia/ext/platform_canvas.h"
 @@ -265,7 +266,7 @@ void SoftwareOutputDeviceWinProxy::EndPaintDelegated(
    if (!canvas_)
@@ -476,10 +476,10 @@ index 73ea1986b2140a3ffb87c5e23c7ab2174bac0a10..3ba3657ba12ec47cc3db3fec218496ff
    } else {
      return std::make_unique<SoftwareOutputDeviceWinDirect>(hwnd, backing);
    }
-diff --git a/services/viz/privileged/interfaces/compositing/display_private.mojom b/services/viz/privileged/interfaces/compositing/display_private.mojom
-index 8898b9162a65e043e8b95237b8874e48ea71744e..a455df870ece25fc6e5e46688a1c6b5b396b841a 100644
---- a/services/viz/privileged/interfaces/compositing/display_private.mojom
-+++ b/services/viz/privileged/interfaces/compositing/display_private.mojom
+diff --git a/services/viz/privileged/mojom/compositing/display_private.mojom b/services/viz/privileged/mojom/compositing/display_private.mojom
+index 5c6292cfb3b8b46802c772d202d19c78e4782488..ed27af3ab0b383553b4d9492d29cec2b91bee807 100644
+--- a/services/viz/privileged/mojom/compositing/display_private.mojom
++++ b/services/viz/privileged/mojom/compositing/display_private.mojom
 @@ -79,12 +79,14 @@ interface DisplayPrivate {
  };
  
@@ -496,10 +496,10 @@ index 8898b9162a65e043e8b95237b8874e48ea71744e..a455df870ece25fc6e5e46688a1c6b5b
    CreateLayeredWindowUpdater(LayeredWindowUpdater& layered_window_updater);
  
    // Notifies that a swap has occurred and provides information about the pixel
-diff --git a/services/viz/privileged/interfaces/compositing/layered_window_updater.mojom b/services/viz/privileged/interfaces/compositing/layered_window_updater.mojom
-index 58a7e221eaabd9e21196496d220c77babe07c56d..dd141b16eace2999380ed137b4adf1f3538a8a70 100644
---- a/services/viz/privileged/interfaces/compositing/layered_window_updater.mojom
-+++ b/services/viz/privileged/interfaces/compositing/layered_window_updater.mojom
+diff --git a/services/viz/privileged/mojom/compositing/layered_window_updater.mojom b/services/viz/privileged/mojom/compositing/layered_window_updater.mojom
+index 6b7fbb6cf13dc8ee6ade0878a9a2c1efc5d4d3f1..e2af75168cb914a7b3b4a6c9b6a285498c3f8e72 100644
+--- a/services/viz/privileged/mojom/compositing/layered_window_updater.mojom
++++ b/services/viz/privileged/mojom/compositing/layered_window_updater.mojom
 @@ -26,5 +26,5 @@ interface LayeredWindowUpdater {
    // Draws to the HWND by copying pixels from shared memory. Callback must be
    // called after draw operation is complete to signal shared memory can be
@@ -508,7 +508,7 @@ index 58a7e221eaabd9e21196496d220c77babe07c56d..dd141b16eace2999380ed137b4adf1f3
 +  Draw(gfx.mojom.Rect damage_rect) => ();
  };
 diff --git a/ui/compositor/compositor.h b/ui/compositor/compositor.h
-index 5158731bd8512fcd2ee859b1e5eeff3a9a32ca9a..4d3592e939c45eec86cd4c7e328de247e9374419 100644
+index 359e7d21a4a5e7acaed9bd7f42f40019e650a182..cd90aab9d3a7b5335c829d964d92e3fa62401408 100644
 --- a/ui/compositor/compositor.h
 +++ b/ui/compositor/compositor.h
 @@ -23,6 +23,7 @@
@@ -517,7 +517,7 @@ index 5158731bd8512fcd2ee859b1e5eeff3a9a32ca9a..4d3592e939c45eec86cd4c7e328de247
  #include "components/viz/common/surfaces/frame_sink_id.h"
 +#include "components/viz/host/host_display_client.h"
  #include "components/viz/host/host_frame_sink_client.h"
- #include "services/viz/privileged/interfaces/compositing/vsync_parameter_observer.mojom-forward.h"
+ #include "services/viz/privileged/mojom/compositing/vsync_parameter_observer.mojom-forward.h"
  #include "third_party/skia/include/core/SkColor.h"
 @@ -194,6 +195,15 @@ class COMPOSITOR_EXPORT ContextFactory {
    virtual bool SyncTokensRequiredForDisplayCompositor() = 0;
@@ -555,7 +555,7 @@ index 5158731bd8512fcd2ee859b1e5eeff3a9a32ca9a..4d3592e939c45eec86cd4c7e328de247
    Layer* root_layer_ = nullptr;
  
 diff --git a/ui/compositor/host/host_context_factory_private.cc b/ui/compositor/host/host_context_factory_private.cc
-index 1c84de621781d0d7cf41866fc033b78881c5e972..112a1a6c2a0f24ee9ace05d7c38247b22fb4ed4c 100644
+index 84b2623bd3dd8a7fdfa8e453eda3574e3b71ef99..974eb17c1d1f50c45b4d3a539a8d1a67b687642d 100644
 --- a/ui/compositor/host/host_context_factory_private.cc
 +++ b/ui/compositor/host/host_context_factory_private.cc
 @@ -99,8 +99,12 @@ void HostContextFactoryPrivate::ConfigureCompositor(
@@ -594,10 +594,10 @@ index 4014e64a75da88cf66c02e8adb71171c2666cab7..25e57784e1a1ffc546b003daa4cd0059
    // The geometry of the frame.
    gfx::Size pixel_size;
    float scale_factor = 1.f;
-diff --git a/ui/gfx/mojo/ca_layer_params.mojom b/ui/gfx/mojo/ca_layer_params.mojom
-index 7bf735643541b18bafffe645d3ff37e96caa4dea..f7eaf10ffd665789f10a587142fac0c0c79b9798 100644
---- a/ui/gfx/mojo/ca_layer_params.mojom
-+++ b/ui/gfx/mojo/ca_layer_params.mojom
+diff --git a/ui/gfx/mojom/ca_layer_params.mojom b/ui/gfx/mojom/ca_layer_params.mojom
+index a73b2e678ffe0a682d0aa5409724fb441768bec5..6c36626d204c77ef51278b9e8f6fc6ee24a7a9ab 100644
+--- a/ui/gfx/mojom/ca_layer_params.mojom
++++ b/ui/gfx/mojom/ca_layer_params.mojom
 @@ -18,5 +18,6 @@ struct CALayerParams {
    bool is_empty;
    CALayerContent content;
@@ -605,10 +605,10 @@ index 7bf735643541b18bafffe645d3ff37e96caa4dea..f7eaf10ffd665789f10a587142fac0c0
 +  gfx.mojom.Rect damage;
    float scale_factor;
  };
-diff --git a/ui/gfx/mojo/ca_layer_params_struct_traits.cc b/ui/gfx/mojo/ca_layer_params_struct_traits.cc
-index dd553996b5c6ff5ec0c210a020a18a6a843b8aae..26d1e0bda2640052d42ea4e691c3df73074dea08 100644
---- a/ui/gfx/mojo/ca_layer_params_struct_traits.cc
-+++ b/ui/gfx/mojo/ca_layer_params_struct_traits.cc
+diff --git a/ui/gfx/mojom/ca_layer_params_mojom_traits.cc b/ui/gfx/mojom/ca_layer_params_mojom_traits.cc
+index 843d5c24ec33de07c12d4417eb111f91dbcd42fe..0ea594950fcd2686f1b07248dbc8ceb257d89dca 100644
+--- a/ui/gfx/mojom/ca_layer_params_mojom_traits.cc
++++ b/ui/gfx/mojom/ca_layer_params_mojom_traits.cc
 @@ -52,6 +52,9 @@ bool StructTraits<gfx::mojom::CALayerParamsDataView, gfx::CALayerParams>::Read(
    if (!data.ReadPixelSize(&out->pixel_size))
      return false;
@@ -619,10 +619,10 @@ index dd553996b5c6ff5ec0c210a020a18a6a843b8aae..26d1e0bda2640052d42ea4e691c3df73
    out->scale_factor = data.scale_factor();
    return true;
  }
-diff --git a/ui/gfx/mojo/ca_layer_params_struct_traits.h b/ui/gfx/mojo/ca_layer_params_struct_traits.h
-index 94127a0d5b50b052318e9e5a360755fe771f87e9..348fa26c5c95a13d1ddd0ff2545aca3a35841a77 100644
---- a/ui/gfx/mojo/ca_layer_params_struct_traits.h
-+++ b/ui/gfx/mojo/ca_layer_params_struct_traits.h
+diff --git a/ui/gfx/mojom/ca_layer_params_mojom_traits.h b/ui/gfx/mojom/ca_layer_params_mojom_traits.h
+index 4cac766eae3161baedac4202f694129cd90c80de..0821495ad22944d8856bb750cac8912a2f8328c3 100644
+--- a/ui/gfx/mojom/ca_layer_params_mojom_traits.h
++++ b/ui/gfx/mojom/ca_layer_params_mojom_traits.h
 @@ -20,6 +20,10 @@ struct StructTraits<gfx::mojom::CALayerParamsDataView, gfx::CALayerParams> {
      return ca_layer_params.pixel_size;
    }

+ 2 - 2
patches/chromium/fix_disable_usage_of_setapplicationisdaemon_and.patch

@@ -5,10 +5,10 @@ Subject: fix: disable usage of SetApplicationIsDaemon and
  _LSSetApplicationLaunchServicesServerConnectionStatus in MAS builds
 
 diff --git a/content/utility/utility_service_factory.cc b/content/utility/utility_service_factory.cc
-index e4c8405fb17e37fd843eb9a962e0c5360524a693..1d5ee0a13a837efd0befe2ec02b38fbf4dcbc572 100644
+index a16d93d6d9508776819b0912f45b86753b6a187b..3ce36a6ec4cfd4bbec79c2c9e8e29f2a1aa49ef3 100644
 --- a/content/utility/utility_service_factory.cc
 +++ b/content/utility/utility_service_factory.cc
-@@ -198,7 +198,7 @@ void UtilityServiceFactory::RunService(
+@@ -196,7 +196,7 @@ void UtilityServiceFactory::RunService(
  std::unique_ptr<service_manager::Service>
  UtilityServiceFactory::CreateAudioService(
      mojo::PendingReceiver<service_manager::mojom::Service> receiver) {

+ 3 - 3
patches/chromium/frame_host_manager.patch

@@ -180,10 +180,10 @@ index 1edb9fd6b0c383f291735dd1a952fcb7b17cc87f..23967f040eb346be265faa2a92562e1f
    size_t GetRelatedActiveContentsCount() override;
    bool RequiresDedicatedProcess() override;
 diff --git a/content/public/browser/content_browser_client.cc b/content/public/browser/content_browser_client.cc
-index 44a574d3c621695d7d1304c7b8db08db8cf753d1..39d3c28ca33fa1eeab14b67ec31a6ae09f25c354 100644
+index 746f5893f95b940ac68610d9655aa46a3b85430a..bb7e5bcd4b665ef30aa228b79faa856f9569d157 100644
 --- a/content/public/browser/content_browser_client.cc
 +++ b/content/public/browser/content_browser_client.cc
-@@ -52,6 +52,20 @@ void OverrideOnBindInterface(const service_manager::BindSourceInfo& remote_info,
+@@ -51,6 +51,20 @@ void OverrideOnBindInterface(const service_manager::BindSourceInfo& remote_info,
                                                           handle);
  }
  
@@ -205,7 +205,7 @@ index 44a574d3c621695d7d1304c7b8db08db8cf753d1..39d3c28ca33fa1eeab14b67ec31a6ae0
      const MainFunctionParams& parameters) {
    return nullptr;
 diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h
-index 7d83d9e0d0c57511955921d85f15a27a88c3ac37..3d518759a3bc190970a2d45ec178c97096fa250d 100644
+index 3946cdec768f9f26a6710967f664b411012ef260..64afc1de2b5e4824dfbdc14ac64fcfd63852f48c 100644
 --- a/content/public/browser/content_browser_client.h
 +++ b/content/public/browser/content_browser_client.h
 @@ -208,8 +208,41 @@ CONTENT_EXPORT void OverrideOnBindInterface(

+ 2 - 2
patches/chromium/gritsettings_resource_ids.patch

@@ -6,10 +6,10 @@ Subject: gritsettings_resource_ids.patch
 Add electron resources file to the list of resource ids generation.
 
 diff --git a/tools/gritsettings/resource_ids b/tools/gritsettings/resource_ids
-index 7ac3cf37b48153541278b3524d5c1610f6ae62e7..d284647347afca7beb1fea7415ae8f951026a03b 100644
+index def08e61708768b9ae2ddc12fb9fcf849a0c389f..b8324ee78876c920a931257bf6f9ee48c93a2bdf 100644
 --- a/tools/gritsettings/resource_ids
 +++ b/tools/gritsettings/resource_ids
-@@ -459,6 +459,11 @@
+@@ -465,6 +465,11 @@
      "includes": [28880],
    },
  

+ 3 - 3
patches/chromium/mas-lssetapplicationlaunchservicesserverconnectionstatus.patch

@@ -7,12 +7,12 @@ Removes usage of the _LSSetApplicationLaunchServicesServerConnectionStatus
 private API.
 
 diff --git a/content/gpu/gpu_main.cc b/content/gpu/gpu_main.cc
-index de80e1023c948a347440eeb960079f498e43fb87..69cb584e3b99a6989dbb2906bfa5bdf1c5cd3df5 100644
+index 6779f6d70c1a69cd5668cf3a328cf56a492983e2..46d92835eadd6429ea0c6a53c5a39ff04f1c2634 100644
 --- a/content/gpu/gpu_main.cc
 +++ b/content/gpu/gpu_main.cc
-@@ -285,8 +285,10 @@ int GpuMain(const MainFunctionParams& parameters) {
+@@ -286,8 +286,10 @@ int GpuMain(const MainFunctionParams& parameters) {
          std::make_unique<base::SingleThreadTaskExecutor>(
-             base::MessagePump::Type::NS_RUNLOOP);
+             base::MessagePumpType::NS_RUNLOOP);
  
 +#ifndef MAS_BUILD
      // Tell LaunchServices to continue without a connection to the daemon.

+ 1 - 1
patches/chromium/mas_blink_no_private_api.patch

@@ -73,7 +73,7 @@ index 94afefcee81b87c05bf9b1199d90d3d4b5ea84a6..2ec7f04c71824b47de1ddbf1f0e8625d
  
  }  // namespace blink
 diff --git a/third_party/blink/renderer/core/paint/theme_painter_mac.mm b/third_party/blink/renderer/core/paint/theme_painter_mac.mm
-index e965faf9fd8d5ec3572d769421f149907d66c67f..b2d0bbd80994fdf9607009d9e27bf4c3629fe402 100644
+index e94235acb17335fbc78c606ff26036871117bd09..7c4bd19215c67f649636ae69b9a21b5c1ba21ecc 100644
 --- a/third_party/blink/renderer/core/paint/theme_painter_mac.mm
 +++ b/third_party/blink/renderer/core/paint/theme_painter_mac.mm
 @@ -41,6 +41,7 @@

+ 2 - 2
patches/chromium/mas_no_private_api.patch

@@ -38,7 +38,7 @@ index 743d1364bcd13e24ecbe5ced730161d15b8c3e93..a7e81072194c00baa0aa3159a6bfe374
  // is concerned.
  @property(nonatomic, readonly) NSString* subrole;
 diff --git a/content/browser/accessibility/browser_accessibility_cocoa.mm b/content/browser/accessibility/browser_accessibility_cocoa.mm
-index 6e97b6750cad46a8a8096c199c3a2f5386e0ae3b..3cfbb34bf6426d575c7affb9f4f9503948665d8d 100644
+index 39663b5451f5a8069e7a4d0b99236fdb9c0b8cc1..c56d38e4231401b7ebdb59a3bf4c68a5c041a21b 100644
 --- a/content/browser/accessibility/browser_accessibility_cocoa.mm
 +++ b/content/browser/accessibility/browser_accessibility_cocoa.mm
 @@ -141,6 +141,7 @@
@@ -276,7 +276,7 @@ index b6bea74d9f9c2fcfba381477895e4c15741318fc..4a02e5659e85c507d480d7fb9b63ee10
  
  void BluetoothAdapterMac::RemovePairingDelegateInternal(
 diff --git a/media/audio/BUILD.gn b/media/audio/BUILD.gn
-index d8ae83ce63aafdd0fcd1994a144465791e94ba4a..d19096f9afd606bb7bfd6c377f8a976417d3bff2 100644
+index 35fd1d7da0adfb8c8bef3d2ff3aa9ac25285421a..b7eda4e11c464e733e4ddb1cbf009ba811fc332a 100644
 --- a/media/audio/BUILD.gn
 +++ b/media/audio/BUILD.gn
 @@ -180,6 +180,12 @@ source_set("audio") {

+ 1 - 1
patches/chromium/network_service_allow_remote_certificate_verification_logic.patch

@@ -5,7 +5,7 @@ Subject: network service: allow remote certificate verification logic
 
 
 diff --git a/services/network/network_context.cc b/services/network/network_context.cc
-index dffa1299b1cfce8609313435769189495fd8ccb5..ddea6f6e60b6f5ec4c0fdaddf825870f6b4db419 100644
+index d550c0eb5035f1ab2907579cd6355653a066c4ce..cc9d4b920eb70cb0410e3d1669661d8d03a68bb7 100644
 --- a/services/network/network_context.cc
 +++ b/services/network/network_context.cc
 @@ -91,6 +91,11 @@

+ 1 - 1
patches/chromium/no_cache_storage_check.patch

@@ -7,7 +7,7 @@ Do not check for unique origin in CacheStorage, in Electron we may have
 scripts running without an origin.
 
 diff --git a/content/browser/cache_storage/legacy/legacy_cache_storage.cc b/content/browser/cache_storage/legacy/legacy_cache_storage.cc
-index a064cef489d6dbb86c1fd1da2bd2e918316326ed..9408cf6ec682bc917555a328926d0f57e49c61a1 100644
+index b1a4d62c9230fd11e74d4fa959b0d89f30a27e83..225c31ec025d73eb581dee9a05cb17cd70ee4be8 100644
 --- a/content/browser/cache_storage/legacy/legacy_cache_storage.cc
 +++ b/content/browser/cache_storage/legacy/legacy_cache_storage.cc
 @@ -104,7 +104,7 @@ class LegacyCacheStorage::CacheLoader {

+ 1 - 1
patches/chromium/notification_provenance.patch

@@ -6,7 +6,7 @@ Subject: pass RenderProcessHost through to PlatformNotificationService
 this is so Electron can identify which renderer a notification came from
 
 diff --git a/content/browser/notifications/blink_notification_service_impl.cc b/content/browser/notifications/blink_notification_service_impl.cc
-index ceb4bc6248a961bd907e35e9f758cebdbd0ae62b..c85acbb33b7b467716b717159816a00e67d46119 100644
+index a717d9f3539dc0fe86b743c6e29e4311b8b5cec3..1351217319c57be414e6c66f8a01f71fe46d2c04 100644
 --- a/content/browser/notifications/blink_notification_service_impl.cc
 +++ b/content/browser/notifications/blink_notification_service_impl.cc
 @@ -88,9 +88,11 @@ BlinkNotificationServiceImpl::BlinkNotificationServiceImpl(

+ 8 - 8
patches/chromium/put_back_deleted_colors_for_autofill.patch

@@ -8,7 +8,7 @@ needed in chromium but our autofill implementation uses them.  This patch can be
 our autofill implementation to work like chromium.
 
 diff --git a/chrome/browser/ui/libgtkui/native_theme_gtk.cc b/chrome/browser/ui/libgtkui/native_theme_gtk.cc
-index 3044d7b1829397a97b9a1ef9f115587bab74339d..c578d16c995c11daf90484593b5f9649d37b7041 100644
+index 0929cd7a73fe9665dec64026f593c99783f6fc38..fd2ee1e103a2ae07c8cd1ecb75062399de1745a7 100644
 --- a/chrome/browser/ui/libgtkui/native_theme_gtk.cc
 +++ b/chrome/browser/ui/libgtkui/native_theme_gtk.cc
 @@ -280,6 +280,27 @@ SkColor SkColorFromColorId(ui::NativeTheme::ColorId color_id) {
@@ -40,10 +40,10 @@ index 3044d7b1829397a97b9a1ef9f115587bab74339d..c578d16c995c11daf90484593b5f9649
      // TODO(thomasanderson): Render GtkSpinner directly.
      case ui::NativeTheme::kColorId_ThrobberSpinningColor:
 diff --git a/ui/native_theme/common_theme.cc b/ui/native_theme/common_theme.cc
-index 489369300d48dbfacb8c5489e06b77218f526bf4..340026b3dac4e833d3448d83db7b92c136134726 100644
+index 8bd17ec4a9340881694c1aded2c19769d0867edb..bc02c137279dbb672984a59f0a3b546ce5e39012 100644
 --- a/ui/native_theme/common_theme.cc
 +++ b/ui/native_theme/common_theme.cc
-@@ -51,6 +51,14 @@ SkColor GetAuraColor(NativeTheme::ColorId color_id,
+@@ -56,6 +56,14 @@ SkColor GetAuraColor(NativeTheme::ColorId color_id,
        case NativeTheme::kColorId_BubbleFooterBackground:
          return SkColorSetRGB(0x32, 0x36, 0x39);
  
@@ -58,7 +58,7 @@ index 489369300d48dbfacb8c5489e06b77218f526bf4..340026b3dac4e833d3448d83db7b92c1
        // FocusableBorder
        case NativeTheme::kColorId_FocusedBorderColor:
          return SkColorSetA(gfx::kGoogleBlue300, 0x66);
-@@ -351,6 +359,18 @@ SkColor GetAuraColor(NativeTheme::ColorId color_id,
+@@ -360,6 +368,18 @@ SkColor GetAuraColor(NativeTheme::ColorId color_id,
      case NativeTheme::kColorId_UnfocusedBorderColor:
        return SkColorSetA(SK_ColorBLACK, 0x66);
  
@@ -78,10 +78,10 @@ index 489369300d48dbfacb8c5489e06b77218f526bf4..340026b3dac4e833d3448d83db7b92c1
      case NativeTheme::kColorId_ThrobberSpinningColor:
        return gfx::kGoogleBlue600;
 diff --git a/ui/native_theme/native_theme.h b/ui/native_theme/native_theme.h
-index 97ced9d2495c33aad710d8ec5208b8107cd94ed9..62dc2fdad120e0cee44b15848d1ebb813ccb8559 100644
+index 66d67f8bf62ce05717bf6aa74f39be29ec232395..e9d6b91edd8ed46215bcad36bf621dd048f03d5a 100644
 --- a/ui/native_theme/native_theme.h
 +++ b/ui/native_theme/native_theme.h
-@@ -367,6 +367,11 @@ class NATIVE_THEME_EXPORT NativeTheme {
+@@ -384,6 +384,11 @@ class NATIVE_THEME_EXPORT NativeTheme {
      kColorId_TableHeaderText,
      kColorId_TableHeaderBackground,
      kColorId_TableHeaderSeparator,
@@ -94,10 +94,10 @@ index 97ced9d2495c33aad710d8ec5208b8107cd94ed9..62dc2fdad120e0cee44b15848d1ebb81
      kColorId_ThrobberSpinningColor,
      kColorId_ThrobberWaitingColor,
 diff --git a/ui/native_theme/native_theme_win.cc b/ui/native_theme/native_theme_win.cc
-index c6a0c1b9775f9d7e7a9be15d6f15ce84acf68b68..3b3a909bd920a7bf8f54fac4c00f29ce9556c20c 100644
+index 7f662b0baf976bc6b37722f55986fb5c0e8260e8..61a1411931903827b0ef303e6c5a63c8ddb08fc7 100644
 --- a/ui/native_theme/native_theme_win.cc
 +++ b/ui/native_theme/native_theme_win.cc
-@@ -548,6 +548,17 @@ SkColor NativeThemeWin::GetSystemColor(ColorId color_id) const {
+@@ -558,6 +558,17 @@ SkColor NativeThemeWin::GetSystemColor(ColorId color_id,
      case kColorId_TableGroupingIndicatorColor:
        return system_colors_[COLOR_GRAYTEXT];
  

+ 1 - 1
patches/chromium/render_widget_host_view_base.patch

@@ -25,7 +25,7 @@ index f41270e262784602c90b79b7aefbcd1a7af43dd8..a28ea7ee72fbf596b2b1d10cacaad406
      const blink::WebMouseEvent& event,
      const ui::LatencyInfo& latency) {
 diff --git a/content/browser/renderer_host/render_widget_host_view_base.h b/content/browser/renderer_host/render_widget_host_view_base.h
-index 8e523d78e7655262b18e1b52d8365120df387908..cf9e284267d767ed35013a7aa5f675cebb3c68bb 100644
+index 1381c94013e5d9881f131fcab1926698f6b1fe9f..feeb351e2ba929abe82b9a4fe4b5b6982e925156 100644
 --- a/content/browser/renderer_host/render_widget_host_view_base.h
 +++ b/content/browser/renderer_host/render_widget_host_view_base.h
 @@ -24,9 +24,11 @@

+ 3 - 3
patches/chromium/resource_file_conflict.patch

@@ -52,10 +52,10 @@ Some alternatives to this patch:
 None of these options seems like a substantial maintainability win over this patch to me (@nornagon).
 
 diff --git a/chrome/BUILD.gn b/chrome/BUILD.gn
-index e107dd9f5d264b17601a67edafe9bd61c4d767c3..85e6af67276684202fadd7a4ca4e58252f222c70 100644
+index ab1b4a53afdc07b75b3aa5cab670c561f01e9f97..9697e53703a6cb5e7cde27f3e9643dca060bc943 100644
 --- a/chrome/BUILD.gn
 +++ b/chrome/BUILD.gn
-@@ -1716,7 +1716,7 @@ if (is_chrome_branded && !is_android) {
+@@ -1719,7 +1719,7 @@ if (is_chrome_branded && !is_android) {
    }
  }
  
@@ -64,7 +64,7 @@ index e107dd9f5d264b17601a67edafe9bd61c4d767c3..85e6af67276684202fadd7a4ca4e5825
    chrome_paks("packed_resources") {
      if (is_mac) {
        output_dir = "$root_gen_dir/repack"
-@@ -1740,6 +1740,12 @@ if (!is_android) {
+@@ -1743,6 +1743,12 @@ if (!is_android) {
    }
  }
  

+ 2 - 2
patches/chromium/scroll_bounce_flag.patch

@@ -6,10 +6,10 @@ Subject: scroll_bounce_flag.patch
 Patch to make scrollBounce option work.
 
 diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
-index 76de46a31174c27f11a097575c6dec7b5f675fa8..3f119362e22c14e63d2afafa79df46836c59ae81 100644
+index 707e580113a29d87dbc70b53025714e2fe772361..3d5701ff7f0524005d6d410e539ed00a660a1582 100644
 --- a/content/renderer/render_thread_impl.cc
 +++ b/content/renderer/render_thread_impl.cc
-@@ -1506,7 +1506,7 @@ bool RenderThreadImpl::IsGpuMemoryBufferCompositorResourcesEnabled() {
+@@ -1507,7 +1507,7 @@ bool RenderThreadImpl::IsGpuMemoryBufferCompositorResourcesEnabled() {
  }
  
  bool RenderThreadImpl::IsElasticOverscrollEnabled() {

+ 9 - 10
patches/chromium/ssl_security_state_tab_helper.patch

@@ -6,10 +6,10 @@ Subject: ssl_security_state_tab_helper.patch
 Allows populating security tab info for devtools in Electron.
 
 diff --git a/chrome/browser/ssl/security_state_tab_helper.cc b/chrome/browser/ssl/security_state_tab_helper.cc
-index 45e0f485363a282e2e0caf227c2a7fbc8309acee..a05e16eba687d34e0cbad8cdc6159156cea59abd 100644
+index f271b01fad91c169afb06795d9b8aa7207744139..9fa6773a8591686a4bf3d934080389b4af1b527f 100644
 --- a/chrome/browser/ssl/security_state_tab_helper.cc
 +++ b/chrome/browser/ssl/security_state_tab_helper.cc
-@@ -13,14 +13,18 @@
+@@ -13,15 +13,19 @@
  #include "base/strings/pattern.h"
  #include "base/strings/string_util.h"
  #include "build/build_config.h"
@@ -24,22 +24,21 @@ index 45e0f485363a282e2e0caf227c2a7fbc8309acee..a05e16eba687d34e0cbad8cdc6159156
  #include "components/omnibox/browser/omnibox_field_trial.h"
  #include "components/omnibox/common/omnibox_features.h"
  #include "components/password_manager/core/browser/password_manager_metrics_util.h"
+ #include "components/safe_browsing/buildflags.h"
 +#endif
  #include "components/security_state/content/content_utils.h"
  #include "content/public/browser/browser_context.h"
  #include "content/public/browser/navigation_entry.h"
-@@ -43,8 +47,10 @@
+@@ -43,7 +47,7 @@
+ #include "chrome/browser/chromeos/policy/policy_cert_service_factory.h"
  #endif  // defined(OS_CHROMEOS)
  
- #if defined(FULL_SAFE_BROWSING)
+-#if BUILDFLAG(FULL_SAFE_BROWSING)
 +#if 0
  #include "chrome/browser/safe_browsing/chrome_password_protection_service.h"
  #endif
-+#endif
- 
- namespace {
  
-@@ -64,8 +70,9 @@ void RecordSecurityLevel(
+@@ -65,8 +69,9 @@ void RecordSecurityLevel(
  
  }  // namespace
  
@@ -50,7 +49,7 @@ index 45e0f485363a282e2e0caf227c2a7fbc8309acee..a05e16eba687d34e0cbad8cdc6159156
  
  SecurityStateTabHelper::SecurityStateTabHelper(
      content::WebContents* web_contents)
-@@ -153,6 +160,7 @@ SecurityStateTabHelper::GetMaliciousContentStatus() const {
+@@ -154,6 +159,7 @@ SecurityStateTabHelper::GetMaliciousContentStatus() const {
        web_contents()->GetController().GetVisibleEntry();
    if (!entry)
      return security_state::MALICIOUS_CONTENT_STATUS_NONE;
@@ -58,7 +57,7 @@ index 45e0f485363a282e2e0caf227c2a7fbc8309acee..a05e16eba687d34e0cbad8cdc6159156
    safe_browsing::SafeBrowsingService* sb_service =
        g_browser_process->safe_browsing_service();
    if (!sb_service)
-@@ -219,6 +227,7 @@ SecurityStateTabHelper::GetMaliciousContentStatus() const {
+@@ -220,6 +226,7 @@ SecurityStateTabHelper::GetMaliciousContentStatus() const {
          break;
      }
    }

+ 5 - 5
patches/chromium/support_mixed_sandbox_with_zygote.patch

@@ -22,10 +22,10 @@ However, the patch would need to be reviewed by the security team, as it
 does touch a security-sensitive class.
 
 diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
-index 9b15d22bc109751516999e7d8449430143eaef5d..6f0671a753879d7b327681979090508e610cc129 100644
+index 44b360508bff35646564ee6a74d605a96727aef0..6e568d750c8b1520ad5e4e8ac2f39feeba992dc2 100644
 --- a/content/browser/renderer_host/render_process_host_impl.cc
 +++ b/content/browser/renderer_host/render_process_host_impl.cc
-@@ -399,6 +399,10 @@ class RendererSandboxedProcessLauncherDelegate
+@@ -372,6 +372,10 @@ class RendererSandboxedProcessLauncherDelegate
      : public SandboxedProcessLauncherDelegate {
   public:
    RendererSandboxedProcessLauncherDelegate() {}
@@ -36,7 +36,7 @@ index 9b15d22bc109751516999e7d8449430143eaef5d..6f0671a753879d7b327681979090508e
  
    ~RendererSandboxedProcessLauncherDelegate() override {}
  
-@@ -418,6 +422,9 @@ class RendererSandboxedProcessLauncherDelegate
+@@ -391,6 +395,9 @@ class RendererSandboxedProcessLauncherDelegate
  
  #if BUILDFLAG(USE_ZYGOTE_HANDLE)
    service_manager::ZygoteHandle GetZygote() override {
@@ -46,7 +46,7 @@ index 9b15d22bc109751516999e7d8449430143eaef5d..6f0671a753879d7b327681979090508e
      const base::CommandLine& browser_command_line =
          *base::CommandLine::ForCurrentProcess();
      base::CommandLine::StringType renderer_prefix =
-@@ -431,6 +438,11 @@ class RendererSandboxedProcessLauncherDelegate
+@@ -404,6 +411,11 @@ class RendererSandboxedProcessLauncherDelegate
    service_manager::SandboxType GetSandboxType() override {
      return service_manager::SANDBOX_TYPE_RENDERER;
    }
@@ -58,7 +58,7 @@ index 9b15d22bc109751516999e7d8449430143eaef5d..6f0671a753879d7b327681979090508e
  };
  
  const char kSessionStorageHolderKey[] = "kSessionStorageHolderKey";
-@@ -1745,11 +1757,18 @@ bool RenderProcessHostImpl::Init() {
+@@ -1718,11 +1730,18 @@ bool RenderProcessHostImpl::Init() {
        cmd_line->PrependWrapper(renderer_prefix);
      AppendRendererCommandLine(cmd_line.get());
  

+ 4 - 4
patches/chromium/web_contents.patch

@@ -5,10 +5,10 @@ Subject: web_contents.patch
 
 
 diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
-index ae1bcfa7db7ddd09f59d9ecae61a504d0f325b3b..b691f5868c5b363a34df2627dec801d8942dd77f 100644
+index a1f88f77a6b9a6e879d5c6bed7968b7cd7ed2e33..c517c89bff1ba0cdc8ade44cf3b62bbe61e75a12 100644
 --- a/content/browser/web_contents/web_contents_impl.cc
 +++ b/content/browser/web_contents/web_contents_impl.cc
-@@ -2131,6 +2131,12 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params) {
+@@ -2103,6 +2103,12 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params) {
    std::string unique_name;
    frame_tree_.root()->SetFrameName(params.main_frame_name, unique_name);
  
@@ -21,7 +21,7 @@ index ae1bcfa7db7ddd09f59d9ecae61a504d0f325b3b..b691f5868c5b363a34df2627dec801d8
    WebContentsViewDelegate* delegate =
        GetContentClient()->browser()->GetWebContentsViewDelegate(this);
  
-@@ -2146,6 +2152,7 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params) {
+@@ -2118,6 +2124,7 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params) {
            &render_view_host_delegate_view_);
      }
    }
@@ -92,7 +92,7 @@ index ecaf30bcb7b916a92a69641dd7b96a3633d407c0..0af625928ca6227a21cd4263a14a42b7
  
  RenderWidgetHostViewBase* WebContentsViewGuest::CreateViewForChildWidget(
 diff --git a/content/public/browser/web_contents.h b/content/public/browser/web_contents.h
-index 50236e972100b41d55f0d8acb03fbcb5ce8520c6..4b855a7af4b7ef34d0d8a1c76f8485e565a523b9 100644
+index 8a094771e3165a317334ea0f7b89888d44a447de..df71770122e126046afa03c7e2e117c972c53676 100644
 --- a/content/public/browser/web_contents.h
 +++ b/content/public/browser/web_contents.h
 @@ -76,9 +76,12 @@ class BrowserPluginGuestDelegate;

+ 8 - 8
patches/chromium/worker_context_will_destroy.patch

@@ -21,10 +21,10 @@ index bfc62d1766686981ded5e62ad7da466d3afb9bab..5fa60ba975561626ae3ccecd9968278c
    // An empty URL is returned if the URL is not overriden.
    virtual GURL OverrideFlashEmbedWithHTML(const GURL& url);
 diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer/renderer_blink_platform_impl.cc
-index a89a61d35a4b9cdde896f8a1d8acfa5c17baec02..4547b0146ae3d03844a5c73a3b4eed97fdbc89c1 100644
+index 8b6182ea88da712e803f42fa2639bee8b6d1e4c4..9243f149915cad703adda00992172ee5f4e8a200 100644
 --- a/content/renderer/renderer_blink_platform_impl.cc
 +++ b/content/renderer/renderer_blink_platform_impl.cc
-@@ -914,6 +914,12 @@ void RendererBlinkPlatformImpl::WillStopWorkerThread() {
+@@ -944,6 +944,12 @@ void RendererBlinkPlatformImpl::WillStopWorkerThread() {
    WorkerThreadRegistry::Instance()->WillStopCurrentWorkerThread();
  }
  
@@ -38,10 +38,10 @@ index a89a61d35a4b9cdde896f8a1d8acfa5c17baec02..4547b0146ae3d03844a5c73a3b4eed97
      const v8::Local<v8::Context>& worker) {
    GetContentClient()->renderer()->DidInitializeWorkerContextOnWorkerThread(
 diff --git a/content/renderer/renderer_blink_platform_impl.h b/content/renderer/renderer_blink_platform_impl.h
-index f1bc21b53606d4133440c72c9dea6de1a3a9544f..2c58ea10e04bb1ee337f12a2fcc4db77a071510d 100644
+index f8c415ed291f5a6f00a7dee6742965a0b9702ca0..c2cba6bb24655cbad4396dc5a56621441c062f7e 100644
 --- a/content/renderer/renderer_blink_platform_impl.h
 +++ b/content/renderer/renderer_blink_platform_impl.h
-@@ -186,6 +186,7 @@ class CONTENT_EXPORT RendererBlinkPlatformImpl : public BlinkPlatformImpl {
+@@ -191,6 +191,7 @@ class CONTENT_EXPORT RendererBlinkPlatformImpl : public BlinkPlatformImpl {
    void DidStartWorkerThread() override;
    void WillStopWorkerThread() override;
    void WorkerContextCreated(const v8::Local<v8::Context>& worker) override;
@@ -50,10 +50,10 @@ index f1bc21b53606d4133440c72c9dea6de1a3a9544f..2c58ea10e04bb1ee337f12a2fcc4db77
        const blink::WebString& header_name) override;
  
 diff --git a/third_party/blink/public/platform/platform.h b/third_party/blink/public/platform/platform.h
-index 9ae02783be95b1748b931c2f75eb79b038947b7f..eb99295295613fe044b27c401a4b4a77b084255d 100644
+index 697364569441c43952b58275e0370a6373ac4884..2bc873ddecdde9fd55925e1d650f0978e8e223fd 100644
 --- a/third_party/blink/public/platform/platform.h
 +++ b/third_party/blink/public/platform/platform.h
-@@ -636,6 +636,7 @@ class BLINK_PLATFORM_EXPORT Platform {
+@@ -667,6 +667,7 @@ class BLINK_PLATFORM_EXPORT Platform {
    virtual void DidStartWorkerThread() {}
    virtual void WillStopWorkerThread() {}
    virtual void WorkerContextCreated(const v8::Local<v8::Context>& worker) {}
@@ -62,10 +62,10 @@ index 9ae02783be95b1748b931c2f75eb79b038947b7f..eb99295295613fe044b27c401a4b4a77
        const WebSecurityOrigin& script_origin) {
      return false;
 diff --git a/third_party/blink/renderer/core/workers/worker_thread.cc b/third_party/blink/renderer/core/workers/worker_thread.cc
-index 440dbcee21a94516a9225e6de35cb9354942faeb..4085b60943b09a6c1f66d3dc2c49d05f757dfa5b 100644
+index ea864c08bdef41c38ee7f166c2781edba75b5c11..d678022d216f4981c984d9be7e500d9cfbdd6c3c 100644
 --- a/third_party/blink/renderer/core/workers/worker_thread.cc
 +++ b/third_party/blink/renderer/core/workers/worker_thread.cc
-@@ -640,6 +640,12 @@ void WorkerThread::PrepareForShutdownOnWorkerThread() {
+@@ -647,6 +647,12 @@ void WorkerThread::PrepareForShutdownOnWorkerThread() {
      nested_runner_->QuitNow();
    }
  

+ 3 - 11
shell/browser/api/atom_api_net.cc

@@ -5,8 +5,8 @@
 #include "shell/browser/api/atom_api_net.h"
 
 #include "native_mate/dictionary.h"
+#include "native_mate/handle.h"
 #include "services/network/public/cpp/features.h"
-#include "shell/browser/api/atom_api_url_request.h"
 #include "shell/browser/api/atom_api_url_request_ns.h"
 
 #include "shell/common/node_includes.h"
@@ -36,10 +36,7 @@ void Net::BuildPrototype(v8::Isolate* isolate,
 
 v8::Local<v8::Value> Net::URLRequest(v8::Isolate* isolate) {
   v8::Local<v8::FunctionTemplate> constructor;
-  if (base::FeatureList::IsEnabled(network::features::kNetworkService))
-    constructor = URLRequestNS::GetConstructor(isolate);
-  else
-    constructor = URLRequest::GetConstructor(isolate);
+  constructor = URLRequestNS::GetConstructor(isolate);
   return constructor->GetFunction(isolate->GetCurrentContext())
       .ToLocalChecked();
 }
@@ -51,7 +48,6 @@ v8::Local<v8::Value> Net::URLRequest(v8::Isolate* isolate) {
 namespace {
 
 using electron::api::Net;
-using electron::api::URLRequest;
 using electron::api::URLRequestNS;
 
 void Initialize(v8::Local<v8::Object> exports,
@@ -60,11 +56,7 @@ void Initialize(v8::Local<v8::Object> exports,
                 void* priv) {
   v8::Isolate* isolate = context->GetIsolate();
 
-  if (base::FeatureList::IsEnabled(network::features::kNetworkService))
-    URLRequestNS::SetConstructor(isolate,
-                                 base::BindRepeating(URLRequestNS::New));
-  else
-    URLRequest::SetConstructor(isolate, base::BindRepeating(URLRequest::New));
+  URLRequestNS::SetConstructor(isolate, base::BindRepeating(URLRequestNS::New));
 
   mate::Dictionary dict(isolate, exports);
   dict.Set("net", Net::Create(isolate));

+ 0 - 317
shell/browser/api/atom_api_protocol.cc

@@ -1,317 +0,0 @@
-// Copyright (c) 2013 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#include "shell/browser/api/atom_api_protocol.h"
-
-#include "base/command_line.h"
-#include "base/strings/string_util.h"
-#include "content/public/browser/child_process_security_policy.h"
-#include "native_mate/dictionary.h"
-#include "shell/browser/atom_browser_client.h"
-#include "shell/browser/atom_browser_main_parts.h"
-#include "shell/browser/browser.h"
-#include "shell/browser/net/url_request_async_asar_job.h"
-#include "shell/browser/net/url_request_buffer_job.h"
-#include "shell/browser/net/url_request_fetch_job.h"
-#include "shell/browser/net/url_request_stream_job.h"
-#include "shell/browser/net/url_request_string_job.h"
-#include "shell/common/native_mate_converters/callback.h"
-#include "shell/common/native_mate_converters/value_converter.h"
-#include "shell/common/node_includes.h"
-#include "shell/common/options_switches.h"
-#include "url/url_util.h"
-
-using content::BrowserThread;
-
-namespace {
-
-// List of registered custom standard schemes.
-std::vector<std::string> g_standard_schemes;
-
-struct SchemeOptions {
-  bool standard = false;
-  bool secure = false;
-  bool bypassCSP = false;
-  bool allowServiceWorkers = false;
-  bool supportFetchAPI = false;
-  bool corsEnabled = false;
-};
-
-struct CustomScheme {
-  std::string scheme;
-  SchemeOptions options;
-};
-
-}  // namespace
-
-namespace mate {
-
-template <>
-struct Converter<CustomScheme> {
-  static bool FromV8(v8::Isolate* isolate,
-                     v8::Local<v8::Value> val,
-                     CustomScheme* out) {
-    mate::Dictionary dict;
-    if (!ConvertFromV8(isolate, val, &dict))
-      return false;
-    if (!dict.Get("scheme", &(out->scheme)))
-      return false;
-    mate::Dictionary opt;
-    // options are optional. Default values specified in SchemeOptions are used
-    if (dict.Get("privileges", &opt)) {
-      opt.Get("standard", &(out->options.standard));
-      opt.Get("supportFetchAPI", &(out->options.supportFetchAPI));
-      opt.Get("secure", &(out->options.secure));
-      opt.Get("bypassCSP", &(out->options.bypassCSP));
-      opt.Get("allowServiceWorkers", &(out->options.allowServiceWorkers));
-      opt.Get("supportFetchAPI", &(out->options.supportFetchAPI));
-      opt.Get("corsEnabled", &(out->options.corsEnabled));
-    }
-    return true;
-  }
-};
-
-}  // namespace mate
-
-namespace electron {
-
-namespace api {
-
-std::vector<std::string> GetStandardSchemes() {
-  return g_standard_schemes;
-}
-
-void RegisterSchemesAsPrivileged(v8::Local<v8::Value> val,
-                                 mate::Arguments* args) {
-  std::vector<CustomScheme> custom_schemes;
-  if (!mate::ConvertFromV8(args->isolate(), val, &custom_schemes)) {
-    args->ThrowError("Argument must be an array of custom schemes.");
-    return;
-  }
-
-  std::vector<std::string> secure_schemes, cspbypassing_schemes, fetch_schemes,
-      service_worker_schemes, cors_schemes;
-  for (const auto& custom_scheme : custom_schemes) {
-    // Register scheme to privileged list (https, wss, data, chrome-extension)
-    if (custom_scheme.options.standard) {
-      auto* policy = content::ChildProcessSecurityPolicy::GetInstance();
-      url::AddStandardScheme(custom_scheme.scheme.c_str(),
-                             url::SCHEME_WITH_HOST);
-      g_standard_schemes.push_back(custom_scheme.scheme);
-      policy->RegisterWebSafeScheme(custom_scheme.scheme);
-    }
-    if (custom_scheme.options.secure) {
-      secure_schemes.push_back(custom_scheme.scheme);
-      url::AddSecureScheme(custom_scheme.scheme.c_str());
-    }
-    if (custom_scheme.options.bypassCSP) {
-      cspbypassing_schemes.push_back(custom_scheme.scheme);
-      url::AddCSPBypassingScheme(custom_scheme.scheme.c_str());
-    }
-    if (custom_scheme.options.corsEnabled) {
-      cors_schemes.push_back(custom_scheme.scheme);
-      url::AddCorsEnabledScheme(custom_scheme.scheme.c_str());
-    }
-    if (custom_scheme.options.supportFetchAPI) {
-      fetch_schemes.push_back(custom_scheme.scheme);
-    }
-    if (custom_scheme.options.allowServiceWorkers) {
-      service_worker_schemes.push_back(custom_scheme.scheme);
-    }
-  }
-
-  const auto AppendSchemesToCmdLine = [](const char* switch_name,
-                                         std::vector<std::string> schemes) {
-    // Add the schemes to command line switches, so child processes can also
-    // register them.
-    base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
-        switch_name, base::JoinString(schemes, ","));
-  };
-
-  AppendSchemesToCmdLine(electron::switches::kSecureSchemes, secure_schemes);
-  AppendSchemesToCmdLine(electron::switches::kBypassCSPSchemes,
-                         cspbypassing_schemes);
-  AppendSchemesToCmdLine(electron::switches::kCORSSchemes, cors_schemes);
-  AppendSchemesToCmdLine(electron::switches::kFetchSchemes, fetch_schemes);
-  AppendSchemesToCmdLine(electron::switches::kServiceWorkerSchemes,
-                         service_worker_schemes);
-  AppendSchemesToCmdLine(electron::switches::kStandardSchemes,
-                         g_standard_schemes);
-}
-
-Protocol::Protocol(v8::Isolate* isolate, AtomBrowserContext* browser_context)
-    : browser_context_(browser_context), weak_factory_(this) {
-  Init(isolate);
-}
-
-Protocol::~Protocol() {}
-void Protocol::UnregisterProtocol(const std::string& scheme,
-                                  mate::Arguments* args) {
-  CompletionCallback callback;
-  args->GetNext(&callback);
-  auto* getter = static_cast<URLRequestContextGetter*>(
-      browser_context_->GetRequestContext());
-  base::PostTaskWithTraitsAndReplyWithResult(
-      FROM_HERE, {content::BrowserThread::IO},
-      base::BindOnce(&Protocol::UnregisterProtocolInIO,
-                     base::RetainedRef(getter), scheme),
-      base::BindOnce(&Protocol::OnIOCompleted, GetWeakPtr(), callback));
-}
-
-// static
-Protocol::ProtocolError Protocol::UnregisterProtocolInIO(
-    scoped_refptr<URLRequestContextGetter> request_context_getter,
-    const std::string& scheme) {
-  auto* job_factory = request_context_getter->job_factory();
-  if (!job_factory->HasProtocolHandler(scheme))
-    return ProtocolError::NOT_REGISTERED;
-  job_factory->SetProtocolHandler(scheme, nullptr);
-  return ProtocolError::OK;
-}
-
-bool IsProtocolHandledInIO(
-    scoped_refptr<URLRequestContextGetter> request_context_getter,
-    const std::string& scheme) {
-  bool is_handled =
-      request_context_getter->job_factory()->IsHandledProtocol(scheme);
-  return is_handled;
-}
-
-v8::Local<v8::Promise> Protocol::IsProtocolHandled(const std::string& scheme) {
-  util::Promise promise(isolate());
-  v8::Local<v8::Promise> handle = promise.GetHandle();
-  auto* getter = static_cast<URLRequestContextGetter*>(
-      browser_context_->GetRequestContext());
-
-  base::PostTaskWithTraitsAndReplyWithResult(
-      FROM_HERE, {content::BrowserThread::IO},
-      base::BindOnce(&IsProtocolHandledInIO, base::RetainedRef(getter), scheme),
-      base::BindOnce(util::Promise::ResolvePromise<bool>, std::move(promise)));
-
-  return handle;
-}
-
-void Protocol::UninterceptProtocol(const std::string& scheme,
-                                   mate::Arguments* args) {
-  CompletionCallback callback;
-  args->GetNext(&callback);
-  auto* getter = static_cast<URLRequestContextGetter*>(
-      browser_context_->GetRequestContext());
-  base::PostTaskWithTraitsAndReplyWithResult(
-      FROM_HERE, {content::BrowserThread::IO},
-      base::BindOnce(&Protocol::UninterceptProtocolInIO,
-                     base::RetainedRef(getter), scheme),
-      base::BindOnce(&Protocol::OnIOCompleted, GetWeakPtr(), callback));
-}
-
-// static
-Protocol::ProtocolError Protocol::UninterceptProtocolInIO(
-    scoped_refptr<URLRequestContextGetter> request_context_getter,
-    const std::string& scheme) {
-  return request_context_getter->job_factory()->UninterceptProtocol(scheme)
-             ? ProtocolError::OK
-             : ProtocolError::NOT_INTERCEPTED;
-}
-
-void Protocol::OnIOCompleted(const CompletionCallback& callback,
-                             ProtocolError error) {
-  // The completion callback is optional.
-  if (callback.is_null())
-    return;
-
-  v8::Locker locker(isolate());
-  v8::HandleScope handle_scope(isolate());
-
-  if (error == ProtocolError::OK) {
-    callback.Run(v8::Null(isolate()));
-  } else {
-    std::string str = ErrorCodeToString(error);
-    callback.Run(v8::Exception::Error(mate::StringToV8(isolate(), str)));
-  }
-}
-
-std::string Protocol::ErrorCodeToString(ProtocolError error) {
-  switch (error) {
-    case ProtocolError::FAIL:
-      return "Failed to manipulate protocol factory";
-    case ProtocolError::REGISTERED:
-      return "The scheme has been registered";
-    case ProtocolError::NOT_REGISTERED:
-      return "The scheme has not been registered";
-    case ProtocolError::INTERCEPTED:
-      return "The scheme has been intercepted";
-    case ProtocolError::NOT_INTERCEPTED:
-      return "The scheme has not been intercepted";
-    default:
-      return "Unexpected error";
-  }
-}
-
-// static
-mate::Handle<Protocol> Protocol::Create(v8::Isolate* isolate,
-                                        AtomBrowserContext* browser_context) {
-  return mate::CreateHandle(isolate, new Protocol(isolate, browser_context));
-}
-
-// static
-void Protocol::BuildPrototype(v8::Isolate* isolate,
-                              v8::Local<v8::FunctionTemplate> prototype) {
-  prototype->SetClassName(mate::StringToV8(isolate, "Protocol"));
-  mate::ObjectTemplateBuilder(isolate, prototype->PrototypeTemplate())
-      .SetMethod("registerStringProtocol",
-                 &Protocol::RegisterProtocol<URLRequestStringJob>)
-      .SetMethod("registerBufferProtocol",
-                 &Protocol::RegisterProtocol<URLRequestBufferJob>)
-      .SetMethod("registerFileProtocol",
-                 &Protocol::RegisterProtocol<URLRequestAsyncAsarJob>)
-      .SetMethod("registerHttpProtocol",
-                 &Protocol::RegisterProtocol<URLRequestFetchJob>)
-      .SetMethod("registerStreamProtocol",
-                 &Protocol::RegisterProtocol<URLRequestStreamJob>)
-      .SetMethod("unregisterProtocol", &Protocol::UnregisterProtocol)
-      .SetMethod("isProtocolHandled", &Protocol::IsProtocolHandled)
-      .SetMethod("interceptStringProtocol",
-                 &Protocol::InterceptProtocol<URLRequestStringJob>)
-      .SetMethod("interceptBufferProtocol",
-                 &Protocol::InterceptProtocol<URLRequestBufferJob>)
-      .SetMethod("interceptFileProtocol",
-                 &Protocol::InterceptProtocol<URLRequestAsyncAsarJob>)
-      .SetMethod("interceptHttpProtocol",
-                 &Protocol::InterceptProtocol<URLRequestFetchJob>)
-      .SetMethod("interceptStreamProtocol",
-                 &Protocol::InterceptProtocol<URLRequestStreamJob>)
-      .SetMethod("uninterceptProtocol", &Protocol::UninterceptProtocol);
-}
-
-}  // namespace api
-
-}  // namespace electron
-
-namespace {
-
-void RegisterSchemesAsPrivileged(v8::Local<v8::Value> val,
-                                 mate::Arguments* args) {
-  if (electron::Browser::Get()->is_ready()) {
-    args->ThrowError(
-        "protocol.registerSchemesAsPrivileged should be called before "
-        "app is ready");
-    return;
-  }
-
-  electron::api::RegisterSchemesAsPrivileged(val, args);
-}
-
-void Initialize(v8::Local<v8::Object> exports,
-                v8::Local<v8::Value> unused,
-                v8::Local<v8::Context> context,
-                void* priv) {
-  v8::Isolate* isolate = context->GetIsolate();
-  mate::Dictionary dict(isolate, exports);
-  dict.SetMethod("registerSchemesAsPrivileged", &RegisterSchemesAsPrivileged);
-  dict.SetMethod("getStandardSchemes", &electron::api::GetStandardSchemes);
-}
-
-}  // namespace
-
-NODE_LINKED_MODULE_CONTEXT_AWARE(atom_browser_protocol, Initialize)

+ 0 - 198
shell/browser/api/atom_api_protocol.h

@@ -1,198 +0,0 @@
-// Copyright (c) 2013 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#ifndef SHELL_BROWSER_API_ATOM_API_PROTOCOL_H_
-#define SHELL_BROWSER_API_ATOM_API_PROTOCOL_H_
-
-#include <map>
-#include <memory>
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "base/callback.h"
-#include "base/memory/weak_ptr.h"
-#include "base/task/post_task.h"
-#include "content/public/browser/browser_task_traits.h"
-#include "content/public/browser/browser_thread.h"
-#include "native_mate/arguments.h"
-#include "native_mate/dictionary.h"
-#include "native_mate/handle.h"
-#include "net/url_request/url_request_context.h"
-#include "shell/browser/api/trackable_object.h"
-#include "shell/browser/atom_browser_context.h"
-#include "shell/browser/net/atom_url_request_job_factory.h"
-#include "shell/common/promise_util.h"
-
-namespace base {
-class DictionaryValue;
-}
-
-namespace electron {
-
-namespace api {
-
-std::vector<std::string> GetStandardSchemes();
-
-void RegisterSchemesAsPrivileged(v8::Local<v8::Value> val,
-                                 mate::Arguments* args);
-
-class Protocol : public mate::TrackableObject<Protocol> {
- public:
-  using Handler = base::RepeatingCallback<void(const base::DictionaryValue&,
-                                               v8::Local<v8::Value>)>;
-  using CompletionCallback =
-      base::RepeatingCallback<void(v8::Local<v8::Value>)>;
-
-  static mate::Handle<Protocol> Create(v8::Isolate* isolate,
-                                       AtomBrowserContext* browser_context);
-
-  static void BuildPrototype(v8::Isolate* isolate,
-                             v8::Local<v8::FunctionTemplate> prototype);
-
- protected:
-  Protocol(v8::Isolate* isolate, AtomBrowserContext* browser_context);
-  ~Protocol() override;
-
- private:
-  // Possible errors.
-  enum class ProtocolError {
-    OK,    // no error
-    FAIL,  // operation failed, should never occur
-    REGISTERED,
-    NOT_REGISTERED,
-    INTERCEPTED,
-    NOT_INTERCEPTED,
-  };
-
-  // The protocol handler that will create a protocol handler for certain
-  // request job.
-  template <typename RequestJob>
-  class CustomProtocolHandler
-      : public net::URLRequestJobFactory::ProtocolHandler {
-   public:
-    CustomProtocolHandler(v8::Isolate* isolate,
-                          net::URLRequestContextGetter* request_context,
-                          const Handler& handler)
-        : isolate_(isolate),
-          request_context_(request_context),
-          handler_(handler) {}
-    ~CustomProtocolHandler() override {}
-
-    net::URLRequestJob* MaybeCreateJob(
-        net::URLRequest* request,
-        net::NetworkDelegate* network_delegate) const override {
-      RequestJob* request_job = new RequestJob(request, network_delegate);
-      request_job->SetHandlerInfo(isolate_, request_context_, handler_);
-      return request_job;
-    }
-
-   private:
-    v8::Isolate* isolate_;
-    net::URLRequestContextGetter* request_context_;
-    Protocol::Handler handler_;
-
-    DISALLOW_COPY_AND_ASSIGN(CustomProtocolHandler);
-  };
-
-  // Register the protocol with certain request job.
-  template <typename RequestJob>
-  void RegisterProtocol(const std::string& scheme,
-                        const Handler& handler,
-                        mate::Arguments* args) {
-    CompletionCallback callback;
-    args->GetNext(&callback);
-    auto* getter = static_cast<URLRequestContextGetter*>(
-        browser_context_->GetRequestContext());
-    base::PostTaskWithTraitsAndReplyWithResult(
-        FROM_HERE, {content::BrowserThread::IO},
-        base::BindOnce(&Protocol::RegisterProtocolInIO<RequestJob>,
-                       base::RetainedRef(getter), isolate(), scheme, handler),
-        base::BindOnce(&Protocol::OnIOCompleted, GetWeakPtr(), callback));
-  }
-  template <typename RequestJob>
-  static ProtocolError RegisterProtocolInIO(
-      scoped_refptr<URLRequestContextGetter> request_context_getter,
-      v8::Isolate* isolate,
-      const std::string& scheme,
-      const Handler& handler) {
-    auto* job_factory = request_context_getter->job_factory();
-    if (job_factory->IsHandledProtocol(scheme))
-      return ProtocolError::REGISTERED;
-    auto protocol_handler = std::make_unique<CustomProtocolHandler<RequestJob>>(
-        isolate, request_context_getter.get(), handler);
-    if (job_factory->SetProtocolHandler(scheme, std::move(protocol_handler)))
-      return ProtocolError::OK;
-    else
-      return ProtocolError::FAIL;
-  }
-
-  // Unregister the protocol handler that handles |scheme|.
-  void UnregisterProtocol(const std::string& scheme, mate::Arguments* args);
-  static ProtocolError UnregisterProtocolInIO(
-      scoped_refptr<URLRequestContextGetter> request_context_getter,
-      const std::string& scheme);
-
-  // Whether the protocol has handler registered.
-  v8::Local<v8::Promise> IsProtocolHandled(const std::string& scheme);
-
-  // Replace the protocol handler with a new one.
-  template <typename RequestJob>
-  void InterceptProtocol(const std::string& scheme,
-                         const Handler& handler,
-                         mate::Arguments* args) {
-    CompletionCallback callback;
-    args->GetNext(&callback);
-    auto* getter = static_cast<URLRequestContextGetter*>(
-        browser_context_->GetRequestContext());
-    base::PostTaskWithTraitsAndReplyWithResult(
-        FROM_HERE, {content::BrowserThread::IO},
-        base::BindOnce(&Protocol::InterceptProtocolInIO<RequestJob>,
-                       base::RetainedRef(getter), isolate(), scheme, handler),
-        base::BindOnce(&Protocol::OnIOCompleted, GetWeakPtr(), callback));
-  }
-  template <typename RequestJob>
-  static ProtocolError InterceptProtocolInIO(
-      scoped_refptr<URLRequestContextGetter> request_context_getter,
-      v8::Isolate* isolate,
-      const std::string& scheme,
-      const Handler& handler) {
-    auto* job_factory = request_context_getter->job_factory();
-    if (!job_factory->IsHandledProtocol(scheme))
-      return ProtocolError::NOT_REGISTERED;
-    // It is possible a protocol is handled but can not be intercepted.
-    if (!job_factory->HasProtocolHandler(scheme))
-      return ProtocolError::FAIL;
-    auto protocol_handler = std::make_unique<CustomProtocolHandler<RequestJob>>(
-        isolate, request_context_getter.get(), handler);
-    if (!job_factory->InterceptProtocol(scheme, std::move(protocol_handler)))
-      return ProtocolError::INTERCEPTED;
-    return ProtocolError::OK;
-  }
-
-  // Restore the |scheme| to its original protocol handler.
-  void UninterceptProtocol(const std::string& scheme, mate::Arguments* args);
-  static ProtocolError UninterceptProtocolInIO(
-      scoped_refptr<URLRequestContextGetter> request_context_getter,
-      const std::string& scheme);
-
-  // Convert error code to JS exception and call the callback.
-  void OnIOCompleted(const CompletionCallback& callback, ProtocolError error);
-
-  // Convert error code to string.
-  std::string ErrorCodeToString(ProtocolError error);
-
-  base::WeakPtr<Protocol> GetWeakPtr() { return weak_factory_.GetWeakPtr(); }
-
-  scoped_refptr<AtomBrowserContext> browser_context_;
-  base::WeakPtrFactory<Protocol> weak_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(Protocol);
-};
-
-}  // namespace api
-
-}  // namespace electron
-
-#endif  // SHELL_BROWSER_API_ATOM_API_PROTOCOL_H_

+ 144 - 0
shell/browser/api/atom_api_protocol_ns.cc

@@ -6,17 +6,133 @@
 
 #include <memory>
 #include <utility>
+#include <vector>
 
 #include "base/stl_util.h"
+#include "content/public/browser/child_process_security_policy.h"
 #include "shell/browser/atom_browser_context.h"
+#include "shell/browser/browser.h"
 #include "shell/common/deprecate_util.h"
 #include "shell/common/native_mate_converters/net_converter.h"
 #include "shell/common/native_mate_converters/once_callback.h"
+#include "shell/common/options_switches.h"
 #include "shell/common/promise_util.h"
 
+namespace {
+
+// List of registered custom standard schemes.
+std::vector<std::string> g_standard_schemes;
+
+struct SchemeOptions {
+  bool standard = false;
+  bool secure = false;
+  bool bypassCSP = false;
+  bool allowServiceWorkers = false;
+  bool supportFetchAPI = false;
+  bool corsEnabled = false;
+};
+
+struct CustomScheme {
+  std::string scheme;
+  SchemeOptions options;
+};
+
+}  // namespace
+
+namespace mate {
+
+template <>
+struct Converter<CustomScheme> {
+  static bool FromV8(v8::Isolate* isolate,
+                     v8::Local<v8::Value> val,
+                     CustomScheme* out) {
+    mate::Dictionary dict;
+    if (!ConvertFromV8(isolate, val, &dict))
+      return false;
+    if (!dict.Get("scheme", &(out->scheme)))
+      return false;
+    mate::Dictionary opt;
+    // options are optional. Default values specified in SchemeOptions are used
+    if (dict.Get("privileges", &opt)) {
+      opt.Get("standard", &(out->options.standard));
+      opt.Get("supportFetchAPI", &(out->options.supportFetchAPI));
+      opt.Get("secure", &(out->options.secure));
+      opt.Get("bypassCSP", &(out->options.bypassCSP));
+      opt.Get("allowServiceWorkers", &(out->options.allowServiceWorkers));
+      opt.Get("supportFetchAPI", &(out->options.supportFetchAPI));
+      opt.Get("corsEnabled", &(out->options.corsEnabled));
+    }
+    return true;
+  }
+};
+
+}  // namespace mate
+
 namespace electron {
 namespace api {
 
+std::vector<std::string> GetStandardSchemes() {
+  return g_standard_schemes;
+}
+
+void RegisterSchemesAsPrivileged(v8::Local<v8::Value> val,
+                                 mate::Arguments* args) {
+  std::vector<CustomScheme> custom_schemes;
+  if (!mate::ConvertFromV8(args->isolate(), val, &custom_schemes)) {
+    args->ThrowError("Argument must be an array of custom schemes.");
+    return;
+  }
+
+  std::vector<std::string> secure_schemes, cspbypassing_schemes, fetch_schemes,
+      service_worker_schemes, cors_schemes;
+  for (const auto& custom_scheme : custom_schemes) {
+    // Register scheme to privileged list (https, wss, data, chrome-extension)
+    if (custom_scheme.options.standard) {
+      auto* policy = content::ChildProcessSecurityPolicy::GetInstance();
+      url::AddStandardScheme(custom_scheme.scheme.c_str(),
+                             url::SCHEME_WITH_HOST);
+      g_standard_schemes.push_back(custom_scheme.scheme);
+      policy->RegisterWebSafeScheme(custom_scheme.scheme);
+    }
+    if (custom_scheme.options.secure) {
+      secure_schemes.push_back(custom_scheme.scheme);
+      url::AddSecureScheme(custom_scheme.scheme.c_str());
+    }
+    if (custom_scheme.options.bypassCSP) {
+      cspbypassing_schemes.push_back(custom_scheme.scheme);
+      url::AddCSPBypassingScheme(custom_scheme.scheme.c_str());
+    }
+    if (custom_scheme.options.corsEnabled) {
+      cors_schemes.push_back(custom_scheme.scheme);
+      url::AddCorsEnabledScheme(custom_scheme.scheme.c_str());
+    }
+    if (custom_scheme.options.supportFetchAPI) {
+      fetch_schemes.push_back(custom_scheme.scheme);
+    }
+    if (custom_scheme.options.allowServiceWorkers) {
+      service_worker_schemes.push_back(custom_scheme.scheme);
+    }
+  }
+
+  const auto AppendSchemesToCmdLine = [](const char* switch_name,
+                                         std::vector<std::string> schemes) {
+    // Add the schemes to command line switches, so child processes can also
+    // register them.
+    base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
+        switch_name, base::JoinString(schemes, ","));
+  };
+
+  AppendSchemesToCmdLine(electron::switches::kSecureSchemes, secure_schemes);
+  AppendSchemesToCmdLine(electron::switches::kBypassCSPSchemes,
+                         cspbypassing_schemes);
+  AppendSchemesToCmdLine(electron::switches::kCORSSchemes, cors_schemes);
+  AppendSchemesToCmdLine(electron::switches::kFetchSchemes, fetch_schemes);
+  AppendSchemesToCmdLine(electron::switches::kServiceWorkerSchemes,
+                         service_worker_schemes);
+  AppendSchemesToCmdLine(electron::switches::kStandardSchemes,
+                         g_standard_schemes);
+}
+
 namespace {
 
 const char* kBuiltinSchemes[] = {
@@ -192,3 +308,31 @@ void ProtocolNS::BuildPrototype(v8::Isolate* isolate,
 
 }  // namespace api
 }  // namespace electron
+
+namespace {
+
+void RegisterSchemesAsPrivileged(v8::Local<v8::Value> val,
+                                 mate::Arguments* args) {
+  if (electron::Browser::Get()->is_ready()) {
+    args->ThrowError(
+        "protocol.registerSchemesAsPrivileged should be called before "
+        "app is ready");
+    return;
+  }
+
+  electron::api::RegisterSchemesAsPrivileged(val, args);
+}
+
+void Initialize(v8::Local<v8::Object> exports,
+                v8::Local<v8::Value> unused,
+                v8::Local<v8::Context> context,
+                void* priv) {
+  v8::Isolate* isolate = context->GetIsolate();
+  mate::Dictionary dict(isolate, exports);
+  dict.SetMethod("registerSchemesAsPrivileged", &RegisterSchemesAsPrivileged);
+  dict.SetMethod("getStandardSchemes", &electron::api::GetStandardSchemes);
+}
+
+}  // namespace
+
+NODE_LINKED_MODULE_CONTEXT_AWARE(atom_browser_protocol, Initialize)

+ 6 - 0
shell/browser/api/atom_api_protocol_ns.h

@@ -6,6 +6,7 @@
 #define SHELL_BROWSER_API_ATOM_API_PROTOCOL_NS_H_
 
 #include <string>
+#include <vector>
 
 #include "content/public/browser/content_browser_client.h"
 #include "native_mate/dictionary.h"
@@ -19,6 +20,11 @@ class AtomBrowserContext;
 
 namespace api {
 
+std::vector<std::string> GetStandardSchemes();
+
+void RegisterSchemesAsPrivileged(v8::Local<v8::Value> val,
+                                 mate::Arguments* args);
+
 // Possible errors.
 enum class ProtocolError {
   OK,  // no error

+ 19 - 61
shell/browser/api/atom_api_session.cc

@@ -45,9 +45,7 @@
 #include "shell/browser/api/atom_api_cookies.h"
 #include "shell/browser/api/atom_api_download_item.h"
 #include "shell/browser/api/atom_api_net_log.h"
-#include "shell/browser/api/atom_api_protocol.h"
 #include "shell/browser/api/atom_api_protocol_ns.h"
-#include "shell/browser/api/atom_api_web_request.h"
 #include "shell/browser/api/atom_api_web_request_ns.h"
 #include "shell/browser/atom_browser_context.h"
 #include "shell/browser/atom_browser_main_parts.h"
@@ -122,15 +120,6 @@ uint32_t GetQuotaMask(const std::vector<std::string>& quota_types) {
   return quota_mask;
 }
 
-void SetUserAgentInIO(scoped_refptr<net::URLRequestContextGetter> getter,
-                      const std::string& accept_lang,
-                      const std::string& user_agent) {
-  getter->GetURLRequestContext()->set_http_user_agent_settings(
-      new net::StaticHttpUserAgentSettings(
-          net::HttpUtil::GenerateAcceptLanguageHeader(accept_lang),
-          user_agent));
-}
-
 }  // namespace
 
 namespace mate {
@@ -179,14 +168,6 @@ const char kPersistPrefix[] = "persist:";
 // Referenced session objects.
 std::map<uint32_t, v8::Global<v8::Object>> g_sessions;
 
-void SetCertVerifyProcInIO(
-    const scoped_refptr<net::URLRequestContextGetter>& context_getter,
-    const AtomCertVerifier::VerifyProc& proc) {
-  auto* request_context = context_getter->GetURLRequestContext();
-  static_cast<AtomCertVerifier*>(request_context->cert_verifier())
-      ->SetVerifyProc(proc);
-}
-
 void DownloadIdCallback(content::DownloadManager* download_manager,
                         const base::FilePath& path,
                         const std::vector<GURL>& url_chain,
@@ -472,26 +453,17 @@ void Session::SetCertVerifyProc(v8::Local<v8::Value> val,
     return;
   }
 
-  if (base::FeatureList::IsEnabled(network::features::kNetworkService)) {
-    network::mojom::CertVerifierClientPtr cert_verifier_client;
-    if (proc) {
-      mojo::MakeStrongBinding(
-          std::make_unique<ElectronCertVerifierClient>(proc),
-          mojo::MakeRequest(&cert_verifier_client));
-    }
-    content::BrowserContext::GetDefaultStoragePartition(browser_context_.get())
-        ->GetNetworkContext()
-        ->SetCertVerifierClient(std::move(cert_verifier_client));
-
-    // This causes the cert verifier cache to be cleared.
-    content::GetNetworkService()->OnCertDBChanged();
-  } else {
-    base::PostTaskWithTraits(
-        FROM_HERE, {BrowserThread::IO},
-        base::BindOnce(&SetCertVerifyProcInIO,
-                       WrapRefCounted(browser_context_->GetRequestContext()),
-                       base::BindRepeating(&WrapVerifyProc, proc)));
+  network::mojom::CertVerifierClientPtr cert_verifier_client;
+  if (proc) {
+    mojo::MakeStrongBinding(std::make_unique<ElectronCertVerifierClient>(proc),
+                            mojo::MakeRequest(&cert_verifier_client));
   }
+  content::BrowserContext::GetDefaultStoragePartition(browser_context_.get())
+      ->GetNetworkContext()
+      ->SetCertVerifierClient(std::move(cert_verifier_client));
+
+  // This causes the cert verifier cache to be cleared.
+  content::GetNetworkService()->OnCertDBChanged();
 }
 
 void Session::SetPermissionRequestHandler(v8::Local<v8::Value> val,
@@ -563,22 +535,14 @@ v8::Local<v8::Promise> Session::ClearAuthCache() {
 
 void Session::AllowNTLMCredentialsForDomains(const std::string& domains) {
   auto auth_params = CreateHttpAuthDynamicParams();
-  auth_params->server_whitelist = domains;
+  auth_params->server_allowlist = domains;
   content::GetNetworkService()->ConfigureHttpAuthPrefs(std::move(auth_params));
 }
 
 void Session::SetUserAgent(const std::string& user_agent,
                            mate::Arguments* args) {
-  browser_context_->SetUserAgent(user_agent);
-
-  std::string accept_lang = g_browser_process->GetApplicationLocale();
-  args->GetNext(&accept_lang);
-
-  scoped_refptr<net::URLRequestContextGetter> getter(
-      browser_context_->GetRequestContext());
-  getter->GetNetworkTaskRunner()->PostTask(
-      FROM_HERE,
-      base::BindOnce(&SetUserAgentInIO, getter, accept_lang, user_agent));
+  CHECK(false)
+      << "TODO: This was disabled when the network service was turned on";
 }
 
 std::string Session::GetUserAgent() {
@@ -661,10 +625,7 @@ v8::Local<v8::Value> Session::Cookies(v8::Isolate* isolate) {
 v8::Local<v8::Value> Session::Protocol(v8::Isolate* isolate) {
   if (protocol_.IsEmpty()) {
     v8::Local<v8::Value> handle;
-    if (base::FeatureList::IsEnabled(network::features::kNetworkService))
-      handle = ProtocolNS::Create(isolate, browser_context()).ToV8();
-    else
-      handle = Protocol::Create(isolate, browser_context()).ToV8();
+    handle = ProtocolNS::Create(isolate, browser_context()).ToV8();
     protocol_.Reset(isolate, handle);
   }
   return v8::Local<v8::Value>::New(isolate, protocol_);
@@ -673,10 +634,7 @@ v8::Local<v8::Value> Session::Protocol(v8::Isolate* isolate) {
 v8::Local<v8::Value> Session::WebRequest(v8::Isolate* isolate) {
   if (web_request_.IsEmpty()) {
     v8::Local<v8::Value> handle;
-    if (base::FeatureList::IsEnabled(network::features::kNetworkService))
-      handle = WebRequestNS::Create(isolate, browser_context()).ToV8();
-    else
-      handle = WebRequest::Create(isolate, browser_context()).ToV8();
+    handle = WebRequestNS::Create(isolate, browser_context()).ToV8();
     web_request_.Reset(isolate, handle);
   }
   return v8::Local<v8::Value>::New(isolate, web_request_);
@@ -774,7 +732,7 @@ namespace {
 
 using electron::api::Cookies;
 using electron::api::NetLog;
-using electron::api::Protocol;
+using electron::api::ProtocolNS;
 using electron::api::Session;
 
 v8::Local<v8::Value> FromPartition(const std::string& partition,
@@ -803,9 +761,9 @@ void Initialize(v8::Local<v8::Object> exports,
   dict.Set(
       "NetLog",
       NetLog::GetConstructor(isolate)->GetFunction(context).ToLocalChecked());
-  dict.Set(
-      "Protocol",
-      Protocol::GetConstructor(isolate)->GetFunction(context).ToLocalChecked());
+  dict.Set("Protocol", ProtocolNS::GetConstructor(isolate)
+                           ->GetFunction(context)
+                           .ToLocalChecked());
   dict.SetMethod("fromPartition", &FromPartition);
 }
 

+ 0 - 496
shell/browser/api/atom_api_url_request.cc

@@ -1,496 +0,0 @@
-// Copyright (c) 2016 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#include "shell/browser/api/atom_api_url_request.h"
-
-#include <string>
-
-#include "native_mate/dictionary.h"
-#include "shell/browser/api/atom_api_session.h"
-#include "shell/browser/net/atom_url_request.h"
-#include "shell/common/api/event_emitter_caller.h"
-#include "shell/common/native_mate_converters/gurl_converter.h"
-#include "shell/common/native_mate_converters/net_converter.h"
-#include "shell/common/native_mate_converters/once_callback.h"
-#include "shell/common/native_mate_converters/string16_converter.h"
-#include "shell/common/node_includes.h"
-
-namespace mate {
-
-template <>
-struct Converter<scoped_refptr<const net::IOBufferWithSize>> {
-  static v8::Local<v8::Value> ToV8(
-      v8::Isolate* isolate,
-      scoped_refptr<const net::IOBufferWithSize> buffer) {
-    return node::Buffer::Copy(isolate, buffer->data(), buffer->size())
-        .ToLocalChecked();
-  }
-
-  static bool FromV8(v8::Isolate* isolate,
-                     v8::Local<v8::Value> val,
-                     scoped_refptr<const net::IOBufferWithSize>* out) {
-    auto size = node::Buffer::Length(val);
-
-    if (size == 0) {
-      // Support conversion from empty buffer. A use case is
-      // a GET request without body.
-      // Since zero-sized IOBuffer(s) are not supported, we set the
-      // out pointer to null.
-      *out = nullptr;
-      return true;
-    }
-    auto* data = node::Buffer::Data(val);
-    if (!data) {
-      // This is an error as size is positive but data is null.
-      return false;
-    }
-
-    *out = new net::IOBufferWithSize(size);
-    // We do a deep copy. We could have used Buffer's internal memory
-    // but that is much more complicated to be properly handled.
-    memcpy((*out)->data(), data, size);
-    return true;
-  }
-};
-
-}  // namespace mate
-
-namespace electron {
-namespace api {
-
-template <typename Flags>
-URLRequest::StateBase<Flags>::StateBase(Flags initialState)
-    : state_(initialState) {}
-
-template <typename Flags>
-void URLRequest::StateBase<Flags>::SetFlag(Flags flag) {
-  state_ =
-      static_cast<Flags>(static_cast<int>(state_) | static_cast<int>(flag));
-}
-
-template <typename Flags>
-bool URLRequest::StateBase<Flags>::operator==(Flags flag) const {
-  return state_ == flag;
-}
-
-template <typename Flags>
-bool URLRequest::StateBase<Flags>::IsFlagSet(Flags flag) const {
-  return static_cast<int>(state_) & static_cast<int>(flag);
-}
-
-URLRequest::RequestState::RequestState()
-    : StateBase(RequestStateFlags::kNotStarted) {}
-
-bool URLRequest::RequestState::NotStarted() const {
-  return *this == RequestStateFlags::kNotStarted;
-}
-
-bool URLRequest::RequestState::Started() const {
-  return IsFlagSet(RequestStateFlags::kStarted);
-}
-
-bool URLRequest::RequestState::Finished() const {
-  return IsFlagSet(RequestStateFlags::kFinished);
-}
-
-bool URLRequest::RequestState::Canceled() const {
-  return IsFlagSet(RequestStateFlags::kCanceled);
-}
-
-bool URLRequest::RequestState::Failed() const {
-  return IsFlagSet(RequestStateFlags::kFailed);
-}
-
-bool URLRequest::RequestState::Closed() const {
-  return IsFlagSet(RequestStateFlags::kClosed);
-}
-
-URLRequest::ResponseState::ResponseState()
-    : StateBase(ResponseStateFlags::kNotStarted) {}
-
-bool URLRequest::ResponseState::NotStarted() const {
-  return *this == ResponseStateFlags::kNotStarted;
-}
-
-bool URLRequest::ResponseState::Started() const {
-  return IsFlagSet(ResponseStateFlags::kStarted);
-}
-
-bool URLRequest::ResponseState::Ended() const {
-  return IsFlagSet(ResponseStateFlags::kEnded);
-}
-
-bool URLRequest::ResponseState::Failed() const {
-  return IsFlagSet(ResponseStateFlags::kFailed);
-}
-
-mate::Dictionary URLRequest::GetUploadProgress(v8::Isolate* isolate) {
-  mate::Dictionary progress = mate::Dictionary::CreateEmpty(isolate);
-
-  if (atom_request_) {
-    progress.Set("active", true);
-    atom_request_->GetUploadProgress(&progress);
-  } else {
-    progress.Set("active", false);
-  }
-  return progress;
-}
-
-URLRequest::URLRequest(v8::Isolate* isolate, v8::Local<v8::Object> wrapper) {
-  InitWith(isolate, wrapper);
-}
-
-URLRequest::~URLRequest() {
-  // A request has been created in JS, it was not used and then
-  // it got collected, no close event to cleanup, only destructor
-  // is called.
-  if (atom_request_) {
-    atom_request_->Terminate();
-  }
-}
-
-// static
-mate::WrappableBase* URLRequest::New(mate::Arguments* args) {
-  auto* isolate = args->isolate();
-  v8::Local<v8::Object> options;
-  args->GetNext(&options);
-  mate::Dictionary dict(isolate, options);
-  std::string method;
-  dict.Get("method", &method);
-  std::string url;
-  dict.Get("url", &url);
-  std::string redirect_policy;
-  dict.Get("redirect", &redirect_policy);
-  std::string partition;
-  mate::Handle<api::Session> session;
-  if (dict.Get("session", &session)) {
-  } else if (dict.Get("partition", &partition)) {
-    session = Session::FromPartition(isolate, partition);
-  } else {
-    // Use the default session if not specified.
-    session = Session::FromPartition(isolate, "");
-  }
-  auto* browser_context = session->browser_context();
-  auto* api_url_request = new URLRequest(args->isolate(), args->GetThis());
-  auto atom_url_request = AtomURLRequest::Create(
-      browser_context, method, url, redirect_policy, api_url_request);
-
-  api_url_request->atom_request_ = atom_url_request;
-
-  return api_url_request;
-}
-
-// static
-void URLRequest::BuildPrototype(v8::Isolate* isolate,
-                                v8::Local<v8::FunctionTemplate> prototype) {
-  prototype->SetClassName(mate::StringToV8(isolate, "URLRequest"));
-  mate::ObjectTemplateBuilder(isolate, prototype->PrototypeTemplate())
-      // Request API
-      .MakeDestroyable()
-      .SetMethod("write", &URLRequest::Write)
-      .SetMethod("cancel", &URLRequest::Cancel)
-      .SetMethod("setExtraHeader", &URLRequest::SetExtraHeader)
-      .SetMethod("removeExtraHeader", &URLRequest::RemoveExtraHeader)
-      .SetMethod("setChunkedUpload", &URLRequest::SetChunkedUpload)
-      .SetMethod("followRedirect", &URLRequest::FollowRedirect)
-      .SetMethod("_setLoadFlags", &URLRequest::SetLoadFlags)
-      .SetMethod("getUploadProgress", &URLRequest::GetUploadProgress)
-      .SetProperty("notStarted", &URLRequest::NotStarted)
-      .SetProperty("finished", &URLRequest::Finished)
-      // Response APi
-      .SetProperty("statusCode", &URLRequest::StatusCode)
-      .SetProperty("statusMessage", &URLRequest::StatusMessage)
-      .SetProperty("rawResponseHeaders", &URLRequest::RawResponseHeaders)
-      .SetProperty("httpVersionMajor", &URLRequest::ResponseHttpVersionMajor)
-      .SetProperty("httpVersionMinor", &URLRequest::ResponseHttpVersionMinor);
-}
-
-bool URLRequest::NotStarted() const {
-  return request_state_.NotStarted();
-}
-
-bool URLRequest::Finished() const {
-  return request_state_.Finished();
-}
-
-bool URLRequest::Canceled() const {
-  return request_state_.Canceled();
-}
-
-bool URLRequest::Write(scoped_refptr<const net::IOBufferWithSize> buffer,
-                       bool is_last) {
-  if (request_state_.Canceled() || request_state_.Failed() ||
-      request_state_.Finished() || request_state_.Closed()) {
-    return false;
-  }
-
-  if (request_state_.NotStarted()) {
-    request_state_.SetFlag(RequestStateFlags::kStarted);
-    // Pin on first write.
-    Pin();
-  }
-
-  if (is_last) {
-    request_state_.SetFlag(RequestStateFlags::kFinished);
-    EmitRequestEvent(true, "finish");
-  }
-
-  DCHECK(atom_request_);
-  if (atom_request_) {
-    return atom_request_->Write(buffer, is_last);
-  }
-  return false;
-}
-
-void URLRequest::Cancel() {
-  if (request_state_.Canceled() || request_state_.Closed()) {
-    // Cancel only once.
-    return;
-  }
-
-  // Mark as canceled.
-  request_state_.SetFlag(RequestStateFlags::kCanceled);
-
-  DCHECK(atom_request_);
-  if (atom_request_ && request_state_.Started()) {
-    // Really cancel if it was started.
-    atom_request_->Cancel();
-  }
-  EmitRequestEvent(true, "abort");
-
-  if (response_state_.Started() && !response_state_.Ended()) {
-    EmitResponseEvent(true, "aborted");
-  }
-  Close();
-}
-
-void URLRequest::FollowRedirect() {
-  if (request_state_.Canceled() || request_state_.Closed()) {
-    return;
-  }
-
-  DCHECK(atom_request_);
-  if (atom_request_) {
-    atom_request_->FollowRedirect();
-  }
-}
-
-bool URLRequest::SetExtraHeader(const std::string& name,
-                                const std::string& value) {
-  // Request state must be in the initial non started state.
-  if (!request_state_.NotStarted()) {
-    // Cannot change headers after send.
-    return false;
-  }
-
-  if (!net::HttpUtil::IsValidHeaderName(name)) {
-    return false;
-  }
-
-  if (!net::HttpUtil::IsValidHeaderValue(value)) {
-    return false;
-  }
-
-  DCHECK(atom_request_);
-  if (atom_request_) {
-    atom_request_->SetExtraHeader(name, value);
-  }
-  return true;
-}
-
-void URLRequest::RemoveExtraHeader(const std::string& name) {
-  // State must be equal to not started.
-  if (!request_state_.NotStarted()) {
-    // Cannot change headers after send.
-    return;
-  }
-  DCHECK(atom_request_);
-  if (atom_request_) {
-    atom_request_->RemoveExtraHeader(name);
-  }
-}
-
-void URLRequest::SetChunkedUpload(bool is_chunked_upload) {
-  // State must be equal to not started.
-  if (!request_state_.NotStarted()) {
-    // Cannot change headers after send.
-    return;
-  }
-  DCHECK(atom_request_);
-  if (atom_request_) {
-    atom_request_->SetChunkedUpload(is_chunked_upload);
-  }
-}
-
-void URLRequest::SetLoadFlags(int flags) {
-  // State must be equal to not started.
-  if (!request_state_.NotStarted()) {
-    // Cannot change load flags after start.
-    return;
-  }
-  DCHECK(atom_request_);
-  if (atom_request_) {
-    atom_request_->SetLoadFlags(flags);
-  }
-}
-
-void URLRequest::OnReceivedRedirect(
-    int status_code,
-    const std::string& method,
-    const GURL& url,
-    scoped_refptr<net::HttpResponseHeaders> response_headers) {
-  if (request_state_.Canceled() || request_state_.Closed()) {
-    return;
-  }
-
-  DCHECK(atom_request_);
-  if (!atom_request_) {
-    return;
-  }
-
-  EmitRequestEvent(false, "redirect", status_code, method, url,
-                   response_headers.get());
-}
-
-void URLRequest::OnAuthenticationRequired(
-    const net::AuthChallengeInfo& auth_info) {
-  if (request_state_.Canceled() || request_state_.Closed()) {
-    return;
-  }
-
-  DCHECK(atom_request_);
-  if (!atom_request_) {
-    return;
-  }
-
-  Emit("login", auth_info,
-       base::BindOnce(&AtomURLRequest::PassLoginInformation, atom_request_));
-}
-
-void URLRequest::OnResponseStarted(
-    scoped_refptr<net::HttpResponseHeaders> response_headers) {
-  if (request_state_.Canceled() || request_state_.Failed() ||
-      request_state_.Closed()) {
-    // Don't emit any event after request cancel.
-    return;
-  }
-  response_headers_ = response_headers;
-  response_state_.SetFlag(ResponseStateFlags::kStarted);
-  Emit("response");
-}
-
-void URLRequest::OnResponseData(
-    scoped_refptr<const net::IOBufferWithSize> buffer) {
-  if (request_state_.Canceled() || request_state_.Closed() ||
-      request_state_.Failed() || response_state_.Failed()) {
-    // In case we received an unexpected event from Chromium net,
-    // don't emit any data event after request cancel/error/close.
-    return;
-  }
-  if (!buffer || !buffer->data() || !buffer->size()) {
-    return;
-  }
-  Emit("data", buffer);
-}
-
-void URLRequest::OnResponseCompleted() {
-  if (request_state_.Canceled() || request_state_.Closed() ||
-      request_state_.Failed() || response_state_.Failed()) {
-    // In case we received an unexpected event from Chromium net,
-    // don't emit any data event after request cancel/error/close.
-    return;
-  }
-  response_state_.SetFlag(ResponseStateFlags::kEnded);
-  Emit("end");
-  Close();
-}
-
-void URLRequest::OnError(const std::string& error, bool isRequestError) {
-  auto error_object = v8::Exception::Error(mate::StringToV8(isolate(), error));
-  if (isRequestError) {
-    request_state_.SetFlag(RequestStateFlags::kFailed);
-    EmitRequestEvent(false, "error", error_object);
-  } else {
-    response_state_.SetFlag(ResponseStateFlags::kFailed);
-    EmitResponseEvent(false, "error", error_object);
-  }
-  Close();
-}
-
-int URLRequest::StatusCode() const {
-  if (response_headers_) {
-    return response_headers_->response_code();
-  }
-  return -1;
-}
-
-std::string URLRequest::StatusMessage() const {
-  std::string result;
-  if (response_headers_) {
-    result = response_headers_->GetStatusText();
-  }
-  return result;
-}
-
-net::HttpResponseHeaders* URLRequest::RawResponseHeaders() const {
-  return response_headers_.get();
-}
-
-uint32_t URLRequest::ResponseHttpVersionMajor() const {
-  if (response_headers_) {
-    return response_headers_->GetHttpVersion().major_value();
-  }
-  return 0;
-}
-
-uint32_t URLRequest::ResponseHttpVersionMinor() const {
-  if (response_headers_) {
-    return response_headers_->GetHttpVersion().minor_value();
-  }
-  return 0;
-}
-
-void URLRequest::Close() {
-  if (!request_state_.Closed()) {
-    request_state_.SetFlag(RequestStateFlags::kClosed);
-    if (response_state_.Started()) {
-      // Emit a close event if we really have a response object.
-      EmitResponseEvent(true, "close");
-    }
-    EmitRequestEvent(true, "close");
-  }
-  Unpin();
-  if (atom_request_) {
-    // A request has been created in JS, used and then it ended.
-    // We release unneeded net resources.
-    atom_request_->Terminate();
-  }
-  atom_request_ = nullptr;
-}
-
-void URLRequest::Pin() {
-  if (wrapper_.IsEmpty()) {
-    wrapper_.Reset(isolate(), GetWrapper());
-  }
-}
-
-void URLRequest::Unpin() {
-  wrapper_.Reset();
-}
-
-template <typename... Args>
-void URLRequest::EmitRequestEvent(Args... args) {
-  v8::HandleScope handle_scope(isolate());
-  mate::CustomEmit(isolate(), GetWrapper(), "_emitRequestEvent", args...);
-}
-
-template <typename... Args>
-void URLRequest::EmitResponseEvent(Args... args) {
-  v8::HandleScope handle_scope(isolate());
-  mate::CustomEmit(isolate(), GetWrapper(), "_emitResponseEvent", args...);
-}
-
-}  // namespace api
-
-}  // namespace electron

+ 0 - 213
shell/browser/api/atom_api_url_request.h

@@ -1,213 +0,0 @@
-// Copyright (c) 2016 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#ifndef SHELL_BROWSER_API_ATOM_API_URL_REQUEST_H_
-#define SHELL_BROWSER_API_ATOM_API_URL_REQUEST_H_
-
-#include <array>
-#include <string>
-
-#include "base/memory/weak_ptr.h"
-#include "native_mate/dictionary.h"
-#include "native_mate/handle.h"
-#include "native_mate/wrappable_base.h"
-#include "net/base/auth.h"
-#include "net/base/io_buffer.h"
-#include "net/http/http_response_headers.h"
-#include "net/url_request/url_request_context.h"
-#include "shell/browser/api/event_emitter.h"
-#include "shell/browser/api/trackable_object.h"
-
-namespace electron {
-
-class AtomURLRequest;
-
-namespace api {
-
-// The URLRequest class implements the V8 binding between the JavaScript API
-// and Chromium native net library. It is responsible for handling HTTP/HTTPS
-// requests.
-//
-// The current class provides only the binding layer. Two other JavaScript
-// classes (ClientRequest and IncomingMessage) in the net module provide the
-// final API, including some state management and arguments validation.
-//
-// URLRequest's methods fall into two main categories: command and event
-// methods. They are always executed on the Browser's UI thread.
-// Command methods are called directly from JavaScript code via the API defined
-// in BuildPrototype. A command method is generally implemented by forwarding
-// the call to a corresponding method on AtomURLRequest which does the
-// synchronization on the Browser IO thread. The latter then calls into Chromium
-// net library. On the other hand, net library events originate on the IO
-// thread in AtomURLRequest and are synchronized back on the UI thread, then
-// forwarded to a corresponding event method in URLRequest and then to
-// JavaScript via the EmitRequestEvent/EmitResponseEvent helpers.
-//
-// URLRequest lifetime management: we followed the Wrapper/Wrappable pattern
-// defined in native_mate. However, we augment that pattern with a pin/unpin
-// mechanism. The main reason is that we want the JS API to provide a similar
-// lifetime guarantees as the XMLHttpRequest.
-// https://xhr.spec.whatwg.org/#garbage-collection
-//
-// The primary motivation is to not garbage collect a URLInstance as long as the
-// object is emitting network events. For instance, in the following JS code
-//
-// (function() {
-//   let request = new URLRequest(...);
-//   request.on('response', (response)=>{
-//    response.on('data', (data) = > {
-//      console.log(data.toString());
-//    });
-//  });
-// })();
-//
-// we still want data to be logged even if the response/request objects are n
-// more referenced in JavaScript.
-//
-// Binding by simply following the native_mate Wrapper/Wrappable pattern will
-// delete the URLRequest object when the corresponding JS object is collected.
-// The v8 handle is a private member in WrappableBase and it is always weak,
-// there is no way to make it strong without changing native_mate.
-// The solution we implement consists of maintaining some kind of state that
-// prevents collection of JS wrappers as long as the request is emitting network
-// events. At initialization, the object is unpinned. When the request starts,
-// it is pinned. When no more events would be emitted, the object is unpinned
-// and lifetime is again managed by the standard native mate Wrapper/Wrappable
-// pattern.
-//
-// pin/unpin: are implemented by constructing/reseting a V8 strong persistent
-// handle.
-//
-// The URLRequest/AtmURLRequest interaction could have been implemented in a
-// single class. However, it implies that the resulting class lifetime will be
-// managed by two conflicting mechanisms: JavaScript garbage collection and
-// Chromium reference counting. Reasoning about lifetime issues become much
-// more complex.
-//
-// We chose to split the implementation into two classes linked via a
-// reference counted/raw pointers. A URLRequest instance is deleted if it is
-// unpinned and the corresponding JS wrapper object is garbage collected. On the
-// other hand, an AtmURLRequest instance lifetime is totally governed by
-// reference counting.
-//
-class URLRequest : public mate::EventEmitter<URLRequest> {
- public:
-  static mate::WrappableBase* New(mate::Arguments* args);
-
-  static void BuildPrototype(v8::Isolate* isolate,
-                             v8::Local<v8::FunctionTemplate> prototype);
-
-  // Methods for reporting events into JavaScript.
-  void OnReceivedRedirect(
-      int status_code,
-      const std::string& method,
-      const GURL& url,
-      scoped_refptr<net::HttpResponseHeaders> response_headers);
-  void OnAuthenticationRequired(const net::AuthChallengeInfo& auth_info);
-  void OnResponseStarted(
-      scoped_refptr<net::HttpResponseHeaders> response_headers);
-  void OnResponseData(scoped_refptr<const net::IOBufferWithSize> data);
-  void OnResponseCompleted();
-  void OnError(const std::string& error, bool isRequestError);
-  mate::Dictionary GetUploadProgress(v8::Isolate* isolate);
-
- protected:
-  URLRequest(v8::Isolate* isolate, v8::Local<v8::Object> wrapper);
-  ~URLRequest() override;
-
- private:
-  template <typename Flags>
-  class StateBase {
-   public:
-    void SetFlag(Flags flag);
-
-   protected:
-    explicit StateBase(Flags initialState);
-    bool operator==(Flags flag) const;
-    bool IsFlagSet(Flags flag) const;
-
-   private:
-    Flags state_;
-  };
-
-  enum class RequestStateFlags {
-    kNotStarted = 0x0,
-    kStarted = 0x1,
-    kFinished = 0x2,
-    kCanceled = 0x4,
-    kFailed = 0x8,
-    kClosed = 0x10
-  };
-
-  class RequestState : public StateBase<RequestStateFlags> {
-   public:
-    RequestState();
-    bool NotStarted() const;
-    bool Started() const;
-    bool Finished() const;
-    bool Canceled() const;
-    bool Failed() const;
-    bool Closed() const;
-  };
-
-  enum class ResponseStateFlags {
-    kNotStarted = 0x0,
-    kStarted = 0x1,
-    kEnded = 0x2,
-    kFailed = 0x4
-  };
-
-  class ResponseState : public StateBase<ResponseStateFlags> {
-   public:
-    ResponseState();
-    bool NotStarted() const;
-    bool Started() const;
-    bool Ended() const;
-    bool Canceled() const;
-    bool Failed() const;
-    bool Closed() const;
-  };
-
-  bool NotStarted() const;
-  bool Finished() const;
-  bool Canceled() const;
-  bool Failed() const;
-  bool Write(scoped_refptr<const net::IOBufferWithSize> buffer, bool is_last);
-  void Cancel();
-  void FollowRedirect();
-  bool SetExtraHeader(const std::string& name, const std::string& value);
-  void RemoveExtraHeader(const std::string& name);
-  void SetChunkedUpload(bool is_chunked_upload);
-  void SetLoadFlags(int flags);
-
-  int StatusCode() const;
-  std::string StatusMessage() const;
-  net::HttpResponseHeaders* RawResponseHeaders() const;
-  uint32_t ResponseHttpVersionMajor() const;
-  uint32_t ResponseHttpVersionMinor() const;
-
-  void Close();
-  void Pin();
-  void Unpin();
-  template <typename... Args>
-  void EmitRequestEvent(Args... args);
-  template <typename... Args>
-  void EmitResponseEvent(Args... args);
-
-  scoped_refptr<AtomURLRequest> atom_request_;
-  RequestState request_state_;
-  ResponseState response_state_;
-
-  // Used to implement pin/unpin.
-  v8::Global<v8::Object> wrapper_;
-  scoped_refptr<net::HttpResponseHeaders> response_headers_;
-
-  DISALLOW_COPY_AND_ASSIGN(URLRequest);
-};
-
-}  // namespace api
-
-}  // namespace electron
-
-#endif  // SHELL_BROWSER_API_ATOM_API_URL_REQUEST_H_

+ 2 - 0
shell/browser/api/atom_api_url_request_ns.cc

@@ -10,6 +10,8 @@
 #include "mojo/public/cpp/system/string_data_source.h"
 #include "native_mate/dictionary.h"
 #include "native_mate/object_template_builder.h"
+#include "net/http/http_util.h"
+#include "services/network/public/mojom/chunked_data_pipe_getter.mojom.h"
 #include "shell/browser/api/atom_api_session.h"
 #include "shell/browser/atom_browser_context.h"
 #include "shell/common/native_mate_converters/gurl_converter.h"

+ 0 - 149
shell/browser/api/atom_api_web_request.cc

@@ -1,149 +0,0 @@
-// Copyright (c) 2015 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#include "shell/browser/api/atom_api_web_request.h"
-
-#include <set>
-#include <string>
-#include <utility>
-
-#include "base/task/post_task.h"
-#include "content/public/browser/browser_task_traits.h"
-#include "content/public/browser/browser_thread.h"
-#include "native_mate/dictionary.h"
-#include "native_mate/object_template_builder.h"
-#include "shell/browser/atom_browser_context.h"
-#include "shell/browser/net/atom_network_delegate.h"
-#include "shell/common/native_mate_converters/net_converter.h"
-#include "shell/common/native_mate_converters/once_callback.h"
-#include "shell/common/native_mate_converters/value_converter.h"
-
-using content::BrowserThread;
-
-namespace electron {
-
-namespace api {
-
-namespace {
-
-template <typename Method, typename Event, typename Listener>
-void CallNetworkDelegateMethod(
-    URLRequestContextGetter* url_request_context_getter,
-    Method method,
-    Event type,
-    URLPatterns patterns,
-    Listener listener) {
-  // Force creating network delegate.
-  url_request_context_getter->GetURLRequestContext();
-  // Then call the method.
-  auto* network_delegate = url_request_context_getter->network_delegate();
-  (network_delegate->*method)(type, std::move(patterns), std::move(listener));
-}
-
-}  // namespace
-
-WebRequest::WebRequest(v8::Isolate* isolate,
-                       AtomBrowserContext* browser_context)
-    : browser_context_(browser_context) {
-  Init(isolate);
-}
-
-WebRequest::~WebRequest() {}
-
-template <AtomNetworkDelegate::SimpleEvent type>
-void WebRequest::SetSimpleListener(mate::Arguments* args) {
-  SetListener<AtomNetworkDelegate::SimpleListener>(
-      &AtomNetworkDelegate::SetSimpleListenerInIO, type, args);
-}
-
-template <AtomNetworkDelegate::ResponseEvent type>
-void WebRequest::SetResponseListener(mate::Arguments* args) {
-  SetListener<AtomNetworkDelegate::ResponseListener>(
-      &AtomNetworkDelegate::SetResponseListenerInIO, type, args);
-}
-
-template <typename Listener, typename Method, typename Event>
-void WebRequest::SetListener(Method method, Event type, mate::Arguments* args) {
-  // { urls }.
-  URLPatterns patterns;
-  mate::Dictionary dict;
-  std::set<std::string> filter_patterns;
-
-  if (args->GetNext(&dict) && !dict.Get("urls", &filter_patterns)) {
-    args->ThrowError(
-        "onBeforeRequest parameter 'filter' must have property 'urls'.");
-    return;
-  }
-
-  URLPattern pattern(URLPattern::SCHEME_ALL);
-  for (const std::string& filter_pattern : filter_patterns) {
-    const URLPattern::ParseResult result = pattern.Parse(filter_pattern);
-    if (result == URLPattern::ParseResult::kSuccess) {
-      patterns.insert(pattern);
-    } else {
-      const char* error_type = URLPattern::GetParseResultString(result);
-      args->ThrowError("Invalid url pattern " + filter_pattern + ": " +
-                       error_type);
-    }
-  }
-
-  // Function or null.
-  v8::Local<v8::Value> value;
-  Listener listener;
-  if (!args->GetNext(&listener) &&
-      !(args->GetNext(&value) && value->IsNull())) {
-    args->ThrowError("Must pass null or a Function");
-    return;
-  }
-
-  auto* url_request_context_getter = static_cast<URLRequestContextGetter*>(
-      browser_context_->GetRequestContext());
-  if (!url_request_context_getter)
-    return;
-  base::PostTaskWithTraits(
-      FROM_HERE, {BrowserThread::IO},
-      base::BindOnce(&CallNetworkDelegateMethod<Method, Event, Listener>,
-                     base::RetainedRef(url_request_context_getter), method,
-                     type, std::move(patterns), std::move(listener)));
-}
-
-// static
-mate::Handle<WebRequest> WebRequest::Create(
-    v8::Isolate* isolate,
-    AtomBrowserContext* browser_context) {
-  return mate::CreateHandle(isolate, new WebRequest(isolate, browser_context));
-}
-
-// static
-void WebRequest::BuildPrototype(v8::Isolate* isolate,
-                                v8::Local<v8::FunctionTemplate> prototype) {
-  prototype->SetClassName(mate::StringToV8(isolate, "WebRequest"));
-  mate::ObjectTemplateBuilder(isolate, prototype->PrototypeTemplate())
-      .SetMethod("onBeforeRequest", &WebRequest::SetResponseListener<
-                                        AtomNetworkDelegate::kOnBeforeRequest>)
-      .SetMethod("onBeforeSendHeaders",
-                 &WebRequest::SetResponseListener<
-                     AtomNetworkDelegate::kOnBeforeSendHeaders>)
-      .SetMethod("onHeadersReceived",
-                 &WebRequest::SetResponseListener<
-                     AtomNetworkDelegate::kOnHeadersReceived>)
-      .SetMethod(
-          "onSendHeaders",
-          &WebRequest::SetSimpleListener<AtomNetworkDelegate::kOnSendHeaders>)
-      .SetMethod("onBeforeRedirect",
-                 &WebRequest::SetSimpleListener<
-                     AtomNetworkDelegate::kOnBeforeRedirect>)
-      .SetMethod("onResponseStarted",
-                 &WebRequest::SetSimpleListener<
-                     AtomNetworkDelegate::kOnResponseStarted>)
-      .SetMethod(
-          "onCompleted",
-          &WebRequest::SetSimpleListener<AtomNetworkDelegate::kOnCompleted>)
-      .SetMethod("onErrorOccurred", &WebRequest::SetSimpleListener<
-                                        AtomNetworkDelegate::kOnErrorOccurred>);
-}
-
-}  // namespace api
-
-}  // namespace electron

+ 0 - 49
shell/browser/api/atom_api_web_request.h

@@ -1,49 +0,0 @@
-// Copyright (c) 2015 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#ifndef SHELL_BROWSER_API_ATOM_API_WEB_REQUEST_H_
-#define SHELL_BROWSER_API_ATOM_API_WEB_REQUEST_H_
-
-#include "native_mate/arguments.h"
-#include "native_mate/handle.h"
-#include "shell/browser/api/trackable_object.h"
-#include "shell/browser/net/atom_network_delegate.h"
-
-namespace electron {
-
-class AtomBrowserContext;
-
-namespace api {
-
-class WebRequest : public mate::TrackableObject<WebRequest> {
- public:
-  static mate::Handle<WebRequest> Create(v8::Isolate* isolate,
-                                         AtomBrowserContext* browser_context);
-
-  static void BuildPrototype(v8::Isolate* isolate,
-                             v8::Local<v8::FunctionTemplate> prototype);
-
- protected:
-  WebRequest(v8::Isolate* isolate, AtomBrowserContext* browser_context);
-  ~WebRequest() override;
-
-  // C++ can not distinguish overloaded member function.
-  template <AtomNetworkDelegate::SimpleEvent type>
-  void SetSimpleListener(mate::Arguments* args);
-  template <AtomNetworkDelegate::ResponseEvent type>
-  void SetResponseListener(mate::Arguments* args);
-  template <typename Listener, typename Method, typename Event>
-  void SetListener(Method method, Event type, mate::Arguments* args);
-
- private:
-  scoped_refptr<AtomBrowserContext> browser_context_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebRequest);
-};
-
-}  // namespace api
-
-}  // namespace electron
-
-#endif  // SHELL_BROWSER_API_ATOM_API_WEB_REQUEST_H_

+ 0 - 119
shell/browser/api/stream_subscriber.cc

@@ -1,119 +0,0 @@
-// Copyright (c) 2017 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#include "shell/browser/api/stream_subscriber.h"
-
-#include <string>
-
-#include "base/task/post_task.h"
-#include "content/public/browser/browser_task_traits.h"
-#include "shell/browser/net/url_request_stream_job.h"
-#include "shell/common/api/event_emitter_caller.h"
-#include "shell/common/native_mate_converters/callback.h"
-#include "shell/common/node_includes.h"
-
-namespace mate {
-
-StreamSubscriber::StreamSubscriber(
-    v8::Isolate* isolate,
-    v8::Local<v8::Object> emitter,
-    base::WeakPtr<electron::URLRequestStreamJob> url_job,
-    scoped_refptr<base::SequencedTaskRunner> ui_task_runner)
-    : base::RefCountedDeleteOnSequence<StreamSubscriber>(ui_task_runner),
-      isolate_(isolate),
-      emitter_(isolate, emitter),
-      url_job_(url_job),
-      weak_factory_(this) {
-  DCHECK(ui_task_runner->RunsTasksInCurrentSequence());
-
-  auto weak_self = weak_factory_.GetWeakPtr();
-  On("data", base::BindRepeating(&StreamSubscriber::OnData, weak_self));
-  On("end", base::BindRepeating(&StreamSubscriber::OnEnd, weak_self));
-  On("error", base::BindRepeating(&StreamSubscriber::OnError, weak_self));
-}
-
-StreamSubscriber::~StreamSubscriber() {
-  RemoveAllListeners();
-}
-
-void StreamSubscriber::On(const std::string& event,
-                          EventCallback&& callback) {  // NOLINT
-  DCHECK(owning_task_runner()->RunsTasksInCurrentSequence());
-  DCHECK(js_handlers_.find(event) == js_handlers_.end());
-
-  v8::Locker locker(isolate_);
-  v8::Isolate::Scope isolate_scope(isolate_);
-  v8::HandleScope handle_scope(isolate_);
-  // emitter.on(event, EventEmitted)
-  auto fn = CallbackToV8(isolate_, callback);
-  js_handlers_[event] = v8::Global<v8::Value>(isolate_, fn);
-  internal::ValueVector args = {StringToV8(isolate_, event), fn};
-  internal::CallMethodWithArgs(isolate_, emitter_.Get(isolate_), "on", &args);
-}
-
-void StreamSubscriber::Off(const std::string& event) {
-  DCHECK(owning_task_runner()->RunsTasksInCurrentSequence());
-  DCHECK(js_handlers_.find(event) != js_handlers_.end());
-
-  v8::Locker locker(isolate_);
-  v8::Isolate::Scope isolate_scope(isolate_);
-  v8::HandleScope handle_scope(isolate_);
-  auto js_handler = js_handlers_.find(event);
-  DCHECK(js_handler != js_handlers_.end());
-  RemoveListener(js_handler);
-}
-
-void StreamSubscriber::OnData(mate::Arguments* args) {
-  v8::Local<v8::Value> buf;
-  args->GetNext(&buf);
-  if (!node::Buffer::HasInstance(buf)) {
-    args->ThrowError("data must be Buffer");
-    return;
-  }
-
-  const char* data = node::Buffer::Data(buf);
-  size_t length = node::Buffer::Length(buf);
-  if (length == 0)
-    return;
-
-  // Pass the data to the URLJob in IO thread.
-  std::vector<char> buffer(data, data + length);
-  base::PostTaskWithTraits(
-      FROM_HERE, {content::BrowserThread::IO},
-      base::BindOnce(&electron::URLRequestStreamJob::OnData, url_job_,
-                     base::Passed(&buffer)));
-}
-
-void StreamSubscriber::OnEnd(mate::Arguments* args) {
-  base::PostTaskWithTraits(
-      FROM_HERE, {content::BrowserThread::IO},
-      base::BindOnce(&electron::URLRequestStreamJob::OnEnd, url_job_));
-}
-
-void StreamSubscriber::OnError(mate::Arguments* args) {
-  base::PostTaskWithTraits(
-      FROM_HERE, {content::BrowserThread::IO},
-      base::BindOnce(&electron::URLRequestStreamJob::OnError, url_job_,
-                     net::ERR_FAILED));
-}
-
-void StreamSubscriber::RemoveAllListeners() {
-  DCHECK(owning_task_runner()->RunsTasksInCurrentSequence());
-  v8::Locker locker(isolate_);
-  v8::Isolate::Scope isolate_scope(isolate_);
-  v8::HandleScope handle_scope(isolate_);
-  while (!js_handlers_.empty()) {
-    RemoveListener(js_handlers_.begin());
-  }
-}
-
-void StreamSubscriber::RemoveListener(JSHandlersMap::iterator it) {
-  internal::ValueVector args = {StringToV8(isolate_, it->first),
-                                it->second.Get(isolate_)};
-  internal::CallMethodWithArgs(isolate_, emitter_.Get(isolate_),
-                               "removeListener", &args);
-  js_handlers_.erase(it);
-}
-
-}  // namespace mate

+ 0 - 68
shell/browser/api/stream_subscriber.h

@@ -1,68 +0,0 @@
-// Copyright (c) 2017 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#ifndef SHELL_BROWSER_API_STREAM_SUBSCRIBER_H_
-#define SHELL_BROWSER_API_STREAM_SUBSCRIBER_H_
-
-#include <map>
-#include <memory>
-#include <string>
-#include <vector>
-
-#include "base/callback.h"
-#include "base/memory/ref_counted.h"
-#include "base/memory/ref_counted_delete_on_sequence.h"
-#include "base/memory/weak_ptr.h"
-#include "content/public/browser/browser_thread.h"
-#include "v8/include/v8.h"
-
-namespace electron {
-class URLRequestStreamJob;
-}
-
-namespace mate {
-
-class Arguments;
-
-class StreamSubscriber
-    : public base::RefCountedDeleteOnSequence<StreamSubscriber> {
- public:
-  REQUIRE_ADOPTION_FOR_REFCOUNTED_TYPE();
-
-  StreamSubscriber(v8::Isolate* isolate,
-                   v8::Local<v8::Object> emitter,
-                   base::WeakPtr<electron::URLRequestStreamJob> url_job,
-                   scoped_refptr<base::SequencedTaskRunner> ui_task_runner);
-
- private:
-  friend class base::DeleteHelper<StreamSubscriber>;
-  friend class base::RefCountedDeleteOnSequence<StreamSubscriber>;
-
-  using JSHandlersMap = std::map<std::string, v8::Global<v8::Value>>;
-  using EventCallback = base::RepeatingCallback<void(mate::Arguments* args)>;
-
-  ~StreamSubscriber();
-
-  void On(const std::string& event, EventCallback&& callback);  // NOLINT
-  void Off(const std::string& event);
-
-  void OnData(mate::Arguments* args);
-  void OnEnd(mate::Arguments* args);
-  void OnError(mate::Arguments* args);
-
-  void RemoveAllListeners();
-  void RemoveListener(JSHandlersMap::iterator it);
-
-  v8::Isolate* isolate_;
-  v8::Global<v8::Object> emitter_;
-  base::WeakPtr<electron::URLRequestStreamJob> url_job_;
-
-  JSHandlersMap js_handlers_;
-
-  base::WeakPtrFactory<StreamSubscriber> weak_factory_;
-};
-
-}  // namespace mate
-
-#endif  // SHELL_BROWSER_API_STREAM_SUBSCRIBER_H_

+ 43 - 33
shell/browser/atom_browser_client.cc

@@ -50,7 +50,6 @@
 #include "services/network/public/cpp/resource_request_body.h"
 #include "shell/app/manifests.h"
 #include "shell/browser/api/atom_api_app.h"
-#include "shell/browser/api/atom_api_protocol.h"
 #include "shell/browser/api/atom_api_protocol_ns.h"
 #include "shell/browser/api/atom_api_web_contents.h"
 #include "shell/browser/atom_browser_context.h"
@@ -266,34 +265,28 @@ bool AtomBrowserClient::NavigationWasRedirectedCrossSite(
 void AtomBrowserClient::AddProcessPreferences(
     int process_id,
     AtomBrowserClient::ProcessPreferences prefs) {
-  base::AutoLock auto_lock(process_preferences_lock_);
   process_preferences_[process_id] = prefs;
 }
 
 void AtomBrowserClient::RemoveProcessPreferences(int process_id) {
-  base::AutoLock auto_lock(process_preferences_lock_);
   process_preferences_.erase(process_id);
 }
 
 bool AtomBrowserClient::IsProcessObserved(int process_id) const {
-  base::AutoLock auto_lock(process_preferences_lock_);
   return process_preferences_.find(process_id) != process_preferences_.end();
 }
 
 bool AtomBrowserClient::IsRendererSandboxed(int process_id) const {
-  base::AutoLock auto_lock(process_preferences_lock_);
   auto it = process_preferences_.find(process_id);
   return it != process_preferences_.end() && it->second.sandbox;
 }
 
 bool AtomBrowserClient::RendererUsesNativeWindowOpen(int process_id) const {
-  base::AutoLock auto_lock(process_preferences_lock_);
   auto it = process_preferences_.find(process_id);
   return it != process_preferences_.end() && it->second.native_window_open;
 }
 
 bool AtomBrowserClient::RendererDisablesPopups(int process_id) const {
-  base::AutoLock auto_lock(process_preferences_lock_);
   auto it = process_preferences_.find(process_id);
   return it != process_preferences_.end() && it->second.disable_popups;
 }
@@ -739,13 +732,8 @@ network::mojom::NetworkContextPtr AtomBrowserClient::CreateNetworkContext(
   if (!browser_context)
     return nullptr;
 
-  if (base::FeatureList::IsEnabled(network::features::kNetworkService)) {
-    return NetworkContextServiceFactory::GetForContext(browser_context)
-        ->CreateNetworkContext();
-  } else {
-    return static_cast<AtomBrowserContext*>(browser_context)
-        ->GetNetworkContext();
-  }
+  return NetworkContextServiceFactory::GetForContext(browser_context)
+      ->CreateNetworkContext();
 }
 
 network::mojom::NetworkContext* AtomBrowserClient::GetSystemNetworkContext() {
@@ -829,7 +817,7 @@ void OnOpenExternal(const GURL& escaped_url, bool allowed) {
 
 void HandleExternalProtocolInUI(
     const GURL& url,
-    const content::ResourceRequestInfo::WebContentsGetter& web_contents_getter,
+    const content::WebContents::Getter& web_contents_getter,
     bool has_user_gesture) {
   content::WebContents* web_contents = web_contents_getter.Run();
   if (!web_contents)
@@ -848,7 +836,7 @@ void HandleExternalProtocolInUI(
 
 bool AtomBrowserClient::HandleExternalProtocol(
     const GURL& url,
-    content::ResourceRequestInfo::WebContentsGetter web_contents_getter,
+    content::WebContents::Getter web_contents_getter,
     int child_id,
     content::NavigationUIData* navigation_data,
     bool is_main_frame,
@@ -913,8 +901,7 @@ AtomBrowserClient::GetSystemSharedURLLoaderFactory() {
 
 void AtomBrowserClient::OnNetworkServiceCreated(
     network::mojom::NetworkService* network_service) {
-  if (!g_browser_process ||
-      !base::FeatureList::IsEnabled(network::features::kNetworkService))
+  if (!g_browser_process)
     return;
 
   g_browser_process->system_network_context_manager()->OnNetworkServiceCreated(
@@ -930,13 +917,6 @@ AtomBrowserClient::GetNetworkContextsParentDirectory() {
   return {user_data_dir};
 }
 
-bool AtomBrowserClient::ShouldBypassCORB(int render_process_id) const {
-  // This is called on the network thread.
-  base::AutoLock auto_lock(process_preferences_lock_);
-  auto it = process_preferences_.find(render_process_id);
-  return it != process_preferences_.end() && !it->second.web_security;
-}
-
 std::string AtomBrowserClient::GetProduct() {
   return "Chrome/" CHROME_VERSION_STRING;
 }
@@ -967,17 +947,16 @@ void AtomBrowserClient::RegisterNonNetworkSubresourceURLLoaderFactories(
     int render_frame_id,
     NonNetworkURLLoaderFactoryMap* factories) {
   // Chromium may call this even when NetworkService is not enabled.
-  if (!base::FeatureList::IsEnabled(network::features::kNetworkService))
-    return;
-
   content::RenderFrameHost* frame_host =
       content::RenderFrameHost::FromID(render_process_id, render_frame_id);
   content::WebContents* web_contents =
       content::WebContents::FromRenderFrameHost(frame_host);
-  api::ProtocolNS* protocol = api::ProtocolNS::FromWrappedClass(
-      v8::Isolate::GetCurrent(), web_contents->GetBrowserContext());
-  if (protocol)
-    protocol->RegisterURLLoaderFactories(factories);
+  if (web_contents) {
+    api::ProtocolNS* protocol = api::ProtocolNS::FromWrappedClass(
+        v8::Isolate::GetCurrent(), web_contents->GetBrowserContext());
+    if (protocol)
+      protocol->RegisterURLLoaderFactories(factories);
+  }
 }
 
 bool AtomBrowserClient::WillCreateURLLoaderFactory(
@@ -992,6 +971,9 @@ bool AtomBrowserClient::WillCreateURLLoaderFactory(
     bool* bypass_redirect_checks) {
   content::WebContents* web_contents =
       content::WebContents::FromRenderFrameHost(frame_host);
+  if (!web_contents) {
+    return false;
+  }
   api::ProtocolNS* protocol = api::ProtocolNS::FromWrappedClass(
       v8::Isolate::GetCurrent(), web_contents->GetBrowserContext());
   if (!protocol)
@@ -1009,10 +991,38 @@ bool AtomBrowserClient::WillCreateURLLoaderFactory(
       protocol->intercept_handlers(), std::move(proxied_receiver),
       std::move(target_factory_info), std::move(header_client_request));
 
-  *bypass_redirect_checks = true;
+  if (bypass_redirect_checks)
+    *bypass_redirect_checks = true;
   return true;
 }
 
+network::mojom::URLLoaderFactoryPtrInfo
+AtomBrowserClient::CreateURLLoaderFactoryForNetworkRequests(
+    content::RenderProcessHost* process,
+    network::mojom::NetworkContext* network_context,
+    network::mojom::TrustedURLLoaderHeaderClientPtrInfo* header_client,
+    const url::Origin& request_initiator) {
+  auto render_process_id = process->GetID();
+  auto it = process_preferences_.find(render_process_id);
+  if (it != process_preferences_.end() && !it->second.web_security) {
+    // bypass CORB
+    network::mojom::URLLoaderFactoryParamsPtr params =
+        network::mojom::URLLoaderFactoryParams::New();
+
+    if (header_client)
+      params->header_client = std::move(*header_client);
+    params->process_id = render_process_id;
+    params->is_corb_enabled = false;
+
+    // Create the URLLoaderFactory.
+    network::mojom::URLLoaderFactoryPtrInfo factory_info;
+    network_context->CreateURLLoaderFactory(mojo::MakeRequest(&factory_info),
+                                            std::move(params));
+    return factory_info;
+  }
+  return network::mojom::URLLoaderFactoryPtrInfo();
+}
+
 #if defined(OS_WIN)
 bool AtomBrowserClient::PreSpawnRenderer(sandbox::TargetPolicy* policy) {
   // Allow crashpad to communicate via named pipe.

+ 7 - 3
shell/browser/atom_browser_client.h

@@ -158,7 +158,6 @@ class AtomBrowserClient : public content::ContentBrowserClient,
   void OnNetworkServiceCreated(
       network::mojom::NetworkService* network_service) override;
   std::vector<base::FilePath> GetNetworkContextsParentDirectory() override;
-  bool ShouldBypassCORB(int render_process_id) const override;
   std::string GetProduct() override;
   void RegisterNonNetworkNavigationURLLoaderFactories(
       int frame_tree_node_id,
@@ -177,13 +176,19 @@ class AtomBrowserClient : public content::ContentBrowserClient,
       mojo::PendingReceiver<network::mojom::URLLoaderFactory>* factory_receiver,
       network::mojom::TrustedURLLoaderHeaderClientPtrInfo* header_client,
       bool* bypass_redirect_checks) override;
+  network::mojom::URLLoaderFactoryPtrInfo
+  CreateURLLoaderFactoryForNetworkRequests(
+      content::RenderProcessHost* process,
+      network::mojom::NetworkContext* network_context,
+      network::mojom::TrustedURLLoaderHeaderClientPtrInfo* header_client,
+      const url::Origin& request_initiator) override;
 #if defined(OS_WIN)
   bool PreSpawnRenderer(sandbox::TargetPolicy* policy) override;
 #endif
 
   bool HandleExternalProtocol(
       const GURL& url,
-      content::ResourceRequestInfo::WebContentsGetter web_contents_getter,
+      content::WebContents::Getter web_contents_getter,
       int child_id,
       content::NavigationUIData* navigation_data,
       bool is_main_frame,
@@ -248,7 +253,6 @@ class AtomBrowserClient : public content::ContentBrowserClient,
 
   Delegate* delegate_ = nullptr;
 
-  mutable base::Lock process_preferences_lock_;
   std::map<int, ProcessPreferences> process_preferences_;
 
   std::string user_agent_override_ = "";

+ 5 - 60
shell/browser/atom_browser_context.cc

@@ -113,12 +113,6 @@ AtomBrowserContext::AtomBrowserContext(const std::string& partition,
   // Initialize Pref Registry.
   InitPrefs();
 
-  if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) {
-    proxy_config_monitor_ = std::make_unique<ProxyConfigMonitor>(prefs_.get());
-    io_handle_ =
-        new URLRequestContextGetter::Handle(weak_factory_.GetWeakPtr());
-  }
-
   cookie_change_notifier_ = std::make_unique<CookieChangeNotifier>(this);
 
 #if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
@@ -137,12 +131,8 @@ AtomBrowserContext::~AtomBrowserContext() {
   NotifyWillBeDestroyed(this);
   ShutdownStoragePartitions();
 
-  if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) {
-    io_handle_->ShutdownOnUIThread();
-  } else {
-    BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE,
-                              std::move(resource_context_));
-  }
+  BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE,
+                            std::move(resource_context_));
 
   // Notify any keyed services of browser context destruction.
   BrowserContextDependencyManager::GetInstance()->DestroyBrowserContextServices(
@@ -197,47 +187,6 @@ void AtomBrowserContext::SetUserAgent(const std::string& user_agent) {
   user_agent_ = user_agent;
 }
 
-net::URLRequestContextGetter* AtomBrowserContext::CreateRequestContext(
-    content::ProtocolHandlerMap* protocol_handlers,
-    content::URLRequestInterceptorScopedVector protocol_interceptors) {
-  if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) {
-    return io_handle_
-        ->CreateMainRequestContextGetter(protocol_handlers,
-                                         std::move(protocol_interceptors))
-        .get();
-  } else {
-    NOTREACHED();
-    return nullptr;
-  }
-}
-
-net::URLRequestContextGetter* AtomBrowserContext::CreateMediaRequestContext() {
-  if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) {
-    return io_handle_->GetMainRequestContextGetter().get();
-  } else {
-    NOTREACHED();
-    return nullptr;
-  }
-}
-
-net::URLRequestContextGetter* AtomBrowserContext::GetRequestContext() {
-  if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) {
-    return GetDefaultStoragePartition(this)->GetURLRequestContext();
-  } else {
-    NOTREACHED();
-    return nullptr;
-  }
-}
-
-network::mojom::NetworkContextPtr AtomBrowserContext::GetNetworkContext() {
-  if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) {
-    return io_handle_->GetNetworkContext();
-  } else {
-    NOTREACHED();
-    return nullptr;
-  }
-}
-
 base::FilePath AtomBrowserContext::GetPath() {
   return path_;
 }
@@ -255,13 +204,9 @@ int AtomBrowserContext::GetMaxCacheSize() const {
 }
 
 content::ResourceContext* AtomBrowserContext::GetResourceContext() {
-  if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) {
-    return io_handle_->GetResourceContext();
-  } else {
-    if (!resource_context_)
-      resource_context_.reset(new content::ResourceContext);
-    return resource_context_.get();
-  }
+  if (!resource_context_)
+    resource_context_.reset(new content::ResourceContext);
+  return resource_context_.get();
 }
 
 std::string AtomBrowserContext::GetMediaDeviceIDSalt() {

+ 0 - 11
shell/browser/atom_browser_context.h

@@ -17,7 +17,6 @@
 #include "content/public/browser/resource_context.h"
 #include "electron/buildflags/buildflags.h"
 #include "shell/browser/media/media_device_id_salt.h"
-#include "shell/browser/net/url_request_context_getter.h"
 
 class PrefRegistrySimple;
 class PrefService;
@@ -86,9 +85,6 @@ class AtomBrowserContext
   bool CanUseHttpCache() const;
   int GetMaxCacheSize() const;
   AtomBlobReader* GetBlobReader();
-  network::mojom::NetworkContextPtr GetNetworkContext();
-  // Get the request context, if there is none, create it.
-  net::URLRequestContextGetter* GetRequestContext();
   ResolveProxyHelper* GetResolveProxyHelper();
 
   // content::BrowserContext:
@@ -109,10 +105,6 @@ class AtomBrowserContext
   content::PermissionControllerDelegate* GetPermissionControllerDelegate()
       override;
   storage::SpecialStoragePolicy* GetSpecialStoragePolicy() override;
-  net::URLRequestContextGetter* CreateRequestContext(
-      content::ProtocolHandlerMap* protocol_handlers,
-      content::URLRequestInterceptorScopedVector request_interceptors) override;
-  net::URLRequestContextGetter* CreateMediaRequestContext() override;
   content::ClientHintsControllerDelegate* GetClientHintsControllerDelegate()
       override;
 
@@ -155,9 +147,6 @@ class AtomBrowserContext
 
   static BrowserContextMap browser_context_map_;
 
-  // Self-destructing class responsible for creating URLRequestContextGetter
-  // on the UI thread and deletes itself on the IO thread.
-  URLRequestContextGetter::Handle* io_handle_;
   ValueMapPrefStore* in_memory_pref_store_;
 
   std::unique_ptr<content::ResourceContext> resource_context_;

+ 0 - 5
shell/browser/browser_process_impl.cc

@@ -249,11 +249,6 @@ BrowserProcessImpl::component_updater() {
   return nullptr;
 }
 
-component_updater::SupervisedUserWhitelistInstaller*
-BrowserProcessImpl::supervised_user_whitelist_installer() {
-  return nullptr;
-}
-
 MediaFileSystemRegistry* BrowserProcessImpl::media_file_system_registry() {
   return nullptr;
 }

+ 0 - 2
shell/browser/browser_process_impl.h

@@ -84,8 +84,6 @@ class BrowserProcessImpl : public BrowserProcess {
   optimization_guide::OptimizationGuideService* optimization_guide_service()
       override;
   component_updater::ComponentUpdateService* component_updater() override;
-  component_updater::SupervisedUserWhitelistInstaller*
-  supervised_user_whitelist_installer() override;
   MediaFileSystemRegistry* media_file_system_registry() override;
   WebRtcLogUploader* webrtc_log_uploader() override;
   network_time::NetworkTimeTracker* network_time_tracker() override;

+ 2 - 104
shell/browser/io_thread.cc

@@ -21,37 +21,9 @@
 #include "services/network/public/cpp/features.h"
 #include "services/network/public/cpp/network_switches.h"
 #include "services/network/public/mojom/net_log.mojom.h"
-#include "services/network/url_request_context_builder_mojo.h"
-#include "shell/browser/net/url_request_context_getter.h"
 
 using content::BrowserThread;
 
-namespace {
-
-// Parses the desired granularity of NetLog capturing specified by the command
-// line.
-net::NetLogCaptureMode GetNetCaptureModeFromCommandLine(
-    const base::CommandLine& command_line) {
-  base::StringPiece switch_name = network::switches::kNetLogCaptureMode;
-
-  if (command_line.HasSwitch(switch_name)) {
-    std::string value = command_line.GetSwitchValueASCII(switch_name);
-
-    if (value == "Default")
-      return net::NetLogCaptureMode::kDefault;
-    if (value == "IncludeCookiesAndCredentials")
-      return net::NetLogCaptureMode::kIncludeSensitive;
-    if (value == "IncludeSocketBytes")
-      return net::NetLogCaptureMode::kEverything;
-
-    LOG(ERROR) << "Unrecognized value for --" << switch_name;
-  }
-
-  return net::NetLogCaptureMode::kDefault;
-}
-
-}  // namespace
-
 IOThread::IOThread(
     SystemNetworkContextManager* system_network_context_manager) {
   BrowserThread::SetIOThreadDelegate(this);
@@ -65,80 +37,6 @@ IOThread::~IOThread() {
   BrowserThread::SetIOThreadDelegate(nullptr);
 }
 
-void IOThread::RegisterURLRequestContextGetter(
-    electron::URLRequestContextGetter* getter) {
-  base::AutoLock lock(lock_);
-
-  DCHECK(!base::FeatureList::IsEnabled(network::features::kNetworkService));
-  DCHECK_EQ(0u, request_context_getters_.count(getter));
-  request_context_getters_.insert(getter);
-}
-
-void IOThread::DeregisterURLRequestContextGetter(
-    electron::URLRequestContextGetter* getter) {
-  base::AutoLock lock(lock_);
+void IOThread::Init() {}
 
-  DCHECK(!base::FeatureList::IsEnabled(network::features::kNetworkService));
-  DCHECK_EQ(1u, request_context_getters_.count(getter));
-  request_context_getters_.erase(getter);
-}
-
-void IOThread::Init() {
-  if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) {
-    std::unique_ptr<network::URLRequestContextBuilderMojo> builder =
-        std::make_unique<network::URLRequestContextBuilderMojo>();
-
-    // Enable file:// support.
-    builder->set_file_enabled(true);
-
-    auto cert_verifier = std::make_unique<net::CachingCertVerifier>(
-        std::make_unique<net::MultiThreadedCertVerifier>(
-            net::CertVerifyProc::CreateDefault(nullptr)));
-    builder->SetCertVerifier(std::move(cert_verifier));
-
-    // Create the network service, so that shared host resolver
-    // gets created which is required to set the auth preferences below.
-    network::NetworkService* network_service = content::GetNetworkServiceImpl();
-    network_service->SetUpHttpAuth(std::move(http_auth_static_params_));
-    network_service->ConfigureHttpAuthPrefs(
-        std::move(http_auth_dynamic_params_));
-
-    const base::CommandLine* command_line =
-        base::CommandLine::ForCurrentProcess();
-    // start net log trace if --log-net-log is passed in the command line.
-    if (command_line->HasSwitch(network::switches::kLogNetLog)) {
-      base::FilePath log_file =
-          command_line->GetSwitchValuePath(network::switches::kLogNetLog);
-      base::File file(log_file,
-                      base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE);
-      if (log_file.empty() || !file.IsValid()) {
-        LOG(ERROR) << "Failed opening NetLog: " << log_file.value();
-      } else {
-        auto platform_dict = net_log::GetPlatformConstantsForNetLog(
-            base::CommandLine::ForCurrentProcess()->GetCommandLineString(),
-            std::string(ELECTRON_PRODUCT_NAME));
-        network_service->StartNetLog(
-            std::move(file), GetNetCaptureModeFromCommandLine(*command_line),
-            platform_dict ? std::move(*platform_dict)
-                          : base::DictionaryValue());
-      }
-    }
-
-    system_network_context_ = network_service->CreateNetworkContextWithBuilder(
-        std::move(network_context_request_), std::move(network_context_params_),
-        std::move(builder), &system_request_context_);
-  }
-}
-
-void IOThread::CleanUp() {
-  if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) {
-    system_request_context_->proxy_resolution_service()->OnShutdown();
-
-    base::AutoLock lock(lock_);
-    for (auto* getter : request_context_getters_) {
-      getter->NotifyContextShuttingDown();
-    }
-
-    system_network_context_.reset();
-  }
-}
+void IOThread::CleanUp() {}

+ 0 - 29
shell/browser/loader/layered_resource_handler.cc

@@ -1,29 +0,0 @@
-// Copyright (c) 2017 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#include "shell/browser/loader/layered_resource_handler.h"
-
-#include <memory>
-#include <utility>
-
-namespace electron {
-
-LayeredResourceHandler::LayeredResourceHandler(
-    net::URLRequest* request,
-    std::unique_ptr<content::ResourceHandler> next_handler,
-    Delegate* delegate)
-    : content::LayeredResourceHandler(request, std::move(next_handler)),
-      delegate_(delegate) {}
-
-LayeredResourceHandler::~LayeredResourceHandler() {}
-
-void LayeredResourceHandler::OnResponseStarted(
-    network::ResourceResponse* response,
-    std::unique_ptr<content::ResourceController> controller) {
-  if (delegate_)
-    delegate_->OnResponseStarted(response);
-  next_handler_->OnResponseStarted(response, std::move(controller));
-}
-
-}  // namespace electron

+ 0 - 44
shell/browser/loader/layered_resource_handler.h

@@ -1,44 +0,0 @@
-// Copyright (c) 2017 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#ifndef SHELL_BROWSER_LOADER_LAYERED_RESOURCE_HANDLER_H_
-#define SHELL_BROWSER_LOADER_LAYERED_RESOURCE_HANDLER_H_
-
-#include <memory>
-
-#include "content/browser/loader/layered_resource_handler.h"  // nogncheck
-#include "services/network/public/cpp/resource_response.h"
-
-namespace electron {
-
-// Resource handler that notifies on various stages of a resource request.
-class LayeredResourceHandler : public content::LayeredResourceHandler {
- public:
-  class Delegate {
-   public:
-    Delegate() {}
-    virtual ~Delegate() {}
-
-    virtual void OnResponseStarted(network::ResourceResponse* response) = 0;
-  };
-
-  LayeredResourceHandler(net::URLRequest* request,
-                         std::unique_ptr<content::ResourceHandler> next_handler,
-                         Delegate* delegate);
-  ~LayeredResourceHandler() override;
-
-  // content::LayeredResourceHandler:
-  void OnResponseStarted(
-      network::ResourceResponse* response,
-      std::unique_ptr<content::ResourceController> controller) override;
-
- private:
-  Delegate* delegate_;
-
-  DISALLOW_COPY_AND_ASSIGN(LayeredResourceHandler);
-};
-
-}  // namespace electron
-
-#endif  // SHELL_BROWSER_LOADER_LAYERED_RESOURCE_HANDLER_H_

+ 1 - 1
shell/browser/login_handler.h

@@ -62,7 +62,7 @@ class LoginHandler : public base::RefCountedThreadSafe<LoginHandler> {
   std::unique_ptr<const net::AuthChallengeInfo> auth_info_;
 
   // WebContents associated with the login request.
-  content::ResourceRequestInfo::WebContentsGetter web_contents_getter_;
+  content::WebContents::Getter web_contents_getter_;
 
   // Called with preferred value of net::NetworkDelegate::AuthRequiredResponse.
   net::NetworkDelegate::AuthCallback auth_callback_;

+ 0 - 25
shell/browser/net/about_protocol_handler.cc

@@ -1,25 +0,0 @@
-// Copyright (c) 2016 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#include "shell/browser/net/about_protocol_handler.h"
-
-#include "shell/browser/net/url_request_about_job.h"
-
-namespace electron {
-
-AboutProtocolHandler::AboutProtocolHandler() {}
-
-AboutProtocolHandler::~AboutProtocolHandler() {}
-
-net::URLRequestJob* AboutProtocolHandler::MaybeCreateJob(
-    net::URLRequest* request,
-    net::NetworkDelegate* network_delegate) const {
-  return new URLRequestAboutJob(request, network_delegate);
-}
-
-bool AboutProtocolHandler::IsSafeRedirectTarget(const GURL& location) const {
-  return false;
-}
-
-}  // namespace electron

+ 0 - 29
shell/browser/net/about_protocol_handler.h

@@ -1,29 +0,0 @@
-// Copyright (c) 2016 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#ifndef SHELL_BROWSER_NET_ABOUT_PROTOCOL_HANDLER_H_
-#define SHELL_BROWSER_NET_ABOUT_PROTOCOL_HANDLER_H_
-
-#include "net/url_request/url_request_job_factory.h"
-
-namespace electron {
-
-class AboutProtocolHandler : public net::URLRequestJobFactory::ProtocolHandler {
- public:
-  AboutProtocolHandler();
-  ~AboutProtocolHandler() override;
-
-  // net::URLRequestJobFactory::ProtocolHandler:
-  net::URLRequestJob* MaybeCreateJob(
-      net::URLRequest* request,
-      net::NetworkDelegate* network_delegate) const override;
-  bool IsSafeRedirectTarget(const GURL& location) const override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(AboutProtocolHandler);
-};
-
-}  // namespace electron
-
-#endif  // SHELL_BROWSER_NET_ABOUT_PROTOCOL_HANDLER_H_

+ 0 - 34
shell/browser/net/asar/asar_protocol_handler.cc

@@ -1,34 +0,0 @@
-// Copyright (c) 2014 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#include "shell/browser/net/asar/asar_protocol_handler.h"
-
-#include "base/task_runner.h"
-#include "net/base/filename_util.h"
-#include "net/base/net_errors.h"
-#include "shell/browser/net/asar/url_request_asar_job.h"
-
-namespace asar {
-
-AsarProtocolHandler::AsarProtocolHandler(
-    const scoped_refptr<base::TaskRunner>& file_task_runner)
-    : file_task_runner_(file_task_runner) {}
-
-AsarProtocolHandler::~AsarProtocolHandler() {}
-
-net::URLRequestJob* AsarProtocolHandler::MaybeCreateJob(
-    net::URLRequest* request,
-    net::NetworkDelegate* network_delegate) const {
-  base::FilePath full_path;
-  net::FileURLToFilePath(request->url(), &full_path);
-  auto* job = new URLRequestAsarJob(request, network_delegate);
-  job->Initialize(file_task_runner_, full_path);
-  return job;
-}
-
-bool AsarProtocolHandler::IsSafeRedirectTarget(const GURL& location) const {
-  return false;
-}
-
-}  // namespace asar

+ 0 - 37
shell/browser/net/asar/asar_protocol_handler.h

@@ -1,37 +0,0 @@
-// Copyright (c) 2014 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#ifndef SHELL_BROWSER_NET_ASAR_ASAR_PROTOCOL_HANDLER_H_
-#define SHELL_BROWSER_NET_ASAR_ASAR_PROTOCOL_HANDLER_H_
-
-#include "base/memory/ref_counted.h"
-#include "net/url_request/url_request_job_factory.h"
-
-namespace base {
-class TaskRunner;
-}
-
-namespace asar {
-
-class AsarProtocolHandler : public net::URLRequestJobFactory::ProtocolHandler {
- public:
-  explicit AsarProtocolHandler(
-      const scoped_refptr<base::TaskRunner>& file_task_runner);
-  ~AsarProtocolHandler() override;
-
-  // net::URLRequestJobFactory::ProtocolHandler:
-  net::URLRequestJob* MaybeCreateJob(
-      net::URLRequest* request,
-      net::NetworkDelegate* network_delegate) const override;
-  bool IsSafeRedirectTarget(const GURL& location) const override;
-
- private:
-  const scoped_refptr<base::TaskRunner> file_task_runner_;
-
-  DISALLOW_COPY_AND_ASSIGN(AsarProtocolHandler);
-};
-
-}  // namespace asar
-
-#endif  // SHELL_BROWSER_NET_ASAR_ASAR_PROTOCOL_HANDLER_H_

+ 40 - 33
shell/browser/net/asar/asar_url_loader.cc

@@ -27,6 +27,23 @@ namespace asar {
 
 namespace {
 
+net::Error ConvertMojoResultToNetError(MojoResult result) {
+  switch (result) {
+    case MOJO_RESULT_OK:
+      return net::OK;
+    case MOJO_RESULT_NOT_FOUND:
+      return net::ERR_FILE_NOT_FOUND;
+    case MOJO_RESULT_PERMISSION_DENIED:
+      return net::ERR_ACCESS_DENIED;
+    case MOJO_RESULT_RESOURCE_EXHAUSTED:
+      return net::ERR_INSUFFICIENT_RESOURCES;
+    case MOJO_RESULT_ABORTED:
+      return net::ERR_ABORTED;
+    default:
+      return net::ERR_FAILED;
+  }
+}
+
 constexpr size_t kDefaultFileUrlPipeSize = 65536;
 
 // Because this makes things simpler.
@@ -55,7 +72,6 @@ class AsarURLLoader : public network::mojom::URLLoader {
   void FollowRedirect(const std::vector<std::string>& removed_headers,
                       const net::HttpRequestHeaders& modified_headers,
                       const base::Optional<GURL>& new_url) override {}
-  void ProceedWithResponse() override {}
   void SetPriority(net::RequestPriority priority,
                    int32_t intra_priority_value) override {}
   void PauseReadingBodyFromNet() override {}
@@ -121,24 +137,17 @@ class AsarURLLoader : public network::mojom::URLLoader {
     // requests at the same time.
     base::File file(info.unpacked ? real_path : archive->path(),
                     base::File::FLAG_OPEN | base::File::FLAG_READ);
-    // Move cursor to sub-file.
-    file.Seek(base::File::FROM_BEGIN, info.offset);
-
-    // File reading logics are copied from FileURLLoader.
-    if (!file.IsValid()) {
-      OnClientComplete(net::FileErrorToNetError(file.error_details()));
-      return;
-    }
-    char initial_read_buffer[net::kMaxBytesToSniff];
-    int initial_read_result =
-        file.ReadAtCurrentPos(initial_read_buffer, net::kMaxBytesToSniff);
-    if (initial_read_result < 0) {
-      base::File::Error read_error = base::File::GetLastFileError();
-      DCHECK_NE(base::File::FILE_OK, read_error);
-      OnClientComplete(net::FileErrorToNetError(read_error));
+    auto file_data_source =
+        std::make_unique<mojo::FileDataSource>(std::move(file));
+    mojo::DataPipeProducer::DataSource* data_source = file_data_source.get();
+
+    std::vector<char> initial_read_buffer(net::kMaxBytesToSniff);
+    auto read_result =
+        data_source->Read(info.offset, base::span<char>(initial_read_buffer));
+    if (read_result.result != MOJO_RESULT_OK) {
+      OnClientComplete(ConvertMojoResultToNetError(read_result.result));
       return;
     }
-    size_t initial_read_size = static_cast<size_t>(initial_read_result);
 
     std::string range_header;
     net::HttpByteRange byte_range;
@@ -162,27 +171,25 @@ class AsarURLLoader : public network::mojom::URLLoader {
       }
     }
 
-    size_t first_byte_to_send = 0;
-    size_t total_bytes_to_send = static_cast<size_t>(info.size);
+    uint64_t first_byte_to_send = 0;
+    uint64_t total_bytes_to_send = info.size;
 
     if (byte_range.IsValid()) {
-      first_byte_to_send =
-          static_cast<size_t>(byte_range.first_byte_position());
+      first_byte_to_send = byte_range.first_byte_position();
       total_bytes_to_send =
-          static_cast<size_t>(byte_range.last_byte_position()) -
-          first_byte_to_send + 1;
+          byte_range.last_byte_position() - first_byte_to_send + 1;
     }
 
-    total_bytes_written_ = static_cast<size_t>(total_bytes_to_send);
+    total_bytes_written_ = total_bytes_to_send;
 
     head.content_length = base::saturated_cast<int64_t>(total_bytes_to_send);
 
-    if (first_byte_to_send < initial_read_size) {
+    if (first_byte_to_send < read_result.bytes_read) {
       // Write any data we read for MIME sniffing, constraining by range where
       // applicable. This will always fit in the pipe (see assertion near
       // |kDefaultFileUrlPipeSize| definition).
       uint32_t write_size = std::min(
-          static_cast<uint32_t>(initial_read_size - first_byte_to_send),
+          static_cast<uint32_t>(read_result.bytes_read - first_byte_to_send),
           static_cast<uint32_t>(total_bytes_to_send));
       const uint32_t expected_write_size = write_size;
       MojoResult result = pipe.producer_handle->WriteData(
@@ -194,14 +201,14 @@ class AsarURLLoader : public network::mojom::URLLoader {
       }
 
       // Discount the bytes we just sent from the total range.
-      first_byte_to_send = initial_read_size;
+      first_byte_to_send = read_result.bytes_read;
       total_bytes_to_send -= write_size;
     }
 
     if (!net::GetMimeTypeFromFile(path, &head.mime_type)) {
       std::string new_type;
-      net::SniffMimeType(initial_read_buffer, initial_read_result, request.url,
-                         head.mime_type,
+      net::SniffMimeType(initial_read_buffer.data(), read_result.bytes_read,
+                         request.url, head.mime_type,
                          net::ForceSniffFileUrlsForHtml::kDisabled, &new_type);
       head.mime_type.assign(new_type);
       head.did_mime_sniff = true;
@@ -225,14 +232,14 @@ class AsarURLLoader : public network::mojom::URLLoader {
     // (i.e., no range request) this Seek is effectively a no-op.
     //
     // Note that in Electron we also need to add file offset.
-    file.Seek(base::File::FROM_BEGIN,
-              static_cast<int64_t>(first_byte_to_send) + info.offset);
+    file_data_source->SetRange(
+        first_byte_to_send + info.offset,
+        first_byte_to_send + info.offset + total_bytes_to_send);
 
     data_producer_ = std::make_unique<mojo::DataPipeProducer>(
         std::move(pipe.producer_handle));
     data_producer_->Write(
-        std::make_unique<mojo::FileDataSource>(std::move(file),
-                                               total_bytes_to_send),
+        std::move(file_data_source),
         base::BindOnce(&AsarURLLoader::OnFileWritten, base::Unretained(this)));
   }
 

+ 7 - 3
shell/browser/net/atom_url_loader_factory.cc

@@ -78,7 +78,7 @@ bool ResponseMustBeObject(ProtocolType type) {
 
 // Helper to convert value to Dictionary.
 mate::Dictionary ToDict(v8::Isolate* isolate, v8::Local<v8::Value> value) {
-  if (value->IsObject())
+  if (!value->IsFunction() && value->IsObject())
     return mate::Dictionary(
         isolate,
         value->ToObject(isolate->GetCurrentContext()).ToLocalChecked());
@@ -322,10 +322,14 @@ void AtomURLLoaderFactory::StartLoadingString(
     v8::Isolate* isolate,
     v8::Local<v8::Value> response) {
   std::string contents;
-  if (response->IsString())
+  if (response->IsString()) {
     contents = gin::V8ToString(isolate, response);
-  else if (!dict.IsEmpty())
+  } else if (!dict.IsEmpty()) {
     dict.Get("data", &contents);
+  } else {
+    client->OnComplete(network::URLLoaderCompletionStatus(net::ERR_FAILED));
+    return;
+  }
 
   SendContents(std::move(client), std::move(head), std::move(contents));
 }

+ 0 - 522
shell/browser/net/atom_url_request.cc

@@ -1,522 +0,0 @@
-// Copyright (c) 2016 GitHub, Inc.
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#include "shell/browser/net/atom_url_request.h"
-
-#include <memory>
-#include <string>
-#include <utility>
-
-#include "base/callback.h"
-#include "base/task/post_task.h"
-#include "content/public/browser/browser_task_traits.h"
-#include "content/public/browser/browser_thread.h"
-#include "net/base/elements_upload_data_stream.h"
-#include "net/base/io_buffer.h"
-#include "net/base/load_flags.h"
-#include "net/base/upload_bytes_element_reader.h"
-#include "net/url_request/redirect_info.h"
-#include "shell/browser/api/atom_api_url_request.h"
-#include "shell/browser/atom_browser_context.h"
-#include "shell/browser/net/atom_url_request_job_factory.h"
-
-namespace {
-const int kBufferSize = 4096;
-}  // namespace
-
-namespace electron {
-
-namespace internal {
-
-class UploadOwnedIOBufferElementReader : public net::UploadBytesElementReader {
- public:
-  explicit UploadOwnedIOBufferElementReader(
-      scoped_refptr<const net::IOBufferWithSize> buffer)
-      : net::UploadBytesElementReader(buffer->data(), buffer->size()),
-        buffer_(buffer) {}
-
-  ~UploadOwnedIOBufferElementReader() override {}
-
-  static UploadOwnedIOBufferElementReader* CreateWithBuffer(
-      scoped_refptr<const net::IOBufferWithSize> buffer) {
-    return new UploadOwnedIOBufferElementReader(std::move(buffer));
-  }
-
- private:
-  scoped_refptr<const net::IOBuffer> buffer_;
-
-  DISALLOW_COPY_AND_ASSIGN(UploadOwnedIOBufferElementReader);
-};
-
-}  // namespace internal
-
-AtomURLRequest::AtomURLRequest(api::URLRequest* delegate)
-    : delegate_(delegate),
-      response_read_buffer_(new net::IOBuffer(kBufferSize)) {}
-
-AtomURLRequest::~AtomURLRequest() {
-  DCHECK(!request_context_getter_);
-  DCHECK(!request_);
-}
-
-scoped_refptr<AtomURLRequest> AtomURLRequest::Create(
-    AtomBrowserContext* browser_context,
-    const std::string& method,
-    const std::string& url,
-    const std::string& redirect_policy,
-    api::URLRequest* delegate) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-
-  DCHECK(browser_context);
-  DCHECK(!url.empty());
-  DCHECK(delegate);
-  if (!browser_context || url.empty() || !delegate) {
-    return nullptr;
-  }
-  scoped_refptr<net::URLRequestContextGetter> request_context_getter(
-      browser_context->GetRequestContext());
-  DCHECK(request_context_getter);
-  scoped_refptr<AtomURLRequest> atom_url_request(new AtomURLRequest(delegate));
-  if (base::PostTaskWithTraits(
-          FROM_HERE, {content::BrowserThread::IO},
-          base::BindOnce(&AtomURLRequest::DoInitialize, atom_url_request,
-                         request_context_getter, method, url,
-                         redirect_policy))) {
-    return atom_url_request;
-  }
-  return nullptr;
-}
-
-void AtomURLRequest::Terminate() {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  delegate_ = nullptr;
-  base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::IO},
-                           base::BindOnce(&AtomURLRequest::DoTerminate, this));
-}
-
-void AtomURLRequest::DoInitialize(
-    scoped_refptr<net::URLRequestContextGetter> request_context_getter,
-    const std::string& method,
-    const std::string& url,
-    const std::string& redirect_policy) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
-  DCHECK(request_context_getter);
-
-  redirect_policy_ = redirect_policy;
-  request_context_getter_ = request_context_getter;
-  request_context_getter_->AddObserver(this);
-  auto* context = request_context_getter_->GetURLRequestContext();
-  if (!context) {
-    // Called after shutdown.
-    DoCancelWithError("Cannot start a request after shutdown.", true);
-    return;
-  }
-
-  DCHECK(context);
-  request_ =
-      context->CreateRequest(GURL(url), net::RequestPriority::DEFAULT_PRIORITY,
-                             this, MISSING_TRAFFIC_ANNOTATION);
-  if (!request_) {
-    DoCancelWithError("Failed to create a net::URLRequest.", true);
-    return;
-  }
-  request_->set_method(method);
-  // Do not send cookies from the cookie store.
-  DoSetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES);
-  // Set a flag to stop custom protocol from intercepting this request.
-  request_->SetUserData(DisableProtocolInterceptFlagKey(),
-                        base::WrapUnique(new base::SupportsUserData::Data()));
-}
-
-void AtomURLRequest::DoTerminate() {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
-  request_.reset();
-  if (request_context_getter_) {
-    request_context_getter_->RemoveObserver(this);
-    request_context_getter_ = nullptr;
-  }
-}
-
-bool AtomURLRequest::Write(scoped_refptr<const net::IOBufferWithSize> buffer,
-                           bool is_last) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  return base::PostTaskWithTraits(
-      FROM_HERE, {content::BrowserThread::IO},
-      base::BindOnce(&AtomURLRequest::DoWriteBuffer, this, buffer, is_last));
-}
-
-void AtomURLRequest::SetChunkedUpload(bool is_chunked_upload) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-
-  // The method can be called only before switching to multi-threaded mode,
-  // i.e. before the first call to write.
-  // So it is safe to change the object in the UI thread.
-  is_chunked_upload_ = is_chunked_upload;
-}
-
-void AtomURLRequest::Cancel() {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::IO},
-                           base::BindOnce(&AtomURLRequest::DoCancel, this));
-}
-
-void AtomURLRequest::FollowRedirect() {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  base::PostTaskWithTraits(
-      FROM_HERE, {content::BrowserThread::IO},
-      base::BindOnce(&AtomURLRequest::DoFollowRedirect, this));
-}
-
-void AtomURLRequest::SetExtraHeader(const std::string& name,
-                                    const std::string& value) const {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  base::PostTaskWithTraits(
-      FROM_HERE, {content::BrowserThread::IO},
-      base::BindOnce(&AtomURLRequest::DoSetExtraHeader, this, name, value));
-}
-
-void AtomURLRequest::RemoveExtraHeader(const std::string& name) const {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  base::PostTaskWithTraits(
-      FROM_HERE, {content::BrowserThread::IO},
-      base::BindOnce(&AtomURLRequest::DoRemoveExtraHeader, this, name));
-}
-
-void AtomURLRequest::PassLoginInformation(
-    const base::string16& username,
-    const base::string16& password) const {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  if (username.empty() || password.empty()) {
-    base::PostTaskWithTraits(
-        FROM_HERE, {content::BrowserThread::IO},
-        base::BindOnce(&AtomURLRequest::DoCancelAuth, this));
-  } else {
-    base::PostTaskWithTraits(
-        FROM_HERE, {content::BrowserThread::IO},
-        base::BindOnce(&AtomURLRequest::DoSetAuth, this, username, password));
-  }
-}
-
-void AtomURLRequest::SetLoadFlags(int flags) const {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  base::PostTaskWithTraits(
-      FROM_HERE, {content::BrowserThread::IO},
-      base::BindOnce(&AtomURLRequest::DoSetLoadFlags, this, flags));
-}
-
-void AtomURLRequest::DoWriteBuffer(
-    scoped_refptr<const net::IOBufferWithSize> buffer,
-    bool is_last) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
-  if (!request_) {
-    return;
-  }
-
-  if (is_chunked_upload_) {
-    // Chunked encoding case.
-
-    bool first_call = false;
-    if (!chunked_stream_writer_) {
-      std::unique_ptr<net::ChunkedUploadDataStream> chunked_stream(
-          new net::ChunkedUploadDataStream(0));
-      chunked_stream_writer_ = chunked_stream->CreateWriter();
-      request_->set_upload(std::move(chunked_stream));
-      first_call = true;
-    }
-
-    if (buffer)
-      // Non-empty buffer.
-      chunked_stream_writer_->AppendData(buffer->data(), buffer->size(),
-                                         is_last);
-    else if (is_last)
-      // Empty buffer and last chunk, i.e. request.end().
-      chunked_stream_writer_->AppendData(nullptr, 0, true);
-
-    if (first_call) {
-      request_->Start();
-    }
-  } else {
-    if (buffer) {
-      // Handling potential empty buffers.
-      using internal::UploadOwnedIOBufferElementReader;
-      auto* element_reader =
-          UploadOwnedIOBufferElementReader::CreateWithBuffer(std::move(buffer));
-      upload_element_readers_.push_back(
-          std::unique_ptr<net::UploadElementReader>(element_reader));
-    }
-
-    if (is_last) {
-      auto* elements_upload_data_stream = new net::ElementsUploadDataStream(
-          std::move(upload_element_readers_), 0);
-      request_->set_upload(
-          std::unique_ptr<net::UploadDataStream>(elements_upload_data_stream));
-      request_->Start();
-    }
-  }
-}
-
-void AtomURLRequest::DoCancel() {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
-  if (request_) {
-    request_->Cancel();
-  }
-  DoTerminate();
-}
-
-void AtomURLRequest::DoFollowRedirect() {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
-  if (request_ && request_->is_redirecting() && redirect_policy_ == "manual") {
-    request_->FollowDeferredRedirect(base::nullopt /* removed_headers */,
-                                     base::nullopt /* modified_headers */);
-  }
-}
-
-void AtomURLRequest::DoSetExtraHeader(const std::string& name,
-                                      const std::string& value) const {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
-  if (!request_) {
-    return;
-  }
-  request_->SetExtraRequestHeaderByName(name, value, true);
-}
-
-void AtomURLRequest::DoRemoveExtraHeader(const std::string& name) const {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
-  if (!request_) {
-    return;
-  }
-  request_->RemoveRequestHeaderByName(name);
-}
-
-void AtomURLRequest::DoSetAuth(const base::string16& username,
-                               const base::string16& password) const {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
-  if (!request_) {
-    return;
-  }
-  request_->SetAuth(net::AuthCredentials(username, password));
-}
-
-void AtomURLRequest::DoCancelAuth() const {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
-  if (!request_) {
-    return;
-  }
-  request_->CancelAuth();
-}
-
-void AtomURLRequest::DoCancelWithError(const std::string& error,
-                                       bool isRequestError) {
-  DoCancel();
-  base::PostTaskWithTraits(
-      FROM_HERE, {content::BrowserThread::UI},
-      base::BindOnce(&AtomURLRequest::InformDelegateErrorOccured, this, error,
-                     isRequestError));
-}
-
-void AtomURLRequest::DoSetLoadFlags(int flags) const {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
-  if (!request_) {
-    return;
-  }
-  request_->SetLoadFlags(request_->load_flags() | flags);
-}
-
-void AtomURLRequest::OnReceivedRedirect(net::URLRequest* request,
-                                        const net::RedirectInfo& info,
-                                        bool* defer_redirect) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
-  if (!request_ || redirect_policy_ == "follow")
-    return;
-
-  if (redirect_policy_ == "error") {
-    request->Cancel();
-    DoCancelWithError(
-        "Request cannot follow redirect with the current redirect mode", true);
-  } else if (redirect_policy_ == "manual") {
-    *defer_redirect = true;
-    scoped_refptr<net::HttpResponseHeaders> response_headers =
-        request->response_headers();
-    base::PostTaskWithTraits(
-        FROM_HERE, {content::BrowserThread::UI},
-        base::BindOnce(&AtomURLRequest::InformDelegateReceivedRedirect, this,
-                       info.status_code, info.new_method, info.new_url,
-                       response_headers));
-  }
-}
-
-void AtomURLRequest::OnAuthRequired(net::URLRequest* request,
-                                    const net::AuthChallengeInfo& auth_info) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
-
-  base::PostTaskWithTraits(
-      FROM_HERE, {content::BrowserThread::UI},
-      base::BindOnce(&AtomURLRequest::InformDelegateAuthenticationRequired,
-                     this, auth_info));
-}
-
-void AtomURLRequest::OnResponseStarted(net::URLRequest* request,
-                                       int net_error) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
-  if (!request_) {
-    return;
-  }
-  DCHECK_EQ(request, request_.get());
-
-  scoped_refptr<net::HttpResponseHeaders> response_headers =
-      request->response_headers();
-  const auto& status = request_->status();
-  if (status.is_success()) {
-    // Success or pending trigger a Read.
-    base::PostTaskWithTraits(
-        FROM_HERE, {content::BrowserThread::UI},
-        base::BindOnce(&AtomURLRequest::InformDelegateResponseStarted, this,
-                       response_headers));
-    ReadResponse();
-  } else if (status.status() == net::URLRequestStatus::Status::FAILED) {
-    // Report error on Start.
-    DoCancelWithError(net::ErrorToString(net_error), true);
-  }
-  // We don't report an error is the request is canceled.
-}
-
-void AtomURLRequest::ReadResponse() {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
-
-  int bytes_read = -1;
-  if (request_->Read(response_read_buffer_.get(), kBufferSize, &bytes_read)) {
-    OnReadCompleted(request_.get(), bytes_read);
-  }
-}
-
-void AtomURLRequest::OnReadCompleted(net::URLRequest* request, int bytes_read) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
-  if (!request_) {
-    return;
-  }
-  DCHECK_EQ(request, request_.get());
-
-  const auto status = request_->status();
-  if (status.error() == bytes_read &&
-      bytes_read == net::ERR_CONTENT_DECODING_INIT_FAILED) {
-    // When the request job is unable to create a source stream for the
-    // content encoding, we fail the request.
-    DoCancelWithError(net::ErrorToString(net::ERR_CONTENT_DECODING_INIT_FAILED),
-                      true);
-    return;
-  }
-
-  bool response_error = false;
-  bool data_ended = false;
-  bool data_transfer_error = false;
-  do {
-    if (!status.is_success()) {
-      response_error = true;
-      break;
-    }
-    if (bytes_read == 0) {
-      data_ended = true;
-      break;
-    }
-    if (bytes_read < 0 || !CopyAndPostBuffer(bytes_read)) {
-      data_transfer_error = true;
-      break;
-    }
-  } while (
-      request_->Read(response_read_buffer_.get(), kBufferSize, &bytes_read));
-  if (response_error) {
-    DoCancelWithError(net::ErrorToString(status.ToNetError()), false);
-  } else if (data_ended) {
-    base::PostTaskWithTraits(
-        FROM_HERE, {content::BrowserThread::UI},
-        base::BindOnce(&AtomURLRequest::InformDelegateResponseCompleted, this));
-    DoTerminate();
-  } else if (data_transfer_error) {
-    // We abort the request on corrupted data transfer.
-    DoCancelWithError("Failed to transfer data from IO to UI thread.", false);
-  }
-}
-
-void AtomURLRequest::OnContextShuttingDown() {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
-  DoCancel();
-}
-
-bool AtomURLRequest::CopyAndPostBuffer(int bytes_read) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
-
-  // data is only a wrapper for the asynchronous response_read_buffer_.
-  // Make a deep copy of payload and transfer ownership to the UI thread.
-  auto buffer_copy = WrapRefCounted(new net::IOBufferWithSize(bytes_read));
-  memcpy(buffer_copy->data(), response_read_buffer_->data(), bytes_read);
-
-  return base::PostTaskWithTraits(
-      FROM_HERE, {content::BrowserThread::UI},
-      base::BindOnce(&AtomURLRequest::InformDelegateResponseData, this,
-                     buffer_copy));
-}
-
-void AtomURLRequest::InformDelegateReceivedRedirect(
-    int status_code,
-    const std::string& method,
-    const GURL& url,
-    scoped_refptr<net::HttpResponseHeaders> response_headers) const {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  if (delegate_)
-    delegate_->OnReceivedRedirect(status_code, method, url, response_headers);
-}
-
-void AtomURLRequest::InformDelegateAuthenticationRequired(
-    const net::AuthChallengeInfo& auth_info) const {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  if (delegate_)
-    delegate_->OnAuthenticationRequired(auth_info);
-}
-
-void AtomURLRequest::InformDelegateResponseStarted(
-    scoped_refptr<net::HttpResponseHeaders> response_headers) const {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  if (delegate_)
-    delegate_->OnResponseStarted(response_headers);
-}
-
-void AtomURLRequest::InformDelegateResponseData(
-    scoped_refptr<net::IOBufferWithSize> data) const {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-
-  // Transfer ownership of the data buffer, data will be released
-  // by the delegate's OnResponseData.
-  if (delegate_)
-    delegate_->OnResponseData(data);
-}
-
-void AtomURLRequest::InformDelegateResponseCompleted() const {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-
-  if (delegate_)
-    delegate_->OnResponseCompleted();
-}
-
-void AtomURLRequest::InformDelegateErrorOccured(const std::string& error,
-                                                bool isRequestError) const {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-
-  if (delegate_)
-    delegate_->OnError(error, isRequestError);
-}
-
-void AtomURLRequest::GetUploadProgress(mate::Dictionary* progress) const {
-  net::UploadProgress upload_progress;
-  if (request_) {
-    progress->Set("started", true);
-    upload_progress = request_->GetUploadProgress();
-  } else {
-    progress->Set("started", false);
-  }
-  progress->Set("current", upload_progress.position());
-  progress->Set("total", upload_progress.size());
-}
-
-}  // namespace electron

+ 0 - 122
shell/browser/net/atom_url_request.h

@@ -1,122 +0,0 @@
-// Copyright (c) 2016 GitHub, Inc.
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#ifndef SHELL_BROWSER_NET_ATOM_URL_REQUEST_H_
-#define SHELL_BROWSER_NET_ATOM_URL_REQUEST_H_
-
-#include <memory>
-#include <string>
-#include <vector>
-
-#include "base/memory/ref_counted.h"
-#include "base/memory/weak_ptr.h"
-#include "net/base/auth.h"
-#include "net/base/chunked_upload_data_stream.h"
-#include "net/base/io_buffer.h"
-#include "net/base/upload_element_reader.h"
-#include "net/http/http_response_headers.h"
-#include "net/url_request/url_request.h"
-#include "net/url_request/url_request_context_getter_observer.h"
-#include "shell/browser/api/atom_api_url_request.h"
-#include "shell/browser/atom_browser_context.h"
-
-namespace electron {
-
-class AtomURLRequest : public base::RefCountedThreadSafe<AtomURLRequest>,
-                       public net::URLRequest::Delegate,
-                       public net::URLRequestContextGetterObserver {
- public:
-  static scoped_refptr<AtomURLRequest> Create(
-      AtomBrowserContext* browser_context,
-      const std::string& method,
-      const std::string& url,
-      const std::string& redirect_policy,
-      api::URLRequest* delegate);
-  void Terminate();
-
-  bool Write(scoped_refptr<const net::IOBufferWithSize> buffer, bool is_last);
-  void SetChunkedUpload(bool is_chunked_upload);
-  void Cancel();
-  void FollowRedirect();
-  void SetExtraHeader(const std::string& name, const std::string& value) const;
-  void RemoveExtraHeader(const std::string& name) const;
-  void PassLoginInformation(const base::string16& username,
-                            const base::string16& password) const;
-  void SetLoadFlags(int flags) const;
-  void GetUploadProgress(mate::Dictionary* progress) const;
-
- protected:
-  // Overrides of net::URLRequest::Delegate
-  void OnReceivedRedirect(net::URLRequest* request,
-                          const net::RedirectInfo& info,
-                          bool* defer_redirect) override;
-  void OnAuthRequired(net::URLRequest* request,
-                      const net::AuthChallengeInfo& auth_info) override;
-  void OnResponseStarted(net::URLRequest* request, int net_error) override;
-  void OnReadCompleted(net::URLRequest* request, int bytes_read) override;
-
-  // Overrides of net::URLRequestContextGetterObserver
-  void OnContextShuttingDown() override;
-
- private:
-  friend class base::RefCountedThreadSafe<AtomURLRequest>;
-
-  explicit AtomURLRequest(api::URLRequest* delegate);
-  ~AtomURLRequest() override;
-
-  void DoInitialize(scoped_refptr<net::URLRequestContextGetter>,
-                    const std::string& method,
-                    const std::string& url,
-                    const std::string& redirect_policy);
-  void DoTerminate();
-  void DoWriteBuffer(scoped_refptr<const net::IOBufferWithSize> buffer,
-                     bool is_last);
-  void DoCancel();
-  void DoFollowRedirect();
-  void DoSetExtraHeader(const std::string& name,
-                        const std::string& value) const;
-  void DoRemoveExtraHeader(const std::string& name) const;
-  void DoSetAuth(const base::string16& username,
-                 const base::string16& password) const;
-  void DoCancelAuth() const;
-  void DoCancelWithError(const std::string& error, bool isRequestError);
-  void DoSetLoadFlags(int flags) const;
-
-  void ReadResponse();
-  bool CopyAndPostBuffer(int bytes_read);
-
-  void InformDelegateReceivedRedirect(
-      int status_code,
-      const std::string& method,
-      const GURL& url,
-      scoped_refptr<net::HttpResponseHeaders> response_headers) const;
-  void InformDelegateAuthenticationRequired(
-      const net::AuthChallengeInfo& auth_info) const;
-  void InformDelegateResponseStarted(
-      scoped_refptr<net::HttpResponseHeaders>) const;
-  void InformDelegateResponseData(
-      scoped_refptr<net::IOBufferWithSize> data) const;
-  void InformDelegateResponseCompleted() const;
-  void InformDelegateErrorOccured(const std::string& error,
-                                  bool isRequestError) const;
-
-  api::URLRequest* delegate_;
-  std::unique_ptr<net::URLRequest> request_;
-  scoped_refptr<net::URLRequestContextGetter> request_context_getter_;
-
-  bool is_chunked_upload_ = false;
-  std::string redirect_policy_;
-  std::unique_ptr<net::ChunkedUploadDataStream> chunked_stream_;
-  std::unique_ptr<net::ChunkedUploadDataStream::Writer> chunked_stream_writer_;
-  std::vector<std::unique_ptr<net::UploadElementReader>>
-      upload_element_readers_;
-  scoped_refptr<net::IOBuffer> response_read_buffer_;
-
-  DISALLOW_COPY_AND_ASSIGN(AtomURLRequest);
-};
-
-}  // namespace electron
-
-#endif  // SHELL_BROWSER_NET_ATOM_URL_REQUEST_H_

+ 0 - 22
shell/browser/net/http_protocol_handler.cc

@@ -1,22 +0,0 @@
-// Copyright (c) 2015 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#include "shell/browser/net/http_protocol_handler.h"
-
-#include "net/url_request/url_request_http_job.h"
-
-namespace electron {
-
-HttpProtocolHandler::HttpProtocolHandler(const std::string& scheme)
-    : scheme_(scheme) {}
-
-HttpProtocolHandler::~HttpProtocolHandler() {}
-
-net::URLRequestJob* HttpProtocolHandler::MaybeCreateJob(
-    net::URLRequest* request,
-    net::NetworkDelegate* network_delegate) const {
-  return net::URLRequestHttpJob::Factory(request, network_delegate, scheme_);
-}
-
-}  // namespace electron

+ 0 - 30
shell/browser/net/http_protocol_handler.h

@@ -1,30 +0,0 @@
-// Copyright (c) 2015 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#ifndef SHELL_BROWSER_NET_HTTP_PROTOCOL_HANDLER_H_
-#define SHELL_BROWSER_NET_HTTP_PROTOCOL_HANDLER_H_
-
-#include <string>
-
-#include "net/url_request/url_request_job_factory.h"
-
-namespace electron {
-
-class HttpProtocolHandler : public net::URLRequestJobFactory::ProtocolHandler {
- public:
-  explicit HttpProtocolHandler(const std::string&);
-  ~HttpProtocolHandler() override;
-
-  // net::URLRequestJobFactory::ProtocolHandler:
-  net::URLRequestJob* MaybeCreateJob(
-      net::URLRequest* request,
-      net::NetworkDelegate* network_delegate) const override;
-
- private:
-  std::string scheme_;
-};
-
-}  // namespace electron
-
-#endif  // SHELL_BROWSER_NET_HTTP_PROTOCOL_HANDLER_H_

+ 0 - 1
shell/browser/net/node_stream_loader.h

@@ -50,7 +50,6 @@ class NodeStreamLoader : public network::mojom::URLLoader {
   void FollowRedirect(const std::vector<std::string>& removed_headers,
                       const net::HttpRequestHeaders& modified_headers,
                       const base::Optional<GURL>& new_url) override {}
-  void ProceedWithResponse() override {}
   void SetPriority(net::RequestPriority priority,
                    int32_t intra_priority_value) override {}
   void PauseReadingBodyFromNet() override {}

+ 0 - 5
shell/browser/net/proxying_url_loader_factory.cc

@@ -145,11 +145,6 @@ void ProxyingURLLoaderFactory::InProgressRequest::FollowRedirect(
   RestartInternal();
 }
 
-void ProxyingURLLoaderFactory::InProgressRequest::ProceedWithResponse() {
-  if (target_loader_.is_bound())
-    target_loader_->ProceedWithResponse();
-}
-
 void ProxyingURLLoaderFactory::InProgressRequest::SetPriority(
     net::RequestPriority priority,
     int32_t intra_priority_value) {

+ 0 - 1
shell/browser/net/proxying_url_loader_factory.h

@@ -50,7 +50,6 @@ class ProxyingURLLoaderFactory
     void FollowRedirect(const std::vector<std::string>& removed_headers,
                         const net::HttpRequestHeaders& modified_headers,
                         const base::Optional<GURL>& new_url) override;
-    void ProceedWithResponse() override;
     void SetPriority(net::RequestPriority priority,
                      int32_t intra_priority_value) override;
     void PauseReadingBodyFromNet() override;

+ 2 - 2
shell/browser/net/system_network_context_manager.cc

@@ -50,9 +50,9 @@ network::mojom::HttpAuthDynamicParamsPtr CreateHttpAuthDynamicParams() {
   network::mojom::HttpAuthDynamicParamsPtr auth_dynamic_params =
       network::mojom::HttpAuthDynamicParams::New();
 
-  auth_dynamic_params->server_whitelist = command_line->GetSwitchValueASCII(
+  auth_dynamic_params->server_allowlist = command_line->GetSwitchValueASCII(
       electron::switches::kAuthServerWhitelist);
-  auth_dynamic_params->delegate_whitelist = command_line->GetSwitchValueASCII(
+  auth_dynamic_params->delegate_allowlist = command_line->GetSwitchValueASCII(
       electron::switches::kAuthNegotiateDelegateWhitelist);
   auth_dynamic_params->enable_negotiate_port =
       command_line->HasSwitch(electron::switches::kEnableAuthNegotiatePort);

+ 0 - 1
shell/browser/net/url_pipe_loader.h

@@ -60,7 +60,6 @@ class URLPipeLoader : public network::mojom::URLLoader,
   void FollowRedirect(const std::vector<std::string>& removed_headers,
                       const net::HttpRequestHeaders& modified_headers,
                       const base::Optional<GURL>& new_url) override {}
-  void ProceedWithResponse() override {}
   void SetPriority(net::RequestPriority priority,
                    int32_t intra_priority_value) override {}
   void PauseReadingBodyFromNet() override {}

+ 0 - 37
shell/browser/net/url_request_about_job.cc

@@ -1,37 +0,0 @@
-// Copyright (c) 2016 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#include "shell/browser/net/url_request_about_job.h"
-
-#include "base/threading/thread_task_runner_handle.h"
-
-namespace electron {
-
-URLRequestAboutJob::URLRequestAboutJob(net::URLRequest* request,
-                                       net::NetworkDelegate* network_delegate)
-    : net::URLRequestJob(request, network_delegate), weak_ptr_factory_(this) {}
-
-void URLRequestAboutJob::Start() {
-  base::ThreadTaskRunnerHandle::Get()->PostTask(
-      FROM_HERE, base::BindOnce(&URLRequestAboutJob::StartAsync,
-                                weak_ptr_factory_.GetWeakPtr()));
-}
-
-void URLRequestAboutJob::Kill() {
-  weak_ptr_factory_.InvalidateWeakPtrs();
-  URLRequestJob::Kill();
-}
-
-bool URLRequestAboutJob::GetMimeType(std::string* mime_type) const {
-  *mime_type = "text/html";
-  return true;
-}
-
-URLRequestAboutJob::~URLRequestAboutJob() {}
-
-void URLRequestAboutJob::StartAsync() {
-  NotifyHeadersComplete();
-}
-
-}  // namespace electron

+ 0 - 35
shell/browser/net/url_request_about_job.h

@@ -1,35 +0,0 @@
-// Copyright (c) 2016 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#ifndef SHELL_BROWSER_NET_URL_REQUEST_ABOUT_JOB_H_
-#define SHELL_BROWSER_NET_URL_REQUEST_ABOUT_JOB_H_
-
-#include <string>
-
-#include "base/memory/weak_ptr.h"
-#include "net/url_request/url_request_job.h"
-
-namespace electron {
-
-class URLRequestAboutJob : public net::URLRequestJob {
- public:
-  URLRequestAboutJob(net::URLRequest*, net::NetworkDelegate*);
-
-  // URLRequestJob:
-  void Start() override;
-  void Kill() override;
-  bool GetMimeType(std::string* mime_type) const override;
-
- private:
-  ~URLRequestAboutJob() override;
-  void StartAsync();
-
-  base::WeakPtrFactory<URLRequestAboutJob> weak_ptr_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(URLRequestAboutJob);
-};
-
-}  // namespace electron
-
-#endif  // SHELL_BROWSER_NET_URL_REQUEST_ABOUT_JOB_H_

+ 0 - 138
shell/browser/net/url_request_async_asar_job.cc

@@ -1,138 +0,0 @@
-// Copyright (c) 2014 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#include "shell/browser/net/url_request_async_asar_job.h"
-
-#include <memory>
-#include <string>
-#include <utility>
-
-#include "base/strings/utf_string_conversions.h"
-#include "base/task/post_task.h"
-#include "content/public/browser/browser_task_traits.h"
-#include "content/public/browser/browser_thread.h"
-#include "shell/common/atom_constants.h"
-#include "shell/common/native_mate_converters/net_converter.h"
-#include "shell/common/native_mate_converters/v8_value_converter.h"
-
-namespace electron {
-
-namespace {
-
-void BeforeStartInUI(base::WeakPtr<URLRequestAsyncAsarJob> job,
-                     mate::Arguments* args) {
-  v8::Local<v8::Value> value;
-  int error = net::OK;
-  std::unique_ptr<base::Value> request_options = nullptr;
-
-  if (args->GetNext(&value)) {
-    V8ValueConverter converter;
-    v8::Local<v8::Context> context = args->isolate()->GetCurrentContext();
-    request_options = converter.FromV8Value(value, context);
-  }
-
-  if (request_options) {
-    JsAsker::IsErrorOptions(request_options.get(), &error);
-  } else {
-    error = net::ERR_NOT_IMPLEMENTED;
-  }
-
-  // sanitize custom headers
-  if (request_options && request_options->is_dict()) {
-    const base::Value* headersDict = request_options->FindDictKey("headers");
-    if (headersDict) {
-      for (const auto& iter : headersDict->DictItems()) {
-        if (!iter.second.is_string()) {
-          args->ThrowError("Value of '" + iter.first +
-                           "' header has to be a string");
-          return;
-        }
-      }
-    }
-  }
-
-  base::PostTaskWithTraits(
-      FROM_HERE, {content::BrowserThread::IO},
-      base::BindOnce(&URLRequestAsyncAsarJob::StartAsync, job,
-                     std::move(request_options), error));
-}
-
-}  // namespace
-
-URLRequestAsyncAsarJob::URLRequestAsyncAsarJob(
-    net::URLRequest* request,
-    net::NetworkDelegate* network_delegate)
-    : asar::URLRequestAsarJob(request, network_delegate), weak_factory_(this) {}
-
-URLRequestAsyncAsarJob::~URLRequestAsyncAsarJob() = default;
-
-void URLRequestAsyncAsarJob::Start() {
-  auto request_details = std::make_unique<base::DictionaryValue>();
-  FillRequestDetails(request_details.get(), request());
-  base::PostTaskWithTraits(
-      FROM_HERE, {content::BrowserThread::UI},
-      base::BindOnce(
-          &JsAsker::AskForOptions, base::Unretained(isolate()), handler(),
-          std::move(request_details),
-          base::BindOnce(&BeforeStartInUI, weak_factory_.GetWeakPtr())));
-}
-
-void URLRequestAsyncAsarJob::StartAsync(std::unique_ptr<base::Value> options,
-                                        int error) {
-  if (error != net::OK) {
-    NotifyStartError(
-        net::URLRequestStatus(net::URLRequestStatus::FAILED, error));
-    return;
-  }
-
-  std::string file_path;
-  response_headers_ = new net::HttpResponseHeaders("HTTP/1.1 200 OK");
-  if (options->is_dict()) {
-    base::DictionaryValue* dict =
-        static_cast<base::DictionaryValue*>(options.get());
-    base::Value* pathValue =
-        dict->FindKeyOfType("path", base::Value::Type::STRING);
-    if (pathValue) {
-      file_path = pathValue->GetString();
-    }
-    base::Value* headersValue =
-        dict->FindKeyOfType("headers", base::Value::Type::DICTIONARY);
-    if (headersValue) {
-      for (const auto& iter : headersValue->DictItems()) {
-        response_headers_->AddHeader(iter.first + ": " +
-                                     iter.second.GetString());
-      }
-    }
-  } else if (options->is_string()) {
-    file_path = options->GetString();
-  }
-  response_headers_->AddHeader(kCORSHeader);
-
-  if (file_path.empty()) {
-    NotifyStartError(net::URLRequestStatus(net::URLRequestStatus::FAILED,
-                                           net::ERR_NOT_IMPLEMENTED));
-  } else {
-    asar::URLRequestAsarJob::Initialize(
-        base::CreateSequencedTaskRunnerWithTraits(
-            {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
-             base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}),
-#if defined(OS_WIN)
-        base::FilePath(base::UTF8ToWide(file_path)));
-#else
-        base::FilePath(file_path));
-#endif
-    asar::URLRequestAsarJob::Start();
-  }
-}
-
-void URLRequestAsyncAsarJob::Kill() {
-  weak_factory_.InvalidateWeakPtrs();
-  URLRequestAsarJob::Kill();
-}
-
-void URLRequestAsyncAsarJob::GetResponseInfo(net::HttpResponseInfo* info) {
-  info->headers = response_headers_;
-}
-
-}  // namespace electron

+ 0 - 37
shell/browser/net/url_request_async_asar_job.h

@@ -1,37 +0,0 @@
-// Copyright (c) 2015 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#ifndef SHELL_BROWSER_NET_URL_REQUEST_ASYNC_ASAR_JOB_H_
-#define SHELL_BROWSER_NET_URL_REQUEST_ASYNC_ASAR_JOB_H_
-
-#include <memory>
-
-#include "shell/browser/net/asar/url_request_asar_job.h"
-#include "shell/browser/net/js_asker.h"
-
-namespace electron {
-
-// Like URLRequestAsarJob, but asks the JavaScript handler for file path.
-class URLRequestAsyncAsarJob : public asar::URLRequestAsarJob, public JsAsker {
- public:
-  URLRequestAsyncAsarJob(net::URLRequest*, net::NetworkDelegate*);
-  ~URLRequestAsyncAsarJob() override;
-
-  void StartAsync(std::unique_ptr<base::Value> options, int error);
-
-  // URLRequestJob:
-  void Start() override;
-  void GetResponseInfo(net::HttpResponseInfo* info) override;
-  void Kill() override;
-
- private:
-  scoped_refptr<net::HttpResponseHeaders> response_headers_;
-  base::WeakPtrFactory<URLRequestAsyncAsarJob> weak_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(URLRequestAsyncAsarJob);
-};
-
-}  // namespace electron
-
-#endif  // SHELL_BROWSER_NET_URL_REQUEST_ASYNC_ASAR_JOB_H_

+ 0 - 155
shell/browser/net/url_request_buffer_job.cc

@@ -1,155 +0,0 @@
-// Copyright (c) 2013 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#include "shell/browser/net/url_request_buffer_job.h"
-
-#include <memory>
-#include <string>
-#include <utility>
-
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/task/post_task.h"
-#include "content/public/browser/browser_task_traits.h"
-#include "content/public/browser/browser_thread.h"
-#include "net/base/mime_util.h"
-#include "net/base/net_errors.h"
-#include "shell/common/atom_constants.h"
-#include "shell/common/native_mate_converters/net_converter.h"
-#include "shell/common/native_mate_converters/v8_value_converter.h"
-
-namespace electron {
-
-namespace {
-
-std::string GetExtFromURL(const GURL& url) {
-  std::string spec = url.spec();
-  size_t index = spec.find_last_of('.');
-  if (index == std::string::npos || index == spec.size())
-    return std::string();
-  return spec.substr(index + 1, spec.size() - index - 1);
-}
-
-void BeforeStartInUI(base::WeakPtr<URLRequestBufferJob> job,
-                     mate::Arguments* args) {
-  v8::Local<v8::Value> value;
-  int error = net::OK;
-  std::unique_ptr<base::Value> request_options = nullptr;
-
-  if (args->GetNext(&value)) {
-    V8ValueConverter converter;
-    v8::Local<v8::Context> context = args->isolate()->GetCurrentContext();
-    request_options = converter.FromV8Value(value, context);
-  }
-
-  if (request_options) {
-    JsAsker::IsErrorOptions(request_options.get(), &error);
-  } else {
-    error = net::ERR_NOT_IMPLEMENTED;
-  }
-
-  base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::IO},
-                           base::BindOnce(&URLRequestBufferJob::StartAsync, job,
-                                          std::move(request_options), error));
-}
-
-}  // namespace
-
-URLRequestBufferJob::URLRequestBufferJob(net::URLRequest* request,
-                                         net::NetworkDelegate* network_delegate)
-    : net::URLRequestSimpleJob(request, network_delegate),
-      status_code_(net::HTTP_NOT_IMPLEMENTED),
-      weak_factory_(this) {}
-
-URLRequestBufferJob::~URLRequestBufferJob() = default;
-
-void URLRequestBufferJob::Start() {
-  auto request_details = std::make_unique<base::DictionaryValue>();
-  FillRequestDetails(request_details.get(), request());
-  base::PostTaskWithTraits(
-      FROM_HERE, {content::BrowserThread::UI},
-      base::BindOnce(
-          &JsAsker::AskForOptions, base::Unretained(isolate()), handler(),
-          std::move(request_details),
-          base::BindOnce(&BeforeStartInUI, weak_factory_.GetWeakPtr())));
-}
-
-void URLRequestBufferJob::StartAsync(std::unique_ptr<base::Value> options,
-                                     int error) {
-  if (error != net::OK) {
-    NotifyStartError(
-        net::URLRequestStatus(net::URLRequestStatus::FAILED, error));
-    return;
-  }
-
-  const base::Value* binary = nullptr;
-  if (options->is_dict()) {
-    base::DictionaryValue* dict =
-        static_cast<base::DictionaryValue*>(options.get());
-    dict->GetString("mimeType", &mime_type_);
-    dict->GetString("charset", &charset_);
-    dict->GetBinary("data", &binary);
-  } else if (options->is_blob()) {
-    binary = options.get();
-  }
-
-  if (mime_type_.empty()) {
-    std::string ext = GetExtFromURL(request()->url());
-#if defined(OS_WIN)
-    net::GetWellKnownMimeTypeFromExtension(base::UTF8ToUTF16(ext), &mime_type_);
-#else
-    net::GetWellKnownMimeTypeFromExtension(ext, &mime_type_);
-#endif
-  }
-
-  if (!binary) {
-    NotifyStartError(net::URLRequestStatus(net::URLRequestStatus::FAILED,
-                                           net::ERR_NOT_IMPLEMENTED));
-    return;
-  }
-
-  data_ = new base::RefCountedBytes(
-      reinterpret_cast<const unsigned char*>(binary->GetBlob().data()),
-      binary->GetBlob().size());
-  status_code_ = net::HTTP_OK;
-  net::URLRequestSimpleJob::Start();
-}
-
-void URLRequestBufferJob::Kill() {
-  weak_factory_.InvalidateWeakPtrs();
-  net::URLRequestSimpleJob::Kill();
-}
-
-void URLRequestBufferJob::GetResponseInfo(net::HttpResponseInfo* info) {
-  std::string status("HTTP/1.1 ");
-  status.append(base::NumberToString(status_code_));
-  status.append(" ");
-  status.append(net::GetHttpReasonPhrase(status_code_));
-  status.append("\0\0", 2);
-  auto* headers = new net::HttpResponseHeaders(status);
-
-  headers->AddHeader(kCORSHeader);
-
-  if (!mime_type_.empty()) {
-    std::string content_type_header(net::HttpRequestHeaders::kContentType);
-    content_type_header.append(": ");
-    content_type_header.append(mime_type_);
-    headers->AddHeader(content_type_header);
-  }
-
-  info->headers = headers;
-}
-
-int URLRequestBufferJob::GetRefCountedData(
-    std::string* mime_type,
-    std::string* charset,
-    scoped_refptr<base::RefCountedMemory>* data,
-    net::CompletionOnceCallback callback) const {
-  *mime_type = mime_type_;
-  *charset = charset_;
-  *data = data_;
-  return net::OK;
-}
-
-}  // namespace electron

+ 0 - 49
shell/browser/net/url_request_buffer_job.h

@@ -1,49 +0,0 @@
-// Copyright (c) 2013 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#ifndef SHELL_BROWSER_NET_URL_REQUEST_BUFFER_JOB_H_
-#define SHELL_BROWSER_NET_URL_REQUEST_BUFFER_JOB_H_
-
-#include <memory>
-#include <string>
-
-#include "base/memory/ref_counted_memory.h"
-#include "net/http/http_status_code.h"
-#include "net/url_request/url_request_simple_job.h"
-#include "shell/browser/net/js_asker.h"
-
-namespace electron {
-
-class URLRequestBufferJob : public JsAsker, public net::URLRequestSimpleJob {
- public:
-  URLRequestBufferJob(net::URLRequest*, net::NetworkDelegate*);
-  ~URLRequestBufferJob() override;
-
-  void StartAsync(std::unique_ptr<base::Value> options, int error);
-
-  // URLRequestJob:
-  void Start() override;
-  void GetResponseInfo(net::HttpResponseInfo* info) override;
-  void Kill() override;
-
-  // URLRequestSimpleJob:
-  int GetRefCountedData(std::string* mime_type,
-                        std::string* charset,
-                        scoped_refptr<base::RefCountedMemory>* data,
-                        net::CompletionOnceCallback callback) const override;
-
- private:
-  std::string mime_type_;
-  std::string charset_;
-  scoped_refptr<base::RefCountedBytes> data_;
-  net::HttpStatusCode status_code_;
-
-  base::WeakPtrFactory<URLRequestBufferJob> weak_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(URLRequestBufferJob);
-};
-
-}  // namespace electron
-
-#endif  // SHELL_BROWSER_NET_URL_REQUEST_BUFFER_JOB_H_

+ 0 - 365
shell/browser/net/url_request_context_getter.cc

@@ -1,365 +0,0 @@
-// Copyright (c) 2018 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#include "shell/browser/net/url_request_context_getter.h"
-
-#include <algorithm>
-#include <memory>
-#include <utility>
-
-#include "base/command_line.h"
-#include "base/strings/string_util.h"
-#include "base/task/post_task.h"
-#include "chrome/common/chrome_constants.h"
-#include "chrome/common/pref_names.h"
-#include "components/network_session_configurator/common/network_switches.h"
-#include "components/prefs/value_map_pref_store.h"
-#include "content/public/browser/browser_task_traits.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/devtools_network_transaction_factory.h"
-#include "content/public/browser/network_service_instance.h"
-#include "net/base/host_mapping_rules.h"
-#include "net/cert/multi_log_ct_verifier.h"
-#include "net/cookies/cookie_monster.h"
-#include "net/dns/mapped_host_resolver.h"  // nogncheck
-#include "net/http/http_auth_handler_factory.h"
-#include "net/http/http_auth_preferences.h"
-#include "net/http/http_auth_scheme.h"
-#include "net/http/http_transaction_factory.h"
-#include "net/log/net_log.h"
-#include "net/traffic_annotation/network_traffic_annotation.h"
-#include "net/url_request/data_protocol_handler.h"
-#include "net/url_request/static_http_user_agent_settings.h"
-#include "net/url_request/url_request_intercepting_job_factory.h"
-#include "net/url_request/url_request_job_factory_impl.h"
-#include "services/network/ignore_errors_cert_verifier.h"
-#include "services/network/network_service.h"
-#include "services/network/public/cpp/features.h"
-#include "services/network/public/cpp/network_switches.h"
-#include "services/network/url_request_context_builder_mojo.h"
-#include "shell/browser/api/atom_api_protocol.h"
-#include "shell/browser/atom_browser_client.h"
-#include "shell/browser/atom_browser_context.h"
-#include "shell/browser/atom_browser_main_parts.h"
-#include "shell/browser/browser_process_impl.h"
-#include "shell/browser/net/about_protocol_handler.h"
-#include "shell/browser/net/asar/asar_protocol_handler.h"
-#include "shell/browser/net/atom_cert_verifier.h"
-#include "shell/browser/net/atom_network_delegate.h"
-#include "shell/browser/net/atom_url_request_job_factory.h"
-#include "shell/browser/net/http_protocol_handler.h"
-#include "shell/browser/net/require_ct_delegate.h"
-#include "shell/browser/net/system_network_context_manager.h"
-#include "url/url_constants.h"
-
-#if !BUILDFLAG(DISABLE_FTP_SUPPORT)
-#include "net/url_request/ftp_protocol_handler.h"
-#endif
-
-#if BUILDFLAG(ENABLE_REPORTING)
-#include "net/reporting/reporting_policy.h"
-#include "net/reporting/reporting_service.h"
-#endif  // BUILDFLAG(ENABLE_REPORTING)
-
-using content::BrowserThread;
-
-namespace electron {
-
-namespace {
-
-void SetupAtomURLRequestJobFactory(
-    content::ProtocolHandlerMap* protocol_handlers,
-    net::URLRequestContext* url_request_context,
-    AtomURLRequestJobFactory* job_factory) {
-  for (auto& protocol_handler : *protocol_handlers) {
-    job_factory->SetProtocolHandler(protocol_handler.first,
-                                    std::move(protocol_handler.second));
-  }
-  protocol_handlers->clear();
-
-  job_factory->SetProtocolHandler(url::kAboutScheme,
-                                  std::make_unique<AboutProtocolHandler>());
-  job_factory->SetProtocolHandler(url::kDataScheme,
-                                  std::make_unique<net::DataProtocolHandler>());
-  job_factory->SetProtocolHandler(
-      url::kFileScheme,
-      std::make_unique<asar::AsarProtocolHandler>(
-          base::CreateTaskRunnerWithTraits(
-              {base::MayBlock(), base::TaskPriority::USER_BLOCKING,
-               base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})));
-  job_factory->SetProtocolHandler(
-      url::kHttpScheme,
-      std::make_unique<HttpProtocolHandler>(url::kHttpScheme));
-  job_factory->SetProtocolHandler(
-      url::kHttpsScheme,
-      std::make_unique<HttpProtocolHandler>(url::kHttpsScheme));
-  job_factory->SetProtocolHandler(
-      url::kWsScheme, std::make_unique<HttpProtocolHandler>(url::kWsScheme));
-  job_factory->SetProtocolHandler(
-      url::kWssScheme, std::make_unique<HttpProtocolHandler>(url::kWssScheme));
-
-#if !BUILDFLAG(DISABLE_FTP_SUPPORT)
-  auto* host_resolver = url_request_context->host_resolver();
-  auto* ftp_auth_cache = url_request_context->ftp_auth_cache();
-  job_factory->SetProtocolHandler(
-      url::kFtpScheme,
-      net::FtpProtocolHandler::Create(host_resolver, ftp_auth_cache));
-#endif
-}
-
-}  // namespace
-
-URLRequestContextGetter::Handle::Handle(
-    base::WeakPtr<AtomBrowserContext> browser_context)
-    : resource_context_(new content::ResourceContext),
-      browser_context_(browser_context),
-      initialized_(false) {}
-
-URLRequestContextGetter::Handle::~Handle() {}
-
-content::ResourceContext*
-URLRequestContextGetter::Handle::GetResourceContext() {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  LazyInitialize();
-  return resource_context_.get();
-}
-
-scoped_refptr<URLRequestContextGetter>
-URLRequestContextGetter::Handle::CreateMainRequestContextGetter(
-    content::ProtocolHandlerMap* protocol_handlers,
-    content::URLRequestInterceptorScopedVector protocol_interceptors) {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  DCHECK(!main_request_context_getter_.get());
-  DCHECK(AtomBrowserMainParts::Get()->browser_process()->io_thread());
-
-  LazyInitialize();
-  main_request_context_getter_ = new URLRequestContextGetter(
-      this, protocol_handlers, std::move(protocol_interceptors));
-  AtomBrowserMainParts::Get()
-      ->browser_process()
-      ->io_thread()
-      ->RegisterURLRequestContextGetter(main_request_context_getter_.get());
-  return main_request_context_getter_;
-}
-
-scoped_refptr<URLRequestContextGetter>
-URLRequestContextGetter::Handle::GetMainRequestContextGetter() {
-  return main_request_context_getter_;
-}
-
-network::mojom::NetworkContextPtr
-URLRequestContextGetter::Handle::GetNetworkContext() {
-  if (!main_network_context_) {
-    main_network_context_request_ = mojo::MakeRequest(&main_network_context_);
-  }
-  return std::move(main_network_context_);
-}
-
-network::mojom::NetworkContextParamsPtr
-URLRequestContextGetter::Handle::CreateNetworkContextParams() {
-  network::mojom::NetworkContextParamsPtr network_context_params =
-      SystemNetworkContextManager::GetInstance()
-          ->CreateDefaultNetworkContextParams();
-
-  network_context_params->user_agent = browser_context_->GetUserAgent();
-
-  network_context_params->http_cache_enabled =
-      browser_context_->CanUseHttpCache();
-
-  network_context_params->accept_language =
-      net::HttpUtil::GenerateAcceptLanguageHeader(
-          AtomBrowserClient::Get()->GetApplicationLocale());
-
-  if (!browser_context_->IsOffTheRecord()) {
-    auto base_path = browser_context_->GetPath();
-    network_context_params->http_cache_path =
-        base_path.Append(chrome::kCacheDirname);
-    network_context_params->http_cache_max_size =
-        browser_context_->GetMaxCacheSize();
-    network_context_params->http_server_properties_path =
-        base_path.Append(chrome::kNetworkPersistentStateFilename);
-    network_context_params->cookie_path =
-        base_path.Append(chrome::kCookieFilename);
-    network_context_params->restore_old_session_cookies = false;
-    network_context_params->persist_session_cookies = false;
-    // TODO(deepak1556): Matches the existing behavior https://git.io/fxHMl,
-    // enable encryption as a followup.
-    network_context_params->enable_encrypted_cookies = false;
-  }
-
-  // TODO(deepak1556): Decide the stand on chrome ct policy and
-  // enable it.
-  // See //net/docs/certificate-transparency.md
-  // network_context_params->enforce_chrome_ct_policy = true;
-  return network_context_params;
-}
-
-void URLRequestContextGetter::Handle::LazyInitialize() {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  if (initialized_)
-    return;
-
-  initialized_ = true;
-  main_network_context_params_ = CreateNetworkContextParams();
-
-  browser_context_->proxy_config_monitor()->AddToNetworkContextParams(
-      main_network_context_params_.get());
-
-  BrowserProcessImpl::ApplyProxyModeFromCommandLine(
-      browser_context_->in_memory_pref_store());
-
-  if (!main_network_context_request_.is_pending()) {
-    main_network_context_request_ = mojo::MakeRequest(&main_network_context_);
-  }
-  content::BrowserContext::EnsureResourceContextInitialized(
-      browser_context_.get());
-}
-
-void URLRequestContextGetter::Handle::ShutdownOnUIThread() {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
-
-  if (main_request_context_getter_) {
-    if (BrowserThread::IsThreadInitialized(BrowserThread::IO)) {
-      base::PostTaskWithTraits(
-          FROM_HERE, {BrowserThread::IO},
-          base::BindOnce(&URLRequestContextGetter::NotifyContextShuttingDown,
-                         base::RetainedRef(main_request_context_getter_)));
-    }
-  }
-
-  if (!BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, this))
-    delete this;
-}
-
-URLRequestContextGetter::URLRequestContextGetter(
-    URLRequestContextGetter::Handle* context_handle,
-    content::ProtocolHandlerMap* protocol_handlers,
-    content::URLRequestInterceptorScopedVector protocol_interceptors)
-    : context_handle_(context_handle),
-      url_request_context_(nullptr),
-      protocol_interceptors_(std::move(protocol_interceptors)),
-      context_shutting_down_(false) {
-  // Must first be created on the UI thread.
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
-
-  if (protocol_handlers)
-    std::swap(protocol_handlers_, *protocol_handlers);
-}
-
-URLRequestContextGetter::~URLRequestContextGetter() {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  // NotifyContextShuttingDown should have been called.
-  DCHECK(context_shutting_down_);
-}
-
-void URLRequestContextGetter::NotifyContextShuttingDown() {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  DCHECK(AtomBrowserMainParts::Get()->browser_process()->io_thread());
-  DCHECK(context_handle_);
-
-  if (context_shutting_down_)
-    return;
-
-  AtomBrowserMainParts::Get()
-      ->browser_process()
-      ->io_thread()
-      ->DeregisterURLRequestContextGetter(this);
-
-  context_shutting_down_ = true;
-  context_handle_->resource_context_.reset();
-  net::URLRequestContextGetter::NotifyContextShuttingDown();
-  network_context_.reset();
-}
-
-net::URLRequestContext* URLRequestContextGetter::GetURLRequestContext() {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
-
-  if (context_shutting_down_)
-    return nullptr;
-
-  if (!url_request_context_) {
-    std::unique_ptr<network::URLRequestContextBuilderMojo> builder =
-        std::make_unique<network::URLRequestContextBuilderMojo>();
-
-    // Enable file:// support.
-    builder->set_file_enabled(true);
-
-#if BUILDFLAG(ENABLE_REPORTING)
-    if (base::FeatureList::IsEnabled(network::features::kReporting)) {
-      auto reporting_policy = net::ReportingPolicy::Create();
-      builder->set_reporting_policy(std::move(reporting_policy));
-    } else {
-      builder->set_reporting_policy(nullptr);
-    }
-
-    builder->set_network_error_logging_enabled(
-        base::FeatureList::IsEnabled(network::features::kNetworkErrorLogging));
-#endif  // BUILDFLAG(ENABLE_REPORTING)
-
-    auto network_delegate = std::make_unique<AtomNetworkDelegate>();
-    network_delegate_ = network_delegate.get();
-    builder->set_network_delegate(std::move(network_delegate));
-
-    ct_delegate_.reset(new RequireCTDelegate);
-    auto cert_verifier = std::make_unique<AtomCertVerifier>(ct_delegate_.get());
-    builder->SetCertVerifier(std::move(cert_verifier));
-
-    builder->SetCreateHttpTransactionFactoryCallback(
-        base::BindOnce(&content::CreateDevToolsNetworkTransactionFactory));
-
-    builder->set_ct_verifier(std::make_unique<net::MultiLogCTVerifier>());
-
-    // Enable FTP, we override it later in SetupAtomURLRequestJobFactory
-#if !BUILDFLAG(DISABLE_FTP_SUPPORT)
-    builder->set_ftp_enabled(true);
-#endif
-
-    auto* network_service = content::GetNetworkServiceImpl();
-    network_context_ = network_service->CreateNetworkContextWithBuilder(
-        std::move(context_handle_->main_network_context_request_),
-        std::move(context_handle_->main_network_context_params_),
-        std::move(builder), &url_request_context_);
-
-    net::TransportSecurityState* transport_security_state =
-        url_request_context_->transport_security_state();
-    transport_security_state->SetRequireCTDelegate(ct_delegate_.get());
-
-    // Add custom standard schemes to cookie schemes.
-    auto* cookie_monster =
-        static_cast<net::CookieMonster*>(url_request_context_->cookie_store());
-    std::vector<std::string> cookie_schemes(
-        {url::kHttpScheme, url::kHttpsScheme, url::kWsScheme, url::kWssScheme});
-    const auto& custom_standard_schemes = electron::api::GetStandardSchemes();
-    cookie_schemes.insert(cookie_schemes.end(), custom_standard_schemes.begin(),
-                          custom_standard_schemes.end());
-    cookie_monster->SetCookieableSchemes(cookie_schemes, base::NullCallback());
-
-    // Setup handlers for custom job factory.
-    top_job_factory_.reset(new AtomURLRequestJobFactory);
-    SetupAtomURLRequestJobFactory(&protocol_handlers_, url_request_context_,
-                                  top_job_factory_.get());
-    std::unique_ptr<net::URLRequestJobFactory> inner_job_factory(
-        new net::URLRequestJobFactoryImpl);
-    if (!protocol_interceptors_.empty()) {
-      // Set up interceptors in the reverse order.
-      for (auto it = protocol_interceptors_.rbegin();
-           it != protocol_interceptors_.rend(); ++it) {
-        inner_job_factory.reset(new net::URLRequestInterceptingJobFactory(
-            std::move(inner_job_factory), std::move(*it)));
-      }
-      protocol_interceptors_.clear();
-    }
-    top_job_factory_->Chain(std::move(inner_job_factory));
-    url_request_context_->set_job_factory(top_job_factory_.get());
-  }
-
-  return url_request_context_;
-}
-
-scoped_refptr<base::SingleThreadTaskRunner>
-URLRequestContextGetter::GetNetworkTaskRunner() const {
-  return base::CreateSingleThreadTaskRunnerWithTraits({BrowserThread::IO});
-}
-
-}  // namespace electron

+ 0 - 114
shell/browser/net/url_request_context_getter.h

@@ -1,114 +0,0 @@
-// Copyright (c) 2018 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#ifndef SHELL_BROWSER_NET_URL_REQUEST_CONTEXT_GETTER_H_
-#define SHELL_BROWSER_NET_URL_REQUEST_CONTEXT_GETTER_H_
-
-#include <memory>
-#include <string>
-#include <vector>
-
-#include "base/files/file_path.h"
-#include "content/public/browser/browser_context.h"
-#include "content/public/browser/resource_context.h"
-#include "net/url_request/url_request_context.h"
-#include "net/url_request/url_request_context_getter.h"
-#include "services/network/public/mojom/network_service.mojom.h"
-
-#if DCHECK_IS_ON()
-#include "base/debug/leak_tracker.h"
-#endif
-
-namespace electron {
-
-class AtomBrowserContext;
-class AtomNetworkDelegate;
-class AtomURLRequestJobFactory;
-class RequireCTDelegate;
-class ResourceContext;
-
-class URLRequestContextGetter : public net::URLRequestContextGetter {
- public:
-  // net::URLRequestContextGetter:
-  net::URLRequestContext* GetURLRequestContext() override;
-  scoped_refptr<base::SingleThreadTaskRunner> GetNetworkTaskRunner()
-      const override;
-
-  // Discard reference to URLRequestContext and inform observers to
-  // shutdown. Must be called only on IO thread.
-  void NotifyContextShuttingDown();
-
-  AtomURLRequestJobFactory* job_factory() const {
-    return top_job_factory_.get();
-  }
-
-  AtomNetworkDelegate* network_delegate() const { return network_delegate_; }
-
- private:
-  friend class AtomBrowserContext;
-
-  // Responsible for destroying URLRequestContextGetter
-  // on the IO thread.
-  class Handle {
-   public:
-    explicit Handle(base::WeakPtr<AtomBrowserContext> browser_context);
-    ~Handle();
-
-    scoped_refptr<URLRequestContextGetter> CreateMainRequestContextGetter(
-        content::ProtocolHandlerMap* protocol_handlers,
-        content::URLRequestInterceptorScopedVector protocol_interceptors);
-    content::ResourceContext* GetResourceContext();
-    scoped_refptr<URLRequestContextGetter> GetMainRequestContextGetter();
-    network::mojom::NetworkContextPtr GetNetworkContext();
-    network::mojom::NetworkContextParamsPtr CreateNetworkContextParams();
-
-    void ShutdownOnUIThread();
-
-   private:
-    friend class URLRequestContextGetter;
-    void LazyInitialize();
-
-    scoped_refptr<URLRequestContextGetter> main_request_context_getter_;
-    std::unique_ptr<content::ResourceContext> resource_context_;
-    base::WeakPtr<AtomBrowserContext> browser_context_;
-    // This is a NetworkContext interface that uses URLRequestContextGetter
-    // NetworkContext, ownership is passed to StoragePartition when
-    // CreateMainNetworkContext is called.
-    network::mojom::NetworkContextPtr main_network_context_;
-    // Request corresponding to |main_network_context_|. Ownership
-    // is passed to network service.
-    network::mojom::NetworkContextRequest main_network_context_request_;
-    network::mojom::NetworkContextParamsPtr main_network_context_params_;
-    bool initialized_;
-
-    DISALLOW_COPY_AND_ASSIGN(Handle);
-  };
-
-  URLRequestContextGetter(
-      URLRequestContextGetter::Handle* context_handle,
-      content::ProtocolHandlerMap* protocol_handlers,
-      content::URLRequestInterceptorScopedVector protocol_interceptors);
-  ~URLRequestContextGetter() override;
-
-#if DCHECK_IS_ON()
-  base::debug::LeakTracker<URLRequestContextGetter> leak_tracker_;
-#endif
-
-  std::unique_ptr<RequireCTDelegate> ct_delegate_;
-  std::unique_ptr<AtomURLRequestJobFactory> top_job_factory_;
-  std::unique_ptr<network::mojom::NetworkContext> network_context_;
-
-  URLRequestContextGetter::Handle* context_handle_;
-  net::URLRequestContext* url_request_context_;
-  AtomNetworkDelegate* network_delegate_;
-  content::ProtocolHandlerMap protocol_handlers_;
-  content::URLRequestInterceptorScopedVector protocol_interceptors_;
-  bool context_shutting_down_;
-
-  DISALLOW_COPY_AND_ASSIGN(URLRequestContextGetter);
-};
-
-}  // namespace electron
-
-#endif  // SHELL_BROWSER_NET_URL_REQUEST_CONTEXT_GETTER_H_

+ 0 - 344
shell/browser/net/url_request_fetch_job.cc

@@ -1,344 +0,0 @@
-// Copyright (c) 2015 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#include "shell/browser/net/url_request_fetch_job.h"
-
-#include <algorithm>
-#include <memory>
-#include <string>
-#include <utility>
-
-#include "base/guid.h"
-#include "base/memory/ptr_util.h"
-#include "base/strings/string_util.h"
-#include "base/task/post_task.h"
-#include "content/public/browser/browser_task_traits.h"
-#include "content/public/browser/browser_thread.h"
-#include "native_mate/dictionary.h"
-#include "net/base/io_buffer.h"
-#include "net/base/net_errors.h"
-#include "net/http/http_response_headers.h"
-#include "net/url_request/url_fetcher.h"
-#include "net/url_request/url_fetcher_response_writer.h"
-#include "shell/browser/api/atom_api_session.h"
-#include "shell/browser/atom_browser_context.h"
-#include "shell/common/native_mate_converters/net_converter.h"
-#include "shell/common/native_mate_converters/v8_value_converter.h"
-
-using content::BrowserThread;
-
-namespace electron {
-
-namespace {
-
-// Convert string to RequestType.
-net::URLFetcher::RequestType GetRequestType(const std::string& raw) {
-  std::string method = base::ToUpperASCII(raw);
-  if (method.empty() || method == "GET")
-    return net::URLFetcher::GET;
-  else if (method == "POST")
-    return net::URLFetcher::POST;
-  else if (method == "HEAD")
-    return net::URLFetcher::HEAD;
-  else if (method == "DELETE")
-    return net::URLFetcher::DELETE_REQUEST;
-  else if (method == "PUT")
-    return net::URLFetcher::PUT;
-  else if (method == "PATCH")
-    return net::URLFetcher::PATCH;
-  else  // Use "GET" as fallback.
-    return net::URLFetcher::GET;
-}
-
-// Pipe the response writer back to URLRequestFetchJob.
-class ResponsePiper : public net::URLFetcherResponseWriter {
- public:
-  explicit ResponsePiper(URLRequestFetchJob* job) : job_(job) {}
-
-  // net::URLFetcherResponseWriter:
-  int Initialize(net::CompletionOnceCallback callback) override {
-    return net::OK;
-  }
-  int Write(net::IOBuffer* buffer,
-            int num_bytes,
-            net::CompletionOnceCallback callback) override {
-    if (first_write_) {
-      // The URLFetcherResponseWriter doesn't have an event when headers have
-      // been read, so we have to emulate by hooking to first write event.
-      job_->HeadersCompleted();
-      first_write_ = false;
-    }
-    return job_->DataAvailable(buffer, num_bytes, std::move(callback));
-  }
-  int Finish(int net_error, net::CompletionOnceCallback callback) override {
-    return net::OK;
-  }
-
- private:
-  bool first_write_ = true;
-  URLRequestFetchJob* job_;
-
-  DISALLOW_COPY_AND_ASSIGN(ResponsePiper);
-};
-
-void BeforeStartInUI(base::WeakPtr<URLRequestFetchJob> job,
-                     mate::Arguments* args) {
-  // Pass whatever user passed to the actaul request job.
-  v8::Local<v8::Value> value;
-  mate::Dictionary options;
-  if (!args->GetNext(&value) ||
-      !mate::ConvertFromV8(args->isolate(), value, &options)) {
-    base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::IO},
-                             base::BindOnce(&URLRequestFetchJob::OnError, job,
-                                            net::ERR_NOT_IMPLEMENTED));
-    return;
-  }
-
-  scoped_refptr<net::URLRequestContextGetter> url_request_context_getter;
-  scoped_refptr<AtomBrowserContext> custom_browser_context;
-  // When |session| is set to |null| we use a new request context for fetch
-  // job.
-  if (options.Get("session", &value)) {
-    if (value->IsNull()) {
-      // We have to create the URLRequestContextGetter on UI thread.
-      custom_browser_context =
-          AtomBrowserContext::From(base::GenerateGUID(), true);
-      url_request_context_getter = custom_browser_context->GetRequestContext();
-    } else {
-      mate::Handle<api::Session> session;
-      if (mate::ConvertFromV8(args->isolate(), value, &session) &&
-          !session.IsEmpty()) {
-        AtomBrowserContext* browser_context = session->browser_context();
-        url_request_context_getter = browser_context->GetRequestContext();
-      }
-    }
-  }
-
-  V8ValueConverter converter;
-  v8::Local<v8::Context> context = args->isolate()->GetCurrentContext();
-  std::unique_ptr<base::Value> request_options(
-      converter.FromV8Value(value, context));
-
-  int error = net::OK;
-  if (!request_options || !request_options->is_dict())
-    error = net::ERR_NOT_IMPLEMENTED;
-
-  JsAsker::IsErrorOptions(request_options.get(), &error);
-
-  base::PostTaskWithTraits(
-      FROM_HERE, {content::BrowserThread::IO},
-      base::BindOnce(&URLRequestFetchJob::StartAsync, job,
-                     base::RetainedRef(url_request_context_getter),
-                     base::RetainedRef(custom_browser_context),
-                     std::move(request_options), error));
-}
-
-}  // namespace
-
-URLRequestFetchJob::URLRequestFetchJob(net::URLRequest* request,
-                                       net::NetworkDelegate* network_delegate)
-    : net::URLRequestJob(request, network_delegate), weak_factory_(this) {}
-
-URLRequestFetchJob::~URLRequestFetchJob() = default;
-
-void URLRequestFetchJob::Start() {
-  auto request_details = std::make_unique<base::DictionaryValue>();
-  FillRequestDetails(request_details.get(), request());
-  base::PostTaskWithTraits(
-      FROM_HERE, {content::BrowserThread::UI},
-      base::BindOnce(
-          &JsAsker::AskForOptions, base::Unretained(isolate()), handler(),
-          std::move(request_details),
-          base::BindOnce(&BeforeStartInUI, weak_factory_.GetWeakPtr())));
-}
-
-void URLRequestFetchJob::StartAsync(
-    scoped_refptr<net::URLRequestContextGetter> url_request_context_getter,
-    scoped_refptr<AtomBrowserContext> browser_context,
-    std::unique_ptr<base::Value> options,
-    int error) {
-  if (error != net::OK) {
-    NotifyStartError(
-        net::URLRequestStatus(net::URLRequestStatus::FAILED, error));
-    return;
-  }
-
-  std::string url, method, referrer;
-  base::DictionaryValue* upload_data = nullptr;
-  base::DictionaryValue* dict =
-      static_cast<base::DictionaryValue*>(options.get());
-  dict->GetString("url", &url);
-  dict->GetString("method", &method);
-  dict->GetString("referrer", &referrer);
-  dict->GetDictionary("uploadData", &upload_data);
-
-  // Check if URL is valid.
-  GURL formated_url(url);
-  if (!formated_url.is_valid()) {
-    NotifyStartError(net::URLRequestStatus(net::URLRequestStatus::FAILED,
-                                           net::ERR_INVALID_URL));
-    return;
-  }
-
-  // Use |request|'s method if |method| is not specified.
-  net::URLFetcher::RequestType request_type;
-  if (method.empty())
-    request_type = GetRequestType(request()->method());
-  else
-    request_type = GetRequestType(method);
-
-  fetcher_ = net::URLFetcher::Create(formated_url, request_type, this,
-                                     MISSING_TRAFFIC_ANNOTATION);
-  fetcher_->SaveResponseWithWriter(base::WrapUnique(new ResponsePiper(this)));
-
-  // A request context getter is passed by the user.
-  if (url_request_context_getter)
-    fetcher_->SetRequestContext(url_request_context_getter.get());
-  else
-    fetcher_->SetRequestContext(request_context_getter());
-
-  // Use |request|'s referrer if |referrer| is not specified.
-  if (referrer.empty())
-    fetcher_->SetReferrer(request()->referrer());
-  else
-    fetcher_->SetReferrer(referrer);
-
-  // Set the data needed for POSTs.
-  if (upload_data && request_type == net::URLFetcher::POST) {
-    std::string content_type, data;
-    upload_data->GetString("contentType", &content_type);
-    upload_data->GetString("data", &data);
-    fetcher_->SetUploadData(content_type, data);
-  }
-
-  // Use |request|'s headers.
-  fetcher_->SetExtraRequestHeaders(
-      request()->extra_request_headers().ToString());
-
-  fetcher_->Start();
-
-  if (browser_context)
-    custom_browser_context_ = browser_context;
-}
-
-void URLRequestFetchJob::OnError(int error) {
-  NotifyStartError(net::URLRequestStatus(net::URLRequestStatus::FAILED, error));
-}
-
-void URLRequestFetchJob::HeadersCompleted() {
-  response_info_.reset(new net::HttpResponseInfo);
-  response_info_->headers = fetcher_->GetResponseHeaders();
-  NotifyHeadersComplete();
-}
-
-int URLRequestFetchJob::DataAvailable(net::IOBuffer* buffer,
-                                      int num_bytes,
-                                      net::CompletionOnceCallback callback) {
-  // When pending_buffer_ is empty, there's no ReadRawData() operation waiting
-  // for IO completion, we have to save the parameters until the request is
-  // ready to read data.
-  if (!pending_buffer_.get()) {
-    write_buffer_ = buffer;
-    write_num_bytes_ = num_bytes;
-    write_callback_ = std::move(callback);
-    return net::ERR_IO_PENDING;
-  }
-
-  // Write data to the pending buffer and clear them after the writing.
-  int bytes_read = BufferCopy(buffer, num_bytes, pending_buffer_.get(),
-                              pending_buffer_size_);
-  ClearPendingBuffer();
-  ReadRawDataComplete(bytes_read);
-  return bytes_read;
-}
-
-void URLRequestFetchJob::Kill() {
-  weak_factory_.InvalidateWeakPtrs();
-  net::URLRequestJob::Kill();
-  fetcher_.reset();
-  custom_browser_context_ = nullptr;
-}
-
-int URLRequestFetchJob::ReadRawData(net::IOBuffer* dest, int dest_size) {
-  if (GetResponseCode() == 204) {
-    request()->set_received_response_content_length(prefilter_bytes_read());
-    return net::OK;
-  }
-
-  // When write_buffer_ is empty, there is no data valable yet, we have to save
-  // the dest buffer util DataAvailable.
-  if (!write_buffer_.get()) {
-    pending_buffer_ = dest;
-    pending_buffer_size_ = dest_size;
-    return net::ERR_IO_PENDING;
-  }
-
-  // Read from the write buffer and clear them after reading.
-  int bytes_read =
-      BufferCopy(write_buffer_.get(), write_num_bytes_, dest, dest_size);
-  ClearWriteBuffer();
-  if (!write_callback_.is_null())
-    std::move(write_callback_).Run(bytes_read);
-  return bytes_read;
-}
-
-bool URLRequestFetchJob::GetMimeType(std::string* mime_type) const {
-  if (!response_info_ || !response_info_->headers)
-    return false;
-
-  return response_info_->headers->GetMimeType(mime_type);
-}
-
-void URLRequestFetchJob::GetResponseInfo(net::HttpResponseInfo* info) {
-  if (response_info_)
-    *info = *response_info_;
-}
-
-int URLRequestFetchJob::GetResponseCode() const {
-  if (!response_info_ || !response_info_->headers)
-    return -1;
-
-  return response_info_->headers->response_code();
-}
-
-void URLRequestFetchJob::OnURLFetchComplete(const net::URLFetcher* source) {
-  ClearPendingBuffer();
-  ClearWriteBuffer();
-
-  if (fetcher_->GetStatus().is_success()) {
-    if (!response_info_) {
-      // Since we notify header completion only after first write there will be
-      // no response object constructed for http respones with no content 204.
-      // We notify header completion here.
-      HeadersCompleted();
-      return;
-    }
-    if (request_->status().is_io_pending()) {
-      ReadRawDataComplete(0);
-    }
-  } else {
-    NotifyStartError(fetcher_->GetStatus());
-  }
-}
-
-int URLRequestFetchJob::BufferCopy(net::IOBuffer* source,
-                                   int num_bytes,
-                                   net::IOBuffer* target,
-                                   int target_size) {
-  int bytes_written = std::min(num_bytes, target_size);
-  memcpy(target->data(), source->data(), bytes_written);
-  return bytes_written;
-}
-
-void URLRequestFetchJob::ClearPendingBuffer() {
-  pending_buffer_ = nullptr;
-  pending_buffer_size_ = 0;
-}
-
-void URLRequestFetchJob::ClearWriteBuffer() {
-  write_buffer_ = nullptr;
-  write_num_bytes_ = 0;
-}
-
-}  // namespace electron

+ 0 - 81
shell/browser/net/url_request_fetch_job.h

@@ -1,81 +0,0 @@
-// Copyright (c) 2015 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#ifndef SHELL_BROWSER_NET_URL_REQUEST_FETCH_JOB_H_
-#define SHELL_BROWSER_NET_URL_REQUEST_FETCH_JOB_H_
-
-#include <memory>
-#include <string>
-
-#include "base/memory/weak_ptr.h"
-#include "net/url_request/url_fetcher_delegate.h"
-#include "net/url_request/url_request_context_getter.h"
-#include "net/url_request/url_request_job.h"
-#include "shell/browser/net/js_asker.h"
-
-namespace electron {
-
-class AtomBrowserContext;
-
-class URLRequestFetchJob : public JsAsker,
-                           public net::URLRequestJob,
-                           public net::URLFetcherDelegate {
- public:
-  URLRequestFetchJob(net::URLRequest*, net::NetworkDelegate*);
-  ~URLRequestFetchJob() override;
-
-  void StartAsync(
-      scoped_refptr<net::URLRequestContextGetter> request_context_getter,
-      scoped_refptr<AtomBrowserContext> browser_context,
-      std::unique_ptr<base::Value> options,
-      int error);
-  void OnError(int error);
-
-  // Called by response writer.
-  void HeadersCompleted();
-  int DataAvailable(net::IOBuffer* buffer,
-                    int num_bytes,
-                    net::CompletionOnceCallback callback);
-
- protected:
-  // net::URLRequestJob:
-  void Start() override;
-  void Kill() override;
-  int ReadRawData(net::IOBuffer* buf, int buf_size) override;
-  bool GetMimeType(std::string* mime_type) const override;
-  void GetResponseInfo(net::HttpResponseInfo* info) override;
-  int GetResponseCode() const override;
-
-  // net::URLFetcherDelegate:
-  void OnURLFetchComplete(const net::URLFetcher* source) override;
-
- private:
-  int BufferCopy(net::IOBuffer* source,
-                 int num_bytes,
-                 net::IOBuffer* target,
-                 int target_size);
-  void ClearPendingBuffer();
-  void ClearWriteBuffer();
-
-  scoped_refptr<AtomBrowserContext> custom_browser_context_;
-  std::unique_ptr<net::URLFetcher> fetcher_;
-  std::unique_ptr<net::HttpResponseInfo> response_info_;
-
-  // Saved arguments passed to ReadRawData.
-  scoped_refptr<net::IOBuffer> pending_buffer_;
-  int pending_buffer_size_ = 0;
-
-  // Saved arguments passed to DataAvailable.
-  scoped_refptr<net::IOBuffer> write_buffer_;
-  int write_num_bytes_ = 0;
-  net::CompletionOnceCallback write_callback_;
-
-  base::WeakPtrFactory<URLRequestFetchJob> weak_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(URLRequestFetchJob);
-};
-
-}  // namespace electron
-
-#endif  // SHELL_BROWSER_NET_URL_REQUEST_FETCH_JOB_H_

+ 0 - 258
shell/browser/net/url_request_stream_job.cc

@@ -1,258 +0,0 @@
-// Copyright (c) 2017 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#include "shell/browser/net/url_request_stream_job.h"
-
-#include <algorithm>
-#include <memory>
-#include <ostream>
-#include <string>
-#include <utility>
-
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/string_util.h"
-#include "base/task/post_task.h"
-#include "base/threading/thread_task_runner_handle.h"
-#include "base/time/time.h"
-#include "content/public/browser/browser_task_traits.h"
-#include "native_mate/dictionary.h"
-#include "net/base/net_errors.h"
-#include "net/filter/gzip_source_stream.h"
-#include "shell/common/api/event_emitter_caller.h"
-#include "shell/common/atom_constants.h"
-#include "shell/common/native_mate_converters/net_converter.h"
-#include "shell/common/node_includes.h"
-
-namespace electron {
-
-namespace {
-
-void BeforeStartInUI(base::WeakPtr<URLRequestStreamJob> job,
-                     mate::Arguments* args) {
-  v8::Local<v8::Value> value;
-  int error = net::OK;
-  bool ended = false;
-  if (!args->GetNext(&value) || !value->IsObject()) {
-    // Invalid opts.
-    base::PostTaskWithTraits(
-        FROM_HERE, {content::BrowserThread::IO},
-        base::BindOnce(&URLRequestStreamJob::OnError, job, net::ERR_FAILED));
-    return;
-  }
-
-  mate::Dictionary opts(args->isolate(), v8::Local<v8::Object>::Cast(value));
-  int status_code;
-  if (!opts.Get("statusCode", &status_code)) {
-    // assume HTTP OK if statusCode is not passed.
-    status_code = 200;
-  }
-  std::string status("HTTP/1.1 ");
-  status.append(base::NumberToString(status_code));
-  status.append(" ");
-  status.append(
-      net::GetHttpReasonPhrase(static_cast<net::HttpStatusCode>(status_code)));
-  status.append("\0\0", 2);
-  scoped_refptr<net::HttpResponseHeaders> response_headers(
-      new net::HttpResponseHeaders(status));
-
-  if (opts.Get("headers", &value)) {
-    mate::Converter<net::HttpResponseHeaders*>::FromV8(args->isolate(), value,
-                                                       response_headers.get());
-  }
-
-  if (!opts.Get("data", &value)) {
-    // Assume the opts is already a stream
-    value = opts.GetHandle();
-  } else if (value->IsNullOrUndefined()) {
-    // "data" was explicitly passed as null or undefined, assume the user wants
-    // to send an empty body.
-    ended = true;
-    base::PostTaskWithTraits(
-        FROM_HERE, {content::BrowserThread::IO},
-        base::BindOnce(&URLRequestStreamJob::StartAsync, job, nullptr,
-                       base::RetainedRef(response_headers), ended, error));
-    return;
-  }
-
-  mate::Dictionary data(args->isolate(), v8::Local<v8::Object>::Cast(value));
-  if (!data.Get("on", &value) || !value->IsFunction() ||
-      !data.Get("removeListener", &value) || !value->IsFunction()) {
-    // If data is passed but it is not a stream, signal an error.
-    base::PostTaskWithTraits(
-        FROM_HERE, {content::BrowserThread::IO},
-        base::BindOnce(&URLRequestStreamJob::OnError, job, net::ERR_FAILED));
-    return;
-  }
-
-  auto subscriber = base::MakeRefCounted<mate::StreamSubscriber>(
-      args->isolate(), data.GetHandle(), job,
-      base::ThreadTaskRunnerHandle::Get());
-
-  base::PostTaskWithTraits(
-      FROM_HERE, {content::BrowserThread::IO},
-      base::BindOnce(&URLRequestStreamJob::StartAsync, job, subscriber,
-                     base::RetainedRef(response_headers), ended, error));
-}
-
-}  // namespace
-
-URLRequestStreamJob::URLRequestStreamJob(net::URLRequest* request,
-                                         net::NetworkDelegate* network_delegate)
-    : net::URLRequestJob(request, network_delegate),
-      pending_buf_(nullptr),
-      pending_buf_size_(0),
-      ended_(false),
-      response_headers_(nullptr),
-      weak_factory_(this) {}
-
-URLRequestStreamJob::~URLRequestStreamJob() {
-  DCHECK(!subscriber_ || subscriber_->HasOneRef());
-}
-
-void URLRequestStreamJob::Start() {
-  auto request_details = std::make_unique<base::DictionaryValue>();
-  FillRequestDetails(request_details.get(), request());
-  base::PostTaskWithTraits(
-      FROM_HERE, {content::BrowserThread::UI},
-      base::BindOnce(
-          &JsAsker::AskForOptions, base::Unretained(isolate()), handler(),
-          std::move(request_details),
-          base::BindOnce(&BeforeStartInUI, weak_factory_.GetWeakPtr())));
-}
-
-void URLRequestStreamJob::StartAsync(
-    scoped_refptr<mate::StreamSubscriber> subscriber,
-    scoped_refptr<net::HttpResponseHeaders> response_headers,
-    bool ended,
-    int error) {
-  if (error != net::OK) {
-    NotifyStartError(
-        net::URLRequestStatus(net::URLRequestStatus::FAILED, error));
-    return;
-  }
-
-  ended_ = ended;
-  response_headers_ = response_headers;
-  subscriber_ = subscriber;
-  request_start_time_ = base::TimeTicks::Now();
-  NotifyHeadersComplete();
-}
-
-void URLRequestStreamJob::OnData(std::vector<char>&& buffer) {  // NOLINT
-  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
-  if (write_buffer_.empty()) {
-    // Quick branch without copying.
-    write_buffer_ = std::move(buffer);
-  } else {
-    // write_buffer_ += buffer
-    size_t len = write_buffer_.size();
-    write_buffer_.resize(len + buffer.size());
-    std::copy(buffer.begin(), buffer.end(), write_buffer_.begin() + len);
-  }
-
-  // Copy to output.
-  if (pending_buf_) {
-    int len = BufferCopy(&write_buffer_, pending_buf_.get(), pending_buf_size_);
-    write_buffer_.erase(write_buffer_.begin(), write_buffer_.begin() + len);
-    pending_buf_ = nullptr;
-    pending_buf_size_ = 0;
-    ReadRawDataComplete(len);
-  }
-}
-
-void URLRequestStreamJob::OnEnd() {
-  ended_ = true;
-  if (pending_buf_) {
-    ReadRawDataComplete(0);
-  }
-}
-
-void URLRequestStreamJob::OnError(int error) {
-  NotifyStartError(net::URLRequestStatus(net::URLRequestStatus::FAILED, error));
-}
-
-int URLRequestStreamJob::ReadRawData(net::IOBuffer* dest, int dest_size) {
-  response_start_time_ = base::TimeTicks::Now();
-
-  if (ended_ && write_buffer_.empty())
-    return 0;
-
-  // When write_buffer_ is empty, there is no data valable yet, we have to save
-  // the dest buffer util DataAvailable.
-  if (write_buffer_.empty()) {
-    pending_buf_ = dest;
-    pending_buf_size_ = dest_size;
-    return net::ERR_IO_PENDING;
-  }
-
-  // Read from the write buffer and clear them after reading.
-  int len = BufferCopy(&write_buffer_, dest, dest_size);
-  write_buffer_.erase(write_buffer_.begin(), write_buffer_.begin() + len);
-  return len;
-}
-
-void URLRequestStreamJob::DoneReading() {
-  write_buffer_.clear();
-}
-
-void URLRequestStreamJob::DoneReadingRedirectResponse() {
-  if (subscriber_) {
-    DCHECK(subscriber_->HasAtLeastOneRef());
-    subscriber_ = nullptr;
-  }
-  DoneReading();
-}
-
-std::unique_ptr<net::SourceStream> URLRequestStreamJob::SetUpSourceStream() {
-  std::unique_ptr<net::SourceStream> source =
-      net::URLRequestJob::SetUpSourceStream();
-  size_t i = 0;
-  std::string type;
-  while (response_headers_->EnumerateHeader(&i, "Content-Encoding", &type)) {
-    if (base::LowerCaseEqualsASCII(type, "gzip") ||
-        base::LowerCaseEqualsASCII(type, "x-gzip")) {
-      return net::GzipSourceStream::Create(std::move(source),
-                                           net::SourceStream::TYPE_GZIP);
-    } else if (base::LowerCaseEqualsASCII(type, "deflate")) {
-      return net::GzipSourceStream::Create(std::move(source),
-                                           net::SourceStream::TYPE_DEFLATE);
-    }
-  }
-  return source;
-}
-
-bool URLRequestStreamJob::GetMimeType(std::string* mime_type) const {
-  return response_headers_->GetMimeType(mime_type);
-}
-
-int URLRequestStreamJob::GetResponseCode() const {
-  return response_headers_->response_code();
-}
-
-void URLRequestStreamJob::GetResponseInfo(net::HttpResponseInfo* info) {
-  info->headers = response_headers_;
-}
-
-void URLRequestStreamJob::GetLoadTimingInfo(
-    net::LoadTimingInfo* load_timing_info) const {
-  load_timing_info->send_start = request_start_time_;
-  load_timing_info->send_end = request_start_time_;
-  load_timing_info->request_start = request_start_time_;
-  load_timing_info->receive_headers_end = response_start_time_;
-}
-
-void URLRequestStreamJob::Kill() {
-  weak_factory_.InvalidateWeakPtrs();
-  net::URLRequestJob::Kill();
-}
-
-int URLRequestStreamJob::BufferCopy(std::vector<char>* source,
-                                    net::IOBuffer* target,
-                                    int target_size) {
-  int bytes_written = std::min(static_cast<int>(source->size()), target_size);
-  memcpy(target->data(), source->data(), bytes_written);
-  return bytes_written;
-}
-
-}  // namespace electron

+ 0 - 73
shell/browser/net/url_request_stream_job.h

@@ -1,73 +0,0 @@
-// Copyright (c) 2017 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#ifndef SHELL_BROWSER_NET_URL_REQUEST_STREAM_JOB_H_
-#define SHELL_BROWSER_NET_URL_REQUEST_STREAM_JOB_H_
-
-#include <memory>
-#include <string>
-#include <vector>
-
-#include "base/memory/scoped_refptr.h"
-#include "net/base/io_buffer.h"
-#include "net/http/http_status_code.h"
-#include "net/url_request/url_request_job.h"
-#include "shell/browser/api/stream_subscriber.h"
-#include "shell/browser/net/js_asker.h"
-
-namespace electron {
-
-class URLRequestStreamJob : public JsAsker, public net::URLRequestJob {
- public:
-  URLRequestStreamJob(net::URLRequest* request,
-                      net::NetworkDelegate* network_delegate);
-  ~URLRequestStreamJob() override;
-
-  void StartAsync(scoped_refptr<mate::StreamSubscriber> subscriber,
-                  scoped_refptr<net::HttpResponseHeaders> response_headers,
-                  bool ended,
-                  int error);
-
-  void OnData(std::vector<char>&& buffer);  // NOLINT
-  void OnEnd();
-  void OnError(int error);
-
- protected:
-  // URLRequestJob
-  void Start() override;
-  int ReadRawData(net::IOBuffer* buf, int buf_size) override;
-  void DoneReading() override;
-  void DoneReadingRedirectResponse() override;
-  std::unique_ptr<net::SourceStream> SetUpSourceStream() override;
-  bool GetMimeType(std::string* mime_type) const override;
-  int GetResponseCode() const override;
-  void GetResponseInfo(net::HttpResponseInfo* info) override;
-  void GetLoadTimingInfo(net::LoadTimingInfo* load_timing_info) const override;
-  void Kill() override;
-
- private:
-  int BufferCopy(std::vector<char>* source,
-                 net::IOBuffer* target,
-                 int target_size);
-
-  // Saved arguments passed to ReadRawData.
-  scoped_refptr<net::IOBuffer> pending_buf_;
-  int pending_buf_size_;
-
-  // Saved arguments passed to OnData.
-  std::vector<char> write_buffer_;
-
-  bool ended_;
-  base::TimeTicks request_start_time_;
-  base::TimeTicks response_start_time_;
-  scoped_refptr<net::HttpResponseHeaders> response_headers_;
-  scoped_refptr<mate::StreamSubscriber> subscriber_;
-
-  base::WeakPtrFactory<URLRequestStreamJob> weak_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(URLRequestStreamJob);
-};
-}  // namespace electron
-
-#endif  // SHELL_BROWSER_NET_URL_REQUEST_STREAM_JOB_H_

+ 0 - 117
shell/browser/net/url_request_string_job.cc

@@ -1,117 +0,0 @@
-// Copyright (c) 2013 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#include "shell/browser/net/url_request_string_job.h"
-
-#include <memory>
-#include <string>
-#include <utility>
-
-#include "base/task/post_task.h"
-#include "content/public/browser/browser_task_traits.h"
-#include "content/public/browser/browser_thread.h"
-#include "net/base/net_errors.h"
-#include "shell/common/atom_constants.h"
-#include "shell/common/native_mate_converters/net_converter.h"
-#include "shell/common/native_mate_converters/v8_value_converter.h"
-
-namespace electron {
-
-namespace {
-
-void BeforeStartInUI(base::WeakPtr<URLRequestStringJob> job,
-                     mate::Arguments* args) {
-  v8::Local<v8::Value> value;
-  int error = net::OK;
-  std::unique_ptr<base::Value> request_options = nullptr;
-
-  if (args->GetNext(&value)) {
-    V8ValueConverter converter;
-    v8::Local<v8::Context> context = args->isolate()->GetCurrentContext();
-    request_options = converter.FromV8Value(value, context);
-  }
-
-  if (request_options) {
-    JsAsker::IsErrorOptions(request_options.get(), &error);
-  } else {
-    error = net::ERR_NOT_IMPLEMENTED;
-  }
-
-  base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::IO},
-                           base::BindOnce(&URLRequestStringJob::StartAsync, job,
-                                          std::move(request_options), error));
-}
-
-}  // namespace
-
-URLRequestStringJob::URLRequestStringJob(net::URLRequest* request,
-                                         net::NetworkDelegate* network_delegate)
-    : net::URLRequestSimpleJob(request, network_delegate),
-      weak_factory_(this) {}
-
-URLRequestStringJob::~URLRequestStringJob() = default;
-
-void URLRequestStringJob::Start() {
-  auto request_details = std::make_unique<base::DictionaryValue>();
-  FillRequestDetails(request_details.get(), request());
-  base::PostTaskWithTraits(
-      FROM_HERE, {content::BrowserThread::UI},
-      base::BindOnce(
-          &JsAsker::AskForOptions, base::Unretained(isolate()), handler(),
-          std::move(request_details),
-          base::BindOnce(&BeforeStartInUI, weak_factory_.GetWeakPtr())));
-}
-
-void URLRequestStringJob::StartAsync(std::unique_ptr<base::Value> options,
-                                     int error) {
-  if (error != net::OK) {
-    NotifyStartError(
-        net::URLRequestStatus(net::URLRequestStatus::FAILED, error));
-    return;
-  }
-
-  if (options->is_dict()) {
-    base::DictionaryValue* dict =
-        static_cast<base::DictionaryValue*>(options.get());
-    dict->GetString("mimeType", &mime_type_);
-    dict->GetString("charset", &charset_);
-    dict->GetString("data", &data_);
-  } else if (options->is_string()) {
-    data_ = options->GetString();
-  }
-  net::URLRequestSimpleJob::Start();
-}
-
-void URLRequestStringJob::Kill() {
-  weak_factory_.InvalidateWeakPtrs();
-  net::URLRequestSimpleJob::Kill();
-}
-
-void URLRequestStringJob::GetResponseInfo(net::HttpResponseInfo* info) {
-  std::string status("HTTP/1.1 200 OK");
-  auto* headers = new net::HttpResponseHeaders(status);
-
-  headers->AddHeader(kCORSHeader);
-
-  if (!mime_type_.empty()) {
-    std::string content_type_header(net::HttpRequestHeaders::kContentType);
-    content_type_header.append(": ");
-    content_type_header.append(mime_type_);
-    headers->AddHeader(content_type_header);
-  }
-
-  info->headers = headers;
-}
-
-int URLRequestStringJob::GetData(std::string* mime_type,
-                                 std::string* charset,
-                                 std::string* data,
-                                 net::CompletionOnceCallback callback) const {
-  *mime_type = mime_type_;
-  *charset = charset_;
-  *data = data_;
-  return net::OK;
-}
-
-}  // namespace electron

+ 0 - 46
shell/browser/net/url_request_string_job.h

@@ -1,46 +0,0 @@
-// Copyright (c) 2013 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#ifndef SHELL_BROWSER_NET_URL_REQUEST_STRING_JOB_H_
-#define SHELL_BROWSER_NET_URL_REQUEST_STRING_JOB_H_
-
-#include <memory>
-#include <string>
-
-#include "net/url_request/url_request_simple_job.h"
-#include "shell/browser/net/js_asker.h"
-
-namespace electron {
-
-class URLRequestStringJob : public JsAsker, public net::URLRequestSimpleJob {
- public:
-  URLRequestStringJob(net::URLRequest*, net::NetworkDelegate*);
-  ~URLRequestStringJob() override;
-
-  void StartAsync(std::unique_ptr<base::Value> options, int error);
-
-  // URLRequestJob:
-  void Start() override;
-  void GetResponseInfo(net::HttpResponseInfo* info) override;
-  void Kill() override;
-
-  // URLRequestSimpleJob:
-  int GetData(std::string* mime_type,
-              std::string* charset,
-              std::string* data,
-              net::CompletionOnceCallback callback) const override;
-
- private:
-  std::string mime_type_;
-  std::string charset_;
-  std::string data_;
-
-  base::WeakPtrFactory<URLRequestStringJob> weak_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(URLRequestStringJob);
-};
-
-}  // namespace electron
-
-#endif  // SHELL_BROWSER_NET_URL_REQUEST_STRING_JOB_H_

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

@@ -10,7 +10,7 @@
 #include "base/callback.h"
 #include "base/memory/shared_memory_mapping.h"
 #include "components/viz/host/host_display_client.h"
-#include "services/viz/privileged/interfaces/compositing/layered_window_updater.mojom.h"
+#include "services/viz/privileged/mojom/compositing/layered_window_updater.mojom.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "ui/gfx/native_widget_types.h"

+ 3 - 4
shell/browser/ui/devtools_ui.cc

@@ -60,10 +60,9 @@ class BundledDataSource : public content::URLDataSource {
   // content::URLDataSource implementation.
   std::string GetSource() override { return kChromeUIDevToolsHost; }
 
-  void StartDataRequest(
-      const std::string& path,
-      const content::ResourceRequestInfo::WebContentsGetter& wc_getter,
-      const GotDataCallback& callback) override {
+  void StartDataRequest(const std::string& path,
+                        const content::WebContents::Getter& wc_getter,
+                        const GotDataCallback& callback) override {
     // Serve request from local bundle.
     std::string bundled_path_prefix(kChromeUIDevToolsBundledPath);
     bundled_path_prefix += "/";

+ 0 - 231
shell/browser/ui/webui/pdf_viewer_handler.cc

@@ -1,231 +0,0 @@
-// Copyright (c) 2017 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#include "shell/browser/ui/webui/pdf_viewer_handler.h"
-
-#include <memory>
-#include <utility>
-
-#include "base/bind.h"
-#include "base/values.h"
-#include "chrome/browser/browser_process.h"
-#include "content/public/browser/stream_handle.h"
-#include "content/public/browser/stream_info.h"
-#include "content/public/browser/web_contents.h"
-#include "content/public/browser/web_ui.h"
-#include "content/public/common/page_zoom.h"
-#include "content/public/common/url_constants.h"
-#include "net/http/http_response_headers.h"
-#include "shell/common/atom_constants.h"
-#include "ui/base/l10n/l10n_util.h"
-#include "ui/base/webui/web_ui_util.h"
-
-namespace electron {
-
-namespace {
-
-void CreateResponseHeadersDictionary(const net::HttpResponseHeaders* headers,
-                                     base::DictionaryValue* result) {
-  if (!headers)
-    return;
-
-  size_t iter = 0;
-  std::string header_name;
-  std::string header_value;
-  while (headers->EnumerateHeaderLines(&iter, &header_name, &header_value)) {
-    base::Value* existing_value = nullptr;
-    if (result->Get(header_name, &existing_value)) {
-      std::string src = existing_value->GetString();
-      result->SetString(header_name, src + ", " + header_value);
-    } else {
-      result->SetString(header_name, header_value);
-    }
-  }
-}
-
-void PopulateStreamInfo(base::DictionaryValue* stream_info,
-                        content::StreamInfo* stream,
-                        const std::string& original_url) {
-  auto headers_dict = std::make_unique<base::DictionaryValue>();
-  auto stream_url = stream->handle->GetURL().spec();
-  CreateResponseHeadersDictionary(stream->response_headers.get(),
-                                  headers_dict.get());
-  stream_info->SetString("streamURL", stream_url);
-  stream_info->SetString("originalURL", original_url);
-  stream_info->Set("responseHeaders", std::move(headers_dict));
-}
-
-}  // namespace
-
-PdfViewerHandler::PdfViewerHandler(const std::string& src)
-    : original_url_(src) {}
-
-PdfViewerHandler::~PdfViewerHandler() {
-  RemoveObserver();
-}
-
-void PdfViewerHandler::SetPdfResourceStream(content::StreamInfo* stream) {
-  stream_ = stream;
-  if (!!initialize_callback_id_.get()) {
-    auto list = std::make_unique<base::ListValue>();
-    list->Set(0, std::move(initialize_callback_id_));
-    Initialize(list.get());
-  }
-}
-
-void PdfViewerHandler::RegisterMessages() {
-  web_ui()->RegisterMessageCallback(
-      "initialize", base::BindRepeating(&PdfViewerHandler::Initialize,
-                                        base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      "getDefaultZoom", base::BindRepeating(&PdfViewerHandler::GetInitialZoom,
-                                            base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      "getInitialZoom", base::BindRepeating(&PdfViewerHandler::GetInitialZoom,
-                                            base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      "setZoom",
-      base::BindRepeating(&PdfViewerHandler::SetZoom, base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      "getStrings", base::BindRepeating(&PdfViewerHandler::GetStrings,
-                                        base::Unretained(this)));
-  web_ui()->RegisterMessageCallback(
-      "reload",
-      base::BindRepeating(&PdfViewerHandler::Reload, base::Unretained(this)));
-}
-
-void PdfViewerHandler::OnJavascriptAllowed() {
-  AddObserver();
-}
-
-void PdfViewerHandler::OnJavascriptDisallowed() {
-  RemoveObserver();
-}
-
-void PdfViewerHandler::Initialize(const base::ListValue* args) {
-  CHECK_EQ(1U, args->GetSize());
-  const base::Value* callback_id;
-  CHECK(args->Get(0, &callback_id));
-
-  if (stream_) {
-    CHECK(!initialize_callback_id_.get());
-    AllowJavascript();
-
-    auto stream_info = std::make_unique<base::DictionaryValue>();
-    PopulateStreamInfo(stream_info.get(), stream_, original_url_);
-    ResolveJavascriptCallback(*callback_id, *stream_info);
-  } else {
-    initialize_callback_id_ =
-        base::Value::ToUniquePtrValue(callback_id.Clone());
-  }
-
-  auto zoom_controller =
-      WebContentsZoomController::FromWebContents(web_ui()->GetWebContents());
-  zoom_controller->SetZoomMode(WebContentsZoomController::ZoomMode::MANUAL);
-  zoom_controller->SetZoomLevel(0);
-}
-
-void PdfViewerHandler::GetDefaultZoom(const base::ListValue* args) {
-  if (!IsJavascriptAllowed())
-    return;
-  CHECK_EQ(1U, args->GetSize());
-  const base::Value* callback_id;
-  CHECK(args->Get(0, &callback_id));
-
-  auto zoom_controller =
-      WebContentsZoomController::FromWebContents(web_ui()->GetWebContents());
-  double zoom_level = zoom_controller->GetDefaultZoomLevel();
-  ResolveJavascriptCallback(
-      *callback_id, base::Value(content::ZoomLevelToZoomFactor(zoom_level)));
-}
-
-void PdfViewerHandler::GetInitialZoom(const base::ListValue* args) {
-  if (!IsJavascriptAllowed())
-    return;
-  CHECK_EQ(1U, args->GetSize());
-  const base::Value* callback_id;
-  CHECK(args->Get(0, &callback_id));
-
-  auto zoom_controller =
-      WebContentsZoomController::FromWebContents(web_ui()->GetWebContents());
-  double zoom_level = zoom_controller->GetZoomLevel();
-  ResolveJavascriptCallback(
-      *callback_id, base::Value(content::ZoomLevelToZoomFactor(zoom_level)));
-}
-
-void PdfViewerHandler::SetZoom(const base::ListValue* args) {
-  if (!IsJavascriptAllowed())
-    return;
-  CHECK_EQ(2U, args->GetSize());
-  const base::Value* callback_id;
-  CHECK(args->Get(0, &callback_id));
-  double zoom_level = 0.0;
-  CHECK(args->GetDouble(1, &zoom_level));
-
-  auto zoom_controller =
-      WebContentsZoomController::FromWebContents(web_ui()->GetWebContents());
-  zoom_controller->SetZoomLevel(zoom_level);
-  ResolveJavascriptCallback(*callback_id, base::Value(zoom_level));
-}
-
-void PdfViewerHandler::GetStrings(const base::ListValue* args) {
-  if (!IsJavascriptAllowed())
-    return;
-  CHECK_EQ(1U, args->GetSize());
-  const base::Value* callback_id;
-  CHECK(args->Get(0, &callback_id));
-
-  auto result = std::make_unique<base::DictionaryValue>();
-// TODO(deepak1556): Generate strings from components/pdf_strings.grdp.
-#define SET_STRING(id, resource) result->SetString(id, resource)
-  SET_STRING("passwordPrompt",
-             "This document is password protected.  Please enter a password.");
-  SET_STRING("passwordSubmit", "Submit");
-  SET_STRING("passwordInvalid", "Incorrect password");
-  SET_STRING("pageLoading", "Loading...");
-  SET_STRING("pageLoadFailed", "Failed to load PDF document");
-  SET_STRING("pageReload", "Reload");
-  SET_STRING("bookmarks", "Bookmarks");
-  SET_STRING("labelPageNumber", "Page number");
-  SET_STRING("tooltipRotateCW", "Rotate clockwise");
-  SET_STRING("tooltipDownload", "Download");
-  SET_STRING("tooltipFitToPage", "Fit to page");
-  SET_STRING("tooltipFitToWidth", "Fit to width");
-  SET_STRING("tooltipZoomIn", "Zoom in");
-  SET_STRING("tooltipZoomOut", "Zoom out");
-#undef SET_STRING
-
-  webui::SetLoadTimeDataDefaults(g_browser_process->GetApplicationLocale(),
-                                 result.get());
-  ResolveJavascriptCallback(*callback_id, *result);
-}
-
-void PdfViewerHandler::Reload(const base::ListValue* args) {
-  CHECK_EQ(0U, args->GetSize());
-  web_ui()->GetWebContents()->ReloadFocusedFrame(false);
-}
-
-void PdfViewerHandler::OnZoomLevelChanged(content::WebContents* web_contents,
-                                          double level,
-                                          bool is_temporary) {
-  if (web_ui()->GetWebContents() == web_contents) {
-    CallJavascriptFunction("cr.webUIListenerCallback",
-                           base::Value("onZoomLevelChanged"),
-                           base::Value(content::ZoomLevelToZoomFactor(level)));
-  }
-}
-
-void PdfViewerHandler::AddObserver() {
-  auto zoom_controller =
-      WebContentsZoomController::FromWebContents(web_ui()->GetWebContents());
-  zoom_controller->AddObserver(this);
-}
-
-void PdfViewerHandler::RemoveObserver() {
-  auto zoom_controller =
-      WebContentsZoomController::FromWebContents(web_ui()->GetWebContents());
-  zoom_controller->RemoveObserver(this);
-}
-
-}  // namespace electron

+ 0 - 61
shell/browser/ui/webui/pdf_viewer_handler.h

@@ -1,61 +0,0 @@
-// Copyright (c) 2017 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#ifndef SHELL_BROWSER_UI_WEBUI_PDF_VIEWER_HANDLER_H_
-#define SHELL_BROWSER_UI_WEBUI_PDF_VIEWER_HANDLER_H_
-
-#include <memory>
-#include <string>
-
-#include "base/macros.h"
-#include "content/public/browser/host_zoom_map.h"
-#include "content/public/browser/web_ui_message_handler.h"
-#include "shell/browser/web_contents_zoom_controller.h"
-
-namespace base {
-class ListValue;
-}
-
-namespace content {
-struct StreamInfo;
-}
-
-namespace electron {
-
-class PdfViewerHandler : public content::WebUIMessageHandler,
-                         public WebContentsZoomController::Observer {
- public:
-  explicit PdfViewerHandler(const std::string& original_url);
-  ~PdfViewerHandler() override;
-
-  void SetPdfResourceStream(content::StreamInfo* stream);
-
- protected:
-  // WebUIMessageHandler implementation.
-  void RegisterMessages() override;
-  void OnJavascriptAllowed() override;
-  void OnJavascriptDisallowed() override;
-
- private:
-  void Initialize(const base::ListValue* args);
-  void GetDefaultZoom(const base::ListValue* args);
-  void GetInitialZoom(const base::ListValue* args);
-  void SetZoom(const base::ListValue* args);
-  void GetStrings(const base::ListValue* args);
-  void Reload(const base::ListValue* args);
-  void OnZoomLevelChanged(content::WebContents* web_contents,
-                          double level,
-                          bool is_temporary);
-  void AddObserver();
-  void RemoveObserver();
-  std::unique_ptr<base::Value> initialize_callback_id_;
-  content::StreamInfo* stream_ = nullptr;
-  std::string original_url_;
-
-  DISALLOW_COPY_AND_ASSIGN(PdfViewerHandler);
-};
-
-}  // namespace electron
-
-#endif  // SHELL_BROWSER_UI_WEBUI_PDF_VIEWER_HANDLER_H_

+ 0 - 258
shell/browser/ui/webui/pdf_viewer_ui.cc

@@ -1,258 +0,0 @@
-// Copyright (c) 2017 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#include "shell/browser/ui/webui/pdf_viewer_ui.h"
-
-#include <map>
-#include <memory>
-#include <utility>
-
-#include "base/sequenced_task_runner_helpers.h"
-#include "base/task/post_task.h"
-#include "content/browser/loader/resource_dispatcher_host_impl.h"
-#include "content/browser/loader/resource_request_info_impl.h"
-#include "content/browser/loader/stream_resource_handler.h"
-#include "content/browser/resource_context_impl.h"
-#include "content/browser/streams/stream.h"
-#include "content/browser/streams/stream_context.h"
-#include "content/public/browser/browser_task_traits.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/render_frame_host.h"
-#include "content/public/browser/render_process_host.h"
-#include "content/public/browser/render_view_host.h"
-#include "content/public/browser/resource_context.h"
-#include "content/public/browser/stream_handle.h"
-#include "content/public/browser/stream_info.h"
-#include "content/public/browser/url_data_source.h"
-#include "content/public/browser/web_contents.h"
-#include "grit/pdf_viewer_resources_map.h"
-#include "net/base/load_flags.h"
-#include "net/base/mime_util.h"
-#include "net/url_request/url_request.h"
-#include "net/url_request/url_request_context.h"
-#include "services/network/public/cpp/resource_response.h"
-#include "shell/browser/atom_browser_context.h"
-#include "shell/browser/loader/layered_resource_handler.h"
-#include "shell/browser/ui/webui/pdf_viewer_handler.h"
-#include "shell/common/atom_constants.h"
-#include "ui/base/resource/resource_bundle.h"
-
-using content::BrowserThread;
-
-namespace electron {
-
-namespace {
-
-// Extracts the path value from the URL without the leading '/',
-// which follows the mapping of names in pdf_viewer_resources_map.
-std::string PathWithoutParams(const std::string& path) {
-  return GURL(kPdfViewerUIOrigin + path).path().substr(1);
-}
-
-class BundledDataSource : public content::URLDataSource {
- public:
-  BundledDataSource() {
-    for (size_t i = 0; i < kPdfViewerResourcesSize; ++i) {
-      std::string resource_path = kPdfViewerResources[i].name;
-      DCHECK(path_to_resource_id_.find(resource_path) ==
-             path_to_resource_id_.end());
-      path_to_resource_id_[resource_path] = kPdfViewerResources[i].value;
-    }
-  }
-
-  // content::URLDataSource implementation.
-  std::string GetSource() const override { return kPdfViewerUIHost; }
-
-  void StartDataRequest(
-      const std::string& path,
-      const content::ResourceRequestInfo::WebContentsGetter& wc_getter,
-      const GotDataCallback& callback) override {
-    std::string filename = PathWithoutParams(path);
-    auto entry = path_to_resource_id_.find(filename);
-
-    if (entry != path_to_resource_id_.end()) {
-      int resource_id = entry->second;
-      const ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
-      callback.Run(rb.LoadDataResourceBytes(resource_id));
-    } else {
-      LOG(ERROR) << "Unable to find: " << path;
-      callback.Run(new base::RefCountedString());
-    }
-  }
-
-  std::string GetMimeType(const std::string& path) const override {
-    base::FilePath::StringType ext =
-        base::FilePath::FromUTF8Unsafe(PathWithoutParams(path)).Extension();
-    std::string mime_type;
-    if (!ext.empty() &&
-        net::GetWellKnownMimeTypeFromExtension(ext.substr(1), &mime_type))
-      return mime_type;
-    return "text/html";
-  }
-
-  bool ShouldAddContentSecurityPolicy() const override { return false; }
-
-  bool ShouldDenyXFrameOptions() const override { return false; }
-
-  bool ShouldServeMimeTypeAsContentTypeHeader() const override { return true; }
-
- private:
-  ~BundledDataSource() override {}
-
-  // A map from a resource path to the resource ID.
-  std::map<std::string, int> path_to_resource_id_;
-
-  DISALLOW_COPY_AND_ASSIGN(BundledDataSource);
-};
-
-// Helper to convert from OnceCallback to Callback.
-template <typename T>
-void CallMigrationCallback(T callback,
-                           std::unique_ptr<content::StreamInfo> stream_info) {
-  std::move(callback).Run(std::move(stream_info));
-}
-
-}  // namespace
-
-class PdfViewerUI::ResourceRequester
-    : public base::RefCountedThreadSafe<ResourceRequester,
-                                        BrowserThread::DeleteOnIOThread>,
-      public electron::LayeredResourceHandler::Delegate {
- public:
-  explicit ResourceRequester(StreamResponseCallback cb)
-      : stream_response_cb_(std::move(cb)) {}
-
-  void StartRequest(const GURL& url,
-                    const GURL& origin,
-                    int render_process_id,
-                    int render_view_id,
-                    int render_frame_id,
-                    content::ResourceContext* resource_context) {
-    DCHECK_CURRENTLY_ON(BrowserThread::IO);
-
-    const net::URLRequestContext* request_context =
-        resource_context->GetRequestContext();
-    std::unique_ptr<net::URLRequest> request(request_context->CreateRequest(
-        url, net::DEFAULT_PRIORITY, nullptr, MISSING_TRAFFIC_ANNOTATION));
-    request->set_method("GET");
-
-    content::ResourceDispatcherHostImpl::Get()->InitializeURLRequest(
-        request.get(), content::Referrer(url, blink::kWebReferrerPolicyDefault),
-        false,  // download.
-        render_process_id, render_view_id, render_frame_id,
-        content::PREVIEWS_OFF, resource_context);
-
-    content::ResourceRequestInfoImpl* info =
-        content::ResourceRequestInfoImpl::ForRequest(request.get());
-    content::StreamContext* stream_context =
-        content::GetStreamContextForResourceContext(resource_context);
-
-    std::unique_ptr<content::ResourceHandler> handler =
-        std::make_unique<content::StreamResourceHandler>(
-            request.get(), stream_context->registry(), origin, false);
-    info->set_is_stream(true);
-    stream_info_.reset(new content::StreamInfo);
-    stream_info_->handle =
-        static_cast<content::StreamResourceHandler*>(handler.get())
-            ->stream()
-            ->CreateHandle();
-    stream_info_->original_url = request->url();
-
-    // Helper to fill stream response details.
-    handler.reset(new electron::LayeredResourceHandler(
-        request.get(), std::move(handler), this));
-
-    content::ResourceDispatcherHostImpl::Get()->BeginURLRequest(
-        std::move(request), std::move(handler),
-        false,  // download
-        false,  // content_initiated (download specific)
-        false,  // do_not_prompt_for_login (download specific)
-        resource_context);
-  }
-
- protected:
-  // electron::LayeredResourceHandler::Delegate:
-  void OnResponseStarted(network::ResourceResponse* response) override {
-    DCHECK_CURRENTLY_ON(BrowserThread::IO);
-
-    auto resource_response_head = response->head;
-    auto headers = resource_response_head.headers;
-    auto mime_type = resource_response_head.mime_type;
-    if (headers.get())
-      stream_info_->response_headers =
-          new net::HttpResponseHeaders(headers->raw_headers());
-    stream_info_->mime_type = mime_type;
-
-    base::PostTaskWithTraits(
-        FROM_HERE, {BrowserThread::UI},
-        base::BindOnce(&CallMigrationCallback<StreamResponseCallback>,
-                       base::Passed(&stream_response_cb_),
-                       base::Passed(&stream_info_)));
-  }
-
- private:
-  friend struct BrowserThread::DeleteOnThread<BrowserThread::IO>;
-  friend class base::DeleteHelper<ResourceRequester>;
-  ~ResourceRequester() override {}
-
-  StreamResponseCallback stream_response_cb_;
-  std::unique_ptr<content::StreamInfo> stream_info_;
-
-  DISALLOW_COPY_AND_ASSIGN(ResourceRequester);
-};
-
-PdfViewerUI::PdfViewerUI(content::BrowserContext* browser_context,
-                         content::WebUI* web_ui,
-                         const std::string& src)
-    : content::WebUIController(web_ui),
-      content::WebContentsObserver(web_ui->GetWebContents()),
-      src_(src) {
-  pdf_handler_ = new PdfViewerHandler(src);
-  web_ui->AddMessageHandler(
-      std::unique_ptr<content::WebUIMessageHandler>(pdf_handler_));
-  content::URLDataSource::Add(browser_context, new BundledDataSource);
-}
-
-PdfViewerUI::~PdfViewerUI() {}
-
-bool PdfViewerUI::OnMessageReceived(
-    const IPC::Message& message,
-    content::RenderFrameHost* render_frame_host) {
-  bool handled = true;
-  IPC_BEGIN_MESSAGE_MAP(PdfViewerUI, message)
-    IPC_MESSAGE_UNHANDLED(handled = false)
-  IPC_END_MESSAGE_MAP()
-  return handled;
-}
-
-void PdfViewerUI::OnPdfStreamCreated(
-    std::unique_ptr<content::StreamInfo> stream) {
-  stream_ = std::move(stream);
-  if (pdf_handler_)
-    pdf_handler_->SetPdfResourceStream(stream_.get());
-  resource_requester_ = nullptr;
-}
-
-void PdfViewerUI::RenderFrameCreated(content::RenderFrameHost* rfh) {
-  int render_process_id = rfh->GetProcess()->GetID();
-  int render_frame_id = rfh->GetRoutingID();
-  int render_view_id = rfh->GetRenderViewHost()->GetRoutingID();
-  auto resource_context =
-      web_contents()->GetBrowserContext()->GetResourceContext();
-  auto callback =
-      base::BindOnce(&PdfViewerUI::OnPdfStreamCreated, base::Unretained(this));
-  resource_requester_ = new ResourceRequester(std::move(callback));
-  base::PostTaskWithTraits(
-      FROM_HERE, {BrowserThread::IO},
-      base::BindOnce(&ResourceRequester::StartRequest, resource_requester_,
-                     GURL(src_), GURL(kPdfViewerUIOrigin), render_process_id,
-                     render_view_id, render_frame_id, resource_context));
-}
-
-void PdfViewerUI::OnSaveURLAs(const GURL& url,
-                              const content::Referrer& referrer) {
-  web_contents()->SaveFrame(url, referrer);
-}
-
-}  // namespace electron

+ 0 - 61
shell/browser/ui/webui/pdf_viewer_ui.h

@@ -1,61 +0,0 @@
-// Copyright (c) 2017 GitHub, Inc.
-// Use of this source code is governed by the MIT license that can be
-// found in the LICENSE file.
-
-#ifndef SHELL_BROWSER_UI_WEBUI_PDF_VIEWER_UI_H_
-#define SHELL_BROWSER_UI_WEBUI_PDF_VIEWER_UI_H_
-
-#include <memory>
-#include <string>
-
-#include "base/macros.h"
-#include "content/public/browser/web_contents_observer.h"
-#include "content/public/browser/web_ui_controller.h"
-#include "ipc/ipc_message.h"
-
-namespace content {
-class BrowserContext;
-struct StreamInfo;
-}  // namespace content
-
-namespace electron {
-
-class PdfViewerHandler;
-
-class PdfViewerUI : public content::WebUIController,
-                    public content::WebContentsObserver {
- public:
-  PdfViewerUI(content::BrowserContext* browser_context,
-              content::WebUI* web_ui,
-              const std::string& src);
-  ~PdfViewerUI() override;
-
-  // content::WebContentsObserver:
-  bool OnMessageReceived(const IPC::Message& message,
-                         content::RenderFrameHost* render_frame_host) override;
-  void RenderFrameCreated(content::RenderFrameHost* rfh) override;
-
- private:
-  using StreamResponseCallback =
-      base::OnceCallback<void(std::unique_ptr<content::StreamInfo>)>;
-  class ResourceRequester;
-
-  void OnPdfStreamCreated(std::unique_ptr<content::StreamInfo> stream_info);
-  void OnSaveURLAs(const GURL& url, const content::Referrer& referrer);
-
-  // Source URL from where the PDF originates.
-  std::string src_;
-
-  PdfViewerHandler* pdf_handler_;
-
-  scoped_refptr<ResourceRequester> resource_requester_;
-
-  // Pdf Resource stream.
-  std::unique_ptr<content::StreamInfo> stream_;
-
-  DISALLOW_COPY_AND_ASSIGN(PdfViewerUI);
-};
-
-}  // namespace electron
-
-#endif  // SHELL_BROWSER_UI_WEBUI_PDF_VIEWER_UI_H_

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