Chromium Code Reviews| Index: chrome/browser/ui/startup/default_browser_prompt.cc |
| diff --git a/chrome/browser/ui/startup/default_browser_prompt.cc b/chrome/browser/ui/startup/default_browser_prompt.cc |
| index 86a592ba84e1473536ef1258ccad48df782d2f89..15b8e087136be5d10b9fe2492541d1f4ddd33655 100644 |
| --- a/chrome/browser/ui/startup/default_browser_prompt.cc |
| +++ b/chrome/browser/ui/startup/default_browser_prompt.cc |
| @@ -14,6 +14,7 @@ |
| #include "chrome/browser/first_run/first_run.h" |
| #include "chrome/browser/infobars/infobar_service.h" |
| #include "chrome/browser/profiles/profile.h" |
| +#include "chrome/browser/profiles/profile_manager.h" |
| #include "chrome/browser/shell_integration.h" |
| #include "chrome/browser/ui/browser.h" |
| #include "chrome/browser/ui/browser_finder.h" |
| @@ -194,8 +195,22 @@ void NotifyNotDefaultBrowserCallback(chrome::HostDesktopType desktop_type) { |
| ShellIntegration::SET_DEFAULT_INTERACTIVE)); |
| } |
| -void CheckDefaultBrowserCallback(chrome::HostDesktopType desktop_type) { |
| - if (ShellIntegration::GetDefaultBrowser() == ShellIntegration::NOT_DEFAULT) { |
| +void ResetCheckDefaultBrowserPrefOnUIThread() { |
|
msw
2015/06/16 20:29:49
nit: maybe DCHECK_CURRENTLY_ON(BrowserThread::UI);
grt (UTC plus 2)
2015/06/16 21:04:09
Done.
|
| + PrefService* prefs = ProfileManager::GetLastUsedProfile()->GetPrefs(); |
| + prefs->SetBoolean(prefs::kCheckDefaultBrowser, true); |
| +} |
| + |
| +void CheckDefaultBrowserOnFileThread(bool show_prompt, |
|
msw
2015/06/16 20:29:49
nit: maybe DCHECK_CURRENTLY_ON(BrowserThread::FILE
grt (UTC plus 2)
2015/06/16 21:04:09
Done.
|
| + chrome::HostDesktopType desktop_type) { |
| + ShellIntegration::DefaultWebClientState state = |
| + ShellIntegration::GetDefaultBrowser(); |
| + if (state == ShellIntegration::IS_DEFAULT) { |
| + // Notify the user in the future if Chrome ceases to be the user's chosen |
| + // default browser. |
| + content::BrowserThread::PostTask( |
| + content::BrowserThread::UI, FROM_HERE, |
| + base::Bind(&ResetCheckDefaultBrowserPrefOnUIThread)); |
| + } else if (show_prompt && state == ShellIntegration::NOT_DEFAULT) { |
| ShellIntegration::DefaultWebClientSetPermission default_change_mode = |
| ShellIntegration::CanSetAsDefaultBrowser(); |
| @@ -218,12 +233,13 @@ void RegisterDefaultBrowserPromptPrefs(PrefRegistrySimple* registry) { |
| void ShowDefaultBrowserPrompt(Profile* profile, HostDesktopType desktop_type) { |
| // We do not check if we are the default browser if: |
| - // - The user said "don't ask me again" on the infobar earlier. |
| // - There is a policy in control of this setting. |
| + // We check if we are the default browser but do not prompt if: |
| + // - The user said "don't ask me again" on the infobar earlier. |
| // - The "suppress_default_browser_prompt_for_version" master preference is |
| // set to the current version. |
| - if (!profile->GetPrefs()->GetBoolean(prefs::kCheckDefaultBrowser)) |
| - return; |
| + bool show_prompt = |
| + profile->GetPrefs()->GetBoolean(prefs::kCheckDefaultBrowser); |
| if (g_browser_process->local_state()->IsManagedPreference( |
| prefs::kDefaultBrowserSettingEnabled)) { |
| @@ -240,20 +256,22 @@ void ShowDefaultBrowserPrompt(Profile* profile, HostDesktopType desktop_type) { |
| return; |
| } |
| - const std::string disable_version_string = |
| - g_browser_process->local_state()->GetString( |
| - prefs::kBrowserSuppressDefaultBrowserPrompt); |
| - const Version disable_version(disable_version_string); |
| - DCHECK(disable_version_string.empty() || disable_version.IsValid()); |
| - if (disable_version.IsValid()) { |
| - const chrome::VersionInfo version_info; |
| - if (disable_version.Equals(Version(version_info.Version()))) |
| - return; |
| + if (show_prompt) { |
| + const std::string disable_version_string = |
| + g_browser_process->local_state()->GetString( |
| + prefs::kBrowserSuppressDefaultBrowserPrompt); |
| + const Version disable_version(disable_version_string); |
| + DCHECK(disable_version_string.empty() || disable_version.IsValid()); |
| + if (disable_version.IsValid()) { |
| + const chrome::VersionInfo version_info; |
| + if (disable_version.Equals(Version(version_info.Version()))) |
| + show_prompt = false; |
| + } |
| } |
| content::BrowserThread::PostTask( |
| content::BrowserThread::FILE, FROM_HERE, |
| - base::Bind(&CheckDefaultBrowserCallback, desktop_type)); |
| + base::Bind(&CheckDefaultBrowserOnFileThread, show_prompt, desktop_type)); |
| } |
| #if !defined(OS_WIN) |