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