Browse Source

Get ready to make relauncher cross-platform

Cheng Zhao 9 years ago
parent
commit
6df18956cd

+ 2 - 9
atom/app/atom_main_delegate.cc

@@ -9,6 +9,7 @@
 
 #include "atom/app/atom_content_client.h"
 #include "atom/browser/atom_browser_client.h"
+#include "atom/browser/relauncher.h"
 #include "atom/common/google_api_key.h"
 #include "atom/renderer/atom_renderer_client.h"
 #include "atom/utility/atom_content_utility_client.h"
@@ -21,17 +22,11 @@
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/resource/resource_bundle.h"
 
-#if defined(OS_MACOSX)
-#include "chrome/browser/mac/relauncher.h"
-#endif
-
 namespace atom {
 
 namespace {
 
-#if defined(OS_MACOSX)
 const char* kRelauncherProcess = "relauncher";
-#endif
 
 bool IsBrowserProcess(base::CommandLine* cmd) {
   std::string process_type = cmd->GetSwitchValueASCII(switches::kProcessType);
@@ -154,12 +149,11 @@ content::ContentUtilityClient* AtomMainDelegate::CreateContentUtilityClient() {
   return utility_client_.get();
 }
 
-#if defined(OS_MACOSX)
 int AtomMainDelegate::RunProcess(
     const std::string& process_type,
     const content::MainFunctionParams& main_function_params) {
   if (process_type == kRelauncherProcess)
-    return mac_relauncher::internal::RelauncherMain(main_function_params);
+    return relauncher::RelauncherMain(main_function_params);
   else
     return -1;
 }
@@ -172,7 +166,6 @@ bool AtomMainDelegate::DelaySandboxInitialization(
     const std::string& process_type) {
   return process_type == kRelauncherProcess;
 }
-#endif
 
 std::unique_ptr<brightray::ContentClient>
 AtomMainDelegate::CreateContentClient() {

+ 0 - 2
atom/app/atom_main_delegate.h

@@ -24,13 +24,11 @@ class AtomMainDelegate : public brightray::MainDelegate {
   content::ContentBrowserClient* CreateContentBrowserClient() override;
   content::ContentRendererClient* CreateContentRendererClient() override;
   content::ContentUtilityClient* CreateContentUtilityClient() override;
-#if defined(OS_MACOSX)
   int RunProcess(
       const std::string& process_type,
       const content::MainFunctionParams& main_function_params) override;
   bool ShouldSendMachPort(const std::string& process_type) override;
   bool DelaySandboxInitialization(const std::string& process_type) override;
-#endif
 
   // brightray::MainDelegate:
   std::unique_ptr<brightray::ContentClient> CreateContentClient() override;

+ 2 - 2
atom/browser/browser_mac.mm

@@ -8,13 +8,13 @@
 #include "atom/browser/mac/atom_application_delegate.h"
 #include "atom/browser/mac/dict_util.h"
 #include "atom/browser/native_window.h"
+#include "atom/browser/relauncher.h"
 #include "atom/browser/window_list.h"
 #include "base/mac/bundle_locations.h"
 #include "base/mac/foundation_util.h"
 #include "base/strings/sys_string_conversions.h"
 #include "brightray/common/application_info.h"
 #include "brightray/common/mac/main_application_bundle.h"
-#include "chrome/browser/mac/relauncher.h"
 #include "net/base/mac/url_conversions.h"
 #include "url/gurl.h"
 
@@ -26,7 +26,7 @@ void Browser::Relaunch(const std::vector<std::string>& args,
   args_with_app.insert(
       args_with_app.begin(),
       app.empty() ? brightray::MainApplicationBundlePath().value() : app);
-  mac_relauncher::RelaunchApp(args_with_app);
+  relauncher::RelaunchApp(args_with_app);
 }
 
 void Browser::Focus() {

+ 3 - 17
chromium_src/chrome/browser/mac/relauncher.cc → atom/browser/relauncher.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/mac/relauncher.h"
+#include "atom/browser/relauncher.h"
 
 #include <ApplicationServices/ApplicationServices.h>
 #include <AvailabilityMacros.h>
@@ -33,7 +33,7 @@
 #include "content/public/common/content_switches.h"
 #include "content/public/common/main_function_params.h"
 
-namespace mac_relauncher {
+namespace relauncher {
 
 namespace {
 
@@ -171,14 +171,6 @@ bool RelaunchAppWithHelper(const std::string& helper,
   return true;
 }
 
-namespace {
-
-// In the relauncher process, performs the necessary synchronization steps
-// with the parent by setting up a kqueue to watch for it to exit, writing a
-// byte to the pipe, and then waiting for the exit notification on the kqueue.
-// If anything fails, this logs a message and returns immediately. In those
-// situations, it can be assumed that something went wrong with the parent
-// process and the best recovery approach is to attempt relaunch anyway.
 void RelauncherSynchronizeWithParent() {
   base::ScopedFD relauncher_sync_fd(kRelauncherSyncFD);
 
@@ -236,10 +228,6 @@ void RelauncherSynchronizeWithParent() {
   }
 }
 
-}  // namespace
-
-namespace internal {
-
 int RelauncherMain(const content::MainFunctionParams& main_parameters) {
   // CommandLine rearranges the order of the arguments returned by
   // main_parameters.argv(), rendering it impossible to determine which
@@ -360,6 +348,4 @@ int RelauncherMain(const content::MainFunctionParams& main_parameters) {
   return 0;
 }
 
-}  // namespace internal
-
-}  // namespace mac_relauncher
+}  // namespace relauncher

+ 17 - 14
chromium_src/chrome/browser/mac/relauncher.h → atom/browser/relauncher.h

@@ -1,11 +1,11 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
+// 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 CHROME_BROWSER_MAC_RELAUNCHER_H_
-#define CHROME_BROWSER_MAC_RELAUNCHER_H_
+#ifndef ATOM_BROWSER_RELAUNCHER_H_
+#define ATOM_BROWSER_RELAUNCHER_H_
 
-// mac_relauncher implements main browser application relaunches on the Mac.
+// relauncher implements main browser application relaunches across platforms.
 // When a browser wants to relaunch itself, it can't simply fork off a new
 // process and exec a new browser from within. That leaves open a window
 // during which two browser applications might be running concurrently. If
@@ -13,7 +13,7 @@
 // especially bad if the user expected the Dock icon to be persistent by
 // choosing Keep in Dock from the icon's contextual menu.
 //
-// mac_relauncher approaches this problem by introducing an intermediate
+// relauncher approaches this problem by introducing an intermediate
 // process (the "relauncher") in between the original browser ("parent") and
 // replacement browser ("relaunched"). The helper executable is used for the
 // relauncher process; because it's an LSUIElement, it doesn't get a Dock
@@ -36,7 +36,7 @@ namespace content {
 struct MainFunctionParams;
 }
 
-namespace mac_relauncher {
+namespace relauncher {
 
 // Relaunches the application using the helper application associated with the
 // currently running instance of Chrome in the parent browser process as the
@@ -64,14 +64,17 @@ bool RelaunchAppWithHelper(const std::string& helper,
                            const std::vector<std::string>& relauncher_args,
                            const std::vector<std::string>& args);
 
-namespace internal {
+// In the relauncher process, performs the necessary synchronization steps
+// with the parent by setting up a kqueue to watch for it to exit, writing a
+// byte to the pipe, and then waiting for the exit notification on the kqueue.
+// If anything fails, this logs a message and returns immediately. In those
+// situations, it can be assumed that something went wrong with the parent
+// process and the best recovery approach is to attempt relaunch anyway.
+void RelauncherSynchronizeWithParent();
 
-// The entry point from ChromeMain into the relauncher process. This is not a
-// user API. Don't call it if your name isn't ChromeMain.
+// The entry point from ChromeMain into the relauncher process.
 int RelauncherMain(const content::MainFunctionParams& main_parameters);
 
-}  // namespace internal
+}  // namespace relauncher
 
-}  // namespace mac_relauncher
-
-#endif  // CHROME_BROWSER_MAC_RELAUNCHER_H_
+#endif  // ATOM_BROWSER_RELAUNCHER_H_

+ 2 - 2
filenames.gypi

@@ -225,6 +225,8 @@
       'atom/browser/net/url_request_fetch_job.h',
       'atom/browser/node_debugger.cc',
       'atom/browser/node_debugger.h',
+      'atom/browser/relauncher.cc',
+      'atom/browser/relauncher.h',
       'atom/browser/render_process_preferences.cc',
       'atom/browser/render_process_preferences.h',
       'atom/browser/ui/accelerator_util.cc',
@@ -420,8 +422,6 @@
       'chromium_src/chrome/browser/extensions/global_shortcut_listener_x11.h',
       'chromium_src/chrome/browser/extensions/global_shortcut_listener_win.cc',
       'chromium_src/chrome/browser/extensions/global_shortcut_listener_win.h',
-      'chromium_src/chrome/browser/mac/relauncher.cc',
-      'chromium_src/chrome/browser/mac/relauncher.h',
       'chromium_src/chrome/browser/media/desktop_media_list.h',
       'chromium_src/chrome/browser/media/desktop_media_list_observer.h',
       'chromium_src/chrome/browser/media/native_desktop_media_list.cc',