Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3048)

Unified Diff: chrome/browser/profile_resetter/automatic_profile_resetter.cc

Issue 62193002: Integrate UI and reset logic into AutomaticProfileResetter. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Mostly done, apart from shutdown issues. Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/profile_resetter/automatic_profile_resetter.cc
diff --git a/chrome/browser/profile_resetter/automatic_profile_resetter.cc b/chrome/browser/profile_resetter/automatic_profile_resetter.cc
index 7e33fe75ad39305faa2c489ed0973ccaa5a7cccb..2c57a96552f8acc591d81cc39197dfefa44b1260 100644
--- a/chrome/browser/profile_resetter/automatic_profile_resetter.cc
+++ b/chrome/browser/profile_resetter/automatic_profile_resetter.cc
@@ -109,18 +109,6 @@ COMPILE_ASSERT(
arraysize(kCombinedStatusMaskKeys) == kCombinedStatusMaskNumberOfBits,
combined_status_mask_bits_mismatch);
-// Enumeration of the possible outcomes of showing the profile reset prompt.
-enum PromptResult {
- // Prompt was not shown because only a dry-run was performed.
- PROMPT_NOT_SHOWN,
- PROMPT_ACTION_RESET,
- PROMPT_ACTION_NO_RESET,
- PROMPT_DISMISSED,
- // Prompt was still shown (not dismissed by the user) when Chrome was closed.
- PROMPT_IGNORED,
- PROMPT_RESULT_MAX
-};
-
// Returns whether or not a dry-run shall be performed.
bool ShouldPerformDryRun() {
return StartsWithASCII(
@@ -200,6 +188,7 @@ AutomaticProfileResetter::AutomaticProfileResetter(Profile* profile)
state_(STATE_UNINITIALIZED),
enumeration_of_loaded_modules_ready_(false),
template_url_service_ready_(false),
+ has_shown_bubble_(false),
memento_in_prefs_(profile_),
memento_in_local_state_(profile_),
memento_in_file_(profile_),
@@ -234,7 +223,7 @@ void AutomaticProfileResetter::Initialize() {
}
delegate_.reset(new AutomaticProfileResetterDelegateImpl(
- TemplateURLServiceFactory::GetForProfile(profile_)));
+ profile_, ProfileResetter::ALL));
task_runner_for_waiting_ =
content::BrowserThread::GetMessageLoopProxyForThread(
content::BrowserThread::UI);
@@ -262,6 +251,81 @@ void AutomaticProfileResetter::Activate() {
}
}
+void AutomaticProfileResetter::TriggerProfileReset(bool send_feedback) {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ DCHECK_EQ(state_, STATE_AWAITING_USER_CHOICE);
+
+ state_ = STATE_PERFORMING_RESET;
+ delegate_->TriggerProfileSettingsReset(
+ send_feedback,
+ base::Bind(&AutomaticProfileResetter::OnProfileSettingsResetCompleted,
+ weak_ptr_factory_.GetWeakPtr()));
+}
+
+void AutomaticProfileResetter::SkipProfileReset() {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ DCHECK_EQ(state_, STATE_AWAITING_USER_CHOICE);
+
+ FinishResetPromptFlow(PROMPT_ACTION_NO_RESET);
+}
+
+bool AutomaticProfileResetter::IsResetPromptActive() const {
+ return state_ == STATE_AWAITING_USER_CHOICE;
+}
+
+void AutomaticProfileResetter::NotifyDidShowResetBubble() {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ DCHECK_EQ(state_, STATE_AWAITING_USER_CHOICE);
+
+ has_shown_bubble_ = true;
+}
+
+void AutomaticProfileResetter::NotifyDidOpenWebUIResetDialog() {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+
+ // This notification is invoked unconditionally by the WebUI, but we only care
+ // about it when the prompt is currently active.
+ if (state_ == STATE_AWAITING_USER_CHOICE)
+ delegate_->DismissPrompt();
+}
+
+void AutomaticProfileResetter::NotifyDidCloseWebUIResetDialog(
+ bool performed_reset) {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+
+ // This notification is invoked unconditionally by the WebUI, but we only care
+ // about it when the prompt is currently active.
battre 2013/11/11 02:38:22 nit: -2 spaces.
engedy 2013/11/13 00:40:44 Done.
+ if (state_ == STATE_AWAITING_USER_CHOICE) {
+ FinishResetPromptFlow(has_shown_bubble_ ?
+ (performed_reset ?
+ PROMPT_FOLLOWED_BY_WEBUI_RESET :
+ PROMPT_FOLLOWED_BY_WEBUI_NO_RESET) :
+ (performed_reset ?
+ PROMPT_SUPPRESSED_BUT_HAD_WEBUI_RESET :
+ PROMPT_SUPPRESSED_BUT_HAD_WEBUI_NO_RESET));
+ }
+}
+
+void AutomaticProfileResetter::Shutdown() {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+
+ // At this point, metrics service is already shut down and the local state
+ // should already no longer be written...
+
+ // Conclude the flow in case the bubble was shown, so as to prevent showing
+ // the prompt on next start-up. However, if the bubble was not even shown, or
+ // if the ongoing reset did not complete, show the prompt on next start-up.
+ if (state_ == STATE_AWAITING_USER_CHOICE && has_shown_bubble_)
+ FinishResetPromptFlow(PROMPT_IGNORED);
+ else if (state_ == STATE_AWAITING_USER_CHOICE ||
+ state_ == STATE_PERFORMING_RESET)
+ delegate_->DismissPrompt();
+
+ state_ = STATE_DISABLED;
+ delegate_.reset();
+ weak_ptr_factory_.InvalidateWeakPtrs();
+}
+
void AutomaticProfileResetter::SetProgramForTesting(
const std::string& program) {
program_ = program;
@@ -327,7 +391,7 @@ void AutomaticProfileResetter::BeginEvaluationFlow() {
DCHECK_EQ(state_, STATE_READY);
DCHECK(!program_.empty());
- state_ = STATE_WORKING;
+ state_ = STATE_EVALUATING_CONDITIONS;
memento_in_file_.ReadValue(
base::Bind(&AutomaticProfileResetter::ContinueWithEvaluationFlow,
weak_ptr_factory_.GetWeakPtr()));
@@ -386,7 +450,7 @@ scoped_ptr<base::DictionaryValue>
void AutomaticProfileResetter::ContinueWithEvaluationFlow(
const std::string& memento_value_in_file) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
- DCHECK_EQ(state_, STATE_WORKING);
+ DCHECK_EQ(state_, STATE_EVALUATING_CONDITIONS);
PrefService* prefs = profile_->GetPrefs();
DCHECK(prefs);
@@ -447,45 +511,73 @@ scoped_ptr<AutomaticProfileResetter::EvaluationResults>
return results.Pass();
}
+void AutomaticProfileResetter::ReportStatistics(uint32 satisfied_criteria_mask,
+ uint32 combined_status_mask) {
+ UMA_HISTOGRAM_ENUMERATION("AutomaticProfileReset.SatisfiedCriteriaMask",
+ satisfied_criteria_mask,
+ kSatisfiedCriteriaMaskMaximumValue);
+ UMA_HISTOGRAM_ENUMERATION("AutomaticProfileReset.CombinedStatusMask",
+ combined_status_mask,
+ kCombinedStatusMaskMaximumValue);
+}
+
void AutomaticProfileResetter::FinishEvaluationFlow(
scoped_ptr<EvaluationResults> results) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
- DCHECK_EQ(state_, STATE_WORKING);
+ DCHECK_EQ(state_, STATE_EVALUATING_CONDITIONS);
- ReportStatistics(results->satisfied_criteria_mask,
- results->combined_status_mask);
+ evaluation_results_ = results.Pass();
- if (results->satisfied_criteria_mask != 0 && !results->had_prompted_already) {
- memento_in_prefs_.StoreValue(results->memento_value_in_prefs);
- memento_in_local_state_.StoreValue(results->memento_value_in_local_state);
- memento_in_file_.StoreValue(results->memento_value_in_file);
+ ReportStatistics(evaluation_results_->satisfied_criteria_mask,
+ evaluation_results_->combined_status_mask);
- if (ShouldPerformLiveRun()) {
- delegate_->ShowPrompt();
- } else {
- UMA_HISTOGRAM_ENUMERATION("AutomaticProfileReset.PromptResult",
- PROMPT_NOT_SHOWN,
- PROMPT_RESULT_MAX);
- }
+ if (evaluation_results_->satisfied_criteria_mask != 0 &&
+ !evaluation_results_->had_prompted_already) {
+ BeginResetPromptFlow();
+ } else {
+ state_ = STATE_DONE;
}
+}
- state_ = STATE_DONE;
+void AutomaticProfileResetter::BeginResetPromptFlow() {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ DCHECK_EQ(state_, STATE_EVALUATING_CONDITIONS);
+
+ state_ = STATE_AWAITING_USER_CHOICE;
+
+ if (ShouldPerformLiveRun() && delegate_->ShowPrompt()) {
+ // Start fetching brandcode config in the background speculatively.
+ delegate_->FetchBrandcodedDefaultSettingsIfNeeded();
+ } else {
+ FinishResetPromptFlow(PROMPT_NOT_SHOWN);
+ }
}
-void AutomaticProfileResetter::ReportStatistics(uint32 satisfied_criteria_mask,
- uint32 combined_status_mask) {
- UMA_HISTOGRAM_ENUMERATION("AutomaticProfileReset.SatisfiedCriteriaMask",
- satisfied_criteria_mask,
- kSatisfiedCriteriaMaskMaximumValue);
- UMA_HISTOGRAM_ENUMERATION("AutomaticProfileReset.CombinedStatusMask",
- combined_status_mask,
- kCombinedStatusMaskMaximumValue);
+void AutomaticProfileResetter::OnProfileSettingsResetCompleted() {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ DCHECK_EQ(state_, STATE_PERFORMING_RESET);
+
+ FinishResetPromptFlow(PROMPT_ACTION_RESET);
}
-void AutomaticProfileResetter::Shutdown() {
+void AutomaticProfileResetter::ReportPromptResult(PromptResult result) {
+ UMA_HISTOGRAM_ENUMERATION(
+ "AutomaticProfileReset.PromptResult", result, PROMPT_RESULT_MAX);
+}
+
+void AutomaticProfileResetter::FinishResetPromptFlow(PromptResult result) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ DCHECK(state_ == STATE_PERFORMING_RESET ||
+ state_ == STATE_AWAITING_USER_CHOICE);
- state_ = STATE_DISABLED;
- delegate_.reset();
- weak_ptr_factory_.InvalidateWeakPtrs();
+ delegate_->DismissPrompt();
+
+ memento_in_prefs_.StoreValue(evaluation_results_->memento_value_in_prefs);
+ memento_in_local_state_.StoreValue(
+ evaluation_results_->memento_value_in_local_state);
+ memento_in_file_.StoreValue(evaluation_results_->memento_value_in_file);
+
+ ReportPromptResult(result);
+
+ state_ = STATE_DONE;
}

Powered by Google App Engine
This is Rietveld 408576698