| // Copyright (c) 2012 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_ORIGIN_DATABASE_H_ |
| #define WEBKIT_FILEAPI_FILE_SYSTEM_ORIGIN_DATABASE_H_ |
| |
| #include <string> |
| #include <utility> |
| #include <vector> |
| |
| #include "base/file_path.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/time.h" |
| #include "webkit/fileapi/fileapi_export.h" |
| |
| namespace leveldb { |
| class DB; |
| class Status; |
| } |
| |
| namespace tracked_objects { |
| class Location; |
| } |
| |
| namespace fileapi { |
| |
| // All methods of this class other than the constructor may be used only from |
| // the browser's FILE thread. The constructor may be used on any thread. |
| class FILEAPI_EXPORT_PRIVATE FileSystemOriginDatabase { |
| public: |
| struct FILEAPI_EXPORT_PRIVATE OriginRecord { |
| std::string origin; |
| FilePath path; |
| |
| OriginRecord(); |
| OriginRecord(const std::string& origin, const FilePath& path); |
| ~OriginRecord(); |
| }; |
| |
| // Only one instance of FileSystemOriginDatabase should exist for a given path |
| // at a given time. |
| explicit FileSystemOriginDatabase(const FilePath& file_system_directory); |
| ~FileSystemOriginDatabase(); |
| |
| bool HasOriginPath(const std::string& origin); |
| |
| // This will produce a unique path and add it to its database, if it's not |
| // already present. |
| bool GetPathForOrigin(const std::string& origin, FilePath* directory); |
| |
| // Also returns success if the origin is not found. |
| bool RemovePathForOrigin(const std::string& origin); |
| |
| bool ListAllOrigins(std::vector<OriginRecord>* origins); |
| |
| // This will release all database resources in use; call it to save memory. |
| void DropDatabase(); |
| |
| private: |
| enum RecoveryOption { |
| REPAIR_ON_CORRUPTION, |
| DELETE_ON_CORRUPTION, |
| FAIL_ON_CORRUPTION, |
| }; |
| |
| bool Init(RecoveryOption recovery_option); |
| bool RepairDatabase(const std::string& db_path); |
| void HandleError(const tracked_objects::Location& from_here, |
| const leveldb::Status& status); |
| void ReportInitStatus(const leveldb::Status& status); |
| bool GetLastPathNumber(int* number); |
| |
| FilePath file_system_directory_; |
| scoped_ptr<leveldb::DB> db_; |
| base::Time last_reported_time_; |
| DISALLOW_COPY_AND_ASSIGN(FileSystemOriginDatabase); |
| }; |
| |
| } // namespace fileapi |
| |
| #endif // WEBKIT_FILEAPI_FILE_SYSTEM_ORIGIN_DATABASE_H_ |