Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(12)

Side by Side Diff: webkit/database/database_connections.cc

Issue 7056025: More WebSQLDatabase and QuotaManager integration. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698