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

Side by Side Diff: win8/delegate_execute/delegate_execute.cc

Issue 498573003: Add relaunch into ASH and desktop support for Chrome on Windows 7. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed build error Created 6 years, 4 months 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
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 <atlbase.h> 5 #include <atlbase.h>
6 #include <atlcom.h> 6 #include <atlcom.h>
7 #include <atlctl.h> 7 #include <atlctl.h>
8 #include <initguid.h> 8 #include <initguid.h>
9 #include <shellapi.h> 9 #include <shellapi.h>
10 10
11 #include "base/at_exit.h" 11 #include "base/at_exit.h"
12 #include "base/command_line.h" 12 #include "base/command_line.h"
13 #include "base/file_util.h" 13 #include "base/file_util.h"
14 #include "base/memory/scoped_ptr.h" 14 #include "base/memory/scoped_ptr.h"
15 #include "base/process/kill.h" 15 #include "base/process/kill.h"
16 #include "base/strings/string16.h" 16 #include "base/strings/string16.h"
17 #include "base/win/scoped_com_initializer.h" 17 #include "base/win/scoped_com_initializer.h"
18 #include "base/win/scoped_comptr.h" 18 #include "base/win/scoped_comptr.h"
19 #include "base/win/scoped_handle.h" 19 #include "base/win/scoped_handle.h"
20 #include "base/win/windows_version.h"
20 #include "breakpad/src/client/windows/handler/exception_handler.h" 21 #include "breakpad/src/client/windows/handler/exception_handler.h"
21 #include "chrome/common/chrome_switches.h" 22 #include "chrome/common/chrome_switches.h"
22 #include "chrome/installer/util/browser_distribution.h" 23 #include "chrome/installer/util/browser_distribution.h"
23 #include "win8/delegate_execute/command_execute_impl.h" 24 #include "win8/delegate_execute/command_execute_impl.h"
24 #include "win8/delegate_execute/crash_server_init.h" 25 #include "win8/delegate_execute/crash_server_init.h"
25 #include "win8/delegate_execute/delegate_execute_operation.h" 26 #include "win8/delegate_execute/delegate_execute_operation.h"
26 #include "win8/delegate_execute/resource.h" 27 #include "win8/delegate_execute/resource.h"
27 28
28 using namespace ATL; 29 using namespace ATL;
29 30
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 DWORD pid = operation.GetParentPid(); 110 DWORD pid = operation.GetParentPid();
110 AtlTrace("%ds timeout. Killing Chrome %d\n", kWaitSeconds, pid); 111 AtlTrace("%ds timeout. Killing Chrome %d\n", kWaitSeconds, pid);
111 base::KillProcessById(pid, 0, false); 112 base::KillProcessById(pid, 0, false);
112 } else { 113 } else {
113 AtlTrace("Failed to wait for relaunch mutex, result is 0x%x\n", result); 114 AtlTrace("Failed to wait for relaunch mutex, result is 0x%x\n", result);
114 } 115 }
115 } else { 116 } else {
116 // It is possible that chrome exits so fast that the mutex is not there. 117 // It is possible that chrome exits so fast that the mutex is not there.
117 AtlTrace("No relaunch mutex found\n"); 118 AtlTrace("No relaunch mutex found\n");
118 } 119 }
119 120
cpu_(ooo_6.6-7.5) 2014/08/22 21:47:11 lets add a comment here about why we launch the wi
ananta 2014/08/22 22:17:53 Done.
120 base::win::ScopedCOMInitializer com_initializer; 121 if (base::win::GetVersion() >= base::win::VERSION_WIN8) {
122 base::win::ScopedCOMInitializer com_initializer;
121 123
122 base::string16 relaunch_flags(operation.relaunch_flags()); 124 base::string16 relaunch_flags(operation.relaunch_flags());
123 SHELLEXECUTEINFO sei = { sizeof(sei) }; 125 SHELLEXECUTEINFO sei = { sizeof(sei) };
124 sei.fMask = SEE_MASK_FLAG_LOG_USAGE; 126 sei.fMask = SEE_MASK_FLAG_LOG_USAGE;
125 sei.nShow = SW_SHOWNORMAL; 127 sei.nShow = SW_SHOWNORMAL;
126 sei.lpFile = operation.shortcut().value().c_str(); 128 sei.lpFile = operation.shortcut().value().c_str();
127 sei.lpParameters = relaunch_flags.c_str(); 129 sei.lpParameters = relaunch_flags.c_str();
128 130
129 AtlTrace(L"Relaunching Chrome via shortcut [%ls]\n", sei.lpFile); 131 AtlTrace(L"Relaunching Chrome via shortcut [%ls]\n", sei.lpFile);
130 132
131 if (!::ShellExecuteExW(&sei)) { 133 if (!::ShellExecuteExW(&sei)) {
132 int error = HRESULT_FROM_WIN32(::GetLastError()); 134 int error = HRESULT_FROM_WIN32(::GetLastError());
133 AtlTrace("ShellExecute returned 0x%08X\n", error); 135 AtlTrace("ShellExecute returned 0x%08X\n", error);
134 return error; 136 return error;
137 }
138 } else {
139 base::FilePath chrome_exe_path;
140 bool found_exe = CommandExecuteImpl::FindChromeExe(&chrome_exe_path);
141 DCHECK(found_exe);
142 if (found_exe) {
143 bool launch_ash = CommandLine::ForCurrentProcess()->HasSwitch(
144 switches::kForceImmersive);
145 if (launch_ash) {
146 AtlTrace(L"Relaunching Chrome into Windows ASH on Windows 7\n");
147 } else {
148 AtlTrace(L"Relaunching Chrome into Desktop From ASH on Windows 7\n");
149 }
150 SHELLEXECUTEINFO sei = { sizeof(sei) };
151 sei.fMask = SEE_MASK_FLAG_LOG_USAGE;
152 sei.nShow = SW_SHOWNORMAL;
153 // No point in using the shortcut if we are launching into ASH as any
154 // additonal command line switches specified in the shortcut will be
155 // ignored. This is because we don't have a good way to send the command
156 // line switches from the viewer to the browser process.
157 sei.lpFile = (launch_ash || operation.shortcut().empty()) ?
158 chrome_exe_path.value().c_str() :
159 operation.shortcut().value().c_str();
160 sei.lpParameters =
161 launch_ash ? L"-ServerName:DefaultBrowserServer" : NULL;
162 if (!::ShellExecuteExW(&sei)) {
163 int error = HRESULT_FROM_WIN32(::GetLastError());
164 AtlTrace("ShellExecute returned 0x%08X\n", error);
165 return error;
166 }
167 }
135 } 168 }
136 return S_OK; 169 return S_OK;
137 } 170 }
138 171
139 extern "C" int WINAPI _tWinMain(HINSTANCE , HINSTANCE, LPTSTR, int nShowCmd) { 172 extern "C" int WINAPI _tWinMain(HINSTANCE , HINSTANCE, LPTSTR, int nShowCmd) {
140 scoped_ptr<google_breakpad::ExceptionHandler> breakpad = 173 scoped_ptr<google_breakpad::ExceptionHandler> breakpad =
141 delegate_execute::InitializeCrashReporting(); 174 delegate_execute::InitializeCrashReporting();
142 175
143 base::AtExitManager exit_manager; 176 base::AtExitManager exit_manager;
144 AtlTrace("delegate_execute enter\n"); 177 AtlTrace("delegate_execute enter\n");
145 178
146 CommandLine::Init(0, NULL); 179 CommandLine::Init(0, NULL);
147 HRESULT ret_code = E_UNEXPECTED; 180 HRESULT ret_code = E_UNEXPECTED;
148 DelegateExecuteOperation operation; 181 DelegateExecuteOperation operation;
149 if (operation.Init(CommandLine::ForCurrentProcess())) { 182 if (operation.Init(CommandLine::ForCurrentProcess())) {
150 switch (operation.operation_type()) { 183 switch (operation.operation_type()) {
151 case DelegateExecuteOperation::DELEGATE_EXECUTE: 184 case DelegateExecuteOperation::DELEGATE_EXECUTE:
152 ret_code = _AtlModule.WinMain(nShowCmd); 185 ret_code = _AtlModule.WinMain(nShowCmd);
153 break; 186 break;
154 case DelegateExecuteOperation::RELAUNCH_CHROME: 187 case DelegateExecuteOperation::RELAUNCH_CHROME:
155 ret_code = RelaunchChrome(operation); 188 ret_code = RelaunchChrome(operation);
156 break; 189 break;
157 default: 190 default:
158 NOTREACHED(); 191 NOTREACHED();
159 } 192 }
160 } 193 }
161 AtlTrace("delegate_execute exit, code = %d\n", ret_code); 194 AtlTrace("delegate_execute exit, code = %d\n", ret_code);
162 return ret_code; 195 return ret_code;
163 } 196 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698