| Index: webkit/database/database_tracker.h
|
| ===================================================================
|
| --- webkit/database/database_tracker.h (revision 35502)
|
| +++ webkit/database/database_tracker.h (working copy)
|
| @@ -12,7 +12,9 @@
|
| #include "base/ref_counted.h"
|
| #include "base/scoped_ptr.h"
|
| #include "base/string16.h"
|
| +#include "base/string_util.h"
|
| #include "testing/gtest/include/gtest/gtest_prod.h"
|
| +#include "webkit/database/database_connections.h"
|
|
|
| namespace sql {
|
| class Connection;
|
| @@ -22,7 +24,43 @@
|
| namespace webkit_database {
|
|
|
| class DatabasesTable;
|
| +class QuotaTable;
|
|
|
| +// This class is used to store information about all databases in an origin.
|
| +class OriginInfo {
|
| + public:
|
| + OriginInfo(const OriginInfo& origin_info)
|
| + : origin_(origin_info.origin_),
|
| + total_size_(origin_info.total_size_),
|
| + quota_(origin_info.quota_),
|
| + database_sizes_(origin_info.database_sizes_) {}
|
| + string16 GetOrigin() const { return origin_; }
|
| + int64 TotalSize() const { return total_size_; }
|
| + int64 Quota() const { return quota_; }
|
| + void GetAllDatabaseNames(std::vector<string16>* databases) const {
|
| + for (std::map<string16, int64>::const_iterator it = database_sizes_.begin();
|
| + it != database_sizes_.end(); it++) {
|
| + databases->push_back(it->first);
|
| + }
|
| + }
|
| + int64 GetDatabaseSize(const string16& database_name) const {
|
| + std::map<string16, int64>::const_iterator it =
|
| + database_sizes_.find(database_name);
|
| + if (it != database_sizes_.end())
|
| + return it->second;
|
| + return 0;
|
| + }
|
| +
|
| + protected:
|
| + OriginInfo(const string16& origin, int64 total_size, int64 quota)
|
| + : origin_(origin), total_size_(total_size), quota_(quota) { }
|
| +
|
| + string16 origin_;
|
| + int64 total_size_;
|
| + int64 quota_;
|
| + std::map<string16, int64> database_sizes_;
|
| +};
|
| +
|
| // This class manages the main database, and keeps track of per origin quotas.
|
| //
|
| // The data in this class is not thread-safe, so all methods of this class
|
| @@ -58,6 +96,7 @@
|
| const string16& database_name);
|
| void DatabaseClosed(const string16& origin_identifier,
|
| const string16& database_name);
|
| + void CloseDatabases(const DatabaseConnections& connections);
|
|
|
| void AddObserver(Observer* observer);
|
| void RemoveObserver(Observer* observer);
|
| @@ -68,31 +107,33 @@
|
| FilePath GetFullDBFilePath(const string16& origin_identifier,
|
| const string16& database_name) const;
|
|
|
| + bool GetAllOriginsInfo(std::vector<OriginInfo>* origins_info);
|
| + void SetOriginQuota(const string16& origin_identifier, int64 new_quota);
|
| + bool DeleteDatabase(const string16& origin_identifier,
|
| + const string16& database_name);
|
| + bool DeleteOrigin(const string16& origin_identifier);
|
| +
|
| private:
|
| + // Need this here to allow RefCountedThreadSafe to call ~DatabaseTracker().
|
| friend class base::RefCountedThreadSafe<DatabaseTracker>;
|
|
|
| - ~DatabaseTracker();
|
| -
|
| - class CachedOriginInfo {
|
| + class CachedOriginInfo : public OriginInfo {
|
| public:
|
| - CachedOriginInfo() : total_size_(0) { }
|
| - int64 TotalSize() const { return total_size_; }
|
| - int64 GetCachedDatabaseSize(const string16& database_name) {
|
| - return cached_database_sizes_[database_name];
|
| - }
|
| - void SetCachedDatabaseSize(const string16& database_name, int64 new_size) {
|
| - int64 old_size = cached_database_sizes_[database_name];
|
| - cached_database_sizes_[database_name] = new_size;
|
| + CachedOriginInfo() : OriginInfo(EmptyString16(), 0, 0) {}
|
| + void SetOrigin(const string16& origin) { origin_ = origin; }
|
| + void SetQuota(int64 new_quota) { quota_ = new_quota; }
|
| + void SetDatabaseSize(const string16& database_name, int64 new_size) {
|
| + int64 old_size = database_sizes_[database_name];
|
| + database_sizes_[database_name] = new_size;
|
| if (new_size != old_size)
|
| total_size_ += new_size - old_size;
|
| }
|
| -
|
| - private:
|
| - int64 total_size_;
|
| - std::map<string16, int64> cached_database_sizes_;
|
| };
|
|
|
| + ~DatabaseTracker();
|
| +
|
| bool LazyInit();
|
| + bool UpgradeToCurrentVersion();
|
| void InsertOrUpdateDatabaseDetails(const string16& origin_identifier,
|
| const string16& database_name,
|
| const string16& database_details,
|
| @@ -100,23 +141,24 @@
|
|
|
| void ClearAllCachedOriginInfo();
|
| CachedOriginInfo* GetCachedOriginInfo(const string16& origin_identifier);
|
| - int64 GetCachedDatabaseFileSize(const string16& origin_identifier,
|
| - const string16& database_name);
|
| - int64 UpdateCachedDatabaseFileSize(const string16& origin_identifier,
|
| - const string16& database_name);
|
| +
|
| int64 GetDBFileSize(const string16& origin_identifier,
|
| const string16& database_name) const;
|
| - int64 GetOriginUsage(const string16& origin_identifer);
|
| - int64 GetOriginQuota(const string16& origin_identifier) const;
|
| +
|
| int64 GetOriginSpaceAvailable(const string16& origin_identifier);
|
|
|
| + int64 UpdateCachedDatabaseFileSize(const string16& origin_identifier,
|
| + const string16& database_name);
|
| +
|
| bool initialized_;
|
| const FilePath db_dir_;
|
| scoped_ptr<sql::Connection> db_;
|
| scoped_ptr<DatabasesTable> databases_table_;
|
| + scoped_ptr<QuotaTable> quota_table_;
|
| scoped_ptr<sql::MetaTable> meta_table_;
|
| ObserverList<Observer> observers_;
|
| std::map<string16, CachedOriginInfo> origins_info_map_;
|
| + DatabaseConnections database_connections_;
|
|
|
| FRIEND_TEST(DatabaseTrackerTest, TestIt);
|
| };
|
|
|