1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#ifndef CHROME_BROWSER_PROFILE_RESETTER_PROFILE_RESETTER_H_ 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define CHROME_BROWSER_PROFILE_RESETTER_PROFILE_RESETTER_H_ 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <utility> 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <vector> 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 11b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "base/basictypes.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/callback.h" 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/files/file_path.h" 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/ref_counted.h" 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/weak_ptr.h" 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/strings/string16.h" 18b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "base/threading/non_thread_safe.h" 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/browsing_data/browsing_data_remover.h" 207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/profile_resetter/brandcoded_default_settings.h" 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url_service.h" 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class Profile; 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace base { 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class CancellationFlag; 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// This class allows resetting certain aspects of a profile to default values. 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// It is used in case the profile has been damaged due to malware or bad user 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// settings. 32868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class ProfileResetter : public base::NonThreadSafe, 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public BrowsingDataRemover::Observer { 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Flags indicating what aspects of a profile shall be reset. 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) enum Resettable { 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DEFAULT_SEARCH_ENGINE = 1 << 0, 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) HOMEPAGE = 1 << 1, 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS = 1 << 2, 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) COOKIES_AND_SITE_DATA = 1 << 3, 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXTENSIONS = 1 << 4, 427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) STARTUP_PAGES = 1 << 5, 437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PINNED_TABS = 1 << 6, 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SHORTCUTS = 1 << 7, 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Update ALL if you add new values and check whether the type of 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // ResettableFlags needs to be enlarged. 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ALL = DEFAULT_SEARCH_ENGINE | HOMEPAGE | CONTENT_SETTINGS | 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) COOKIES_AND_SITE_DATA | EXTENSIONS | STARTUP_PAGES | PINNED_TABS | 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SHORTCUTS 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Bit vector for Resettable enum. 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typedef uint32 ResettableFlags; 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 55b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) COMPILE_ASSERT(sizeof(ResettableFlags) == sizeof(Resettable), 56b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) type_ResettableFlags_doesnt_match_Resettable); 57b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) explicit ProfileResetter(Profile* profile); 59868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual ~ProfileResetter(); 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Resets |resettable_flags| and calls |callback| on the UI thread on 627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // completion. |default_settings| allows the caller to specify some default 636d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // settings. |default_settings| shouldn't be NULL. |accepted_send_feedback| 646d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // identifies whether the user accepted to send feedback or not. 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void Reset(ResettableFlags resettable_flags, 667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch scoped_ptr<BrandcodedDefaultSettings> master_settings, 676d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) bool accepted_send_feedback, 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::Closure& callback); 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool IsActive() const; 7190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Marks |resettable| as done and triggers |callback_| if all pending jobs 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // have completed. 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void MarkAsDone(Resettable resettable); 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ResetDefaultSearchEngine(); 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ResetHomepage(); 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ResetContentSettings(); 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ResetCookiesAndSiteData(); 817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void ResetExtensions(); 827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void ResetStartupPages(); 837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void ResetPinnedTabs(); 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void ResetShortcuts(); 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // BrowsingDataRemover::Observer: 87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void OnBrowsingDataRemoverDone() OVERRIDE; 88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Callback for when TemplateURLService has loaded. 904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void OnTemplateURLServiceLoaded(); 914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Profile* const profile_; 937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch scoped_ptr<BrandcodedDefaultSettings> master_settings_; 94868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TemplateURLService* template_url_service_; 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Flags of a Resetable indicating which reset operations we are still waiting 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // for. 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ResettableFlags pending_reset_flags_; 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Called on UI thread when reset has been completed. 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Closure callback_; 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 103eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // If non-null it means removal is in progress. BrowsingDataRemover takes care 104eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // of deleting itself when done. 105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch BrowsingDataRemover* cookies_remover_; 106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<TemplateURLService::Subscription> template_url_service_sub_; 1084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::WeakPtrFactory<ProfileResetter> weak_ptr_factory_; 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ProfileResetter); 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Path to shortcut and command line arguments. 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)typedef std::pair<base::FilePath, base::string16> ShortcutCommand; 1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)typedef base::RefCountedData<base::CancellationFlag> SharedCancellationFlag; 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// On Windows returns all the shortcuts which launch Chrome and corresponding 1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// arguments. |cancel| can be passed to abort the operation earlier. 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Call on FILE thread. 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)std::vector<ShortcutCommand> GetChromeLaunchShortcuts( 1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const scoped_refptr<SharedCancellationFlag>& cancel); 1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif // CHROME_BROWSER_PROFILE_RESETTER_PROFILE_RESETTER_H_ 126