OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "webkit/database/database_connections.h" |
| 6 |
| 7 #include "base/logging.h" |
| 8 |
| 9 namespace webkit_database { |
| 10 |
| 11 DatabaseConnections::DatabaseConnections() { |
| 12 } |
| 13 |
| 14 DatabaseConnections::~DatabaseConnections() { |
| 15 DCHECK(connections_.empty()); |
| 16 } |
| 17 |
| 18 bool DatabaseConnections::IsDatabaseOpened(const string16& origin_identifier, |
| 19 const string16& database_name) { |
| 20 OriginConnections::const_iterator origin_it = |
| 21 connections_.find(origin_identifier); |
| 22 if (origin_it == connections_.end()) |
| 23 return false; |
| 24 const DBConnections& origin_connections = origin_it->second; |
| 25 return (origin_connections.find(database_name) != origin_connections.end()); |
| 26 } |
| 27 |
| 28 bool DatabaseConnections::IsOriginUsed(const string16& origin_identifier) { |
| 29 return (connections_.find(origin_identifier) != connections_.end()); |
| 30 } |
| 31 |
| 32 void DatabaseConnections::AddConnection(const string16& origin_identifier, |
| 33 const string16& database_name) { |
| 34 connections_[origin_identifier][database_name]++; |
| 35 } |
| 36 |
| 37 void DatabaseConnections::RemoveConnection(const string16& origin_identifier, |
| 38 const string16& database_name) { |
| 39 RemoveConnectionsHelper(origin_identifier, database_name, 1); |
| 40 } |
| 41 |
| 42 void DatabaseConnections::RemoveAllConnections() { |
| 43 connections_.clear(); |
| 44 } |
| 45 |
| 46 void DatabaseConnections::RemoveConnections( |
| 47 const DatabaseConnections& connections) { |
| 48 for (OriginConnections::const_iterator origin_it = |
| 49 connections.connections_.begin(); |
| 50 origin_it != connections.connections_.end(); |
| 51 origin_it++) { |
| 52 const DBConnections& db_connections = origin_it->second; |
| 53 for (DBConnections::const_iterator db_it = db_connections.begin(); |
| 54 db_it != db_connections.end(); db_it++) { |
| 55 RemoveConnectionsHelper(origin_it->first, db_it->first, db_it->second); |
| 56 } |
| 57 } |
| 58 } |
| 59 |
| 60 void DatabaseConnections::RemoveConnectionsHelper( |
| 61 const string16& origin_identifier, |
| 62 const string16& database_name, |
| 63 int num_connections) { |
| 64 OriginConnections::iterator origin_iterator = |
| 65 connections_.find(origin_identifier); |
| 66 DCHECK(origin_iterator != connections_.end()); |
| 67 DBConnections& db_connections = origin_iterator->second; |
| 68 int& count = db_connections[database_name]; |
| 69 DCHECK(count >= num_connections); |
| 70 count -= num_connections; |
| 71 if (!count) { |
| 72 db_connections.erase(database_name); |
| 73 if (db_connections.empty()) |
| 74 connections_.erase(origin_iterator); |
| 75 } |
| 76 } |
| 77 |
| 78 } // namespace webkit_database |
OLD | NEW |