// Copyright (c) 2010 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef WEBKIT_FILEAPI_FILE_SYSTEM_CONTEXT_H_ #define WEBKIT_FILEAPI_FILE_SYSTEM_CONTEXT_H_ #include "base/ref_counted.h" #include "base/scoped_ptr.h" #include "webkit/quota/special_storage_policy.h" class FilePath; class GURL; namespace base { class MessageLoopProxy; } namespace fileapi { class FileSystemPathManager; class FileSystemQuotaManager; class FileSystemUsageTracker; class FileSystemContext; struct DefaultContextDeleter; // This class keeps and provides a file system context for FileSystem API. class FileSystemContext : public base::RefCountedThreadSafe { public: FileSystemContext( scoped_refptr file_message_loop, scoped_refptr io_message_loop, scoped_refptr special_storage_policy, const FilePath& profile_path, bool is_incognito, bool allow_file_access_from_files, bool unlimited_quota); ~FileSystemContext(); void DeleteDataForOriginOnFileThread(const GURL& origin_url); FileSystemPathManager* path_manager() { return path_manager_.get(); } FileSystemQuotaManager* quota_manager() { return quota_manager_.get(); } FileSystemUsageTracker* usage_tracker() { return usage_tracker_.get(); } private: friend struct DefaultContextDeleter; void DeleteOnCorrectThread() const; scoped_refptr file_message_loop_; scoped_refptr io_message_loop_; scoped_ptr path_manager_; scoped_ptr quota_manager_; scoped_ptr usage_tracker_; DISALLOW_IMPLICIT_CONSTRUCTORS(FileSystemContext); }; struct DefaultContextDeleter { static void Destruct(const FileSystemContext* context) { context->DeleteOnCorrectThread(); } }; } // namespace fileapi #endif // WEBKIT_FILEAPI_FILE_SYSTEM_CONTEXT_H_