| // Copyright (c) 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_PROFILE_RESETTER_PROFILE_RESETTER_H_ |
| #define CHROME_BROWSER_PROFILE_RESETTER_PROFILE_RESETTER_H_ |
| |
| #include <utility> |
| #include <vector> |
| |
| #include "base/basictypes.h" |
| #include "base/callback.h" |
| #include "base/files/file_path.h" |
| #include "base/memory/ref_counted.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/memory/weak_ptr.h" |
| #include "base/strings/string16.h" |
| #include "base/threading/non_thread_safe.h" |
| #include "chrome/browser/browsing_data/browsing_data_remover.h" |
| #include "chrome/browser/profile_resetter/brandcoded_default_settings.h" |
| #include "chrome/browser/search_engines/template_url_service.h" |
| |
| class Profile; |
| |
| namespace base { |
| class CancellationFlag; |
| } |
| |
| // This class allows resetting certain aspects of a profile to default values. |
| // It is used in case the profile has been damaged due to malware or bad user |
| // settings. |
| class ProfileResetter : public base::NonThreadSafe, |
| public BrowsingDataRemover::Observer { |
| public: |
| // Flags indicating what aspects of a profile shall be reset. |
| enum Resettable { |
| DEFAULT_SEARCH_ENGINE = 1 << 0, |
| HOMEPAGE = 1 << 1, |
| CONTENT_SETTINGS = 1 << 2, |
| COOKIES_AND_SITE_DATA = 1 << 3, |
| EXTENSIONS = 1 << 4, |
| STARTUP_PAGES = 1 << 5, |
| PINNED_TABS = 1 << 6, |
| SHORTCUTS = 1 << 7, |
| // Update ALL if you add new values and check whether the type of |
| // ResettableFlags needs to be enlarged. |
| ALL = DEFAULT_SEARCH_ENGINE | HOMEPAGE | CONTENT_SETTINGS | |
| COOKIES_AND_SITE_DATA | EXTENSIONS | STARTUP_PAGES | PINNED_TABS | |
| SHORTCUTS |
| }; |
| |
| // Bit vector for Resettable enum. |
| typedef uint32 ResettableFlags; |
| |
| COMPILE_ASSERT(sizeof(ResettableFlags) == sizeof(Resettable), |
| type_ResettableFlags_doesnt_match_Resettable); |
| |
| explicit ProfileResetter(Profile* profile); |
| virtual ~ProfileResetter(); |
| |
| // Resets |resettable_flags| and calls |callback| on the UI thread on |
| // completion. |default_settings| allows the caller to specify some default |
| // settings. |default_settings| shouldn't be NULL. |accepted_send_feedback| |
| // identifies whether the user accepted to send feedback or not. |
| void Reset(ResettableFlags resettable_flags, |
| scoped_ptr<BrandcodedDefaultSettings> master_settings, |
| bool accepted_send_feedback, |
| const base::Closure& callback); |
| |
| bool IsActive() const; |
| |
| private: |
| // Marks |resettable| as done and triggers |callback_| if all pending jobs |
| // have completed. |
| void MarkAsDone(Resettable resettable); |
| |
| void ResetDefaultSearchEngine(); |
| void ResetHomepage(); |
| void ResetContentSettings(); |
| void ResetCookiesAndSiteData(); |
| void ResetExtensions(); |
| void ResetStartupPages(); |
| void ResetPinnedTabs(); |
| void ResetShortcuts(); |
| |
| // BrowsingDataRemover::Observer: |
| virtual void OnBrowsingDataRemoverDone() OVERRIDE; |
| |
| // Callback for when TemplateURLService has loaded. |
| void OnTemplateURLServiceLoaded(); |
| |
| Profile* const profile_; |
| scoped_ptr<BrandcodedDefaultSettings> master_settings_; |
| TemplateURLService* template_url_service_; |
| |
| // Flags of a Resetable indicating which reset operations we are still waiting |
| // for. |
| ResettableFlags pending_reset_flags_; |
| |
| // Called on UI thread when reset has been completed. |
| base::Closure callback_; |
| |
| // If non-null it means removal is in progress. BrowsingDataRemover takes care |
| // of deleting itself when done. |
| BrowsingDataRemover* cookies_remover_; |
| |
| scoped_ptr<TemplateURLService::Subscription> template_url_service_sub_; |
| |
| base::WeakPtrFactory<ProfileResetter> weak_ptr_factory_; |
| |
| DISALLOW_COPY_AND_ASSIGN(ProfileResetter); |
| }; |
| |
| // Path to shortcut and command line arguments. |
| typedef std::pair<base::FilePath, base::string16> ShortcutCommand; |
| |
| typedef base::RefCountedData<base::CancellationFlag> SharedCancellationFlag; |
| |
| // On Windows returns all the shortcuts which launch Chrome and corresponding |
| // arguments. |cancel| can be passed to abort the operation earlier. |
| // Call on FILE thread. |
| std::vector<ShortcutCommand> GetChromeLaunchShortcuts( |
| const scoped_refptr<SharedCancellationFlag>& cancel); |
| |
| #endif // CHROME_BROWSER_PROFILE_RESETTER_PROFILE_RESETTER_H_ |