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