Chromium Code Reviews| Index: win8/delegate_execute/delegate_execute.cc |
| diff --git a/win8/delegate_execute/delegate_execute.cc b/win8/delegate_execute/delegate_execute.cc |
| index 3bd1ef151b2498adedff7c32ba561b7085efcb93..1da43e5e7812762a48cbbb04e748f0b8203ffbc1 100644 |
| --- a/win8/delegate_execute/delegate_execute.cc |
| +++ b/win8/delegate_execute/delegate_execute.cc |
| @@ -17,6 +17,7 @@ |
| #include "base/win/scoped_com_initializer.h" |
| #include "base/win/scoped_comptr.h" |
| #include "base/win/scoped_handle.h" |
| +#include "base/win/windows_version.h" |
| #include "breakpad/src/client/windows/handler/exception_handler.h" |
| #include "chrome/common/chrome_switches.h" |
| #include "chrome/installer/util/browser_distribution.h" |
| @@ -117,21 +118,53 @@ int RelaunchChrome(const DelegateExecuteOperation& operation) { |
| AtlTrace("No relaunch mutex found\n"); |
| } |
|
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.
|
| - base::win::ScopedCOMInitializer com_initializer; |
| + if (base::win::GetVersion() >= base::win::VERSION_WIN8) { |
| + base::win::ScopedCOMInitializer com_initializer; |
| - base::string16 relaunch_flags(operation.relaunch_flags()); |
| - SHELLEXECUTEINFO sei = { sizeof(sei) }; |
| - sei.fMask = SEE_MASK_FLAG_LOG_USAGE; |
| - sei.nShow = SW_SHOWNORMAL; |
| - sei.lpFile = operation.shortcut().value().c_str(); |
| - sei.lpParameters = relaunch_flags.c_str(); |
| + base::string16 relaunch_flags(operation.relaunch_flags()); |
| + SHELLEXECUTEINFO sei = { sizeof(sei) }; |
| + sei.fMask = SEE_MASK_FLAG_LOG_USAGE; |
| + sei.nShow = SW_SHOWNORMAL; |
| + sei.lpFile = operation.shortcut().value().c_str(); |
| + sei.lpParameters = relaunch_flags.c_str(); |
| - AtlTrace(L"Relaunching Chrome via shortcut [%ls]\n", sei.lpFile); |
| + AtlTrace(L"Relaunching Chrome via shortcut [%ls]\n", sei.lpFile); |
| - if (!::ShellExecuteExW(&sei)) { |
| - int error = HRESULT_FROM_WIN32(::GetLastError()); |
| - AtlTrace("ShellExecute returned 0x%08X\n", error); |
| - return error; |
| + if (!::ShellExecuteExW(&sei)) { |
| + int error = HRESULT_FROM_WIN32(::GetLastError()); |
| + AtlTrace("ShellExecute returned 0x%08X\n", error); |
| + return error; |
| + } |
| + } else { |
| + base::FilePath chrome_exe_path; |
| + bool found_exe = CommandExecuteImpl::FindChromeExe(&chrome_exe_path); |
| + DCHECK(found_exe); |
| + if (found_exe) { |
| + bool launch_ash = CommandLine::ForCurrentProcess()->HasSwitch( |
| + switches::kForceImmersive); |
| + if (launch_ash) { |
| + AtlTrace(L"Relaunching Chrome into Windows ASH on Windows 7\n"); |
| + } else { |
| + AtlTrace(L"Relaunching Chrome into Desktop From ASH on Windows 7\n"); |
| + } |
| + SHELLEXECUTEINFO sei = { sizeof(sei) }; |
| + sei.fMask = SEE_MASK_FLAG_LOG_USAGE; |
| + sei.nShow = SW_SHOWNORMAL; |
| + // No point in using the shortcut if we are launching into ASH as any |
| + // additonal command line switches specified in the shortcut will be |
| + // ignored. This is because we don't have a good way to send the command |
| + // line switches from the viewer to the browser process. |
| + sei.lpFile = (launch_ash || operation.shortcut().empty()) ? |
| + chrome_exe_path.value().c_str() : |
| + operation.shortcut().value().c_str(); |
| + sei.lpParameters = |
| + launch_ash ? L"-ServerName:DefaultBrowserServer" : NULL; |
| + if (!::ShellExecuteExW(&sei)) { |
| + int error = HRESULT_FROM_WIN32(::GetLastError()); |
| + AtlTrace("ShellExecute returned 0x%08X\n", error); |
| + return error; |
| + } |
| + } |
| } |
| return S_OK; |
| } |