| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/profile_resetter/profile_reset_global_error.h" |
| |
| #include "base/metrics/histogram.h" |
| #include "chrome/app/chrome_command_ids.h" |
| #include "chrome/browser/profile_resetter/automatic_profile_resetter.h" |
| #include "chrome/browser/profile_resetter/automatic_profile_resetter_factory.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/ui/browser.h" |
| #include "chrome/browser/ui/chrome_pages.h" |
| #include "chrome/browser/ui/global_error/global_error_service.h" |
| #include "chrome/browser/ui/global_error/global_error_service_factory.h" |
| #include "chrome/browser/ui/profile_reset_bubble.h" |
| #include "chrome/common/url_constants.h" |
| #include "grit/chromium_strings.h" |
| #include "grit/generated_resources.h" |
| #include "ui/base/l10n/l10n_util.h" |
| |
| namespace { |
| |
| base::TimeDelta GetPromptDelayHistogramMaximum() { |
| return base::TimeDelta::FromDays(7); |
| } |
| |
| // Records the delay between when the reset prompt is triggered and when the |
| // bubble can actually be shown. |
| void RecordPromptDelay(const base::TimeDelta& delay) { |
| UMA_HISTOGRAM_CUSTOM_TIMES( |
| "AutomaticProfileReset.PromptDelay", delay, |
| base::TimeDelta::FromSeconds(1), GetPromptDelayHistogramMaximum(), 50); |
| } |
| |
| } // namespace |
| |
| |
| // ProfileResetGlobalError --------------------------------------------------- |
| |
| ProfileResetGlobalError::ProfileResetGlobalError(Profile* profile) |
| : profile_(profile), has_shown_bubble_view_(false), bubble_view_(NULL) { |
| AutomaticProfileResetter* automatic_profile_resetter = |
| AutomaticProfileResetterFactory::GetForBrowserContext(profile_); |
| if (automatic_profile_resetter) |
| automatic_profile_resetter_ = automatic_profile_resetter->AsWeakPtr(); |
| } |
| |
| ProfileResetGlobalError::~ProfileResetGlobalError() { |
| if (!has_shown_bubble_view_) |
| RecordPromptDelay(GetPromptDelayHistogramMaximum()); |
| } |
| |
| // static |
| bool ProfileResetGlobalError::IsSupportedOnPlatform() { |
| return IsProfileResetBubbleSupported(); |
| } |
| |
| bool ProfileResetGlobalError::HasMenuItem() { return true; } |
| |
| int ProfileResetGlobalError::MenuItemCommandID() { |
| return IDC_SHOW_SETTINGS_RESET_BUBBLE; |
| } |
| |
| base::string16 ProfileResetGlobalError::MenuItemLabel() { |
| return l10n_util::GetStringFUTF16( |
| IDS_RESET_SETTINGS_MENU_ITEM, |
| l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME)); |
| } |
| |
| void ProfileResetGlobalError::ExecuteMenuItem(Browser* browser) { |
| chrome::ShowSettingsSubPage(browser, chrome::kResetProfileSettingsSubPage); |
| } |
| |
| bool ProfileResetGlobalError::HasBubbleView() { return true; } |
| |
| bool ProfileResetGlobalError::HasShownBubbleView() { |
| return has_shown_bubble_view_; |
| } |
| |
| void ProfileResetGlobalError::ShowBubbleView(Browser* browser) { |
| if (has_shown_bubble_view_) |
| return; |
| |
| has_shown_bubble_view_ = true; |
| bubble_view_ = ShowProfileResetBubble(AsWeakPtr(), browser); |
| |
| if (automatic_profile_resetter_) |
| automatic_profile_resetter_->NotifyDidShowResetBubble(); |
| RecordPromptDelay(timer_.Elapsed()); |
| } |
| |
| void ProfileResetGlobalError::OnBubbleViewDidClose() { |
| bubble_view_ = NULL; |
| } |
| |
| void ProfileResetGlobalError::OnBubbleViewResetButtonPressed( |
| bool send_feedback) { |
| if (automatic_profile_resetter_) |
| automatic_profile_resetter_->TriggerProfileReset(send_feedback); |
| } |
| |
| void ProfileResetGlobalError::OnBubbleViewNoThanksButtonPressed() { |
| if (automatic_profile_resetter_) |
| automatic_profile_resetter_->SkipProfileReset(); |
| } |
| |
| GlobalErrorBubbleViewBase* ProfileResetGlobalError::GetBubbleView() { |
| return bubble_view_; |
| } |