1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef CHROME_BROWSER_SAFE_BROWSING_CHROME_CLEANER_SETTINGS_RESETTER_WIN_H_
6 #define CHROME_BROWSER_SAFE_BROWSING_CHROME_CLEANER_SETTINGS_RESETTER_WIN_H_
7 
8 #include <memory>
9 #include <vector>
10 
11 #include "base/callback.h"
12 #include "base/macros.h"
13 #include "chrome/browser/safe_browsing/settings_reset_prompt/default_settings_fetcher.h"
14 
15 class Profile;
16 class ProfileResetter;
17 
18 namespace user_prefs {
19 class PrefRegistrySyncable;
20 }  // namespace user_prefs
21 
22 namespace safe_browsing {
23 
24 // Handles settings reset for user's profile to complete a Chrome Cleaner run.
25 // Allows tagging a profile for resetting once a cleanup starts and resetting
26 // settings once a cleanup is completed. Completed cleanup is identified by
27 // annotations in the registry written by the cleaner. Non-static members can
28 // only be called if PostCleanupSettingsResetter::IsEnabled() is true.
29 class PostCleanupSettingsResetter {
30  public:
31   class Delegate {
32    public:
33     Delegate();
34     virtual ~Delegate();
35 
36     virtual void FetchDefaultSettings(
37         DefaultSettingsFetcher::SettingsCallback callback);
38 
39     virtual std::unique_ptr<ProfileResetter> GetProfileResetter(
40         Profile* profile);
41 
42    private:
43     DISALLOW_COPY_AND_ASSIGN(Delegate);
44   };
45 
46   PostCleanupSettingsResetter();
47   virtual ~PostCleanupSettingsResetter();
48 
49   // Returns true if the in-browser cleaner UI is enabled.
50   static bool IsEnabled();
51 
52   // Tags |profile| to have its settings reset once the current cleanup
53   // finishes.
54   void TagForResetting(Profile* profile);
55 
56   // Resets settings for the profiles in |profiles| that are tagged for
57   // resetting if cleanup has completed. Invokes |done_callback| once all
58   // profiles in |profiles| have been reset.
59   void ResetTaggedProfiles(
60       std::vector<Profile*> profiles,
61       base::OnceClosure done_callback,
62       std::unique_ptr<PostCleanupSettingsResetter::Delegate> delegate);
63 
64   // Registers the settings reset pending tracked preference.
65   static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
66 
67  private:
68   // This object doesn't hold any state, so it's safe to delete it even after
69   // an async function is called. For example, it's fine to let the object get
70   // out of scope after invoking ResetTaggedProfiles() and there is no need
71   // to wait for the callback to be run to release it. If you are intending to
72   // change that assumption, please make sure you don't break the contract
73   // where this class is used.
74 
75   DISALLOW_COPY_AND_ASSIGN(PostCleanupSettingsResetter);
76 };
77 
78 }  // namespace safe_browsing
79 
80 #endif  // CHROME_BROWSER_SAFE_BROWSING_CHROME_CLEANER_SETTINGS_RESETTER_WIN_H_
81