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