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