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

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

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
« no previous file with comments | « no previous file | chrome/browser/profile_resetter/automatic_profile_resetter.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/profile_resetter/automatic_profile_resetter.h
diff --git a/chrome/browser/profile_resetter/automatic_profile_resetter.h b/chrome/browser/profile_resetter/automatic_profile_resetter.h
index a7a2296e8700db08ff48b1742c965246191b3864..44513daaf24e4eb8c15bfc135d28ee009f4bd9a6 100644
--- a/chrome/browser/profile_resetter/automatic_profile_resetter.h
+++ b/chrome/browser/profile_resetter/automatic_profile_resetter.h
@@ -36,6 +36,36 @@ class ListValue;
// otherwise.
class AutomaticProfileResetter : public BrowserContextKeyedService {
public:
+ // Enumeration listing the possible outcomes of triggering the profile reset
+ // prompt.
+ enum PromptResult {
+ // The reset prompt was not triggered because only a dry-run was performed,
+ // or because it was not supported on the current platform.
+ PROMPT_NOT_TRIGGERED,
+ // The reset bubble actually got shown. In contrast to the wrench menu item
+ // that can always be shown, the bubble might be delayed or might never be
+ // shown if another bubble was shown at the time of triggering the prompt.
+ // This enumeration value is usually recorded in conjunction with another
+ // PromptResult, the absence of which indicates that the prompt was ignored.
+ PROMPT_SHOWN_BUBBLE,
+ // The user selected "Reset" or "No, thanks" (respectively) directly from
+ // within the bubble.
+ PROMPT_ACTION_RESET,
+ PROMPT_ACTION_NO_RESET,
+ // The reset bubble was shown, then dismissed without taking definitive
+ // action. Then, however, the user initiated or refrained from doing a reset
+ // (respectively) from the conventional, WebUI-based reset dialog.
+ PROMPT_FOLLOWED_BY_WEBUI_RESET,
+ PROMPT_FOLLOWED_BY_WEBUI_NO_RESET,
+ // The reset bubble was suppressed (not shown) because another bubble was
+ // already being shown at the time. Regardless, however, the user initiated
+ // or refrained from doing a reset (respectively) from the conventional,
+ // WebUI-based reset dialog.
+ PROMPT_NOT_SHOWN_BUBBLE_BUT_HAD_WEBUI_RESET,
+ PROMPT_NOT_SHOWN_BUBBLE_BUT_HAD_WEBUI_NO_RESET,
+ PROMPT_RESULT_MAX
+ };
+
explicit AutomaticProfileResetter(Profile* profile);
virtual ~AutomaticProfileResetter();
@@ -50,6 +80,41 @@ class AutomaticProfileResetter : public BrowserContextKeyedService {
// Called by the AutomaticProfileResetterFactory.
void Activate();
+ // Called in case the user chooses to reset their profile settings from inside
+ // the reset bubble. Will trigger the reset, optionally |send_feedback|, and
+ // conclude the reset prompt flow.
+ void TriggerProfileReset(bool send_feedback);
+
+ // Called in case the user chooses from inside the reset bubble that they do
+ // not want to reset their profile settings. Will conclude the reset prompt
+ // flow without setting off a reset.
+ void SkipProfileReset();
+
+ // Returns whether or not the profile reset prompt flow is currently active,
+ // that is, we have triggered the prompt and are waiting for the user to take
+ // definitive action (and we are not yet performing a reset).
+ bool IsResetPromptFlowActive() const;
+
+ // Called to give notice that the reset bubble has actually been shown.
+ void NotifyDidShowResetBubble();
+
+ // Called to give notice that the conventional, WebUI-based settings reset
+ // dialog has been opened. This will dismiss the menu item in the wrench menu.
+ // This should always be followed by a corresponding call to
+ // NotifyDidCloseWebUIResetDialog().
+ void NotifyDidOpenWebUIResetDialog();
+
+ // Called to give notice that the conventional, WebUI-based settings reset
+ // dialog has been closed, with |performed_reset| indicating whether or not a
+ // reset was requested. This is required so that we can record the appropriate
+ // PromptResult, dismiss the prompt, and conclude the reset prompt flow early
+ // without setting off any resets in the future.
+ void NotifyDidCloseWebUIResetDialog(bool performed_reset);
+
+ base::WeakPtr<AutomaticProfileResetter> AsWeakPtr() {
+ return weak_ptr_factory_.GetWeakPtr();
+ }
+
// Should be called before Activate().
void SetProgramForTesting(const std::string& program);
@@ -65,6 +130,9 @@ class AutomaticProfileResetter : public BrowserContextKeyedService {
void SetTaskRunnerForWaitingForTesting(
const scoped_refptr<base::TaskRunner>& task_runner);
+ // BrowserContextKeyedService:
+ virtual void Shutdown() OVERRIDE;
+
private:
class InputBuilder;
struct EvaluationResults;
@@ -75,7 +143,14 @@ class AutomaticProfileResetter : public BrowserContextKeyedService {
STATE_DISABLED,
STATE_WAITING_ON_DEPENDENCIES,
STATE_READY,
- STATE_WORKING,
+ STATE_EVALUATING_CONDITIONS,
+ // The reset prompt has been triggered; but the reset bubble has not yet
+ // been shown.
+ STATE_HAS_TRIGGERED_PROMPT,
+ // The reset prompt has been triggered; the reset bubble has been shown, and
+ // potentially already dismissed by the user.
+ STATE_HAS_SHOWN_BUBBLE,
+ STATE_PERFORMING_RESET,
STATE_DONE
};
@@ -115,29 +190,63 @@ class AutomaticProfileResetter : public BrowserContextKeyedService {
const std::string& program,
scoped_ptr<base::DictionaryValue> program_input);
- // Called back when EvaluateConditionsOnWorkerPoolThread() completes executing
- // the program with |results|. Finishes the evaluation flow, and, based on the
- // result, will potentially show the reset prompt.
- void FinishEvaluationFlow(scoped_ptr<EvaluationResults> results);
-
// Reports the given metrics through UMA. Virtual, so it can be mocked out in
// tests to verify that the correct value are being reported.
virtual void ReportStatistics(uint32 satisfied_criteria_mask,
uint32 combined_status_mask);
- // BrowserContextKeyedService:
- virtual void Shutdown() OVERRIDE;
+ // Called back when EvaluateConditionsOnWorkerPoolThread completes executing
+ // the program with |results|. Finishes the evaluation flow, and, based on the
+ // result, potentially initiates the reset prompt flow.
+ void FinishEvaluationFlow(scoped_ptr<EvaluationResults> results);
+
+ // Begins the reset prompt flow by triggering the reset prompt, which consists
+ // of two parts: (1.) the profile reset (pop-up) bubble, and (2.) a menu item
+ // in the wrench menu (provided by a GlobalError).
+ // The flow lasts until we receive a clear indication from the user about
+ // whether or not they wish to reset their settings. This indication can come
+ // in a variety of flavors:
+ // * taking definitive action (i.e. selecting either "Reset" or "No, thanks")
+ // in the pop-up reset bubble itself,
+ // * dismissing the bubble, but then selecting the wrench menu item, which
+ // takes them to the WebUI reset dialog in chrome://settings, and then the
+ // user can make their choice there,
+ // * the user going to the WebUI reset dialog by themself.
+ // For the most part, the conclusion of the reset flow coincides with when the
+ // reset prompt is dismissed, with the one exception being that the prompt is
+ // closed as soon as the WebUI reset dialog is opened, we do not wait until
+ // the user actually makes a choice in that dialog.
+ void BeginResetPromptFlow();
+
+ // Called back by the ProfileResetter once resetting the profile settings has
+ // been completed, when requested by the user from inside the reset bubble.
+ // Will dismiss the prompt and conclude the reset prompt flow.
+ void OnProfileSettingsResetCompleted();
+
+ // Reports the result of triggering the prompt through UMA. Virtual, so it can
+ // be mocked out in tests to verify that the correct value is being reported.
+ virtual void ReportPromptResult(PromptResult result);
+
+ // Writes the memento values returned by the evaluation program to disk, and
+ // then destroys |evaluation_results_|.
+ void PersistMementos();
+
+ // Concludes the reset prompt flow.
+ void FinishResetPromptFlow();
Profile* profile_;
State state_;
bool enumeration_of_loaded_modules_ready_;
bool template_url_service_ready_;
+ bool has_already_dismissed_prompt_;
scoped_ptr<InputBuilder> input_builder_;
std::string hash_seed_;
std::string program_;
+ scoped_ptr<EvaluationResults> evaluation_results_;
+
scoped_ptr<AutomaticProfileResetterDelegate> delegate_;
scoped_refptr<base::TaskRunner> task_runner_for_waiting_;
« no previous file with comments | « no previous file | chrome/browser/profile_resetter/automatic_profile_resetter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698