OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "cloud_print/service/win/chrome_launcher.h" | 5 #include "cloud_print/service/win/chrome_launcher.h" |
6 | 6 |
7 #include "base/base_switches.h" | 7 #include "base/base_switches.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/files/file_util.h" | 9 #include "base/files/file_util.h" |
10 #include "base/files/scoped_temp_dir.h" | 10 #include "base/files/scoped_temp_dir.h" |
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
217 cmd.AppendSwitch(switches::kDisableSoftwareRasterizer); | 217 cmd.AppendSwitch(switches::kDisableSoftwareRasterizer); |
218 cmd.AppendSwitch(switches::kDisableSync); | 218 cmd.AppendSwitch(switches::kDisableSync); |
219 cmd.AppendSwitch(switches::kNoFirstRun); | 219 cmd.AppendSwitch(switches::kNoFirstRun); |
220 cmd.AppendSwitch(switches::kNoStartupWindow); | 220 cmd.AppendSwitch(switches::kNoStartupWindow); |
221 | 221 |
222 base::win::ScopedHandle chrome_handle; | 222 base::win::ScopedHandle chrome_handle; |
223 base::Time started = base::Time::Now(); | 223 base::Time started = base::Time::Now(); |
224 DWORD thread_id = 0; | 224 DWORD thread_id = 0; |
225 LaunchProcess(cmd, &chrome_handle, &thread_id); | 225 LaunchProcess(cmd, &chrome_handle, &thread_id); |
226 | 226 |
227 HANDLE handles[] = {stop_event_.handle(), chrome_handle}; | 227 HANDLE handles[] = { stop_event_.handle(), chrome_handle.Get() }; |
228 DWORD wait_result = WAIT_TIMEOUT; | 228 DWORD wait_result = WAIT_TIMEOUT; |
229 while (wait_result == WAIT_TIMEOUT) { | 229 while (wait_result == WAIT_TIMEOUT) { |
230 cloud_print::SetGoogleUpdateUsage(kGoogleUpdateId); | 230 cloud_print::SetGoogleUpdateUsage(kGoogleUpdateId); |
231 wait_result = ::WaitForMultipleObjects(arraysize(handles), handles, | 231 wait_result = ::WaitForMultipleObjects(arraysize(handles), handles, |
232 FALSE, kUsageUpdateTimeoutMs); | 232 FALSE, kUsageUpdateTimeoutMs); |
233 } | 233 } |
234 if (wait_result == WAIT_OBJECT_0) { | 234 if (wait_result == WAIT_OBJECT_0) { |
235 ShutdownChrome(chrome_handle, thread_id); | 235 ShutdownChrome(chrome_handle.Get(), thread_id); |
236 break; | 236 break; |
237 } else if (wait_result == WAIT_OBJECT_0 + 1) { | 237 } else if (wait_result == WAIT_OBJECT_0 + 1) { |
238 LOG(ERROR) << "Chrome process exited."; | 238 LOG(ERROR) << "Chrome process exited."; |
239 } else { | 239 } else { |
240 LOG(ERROR) << "Error waiting Chrome (" << ::GetLastError() << ")."; | 240 LOG(ERROR) << "Error waiting Chrome (" << ::GetLastError() << ")."; |
241 } | 241 } |
242 if (base::Time::Now() - started > base::TimeDelta::FromHours(1)) { | 242 if (base::Time::Now() - started > base::TimeDelta::FromHours(1)) { |
243 // Reset timeout because process worked long enough. | 243 // Reset timeout because process worked long enough. |
244 time_out = default_time_out; | 244 time_out = default_time_out; |
245 } | 245 } |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
295 cloud_devices::GetCloudPrintEnableWithSigninURL(proxy_id).spec()); | 295 cloud_devices::GetCloudPrintEnableWithSigninURL(proxy_id).spec()); |
296 | 296 |
297 base::win::ScopedHandle chrome_handle; | 297 base::win::ScopedHandle chrome_handle; |
298 DWORD thread_id = 0; | 298 DWORD thread_id = 0; |
299 if (!LaunchProcess(cmd, &chrome_handle, &thread_id)) { | 299 if (!LaunchProcess(cmd, &chrome_handle, &thread_id)) { |
300 LOG(ERROR) << "Unable to launch Chrome."; | 300 LOG(ERROR) << "Unable to launch Chrome."; |
301 return std::string(); | 301 return std::string(); |
302 } | 302 } |
303 | 303 |
304 for (;;) { | 304 for (;;) { |
305 DWORD wait_result = ::WaitForSingleObject(chrome_handle, 500); | 305 DWORD wait_result = ::WaitForSingleObject(chrome_handle.Get(), 500); |
306 std::string json = ReadAndUpdateServiceState(temp_user_data.path(), | 306 std::string json = ReadAndUpdateServiceState(temp_user_data.path(), |
307 proxy_id); | 307 proxy_id); |
308 if (wait_result == WAIT_OBJECT_0) { | 308 if (wait_result == WAIT_OBJECT_0) { |
309 // Return what we have because browser is closed. | 309 // Return what we have because browser is closed. |
310 return json; | 310 return json; |
311 } | 311 } |
312 if (wait_result != WAIT_TIMEOUT) { | 312 if (wait_result != WAIT_TIMEOUT) { |
313 LOG(ERROR) << "Chrome launch failed."; | 313 LOG(ERROR) << "Chrome launch failed."; |
314 return std::string(); | 314 return std::string(); |
315 } | 315 } |
316 if (!json.empty()) { | 316 if (!json.empty()) { |
317 // Close chrome because Service State is ready. | 317 // Close chrome because Service State is ready. |
318 CloseChrome(chrome_handle, thread_id); | 318 CloseChrome(chrome_handle.Get(), thread_id); |
319 return json; | 319 return json; |
320 } | 320 } |
321 } | 321 } |
322 } | 322 } |
OLD | NEW |