Index: webkit/database/database_tracker.h |
=================================================================== |
--- webkit/database/database_tracker.h (revision 0) |
+++ webkit/database/database_tracker.h (revision 0) |
@@ -0,0 +1,123 @@ |
+// Copyright (c) 2009 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_DATABASE_DATABASE_TRACKER_H_ |
+#define WEBKIT_DATABASE_DATABASE_TRACKER_H_ |
+ |
+#include <map> |
+ |
+#include "base/file_path.h" |
+#include "base/observer_list.h" |
+#include "base/ref_counted.h" |
+#include "base/scoped_ptr.h" |
+#include "base/string16.h" |
+#include "testing/gtest/include/gtest/gtest_prod.h" |
+ |
+namespace sql { |
+class Connection; |
+class MetaTable; |
+} |
+ |
+namespace webkit_database { |
+ |
+class DatabasesTable; |
+ |
+// 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 |
+// should be called on the same thread. The only exception is |
+// database_directory() which returns a constant that is initialized when |
+// the DatabaseTracker instance is created. |
+// |
+// Furthermore, some methods of this class have to read/write data from/to |
+// the disk. Therefore, in a multi-threaded application, all methods of this |
+// class should be called on the thread dedicated to file operations (file |
+// thread in the browser process, for example), if such a thread exists. |
+class DatabaseTracker |
+ : public base::RefCountedThreadSafe<DatabaseTracker> { |
+ public: |
+ class Observer { |
+ public: |
+ virtual void OnDatabaseSizeChanged(const string16& origin_identifier, |
+ const string16& database_name, |
+ int64 database_size, |
+ int64 space_available) = 0; |
+ virtual ~Observer() {} |
+ }; |
+ |
+ explicit DatabaseTracker(const FilePath& profile_path); |
+ ~DatabaseTracker(); |
+ |
+ void DatabaseOpened(const string16& origin_identifier, |
+ const string16& database_name, |
+ const string16& database_details, |
+ int64 estimated_size, |
+ int64* database_size, |
+ int64* space_available); |
+ void DatabaseModified(const string16& origin_identifier, |
+ const string16& database_name); |
+ void DatabaseClosed(const string16& origin_identifier, |
+ const string16& database_name); |
+ |
+ void AddObserver(Observer* observer); |
+ void RemoveObserver(Observer* observer); |
+ |
+ void CloseTrackerDatabaseAndClearCaches(); |
+ |
+ const FilePath& DatabaseDirectory() const { return db_dir_; } |
+ FilePath GetFullDBFilePath(const string16& origin_identifier, |
+ const string16& database_name) const; |
+ |
+ private: |
+ class CachedOriginInfo { |
+ 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; |
+ if (new_size != old_size) |
+ total_size_ += new_size - old_size; |
+ } |
+ |
+ private: |
+ int64 total_size_; |
+ std::map<string16, int64> cached_database_sizes_; |
+ }; |
+ |
+ bool LazyInit(); |
+ void InsertOrUpdateDatabaseDetails(const string16& origin_identifier, |
+ const string16& database_name, |
+ const string16& database_details, |
+ int64 estimated_size); |
+ |
+ 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); |
+ |
+ bool initialized_; |
+ const FilePath db_dir_; |
+ scoped_ptr<sql::Connection> db_; |
+ scoped_ptr<DatabasesTable> databases_table_; |
+ scoped_ptr<sql::MetaTable> meta_table_; |
+ ObserverList<Observer> observers_; |
+ std::map<string16, CachedOriginInfo> origins_info_map_; |
+ |
+ FRIEND_TEST(DatabaseTrackerTest, TestIt); |
+}; |
+ |
+} // namespace webkit_database |
+ |
+#endif // WEBKIT_DATABASE_DATABASE_TRACKER_H_ |
Property changes on: webkit\database\database_tracker.h |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |