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_PUBLIC_BROWSER_STORAGE_PARTITION_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_PUBLIC_BROWSER_STORAGE_PARTITION_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class GURL;
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace appcache {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AppCacheService;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace fileapi {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FileSystemContext;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLRequestContextGetter;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace quota {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class QuotaManager;
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class SpecialStoragePolicy;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace webkit_database {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DatabaseTracker;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserContext;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class IndexedDBContext;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DOMStorageContext;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Defines what persistent state a child process can access.
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The StoragePartition defines the view each child process has of the
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// persistent state inside the BrowserContext. This is used to implement
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// isolated storage where a renderer with isolated storage cannot see
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the cookies, localStorage, etc., that normal web renderers have access to.
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class StoragePartition {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual base::FilePath GetPath() = 0;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual net::URLRequestContextGetter* GetURLRequestContext() = 0;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual net::URLRequestContextGetter* GetMediaURLRequestContext() = 0;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual quota::QuotaManager* GetQuotaManager() = 0;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual appcache::AppCacheService* GetAppCacheService() = 0;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual fileapi::FileSystemContext* GetFileSystemContext() = 0;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual webkit_database::DatabaseTracker* GetDatabaseTracker() = 0;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual DOMStorageContext* GetDOMStorageContext() = 0;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual IndexedDBContext* GetIndexedDBContext() = 0;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
60a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  enum RemoveDataMask {
61a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    REMOVE_DATA_MASK_APPCACHE = 1 << 0,
62a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    REMOVE_DATA_MASK_COOKIES = 1 << 1,
63a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    REMOVE_DATA_MASK_FILE_SYSTEMS = 1 << 2,
64a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    REMOVE_DATA_MASK_INDEXEDDB = 1 << 3,
65a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    REMOVE_DATA_MASK_LOCAL_STORAGE = 1 << 4,
66a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    REMOVE_DATA_MASK_SHADER_CACHE = 1 << 5,
67a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    REMOVE_DATA_MASK_WEBSQL = 1 << 6,
68ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    REMOVE_DATA_MASK_WEBRTC_IDENTITY = 1 << 7,
69a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    REMOVE_DATA_MASK_ALL = -1
70a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  };
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  enum QuotaManagedStorageMask {
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Corresponds to quota::kStorageTypeTemporary.
74a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    QUOTA_MANAGED_STORAGE_MASK_TEMPORARY = 1 << 0,
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Corresponds to quota::kStorageTypePersistent.
77a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    QUOTA_MANAGED_STORAGE_MASK_PERSISTENT = 1 << 1,
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // Corresponds to quota::kStorageTypeSyncable.
80a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    QUOTA_MANAGED_STORAGE_MASK_SYNCABLE = 1 << 2,
81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
82a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    QUOTA_MANAGED_STORAGE_MASK_ALL = -1
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  };
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Starts an asynchronous task that does a best-effort clear the data
86a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // corresponding to the given |remove_mask| and |quota_storage_remove_mask|
87a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // inside this StoragePartition for the given |storage_origin|.
88a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // Note session dom storage is not cleared even if you specify
89a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // REMOVE_DATA_MASK_LOCAL_STORAGE.
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // TODO(ajwong): Right now, the embedder may have some
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // URLRequestContextGetter objects that the StoragePartition does not know
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // about.  This will no longer be the case when we resolve
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // http://crbug.com/159193. Remove |request_context_getter| when that bug
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // is fixed.
96a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  virtual void ClearDataForOrigin(uint32 remove_mask,
97a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                                  uint32 quota_storage_remove_mask,
98a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                                  const GURL& storage_origin,
99a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                                  net::URLRequestContextGetter* rq_context) = 0;
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // A callback type to check if a given origin matches a storage policy.
102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Can be passed empty/null where used, which means the origin will always
103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // match.
104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  typedef base::Callback<bool(const GURL&,
105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                              quota::SpecialStoragePolicy*)>
106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      OriginMatcherFunction;
107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Similar to ClearDataForOrigin().
109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Deletes all data out fo the StoragePartition if |storage_origin| is NULL.
110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // |origin_matcher| is present if special storage policy is to be handled,
111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // otherwise the callback can be null (base::Callback::is_null() == true).
112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // |callback| is called when data deletion is done or at least the deletion is
113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // scheduled.
114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void ClearData(uint32 remove_mask,
115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                         uint32 quota_storage_remove_mask,
116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                         const GURL* storage_origin,
117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                         const OriginMatcherFunction& origin_matcher,
118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                         const base::Time begin,
119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                         const base::Time end,
120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                         const base::Closure& callback) = 0;
121a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~StoragePartition() {}
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CONTENT_PUBLIC_BROWSER_STORAGE_PARTITION_H_
129