| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/browser/indexed_db/indexed_db_context_impl.h" | 5 #include "content/browser/indexed_db/indexed_db_context_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 155 idb_directory, | 155 idb_directory, |
| 156 connection_count)); | 156 connection_count)); |
| 157 } | 157 } |
| 158 return result; | 158 return result; |
| 159 } | 159 } |
| 160 | 160 |
| 161 static bool HostNameComparator(const GURL& i, const GURL& j) { | 161 static bool HostNameComparator(const GURL& i, const GURL& j) { |
| 162 return i.host() < j.host(); | 162 return i.host() < j.host(); |
| 163 } | 163 } |
| 164 | 164 |
| 165 ListValue* IndexedDBContextImpl::GetAllOriginsDetails() { | 165 base::ListValue* IndexedDBContextImpl::GetAllOriginsDetails() { |
| 166 DCHECK(TaskRunner()->RunsTasksOnCurrentThread()); | 166 DCHECK(TaskRunner()->RunsTasksOnCurrentThread()); |
| 167 std::vector<GURL> origins = GetAllOrigins(); | 167 std::vector<GURL> origins = GetAllOrigins(); |
| 168 | 168 |
| 169 std::sort(origins.begin(), origins.end(), HostNameComparator); | 169 std::sort(origins.begin(), origins.end(), HostNameComparator); |
| 170 | 170 |
| 171 scoped_ptr<ListValue> list(new ListValue()); | 171 scoped_ptr<base::ListValue> list(new base::ListValue()); |
| 172 for (std::vector<GURL>::const_iterator iter = origins.begin(); | 172 for (std::vector<GURL>::const_iterator iter = origins.begin(); |
| 173 iter != origins.end(); | 173 iter != origins.end(); |
| 174 ++iter) { | 174 ++iter) { |
| 175 const GURL& origin_url = *iter; | 175 const GURL& origin_url = *iter; |
| 176 | 176 |
| 177 scoped_ptr<DictionaryValue> info(new DictionaryValue()); | 177 scoped_ptr<base::DictionaryValue> info(new base::DictionaryValue()); |
| 178 info->SetString("url", origin_url.spec()); | 178 info->SetString("url", origin_url.spec()); |
| 179 info->SetString("size", ui::FormatBytes(GetOriginDiskUsage(origin_url))); | 179 info->SetString("size", ui::FormatBytes(GetOriginDiskUsage(origin_url))); |
| 180 info->SetDouble("last_modified", | 180 info->SetDouble("last_modified", |
| 181 GetOriginLastModified(origin_url).ToJsTime()); | 181 GetOriginLastModified(origin_url).ToJsTime()); |
| 182 info->SetString("path", GetFilePath(origin_url).value()); | 182 info->SetString("path", GetFilePath(origin_url).value()); |
| 183 info->SetDouble("connection_count", GetConnectionCount(origin_url)); | 183 info->SetDouble("connection_count", GetConnectionCount(origin_url)); |
| 184 | 184 |
| 185 // This ends up being O(n^2) since we iterate over all open databases | 185 // This ends up being O(n^2) since we iterate over all open databases |
| 186 // to extract just those in the origin, and we're iterating over all | 186 // to extract just those in the origin, and we're iterating over all |
| 187 // origins in the outer loop. | 187 // origins in the outer loop. |
| 188 | 188 |
| 189 if (factory_) { | 189 if (factory_) { |
| 190 std::vector<IndexedDBDatabase*> databases = | 190 std::vector<IndexedDBDatabase*> databases = |
| 191 factory_->GetOpenDatabasesForOrigin(origin_url); | 191 factory_->GetOpenDatabasesForOrigin(origin_url); |
| 192 // TODO(jsbell): Sort by name? | 192 // TODO(jsbell): Sort by name? |
| 193 scoped_ptr<ListValue> database_list(new ListValue()); | 193 scoped_ptr<base::ListValue> database_list(new base::ListValue()); |
| 194 | 194 |
| 195 for (std::vector<IndexedDBDatabase*>::iterator it = databases.begin(); | 195 for (std::vector<IndexedDBDatabase*>::iterator it = databases.begin(); |
| 196 it != databases.end(); | 196 it != databases.end(); |
| 197 ++it) { | 197 ++it) { |
| 198 | 198 |
| 199 const IndexedDBDatabase* db = *it; | 199 const IndexedDBDatabase* db = *it; |
| 200 scoped_ptr<DictionaryValue> db_info(new DictionaryValue()); | 200 scoped_ptr<base::DictionaryValue> db_info(new base::DictionaryValue()); |
| 201 | 201 |
| 202 db_info->SetString("name", db->name()); | 202 db_info->SetString("name", db->name()); |
| 203 db_info->SetDouble("pending_opens", db->PendingOpenCount()); | 203 db_info->SetDouble("pending_opens", db->PendingOpenCount()); |
| 204 db_info->SetDouble("pending_upgrades", db->PendingUpgradeCount()); | 204 db_info->SetDouble("pending_upgrades", db->PendingUpgradeCount()); |
| 205 db_info->SetDouble("running_upgrades", db->RunningUpgradeCount()); | 205 db_info->SetDouble("running_upgrades", db->RunningUpgradeCount()); |
| 206 db_info->SetDouble("pending_deletes", db->PendingDeleteCount()); | 206 db_info->SetDouble("pending_deletes", db->PendingDeleteCount()); |
| 207 db_info->SetDouble("connection_count", | 207 db_info->SetDouble("connection_count", |
| 208 db->ConnectionCount() - db->PendingUpgradeCount() - | 208 db->ConnectionCount() - db->PendingUpgradeCount() - |
| 209 db->RunningUpgradeCount()); | 209 db->RunningUpgradeCount()); |
| 210 | 210 |
| 211 scoped_ptr<ListValue> transaction_list(new ListValue()); | 211 scoped_ptr<base::ListValue> transaction_list(new base::ListValue()); |
| 212 std::vector<const IndexedDBTransaction*> transactions = | 212 std::vector<const IndexedDBTransaction*> transactions = |
| 213 db->transaction_coordinator().GetTransactions(); | 213 db->transaction_coordinator().GetTransactions(); |
| 214 for (std::vector<const IndexedDBTransaction*>::iterator trans_it = | 214 for (std::vector<const IndexedDBTransaction*>::iterator trans_it = |
| 215 transactions.begin(); | 215 transactions.begin(); |
| 216 trans_it != transactions.end(); | 216 trans_it != transactions.end(); |
| 217 ++trans_it) { | 217 ++trans_it) { |
| 218 | 218 |
| 219 const IndexedDBTransaction* transaction = *trans_it; | 219 const IndexedDBTransaction* transaction = *trans_it; |
| 220 scoped_ptr<DictionaryValue> transaction_info(new DictionaryValue()); | 220 scoped_ptr<base::DictionaryValue> transaction_info( |
| 221 new base::DictionaryValue()); |
| 221 | 222 |
| 222 const char* kModes[] = { "readonly", "readwrite", "versionchange" }; | 223 const char* kModes[] = { "readonly", "readwrite", "versionchange" }; |
| 223 transaction_info->SetString("mode", kModes[transaction->mode()]); | 224 transaction_info->SetString("mode", kModes[transaction->mode()]); |
| 224 switch (transaction->state()) { | 225 switch (transaction->state()) { |
| 225 case IndexedDBTransaction::CREATED: | 226 case IndexedDBTransaction::CREATED: |
| 226 transaction_info->SetString("status", "blocked"); | 227 transaction_info->SetString("status", "blocked"); |
| 227 break; | 228 break; |
| 228 case IndexedDBTransaction::STARTED: | 229 case IndexedDBTransaction::STARTED: |
| 229 if (transaction->diagnostics().tasks_scheduled > 0) | 230 if (transaction->diagnostics().tasks_scheduled > 0) |
| 230 transaction_info->SetString("status", "running"); | 231 transaction_info->SetString("status", "running"); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 250 .InMillisecondsF()); | 251 .InMillisecondsF()); |
| 251 transaction_info->SetDouble( | 252 transaction_info->SetDouble( |
| 252 "runtime", | 253 "runtime", |
| 253 (base::Time::Now() - transaction->diagnostics().start_time) | 254 (base::Time::Now() - transaction->diagnostics().start_time) |
| 254 .InMillisecondsF()); | 255 .InMillisecondsF()); |
| 255 transaction_info->SetDouble( | 256 transaction_info->SetDouble( |
| 256 "tasks_scheduled", transaction->diagnostics().tasks_scheduled); | 257 "tasks_scheduled", transaction->diagnostics().tasks_scheduled); |
| 257 transaction_info->SetDouble( | 258 transaction_info->SetDouble( |
| 258 "tasks_completed", transaction->diagnostics().tasks_completed); | 259 "tasks_completed", transaction->diagnostics().tasks_completed); |
| 259 | 260 |
| 260 scoped_ptr<ListValue> scope(new ListValue()); | 261 scoped_ptr<base::ListValue> scope(new base::ListValue()); |
| 261 for (std::set<int64>::const_iterator scope_it = | 262 for (std::set<int64>::const_iterator scope_it = |
| 262 transaction->scope().begin(); | 263 transaction->scope().begin(); |
| 263 scope_it != transaction->scope().end(); | 264 scope_it != transaction->scope().end(); |
| 264 ++scope_it) { | 265 ++scope_it) { |
| 265 IndexedDBDatabaseMetadata::ObjectStoreMap::const_iterator it = | 266 IndexedDBDatabaseMetadata::ObjectStoreMap::const_iterator it = |
| 266 db->metadata().object_stores.find(*scope_it); | 267 db->metadata().object_stores.find(*scope_it); |
| 267 if (it != db->metadata().object_stores.end()) | 268 if (it != db->metadata().object_stores.end()) |
| 268 scope->AppendString(it->second.name); | 269 scope->AppendString(it->second.name); |
| 269 } | 270 } |
| 270 | 271 |
| (...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 581 origin_set_.reset(); | 582 origin_set_.reset(); |
| 582 origin_size_map_.clear(); | 583 origin_size_map_.clear(); |
| 583 space_available_map_.clear(); | 584 space_available_map_.clear(); |
| 584 } | 585 } |
| 585 | 586 |
| 586 base::TaskRunner* IndexedDBContextImpl::TaskRunner() const { | 587 base::TaskRunner* IndexedDBContextImpl::TaskRunner() const { |
| 587 return task_runner_; | 588 return task_runner_; |
| 588 } | 589 } |
| 589 | 590 |
| 590 } // namespace content | 591 } // namespace content |
| OLD | NEW |