blob: 9d9e6eeeffcffa6f1fcede95e90d55b1e1407bc8 [file] [log] [blame]
[email protected]4c3a23582012-08-18 08:54:341// 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
3// found in the LICENSE file.
4
5#ifndef CONTENT_BROWSER_STORAGE_PARTITION_IMPL_H_
6#define CONTENT_BROWSER_STORAGE_PARTITION_IMPL_H_
7
avib7348942015-12-25 20:57:108#include <stdint.h>
9
[email protected]4c3a23582012-08-18 08:54:3410#include "base/compiler_specific.h"
[email protected]57999812013-02-24 05:40:5211#include "base/files/file_path.h"
thestiga0e18cd2015-09-25 04:58:3612#include "base/gtest_prod_util.h"
avib7348942015-12-25 20:57:1013#include "base/macros.h"
[email protected]4c3a23582012-08-18 08:54:3414#include "base/memory/ref_counted.h"
15#include "content/browser/appcache/chrome_appcache_service.h"
jkarlin901d507a2015-04-20 19:23:1816#include "content/browser/background_sync/background_sync_context_impl.h"
jsbell279efb42015-03-31 17:02:4617#include "content/browser/cache_storage/cache_storage_context_impl.h"
[email protected]5f2aa722013-08-07 16:59:4118#include "content/browser/dom_storage/dom_storage_context_wrapper.h"
wjmacleancaa7d6d2014-11-12 16:42:1119#include "content/browser/host_zoom_level_context.h"
[email protected]c4d281662013-03-31 00:35:0820#include "content/browser/indexed_db/indexed_db_context_impl.h"
[email protected]d3220662013-07-01 21:21:4621#include "content/browser/media/webrtc_identity_store.h"
mek59114f62015-01-27 01:13:5222#include "content/browser/navigator_connect/navigator_connect_context_impl.h"
peter7ac37dd2015-03-18 14:57:3023#include "content/browser/notifications/platform_notification_context_impl.h"
[email protected]1f1e8562013-11-13 05:05:1624#include "content/browser/service_worker/service_worker_context_wrapper.h"
[email protected]877e2612013-04-05 05:58:1825#include "content/common/content_export.h"
[email protected]4c3a23582012-08-18 08:54:3426#include "content/public/browser/storage_partition.h"
pilgrime92c5fcd2014-09-10 23:31:2327#include "storage/browser/quota/special_storage_policy.h"
[email protected]4c3a23582012-08-18 08:54:3428
29namespace content {
30
31class StoragePartitionImpl : public StoragePartition {
32 public:
dchengc2282aa2014-10-21 12:07:5833 CONTENT_EXPORT ~StoragePartitionImpl() override;
[email protected]4c3a23582012-08-18 08:54:3434
[email protected]88562b512013-11-06 21:10:4435 // Quota managed data uses a different bitmask for types than
36 // StoragePartition uses. This method generates that mask.
avib7348942015-12-25 20:57:1037 CONTENT_EXPORT static int GenerateQuotaClientMask(uint32_t remove_mask);
[email protected]88562b512013-11-06 21:10:4438
39 CONTENT_EXPORT void OverrideQuotaManagerForTesting(
[email protected]cd501a72014-08-22 19:58:3140 storage::QuotaManager* quota_manager);
[email protected]88562b512013-11-06 21:10:4441 CONTENT_EXPORT void OverrideSpecialStoragePolicyForTesting(
[email protected]cd501a72014-08-22 19:58:3142 storage::SpecialStoragePolicy* special_storage_policy);
[email protected]88562b512013-11-06 21:10:4443
[email protected]4c3a23582012-08-18 08:54:3444 // StoragePartition interface.
dchengc2282aa2014-10-21 12:07:5845 base::FilePath GetPath() override;
46 net::URLRequestContextGetter* GetURLRequestContext() override;
47 net::URLRequestContextGetter* GetMediaURLRequestContext() override;
48 storage::QuotaManager* GetQuotaManager() override;
49 ChromeAppCacheService* GetAppCacheService() override;
50 storage::FileSystemContext* GetFileSystemContext() override;
51 storage::DatabaseTracker* GetDatabaseTracker() override;
52 DOMStorageContextWrapper* GetDOMStorageContext() override;
53 IndexedDBContextImpl* GetIndexedDBContext() override;
jsbelle1fe9692015-08-22 01:02:4254 CacheStorageContextImpl* GetCacheStorageContext() override;
dchengc2282aa2014-10-21 12:07:5855 ServiceWorkerContextWrapper* GetServiceWorkerContext() override;
mek0c55c7f62014-10-23 22:06:0956 GeofencingManager* GetGeofencingManager() override;
wjmacleancaa7d6d2014-11-12 16:42:1157 HostZoomMap* GetHostZoomMap() override;
58 HostZoomLevelContext* GetHostZoomLevelContext() override;
59 ZoomLevelDelegate* GetZoomLevelDelegate() override;
mek59114f62015-01-27 01:13:5260 NavigatorConnectContextImpl* GetNavigatorConnectContext() override;
peter7ac37dd2015-03-18 14:57:3061 PlatformNotificationContextImpl* GetPlatformNotificationContext() override;
jkarlin4e6b342d2015-07-31 11:27:5762 BackgroundSyncContextImpl* GetBackgroundSyncContext() override;
[email protected]33ad6ce92013-08-27 14:39:0863
avib7348942015-12-25 20:57:1064 void ClearDataForOrigin(uint32_t remove_mask,
65 uint32_t quota_storage_remove_mask,
dchengc2282aa2014-10-21 12:07:5866 const GURL& storage_origin,
67 net::URLRequestContextGetter* request_context_getter,
68 const base::Closure& callback) override;
avib7348942015-12-25 20:57:1069 void ClearData(uint32_t remove_mask,
70 uint32_t quota_storage_remove_mask,
dchengc2282aa2014-10-21 12:07:5871 const GURL& storage_origin,
72 const OriginMatcherFunction& origin_matcher,
73 const base::Time begin,
74 const base::Time end,
75 const base::Closure& callback) override;
[email protected]4c3a23582012-08-18 08:54:3476
cmumford28d334c2015-05-07 22:18:4477 void Flush() override;
78
[email protected]d3220662013-07-01 21:21:4679 WebRTCIdentityStore* GetWebRTCIdentityStore();
80
mlamouri6cdca912015-01-15 17:04:0881 // Can return nullptr while |this| is being destroyed.
82 BrowserContext* browser_context() const;
83
[email protected]fdf3e13c2013-07-31 06:23:4684 struct DataDeletionHelper;
85 struct QuotaManagedDataDeletionHelper;
86
[email protected]4c3a23582012-08-18 08:54:3487 private:
jkarlinfe08f132015-11-06 13:18:4188 friend class BackgroundSyncManagerTest;
[email protected]10eb28162012-09-18 03:04:0989 friend class StoragePartitionImplMap;
[email protected]877e2612013-04-05 05:58:1890 FRIEND_TEST_ALL_PREFIXES(StoragePartitionShaderClearTest, ClearShaderCache);
[email protected]88562b512013-11-06 21:10:4491 FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
92 RemoveQuotaManagedDataForeverBoth);
93 FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
94 RemoveQuotaManagedDataForeverOnlyTemporary);
95 FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
96 RemoveQuotaManagedDataForeverOnlyPersistent);
97 FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
98 RemoveQuotaManagedDataForeverNeither);
99 FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
100 RemoveQuotaManagedDataForeverSpecificOrigin);
101 FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
102 RemoveQuotaManagedDataForLastHour);
103 FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
104 RemoveQuotaManagedDataForLastWeek);
105 FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
106 RemoveQuotaManagedUnprotectedOrigins);
107 FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
108 RemoveQuotaManagedProtectedSpecificOrigin);
109 FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
110 RemoveQuotaManagedProtectedOrigins);
111 FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
112 RemoveQuotaManagedIgnoreDevTools);
113 FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest, RemoveCookieForever);
114 FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest, RemoveCookieLastHour);
115 FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
116 RemoveUnprotectedLocalStorageForever);
117 FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
118 RemoveProtectedLocalStorageForever);
119 FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
120 RemoveLocalStorageForLastWeek);
[email protected]10eb28162012-09-18 03:04:09121
[email protected]b471cf42012-11-13 09:11:30122 // The |partition_path| is the absolute path to the root of this
123 // StoragePartition's on-disk storage.
[email protected]1bc28312012-11-08 08:31:53124 //
[email protected]33ad6ce92013-08-27 14:39:08125 // If |in_memory| is true, the |partition_path| is (ab)used as a way of
[email protected]b471cf42012-11-13 09:11:30126 // distinguishing different in-memory partitions, but nothing is persisted
127 // on to disk.
[email protected]33ad6ce92013-08-27 14:39:08128 static StoragePartitionImpl* Create(BrowserContext* context,
129 bool in_memory,
130 const base::FilePath& profile_path);
[email protected]1bc28312012-11-08 08:31:53131
[email protected]877e2612013-04-05 05:58:18132 CONTENT_EXPORT StoragePartitionImpl(
mlamouri6cdca912015-01-15 17:04:08133 BrowserContext* browser_context,
[email protected]2dec8ec2013-02-07 19:20:34134 const base::FilePath& partition_path,
[email protected]cd501a72014-08-22 19:58:31135 storage::QuotaManager* quota_manager,
[email protected]10eb28162012-09-18 03:04:09136 ChromeAppCacheService* appcache_service,
[email protected]cd501a72014-08-22 19:58:31137 storage::FileSystemContext* filesystem_context,
138 storage::DatabaseTracker* database_tracker,
[email protected]5f2aa722013-08-07 16:59:41139 DOMStorageContextWrapper* dom_storage_context,
[email protected]d3220662013-07-01 21:21:46140 IndexedDBContextImpl* indexed_db_context,
jsbellabadb9b2015-03-23 21:03:44141 CacheStorageContextImpl* cache_storage_context,
[email protected]1f1e8562013-11-13 05:05:16142 ServiceWorkerContextWrapper* service_worker_context,
[email protected]88562b512013-11-06 21:10:44143 WebRTCIdentityStore* webrtc_identity_store,
mek0c55c7f62014-10-23 22:06:09144 storage::SpecialStoragePolicy* special_storage_policy,
wjmacleancaa7d6d2014-11-12 16:42:11145 GeofencingManager* geofencing_manager,
meke6b83032014-12-19 23:35:34146 HostZoomLevelContext* host_zoom_level_context,
peter7ac37dd2015-03-18 14:57:30147 NavigatorConnectContextImpl* navigator_connect_context,
jkarlin901d507a2015-04-20 19:23:18148 PlatformNotificationContextImpl* platform_notification_context,
mekefdd5a72015-07-22 18:34:49149 BackgroundSyncContextImpl* background_sync_context);
[email protected]10eb28162012-09-18 03:04:09150
avib7348942015-12-25 20:57:10151 void ClearDataImpl(uint32_t remove_mask,
152 uint32_t quota_storage_remove_mask,
[email protected]5ff8b2a2013-12-28 06:51:42153 const GURL& remove_origin,
[email protected]88562b512013-11-06 21:10:44154 const OriginMatcherFunction& origin_matcher,
[email protected]33ad6ce92013-08-27 14:39:08155 net::URLRequestContextGetter* rq_context,
[email protected]fdf3e13c2013-07-31 06:23:46156 const base::Time begin,
157 const base::Time end,
158 const base::Closure& callback);
159
[email protected]10eb28162012-09-18 03:04:09160 // Used by StoragePartitionImplMap.
161 //
162 // TODO(ajwong): These should be taken in the constructor and in Create() but
163 // because the URLRequestContextGetter still lives in Profile with a tangled
164 // initialization, if we try to retrieve the URLRequestContextGetter()
165 // before the default StoragePartition is created, we end up reentering the
166 // construction and double-initializing. For now, we retain the legacy
167 // behavior while allowing StoragePartitionImpl to expose these accessors by
168 // letting StoragePartitionImplMap call these two private settings at the
169 // appropriate time. These should move back into the constructor once
170 // URLRequestContextGetter's lifetime is sorted out. We should also move the
171 // PostCreateInitialization() out of StoragePartitionImplMap.
[email protected]88562b512013-11-06 21:10:44172 CONTENT_EXPORT void SetURLRequestContext(
173 net::URLRequestContextGetter* url_request_context);
[email protected]10eb28162012-09-18 03:04:09174 void SetMediaURLRequestContext(
175 net::URLRequestContextGetter* media_url_request_context);
[email protected]4c3a23582012-08-18 08:54:34176
[email protected]2dec8ec2013-02-07 19:20:34177 base::FilePath partition_path_;
[email protected]10eb28162012-09-18 03:04:09178 scoped_refptr<net::URLRequestContextGetter> url_request_context_;
179 scoped_refptr<net::URLRequestContextGetter> media_url_request_context_;
[email protected]cd501a72014-08-22 19:58:31180 scoped_refptr<storage::QuotaManager> quota_manager_;
[email protected]4c3a23582012-08-18 08:54:34181 scoped_refptr<ChromeAppCacheService> appcache_service_;
[email protected]cd501a72014-08-22 19:58:31182 scoped_refptr<storage::FileSystemContext> filesystem_context_;
183 scoped_refptr<storage::DatabaseTracker> database_tracker_;
[email protected]5f2aa722013-08-07 16:59:41184 scoped_refptr<DOMStorageContextWrapper> dom_storage_context_;
[email protected]4c3a23582012-08-18 08:54:34185 scoped_refptr<IndexedDBContextImpl> indexed_db_context_;
jsbellabadb9b2015-03-23 21:03:44186 scoped_refptr<CacheStorageContextImpl> cache_storage_context_;
[email protected]1f1e8562013-11-13 05:05:16187 scoped_refptr<ServiceWorkerContextWrapper> service_worker_context_;
[email protected]ec346e02013-08-08 22:03:53188 scoped_refptr<WebRTCIdentityStore> webrtc_identity_store_;
[email protected]cd501a72014-08-22 19:58:31189 scoped_refptr<storage::SpecialStoragePolicy> special_storage_policy_;
mek0c55c7f62014-10-23 22:06:09190 scoped_refptr<GeofencingManager> geofencing_manager_;
wjmacleancaa7d6d2014-11-12 16:42:11191 scoped_refptr<HostZoomLevelContext> host_zoom_level_context_;
mek59114f62015-01-27 01:13:52192 scoped_refptr<NavigatorConnectContextImpl> navigator_connect_context_;
peter7ac37dd2015-03-18 14:57:30193 scoped_refptr<PlatformNotificationContextImpl> platform_notification_context_;
jkarlin901d507a2015-04-20 19:23:18194 scoped_refptr<BackgroundSyncContextImpl> background_sync_context_;
[email protected]4c3a23582012-08-18 08:54:34195
mlamouri6cdca912015-01-15 17:04:08196 // Raw pointer that should always be valid. The BrowserContext owns the
197 // StoragePartitionImplMap which then owns StoragePartitionImpl. When the
198 // BrowserContext is destroyed, |this| will be destroyed too.
199 BrowserContext* browser_context_;
200
[email protected]4c3a23582012-08-18 08:54:34201 DISALLOW_COPY_AND_ASSIGN(StoragePartitionImpl);
202};
203
204} // namespace content
205
206#endif // CONTENT_BROWSER_STORAGE_PARTITION_IMPL_H_