| 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_;
|
|
|
|
|