Chromium Code Reviews| OLD | NEW | 
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "webkit/database/database_connections.h" | 5 #include "webkit/database/database_connections.h" | 
| 6 | 6 | 
| 7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" | 
| 8 #include "base/logging.h" | 8 #include "base/logging.h" | 
| 9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" | 
| 10 #include "base/message_loop_proxy.h" | 10 #include "base/message_loop_proxy.h" | 
| (...skipping 20 matching lines...) Expand all Loading... | |
| 31 return false; | 31 return false; | 
| 32 const DBConnections& origin_connections = origin_it->second; | 32 const DBConnections& origin_connections = origin_it->second; | 
| 33 return (origin_connections.find(database_name) != origin_connections.end()); | 33 return (origin_connections.find(database_name) != origin_connections.end()); | 
| 34 } | 34 } | 
| 35 | 35 | 
| 36 bool DatabaseConnections::IsOriginUsed( | 36 bool DatabaseConnections::IsOriginUsed( | 
| 37 const string16& origin_identifier) const { | 37 const string16& origin_identifier) const { | 
| 38 return (connections_.find(origin_identifier) != connections_.end()); | 38 return (connections_.find(origin_identifier) != connections_.end()); | 
| 39 } | 39 } | 
| 40 | 40 | 
| 41 void DatabaseConnections::AddConnection(const string16& origin_identifier, | 41 bool DatabaseConnections::AddConnection(const string16& origin_identifier, | 
| 42 const string16& database_name) { | 42 const string16& database_name) { | 
| 43 connections_[origin_identifier][database_name].first++; | 43 int& count = connections_[origin_identifier][database_name].first; | 
| 44 return ++count == 1; | |
| 
 
kinuko
2011/05/24 05:31:36
nit: extra space between return and ++count
 
michaeln
2011/05/25 01:28:06
Done.
 
 | |
| 44 } | 45 } | 
| 45 | 46 | 
| 46 void DatabaseConnections::RemoveConnection(const string16& origin_identifier, | 47 bool DatabaseConnections::RemoveConnection(const string16& origin_identifier, | 
| 47 const string16& database_name) { | 48 const string16& database_name) { | 
| 48 RemoveConnectionsHelper(origin_identifier, database_name, 1); | 49 return RemoveConnectionsHelper(origin_identifier, database_name, 1); | 
| 49 } | 50 } | 
| 50 | 51 | 
| 51 void DatabaseConnections::RemoveAllConnections() { | 52 void DatabaseConnections::RemoveAllConnections() { | 
| 52 connections_.clear(); | 53 connections_.clear(); | 
| 53 } | 54 } | 
| 54 | 55 | 
| 55 void DatabaseConnections::RemoveConnections( | 56 void DatabaseConnections::RemoveConnections( | 
| 56 const DatabaseConnections& connections, | 57 const DatabaseConnections& connections, | 
| 57 std::vector<std::pair<string16, string16> >* closed_dbs) { | 58 std::vector<std::pair<string16, string16> >* closed_dbs) { | 
| 58 for (OriginConnections::const_iterator origin_it = | 59 for (OriginConnections::const_iterator origin_it = | 
| 59 connections.connections_.begin(); | 60 connections.connections_.begin(); | 
| 60 origin_it != connections.connections_.end(); | 61 origin_it != connections.connections_.end(); | 
| 61 origin_it++) { | 62 origin_it++) { | 
| 62 const DBConnections& db_connections = origin_it->second; | 63 const DBConnections& db_connections = origin_it->second; | 
| 63 for (DBConnections::const_iterator db_it = db_connections.begin(); | 64 for (DBConnections::const_iterator db_it = db_connections.begin(); | 
| 64 db_it != db_connections.end(); db_it++) { | 65 db_it != db_connections.end(); db_it++) { | 
| 65 RemoveConnectionsHelper(origin_it->first, db_it->first, | 66 if (RemoveConnectionsHelper(origin_it->first, db_it->first, | 
| 66 db_it->second.first); | 67 db_it->second.first)) | 
| 67 if (!IsDatabaseOpened(origin_it->first, db_it->first)) | |
| 68 closed_dbs->push_back(std::make_pair(origin_it->first, db_it->first)); | 68 closed_dbs->push_back(std::make_pair(origin_it->first, db_it->first)); | 
| 69 } | 69 } | 
| 70 } | 70 } | 
| 71 } | 71 } | 
| 72 | 72 | 
| 73 int64 DatabaseConnections::GetOpenDatabaseSize( | 73 int64 DatabaseConnections::GetOpenDatabaseSize( | 
| 74 const string16& origin_identifier, | 74 const string16& origin_identifier, | 
| 75 const string16& database_name) const { | 75 const string16& database_name) const { | 
| 76 DCHECK(IsDatabaseOpened(origin_identifier, database_name)); | 76 DCHECK(IsDatabaseOpened(origin_identifier, database_name)); | 
| 77 return connections_[origin_identifier][database_name].second; | 77 return connections_[origin_identifier][database_name].second; | 
| (...skipping 14 matching lines...) Expand all Loading... | |
| 92 origin_it != connections_.end(); | 92 origin_it != connections_.end(); | 
| 93 origin_it++) { | 93 origin_it++) { | 
| 94 const DBConnections& db_connections = origin_it->second; | 94 const DBConnections& db_connections = origin_it->second; | 
| 95 for (DBConnections::const_iterator db_it = db_connections.begin(); | 95 for (DBConnections::const_iterator db_it = db_connections.begin(); | 
| 96 db_it != db_connections.end(); db_it++) { | 96 db_it != db_connections.end(); db_it++) { | 
| 97 list->push_back(std::make_pair(origin_it->first, db_it->first)); | 97 list->push_back(std::make_pair(origin_it->first, db_it->first)); | 
| 98 } | 98 } | 
| 99 } | 99 } | 
| 100 } | 100 } | 
| 101 | 101 | 
| 102 void DatabaseConnections::RemoveConnectionsHelper( | 102 bool DatabaseConnections::RemoveConnectionsHelper( | 
| 103 const string16& origin_identifier, | 103 const string16& origin_identifier, | 
| 104 const string16& database_name, | 104 const string16& database_name, | 
| 105 int num_connections) { | 105 int num_connections) { | 
| 106 OriginConnections::iterator origin_iterator = | 106 OriginConnections::iterator origin_iterator = | 
| 107 connections_.find(origin_identifier); | 107 connections_.find(origin_identifier); | 
| 108 DCHECK(origin_iterator != connections_.end()); | 108 DCHECK(origin_iterator != connections_.end()); | 
| 109 DBConnections& db_connections = origin_iterator->second; | 109 DBConnections& db_connections = origin_iterator->second; | 
| 110 int& count = db_connections[database_name].first; | 110 int& count = db_connections[database_name].first; | 
| 111 DCHECK(count >= num_connections); | 111 DCHECK(count >= num_connections); | 
| 112 count -= num_connections; | 112 count -= num_connections; | 
| 113 if (!count) { | 113 if (count) | 
| 114 db_connections.erase(database_name); | 114 return false; | 
| 115 if (db_connections.empty()) | 115 db_connections.erase(database_name); | 
| 116 connections_.erase(origin_iterator); | 116 if (db_connections.empty()) | 
| 117 } | 117 connections_.erase(origin_iterator); | 
| 118 return true; | |
| 118 } | 119 } | 
| 119 | 120 | 
| 120 DatabaseConnectionsWrapper::DatabaseConnectionsWrapper() | 121 DatabaseConnectionsWrapper::DatabaseConnectionsWrapper() | 
| 121 : waiting_for_dbs_to_close_(false), | 122 : waiting_for_dbs_to_close_(false), | 
| 122 main_thread_(base::MessageLoopProxy::CreateForCurrentThread()) { | 123 main_thread_(base::MessageLoopProxy::CreateForCurrentThread()) { | 
| 123 } | 124 } | 
| 124 | 125 | 
| 125 DatabaseConnectionsWrapper::~DatabaseConnectionsWrapper() { | 126 DatabaseConnectionsWrapper::~DatabaseConnectionsWrapper() { | 
| 126 } | 127 } | 
| 127 | 128 | 
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 160 origin_identifier, database_name)); | 161 origin_identifier, database_name)); | 
| 161 return; | 162 return; | 
| 162 } | 163 } | 
| 163 base::AutoLock auto_lock(open_connections_lock_); | 164 base::AutoLock auto_lock(open_connections_lock_); | 
| 164 open_connections_.RemoveConnection(origin_identifier, database_name); | 165 open_connections_.RemoveConnection(origin_identifier, database_name); | 
| 165 if (waiting_for_dbs_to_close_ && open_connections_.IsEmpty()) | 166 if (waiting_for_dbs_to_close_ && open_connections_.IsEmpty()) | 
| 166 MessageLoop::current()->Quit(); | 167 MessageLoop::current()->Quit(); | 
| 167 } | 168 } | 
| 168 | 169 | 
| 169 } // namespace webkit_database | 170 } // namespace webkit_database | 
| OLD | NEW |