Home | History | Annotate | Download | only in browser
      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
      3 // found in the LICENSE file.
      4 
      5 #ifndef CONTENT_BROWSER_STORAGE_PARTITION_IMPL_H_
      6 #define CONTENT_BROWSER_STORAGE_PARTITION_IMPL_H_
      7 
      8 #include "base/compiler_specific.h"
      9 #include "base/files/file_path.h"
     10 #include "base/memory/ref_counted.h"
     11 #include "content/browser/appcache/chrome_appcache_service.h"
     12 #include "content/browser/dom_storage/dom_storage_context_wrapper.h"
     13 #include "content/browser/indexed_db/indexed_db_context_impl.h"
     14 #include "content/browser/media/webrtc_identity_store.h"
     15 #include "content/browser/service_worker/service_worker_context_wrapper.h"
     16 #include "content/common/content_export.h"
     17 #include "content/public/browser/storage_partition.h"
     18 #include "webkit/browser/quota/special_storage_policy.h"
     19 
     20 namespace content {
     21 
     22 class StoragePartitionImpl : public StoragePartition {
     23  public:
     24   CONTENT_EXPORT virtual ~StoragePartitionImpl();
     25 
     26   // Quota managed data uses a different bitmask for types than
     27   // StoragePartition uses. This method generates that mask.
     28   CONTENT_EXPORT static int GenerateQuotaClientMask(uint32 remove_mask);
     29 
     30   CONTENT_EXPORT void OverrideQuotaManagerForTesting(
     31       quota::QuotaManager* quota_manager);
     32   CONTENT_EXPORT void OverrideSpecialStoragePolicyForTesting(
     33       quota::SpecialStoragePolicy* special_storage_policy);
     34 
     35   // StoragePartition interface.
     36   virtual base::FilePath GetPath() OVERRIDE;
     37   virtual net::URLRequestContextGetter* GetURLRequestContext() OVERRIDE;
     38   virtual net::URLRequestContextGetter* GetMediaURLRequestContext() OVERRIDE;
     39   virtual quota::QuotaManager* GetQuotaManager() OVERRIDE;
     40   virtual ChromeAppCacheService* GetAppCacheService() OVERRIDE;
     41   virtual fileapi::FileSystemContext* GetFileSystemContext() OVERRIDE;
     42   virtual webkit_database::DatabaseTracker* GetDatabaseTracker() OVERRIDE;
     43   virtual DOMStorageContextWrapper* GetDOMStorageContext() OVERRIDE;
     44   virtual IndexedDBContextImpl* GetIndexedDBContext() OVERRIDE;
     45 
     46   virtual void ClearDataForOrigin(
     47       uint32 remove_mask,
     48       uint32 quota_storage_remove_mask,
     49       const GURL& storage_origin,
     50       net::URLRequestContextGetter* request_context_getter) OVERRIDE;
     51   virtual void ClearData(uint32 remove_mask,
     52                          uint32 quota_storage_remove_mask,
     53                          const GURL* storage_origin,
     54                          const OriginMatcherFunction& origin_matcher,
     55                          const base::Time begin,
     56                          const base::Time end,
     57                          const base::Closure& callback) OVERRIDE;
     58 
     59   ServiceWorkerContextWrapper* GetServiceWorkerContext();
     60 
     61   WebRTCIdentityStore* GetWebRTCIdentityStore();
     62 
     63   struct DataDeletionHelper;
     64   struct QuotaManagedDataDeletionHelper;
     65 
     66  private:
     67   friend class StoragePartitionImplMap;
     68   FRIEND_TEST_ALL_PREFIXES(StoragePartitionShaderClearTest, ClearShaderCache);
     69   FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
     70                            RemoveQuotaManagedDataForeverBoth);
     71   FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
     72                            RemoveQuotaManagedDataForeverOnlyTemporary);
     73   FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
     74                            RemoveQuotaManagedDataForeverOnlyPersistent);
     75   FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
     76                            RemoveQuotaManagedDataForeverNeither);
     77   FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
     78                            RemoveQuotaManagedDataForeverSpecificOrigin);
     79   FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
     80                            RemoveQuotaManagedDataForLastHour);
     81   FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
     82                            RemoveQuotaManagedDataForLastWeek);
     83   FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
     84                            RemoveQuotaManagedUnprotectedOrigins);
     85   FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
     86                            RemoveQuotaManagedProtectedSpecificOrigin);
     87   FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
     88                            RemoveQuotaManagedProtectedOrigins);
     89   FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
     90                            RemoveQuotaManagedIgnoreDevTools);
     91   FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest, RemoveCookieForever);
     92   FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest, RemoveCookieLastHour);
     93   FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
     94                            RemoveUnprotectedLocalStorageForever);
     95   FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
     96                            RemoveProtectedLocalStorageForever);
     97   FRIEND_TEST_ALL_PREFIXES(StoragePartitionImplTest,
     98                            RemoveLocalStorageForLastWeek);
     99 
    100   // The |partition_path| is the absolute path to the root of this
    101   // StoragePartition's on-disk storage.
    102   //
    103   // If |in_memory| is true, the |partition_path| is (ab)used as a way of
    104   // distinguishing different in-memory partitions, but nothing is persisted
    105   // on to disk.
    106   static StoragePartitionImpl* Create(BrowserContext* context,
    107                                       bool in_memory,
    108                                       const base::FilePath& profile_path);
    109 
    110   CONTENT_EXPORT StoragePartitionImpl(
    111       const base::FilePath& partition_path,
    112       quota::QuotaManager* quota_manager,
    113       ChromeAppCacheService* appcache_service,
    114       fileapi::FileSystemContext* filesystem_context,
    115       webkit_database::DatabaseTracker* database_tracker,
    116       DOMStorageContextWrapper* dom_storage_context,
    117       IndexedDBContextImpl* indexed_db_context,
    118       ServiceWorkerContextWrapper* service_worker_context,
    119       WebRTCIdentityStore* webrtc_identity_store,
    120       quota::SpecialStoragePolicy* special_storage_policy);
    121 
    122   void ClearDataImpl(uint32 remove_mask,
    123                      uint32 quota_storage_remove_mask,
    124                      const GURL* remove_origin,
    125                      const OriginMatcherFunction& origin_matcher,
    126                      net::URLRequestContextGetter* rq_context,
    127                      const base::Time begin,
    128                      const base::Time end,
    129                      const base::Closure& callback);
    130 
    131   // Used by StoragePartitionImplMap.
    132   //
    133   // TODO(ajwong): These should be taken in the constructor and in Create() but
    134   // because the URLRequestContextGetter still lives in Profile with a tangled
    135   // initialization, if we try to retrieve the URLRequestContextGetter()
    136   // before the default StoragePartition is created, we end up reentering the
    137   // construction and double-initializing.  For now, we retain the legacy
    138   // behavior while allowing StoragePartitionImpl to expose these accessors by
    139   // letting StoragePartitionImplMap call these two private settings at the
    140   // appropriate time.  These should move back into the constructor once
    141   // URLRequestContextGetter's lifetime is sorted out. We should also move the
    142   // PostCreateInitialization() out of StoragePartitionImplMap.
    143   CONTENT_EXPORT void SetURLRequestContext(
    144       net::URLRequestContextGetter* url_request_context);
    145   void SetMediaURLRequestContext(
    146       net::URLRequestContextGetter* media_url_request_context);
    147 
    148   base::FilePath partition_path_;
    149   scoped_refptr<net::URLRequestContextGetter> url_request_context_;
    150   scoped_refptr<net::URLRequestContextGetter> media_url_request_context_;
    151   scoped_refptr<quota::QuotaManager> quota_manager_;
    152   scoped_refptr<ChromeAppCacheService> appcache_service_;
    153   scoped_refptr<fileapi::FileSystemContext> filesystem_context_;
    154   scoped_refptr<webkit_database::DatabaseTracker> database_tracker_;
    155   scoped_refptr<DOMStorageContextWrapper> dom_storage_context_;
    156   scoped_refptr<IndexedDBContextImpl> indexed_db_context_;
    157   scoped_refptr<ServiceWorkerContextWrapper> service_worker_context_;
    158   scoped_refptr<WebRTCIdentityStore> webrtc_identity_store_;
    159   scoped_refptr<quota::SpecialStoragePolicy> special_storage_policy_;
    160 
    161   DISALLOW_COPY_AND_ASSIGN(StoragePartitionImpl);
    162 };
    163 
    164 }  // namespace content
    165 
    166 #endif  // CONTENT_BROWSER_STORAGE_PARTITION_IMPL_H_
    167