15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_BROWSER_STORAGE_PARTITION_IMPL_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_BROWSER_STORAGE_PARTITION_IMPL_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/appcache/chrome_appcache_service.h" 12bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "content/browser/dom_storage/dom_storage_context_wrapper.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/browser/indexed_db/indexed_db_context_impl.h" 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/browser/media/webrtc_identity_store.h" 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/browser/service_worker/service_worker_context_wrapper.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/common/content_export.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/storage_partition.h" 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "webkit/browser/quota/special_storage_policy.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class StoragePartitionImpl : public StoragePartition { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_EXPORT virtual ~StoragePartitionImpl(); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Quota managed data uses a different bitmask for types than 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // StoragePartition uses. This method generates that mask. 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CONTENT_EXPORT static int GenerateQuotaClientMask(uint32 remove_mask); 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CONTENT_EXPORT void OverrideQuotaManagerForTesting( 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) quota::QuotaManager* quota_manager); 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CONTENT_EXPORT void OverrideSpecialStoragePolicyForTesting( 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) quota::SpecialStoragePolicy* special_storage_policy); 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // StoragePartition interface. 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual base::FilePath GetPath() OVERRIDE; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual net::URLRequestContextGetter* GetURLRequestContext() OVERRIDE; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual net::URLRequestContextGetter* GetMediaURLRequestContext() OVERRIDE; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual quota::QuotaManager* GetQuotaManager() OVERRIDE; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ChromeAppCacheService* GetAppCacheService() OVERRIDE; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual fileapi::FileSystemContext* GetFileSystemContext() OVERRIDE; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual webkit_database::DatabaseTracker* GetDatabaseTracker() OVERRIDE; 43bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch virtual DOMStorageContextWrapper* GetDOMStorageContext() OVERRIDE; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual IndexedDBContextImpl* GetIndexedDBContext() OVERRIDE; 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ServiceWorkerContextWrapper* GetServiceWorkerContext() OVERRIDE; 46a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 47a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual void ClearDataForOrigin( 48a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) uint32 remove_mask, 49a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) uint32 quota_storage_remove_mask, 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& storage_origin, 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::URLRequestContextGetter* request_context_getter) OVERRIDE; 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void ClearData(uint32 remove_mask, 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) uint32 quota_storage_remove_mask, 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const GURL& storage_origin, 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const OriginMatcherFunction& origin_matcher, 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const base::Time begin, 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const base::Time end, 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const base::Closure& callback) OVERRIDE; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch WebRTCIdentityStore* GetWebRTCIdentityStore(); 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 62a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) struct DataDeletionHelper; 63a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) struct QuotaManagedDataDeletionHelper; 64a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class StoragePartitionImplMap; 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(StoragePartitionShaderClearTest, ClearShaderCache); 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest, 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveQuotaManagedDataForeverBoth); 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest, 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveQuotaManagedDataForeverOnlyTemporary); 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest, 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveQuotaManagedDataForeverOnlyPersistent); 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest, 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveQuotaManagedDataForeverNeither); 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest, 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveQuotaManagedDataForeverSpecificOrigin); 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest, 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveQuotaManagedDataForLastHour); 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest, 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveQuotaManagedDataForLastWeek); 82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest, 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveQuotaManagedUnprotectedOrigins); 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest, 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveQuotaManagedProtectedSpecificOrigin); 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest, 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveQuotaManagedProtectedOrigins); 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest, 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveQuotaManagedIgnoreDevTools); 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest, RemoveCookieForever); 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest, RemoveCookieLastHour); 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest, 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveUnprotectedLocalStorageForever); 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest, 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveProtectedLocalStorageForever); 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest, 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveLocalStorageForLastWeek); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The |partition_path| is the absolute path to the root of this 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // StoragePartition's on-disk storage. 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If |in_memory| is true, the |partition_path| is (ab)used as a way of 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // distinguishing different in-memory partitions, but nothing is persisted 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // on to disk. 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static StoragePartitionImpl* Create(BrowserContext* context, 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool in_memory, 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& profile_path); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_EXPORT StoragePartitionImpl( 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& partition_path, 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota::QuotaManager* quota_manager, 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeAppCacheService* appcache_service, 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fileapi::FileSystemContext* filesystem_context, 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webkit_database::DatabaseTracker* database_tracker, 115bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch DOMStorageContextWrapper* dom_storage_context, 116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IndexedDBContextImpl* indexed_db_context, 117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceWorkerContextWrapper* service_worker_context, 118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) WebRTCIdentityStore* webrtc_identity_store, 119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) quota::SpecialStoragePolicy* special_storage_policy); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 121a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) void ClearDataImpl(uint32 remove_mask, 122a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) uint32 quota_storage_remove_mask, 1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const GURL& remove_origin, 124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const OriginMatcherFunction& origin_matcher, 125a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) net::URLRequestContextGetter* rq_context, 126a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const base::Time begin, 127a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const base::Time end, 128a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const base::Closure& callback); 129a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used by StoragePartitionImplMap. 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(ajwong): These should be taken in the constructor and in Create() but 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // because the URLRequestContextGetter still lives in Profile with a tangled 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // initialization, if we try to retrieve the URLRequestContextGetter() 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // before the default StoragePartition is created, we end up reentering the 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // construction and double-initializing. For now, we retain the legacy 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // behavior while allowing StoragePartitionImpl to expose these accessors by 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // letting StoragePartitionImplMap call these two private settings at the 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // appropriate time. These should move back into the constructor once 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URLRequestContextGetter's lifetime is sorted out. We should also move the 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PostCreateInitialization() out of StoragePartitionImplMap. 142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CONTENT_EXPORT void SetURLRequestContext( 143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::URLRequestContextGetter* url_request_context); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetMediaURLRequestContext( 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::URLRequestContextGetter* media_url_request_context); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath partition_path_; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<net::URLRequestContextGetter> url_request_context_; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<net::URLRequestContextGetter> media_url_request_context_; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<quota::QuotaManager> quota_manager_; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<ChromeAppCacheService> appcache_service_; 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<fileapi::FileSystemContext> filesystem_context_; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<webkit_database::DatabaseTracker> database_tracker_; 154bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch scoped_refptr<DOMStorageContextWrapper> dom_storage_context_; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<IndexedDBContextImpl> indexed_db_context_; 156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<ServiceWorkerContextWrapper> service_worker_context_; 157ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch scoped_refptr<WebRTCIdentityStore> webrtc_identity_store_; 158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<quota::SpecialStoragePolicy> special_storage_policy_; 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(StoragePartitionImpl); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_BROWSER_STORAGE_PARTITION_IMPL_H_ 166