| Index: chrome/browser/renderer_host/database_dispatcher_host.cc
|
| ===================================================================
|
| --- chrome/browser/renderer_host/database_dispatcher_host.cc (revision 35502)
|
| +++ chrome/browser/renderer_host/database_dispatcher_host.cc (working copy)
|
| @@ -67,6 +67,12 @@
|
|
|
| void DatabaseDispatcherHost::RemoveObserver() {
|
| DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE));
|
| +
|
| + // If the renderer process died without closing all databases,
|
| + // then we need to manually close those connections
|
| + db_tracker_->CloseDatabases(database_connections_);
|
| + database_connections_.RemoveAllConnections();
|
| +
|
| db_tracker_->RemoveObserver(this);
|
| }
|
|
|
| @@ -305,7 +311,7 @@
|
| DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE));
|
| int64 database_size = 0;
|
| int64 space_available = 0;
|
| - AddAccessedOrigin(origin_identifier);
|
| + database_connections_.AddConnection(origin_identifier, database_name);
|
| db_tracker_->DatabaseOpened(origin_identifier, database_name, description,
|
| estimated_size, &database_size, &space_available);
|
| ChromeThread::PostTask(
|
| @@ -331,7 +337,8 @@
|
| void DatabaseDispatcherHost::DatabaseModified(const string16& origin_identifier,
|
| const string16& database_name) {
|
| DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE));
|
| - if (!HasAccessedOrigin(origin_identifier)) {
|
| + if (!database_connections_.IsDatabaseOpened(
|
| + origin_identifier, database_name)) {
|
| ReceivedBadMessage(ViewHostMsg_DatabaseModified::ID);
|
| return;
|
| }
|
| @@ -352,12 +359,14 @@
|
| void DatabaseDispatcherHost::DatabaseClosed(const string16& origin_identifier,
|
| const string16& database_name) {
|
| DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE));
|
| - if (!HasAccessedOrigin(origin_identifier)) {
|
| + if (!database_connections_.IsDatabaseOpened(
|
| + origin_identifier, database_name)) {
|
| ReceivedBadMessage(ViewHostMsg_DatabaseClosed::ID);
|
| return;
|
| }
|
|
|
| db_tracker_->DatabaseClosed(origin_identifier, database_name);
|
| + database_connections_.RemoveConnection(origin_identifier, database_name);
|
| }
|
|
|
| void DatabaseDispatcherHost::OnDatabaseSizeChanged(
|
| @@ -366,7 +375,7 @@
|
| int64 database_size,
|
| int64 space_available) {
|
| DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE));
|
| - if (HasAccessedOrigin(origin_identifier)) {
|
| + if (database_connections_.IsOriginUsed(origin_identifier)) {
|
| ChromeThread::PostTask(
|
| ChromeThread::IO, FROM_HERE,
|
| NewRunnableMethod(this,
|
| @@ -376,15 +385,3 @@
|
| database_size, space_available)));
|
| }
|
| }
|
| -
|
| -void DatabaseDispatcherHost::AddAccessedOrigin(
|
| - const string16& origin_identifier) {
|
| - DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE));
|
| - accessed_origins_.insert(origin_identifier);
|
| -}
|
| -
|
| -bool DatabaseDispatcherHost::HasAccessedOrigin(
|
| - const string16& origin_identifier) {
|
| - DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE));
|
| - return (accessed_origins_.find(origin_identifier) != accessed_origins_.end());
|
| -}
|
|
|