OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_REMOVER_IMPL_H_ | 5 #ifndef CONTENT_BROWSER_BROWSING_DATA_BROWSING_DATA_REMOVER_IMPL_H_ |
6 #define CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_REMOVER_IMPL_H_ | 6 #define CONTENT_BROWSER_BROWSING_DATA_BROWSING_DATA_REMOVER_IMPL_H_ |
7 | 7 |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <queue> | 10 #include <queue> |
11 #include <set> | 11 #include <set> |
12 | 12 |
13 #include "base/gtest_prod_util.h" | 13 #include "base/gtest_prod_util.h" |
14 #include "base/macros.h" | 14 #include "base/macros.h" |
| 15 #include "base/memory/weak_ptr.h" |
15 #include "base/observer_list.h" | 16 #include "base/observer_list.h" |
| 17 #include "base/supports_user_data.h" |
16 #include "base/synchronization/waitable_event_watcher.h" | 18 #include "base/synchronization/waitable_event_watcher.h" |
17 #include "base/time/time.h" | 19 #include "base/time/time.h" |
18 #include "build/build_config.h" | 20 #include "build/build_config.h" |
19 #include "chrome/browser/browsing_data/browsing_data_remover.h" | 21 #include "content/public/browser/browsing_data_remover.h" |
20 #include "chrome/common/features.h" | |
21 #include "ppapi/features/features.h" | |
22 #include "storage/common/quota/quota_types.h" | 22 #include "storage/common/quota/quota_types.h" |
23 #include "url/gurl.h" | 23 #include "url/gurl.h" |
24 | 24 |
25 class BrowsingDataRemoverFactory; | 25 class BrowsingDataRemoverFactory; |
26 | 26 |
27 namespace content { | 27 namespace content { |
| 28 |
28 class BrowserContext; | 29 class BrowserContext; |
29 class BrowsingDataFilterBuilder; | 30 class BrowsingDataFilterBuilder; |
30 class StoragePartition; | 31 class StoragePartition; |
31 } | |
32 | 32 |
33 class BrowsingDataRemoverImpl : public BrowsingDataRemover { | 33 class CONTENT_EXPORT BrowsingDataRemoverImpl |
| 34 : public BrowsingDataRemover, |
| 35 public base::SupportsUserData::Data { |
34 public: | 36 public: |
35 // Used to track the deletion of a single data storage backend. | 37 // Used to track the deletion of a single data storage backend. |
36 class SubTask { | 38 class SubTask { |
37 public: | 39 public: |
38 // Creates a SubTask that calls |forward_callback| when completed. | 40 // Creates a SubTask that calls |forward_callback| when completed. |
39 // |forward_callback| is only kept as a reference and must outlive SubTask. | 41 // |forward_callback| is only kept as a reference and must outlive SubTask. |
40 explicit SubTask(const base::Closure& forward_callback); | 42 explicit SubTask(const base::Closure& forward_callback); |
41 ~SubTask(); | 43 ~SubTask(); |
42 | 44 |
43 // Indicate that the task is in progress and we're waiting. | 45 // Indicate that the task is in progress and we're waiting. |
(...skipping 12 matching lines...) Expand all Loading... |
56 bool is_pending_; | 58 bool is_pending_; |
57 const base::Closure& forward_callback_; | 59 const base::Closure& forward_callback_; |
58 base::WeakPtrFactory<SubTask> weak_ptr_factory_; | 60 base::WeakPtrFactory<SubTask> weak_ptr_factory_; |
59 }; | 61 }; |
60 | 62 |
61 // Is the BrowsingDataRemoverImpl currently in the process of removing data? | 63 // Is the BrowsingDataRemoverImpl currently in the process of removing data? |
62 bool is_removing() { return is_removing_; } | 64 bool is_removing() { return is_removing_; } |
63 | 65 |
64 // BrowsingDataRemover implementation: | 66 // BrowsingDataRemover implementation: |
65 void SetEmbedderDelegate( | 67 void SetEmbedderDelegate( |
66 std::unique_ptr<BrowsingDataRemoverDelegate> embedder_delegate) override; | 68 BrowsingDataRemoverDelegate* embedder_delegate) override; |
67 BrowsingDataRemoverDelegate* GetEmbedderDelegate() const override; | 69 BrowsingDataRemoverDelegate* GetEmbedderDelegate() const override; |
68 bool DoesOriginMatchMask( | 70 bool DoesOriginMatchMask( |
69 int origin_type_mask, | 71 int origin_type_mask, |
70 const GURL& origin, | 72 const GURL& origin, |
71 storage::SpecialStoragePolicy* special_storage_policy) const override; | 73 storage::SpecialStoragePolicy* special_storage_policy) const override; |
72 void Remove(const base::Time& delete_begin, | 74 void Remove(const base::Time& delete_begin, |
73 const base::Time& delete_end, | 75 const base::Time& delete_end, |
74 int remove_mask, | 76 int remove_mask, |
75 int origin_type_mask) override; | 77 int origin_type_mask) override; |
76 void RemoveAndReply(const base::Time& delete_begin, | 78 void RemoveAndReply(const base::Time& delete_begin, |
77 const base::Time& delete_end, | 79 const base::Time& delete_end, |
78 int remove_mask, | 80 int remove_mask, |
79 int origin_type_mask, | 81 int origin_type_mask, |
80 Observer* observer) override; | 82 Observer* observer) override; |
81 void RemoveWithFilter( | 83 void RemoveWithFilter( |
82 const base::Time& delete_begin, | 84 const base::Time& delete_begin, |
83 const base::Time& delete_end, | 85 const base::Time& delete_end, |
84 int remove_mask, | 86 int remove_mask, |
85 int origin_type_mask, | 87 int origin_type_mask, |
86 std::unique_ptr<content::BrowsingDataFilterBuilder> filter_builder) | 88 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder) override; |
87 override; | |
88 void RemoveWithFilterAndReply( | 89 void RemoveWithFilterAndReply( |
89 const base::Time& delete_begin, | 90 const base::Time& delete_begin, |
90 const base::Time& delete_end, | 91 const base::Time& delete_end, |
91 int remove_mask, | 92 int remove_mask, |
92 int origin_type_mask, | 93 int origin_type_mask, |
93 std::unique_ptr<content::BrowsingDataFilterBuilder> filter_builder, | 94 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, |
94 Observer* observer) override; | 95 Observer* observer) override; |
95 | 96 |
96 void AddObserver(Observer* observer) override; | 97 void AddObserver(Observer* observer) override; |
97 void RemoveObserver(Observer* observer) override; | 98 void RemoveObserver(Observer* observer) override; |
98 | 99 |
99 void SetWouldCompleteCallbackForTesting( | 100 void SetWouldCompleteCallbackForTesting( |
100 const base::Callback<void(const base::Closure& continue_to_completion)>& | 101 const base::Callback<void(const base::Closure& continue_to_completion)>& |
101 callback) override; | 102 callback) override; |
102 | 103 |
103 const base::Time& GetLastUsedBeginTime() override; | 104 const base::Time& GetLastUsedBeginTime() override; |
104 const base::Time& GetLastUsedEndTime() override; | 105 const base::Time& GetLastUsedEndTime() override; |
105 int GetLastUsedRemovalMask() override; | 106 int GetLastUsedRemovalMask() override; |
106 int GetLastUsedOriginTypeMask() override; | 107 int GetLastUsedOriginTypeMask() override; |
107 | 108 |
108 // Used for testing. | 109 // Used for testing. |
109 void OverrideStoragePartitionForTesting( | 110 void OverrideStoragePartitionForTesting(StoragePartition* storage_partition); |
110 content::StoragePartition* storage_partition); | |
111 | 111 |
112 protected: | 112 protected: |
113 // Use BrowsingDataRemoverFactory::GetForBrowserContext to get an instance of | 113 // Use BrowsingDataRemoverFactory::GetForBrowserContext to get an instance of |
114 // this class. The constructor is protected so that the class is mockable. | 114 // this class. The constructor is protected so that the class is mockable. |
115 explicit BrowsingDataRemoverImpl(content::BrowserContext* browser_context); | 115 explicit BrowsingDataRemoverImpl(BrowserContext* browser_context); |
116 ~BrowsingDataRemoverImpl() override; | 116 ~BrowsingDataRemoverImpl() override; |
117 | 117 |
118 // A common reduction of all public Remove[WithFilter][AndReply] methods. | 118 // A common reduction of all public Remove[WithFilter][AndReply] methods. |
119 virtual void RemoveInternal( | 119 virtual void RemoveInternal( |
120 const base::Time& delete_begin, | 120 const base::Time& delete_begin, |
121 const base::Time& delete_end, | 121 const base::Time& delete_end, |
122 int remove_mask, | 122 int remove_mask, |
123 int origin_type_mask, | 123 int origin_type_mask, |
124 std::unique_ptr<content::BrowsingDataFilterBuilder> filter_builder, | 124 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, |
125 Observer* observer); | 125 Observer* observer); |
126 | 126 |
127 private: | 127 private: |
128 // Testing the private RemovalTask. | 128 // Testing the private RemovalTask. |
129 FRIEND_TEST_ALL_PREFIXES(BrowsingDataRemoverImplTest, MultipleTasks); | 129 FRIEND_TEST_ALL_PREFIXES(BrowsingDataRemoverImplTest, MultipleTasks); |
130 | 130 |
131 friend class BrowsingDataRemoverFactory; | 131 friend class BrowserContext; |
132 | 132 |
133 // Represents a single removal task. Contains all parameters needed to execute | 133 // Represents a single removal task. Contains all parameters needed to execute |
134 // it and a pointer to the observer that added it. | 134 // it and a pointer to the observer that added it. CONTENT_EXPORTed to be |
135 struct RemovalTask { | 135 // visible in tests. |
136 RemovalTask( | 136 struct CONTENT_EXPORT RemovalTask { |
137 const base::Time& delete_begin, | 137 RemovalTask(const base::Time& delete_begin, |
138 const base::Time& delete_end, | 138 const base::Time& delete_end, |
139 int remove_mask, | 139 int remove_mask, |
140 int origin_type_mask, | 140 int origin_type_mask, |
141 std::unique_ptr<content::BrowsingDataFilterBuilder> filter_builder, | 141 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder, |
142 Observer* observer); | 142 Observer* observer); |
143 ~RemovalTask(); | 143 ~RemovalTask(); |
144 | 144 |
145 base::Time delete_begin; | 145 base::Time delete_begin; |
146 base::Time delete_end; | 146 base::Time delete_end; |
147 int remove_mask; | 147 int remove_mask; |
148 int origin_type_mask; | 148 int origin_type_mask; |
149 std::unique_ptr<content::BrowsingDataFilterBuilder> filter_builder; | 149 std::unique_ptr<BrowsingDataFilterBuilder> filter_builder; |
150 Observer* observer; | 150 Observer* observer; |
151 }; | 151 }; |
152 | 152 |
153 void Shutdown() override; | |
154 | |
155 // Setter for |is_removing_|; DCHECKs that we can only start removing if we're | 153 // Setter for |is_removing_|; DCHECKs that we can only start removing if we're |
156 // not already removing, and vice-versa. | 154 // not already removing, and vice-versa. |
157 void SetRemoving(bool is_removing); | 155 void SetRemoving(bool is_removing); |
158 | 156 |
159 // Executes the next removal task. Called after the previous task was finished | 157 // Executes the next removal task. Called after the previous task was finished |
160 // or directly from Remove() if the task queue was empty. | 158 // or directly from Remove() if the task queue was empty. |
161 void RunNextTask(); | 159 void RunNextTask(); |
162 | 160 |
163 // Removes the specified items related to browsing for a specific host. If the | 161 // Removes the specified items related to browsing for a specific host. If the |
164 // provided |remove_url| is empty, data is removed for all origins; otherwise, | 162 // provided |remove_url| is empty, data is removed for all origins; otherwise, |
165 // it is restricted by the origin filter origin (where implemented yet). The | 163 // it is restricted by the origin filter origin (where implemented yet). The |
166 // |origin_type_mask| parameter defines the set of origins from which data | 164 // |origin_type_mask| parameter defines the set of origins from which data |
167 // should be removed (protected, unprotected, or both). | 165 // should be removed (protected, unprotected, or both). |
168 // TODO(ttr314): Remove "(where implemented yet)" constraint above once | 166 // TODO(ttr314): Remove "(where implemented yet)" constraint above once |
169 // crbug.com/113621 is done. | 167 // crbug.com/113621 is done. |
170 // TODO(crbug.com/589586): Support all backends w/ origin filter. | 168 // TODO(crbug.com/589586): Support all backends w/ origin filter. |
171 void RemoveImpl(const base::Time& delete_begin, | 169 void RemoveImpl(const base::Time& delete_begin, |
172 const base::Time& delete_end, | 170 const base::Time& delete_end, |
173 int remove_mask, | 171 int remove_mask, |
174 const content::BrowsingDataFilterBuilder& filter_builder, | 172 const BrowsingDataFilterBuilder& filter_builder, |
175 int origin_type_mask); | 173 int origin_type_mask); |
176 | 174 |
177 // Notifies observers and transitions to the idle state. | 175 // Notifies observers and transitions to the idle state. |
178 void Notify(); | 176 void Notify(); |
179 | 177 |
180 // Checks if we are all done, and if so, calls Notify(). | 178 // Checks if we are all done, and if so, calls Notify(). |
181 void NotifyIfDone(); | 179 void NotifyIfDone(); |
182 | 180 |
183 // Returns true if we're all done. | 181 // Returns true if we're all done. |
184 bool AllDone(); | 182 bool AllDone(); |
185 | 183 |
186 // Like GetWeakPtr(), but returns a weak pointer to BrowsingDataRemoverImpl | 184 // Like GetWeakPtr(), but returns a weak pointer to BrowsingDataRemoverImpl |
187 // for internal purposes. | 185 // for internal purposes. |
188 base::WeakPtr<BrowsingDataRemoverImpl> GetWeakPtr(); | 186 base::WeakPtr<BrowsingDataRemoverImpl> GetWeakPtr(); |
189 | 187 |
190 // The browser context we're to remove from. | 188 // The browser context we're to remove from. |
191 content::BrowserContext* browser_context_; | 189 BrowserContext* browser_context_; |
192 | 190 |
193 // A delegate to delete the embedder-specific data. | 191 // A delegate to delete the embedder-specific data. Owned by the embedder. |
194 std::unique_ptr<BrowsingDataRemoverDelegate> embedder_delegate_; | 192 BrowsingDataRemoverDelegate* embedder_delegate_; |
195 | 193 |
196 // Start time to delete from. | 194 // Start time to delete from. |
197 base::Time delete_begin_; | 195 base::Time delete_begin_; |
198 | 196 |
199 // End time to delete to. | 197 // End time to delete to. |
200 base::Time delete_end_; | 198 base::Time delete_end_; |
201 | 199 |
202 // The removal mask for the current removal operation. | 200 // The removal mask for the current removal operation. |
203 int remove_mask_ = 0; | 201 int remove_mask_ = 0; |
204 | 202 |
(...skipping 21 matching lines...) Expand all Loading... |
226 SubTask clear_embedder_data_; | 224 SubTask clear_embedder_data_; |
227 SubTask clear_cache_; | 225 SubTask clear_cache_; |
228 SubTask clear_channel_ids_; | 226 SubTask clear_channel_ids_; |
229 SubTask clear_http_auth_cache_; | 227 SubTask clear_http_auth_cache_; |
230 SubTask clear_storage_partition_data_; | 228 SubTask clear_storage_partition_data_; |
231 | 229 |
232 // Observers of the global state and individual tasks. | 230 // Observers of the global state and individual tasks. |
233 base::ObserverList<Observer, true> observer_list_; | 231 base::ObserverList<Observer, true> observer_list_; |
234 | 232 |
235 // We do not own this. | 233 // We do not own this. |
236 content::StoragePartition* storage_partition_for_testing_; | 234 StoragePartition* storage_partition_for_testing_; |
237 | 235 |
238 base::WeakPtrFactory<BrowsingDataRemoverImpl> weak_ptr_factory_; | 236 base::WeakPtrFactory<BrowsingDataRemoverImpl> weak_ptr_factory_; |
239 | 237 |
240 DISALLOW_COPY_AND_ASSIGN(BrowsingDataRemoverImpl); | 238 DISALLOW_COPY_AND_ASSIGN(BrowsingDataRemoverImpl); |
241 }; | 239 }; |
242 | 240 |
243 #endif // CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_REMOVER_IMPL_H_ | 241 } // namespace content |
| 242 |
| 243 #endif // CONTENT_BROWSER_BROWSING_DATA_BROWSING_DATA_REMOVER_IMPL_H_ |
OLD | NEW |