Index: content/browser/indexed_db/indexed_db_internals_ui.cc |
diff --git a/content/browser/indexed_db/indexed_db_internals_ui.cc b/content/browser/indexed_db/indexed_db_internals_ui.cc |
index 6d0871c36ff86839c44a6b390bf3335cea7a0989..6e93aaf7fe614adcbc4ccb5572b626a70b7382bf 100644 |
--- a/content/browser/indexed_db/indexed_db_internals_ui.cc |
+++ b/content/browser/indexed_db/indexed_db_internals_ui.cc |
@@ -9,6 +9,7 @@ |
#include "base/bind.h" |
#include "base/threading/platform_thread.h" |
#include "base/values.h" |
+#include "base/memory/scoped_vector.h" |
#include "content/public/browser/browser_context.h" |
#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/storage_partition.h" |
@@ -45,23 +46,35 @@ IndexedDBInternalsUI::IndexedDBInternalsUI(WebUI* web_ui) |
IndexedDBInternalsUI::~IndexedDBInternalsUI() { |
} |
+void IndexedDBInternalsUI::AddContextFromStoragePartition( |
+ ContextList* contexts, |
+ std::vector<base::FilePath>* paths, |
+ StoragePartition* partition) { |
+ scoped_refptr<IndexedDBContext> context = partition->GetIndexedDBContext(); |
+ contexts->push_back(context); |
+ paths->push_back(partition->GetPath()); |
+} |
+ |
void IndexedDBInternalsUI::GetAllOrigins(const base::ListValue* args) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
BrowserContext* browser_context = |
web_ui()->GetWebContents()->GetBrowserContext(); |
- // TODO(alecflett): do this for each storage partition in the context |
- StoragePartition* partition = |
- BrowserContext::GetDefaultStoragePartition(browser_context); |
- scoped_refptr<IndexedDBContext> context = partition->GetIndexedDBContext(); |
+ scoped_ptr<std::vector<base::FilePath> > |
+ paths(new std::vector<base::FilePath>); |
+ scoped_ptr<ContextList> contexts(new ContextList); |
+ BrowserContext::StoragePartitionCallback cb = |
+ base::Bind(&AddContextFromStoragePartition, contexts.get(), paths.get()); |
+ BrowserContext::ForEachStoragePartition(browser_context, cb); |
BrowserThread::PostTask( |
BrowserThread::WEBKIT_DEPRECATED, FROM_HERE, |
base::Bind( |
&IndexedDBInternalsUI::GetAllOriginsOnWebkitThread, |
base::Unretained(this), |
- context)); |
+ base::Passed(&contexts), |
+ base::Passed(&paths))); |
} |
bool HostNameComparator(const IndexedDBInfo& i, const IndexedDBInfo& j) { |
@@ -69,21 +82,34 @@ bool HostNameComparator(const IndexedDBInfo& i, const IndexedDBInfo& j) { |
} |
void IndexedDBInternalsUI::GetAllOriginsOnWebkitThread( |
- scoped_refptr<IndexedDBContext> context) { |
+ scoped_ptr<ContextList> contexts, |
+ scoped_ptr<std::vector<base::FilePath> > context_paths) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED)); |
- |
- scoped_ptr<std::vector<IndexedDBInfo> > origins( |
- new std::vector<IndexedDBInfo>(context->GetAllOriginsInfo())); |
- std::sort(origins->begin(), origins->end(), HostNameComparator); |
- |
- BrowserThread::PostTask( |
- BrowserThread::UI, FROM_HERE, |
- base::Bind(&IndexedDBInternalsUI::OnOriginsReady, base::Unretained(this), |
- base::Passed(&origins))); |
+ DCHECK_EQ(contexts->size(), context_paths->size()); |
jsbell
2013/04/12 21:25:59
As discussed offline, an alternative would be to m
|
+ |
+ std::vector<base::FilePath>::const_iterator path_iter = |
+ context_paths->begin(); |
+ for (ContextList::const_iterator iter = contexts->begin(); |
jsbell
2013/04/12 21:25:59
... although it would make this dual-iteration sli
|
+ iter != contexts->end(); ++iter) { |
michaeln
2013/04/12 23:00:31
nit: would dbl-iter be more clear with ++iter, ++p
|
+ IndexedDBContext* context = *iter; |
+ const base::FilePath& context_path = *path_iter; |
+ |
+ scoped_ptr<std::vector<IndexedDBInfo> > info_list( |
+ new std::vector<IndexedDBInfo>(context->GetAllOriginsInfo())); |
+ std::sort(info_list->begin(), info_list->end(), HostNameComparator); |
+ BrowserThread::PostTask( |
+ BrowserThread::UI, FROM_HERE, |
+ base::Bind(&IndexedDBInternalsUI::OnOriginsReady, |
+ base::Unretained(this), |
+ base::Passed(&info_list), |
+ context_path)); |
+ ++path_iter; |
+ } |
} |
void IndexedDBInternalsUI::OnOriginsReady( |
- scoped_ptr<std::vector<IndexedDBInfo> > origins) { |
+ scoped_ptr<std::vector<IndexedDBInfo> > origins, |
+ const base::FilePath& path) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
base::ListValue urls; |
for (std::vector<IndexedDBInfo>::const_iterator iter = origins->begin(); |
@@ -92,8 +118,11 @@ void IndexedDBInternalsUI::OnOriginsReady( |
info->SetString("url", iter->origin.spec()); |
info->SetDouble("size", iter->size); |
info->SetDouble("last_modified", iter->last_modified.ToJsTime()); |
+ info->SetString("path", iter->path.value()); |
urls.Append(info); |
} |
- web_ui()->CallJavascriptFunction("indexeddb.onOriginsReady", urls); |
+ web_ui()->CallJavascriptFunction("indexeddb.onOriginsReady", |
+ urls, |
+ base::StringValue(path.value())); |
} |
} |