Index: webkit/browser/fileapi/sandbox_context.h |
diff --git a/webkit/browser/fileapi/sandbox_context.h b/webkit/browser/fileapi/sandbox_context.h |
index e4e9434187be6761d4a9a88a3c367a00c2caaed7..98a1b21023992e244d6e068f7ed19f53d034cabe 100644 |
--- a/webkit/browser/fileapi/sandbox_context.h |
+++ b/webkit/browser/fileapi/sandbox_context.h |
@@ -5,9 +5,15 @@ |
#ifndef WEBKIT_BROWSER_FILEAPI_SANDBOX_CONTEXT_H_ |
#define WEBKIT_BROWSER_FILEAPI_SANDBOX_CONTEXT_H_ |
+#include <set> |
+#include <string> |
+#include <utility> |
+ |
#include "base/files/file_path.h" |
#include "base/memory/ref_counted.h" |
#include "base/memory/scoped_ptr.h" |
+#include "webkit/browser/fileapi/file_system_backend.h" |
+#include "webkit/browser/fileapi/file_system_options.h" |
#include "webkit/browser/fileapi/file_system_quota_util.h" |
#include "webkit/browser/webkit_storage_browser_export.h" |
@@ -23,6 +29,7 @@ class SpecialStoragePolicy; |
namespace fileapi { |
class AsyncFileUtilAdapter; |
+class FileSystemURL; |
class FileSystemUsageCache; |
class ObfuscatedFileUtil; |
class SandboxFileSystemBackend; |
@@ -36,14 +43,75 @@ class WEBKIT_STORAGE_BROWSER_EXPORT SandboxContext { |
// The FileSystem directory name. |
static const base::FilePath::CharType kFileSystemDirectory[]; |
+ // Origin enumerator interface. |
+ // An instance of this interface is assumed to be called on the file thread. |
+ class OriginEnumerator { |
+ public: |
+ virtual ~OriginEnumerator() {} |
+ |
+ // Returns the next origin. Returns empty if there are no more origins. |
+ virtual GURL Next() = 0; |
+ |
+ // Returns the current origin's information. |
+ virtual bool HasFileSystemType(FileSystemType type) const = 0; |
+ }; |
+ |
SandboxContext( |
quota::QuotaManagerProxy* quota_manager_proxy, |
base::SequencedTaskRunner* file_task_runner, |
const base::FilePath& profile_path, |
- quota::SpecialStoragePolicy* special_storage_policy); |
+ quota::SpecialStoragePolicy* special_storage_policy, |
+ const FileSystemOptions& file_system_options); |
~SandboxContext(); |
+ // Performs API-specific validity checks on the given path |url|. |
+ // Returns true if access to |url| is valid in this filesystem. |
+ bool IsAccessValid(const FileSystemURL& url) const; |
+ |
+ // Returns true if the given |url|'s scheme is allowed to access |
+ // filesystem. |
+ bool IsAllowedScheme(const GURL& url) const; |
+ |
+ // Returns an origin enumerator of sandbox filesystem. |
+ // This method can only be called on the file thread. |
+ OriginEnumerator* CreateOriginEnumerator(); |
+ |
+ // Gets a base directory path of the sandboxed filesystem that is |
+ // specified by |origin_url| and |type|. |
+ // (The path is similar to the origin's root path but doesn't contain |
+ // the 'unique' part.) |
+ // Returns an empty path if the given type is invalid. |
+ // This method can only be called on the file thread. |
+ base::FilePath GetBaseDirectoryForOriginAndType( |
+ const GURL& origin_url, |
+ FileSystemType type, |
+ bool create); |
+ |
+ // FileSystemQuotaUtil helpers. |
+ base::PlatformFileError DeleteOriginDataOnFileThread( |
+ FileSystemContext* context, |
+ quota::QuotaManagerProxy* proxy, |
+ const GURL& origin_url, |
+ FileSystemType type); |
+ void GetOriginsForTypeOnFileThread( |
+ FileSystemType type, |
+ std::set<GURL>* origins); |
+ void GetOriginsForHostOnFileThread( |
+ FileSystemType type, |
+ const std::string& host, |
+ std::set<GURL>* origins); |
+ int64 GetOriginUsageOnFileThread( |
+ FileSystemContext* context, |
+ const GURL& origin_url, |
+ FileSystemType type); |
+ void InvalidateUsageCache( |
+ const GURL& origin_url, |
+ FileSystemType type); |
+ void StickyInvalidateUsageCache( |
+ const GURL& origin_url, |
+ FileSystemType type); |
+ |
base::SequencedTaskRunner* file_task_runner() { |
return file_task_runner_.get(); |
} |
@@ -56,9 +124,30 @@ class WEBKIT_STORAGE_BROWSER_EXPORT SandboxContext { |
return special_storage_policy_.get(); |
} |
+ FileSystemOptions file_system_options() { return file_system_options_; } |
+ |
ObfuscatedFileUtil* sync_file_util(); |
private: |
+ friend class SandboxQuotaObserver; |
+ friend class SandboxFileSystemTestHelper; |
+ |
+ // Returns a path to the usage cache file. |
+ base::FilePath GetUsageCachePathForOriginAndType( |
+ const GURL& origin_url, |
+ FileSystemType type); |
+ |
+ // Returns a path to the usage cache file (static version). |
+ static base::FilePath GetUsageCachePathForOriginAndType( |
+ ObfuscatedFileUtil* sandbox_file_util, |
+ const GURL& origin_url, |
+ FileSystemType type, |
+ base::PlatformFileError* error_out); |
+ |
+ int64 RecalculateUsage(FileSystemContext* context, |
+ const GURL& origin, |
+ FileSystemType type); |
+ |
scoped_refptr<base::SequencedTaskRunner> file_task_runner_; |
scoped_ptr<AsyncFileUtilAdapter> sandbox_file_util_; |
@@ -67,6 +156,13 @@ class WEBKIT_STORAGE_BROWSER_EXPORT SandboxContext { |
scoped_refptr<quota::SpecialStoragePolicy> special_storage_policy_; |
+ FileSystemOptions file_system_options_; |
+ |
+ // Acccessed only on the file thread. |
+ std::set<GURL> visited_origins_; |
+ |
+ std::set<std::pair<GURL, FileSystemType> > sticky_dirty_origins_; |
+ |
DISALLOW_COPY_AND_ASSIGN(SandboxContext); |
}; |