profile_resetter.h revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
1f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com// Copyright (c) 2013 The Chromium Authors. All rights reserved. 25d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org// Use of this source code is governed by a BSD-style license that can be 35d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org// found in the LICENSE file. 45d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org 55d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org#ifndef CHROME_BROWSER_PROFILE_RESETTER_PROFILE_RESETTER_H_ 65d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org#define CHROME_BROWSER_PROFILE_RESETTER_PROFILE_RESETTER_H_ 75d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org 85d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org#include "base/callback.h" 95d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org#include "base/compiler_specific.h" 105d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org 115d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.orgclass Profile; 125d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org 135d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org// This class allows resetting certain aspects of a profile to default values. 145d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org// It is used in case the profile has been damaged due to malware or bad user 155d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org// settings. 165d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.orgclass ProfileResetter { 175d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org public: 185d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org // Flags indicating what aspects of a profile shall be reset. 195d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org enum Resettable { 205d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org DEFAULT_SEARCH_ENGINE = 1 << 0, 215d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org HOMEPAGE = 1 << 1, 225d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org CONTENT_SETTINGS = 1 << 2, 235d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org COOKIES_AND_SITE_DATA = 1 << 3, 245d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org EXTENSIONS = 1 << 4, 255d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org // Update ALL if you add new values and check whether the type of 265d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org // ResettableFlags needs to be enlarged. 275d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org ALL = DEFAULT_SEARCH_ENGINE | HOMEPAGE | CONTENT_SETTINGS | 28c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org COOKIES_AND_SITE_DATA | EXTENSIONS 29c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org }; 3093a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org 31c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org // How to handle extensions that shall be reset. 3283aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org enum ExtensionHandling { 33d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org DISABLE_EXTENSIONS, 34d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org UNINSTALL_EXTENSIONS 35c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org }; 365d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org 37d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Bit vector for Resettable enum. 38d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org typedef uint32 ResettableFlags; 395d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org 40c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org explicit ProfileResetter(Profile* profile); 41c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org ~ProfileResetter(); 42c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org 43c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org // Resets |resettable_flags| and calls |callback| on the UI thread on 44c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org // completion. If |resettable_flags| contains EXTENSIONS, these are handled 45c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org // according to |extension_handling|. 46c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org void Reset(ResettableFlags resettable_flags, 47c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org ExtensionHandling extension_handling, 4883aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org const base::Closure& callback); 4983aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org 50160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org private: 51160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org // Marks |resettable| as done and triggers |callback_| if all pending jobs 52160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org // have completed. 53160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org void MarkAsDone(Resettable resettable); 5483aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org 5583aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org void ResetDefaultSearchEngine(); 5683aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org void ResetHomepage(); 57e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org void ResetContentSettings(); 58e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org void ResetCookiesAndSiteData(); 59160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org void ResetExtensions(ExtensionHandling extension_handling); 60160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org 6183aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org Profile* profile_; 62e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org 63e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org // Flags of a Resetable indicating which reset operations we are still waiting 64160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org // for. 6583aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org ResettableFlags pending_reset_flags_; 6683aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org 6783aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org // Called on UI thread when reset has been completed. 6883aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org base::Closure callback_; 6983aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org 70c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org DISALLOW_COPY_AND_ASSIGN(ProfileResetter); 71c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org}; 7283aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org 7383aa54905e559090bea7771b83f188762cfcf082ricow@chromium.org#endif // CHROME_BROWSER_PROFILE_RESETTER_PROFILE_RESETTER_H_ 74c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org