Index: webkit/browser/database/database_tracker.h |
diff --git a/webkit/browser/database/database_tracker.h b/webkit/browser/database/database_tracker.h |
index 6f14d7ba132a8240566c73b16109dc3b342ecffe..9bcd4421ffb26c87bc89e1fac7b34373806d124f 100644 |
--- a/webkit/browser/database/database_tracker.h |
+++ b/webkit/browser/database/database_tracker.h |
@@ -1,319 +1,5 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Copyright 2014 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_BROWSER_DATABASE_DATABASE_TRACKER_H_ |
-#define WEBKIT_BROWSER_DATABASE_DATABASE_TRACKER_H_ |
- |
-#include <map> |
-#include <set> |
-#include <utility> |
- |
-#include "base/files/file.h" |
-#include "base/files/file_path.h" |
-#include "base/gtest_prod_util.h" |
-#include "base/memory/ref_counted.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/observer_list.h" |
-#include "base/strings/string16.h" |
-#include "base/strings/string_util.h" |
-#include "base/time/time.h" |
-#include "net/base/completion_callback.h" |
-#include "webkit/browser/storage_browser_export.h" |
-#include "webkit/common/database/database_connections.h" |
- |
-namespace base { |
-class MessageLoopProxy; |
-} |
- |
-namespace content { |
-class DatabaseTracker_TestHelper_Test; |
-class MockDatabaseTracker; |
-} |
- |
-namespace sql { |
-class Connection; |
-class MetaTable; |
-} |
- |
-namespace storage { |
-class QuotaManagerProxy; |
-class SpecialStoragePolicy; |
-} |
- |
-namespace storage { |
- |
-STORAGE_EXPORT extern const base::FilePath::CharType |
- kDatabaseDirectoryName[]; |
-STORAGE_EXPORT extern const base::FilePath::CharType |
- kTrackerDatabaseFileName[]; |
- |
-class DatabasesTable; |
- |
-// This class is used to store information about all databases in an origin. |
-class STORAGE_EXPORT OriginInfo { |
- public: |
- OriginInfo(); |
- OriginInfo(const OriginInfo& origin_info); |
- ~OriginInfo(); |
- |
- const std::string& GetOriginIdentifier() const { return origin_identifier_; } |
- int64 TotalSize() const { return total_size_; } |
- void GetAllDatabaseNames(std::vector<base::string16>* databases) const; |
- int64 GetDatabaseSize(const base::string16& database_name) const; |
- base::string16 GetDatabaseDescription( |
- const base::string16& database_name) const; |
- |
- protected: |
- typedef std::map<base::string16, std::pair<int64, base::string16> > |
- DatabaseInfoMap; |
- |
- OriginInfo(const std::string& origin_identifier, int64 total_size); |
- |
- std::string origin_identifier_; |
- int64 total_size_; |
- DatabaseInfoMap database_info_; |
-}; |
- |
-// This class manages the main database and keeps track of open databases. |
-// |
-// The data in this class is not thread-safe, so all methods of this class |
-// should be called on the same thread. The only exceptions are the ctor(), |
-// the dtor() and the database_directory() and quota_manager_proxy() getters. |
-// |
-// 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 STORAGE_EXPORT DatabaseTracker |
- : public base::RefCountedThreadSafe<DatabaseTracker> { |
- public: |
- class Observer { |
- public: |
- virtual void OnDatabaseSizeChanged(const std::string& origin_identifier, |
- const base::string16& database_name, |
- int64 database_size) = 0; |
- virtual void OnDatabaseScheduledForDeletion( |
- const std::string& origin_identifier, |
- const base::string16& database_name) = 0; |
- |
- protected: |
- virtual ~Observer() {} |
- }; |
- |
- DatabaseTracker(const base::FilePath& profile_path, |
- bool is_incognito, |
- storage::SpecialStoragePolicy* special_storage_policy, |
- storage::QuotaManagerProxy* quota_manager_proxy, |
- base::MessageLoopProxy* db_tracker_thread); |
- |
- void DatabaseOpened(const std::string& origin_identifier, |
- const base::string16& database_name, |
- const base::string16& database_details, |
- int64 estimated_size, |
- int64* database_size); |
- void DatabaseModified(const std::string& origin_identifier, |
- const base::string16& database_name); |
- void DatabaseClosed(const std::string& origin_identifier, |
- const base::string16& database_name); |
- void HandleSqliteError(const std::string& origin_identifier, |
- const base::string16& database_name, |
- int error); |
- |
- void CloseDatabases(const DatabaseConnections& connections); |
- |
- void AddObserver(Observer* observer); |
- void RemoveObserver(Observer* observer); |
- |
- void CloseTrackerDatabaseAndClearCaches(); |
- |
- const base::FilePath& DatabaseDirectory() const { return db_dir_; } |
- base::FilePath GetFullDBFilePath(const std::string& origin_identifier, |
- const base::string16& database_name); |
- |
- // virtual for unit-testing only |
- virtual bool GetOriginInfo(const std::string& origin_id, OriginInfo* info); |
- virtual bool GetAllOriginIdentifiers(std::vector<std::string>* origin_ids); |
- virtual bool GetAllOriginsInfo(std::vector<OriginInfo>* origins_info); |
- |
- // Safe to call on any thread. |
- storage::QuotaManagerProxy* quota_manager_proxy() const { |
- return quota_manager_proxy_.get(); |
- } |
- |
- bool IsDatabaseScheduledForDeletion(const std::string& origin_identifier, |
- const base::string16& database_name); |
- |
- // Deletes a single database. Returns net::OK on success, net::FAILED on |
- // failure, or net::ERR_IO_PENDING and |callback| is invoked upon completion, |
- // if non-NULL. |
- int DeleteDatabase(const std::string& origin_identifier, |
- const base::string16& database_name, |
- const net::CompletionCallback& callback); |
- |
- // Delete any databases that have been touched since the cutoff date that's |
- // supplied, omitting any that match IDs within |protected_origins|. |
- // Returns net::OK on success, net::FAILED if not all databases could be |
- // deleted, and net::ERR_IO_PENDING and |callback| is invoked upon completion, |
- // if non-NULL. Protected origins, according the the SpecialStoragePolicy, |
- // are not deleted by this method. |
- int DeleteDataModifiedSince(const base::Time& cutoff, |
- const net::CompletionCallback& callback); |
- |
- // Delete all databases that belong to the given origin. Returns net::OK on |
- // success, net::FAILED if not all databases could be deleted, and |
- // net::ERR_IO_PENDING and |callback| is invoked upon completion, if non-NULL. |
- // virtual for unit testing only |
- virtual int DeleteDataForOrigin(const std::string& origin_identifier, |
- const net::CompletionCallback& callback); |
- |
- bool IsIncognitoProfile() const { return is_incognito_; } |
- |
- const base::File* GetIncognitoFile(const base::string16& vfs_file_path) const; |
- const base::File* SaveIncognitoFile(const base::string16& vfs_file_path, |
- base::File file); |
- void CloseIncognitoFileHandle(const base::string16& vfs_file_path); |
- bool HasSavedIncognitoFileHandle(const base::string16& vfs_file_path) const; |
- |
- // Shutdown the database tracker, deleting database files if the tracker is |
- // used for an incognito profile. |
- void Shutdown(); |
- // Disables the exit-time deletion of session-only data. |
- void SetForceKeepSessionState(); |
- |
- private: |
- friend class base::RefCountedThreadSafe<DatabaseTracker>; |
- friend class content::DatabaseTracker_TestHelper_Test; |
- friend class content::MockDatabaseTracker; // for testing |
- |
- typedef std::map<std::string, std::set<base::string16> > DatabaseSet; |
- typedef std::vector<std::pair<net::CompletionCallback, DatabaseSet> > |
- PendingDeletionCallbacks; |
- typedef std::map<base::string16, base::File*> FileHandlesMap; |
- typedef std::map<std::string, base::string16> OriginDirectoriesMap; |
- |
- class CachedOriginInfo : public OriginInfo { |
- public: |
- CachedOriginInfo() : OriginInfo(std::string(), 0) {} |
- void SetOriginIdentifier(const std::string& origin_identifier) { |
- origin_identifier_ = origin_identifier; |
- } |
- void SetDatabaseSize(const base::string16& database_name, int64 new_size) { |
- int64 old_size = 0; |
- if (database_info_.find(database_name) != database_info_.end()) |
- old_size = database_info_[database_name].first; |
- database_info_[database_name].first = new_size; |
- if (new_size != old_size) |
- total_size_ += new_size - old_size; |
- } |
- void SetDatabaseDescription(const base::string16& database_name, |
- const base::string16& description) { |
- database_info_[database_name].second = description; |
- } |
- }; |
- |
- // virtual for unit-testing only. |
- virtual ~DatabaseTracker(); |
- |
- // Deletes the directory that stores all DBs in incognito mode, if it exists. |
- void DeleteIncognitoDBDirectory(); |
- |
- // Deletes session-only databases. Blocks databases from being created/opened. |
- void ClearSessionOnlyOrigins(); |
- |
- bool DeleteClosedDatabase(const std::string& origin_identifier, |
- const base::string16& database_name); |
- |
- // Delete all files belonging to the given origin given that no database |
- // connections within this origin are open, or if |force| is true, delete |
- // the meta data and rename the associated directory. |
- bool DeleteOrigin(const std::string& origin_identifier, bool force); |
- void DeleteDatabaseIfNeeded(const std::string& origin_identifier, |
- const base::string16& database_name); |
- |
- bool LazyInit(); |
- bool UpgradeToCurrentVersion(); |
- void InsertOrUpdateDatabaseDetails(const std::string& origin_identifier, |
- const base::string16& database_name, |
- const base::string16& database_details, |
- int64 estimated_size); |
- |
- void ClearAllCachedOriginInfo(); |
- CachedOriginInfo* MaybeGetCachedOriginInfo( |
- const std::string& origin_identifier, |
- bool create_if_needed); |
- CachedOriginInfo* GetCachedOriginInfo( |
- const std::string& origin_identifier) { |
- return MaybeGetCachedOriginInfo(origin_identifier, true); |
- } |
- |
- int64 GetDBFileSize(const std::string& origin_identifier, |
- const base::string16& database_name); |
- int64 SeedOpenDatabaseInfo(const std::string& origin_identifier, |
- const base::string16& database_name, |
- const base::string16& description); |
- int64 UpdateOpenDatabaseInfoAndNotify(const std::string& origin_identifier, |
- const base::string16& database_name, |
- const base::string16* opt_description); |
- int64 UpdateOpenDatabaseSizeAndNotify(const std::string& origin_identifier, |
- const base::string16& database_name) { |
- return UpdateOpenDatabaseInfoAndNotify( |
- origin_identifier, database_name, NULL); |
- } |
- |
- |
- void ScheduleDatabaseForDeletion(const std::string& origin_identifier, |
- const base::string16& database_name); |
- // Schedule a set of open databases for deletion. If non-null, callback is |
- // invoked upon completion. |
- void ScheduleDatabasesForDeletion(const DatabaseSet& databases, |
- const net::CompletionCallback& callback); |
- |
- // Returns the directory where all DB files for the given origin are stored. |
- base::string16 GetOriginDirectory(const std::string& origin_identifier); |
- |
- bool is_initialized_; |
- const bool is_incognito_; |
- bool force_keep_session_state_; |
- bool shutting_down_; |
- const base::FilePath profile_path_; |
- const base::FilePath db_dir_; |
- scoped_ptr<sql::Connection> db_; |
- scoped_ptr<DatabasesTable> databases_table_; |
- scoped_ptr<sql::MetaTable> meta_table_; |
- ObserverList<Observer, true> observers_; |
- std::map<std::string, CachedOriginInfo> origins_info_map_; |
- DatabaseConnections database_connections_; |
- |
- // The set of databases that should be deleted but are still opened |
- DatabaseSet dbs_to_be_deleted_; |
- PendingDeletionCallbacks deletion_callbacks_; |
- |
- // Apps and Extensions can have special rights. |
- scoped_refptr<storage::SpecialStoragePolicy> special_storage_policy_; |
- |
- scoped_refptr<storage::QuotaManagerProxy> quota_manager_proxy_; |
- |
- // The database tracker thread we're supposed to run file IO on. |
- scoped_refptr<base::MessageLoopProxy> db_tracker_thread_; |
- |
- // When in incognito mode, store a DELETE_ON_CLOSE handle to each |
- // main DB and journal file that was accessed. When the incognito profile |
- // goes away (or when the browser crashes), all these handles will be |
- // closed, and the files will be deleted. |
- FileHandlesMap incognito_file_handles_; |
- |
- // In a non-incognito profile, all DBs in an origin are stored in a directory |
- // named after the origin. In an incognito profile though, we do not want the |
- // directory structure to reveal the origins visited by the user (in case the |
- // browser process crashes and those directories are not deleted). So we use |
- // this map to assign directory names that do not reveal this information. |
- OriginDirectoriesMap incognito_origin_directories_; |
- int incognito_origin_directories_generator_; |
- |
- FRIEND_TEST_ALL_PREFIXES(DatabaseTracker, TestHelper); |
-}; |
- |
-} // namespace storage |
- |
-#endif // WEBKIT_BROWSER_DATABASE_DATABASE_TRACKER_H_ |
+#include "storage/browser/database/database_tracker.h" |