Chromium Code Reviews| Index: webkit/support/simple_database_system.cc |
| =================================================================== |
| --- webkit/support/simple_database_system.cc (revision 85641) |
| +++ webkit/support/simple_database_system.cc (working copy) |
| @@ -19,6 +19,7 @@ |
| using webkit_database::DatabaseTracker; |
| using webkit_database::DatabaseUtil; |
| +using webkit_database::OriginInfo; |
| using webkit_database::VfsBackend; |
| SimpleDatabaseSystem* SimpleDatabaseSystem::instance_ = NULL; |
| @@ -30,6 +31,7 @@ |
| SimpleDatabaseSystem::SimpleDatabaseSystem() |
| : db_thread_("SimpleDBThread"), |
| + quota_per_origin_(5 * 1024 * 1024), |
| open_connections_(new webkit_database::DatabaseConnectionsWrapper) { |
| DCHECK(!instance_); |
| instance_ = this; |
| @@ -120,6 +122,17 @@ |
| return result; |
| } |
| +int64 SimpleDatabaseSystem::GetSpaceAvailable( |
| + const string16& origin_identifier) { |
| + int64 result = 0; |
| + base::WaitableEvent done_event(false, false); |
| + db_thread_proxy_->PostTask(FROM_HERE, |
| + NewRunnableMethod(this, &SimpleDatabaseSystem::VfsGetSpaceAvailable, |
| + origin_identifier, &result, &done_event)); |
| + done_event.Wait(); |
| + return result; |
| +} |
| + |
| void SimpleDatabaseSystem::ClearAllDatabases() { |
| open_connections_->WaitForAllDatabasesToClose(); |
| db_thread_proxy_->PostTask(FROM_HERE, |
| @@ -133,7 +146,7 @@ |
| quota)); |
| return; |
| } |
| - db_tracker_->SetDefaultQuota(quota); |
| + quota_per_origin_ = quota; |
| } |
| void SimpleDatabaseSystem::DatabaseOpened(const string16& origin_identifier, |
| @@ -142,12 +155,12 @@ |
| int64 estimated_size) { |
| DCHECK(db_thread_proxy_->BelongsToCurrentThread()); |
| int64 database_size = 0; |
| - int64 space_available = 0; |
| + int64 space_available_not_used = 0; |
| db_tracker_->DatabaseOpened( |
| origin_identifier, database_name, description, |
| - estimated_size, &database_size, &space_available); |
| + estimated_size, &database_size, &space_available_not_used); |
| OnDatabaseSizeChanged(origin_identifier, database_name, |
| - database_size, space_available); |
| + database_size, 0); |
| } |
| void SimpleDatabaseSystem::DatabaseModified(const string16& origin_identifier, |
| @@ -167,13 +180,13 @@ |
| const string16& origin_identifier, |
| const string16& database_name, |
| int64 database_size, |
| - int64 space_available) { |
| + int64 space_available_not_used) { |
| DCHECK(db_thread_proxy_->BelongsToCurrentThread()); |
| // We intentionally call into webkit on our background db_thread_ |
| // to better emulate what happens in chrome where this method is |
| // invoked on the background ipc thread. |
| WebKit::WebDatabase::updateDatabaseSize( |
| - origin_identifier, database_name, database_size, space_available); |
| + origin_identifier, database_name, database_size); |
| } |
| void SimpleDatabaseSystem::OnDatabaseScheduledForDeletion( |
| @@ -238,6 +251,23 @@ |
| done_event->Signal(); |
| } |
| +void SimpleDatabaseSystem::VfsGetSpaceAvailable( |
| + const string16& origin_identifier, |
| + int64* result, base::WaitableEvent* done_event) { |
| + DCHECK(db_thread_proxy_->BelongsToCurrentThread()); |
| + // This method isn't actually part of the "vfs" interface, but it is |
| + // used from within webcore and handled here in the same fashion. |
| + OriginInfo info; |
| + if (db_tracker_->GetOriginInfo(origin_identifier, &info)) { |
| + int64 space_available = quota_per_origin_ - info.TotalSize(); |
| + *result = space_available < 0 ? 0 : space_available; |
| + } else { |
| + NOTREACHED(); |
| + *result = 0; |
| + } |
| + done_event->Signal(); |
|
darin (slow to review)
2011/05/24 04:56:11
are you sure it is safe to delete done_event befor
michaeln
2011/05/24 05:10:54
right... i remember that too... i'll check, the ot
|
| +} |
| + |
| FilePath SimpleDatabaseSystem::GetFullFilePathForVfsFile( |
| const string16& vfs_file_name) { |
| DCHECK(db_thread_proxy_->BelongsToCurrentThread()); |