diff options
author | zturner@chromium.org <zturner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-07 09:14:53 +0000 |
---|---|---|
committer | zturner@chromium.org <zturner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-07 09:14:53 +0000 |
commit | 077b34bc2416ba9a9c443f5e78de31f3fbb9f090 (patch) | |
tree | ecaeb2dce9850eab07695c0facd3f832bfad95a3 /win8/delegate_execute/command_execute_impl.cc | |
parent | fae06bc06542c92a5b9c2a59697c57140a8460d3 (diff) | |
download | chromium_src-077b34bc2416ba9a9c443f5e78de31f3fbb9f090.zip chromium_src-077b34bc2416ba9a9c443f5e78de31f3fbb9f090.tar.gz chromium_src-077b34bc2416ba9a9c443f5e78de31f3fbb9f090.tar.bz2 |
Make delegate_execute GetLaunchMode() check for default browser.
BUG=350078
Review URL: https://codereview.chromium.org/189113002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@255562 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'win8/delegate_execute/command_execute_impl.cc')
-rw-r--r-- | win8/delegate_execute/command_execute_impl.cc | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/win8/delegate_execute/command_execute_impl.cc b/win8/delegate_execute/command_execute_impl.cc index 0d05dc5..405b24f 100644 --- a/win8/delegate_execute/command_execute_impl.cc +++ b/win8/delegate_execute/command_execute_impl.cc @@ -116,7 +116,7 @@ bool CommandExecuteImpl::path_provider_initialized_ = false; // If chrome is running then focus/activation is given to the existing one // regarless of what launch point the user used. // -// The general flow when chrome is the default browser is as follows: +// The general flow for activation is as follows: // // 1- User interacts with launch point (icon, tile, search, shellexec, etc) // 2- Windows finds the appid for launch item and resolves it to chrome @@ -133,11 +133,12 @@ bool CommandExecuteImpl::path_provider_initialized_ = false; // the launch scheme (or url) and the activation verb. // 5- Windows calls CommandExecuteImpl::Getvalue() // Here we need to return AHE_IMMERSIVE or AHE_DESKTOP. That depends on: -// a) if run in high-integrity return AHE_DESKTOP +// a) if run in high-integrity return AHE_DESKTOP. // b) else we return what GetLaunchMode() tells us, which is: -// i) if the command line --force-xxx is present return that -// ii) if the registry 'launch_mode' exists return that -// iii) else return AHE_DESKTOP +// i) if chrome is not the default browser, return AHE_DESKTOP +// ii) if the command line --force-xxx is present return that +// iii) if the registry 'launch_mode' exists return that +// iv) else return AHE_DESKTOP // 6- If we returned AHE_IMMERSIVE in step 5 windows might not call us back // and simply activate chrome in metro by itself, however in some cases // it might proceed at step 7. @@ -150,7 +151,13 @@ bool CommandExecuteImpl::path_provider_initialized_ = false; // b) else we call one of the IApplicationActivationManager activation // functions depending on the parameters passed in step 4. // c) If the activation returns E_APPLICATION_NOT_REGISTERED, then we fall -// back to launching chrome on the desktop via LaunchDestopChrome(). +// back to launching chrome on the desktop via LaunchDestopChrome(). Note +// that this case can lead to strange behavior, because at this point we +// have pre-launched the browser with --silent-launch --viewer-connect. +// E_APPLICATION_NOT_REGISTERED is always returned if Chrome is not the +// default browser (this case will have already been checked for by +// GetLaunchMode() and AHE_DESKTOP returned), but we don't know if it can +// be returned for other reasons. // // Note that if a command line --force-xxx is present we write that launch mode // in the registry so next time the logic reaches 5c-ii it will use the same @@ -209,6 +216,12 @@ STDMETHODIMP CommandExecuteImpl::GetValue(enum AHE_TYPE* pahe) { EC_HOST_UI_MODE mode = GetLaunchMode(); *pahe = (mode == ECHUIM_DESKTOP) ? AHE_DESKTOP : AHE_IMMERSIVE; + // If we're going to return AHE_IMMERSIVE, then both the browser process and + // the metro viewer need to launch and connect before the user can start + // browsing. However we must not launch the metro viewer until we get a + // call to CommandExecuteImpl::Execute(). If we wait until then to launch + // the browser process as well, it will appear laggy while they connect to + // each other, so we pre-launch the browser process now. if (*pahe == AHE_IMMERSIVE && verb_ != win8::kMetroViewerConnectVerb) LaunchChromeBrowserProcess(); return S_OK; @@ -415,6 +428,17 @@ EC_HOST_UI_MODE CommandExecuteImpl::GetLaunchMode() { launch_mode_determined = true; return launch_mode; } + + base::FilePath chrome_exe; + if (!FindChromeExe(&chrome_exe) || + ShellUtil::GetChromeDefaultStateFromPath(chrome_exe) != + ShellUtil::DefaultState::IS_DEFAULT) { + AtlTrace("Chrome is not default: launching in desktop mode\n"); + launch_mode = ECHUIM_DESKTOP; + launch_mode_determined = true; + return launch_mode; + } + if (GetAsyncKeyState(VK_SHIFT) && GetAsyncKeyState(VK_F11)) { AtlTrace("Hotkey: launching in immersive mode\n"); launch_mode = ECHUIM_IMMERSIVE; |