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 f0c27d6eb49706907e240ee44ed46cb54e2180b5..0028b5eeae206eb7fca712b3251d1707550b72a1 100644 |
| --- a/chrome/browser/ui/startup/default_browser_prompt.cc |
| +++ b/chrome/browser/ui/startup/default_browser_prompt.cc |
| @@ -35,7 +35,8 @@ namespace { |
| class DefaultBrowserInfoBarDelegate : public ConfirmInfoBarDelegate { |
| public: |
| explicit DefaultBrowserInfoBarDelegate(InfoBarTabHelper* infobar_helper, |
|
grt (UTC plus 2)
2012/05/25 20:27:38
remove "explicit" since there's more than one arg.
motek.
2012/05/28 17:40:33
Good point. Haven't noticed that.
|
| - PrefService* prefs); |
| + PrefService* prefs, |
| + bool interactive_flow_required); |
| private: |
| virtual ~DefaultBrowserInfoBarDelegate(); |
| @@ -51,6 +52,7 @@ class DefaultBrowserInfoBarDelegate : public ConfirmInfoBarDelegate { |
| virtual bool NeedElevation(InfoBarButton button) const OVERRIDE; |
| virtual bool Accept() OVERRIDE; |
| virtual bool Cancel() OVERRIDE; |
| + static void SetChromeAsDefaultBrowser(bool interactive_flow); |
|
grt (UTC plus 2)
2012/05/25 20:27:38
please separate this from the ConfirmInfoBarDelega
motek.
2012/05/28 17:40:33
Done.
|
| // The prefs to use. |
| PrefService* prefs_; |
| @@ -61,6 +63,10 @@ class DefaultBrowserInfoBarDelegate : public ConfirmInfoBarDelegate { |
| // Whether the info-bar should be dismissed on the next navigation. |
| bool should_expire_; |
| + // Whether changing the default application will require entering the |
| + // modal-UI flow. |
| + bool interactive_flow_required_; |
| + |
| // Used to delay the expiration of the info-bar. |
| base::WeakPtrFactory<DefaultBrowserInfoBarDelegate> weak_factory_; |
| @@ -69,11 +75,13 @@ class DefaultBrowserInfoBarDelegate : public ConfirmInfoBarDelegate { |
| DefaultBrowserInfoBarDelegate::DefaultBrowserInfoBarDelegate( |
| InfoBarTabHelper* infobar_helper, |
| - PrefService* prefs) |
| + PrefService* prefs, |
| + bool interactive_flow_required) |
| : ConfirmInfoBarDelegate(infobar_helper), |
| prefs_(prefs), |
| action_taken_(false), |
| should_expire_(false), |
| + interactive_flow_required_(interactive_flow_required), |
| ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { |
| // We want the info-bar to stick-around for few seconds and then be hidden |
| // on the next navigation after that. |
| @@ -115,14 +123,28 @@ bool DefaultBrowserInfoBarDelegate::NeedElevation(InfoBarButton button) const { |
| bool DefaultBrowserInfoBarDelegate::Accept() { |
| action_taken_ = true; |
| - UMA_HISTOGRAM_COUNTS("DefaultBrowserWarning.SetAsDefault", 1); |
| BrowserThread::PostTask( |
| BrowserThread::FILE, |
| FROM_HERE, |
| - base::Bind(base::IgnoreResult(&ShellIntegration::SetAsDefaultBrowser))); |
| + base::Bind(&DefaultBrowserInfoBarDelegate::SetChromeAsDefaultBrowser, |
| + interactive_flow_required_)); |
| + |
| return true; |
| } |
| +void DefaultBrowserInfoBarDelegate::SetChromeAsDefaultBrowser( |
| + bool interactive_flow) { |
| + if (interactive_flow) { |
| + UMA_HISTOGRAM_COUNTS("DefaultBrowserWarning.SetAsDefaultUI", 1); |
| + if (!ShellIntegration::StartSetAsDefaultBrowserInteractive()) { |
|
grt (UTC plus 2)
2012/05/25 20:27:38
remove braces
|
| + UMA_HISTOGRAM_COUNTS("DefaultBrowserWarning.SetAsDefaultUIFailed", 1); |
| + } |
| + } else { |
| + UMA_HISTOGRAM_COUNTS("DefaultBrowserWarning.SetAsDefault", 1); |
| + ShellIntegration::SetAsDefaultBrowser(); |
| + } |
| +} |
| + |
| bool DefaultBrowserInfoBarDelegate::Cancel() { |
| action_taken_ = true; |
| UMA_HISTOGRAM_COUNTS("DefaultBrowserWarning.DontSetAsDefault", 1); |
| @@ -131,7 +153,8 @@ bool DefaultBrowserInfoBarDelegate::Cancel() { |
| return true; |
| } |
| -void NotifyNotDefaultBrowserCallback() { |
| +void NotifyNotDefaultBrowserCallback( |
| + ShellIntegration::DefaultSettingsChangePermission operation_type) { |
| Browser* browser = BrowserList::GetLastActive(); |
| if (!browser) |
| return; // Reached during ui tests. |
| @@ -147,18 +170,25 @@ void NotifyNotDefaultBrowserCallback() { |
| if (infobar_helper->infobar_count() > 0) |
| return; |
| + bool interactive_flow = operation_type == |
| + ShellIntegration::CHANGE_DEFAULT_INTERACTIVE; |
| infobar_helper->AddInfoBar( |
| new DefaultBrowserInfoBarDelegate(infobar_helper, |
| - tab->profile()->GetPrefs())); |
| + tab->profile()->GetPrefs(), |
| + interactive_flow)); |
| } |
| void CheckDefaultBrowserCallback() { |
| - if (ShellIntegration::IsDefaultBrowser() || |
| - !ShellIntegration::CanSetAsDefaultBrowser()) { |
| - return; |
| - } |
| - BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
| - base::Bind(&NotifyNotDefaultBrowserCallback)); |
| + if (!ShellIntegration::IsDefaultBrowser()) { |
| + ShellIntegration::DefaultSettingsChangePermission default_change_mode = |
| + ShellIntegration::CanSetAsDefaultBrowser(); |
| + |
| + if (ShellIntegration::CHANGE_DEFAULT_NOT_ALLOWED == default_change_mode) |
|
grt (UTC plus 2)
2012/05/25 20:27:38
i think this looks better without the return:
if (
motek.
2012/05/28 17:40:33
Done.
|
| + return; |
| + BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
| + base::Bind(&NotifyNotDefaultBrowserCallback, |
| + default_change_mode)); |
| + } |
| } |
| } // namespace |