// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_UI_WEBUI_SETTINGS_RESET_SETTINGS_HANDLER_H_ #define CHROME_BROWSER_UI_WEBUI_SETTINGS_RESET_SETTINGS_HANDLER_H_ #include #include #include "base/compiler_specific.h" #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "build/build_config.h" #include "chrome/browser/profile_resetter/profile_reset_report.pb.h" #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h" namespace base { class ListValue; } // namespace base namespace content { class WebUIDataSource; } class BrandcodeConfigFetcher; class Profile; class ProfileResetter; class ResettableSettingsSnapshot; namespace settings { // Handler for // 1) 'Reset Profile Settings' dialog // 2) 'Powerwash' dialog (ChromeOS only) class ResetSettingsHandler : public SettingsPageUIHandler { public: // Hash used by the Chrome Cleanup Tool when launching chrome with the reset // profile settings URL. static const char kCctResetSettingsHash[]; ~ResetSettingsHandler() override; static ResetSettingsHandler* Create( content::WebUIDataSource* html_source, Profile* profile); // WebUIMessageHandler implementation. void RegisterMessages() override; void OnJavascriptAllowed() override {} void OnJavascriptDisallowed() override; protected: explicit ResetSettingsHandler(Profile* profile); // Overriden in tests to substitute with a test version of ProfileResetter. virtual ProfileResetter* GetResetter(); // Javascript callback to start clearing data. void HandleResetProfileSettings(const base::ListValue* args); private: // Retrieves the settings that will be reported, called from Javascript. void HandleGetReportedSettings(const base::ListValue* args); // Called once the settings that will be reported have been retrieved. void OnGetReportedSettingsDone(std::string callback_id); // Called when the reset profile dialog is shown. void OnShowResetProfileDialog(const base::ListValue* args); // Called when the reset profile dialog is hidden. void OnHideResetProfileDialog(const base::ListValue* args); // Called when the reset profile banner is shown. void OnHideResetProfileBanner(const base::ListValue* args); // Retrieve the triggered reset tool name, called from Javascript. void HandleGetTriggeredResetToolName(const base::ListValue* args); // Called when BrandcodeConfigFetcher completed fetching settings. void OnSettingsFetched(); // Resets profile settings to default values. |send_settings| is true if user // gave their consent to upload broken settings to Google for analysis. void ResetProfile( const std::string& callback_id, bool send_settings, reset_report::ChromeResetReport::ResetRequestOrigin request_origin); // Closes the dialog once all requested settings has been reset. void OnResetProfileSettingsDone( std::string callback_id, bool send_feedback, reset_report::ChromeResetReport::ResetRequestOrigin request_origin); #if defined(OS_CHROMEOS) // Will be called when powerwash dialog is shown. void OnShowPowerwashDialog(const base::ListValue* args); #endif // defined(OS_CHROMEOS) Profile* const profile_; std::unique_ptr resetter_; std::unique_ptr config_fetcher_; // Snapshot of settings before profile was reseted. std::unique_ptr setting_snapshot_; // Contains Chrome brand code; empty for organic Chrome. std::string brandcode_; // Used to cancel callbacks when JavaScript becomes disallowed. base::WeakPtrFactory callback_weak_ptr_factory_{this}; DISALLOW_COPY_AND_ASSIGN(ResetSettingsHandler); }; } // namespace settings #endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_RESET_SETTINGS_HANDLER_H_