Index: webkit/tools/test_shell/simple_database_system.cc |
=================================================================== |
--- webkit/tools/test_shell/simple_database_system.cc (revision 31991) |
+++ webkit/tools/test_shell/simple_database_system.cc (working copy) |
@@ -13,9 +13,13 @@ |
#include "base/file_util.h" |
#include "base/platform_thread.h" |
#include "base/process_util.h" |
+#include "third_party/WebKit/WebKit/chromium/public/WebDatabase.h" |
+#include "third_party/WebKit/WebKit/chromium/public/WebString.h" |
+#include "webkit/database/database_util.h" |
#include "webkit/database/vfs_backend.h" |
-#include "webkit/glue/webkit_glue.h" |
+using webkit_database::DatabaseTracker; |
+using webkit_database::DatabaseUtil; |
using webkit_database::VfsBackend; |
SimpleDatabaseSystem* SimpleDatabaseSystem::instance_ = NULL; |
@@ -25,63 +29,48 @@ |
return instance_; |
} |
-SimpleDatabaseSystem::SimpleDatabaseSystem() |
- : hack_main_db_handle_(base::kInvalidPlatformFileValue) { |
+SimpleDatabaseSystem::SimpleDatabaseSystem() { |
temp_dir_.CreateUniqueTempDir(); |
+ db_tracker_ = new DatabaseTracker(temp_dir_.path()); |
DCHECK(!instance_); |
instance_ = this; |
} |
SimpleDatabaseSystem::~SimpleDatabaseSystem() { |
- base::ClosePlatformFile(hack_main_db_handle_); |
instance_ = NULL; |
} |
base::PlatformFile SimpleDatabaseSystem::OpenFile( |
- const FilePath& file_name, int desired_flags, |
+ const string16& vfs_file_name, int desired_flags, |
base::PlatformFile* dir_handle) { |
base::PlatformFile file_handle = base::kInvalidPlatformFileValue; |
+ FilePath file_name = |
+ DatabaseUtil::GetFullFilePathForVfsFile(db_tracker_, vfs_file_name); |
if (file_name.empty()) { |
VfsBackend::OpenTempFileInDirectory( |
- GetDBDir(), desired_flags, base::GetCurrentProcessHandle(), |
- &file_handle, dir_handle); |
+ db_tracker_->DatabaseDirectory(), desired_flags, |
+ base::GetCurrentProcessHandle(), &file_handle, dir_handle); |
} else { |
- VfsBackend::OpenFile(GetDBFileFullPath(file_name), desired_flags, |
+ VfsBackend::OpenFile(file_name, desired_flags, |
base::GetCurrentProcessHandle(), &file_handle, |
dir_handle); |
} |
- // HACK: Currently, the DB object that keeps track of the main database |
- // (DatabaseTracker) is a singleton that is declared as a static variable |
- // in a function, so it gets destroyed at the very end of the program. |
- // Because of that, we have a handle opened to the main DB file until the |
- // very end of the program, which prevents temp_dir_'s destructor from |
- // deleting the database directory. |
- // |
- // We will properly solve this problem when we reimplement DatabaseTracker. |
- // For now, however, we are going to take advantage of the fact that in order |
- // to do anything related to DBs, we have to call openDatabase() first, which |
- // opens a handle to the main DB before opening handles to any other DB files. |
- // We are going to cache the first file handle we get, and we are going to |
- // manually close it in the destructor. |
- if (hack_main_db_handle_ == base::kInvalidPlatformFileValue) { |
- hack_main_db_handle_ = file_handle; |
- } |
- |
return file_handle; |
} |
int SimpleDatabaseSystem::DeleteFile( |
- const FilePath& file_name, bool sync_dir) { |
+ const string16& vfs_file_name, bool sync_dir) { |
// We try to delete the file multiple times, because that's what the default |
// VFS does (apparently deleting a file can sometimes fail on Windows). |
// We sleep for 10ms between retries for the same reason. |
const int kNumDeleteRetries = 3; |
int num_retries = 0; |
int error_code = SQLITE_OK; |
+ FilePath file_name = |
+ DatabaseUtil::GetFullFilePathForVfsFile(db_tracker_, vfs_file_name); |
do { |
- error_code = VfsBackend::DeleteFile( |
- GetDBFileFullPath(file_name), sync_dir); |
+ error_code = VfsBackend::DeleteFile(file_name, sync_dir); |
} while ((++num_retries < kNumDeleteRetries) && |
(error_code == SQLITE_IOERR_DELETE) && |
(PlatformThread::Sleep(10), 1)); |
@@ -89,25 +78,65 @@ |
return error_code; |
} |
-long SimpleDatabaseSystem::GetFileAttributes( |
- const FilePath& file_name) { |
- return VfsBackend::GetFileAttributes(GetDBFileFullPath(file_name)); |
+long SimpleDatabaseSystem::GetFileAttributes(const string16& vfs_file_name) { |
+ return VfsBackend::GetFileAttributes( |
+ DatabaseUtil::GetFullFilePathForVfsFile(db_tracker_, vfs_file_name)); |
} |
-long long SimpleDatabaseSystem::GetFileSize( |
- const FilePath& file_name) { |
- return VfsBackend::GetFileSize(GetDBFileFullPath(file_name)); |
+long long SimpleDatabaseSystem::GetFileSize(const string16& vfs_file_name) { |
+ return VfsBackend::GetFileSize( |
+ DatabaseUtil::GetFullFilePathForVfsFile(db_tracker_, vfs_file_name)); |
} |
-void SimpleDatabaseSystem::ClearAllDatabases() { |
- // TODO(dumi): implement this once we refactor DatabaseTracker |
- //file_util::Delete(GetDBDir(), true); |
+void SimpleDatabaseSystem::DatabaseOpened(const string16& origin_identifier, |
+ const string16& database_name, |
+ const string16& description, |
+ int64 estimated_size) { |
+ int64 database_size = 0; |
+ int64 space_available = 0; |
+ db_tracker_->DatabaseOpened(origin_identifier, database_name, description, |
+ estimated_size, &database_size, &space_available); |
+ OnDatabaseSizeChanged(origin_identifier, database_name, |
+ database_size, space_available); |
} |
-FilePath SimpleDatabaseSystem::GetDBDir() { |
- return temp_dir_.path().Append(FILE_PATH_LITERAL("databases")); |
+void SimpleDatabaseSystem::DatabaseModified(const string16& origin_identifier, |
+ const string16& database_name) { |
+ db_tracker_->DatabaseModified(origin_identifier, database_name); |
} |
-FilePath SimpleDatabaseSystem::GetDBFileFullPath(const FilePath& file_name) { |
- return GetDBDir().Append(file_name); |
+void SimpleDatabaseSystem::DatabaseClosed(const string16& origin_identifier, |
+ const string16& database_name) { |
+ db_tracker_->DatabaseClosed(origin_identifier, database_name); |
} |
+ |
+void SimpleDatabaseSystem::OnDatabaseSizeChanged( |
+ const string16& origin_identifier, |
+ const string16& database_name, |
+ int64 database_size, |
+ int64 space_available) { |
+ WebKit::WebDatabase::updateDatabaseSize( |
+ origin_identifier, database_name, database_size, space_available); |
+} |
+ |
+void SimpleDatabaseSystem::databaseOpened(const WebKit::WebDatabase& database) { |
+ DatabaseOpened(database.securityOrigin().databaseIdentifier(), |
+ database.name(), database.displayName(), |
+ database.estimatedSize()); |
+} |
+ |
+void SimpleDatabaseSystem::databaseModified( |
+ const WebKit::WebDatabase& database) { |
+ DatabaseModified(database.securityOrigin().databaseIdentifier(), |
+ database.name()); |
+} |
+ |
+void SimpleDatabaseSystem::databaseClosed(const WebKit::WebDatabase& database) { |
+ DatabaseClosed(database.securityOrigin().databaseIdentifier(), |
+ database.name()); |
+} |
+ |
+void SimpleDatabaseSystem::ClearAllDatabases() { |
+ db_tracker_->CloseTrackerDatabaseAndClearCaches(); |
+ file_util::Delete(db_tracker_->DatabaseDirectory(), true); |
+} |