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

Side by Side Diff: content/browser/indexed_db/indexed_db_internals_ui.cc

Issue 17518004: Move IndexedDB from WEBKIT_DEPRECATED to dedicated thread (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add missing files Created 7 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
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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_internals_ui.h" 5 #include "content/browser/indexed_db/indexed_db_internals_ui.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 source->SetDefaultResource(IDR_INDEXED_DB_INTERNALS_HTML); 52 source->SetDefaultResource(IDR_INDEXED_DB_INTERNALS_HTML);
53 53
54 BrowserContext* browser_context = 54 BrowserContext* browser_context =
55 web_ui->GetWebContents()->GetBrowserContext(); 55 web_ui->GetWebContents()->GetBrowserContext();
56 WebUIDataSource::Add(browser_context, source); 56 WebUIDataSource::Add(browser_context, source);
57 } 57 }
58 58
59 IndexedDBInternalsUI::~IndexedDBInternalsUI() {} 59 IndexedDBInternalsUI::~IndexedDBInternalsUI() {}
60 60
61 void IndexedDBInternalsUI::AddContextFromStoragePartition( 61 void IndexedDBInternalsUI::AddContextFromStoragePartition(
62 ContextList* contexts,
63 std::vector<base::FilePath>* paths,
64 StoragePartition* partition) { 62 StoragePartition* partition) {
65 scoped_refptr<IndexedDBContext> context = partition->GetIndexedDBContext(); 63 scoped_refptr<IndexedDBContext> context = partition->GetIndexedDBContext();
66 contexts->push_back(context); 64 context->TaskRunner()->PostTask(
67 paths->push_back(partition->GetPath()); 65 FROM_HERE,
66 base::Bind(&IndexedDBInternalsUI::GetAllOriginsOnIndexedDBThread,
67 base::Unretained(this),
68 context,
69 partition->GetPath()));
68 } 70 }
69 71
70 void IndexedDBInternalsUI::GetAllOrigins(const base::ListValue* args) { 72 void IndexedDBInternalsUI::GetAllOrigins(const base::ListValue* args) {
71 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 73 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
72 74
73 BrowserContext* browser_context = 75 BrowserContext* browser_context =
74 web_ui()->GetWebContents()->GetBrowserContext(); 76 web_ui()->GetWebContents()->GetBrowserContext();
75 77
76 scoped_ptr<std::vector<base::FilePath> > paths(
77 new std::vector<base::FilePath>);
78 scoped_ptr<ContextList> contexts(new ContextList);
79 BrowserContext::StoragePartitionCallback cb = 78 BrowserContext::StoragePartitionCallback cb =
80 base::Bind(&AddContextFromStoragePartition, contexts.get(), paths.get()); 79 base::Bind(&IndexedDBInternalsUI::AddContextFromStoragePartition,
80 base::Unretained(this));
81 BrowserContext::ForEachStoragePartition(browser_context, cb); 81 BrowserContext::ForEachStoragePartition(browser_context, cb);
82
83 BrowserThread::PostTask(
84 BrowserThread::WEBKIT_DEPRECATED,
85 FROM_HERE,
86 base::Bind(&IndexedDBInternalsUI::GetAllOriginsOnWebkitThread,
87 base::Unretained(this),
88 base::Passed(&contexts),
89 base::Passed(&paths)));
90 } 82 }
91 83
92 bool HostNameComparator(const IndexedDBInfo& i, const IndexedDBInfo& j) { 84 static bool HostNameComparator(const IndexedDBInfo& i, const IndexedDBInfo& j) {
93 return i.origin_.host() < j.origin_.host(); 85 return i.origin_.host() < j.origin_.host();
94 } 86 }
95 87
96 void IndexedDBInternalsUI::GetAllOriginsOnWebkitThread( 88 void IndexedDBInternalsUI::GetAllOriginsOnIndexedDBThread(
97 const scoped_ptr<ContextList> contexts, 89 scoped_refptr<IndexedDBContext> context,
98 const scoped_ptr<std::vector<base::FilePath> > context_paths) { 90 const base::FilePath& context_path) {
99 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED)); 91 DCHECK(context->OnIndexedDBThread());
100 DCHECK_EQ(contexts->size(), context_paths->size());
101 92
102 std::vector<base::FilePath>::const_iterator path_iter = 93 scoped_ptr<std::vector<IndexedDBInfo> > info_list(
103 context_paths->begin(); 94 new std::vector<IndexedDBInfo>(context->GetAllOriginsInfo()));
104 for (ContextList::const_iterator iter = contexts->begin(); 95 std::sort(info_list->begin(), info_list->end(), HostNameComparator);
105 iter != contexts->end(); 96 BrowserThread::PostTask(BrowserThread::UI,
106 ++iter, ++path_iter) { 97 FROM_HERE,
107 IndexedDBContext* context = iter->get(); 98 base::Bind(&IndexedDBInternalsUI::OnOriginsReady,
108 const base::FilePath& context_path = *path_iter; 99 base::Unretained(this),
109 100 base::Passed(&info_list),
110 scoped_ptr<std::vector<IndexedDBInfo> > info_list( 101 context_path));
111 new std::vector<IndexedDBInfo>(context->GetAllOriginsInfo()));
112 std::sort(info_list->begin(), info_list->end(), HostNameComparator);
113 BrowserThread::PostTask(BrowserThread::UI,
114 FROM_HERE,
115 base::Bind(&IndexedDBInternalsUI::OnOriginsReady,
116 base::Unretained(this),
117 base::Passed(&info_list),
118 context_path));
119 }
120 } 102 }
121 103
122 void IndexedDBInternalsUI::OnOriginsReady( 104 void IndexedDBInternalsUI::OnOriginsReady(
123 scoped_ptr<std::vector<IndexedDBInfo> > origins, 105 scoped_ptr<std::vector<IndexedDBInfo> > origins,
124 const base::FilePath& path) { 106 const base::FilePath& path) {
125 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 107 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
126 base::ListValue urls; 108 base::ListValue urls;
127 for (std::vector<IndexedDBInfo>::const_iterator iter = origins->begin(); 109 for (std::vector<IndexedDBInfo>::const_iterator iter = origins->begin();
128 iter != origins->end(); 110 iter != origins->end();
129 ++iter) { 111 ++iter) {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 151
170 scoped_refptr<IndexedDBContextImpl> result_context; 152 scoped_refptr<IndexedDBContextImpl> result_context;
171 StoragePartition* result_partition; 153 StoragePartition* result_partition;
172 scoped_ptr<ContextList> contexts(new ContextList); 154 scoped_ptr<ContextList> contexts(new ContextList);
173 BrowserContext::StoragePartitionCallback cb = base::Bind( 155 BrowserContext::StoragePartitionCallback cb = base::Bind(
174 &FindContext, partition_path, &result_partition, &result_context); 156 &FindContext, partition_path, &result_partition, &result_context);
175 BrowserContext::ForEachStoragePartition(browser_context, cb); 157 BrowserContext::ForEachStoragePartition(browser_context, cb);
176 DCHECK(result_partition); 158 DCHECK(result_partition);
177 DCHECK(result_context.get()); 159 DCHECK(result_context.get());
178 160
179 BrowserThread::PostTask( 161 result_context->TaskRunner()->PostTask(
180 BrowserThread::WEBKIT_DEPRECATED,
181 FROM_HERE, 162 FROM_HERE,
182 base::Bind(&IndexedDBInternalsUI::DownloadOriginDataOnWebkitThread, 163 base::Bind(&IndexedDBInternalsUI::DownloadOriginDataOnIndexedDBThread,
183 base::Unretained(this), 164 base::Unretained(this),
184 result_partition->GetPath(), 165 result_partition->GetPath(),
185 result_context, 166 result_context,
186 origin_url)); 167 origin_url));
187 } 168 }
188 169
189 void IndexedDBInternalsUI::DownloadOriginDataOnWebkitThread( 170 void IndexedDBInternalsUI::DownloadOriginDataOnIndexedDBThread(
190 const base::FilePath& partition_path, 171 const base::FilePath& partition_path,
191 const scoped_refptr<IndexedDBContextImpl> context, 172 const scoped_refptr<IndexedDBContextImpl> context,
192 const GURL& origin_url) { 173 const GURL& origin_url) {
193 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED)); 174 DCHECK(context->OnIndexedDBThread());
194 175
195 if (!context->IsInOriginSet(origin_url)) 176 if (!context->IsInOriginSet(origin_url))
196 return; 177 return;
197 178
198 context->ForceClose(origin_url); 179 context->ForceClose(origin_url);
199 180
200 base::ScopedTempDir temp_dir; 181 base::ScopedTempDir temp_dir;
201 if (!temp_dir.CreateUniqueTempDir()) 182 if (!temp_dir.CreateUniqueTempDir())
202 return; 183 return;
203 184
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 return; 285 return;
305 } 286 }
306 287
307 item->AddObserver(new FileDeleter(temp_path)); 288 item->AddObserver(new FileDeleter(temp_path));
308 web_ui()->CallJavascriptFunction("indexeddb.onOriginDownloadReady", 289 web_ui()->CallJavascriptFunction("indexeddb.onOriginDownloadReady",
309 base::StringValue(partition_path.value()), 290 base::StringValue(partition_path.value()),
310 base::StringValue(origin_url.spec())); 291 base::StringValue(origin_url.spec()));
311 } 292 }
312 293
313 } // namespace content 294 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698