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

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

Issue 92173002: Merge 237541 "Revert of https://codereview.chromium.org/71013004/" (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1721/src/
Patch Set: 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::win::ScopedHandle* process_handle, 70 base::ProcessHandle* 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 PROCESS_INFORMATION temp_process_info = {}; 77 base::win::ScopedProcessInformation 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, &temp_process_info)) { 80 FALSE, 0, NULL, NULL, &startup_info, process_info.Receive())) {
81 return false; 81 return false;
82 } 82 }
83 base::win::ScopedProcessInformation process_info(temp_process_info);
84 83
85 if (process_handle) 84 if (process_handle)
86 process_handle->Set(process_info.TakeProcessHandle()); 85 *process_handle = process_info.TakeProcessHandle();
87 86
88 if (thread_id) 87 if (thread_id)
89 *thread_id = process_info.thread_id(); 88 *thread_id = process_info.thread_id();
90 89
91 return true; 90 return true;
92 } 91 }
93 92
94 GURL GetCloudPrintServiceEnableURL(const std::string& proxy_id) { 93 GURL GetCloudPrintServiceEnableURL(const std::string& proxy_id) {
95 GURL url( 94 GURL url(
96 CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 95 CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 cmd.AppendSwitch(switches::kDisableExtensions); 233 cmd.AppendSwitch(switches::kDisableExtensions);
235 cmd.AppendSwitch(switches::kDisableGpu); 234 cmd.AppendSwitch(switches::kDisableGpu);
236 cmd.AppendSwitch(switches::kDisableSoftwareRasterizer); 235 cmd.AppendSwitch(switches::kDisableSoftwareRasterizer);
237 cmd.AppendSwitch(switches::kDisableSync); 236 cmd.AppendSwitch(switches::kDisableSync);
238 cmd.AppendSwitch(switches::kNoFirstRun); 237 cmd.AppendSwitch(switches::kNoFirstRun);
239 cmd.AppendSwitch(switches::kNoStartupWindow); 238 cmd.AppendSwitch(switches::kNoStartupWindow);
240 239
241 base::win::ScopedHandle chrome_handle; 240 base::win::ScopedHandle chrome_handle;
242 base::Time started = base::Time::Now(); 241 base::Time started = base::Time::Now();
243 DWORD thread_id = 0; 242 DWORD thread_id = 0;
244 LaunchProcess(cmd, &chrome_handle, &thread_id); 243 LaunchProcess(cmd, chrome_handle.Receive(), &thread_id);
245 244
246 HANDLE handles[] = {stop_event_.handle(), chrome_handle}; 245 HANDLE handles[] = {stop_event_.handle(), chrome_handle};
247 DWORD wait_result = WAIT_TIMEOUT; 246 DWORD wait_result = WAIT_TIMEOUT;
248 while (wait_result == WAIT_TIMEOUT) { 247 while (wait_result == WAIT_TIMEOUT) {
249 cloud_print::SetGoogleUpdateUsage(kGoogleUpdateId); 248 cloud_print::SetGoogleUpdateUsage(kGoogleUpdateId);
250 wait_result = ::WaitForMultipleObjects(arraysize(handles), handles, 249 wait_result = ::WaitForMultipleObjects(arraysize(handles), handles,
251 FALSE, kUsageUpdateTimeoutMs); 250 FALSE, kUsageUpdateTimeoutMs);
252 } 251 }
253 if (wait_result == WAIT_OBJECT_0) { 252 if (wait_result == WAIT_OBJECT_0) {
254 ShutdownChrome(chrome_handle, thread_id); 253 ShutdownChrome(chrome_handle, thread_id);
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 cmd.AppendSwitch(switches::kDisableDefaultApps); 310 cmd.AppendSwitch(switches::kDisableDefaultApps);
312 cmd.AppendSwitch(switches::kDisableExtensions); 311 cmd.AppendSwitch(switches::kDisableExtensions);
313 cmd.AppendSwitch(switches::kDisableSync); 312 cmd.AppendSwitch(switches::kDisableSync);
314 cmd.AppendSwitch(switches::kNoDefaultBrowserCheck); 313 cmd.AppendSwitch(switches::kNoDefaultBrowserCheck);
315 cmd.AppendSwitch(switches::kNoFirstRun); 314 cmd.AppendSwitch(switches::kNoFirstRun);
316 315
317 cmd.AppendArg(GetCloudPrintServiceEnableURLWithSignin(proxy_id).spec()); 316 cmd.AppendArg(GetCloudPrintServiceEnableURLWithSignin(proxy_id).spec());
318 317
319 base::win::ScopedHandle chrome_handle; 318 base::win::ScopedHandle chrome_handle;
320 DWORD thread_id = 0; 319 DWORD thread_id = 0;
321 if (!LaunchProcess(cmd, &chrome_handle, &thread_id)) { 320 if (!LaunchProcess(cmd, chrome_handle.Receive(), &thread_id)) {
322 LOG(ERROR) << "Unable to launch Chrome."; 321 LOG(ERROR) << "Unable to launch Chrome.";
323 return result; 322 return result;
324 } 323 }
325 324
326 for (;;) { 325 for (;;) {
327 DWORD wait_result = ::WaitForSingleObject(chrome_handle, 500); 326 DWORD wait_result = ::WaitForSingleObject(chrome_handle, 500);
328 std::string json = ReadAndUpdateServiceState(temp_user_data.path(), 327 std::string json = ReadAndUpdateServiceState(temp_user_data.path(),
329 proxy_id); 328 proxy_id);
330 if (wait_result == WAIT_OBJECT_0) { 329 if (wait_result == WAIT_OBJECT_0) {
331 // Return what we have because browser is closed. 330 // Return what we have because browser is closed.
332 return json; 331 return json;
333 } else if (wait_result == WAIT_TIMEOUT) { 332 } else if (wait_result == WAIT_TIMEOUT) {
334 if (!json.empty()) { 333 if (!json.empty()) {
335 // Close chrome because Service State is ready. 334 // Close chrome because Service State is ready.
336 CloseChrome(chrome_handle, thread_id); 335 CloseChrome(chrome_handle, thread_id);
337 return json; 336 return json;
338 } 337 }
339 } else { 338 } else {
340 LOG(ERROR) << "Chrome launch failed."; 339 LOG(ERROR) << "Chrome launch failed.";
341 return result; 340 return result;
342 } 341 }
343 } 342 }
344 NOTREACHED(); 343 NOTREACHED();
345 return std::string(); 344 return std::string();
346 } 345 }
347 346
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