diff options
Diffstat (limited to 'webkit/tools/test_shell/simple_database_system.cc')
-rw-r--r-- | webkit/tools/test_shell/simple_database_system.cc | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/webkit/tools/test_shell/simple_database_system.cc b/webkit/tools/test_shell/simple_database_system.cc index 2b9afe3..a2cd8e3 100644 --- a/webkit/tools/test_shell/simple_database_system.cc +++ b/webkit/tools/test_shell/simple_database_system.cc @@ -10,7 +10,9 @@ #include "third_party/sqlite/preprocessed/sqlite3.h" #endif +#include "base/auto_reset.h" #include "base/file_util.h" +#include "base/message_loop.h" #include "base/platform_thread.h" #include "base/process_util.h" #include "third_party/WebKit/WebKit/chromium/public/WebDatabase.h" @@ -29,14 +31,17 @@ SimpleDatabaseSystem* SimpleDatabaseSystem::GetInstance() { return instance_; } -SimpleDatabaseSystem::SimpleDatabaseSystem() { +SimpleDatabaseSystem::SimpleDatabaseSystem() + : waiting_for_dbs_to_close_(false) { temp_dir_.CreateUniqueTempDir(); db_tracker_ = new DatabaseTracker(temp_dir_.path()); + db_tracker_->AddObserver(this); DCHECK(!instance_); instance_ = this; } SimpleDatabaseSystem::~SimpleDatabaseSystem() { + db_tracker_->RemoveObserver(this); instance_ = NULL; } @@ -113,6 +118,9 @@ void SimpleDatabaseSystem::DatabaseClosed(const string16& origin_identifier, origin_identifier, database_name)); db_tracker_->DatabaseClosed(origin_identifier, database_name); database_connections_.RemoveConnection(origin_identifier, database_name); + + if (waiting_for_dbs_to_close_ && database_connections_.IsEmpty()) + MessageLoop::current()->PostTask(FROM_HERE, new MessageLoop::QuitTask()); } void SimpleDatabaseSystem::OnDatabaseSizeChanged( @@ -144,13 +152,22 @@ void SimpleDatabaseSystem::databaseClosed(const WebKit::WebDatabase& database) { } void SimpleDatabaseSystem::ClearAllDatabases() { - db_tracker_->CloseDatabases(database_connections_); - database_connections_.RemoveAllConnections(); + // Wait for all databases to be closed. + if (!database_connections_.IsEmpty()) { + AutoReset waiting_for_dbs_auto_reset(&waiting_for_dbs_to_close_, true); + MessageLoop::ScopedNestableTaskAllower nestable(MessageLoop::current()); + MessageLoop::current()->Run(); + } + db_tracker_->CloseTrackerDatabaseAndClearCaches(); file_util::Delete(db_tracker_->DatabaseDirectory(), true); file_names_.clear(); } +void SimpleDatabaseSystem::SetDatabaseQuota(int64 quota) { + db_tracker_->SetDefaultQuota(quota); +} + void SimpleDatabaseSystem::SetFullFilePathsForVfsFile( const string16& origin_identifier, const string16& database_name) { |