| Index: webkit/support/simple_database_system.cc
|
| ===================================================================
|
| --- webkit/support/simple_database_system.cc (revision 86348)
|
| +++ 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();
|
| +}
|
| +
|
| FilePath SimpleDatabaseSystem::GetFullFilePathForVfsFile(
|
| const string16& vfs_file_name) {
|
| DCHECK(db_thread_proxy_->BelongsToCurrentThread());
|
|
|