Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(106)

Side by Side Diff: cloud_print/service/win/chrome_launcher.cc

Issue 71013004: Base: Remove Receive() from ScopedHandle. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix delegate_execute for google_chrome_build Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome_frame/test_utils.cc ('k') | cloud_print/virtual_driver/win/install/setup.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/file_util.h" 9 #include "base/file_util.h"
10 #include "base/files/scoped_temp_dir.h" 10 #include "base/files/scoped_temp_dir.h"
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 // Close Chrome browser window. 60 // Close Chrome browser window.
61 void CloseChrome(HANDLE process, DWORD thread_id) { 61 void CloseChrome(HANDLE process, DWORD thread_id) {
62 CloseAllProcessWindows(process); 62 CloseAllProcessWindows(process);
63 if (WAIT_OBJECT_0 == ::WaitForSingleObject(process, kShutdownTimeoutMs)) { 63 if (WAIT_OBJECT_0 == ::WaitForSingleObject(process, kShutdownTimeoutMs)) {
64 return; 64 return;
65 } 65 }
66 ShutdownChrome(process, thread_id); 66 ShutdownChrome(process, thread_id);
67 } 67 }
68 68
69 bool LaunchProcess(const CommandLine& cmdline, 69 bool LaunchProcess(const CommandLine& cmdline,
70 base::ProcessHandle* process_handle, 70 base::win::ScopedHandle* process_handle,
71 DWORD* thread_id) { 71 DWORD* thread_id) {
72 STARTUPINFO startup_info = {}; 72 STARTUPINFO startup_info = {};
73 startup_info.cb = sizeof(startup_info); 73 startup_info.cb = sizeof(startup_info);
74 startup_info.dwFlags = STARTF_USESHOWWINDOW; 74 startup_info.dwFlags = STARTF_USESHOWWINDOW;
75 startup_info.wShowWindow = SW_SHOW; 75 startup_info.wShowWindow = SW_SHOW;
76 76
77 base::win::ScopedProcessInformation process_info; 77 PROCESS_INFORMATION temp_process_info = {};
78 if (!CreateProcess(NULL, 78 if (!CreateProcess(NULL,
79 const_cast<wchar_t*>(cmdline.GetCommandLineString().c_str()), NULL, NULL, 79 const_cast<wchar_t*>(cmdline.GetCommandLineString().c_str()), NULL, NULL,
80 FALSE, 0, NULL, NULL, &startup_info, process_info.Receive())) { 80 FALSE, 0, NULL, NULL, &startup_info, &temp_process_info)) {
81 return false; 81 return false;
82 } 82 }
83 base::win::ScopedProcessInformation process_info(temp_process_info);
83 84
84 if (process_handle) 85 if (process_handle)
85 *process_handle = process_info.TakeProcessHandle(); 86 process_handle->Set(process_info.TakeProcessHandle());
86 87
87 if (thread_id) 88 if (thread_id)
88 *thread_id = process_info.thread_id(); 89 *thread_id = process_info.thread_id();
89 90
90 return true; 91 return true;
91 } 92 }
92 93
93 GURL GetCloudPrintServiceEnableURL(const std::string& proxy_id) { 94 GURL GetCloudPrintServiceEnableURL(const std::string& proxy_id) {
94 GURL url( 95 GURL url(
95 CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 96 CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 cmd.AppendSwitch(switches::kDisableExtensions); 234 cmd.AppendSwitch(switches::kDisableExtensions);
234 cmd.AppendSwitch(switches::kDisableGpu); 235 cmd.AppendSwitch(switches::kDisableGpu);
235 cmd.AppendSwitch(switches::kDisableSoftwareRasterizer); 236 cmd.AppendSwitch(switches::kDisableSoftwareRasterizer);
236 cmd.AppendSwitch(switches::kDisableSync); 237 cmd.AppendSwitch(switches::kDisableSync);
237 cmd.AppendSwitch(switches::kNoFirstRun); 238 cmd.AppendSwitch(switches::kNoFirstRun);
238 cmd.AppendSwitch(switches::kNoStartupWindow); 239 cmd.AppendSwitch(switches::kNoStartupWindow);
239 240
240 base::win::ScopedHandle chrome_handle; 241 base::win::ScopedHandle chrome_handle;
241 base::Time started = base::Time::Now(); 242 base::Time started = base::Time::Now();
242 DWORD thread_id = 0; 243 DWORD thread_id = 0;
243 LaunchProcess(cmd, chrome_handle.Receive(), &thread_id); 244 LaunchProcess(cmd, &chrome_handle, &thread_id);
244 245
245 HANDLE handles[] = {stop_event_.handle(), chrome_handle}; 246 HANDLE handles[] = {stop_event_.handle(), chrome_handle};
246 DWORD wait_result = WAIT_TIMEOUT; 247 DWORD wait_result = WAIT_TIMEOUT;
247 while (wait_result == WAIT_TIMEOUT) { 248 while (wait_result == WAIT_TIMEOUT) {
248 cloud_print::SetGoogleUpdateUsage(kGoogleUpdateId); 249 cloud_print::SetGoogleUpdateUsage(kGoogleUpdateId);
249 wait_result = ::WaitForMultipleObjects(arraysize(handles), handles, 250 wait_result = ::WaitForMultipleObjects(arraysize(handles), handles,
250 FALSE, kUsageUpdateTimeoutMs); 251 FALSE, kUsageUpdateTimeoutMs);
251 } 252 }
252 if (wait_result == WAIT_OBJECT_0) { 253 if (wait_result == WAIT_OBJECT_0) {
253 ShutdownChrome(chrome_handle, thread_id); 254 ShutdownChrome(chrome_handle, thread_id);
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 cmd.AppendSwitch(switches::kDisableDefaultApps); 311 cmd.AppendSwitch(switches::kDisableDefaultApps);
311 cmd.AppendSwitch(switches::kDisableExtensions); 312 cmd.AppendSwitch(switches::kDisableExtensions);
312 cmd.AppendSwitch(switches::kDisableSync); 313 cmd.AppendSwitch(switches::kDisableSync);
313 cmd.AppendSwitch(switches::kNoDefaultBrowserCheck); 314 cmd.AppendSwitch(switches::kNoDefaultBrowserCheck);
314 cmd.AppendSwitch(switches::kNoFirstRun); 315 cmd.AppendSwitch(switches::kNoFirstRun);
315 316
316 cmd.AppendArg(GetCloudPrintServiceEnableURLWithSignin(proxy_id).spec()); 317 cmd.AppendArg(GetCloudPrintServiceEnableURLWithSignin(proxy_id).spec());
317 318
318 base::win::ScopedHandle chrome_handle; 319 base::win::ScopedHandle chrome_handle;
319 DWORD thread_id = 0; 320 DWORD thread_id = 0;
320 if (!LaunchProcess(cmd, chrome_handle.Receive(), &thread_id)) { 321 if (!LaunchProcess(cmd, &chrome_handle, &thread_id)) {
321 LOG(ERROR) << "Unable to launch Chrome."; 322 LOG(ERROR) << "Unable to launch Chrome.";
322 return result; 323 return result;
323 } 324 }
324 325
325 for (;;) { 326 for (;;) {
326 DWORD wait_result = ::WaitForSingleObject(chrome_handle, 500); 327 DWORD wait_result = ::WaitForSingleObject(chrome_handle, 500);
327 std::string json = ReadAndUpdateServiceState(temp_user_data.path(), 328 std::string json = ReadAndUpdateServiceState(temp_user_data.path(),
328 proxy_id); 329 proxy_id);
329 if (wait_result == WAIT_OBJECT_0) { 330 if (wait_result == WAIT_OBJECT_0) {
330 // Return what we have because browser is closed. 331 // Return what we have because browser is closed.
331 return json; 332 return json;
332 } else if (wait_result == WAIT_TIMEOUT) { 333 } else if (wait_result == WAIT_TIMEOUT) {
333 if (!json.empty()) { 334 if (!json.empty()) {
334 // Close chrome because Service State is ready. 335 // Close chrome because Service State is ready.
335 CloseChrome(chrome_handle, thread_id); 336 CloseChrome(chrome_handle, thread_id);
336 return json; 337 return json;
337 } 338 }
338 } else { 339 } else {
339 LOG(ERROR) << "Chrome launch failed."; 340 LOG(ERROR) << "Chrome launch failed.";
340 return result; 341 return result;
341 } 342 }
342 } 343 }
343 NOTREACHED(); 344 NOTREACHED();
344 return std::string(); 345 return std::string();
345 } 346 }
346 347
OLDNEW
« no previous file with comments | « chrome_frame/test_utils.cc ('k') | cloud_print/virtual_driver/win/install/setup.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698