OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // On Mac, one can't make shortcuts with command-line arguments. Instead, we | 5 // On Mac, one can't make shortcuts with command-line arguments. Instead, we |
6 // produce small app bundles which locate the Chromium framework and load it, | 6 // produce small app bundles which locate the Chromium framework and load it, |
7 // passing the appropriate data. This is the entry point into the framework for | 7 // passing the appropriate data. This is the entry point into the framework for |
8 // those app bundles. | 8 // those app bundles. |
9 | 9 |
10 #import <Cocoa/Cocoa.h> | 10 #import <Cocoa/Cocoa.h> |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 | 92 |
93 private: | 93 private: |
94 // IPC::Listener implemetation. | 94 // IPC::Listener implemetation. |
95 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; | 95 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; |
96 virtual void OnChannelError() OVERRIDE; | 96 virtual void OnChannelError() OVERRIDE; |
97 | 97 |
98 // If Chrome failed to launch the app, |success| will be false and the app | 98 // If Chrome failed to launch the app, |success| will be false and the app |
99 // shim process should die. | 99 // shim process should die. |
100 void OnLaunchAppDone(apps::AppShimLaunchResult result); | 100 void OnLaunchAppDone(apps::AppShimLaunchResult result); |
101 | 101 |
| 102 // Hide this app. |
| 103 void OnHide(); |
| 104 |
102 // Requests user attention. | 105 // Requests user attention. |
103 void OnRequestUserAttention(); | 106 void OnRequestUserAttention(); |
104 | 107 |
105 // Terminates the app shim process. | 108 // Terminates the app shim process. |
106 void Close(); | 109 void Close(); |
107 | 110 |
108 IPC::ChannelProxy* channel_; | 111 IPC::ChannelProxy* channel_; |
109 base::scoped_nsobject<AppShimDelegate> nsapp_delegate_; | 112 base::scoped_nsobject<AppShimDelegate> nsapp_delegate_; |
110 bool launch_app_done_; | 113 bool launch_app_done_; |
111 | 114 |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
184 } | 187 } |
185 | 188 |
186 void AppShimController::SendQuitApp() { | 189 void AppShimController::SendQuitApp() { |
187 channel_->Send(new AppShimHostMsg_QuitApp); | 190 channel_->Send(new AppShimHostMsg_QuitApp); |
188 } | 191 } |
189 | 192 |
190 bool AppShimController::OnMessageReceived(const IPC::Message& message) { | 193 bool AppShimController::OnMessageReceived(const IPC::Message& message) { |
191 bool handled = true; | 194 bool handled = true; |
192 IPC_BEGIN_MESSAGE_MAP(AppShimController, message) | 195 IPC_BEGIN_MESSAGE_MAP(AppShimController, message) |
193 IPC_MESSAGE_HANDLER(AppShimMsg_LaunchApp_Done, OnLaunchAppDone) | 196 IPC_MESSAGE_HANDLER(AppShimMsg_LaunchApp_Done, OnLaunchAppDone) |
| 197 IPC_MESSAGE_HANDLER(AppShimMsg_Hide, OnHide) |
194 IPC_MESSAGE_HANDLER(AppShimMsg_RequestUserAttention, OnRequestUserAttention) | 198 IPC_MESSAGE_HANDLER(AppShimMsg_RequestUserAttention, OnRequestUserAttention) |
195 IPC_MESSAGE_UNHANDLED(handled = false) | 199 IPC_MESSAGE_UNHANDLED(handled = false) |
196 IPC_END_MESSAGE_MAP() | 200 IPC_END_MESSAGE_MAP() |
197 | 201 |
198 return handled; | 202 return handled; |
199 } | 203 } |
200 | 204 |
201 void AppShimController::OnChannelError() { | 205 void AppShimController::OnChannelError() { |
202 Close(); | 206 Close(); |
203 } | 207 } |
204 | 208 |
205 void AppShimController::OnLaunchAppDone(apps::AppShimLaunchResult result) { | 209 void AppShimController::OnLaunchAppDone(apps::AppShimLaunchResult result) { |
206 if (result != apps::APP_SHIM_LAUNCH_SUCCESS) { | 210 if (result != apps::APP_SHIM_LAUNCH_SUCCESS) { |
207 Close(); | 211 Close(); |
208 return; | 212 return; |
209 } | 213 } |
210 | 214 |
211 launch_app_done_ = true; | 215 launch_app_done_ = true; |
212 } | 216 } |
213 | 217 |
| 218 void AppShimController::OnHide() { |
| 219 [NSApp hide:nil]; |
| 220 } |
| 221 |
214 void AppShimController::OnRequestUserAttention() { | 222 void AppShimController::OnRequestUserAttention() { |
215 [NSApp requestUserAttention:NSInformationalRequest]; | 223 [NSApp requestUserAttention:NSInformationalRequest]; |
216 } | 224 } |
217 | 225 |
218 void AppShimController::Close() { | 226 void AppShimController::Close() { |
219 [nsapp_delegate_ terminateNow]; | 227 [nsapp_delegate_ terminateNow]; |
220 } | 228 } |
221 | 229 |
222 void AppShimController::ActivateApp(bool is_reopen) { | 230 void AppShimController::ActivateApp(bool is_reopen) { |
223 if (launch_app_done_) { | 231 if (launch_app_done_) { |
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
497 // fully initialized don't receive a reply until its run loop starts. Once | 505 // fully initialized don't receive a reply until its run loop starts. Once |
498 // the reply is received, Chrome will have opened its IPC port, guaranteed. | 506 // the reply is received, Chrome will have opened its IPC port, guaranteed. |
499 [ReplyEventHandler pingProcess:psn andCall:base::Bind(&OnPingChromeReply)]; | 507 [ReplyEventHandler pingProcess:psn andCall:base::Bind(&OnPingChromeReply)]; |
500 | 508 |
501 base::MessageLoopForUI main_message_loop; | 509 base::MessageLoopForUI main_message_loop; |
502 main_message_loop.set_thread_name("MainThread"); | 510 main_message_loop.set_thread_name("MainThread"); |
503 base::PlatformThread::SetName("CrAppShimMain"); | 511 base::PlatformThread::SetName("CrAppShimMain"); |
504 main_message_loop.Run(); | 512 main_message_loop.Run(); |
505 return 0; | 513 return 0; |
506 } | 514 } |
OLD | NEW |