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

Side by Side Diff: webkit/appcache/appcache_database.cc

Issue 7031065: AppCache + Quota integration (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 6 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
« no previous file with comments | « webkit/appcache/appcache_database.h ('k') | webkit/appcache/appcache_database_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/appcache/appcache_database.h" 5 #include "webkit/appcache/appcache_database.h"
6 6
7 #include "app/sql/connection.h" 7 #include "app/sql/connection.h"
8 #include "app/sql/diagnostic_error_delegate.h" 8 #include "app/sql/diagnostic_error_delegate.h"
9 #include "app/sql/meta_table.h" 9 #include "app/sql/meta_table.h"
10 #include "app/sql/statement.h" 10 #include "app/sql/statement.h"
11 #include "app/sql/transaction.h" 11 #include "app/sql/transaction.h"
12 #include "base/auto_reset.h" 12 #include "base/auto_reset.h"
13 #include "base/file_util.h" 13 #include "base/file_util.h"
14 #include "base/logging.h" 14 #include "base/logging.h"
15 #include "base/utf_string_conversions.h" 15 #include "base/utf_string_conversions.h"
16 #include "webkit/appcache/appcache_entry.h" 16 #include "webkit/appcache/appcache_entry.h"
17 #include "webkit/appcache/appcache_histograms.h" 17 #include "webkit/appcache/appcache_histograms.h"
18 #include "webkit/database/quota_table.h"
19 18
20 // Schema ------------------------------------------------------------------- 19 // Schema -------------------------------------------------------------------
21 namespace { 20 namespace {
22 21
23 const int kCurrentVersion = 3; 22 const int kCurrentVersion = 3;
24 const int kCompatibleVersion = 3; 23 const int kCompatibleVersion = 3;
25 24
26 const char* kGroupsTable = "Groups"; 25 const char* kGroupsTable = "Groups";
27 const char* kCachesTable = "Caches"; 26 const char* kCachesTable = "Caches";
28 const char* kEntriesTable = "Entries"; 27 const char* kEntriesTable = "Entries";
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 188
190 int64 origin_usage = 0; 189 int64 origin_usage = 0;
191 std::vector<CacheRecord>::const_iterator iter = records.begin(); 190 std::vector<CacheRecord>::const_iterator iter = records.begin();
192 while (iter != records.end()) { 191 while (iter != records.end()) {
193 origin_usage += iter->cache_size; 192 origin_usage += iter->cache_size;
194 ++iter; 193 ++iter;
195 } 194 }
196 return origin_usage; 195 return origin_usage;
197 } 196 }
198 197
199 int64 AppCacheDatabase::GetOriginQuota(const GURL& origin) { 198 bool AppCacheDatabase::GetAllOriginUsage(std::map<GURL, int64>* usage_map) {
200 if (!LazyOpen(false)) 199 std::set<GURL> origins;
201 return GetDefaultOriginQuota(); 200 if (!FindOriginsWithGroups(&origins))
202 int64 quota = quota_table_->GetOriginQuota( 201 return false;
203 UTF8ToUTF16(origin.spec().c_str())); 202 for (std::set<GURL>::const_iterator origin = origins.begin();
204 return (quota >= 0) ? quota : GetDefaultOriginQuota(); 203 origin != origins.end(); ++origin) {
204 (*usage_map)[*origin] = GetOriginUsage(*origin);
205 }
206 return true;
205 } 207 }
206 208
207 bool AppCacheDatabase::FindOriginsWithGroups(std::set<GURL>* origins) { 209 bool AppCacheDatabase::FindOriginsWithGroups(std::set<GURL>* origins) {
208 DCHECK(origins && origins->empty()); 210 DCHECK(origins && origins->empty());
209 if (!LazyOpen(false)) 211 if (!LazyOpen(false))
210 return false; 212 return false;
211 213
212 const char* kSql = 214 const char* kSql =
213 "SELECT DISTINCT(origin) FROM Groups"; 215 "SELECT DISTINCT(origin) FROM Groups";
214 216
(...skipping 782 matching lines...) Expand 10 before | Expand all | Expand 10 after
997 999
998 // Avoid creating a database at all if we can. 1000 // Avoid creating a database at all if we can.
999 bool use_in_memory_db = db_file_path_.empty(); 1001 bool use_in_memory_db = db_file_path_.empty();
1000 if (!create_if_needed && 1002 if (!create_if_needed &&
1001 (use_in_memory_db || !file_util::PathExists(db_file_path_))) { 1003 (use_in_memory_db || !file_util::PathExists(db_file_path_))) {
1002 return false; 1004 return false;
1003 } 1005 }
1004 1006
1005 db_.reset(new sql::Connection); 1007 db_.reset(new sql::Connection);
1006 meta_table_.reset(new sql::MetaTable); 1008 meta_table_.reset(new sql::MetaTable);
1007 quota_table_.reset(new webkit_database::QuotaTable(db_.get()));
1008 1009
1009 db_->set_error_delegate(GetErrorHandlerForAppCacheDb()); 1010 db_->set_error_delegate(GetErrorHandlerForAppCacheDb());
1010 1011
1011 bool opened = false; 1012 bool opened = false;
1012 if (use_in_memory_db) { 1013 if (use_in_memory_db) {
1013 opened = db_->OpenInMemory(); 1014 opened = db_->OpenInMemory();
1014 } else if (!file_util::CreateDirectory(db_file_path_.DirName())) { 1015 } else if (!file_util::CreateDirectory(db_file_path_.DirName())) {
1015 LOG(ERROR) << "Failed to create appcache directory."; 1016 LOG(ERROR) << "Failed to create appcache directory.";
1016 } else { 1017 } else {
1017 opened = db_->Open(db_file_path_); 1018 opened = db_->Open(db_file_path_);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1062 #endif 1063 #endif
1063 1064
1064 return true; 1065 return true;
1065 } 1066 }
1066 1067
1067 bool AppCacheDatabase::CreateSchema() { 1068 bool AppCacheDatabase::CreateSchema() {
1068 sql::Transaction transaction(db_.get()); 1069 sql::Transaction transaction(db_.get());
1069 if (!transaction.Begin()) 1070 if (!transaction.Begin())
1070 return false; 1071 return false;
1071 1072
1072 if (!meta_table_->Init(db_.get(), kCurrentVersion, kCompatibleVersion) || 1073 if (!meta_table_->Init(db_.get(), kCurrentVersion, kCompatibleVersion))
1073 !quota_table_->Init()) {
1074 return false; 1074 return false;
1075 }
1076 1075
1077 for (int i = 0; i < kTableCount; ++i) { 1076 for (int i = 0; i < kTableCount; ++i) {
1078 std::string sql("CREATE TABLE "); 1077 std::string sql("CREATE TABLE ");
1079 sql += kTables[i].table_name; 1078 sql += kTables[i].table_name;
1080 sql += kTables[i].columns; 1079 sql += kTables[i].columns;
1081 if (!db_->Execute(sql.c_str())) 1080 if (!db_->Execute(sql.c_str()))
1082 return false; 1081 return false;
1083 } 1082 }
1084 1083
1085 for (int i = 0; i < kIndexCount; ++i) { 1084 for (int i = 0; i < kIndexCount; ++i) {
(...skipping 15 matching lines...) Expand all
1101 1100
1102 bool AppCacheDatabase::UpgradeSchema() { 1101 bool AppCacheDatabase::UpgradeSchema() {
1103 // Upgrade logic goes here 1102 // Upgrade logic goes here
1104 1103
1105 // If there is no upgrade path for the version on disk to the current 1104 // If there is no upgrade path for the version on disk to the current
1106 // version, nuke everything and start over. 1105 // version, nuke everything and start over.
1107 return DeleteExistingAndCreateNewDatabase(); 1106 return DeleteExistingAndCreateNewDatabase();
1108 } 1107 }
1109 1108
1110 void AppCacheDatabase::ResetConnectionAndTables() { 1109 void AppCacheDatabase::ResetConnectionAndTables() {
1111 quota_table_.reset();
1112 meta_table_.reset(); 1110 meta_table_.reset();
1113 db_.reset(); 1111 db_.reset();
1114 } 1112 }
1115 1113
1116 bool AppCacheDatabase::DeleteExistingAndCreateNewDatabase() { 1114 bool AppCacheDatabase::DeleteExistingAndCreateNewDatabase() {
1117 DCHECK(!db_file_path_.empty()); 1115 DCHECK(!db_file_path_.empty());
1118 DCHECK(file_util::PathExists(db_file_path_)); 1116 DCHECK(file_util::PathExists(db_file_path_));
1119 VLOG(1) << "Deleting existing appcache data and starting over."; 1117 VLOG(1) << "Deleting existing appcache data and starting over.";
1120 1118
1121 ResetConnectionAndTables(); 1119 ResetConnectionAndTables();
(...skipping 11 matching lines...) Expand all
1133 1131
1134 // So we can't go recursive. 1132 // So we can't go recursive.
1135 if (is_recreating_) 1133 if (is_recreating_)
1136 return false; 1134 return false;
1137 1135
1138 AutoReset<bool> auto_reset(&is_recreating_, true); 1136 AutoReset<bool> auto_reset(&is_recreating_, true);
1139 return LazyOpen(true); 1137 return LazyOpen(true);
1140 } 1138 }
1141 1139
1142 } // namespace appcache 1140 } // namespace appcache
OLDNEW
« no previous file with comments | « webkit/appcache/appcache_database.h ('k') | webkit/appcache/appcache_database_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698