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 7001014: More Quota WebSQLDatabase integration. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: did_some_todos 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 22 matching lines...) Expand all
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 void DatabaseConnections::AddConnection(const string16& origin_identifier,
42 const string16& database_name) { 42 const string16& database_name) {
43 connections_[origin_identifier][database_name]++; 43 connections_[origin_identifier][database_name].first++;
44 } 44 }
45 45
46 void DatabaseConnections::RemoveConnection(const string16& origin_identifier, 46 void DatabaseConnections::RemoveConnection(const string16& origin_identifier,
47 const string16& database_name) { 47 const string16& database_name) {
48 RemoveConnectionsHelper(origin_identifier, database_name, 1); 48 RemoveConnectionsHelper(origin_identifier, database_name, 1);
49 } 49 }
50 50
51 void DatabaseConnections::RemoveAllConnections() { 51 void DatabaseConnections::RemoveAllConnections() {
52 connections_.clear(); 52 connections_.clear();
53 } 53 }
54 54
55 void DatabaseConnections::RemoveConnections( 55 void DatabaseConnections::RemoveConnections(
56 const DatabaseConnections& connections, 56 const DatabaseConnections& connections,
57 std::vector<std::pair<string16, string16> >* closed_dbs) { 57 std::vector<std::pair<string16, string16> >* closed_dbs) {
58 for (OriginConnections::const_iterator origin_it = 58 for (OriginConnections::const_iterator origin_it =
59 connections.connections_.begin(); 59 connections.connections_.begin();
60 origin_it != connections.connections_.end(); 60 origin_it != connections.connections_.end();
61 origin_it++) { 61 origin_it++) {
62 const DBConnections& db_connections = origin_it->second; 62 const DBConnections& db_connections = origin_it->second;
63 for (DBConnections::const_iterator db_it = db_connections.begin(); 63 for (DBConnections::const_iterator db_it = db_connections.begin();
64 db_it != db_connections.end(); db_it++) { 64 db_it != db_connections.end(); db_it++) {
65 RemoveConnectionsHelper(origin_it->first, db_it->first, db_it->second); 65 RemoveConnectionsHelper(origin_it->first, db_it->first,
66 db_it->second.first);
66 if (!IsDatabaseOpened(origin_it->first, db_it->first)) 67 if (!IsDatabaseOpened(origin_it->first, db_it->first))
67 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));
68 } 69 }
69 } 70 }
70 } 71 }
71 72
73 int64 DatabaseConnections::GetOpenDatabaseSize(
74 const string16& origin_identifier,
75 const string16& database_name) const {
76 DCHECK(IsDatabaseOpened(origin_identifier, database_name));
77 return connections_[origin_identifier][database_name].second;
78 }
79
80 void DatabaseConnections::SetOpenDatabaseSize(
81 const string16& origin_identifier,
82 const string16& database_name,
83 int64 size) {
84 DCHECK(IsDatabaseOpened(origin_identifier, database_name));
85 connections_[origin_identifier][database_name].second = size;
86 }
87
88 void DatabaseConnections::ListConnections(
89 std::vector<std::pair<string16, string16> > *list) const {
90 for (OriginConnections::const_iterator origin_it =
91 connections_.begin();
92 origin_it != connections_.end();
93 origin_it++) {
94 const DBConnections& db_connections = origin_it->second;
95 for (DBConnections::const_iterator db_it = db_connections.begin();
96 db_it != db_connections.end(); db_it++) {
97 list->push_back(std::make_pair(origin_it->first, db_it->first));
98 }
99 }
100 }
101
72 void DatabaseConnections::RemoveConnectionsHelper( 102 void DatabaseConnections::RemoveConnectionsHelper(
73 const string16& origin_identifier, 103 const string16& origin_identifier,
74 const string16& database_name, 104 const string16& database_name,
75 int num_connections) { 105 int num_connections) {
76 OriginConnections::iterator origin_iterator = 106 OriginConnections::iterator origin_iterator =
77 connections_.find(origin_identifier); 107 connections_.find(origin_identifier);
78 DCHECK(origin_iterator != connections_.end()); 108 DCHECK(origin_iterator != connections_.end());
79 DBConnections& db_connections = origin_iterator->second; 109 DBConnections& db_connections = origin_iterator->second;
80 int& count = db_connections[database_name]; 110 int& count = db_connections[database_name].first;
81 DCHECK(count >= num_connections); 111 DCHECK(count >= num_connections);
82 count -= num_connections; 112 count -= num_connections;
83 if (!count) { 113 if (!count) {
84 db_connections.erase(database_name); 114 db_connections.erase(database_name);
85 if (db_connections.empty()) 115 if (db_connections.empty())
86 connections_.erase(origin_iterator); 116 connections_.erase(origin_iterator);
87 } 117 }
88 } 118 }
89 119
90 DatabaseConnectionsWrapper::DatabaseConnectionsWrapper() 120 DatabaseConnectionsWrapper::DatabaseConnectionsWrapper()
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 origin_identifier, database_name)); 160 origin_identifier, database_name));
131 return; 161 return;
132 } 162 }
133 base::AutoLock auto_lock(open_connections_lock_); 163 base::AutoLock auto_lock(open_connections_lock_);
134 open_connections_.RemoveConnection(origin_identifier, database_name); 164 open_connections_.RemoveConnection(origin_identifier, database_name);
135 if (waiting_for_dbs_to_close_ && open_connections_.IsEmpty()) 165 if (waiting_for_dbs_to_close_ && open_connections_.IsEmpty())
136 MessageLoop::current()->Quit(); 166 MessageLoop::current()->Quit();
137 } 167 }
138 168
139 } // namespace webkit_database 169 } // namespace webkit_database
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698