diff --git a/atom/browser/atom_browser_main_parts.cc b/atom/browser/atom_browser_main_parts.cc index c90534450604..3e3f694e63ad 100644 --- a/atom/browser/atom_browser_main_parts.cc +++ b/atom/browser/atom_browser_main_parts.cc @@ -18,6 +18,7 @@ #include "atom/browser/atom_paths.h" #include "atom/browser/atom_web_ui_controller_factory.h" #include "atom/browser/browser.h" +#include "atom/browser/browser_process_impl.h" #include "atom/browser/io_thread.h" #include "atom/browser/javascript_environment.h" #include "atom/browser/media/media_capture_devices_dispatcher.h" @@ -34,7 +35,6 @@ #include "base/path_service.h" #include "base/strings/string_number_conversions.h" #include "base/strings/utf_string_conversions.h" -#include "chrome/browser/browser_process_impl.h" #include "chrome/browser/icon_manager.h" #include "chrome/browser/net/chrome_net_log_helper.h" #include "components/net_log/chrome_net_log.h" diff --git a/chromium_src/chrome/browser/browser_process_impl.cc b/atom/browser/browser_process_impl.cc similarity index 99% rename from chromium_src/chrome/browser/browser_process_impl.cc rename to atom/browser/browser_process_impl.cc index 4ac9db5d19ae..061b4faed7e0 100644 --- a/chromium_src/chrome/browser/browser_process_impl.cc +++ b/atom/browser/browser_process_impl.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/browser_process_impl.h" +#include "atom/browser/browser_process_impl.h" #include "chrome/browser/printing/print_job_manager.h" #include "printing/buildflags/buildflags.h" diff --git a/chromium_src/chrome/browser/browser_process_impl.h b/atom/browser/browser_process_impl.h similarity index 96% rename from chromium_src/chrome/browser/browser_process_impl.h rename to atom/browser/browser_process_impl.h index f88999a3c66e..e91788ffc325 100644 --- a/chromium_src/chrome/browser/browser_process_impl.h +++ b/atom/browser/browser_process_impl.h @@ -7,8 +7,8 @@ // will return NULL if the service is not available, so callers must check for // this condition. -#ifndef CHROME_BROWSER_BROWSER_PROCESS_IMPL_H_ -#define CHROME_BROWSER_BROWSER_PROCESS_IMPL_H_ +#ifndef ATOM_BROWSER_BROWSER_PROCESS_IMPL_H_ +#define ATOM_BROWSER_BROWSER_PROCESS_IMPL_H_ #include #include @@ -104,4 +104,4 @@ class BrowserProcessImpl : public BrowserProcess { DISALLOW_COPY_AND_ASSIGN(BrowserProcessImpl); }; -#endif // CHROME_BROWSER_BROWSER_PROCESS_IMPL_H_ +#endif // ATOM_BROWSER_BROWSER_PROCESS_IMPL_H_ diff --git a/chromium_src/BUILD.gn b/chromium_src/BUILD.gn index 0f1a5ecd0835..ea69a4490d94 100644 --- a/chromium_src/BUILD.gn +++ b/chromium_src/BUILD.gn @@ -40,6 +40,8 @@ static_library("chrome") { "//chrome/browser/net/proxy_service_factory.h", "//chrome/browser/ssl/security_state_tab_helper.cc", "//chrome/browser/ssl/security_state_tab_helper.h", + "//chrome/browser/win/chrome_process_finder.cc", + "//chrome/browser/win/chrome_process_finder.h", "//extensions/browser/app_window/size_constraints.cc", "//extensions/browser/app_window/size_constraints.h", ] diff --git a/chromium_src/chrome/browser/chrome_process_finder_win.cc b/chromium_src/chrome/browser/chrome_process_finder_win.cc deleted file mode 100644 index 918596fe137a..000000000000 --- a/chromium_src/chrome/browser/chrome_process_finder_win.cc +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/chrome_process_finder_win.h" - -#include -#include - -#include "base/command_line.h" -#include "base/files/file_path.h" -#include "base/files/file_util.h" -#include "base/logging.h" -#include "base/process/process.h" -#include "base/process/process_info.h" -#include "base/strings/string_number_conversions.h" -#include "base/strings/stringprintf.h" -#include "base/strings/utf_string_conversions.h" -#include "base/win/message_window.h" -#include "base/win/scoped_handle.h" -#include "base/win/win_util.h" -#include "base/win/windows_version.h" - -namespace { - -int timeout_in_milliseconds = 20 * 1000; - -} // namespace - -namespace chrome { - -HWND FindRunningChromeWindow(const base::FilePath& user_data_dir) { - return base::win::MessageWindow::FindWindow(user_data_dir.value()); -} - -NotifyChromeResult AttemptToNotifyRunningChrome(HWND remote_window, - bool fast_start) { - DCHECK(remote_window); - DWORD process_id = 0; - DWORD thread_id = GetWindowThreadProcessId(remote_window, &process_id); - if (!thread_id || !process_id) - return NOTIFY_FAILED; - - // Send the command line to the remote chrome window. - // Format is "START\0<<>>\0<<>>". - std::wstring to_send(L"START\0", 6); // want the NULL in the string. - base::FilePath cur_dir; - if (!base::GetCurrentDirectory(&cur_dir)) - return NOTIFY_FAILED; - to_send.append(cur_dir.value()); - to_send.append(L"\0", 1); // Null separator. - to_send.append(::GetCommandLineW()); - to_send.append(L"\0", 1); // Null separator. - - // Allow the current running browser window to make itself the foreground - // window (otherwise it will just flash in the taskbar). - ::AllowSetForegroundWindow(process_id); - - COPYDATASTRUCT cds; - cds.dwData = 0; - cds.cbData = static_cast((to_send.length() + 1) * sizeof(wchar_t)); - cds.lpData = const_cast(to_send.c_str()); - DWORD_PTR result = 0; - if (::SendMessageTimeout(remote_window, WM_COPYDATA, NULL, - reinterpret_cast(&cds), SMTO_ABORTIFHUNG, - timeout_in_milliseconds, &result)) { - return result ? NOTIFY_SUCCESS : NOTIFY_FAILED; - } - - // It is possible that the process owning this window may have died by now. - if (!::IsWindow(remote_window)) - return NOTIFY_FAILED; - - // If the window couldn't be notified but still exists, assume it is hung. - return NOTIFY_WINDOW_HUNG; -} - -base::TimeDelta SetNotificationTimeoutForTesting(base::TimeDelta new_timeout) { - base::TimeDelta old_timeout = - base::TimeDelta::FromMilliseconds(timeout_in_milliseconds); - timeout_in_milliseconds = new_timeout.InMilliseconds(); - return old_timeout; -} - -} // namespace chrome diff --git a/chromium_src/chrome/browser/chrome_process_finder_win.h b/chromium_src/chrome/browser/chrome_process_finder_win.h deleted file mode 100644 index a66429de5e74..000000000000 --- a/chromium_src/chrome/browser/chrome_process_finder_win.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_CHROME_PROCESS_FINDER_WIN_H_ -#define CHROME_BROWSER_CHROME_PROCESS_FINDER_WIN_H_ - -#include - -#include "base/time/time.h" - -namespace base { -class FilePath; -} - -namespace chrome { - -enum NotifyChromeResult { - NOTIFY_SUCCESS, - NOTIFY_FAILED, - NOTIFY_WINDOW_HUNG, -}; - -// Finds an already running Chrome window if it exists. -HWND FindRunningChromeWindow(const base::FilePath& user_data_dir); - -// Attempts to send the current command line to an already running instance of -// Chrome via a WM_COPYDATA message. -// Returns true if a running Chrome is found and successfully notified. -// |fast_start| is true when this is being called on the window fast start path. -NotifyChromeResult AttemptToNotifyRunningChrome(HWND remote_window, - bool fast_start); - -// Changes the notification timeout to |new_timeout|, returns the old timeout. -base::TimeDelta SetNotificationTimeoutForTesting(base::TimeDelta new_timeout); - -} // namespace chrome - -#endif // CHROME_BROWSER_CHROME_PROCESS_FINDER_WIN_H_ diff --git a/chromium_src/chrome/browser/process_singleton_win.cc b/chromium_src/chrome/browser/process_singleton_win.cc index 6d0d102430ff..6bcd9ad25d7f 100644 --- a/chromium_src/chrome/browser/process_singleton_win.cc +++ b/chromium_src/chrome/browser/process_singleton_win.cc @@ -20,7 +20,7 @@ #include "base/win/registry.h" #include "base/win/scoped_handle.h" #include "base/win/windows_version.h" -#include "chrome/browser/chrome_process_finder_win.h" +#include "chrome/browser/win/chrome_process_finder.h" #include "content/public/common/result_codes.h" #include "net/base/escape.h" #include "ui/base/l10n/l10n_util.h" diff --git a/chromium_src/components/pdf/renderer/pepper_pdf_host.cc b/chromium_src/components/pdf/renderer/pepper_pdf_host.cc deleted file mode 100644 index 96385148c4f5..000000000000 --- a/chromium_src/components/pdf/renderer/pepper_pdf_host.cc +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "components/pdf/renderer/pepper_pdf_host.h" - -#include "atom/common/api/api_messages.h" -#include "base/memory/ptr_util.h" -#include "content/public/common/referrer.h" -#include "content/public/renderer/pepper_plugin_instance.h" -#include "content/public/renderer/render_frame.h" -#include "content/public/renderer/renderer_ppapi_host.h" -#include "ppapi/host/dispatch_host_message.h" -#include "ppapi/proxy/ppapi_messages.h" - -namespace pdf { - -PepperPDFHost::PepperPDFHost(content::RendererPpapiHost* host, - PP_Instance instance, - PP_Resource resource) - : ppapi::host::ResourceHost(host->GetPpapiHost(), instance, resource), - host_(host) {} - -PepperPDFHost::~PepperPDFHost() {} - -int32_t PepperPDFHost::OnResourceMessageReceived( - const IPC::Message& msg, - ppapi::host::HostMessageContext* context) { - PPAPI_BEGIN_MESSAGE_MAP(PepperPDFHost, msg) - PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_PDF_DidStartLoading, - OnHostMsgDidStartLoading) - PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_PDF_DidStopLoading, - OnHostMsgDidStopLoading) - PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_PDF_SaveAs, - OnHostMsgSaveAs) - PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_PDF_SetSelectedText, - OnHostMsgSetSelectedText) - PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_PDF_SetLinkUnderCursor, - OnHostMsgSetLinkUnderCursor) - PPAPI_END_MESSAGE_MAP() - return PP_ERROR_FAILED; -} - -int32_t PepperPDFHost::OnHostMsgDidStartLoading( - ppapi::host::HostMessageContext* context) { - content::RenderFrame* render_frame = GetRenderFrame(); - if (!render_frame) - return PP_ERROR_FAILED; - - render_frame->PluginDidStartLoading(); - return PP_OK; -} - -int32_t PepperPDFHost::OnHostMsgDidStopLoading( - ppapi::host::HostMessageContext* context) { - content::RenderFrame* render_frame = GetRenderFrame(); - if (!render_frame) - return PP_ERROR_FAILED; - - render_frame->PluginDidStopLoading(); - return PP_OK; -} - -int32_t PepperPDFHost::OnHostMsgSaveAs( - ppapi::host::HostMessageContext* context) { - content::PepperPluginInstance* instance = - host_->GetPluginInstance(pp_instance()); - if (!instance) - return PP_ERROR_FAILED; - - content::RenderFrame* render_frame = instance->GetRenderFrame(); - if (!render_frame) - return PP_ERROR_FAILED; - - GURL url = instance->GetPluginURL(); - content::Referrer referrer; - referrer.url = url; - referrer.policy = blink::kWebReferrerPolicyDefault; - referrer = content::Referrer::SanitizeForRequest(url, referrer); - render_frame->Send(new AtomFrameHostMsg_PDFSaveURLAs( - render_frame->GetRoutingID(), url, referrer)); - return PP_OK; -} - -int32_t PepperPDFHost::OnHostMsgSetSelectedText( - ppapi::host::HostMessageContext* context, - const base::string16& selected_text) { - content::PepperPluginInstance* instance = - host_->GetPluginInstance(pp_instance()); - if (!instance) - return PP_ERROR_FAILED; - instance->SetSelectedText(selected_text); - return PP_OK; -} - -int32_t PepperPDFHost::OnHostMsgSetLinkUnderCursor( - ppapi::host::HostMessageContext* context, - const std::string& url) { - content::PepperPluginInstance* instance = - host_->GetPluginInstance(pp_instance()); - if (!instance) - return PP_ERROR_FAILED; - instance->SetLinkUnderCursor(url); - return PP_OK; -} - -content::RenderFrame* PepperPDFHost::GetRenderFrame() { - content::PepperPluginInstance* instance = - host_->GetPluginInstance(pp_instance()); - return instance ? instance->GetRenderFrame() : nullptr; -} - -} // namespace pdf diff --git a/chromium_src/components/pdf/renderer/pepper_pdf_host.h b/chromium_src/components/pdf/renderer/pepper_pdf_host.h deleted file mode 100644 index 0d6ef4d03408..000000000000 --- a/chromium_src/components/pdf/renderer/pepper_pdf_host.h +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef COMPONENTS_PDF_RENDERER_PEPPER_PDF_HOST_H_ -#define COMPONENTS_PDF_RENDERER_PEPPER_PDF_HOST_H_ - -#include "base/compiler_specific.h" -#include "base/macros.h" -#include "base/strings/string16.h" -#include "ppapi/host/resource_host.h" - -namespace content { -class RenderFrame; -class RendererPpapiHost; -} // namespace content - -namespace pdf { - -class PdfAccessibilityTree; - -class PepperPDFHost : public ppapi::host::ResourceHost { - public: - PepperPDFHost(content::RendererPpapiHost* host, - PP_Instance instance, - PP_Resource resource); - ~PepperPDFHost() override; - - // ppapi::host::ResourceHost: - int32_t OnResourceMessageReceived( - const IPC::Message& msg, - ppapi::host::HostMessageContext* context) override; - - private: - int32_t OnHostMsgDidStartLoading(ppapi::host::HostMessageContext* context); - int32_t OnHostMsgDidStopLoading(ppapi::host::HostMessageContext* context); - int32_t OnHostMsgSaveAs(ppapi::host::HostMessageContext* context); - int32_t OnHostMsgSetSelectedText(ppapi::host::HostMessageContext* context, - const base::string16& selected_text); - int32_t OnHostMsgSetLinkUnderCursor(ppapi::host::HostMessageContext* context, - const std::string& url); - - content::RenderFrame* GetRenderFrame(); - - content::RendererPpapiHost* const host_; - - DISALLOW_COPY_AND_ASSIGN(PepperPDFHost); -}; - -} // namespace pdf - -#endif // COMPONENTS_PDF_RENDERER_PEPPER_PDF_HOST_H_ diff --git a/filenames.gni b/filenames.gni index 88138ed2175f..7ce785819ed9 100644 --- a/filenames.gni +++ b/filenames.gni @@ -240,6 +240,8 @@ filenames = { "atom/browser/browser_mac.mm", "atom/browser/browser_win.cc", "atom/browser/browser_observer.h", + "atom/browser/browser_process_impl.cc", + "atom/browser/browser_process_impl.h", "atom/browser/child_web_contents_tracker.h", "atom/browser/common_web_contents_delegate_mac.mm", "atom/browser/common_web_contents_delegate_views.cc", @@ -654,10 +656,6 @@ filenames = { "atom/renderer/web_worker_observer.h", "atom/utility/atom_content_utility_client.cc", "atom/utility/atom_content_utility_client.h", - "chromium_src/chrome/browser/browser_process_impl.cc", - "chromium_src/chrome/browser/browser_process_impl.h", - "chromium_src/chrome/browser/chrome_process_finder_win.cc", - "chromium_src/chrome/browser/chrome_process_finder_win.h", "chromium_src/chrome/browser/process_singleton_posix.cc", "chromium_src/chrome/browser/process_singleton_win.cc", "chromium_src/chrome/browser/process_singleton.h", diff --git a/patches/common/chromium/.patches b/patches/common/chromium/.patches index 84989b9fcce4..eda8bd9aef0a 100644 --- a/patches/common/chromium/.patches +++ b/patches/common/chromium/.patches @@ -75,3 +75,4 @@ tts.patch color_chooser.patch printing.patch verbose_generate_breakpad_symbols.patch +chrome_process_finder.patch diff --git a/patches/common/chromium/chrome_process_finder.patch b/patches/common/chromium/chrome_process_finder.patch new file mode 100644 index 000000000000..ee35d1c3ca29 --- /dev/null +++ b/patches/common/chromium/chrome_process_finder.patch @@ -0,0 +1,41 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Milan Burda +Date: Fri, 26 Oct 2018 20:45:49 +0200 +Subject: chrome_process_finder.patch + +Fix some problems when using app.makeSingleInstance on POSIX systems +* The original command line of new instances are passed instead + of the one modified by Chromium. +* The command line is passed as Array. + +Reference: https://github.com/electron/electron/pull/3175 + +diff --git a/chrome/browser/win/chrome_process_finder.cc b/chrome/browser/win/chrome_process_finder.cc +index 4fdea2af27020303a66a747304c5ecce5cc698d5..598ba8171631dbcf7ad23bc4b5c74a750bbaa47c 100644 +--- a/chrome/browser/win/chrome_process_finder.cc ++++ b/chrome/browser/win/chrome_process_finder.cc +@@ -43,15 +43,6 @@ NotifyChromeResult AttemptToNotifyRunningChrome(HWND remote_window, + if (!thread_id || !process_id) + return NOTIFY_FAILED; + +- base::CommandLine command_line(*base::CommandLine::ForCurrentProcess()); +- command_line.AppendSwitchASCII( +- switches::kOriginalProcessStartTime, +- base::Int64ToString( +- base::CurrentProcessInfo::CreationTime().ToInternalValue())); +- +- if (fast_start) +- command_line.AppendSwitch(switches::kFastStart); +- + // Send the command line to the remote chrome window. + // Format is "START\0<<>>\0<<>>". + std::wstring to_send(L"START\0", 6); // want the NULL in the string. +@@ -60,7 +51,7 @@ NotifyChromeResult AttemptToNotifyRunningChrome(HWND remote_window, + return NOTIFY_FAILED; + to_send.append(cur_dir.value()); + to_send.append(L"\0", 1); // Null separator. +- to_send.append(command_line.GetCommandLineString()); ++ to_send.append(::GetCommandLineW()); + to_send.append(L"\0", 1); // Null separator. + + // Allow the current running browser window to make itself the foreground diff --git a/patches/common/chromium/webview_reattach.patch b/patches/common/chromium/webview_reattach.patch index 436dcca2a934..d46434ee84ff 100644 --- a/patches/common/chromium/webview_reattach.patch +++ b/patches/common/chromium/webview_reattach.patch @@ -7,10 +7,10 @@ Backports https://chromium-review.googlesource.com/c/chromium/src/+/1161391 Fixes webview not working after renderer process restarted. diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc -index 88211169a7d731cb805f34c48ae4caf2fdcd1c84..7b2715aea2afb9e939a6d5cf7fa7ec23f330194a 100644 +index 64ad6ca91d9331a09d09f7e29b7c24a0c12852a2..ec3d1ccbad7e3e4184205f87b6b3fb7dcd4c07f2 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc -@@ -4906,6 +4906,12 @@ void WebContentsImpl::NotifyViewSwapped(RenderViewHost* old_host, +@@ -4886,6 +4886,12 @@ void WebContentsImpl::NotifyViewSwapped(RenderViewHost* old_host, view_->RenderViewHostChanged(old_host, new_host);