| 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 499dd3ca5ff2bf61be0e0491babcdacfef6c7e58..1869091ab5de94fd822089d65823288aeac7df69 100644
|
| --- a/content/browser/indexed_db/indexed_db_internals_ui.cc
|
| +++ b/content/browser/indexed_db/indexed_db_internals_ui.cc
|
| @@ -7,6 +7,7 @@
|
| #include <algorithm>
|
|
|
| #include "base/bind.h"
|
| +#include "base/memory/scoped_vector.h"
|
| #include "base/threading/platform_thread.h"
|
| #include "base/values.h"
|
| #include "content/public/browser/browser_context.h"
|
| @@ -24,8 +25,7 @@ IndexedDBInternalsUI::IndexedDBInternalsUI(WebUI* web_ui)
|
| : WebUIController(web_ui) {
|
| web_ui->RegisterMessageCallback(
|
| "getAllOrigins",
|
| - base::Bind(&IndexedDBInternalsUI::GetAllOrigins,
|
| - base::Unretained(this)));
|
| + base::Bind(&IndexedDBInternalsUI::GetAllOrigins, base::Unretained(this)));
|
|
|
| WebUIDataSource* source =
|
| WebUIDataSource::Create(kChromeUIIndexedDBInternalsHost);
|
| @@ -42,7 +42,15 @@ IndexedDBInternalsUI::IndexedDBInternalsUI(WebUI* web_ui)
|
| WebUIDataSource::Add(browser_context, source);
|
| }
|
|
|
| -IndexedDBInternalsUI::~IndexedDBInternalsUI() {
|
| +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) {
|
| @@ -51,50 +59,69 @@ void IndexedDBInternalsUI::GetAllOrigins(const base::ListValue* args) {
|
| 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));
|
| + BrowserThread::WEBKIT_DEPRECATED,
|
| + FROM_HERE,
|
| + base::Bind(&IndexedDBInternalsUI::GetAllOriginsOnWebkitThread,
|
| + base::Unretained(this),
|
| + base::Passed(&contexts),
|
| + base::Passed(&paths)));
|
| }
|
|
|
| bool HostNameComparator(const IndexedDBInfo& i, const IndexedDBInfo& j) {
|
| - return i.origin.host() < j.origin.host();
|
| + return i.origin_.host() < j.origin_.host();
|
| }
|
|
|
| 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());
|
| +
|
| + std::vector<base::FilePath>::const_iterator path_iter =
|
| + context_paths->begin();
|
| + for (ContextList::const_iterator iter = contexts->begin();
|
| + iter != contexts->end();
|
| + ++iter, ++path_iter) {
|
| + 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));
|
| + }
|
| }
|
|
|
| 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();
|
| - iter != origins->end(); ++iter) {
|
| + iter != origins->end();
|
| + ++iter) {
|
| base::DictionaryValue* info = new DictionaryValue;
|
| - info->SetString("url", iter->origin.spec());
|
| - info->SetDouble("size", iter->size);
|
| - info->SetDouble("last_modified", iter->last_modified.ToJsTime());
|
| + 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()));
|
| }
|
|
|
| } // namespace content
|
|
|