| Index: apps/app_shim/chrome_main_app_mode_mac.mm
|
| diff --git a/apps/app_shim/chrome_main_app_mode_mac.mm b/apps/app_shim/chrome_main_app_mode_mac.mm
|
| index ddad52a14822ac15e92c6c9d9c53d1c9b0d91bc0..773bd8d1c125311ebb3d8df05b499887cf118529 100644
|
| --- a/apps/app_shim/chrome_main_app_mode_mac.mm
|
| +++ b/apps/app_shim/chrome_main_app_mode_mac.mm
|
| @@ -21,6 +21,7 @@
|
| #include "base/mac/scoped_nsobject.h"
|
| #include "base/message_loop/message_loop.h"
|
| #include "base/path_service.h"
|
| +#include "base/strings/string_number_conversions.h"
|
| #include "base/strings/sys_string_conversions.h"
|
| #include "base/threading/thread.h"
|
| #include "chrome/common/chrome_constants.h"
|
| @@ -118,9 +119,12 @@ void AppShimController::Init() {
|
| channel_ = new IPC::ChannelProxy(handle, IPC::Channel::MODE_NAMED_CLIENT,
|
| this, g_io_thread->message_loop_proxy().get());
|
|
|
| + bool launched_by_chrome =
|
| + CommandLine::ForCurrentProcess()->HasSwitch(
|
| + app_mode::kLaunchedByChromeProcessId);
|
| channel_->Send(new AppShimHostMsg_LaunchApp(
|
| g_info->profile_dir, g_info->app_mode_id,
|
| - CommandLine::ForCurrentProcess()->HasSwitch(app_mode::kNoLaunchApp) ?
|
| + launched_by_chrome ?
|
| apps::APP_SHIM_LAUNCH_REGISTER_ONLY : apps::APP_SHIM_LAUNCH_NORMAL));
|
|
|
| nsapp_delegate_.reset([[AppShimDelegate alloc] initWithController:this]);
|
| @@ -432,15 +436,24 @@ int ChromeAppModeStart(const app_mode::ChromeAppModeInfo* info) {
|
| g_io_thread = io_thread;
|
|
|
| // Find already running instances of Chrome.
|
| - NSString* chrome_bundle_id = [base::mac::OuterBundle() bundleIdentifier];
|
| - NSArray* existing_chrome = [NSRunningApplication
|
| - runningApplicationsWithBundleIdentifier:chrome_bundle_id];
|
| + pid_t pid = -1;
|
| + std::string chrome_process_id = CommandLine::ForCurrentProcess()->
|
| + GetSwitchValueASCII(app_mode::kLaunchedByChromeProcessId);
|
| + if (!chrome_process_id.empty()) {
|
| + if (!base::StringToInt(chrome_process_id, &pid))
|
| + LOG(FATAL) << "Invalid PID: " << chrome_process_id;
|
| + } else {
|
| + NSString* chrome_bundle_id = [base::mac::OuterBundle() bundleIdentifier];
|
| + NSArray* existing_chrome = [NSRunningApplication
|
| + runningApplicationsWithBundleIdentifier:chrome_bundle_id];
|
| + if ([existing_chrome count] > 0)
|
| + pid = [[existing_chrome objectAtIndex:0] processIdentifier];
|
| + }
|
|
|
| // Launch Chrome if it isn't already running.
|
| ProcessSerialNumber psn;
|
| - if ([existing_chrome count] > 0) {
|
| - OSStatus status = GetProcessForPID(
|
| - [[existing_chrome objectAtIndex:0] processIdentifier], &psn);
|
| + if (pid > -1) {
|
| + OSStatus status = GetProcessForPID(pid, &psn);
|
| if (status)
|
| return 1;
|
|
|
|
|