diff options
Diffstat (limited to 'chrome/browser/renderer_host/database_dispatcher_host.cc')
-rw-r--r-- | chrome/browser/renderer_host/database_dispatcher_host.cc | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/chrome/browser/renderer_host/database_dispatcher_host.cc b/chrome/browser/renderer_host/database_dispatcher_host.cc index d72ca06..a57244a 100644 --- a/chrome/browser/renderer_host/database_dispatcher_host.cc +++ b/chrome/browser/renderer_host/database_dispatcher_host.cc @@ -196,17 +196,22 @@ void DatabaseDispatcherHost::DatabaseOpenFile(const string16& vfs_file_name, DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE)); base::PlatformFile target_handle = base::kInvalidPlatformFileValue; base::PlatformFile target_dir_handle = base::kInvalidPlatformFileValue; + string16 origin_identifier; + string16 database_name; if (vfs_file_name.empty()) { VfsBackend::OpenTempFileInDirectory(db_tracker_->DatabaseDirectory(), desired_flags, process_handle_, &target_handle, &target_dir_handle); - } else { - FilePath db_file = - DatabaseUtil::GetFullFilePathForVfsFile(db_tracker_, vfs_file_name); - if (!db_file.empty()) { - VfsBackend::OpenFile(db_file, desired_flags, process_handle_, - &target_handle, &target_dir_handle); - } + } else if (DatabaseUtil::CrackVfsFileName(vfs_file_name, &origin_identifier, + &database_name, NULL) && + !db_tracker_->IsDatabaseScheduledForDeletion(origin_identifier, + database_name)) { + FilePath db_file = + DatabaseUtil::GetFullFilePathForVfsFile(db_tracker_, vfs_file_name); + if (!db_file.empty()) { + VfsBackend::OpenFile(db_file, desired_flags, process_handle_, + &target_handle, &target_dir_handle); + } } ViewMsg_DatabaseOpenFileResponse_Params response_params; @@ -430,6 +435,18 @@ void DatabaseDispatcherHost::OnDatabaseSizeChanged( } } +void DatabaseDispatcherHost::OnDatabaseScheduledForDeletion( + const string16& origin_identifier, + const string16& database_name) { + DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE)); + ChromeThread::PostTask( + ChromeThread::IO, FROM_HERE, + NewRunnableMethod(this, + &DatabaseDispatcherHost::SendMessage, + new ViewMsg_DatabaseCloseImmediately( + origin_identifier, database_name))); +} + void DatabaseDispatcherHost::OnDatabaseOpenFileAllowed( const string16& vfs_file_name, int desired_flags, int32 message_id) { DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO)); |