| Index: chrome/browser/profile_resetter/profile_reset_global_error.cc
|
| diff --git a/chrome/browser/profile_resetter/profile_reset_global_error.cc b/chrome/browser/profile_resetter/profile_reset_global_error.cc
|
| index 03c78c7bef8bf5a1c436b02af49980fc0bdd7532..5a2cd0668955da6d1270f407f29f8ab6cb460bb6 100644
|
| --- a/chrome/browser/profile_resetter/profile_reset_global_error.cc
|
| +++ b/chrome/browser/profile_resetter/profile_reset_global_error.cc
|
| @@ -6,6 +6,12 @@
|
|
|
| #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/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 "grit/chromium_strings.h"
|
| #include "grit/generated_resources.h"
|
| @@ -13,12 +19,21 @@
|
|
|
| namespace {
|
|
|
| -// The maximum number of ignored bubbles we track in the NumNoThanksPerReset
|
| -// histogram.
|
| -const int kMaxIgnored = 50;
|
| +// The URL that leads directly to the WebUI reset dialog in the settings page.
|
| +const char kResetProfileSettingsURL[] =
|
| + "chrome://settings/resetProfileSettings";
|
|
|
| -// The number of buckets we want the NumNoThanksPerReset histogram to use.
|
| -const int kNumIgnoredBuckets = 5;
|
| +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
|
|
|
| @@ -26,9 +41,22 @@ const int kNumIgnoredBuckets = 5;
|
| // ProfileResetGlobalError ---------------------------------------------------
|
|
|
| ProfileResetGlobalError::ProfileResetGlobalError(Profile* profile)
|
| - : profile_(profile), num_times_bubble_view_shown_(0), bubble_view_(NULL) {}
|
| + : 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() {}
|
| +ProfileResetGlobalError::~ProfileResetGlobalError() {
|
| + if (!has_shown_bubble_view_)
|
| + RecordPromptDelay(GetPromptDelayHistogramMaximum());
|
| +}
|
| +
|
| +// static
|
| +bool ProfileResetGlobalError::IsSupportedOnPlatform() {
|
| + return IsProfileResetBubbleSupported();
|
| +}
|
|
|
| bool ProfileResetGlobalError::HasMenuItem() { return true; }
|
|
|
| @@ -43,20 +71,27 @@ string16 ProfileResetGlobalError::MenuItemLabel() {
|
| }
|
|
|
| void ProfileResetGlobalError::ExecuteMenuItem(Browser* browser) {
|
| - ShowBubbleView(browser);
|
| + browser->OpenURL(content::OpenURLParams(
|
| + GURL(kResetProfileSettingsURL), content::Referrer(),
|
| + NEW_FOREGROUND_TAB, content::PAGE_TRANSITION_LINK, false));
|
| }
|
|
|
| bool ProfileResetGlobalError::HasBubbleView() { return true; }
|
|
|
| bool ProfileResetGlobalError::HasShownBubbleView() {
|
| - return num_times_bubble_view_shown_ > 0;
|
| + return has_shown_bubble_view_;
|
| }
|
|
|
| void ProfileResetGlobalError::ShowBubbleView(Browser* browser) {
|
| - if (bubble_view_)
|
| + if (has_shown_bubble_view_)
|
| return;
|
| - ++num_times_bubble_view_shown_;
|
| +
|
| + has_shown_bubble_view_ = true;
|
| bubble_view_ = ShowProfileResetBubble(AsWeakPtr(), browser);
|
| +
|
| + if (automatic_profile_resetter_)
|
| + automatic_profile_resetter_->NotifyDidShowResetBubble();
|
| + RecordPromptDelay(timer_.Elapsed());
|
| }
|
|
|
| void ProfileResetGlobalError::OnBubbleViewDidClose() {
|
| @@ -65,16 +100,13 @@ void ProfileResetGlobalError::OnBubbleViewDidClose() {
|
|
|
| void ProfileResetGlobalError::OnBubbleViewResetButtonPressed(
|
| bool send_feedback) {
|
| - // TODO(engedy): Integrate with the AutomaticProfileResetter.
|
| - UMA_HISTOGRAM_CUSTOM_COUNTS("SettingsResetBubble.NumNoThanksPerReset",
|
| - num_times_bubble_view_shown_ - 1,
|
| - 0,
|
| - kMaxIgnored,
|
| - kNumIgnoredBuckets);
|
| + if (automatic_profile_resetter_)
|
| + automatic_profile_resetter_->TriggerProfileReset(send_feedback);
|
| }
|
|
|
| void ProfileResetGlobalError::OnBubbleViewNoThanksButtonPressed() {
|
| - // TODO(engedy): Integrate with the AutomaticProfileResetter.
|
| + if (automatic_profile_resetter_)
|
| + automatic_profile_resetter_->SkipProfileReset();
|
| }
|
|
|
| GlobalErrorBubbleViewBase* ProfileResetGlobalError::GetBubbleView() {
|
|
|