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

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: Fix Win compile error introduce by rebase. 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 c63674f96efc413d9225fdb6749e0da7439d0401..8def451e9bc84281b98c0ee54693f5205e3e5ae0 100644
--- a/chrome/browser/profile_resetter/automatic_profile_resetter.cc
+++ b/chrome/browser/profile_resetter/automatic_profile_resetter.cc
@@ -91,18 +91,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(
@@ -392,6 +380,7 @@ AutomaticProfileResetter::AutomaticProfileResetter(Profile* profile)
state_(STATE_UNINITIALIZED),
enumeration_of_loaded_modules_ready_(false),
template_url_service_ready_(false),
+ has_already_dismissed_prompt_(false),
weak_ptr_factory_(this) {
DCHECK(profile_);
}
@@ -423,7 +412,7 @@ void AutomaticProfileResetter::Initialize() {
}
delegate_.reset(new AutomaticProfileResetterDelegateImpl(
- TemplateURLServiceFactory::GetForProfile(profile_)));
+ profile_, ProfileResetter::ALL));
task_runner_for_waiting_ =
content::BrowserThread::GetMessageLoopProxyForThread(
content::BrowserThread::UI);
@@ -451,6 +440,79 @@ void AutomaticProfileResetter::Activate() {
}
}
+void AutomaticProfileResetter::TriggerProfileReset(bool send_feedback) {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ DCHECK_EQ(state_, STATE_HAS_SHOWN_BUBBLE);
+
+ state_ = STATE_PERFORMING_RESET;
+
+ ReportPromptResult(PROMPT_ACTION_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_HAS_SHOWN_BUBBLE);
+
+ ReportPromptResult(PROMPT_ACTION_NO_RESET);
+ delegate_->DismissPrompt();
+ FinishResetPromptFlow();
+}
+
+bool AutomaticProfileResetter::IsResetPromptFlowActive() const {
+ return state_ == STATE_HAS_TRIGGERED_PROMPT ||
+ state_ == STATE_HAS_SHOWN_BUBBLE;
+}
+
+void AutomaticProfileResetter::NotifyDidShowResetBubble() {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ DCHECK_EQ(state_, STATE_HAS_TRIGGERED_PROMPT);
+
+ state_ = STATE_HAS_SHOWN_BUBBLE;
+
+ PersistMementos();
+ ReportPromptResult(PROMPT_SHOWN_BUBBLE);
+}
+
+void AutomaticProfileResetter::NotifyDidOpenWebUIResetDialog() {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+
+ // This notification is invoked unconditionally by the WebUI, only care about
+ // it when the prompt flow is currently active (and not yet resetting).
+ if (state_ == STATE_HAS_TRIGGERED_PROMPT ||
+ state_ == STATE_HAS_SHOWN_BUBBLE) {
+ has_already_dismissed_prompt_ = true;
+ delegate_->DismissPrompt();
+ }
+}
+
+void AutomaticProfileResetter::NotifyDidCloseWebUIResetDialog(
+ bool performed_reset) {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+
+ // This notification is invoked unconditionally by the WebUI, only care about
+ // it when the prompt flow is currently active (and not yet resetting).
+ if (state_ == STATE_HAS_TRIGGERED_PROMPT ||
+ state_ == STATE_HAS_SHOWN_BUBBLE) {
+ if (!has_already_dismissed_prompt_)
+ delegate_->DismissPrompt();
+ if (state_ == STATE_HAS_TRIGGERED_PROMPT) {
+ PersistMementos();
+ ReportPromptResult(performed_reset ?
+ PROMPT_NOT_SHOWN_BUBBLE_BUT_HAD_WEBUI_RESET :
+ PROMPT_NOT_SHOWN_BUBBLE_BUT_HAD_WEBUI_NO_RESET);
+ } else { // if (state_ == STATE_HAS_SHOWN_PROMPT)
+ ReportPromptResult(performed_reset ?
+ PROMPT_FOLLOWED_BY_WEBUI_RESET :
+ PROMPT_FOLLOWED_BY_WEBUI_NO_RESET);
+ }
+ FinishResetPromptFlow();
+ }
+}
+
void AutomaticProfileResetter::SetProgramForTesting(
const std::string& program) {
program_ = program;
@@ -471,6 +533,19 @@ void AutomaticProfileResetter::SetTaskRunnerForWaitingForTesting(
task_runner_for_waiting_ = task_runner;
}
+void AutomaticProfileResetter::Shutdown() {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+
+ // We better not do anything substantial at this point. The metrics service
+ // has already been shut down; and local state has already been commited to
+ // file (in the regular fashion) for the last time.
+
+ state_ = STATE_DISABLED;
+
+ weak_ptr_factory_.InvalidateWeakPtrs();
+ delegate_.reset();
+}
+
void AutomaticProfileResetter::PrepareEvaluationFlow() {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
DCHECK_EQ(state_, STATE_INITIALIZED);
@@ -517,7 +592,7 @@ void AutomaticProfileResetter::BeginEvaluationFlow() {
DCHECK(!program_.empty());
DCHECK(!input_builder_);
- state_ = STATE_WORKING;
+ state_ = STATE_EVALUATING_CONDITIONS;
input_builder_.reset(new InputBuilder(profile_, delegate_.get()));
input_builder_->BuildEvaluatorProgramInput(
@@ -528,7 +603,7 @@ void AutomaticProfileResetter::BeginEvaluationFlow() {
void AutomaticProfileResetter::ContinueWithEvaluationFlow(
scoped_ptr<base::DictionaryValue> program_input) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
- DCHECK_EQ(state_, STATE_WORKING);
+ DCHECK_EQ(state_, STATE_EVALUATING_CONDITIONS);
input_builder_.reset();
@@ -586,49 +661,87 @@ 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);
if (results->satisfied_criteria_mask != 0 && !results->had_prompted_already) {
- PreferenceHostedPromptMemento memento_in_prefs(profile_);
- LocalStateHostedPromptMemento memento_in_local_state(profile_);
- FileHostedPromptMemento memento_in_file(profile_);
-
- 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);
+ evaluation_results_ = results.Pass();
+ BeginResetPromptFlow();
+ } else {
+ state_ = STATE_DONE;
+ }
+}
- if (ShouldPerformLiveRun()) {
- delegate_->ShowPrompt();
- } else {
- UMA_HISTOGRAM_ENUMERATION("AutomaticProfileReset.PromptResult",
- PROMPT_NOT_SHOWN,
- PROMPT_RESULT_MAX);
- }
+void AutomaticProfileResetter::BeginResetPromptFlow() {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ DCHECK_EQ(state_, STATE_EVALUATING_CONDITIONS);
+
+ state_ = STATE_HAS_TRIGGERED_PROMPT;
+
+ if (ShouldPerformLiveRun() && delegate_->TriggerPrompt()) {
+ // Start fetching the brandcoded default settings speculatively in the
+ // background, so as to reduce waiting time if the user chooses to go
+ // through with the reset.
+ delegate_->FetchBrandcodedDefaultSettingsIfNeeded();
+ } else {
+ PersistMementos();
+ ReportPromptResult(PROMPT_NOT_TRIGGERED);
+ FinishResetPromptFlow();
}
+}
- state_ = STATE_DONE;
+void AutomaticProfileResetter::OnProfileSettingsResetCompleted() {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ DCHECK_EQ(state_, STATE_PERFORMING_RESET);
+
+ delegate_->DismissPrompt();
+ FinishResetPromptFlow();
}
-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::ReportPromptResult(PromptResult result) {
+ UMA_HISTOGRAM_ENUMERATION(
+ "AutomaticProfileReset.PromptResult", result, PROMPT_RESULT_MAX);
}
-void AutomaticProfileResetter::Shutdown() {
+void AutomaticProfileResetter::PersistMementos() {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ DCHECK(state_ == STATE_HAS_TRIGGERED_PROMPT ||
+ state_ == STATE_HAS_SHOWN_BUBBLE);
+ DCHECK(evaluation_results_);
- state_ = STATE_DISABLED;
- delegate_.reset();
- weak_ptr_factory_.InvalidateWeakPtrs();
+ PreferenceHostedPromptMemento memento_in_prefs(profile_);
+ LocalStateHostedPromptMemento memento_in_local_state(profile_);
+ FileHostedPromptMemento memento_in_file(profile_);
+
+ 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);
+
+ evaluation_results_.reset();
+}
+
+void AutomaticProfileResetter::FinishResetPromptFlow() {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ DCHECK(state_ == STATE_HAS_TRIGGERED_PROMPT ||
+ state_ == STATE_HAS_SHOWN_BUBBLE ||
+ state_ == STATE_PERFORMING_RESET);
+ DCHECK(!evaluation_results_);
+
+ state_ = STATE_DONE;
}

Powered by Google App Engine
This is Rietveld 408576698