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

Side by Side Diff: content/browser/in_process_webkit/indexed_db_context.cc

Issue 8879013: Deprecate WEBKIT thread (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: update after rebase Created 9 years 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/in_process_webkit/indexed_db_context.h" 5 #include "content/browser/in_process_webkit/indexed_db_context.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 20 matching lines...) Expand all
31 using WebKit::WebIDBDatabase; 31 using WebKit::WebIDBDatabase;
32 using WebKit::WebIDBFactory; 32 using WebKit::WebIDBFactory;
33 using WebKit::WebSecurityOrigin; 33 using WebKit::WebSecurityOrigin;
34 34
35 namespace { 35 namespace {
36 36
37 void GetAllOriginsAndPaths( 37 void GetAllOriginsAndPaths(
38 const FilePath& indexeddb_path, 38 const FilePath& indexeddb_path,
39 std::vector<GURL>* origins, 39 std::vector<GURL>* origins,
40 std::vector<FilePath>* file_paths) { 40 std::vector<FilePath>* file_paths) {
41 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT)); 41 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED));
42 if (indexeddb_path.empty()) 42 if (indexeddb_path.empty())
43 return; 43 return;
44 file_util::FileEnumerator file_enumerator(indexeddb_path, 44 file_util::FileEnumerator file_enumerator(indexeddb_path,
45 false, file_util::FileEnumerator::DIRECTORIES); 45 false, file_util::FileEnumerator::DIRECTORIES);
46 for (FilePath file_path = file_enumerator.Next(); !file_path.empty(); 46 for (FilePath file_path = file_enumerator.Next(); !file_path.empty();
47 file_path = file_enumerator.Next()) { 47 file_path = file_enumerator.Next()) {
48 if (file_path.Extension() == IndexedDBContext::kIndexedDBExtension) { 48 if (file_path.Extension() == IndexedDBContext::kIndexedDBExtension) {
49 WebKit::WebString origin_id_webstring = 49 WebKit::WebString origin_id_webstring =
50 webkit_glue::FilePathToWebString(file_path.BaseName()); 50 webkit_glue::FilePathToWebString(file_path.BaseName());
51 origins->push_back( 51 origins->push_back(
52 DatabaseUtil::GetOriginFromIdentifier(origin_id_webstring)); 52 DatabaseUtil::GetOriginFromIdentifier(origin_id_webstring));
53 if (file_paths) 53 if (file_paths)
54 file_paths->push_back(file_path); 54 file_paths->push_back(file_path);
55 } 55 }
56 } 56 }
57 } 57 }
58 58
59 // If clear_all_databases is true, deletes all databases not protected by 59 // If clear_all_databases is true, deletes all databases not protected by
60 // special storage policy. Otherwise deletes session-only databases. 60 // special storage policy. Otherwise deletes session-only databases.
61 void ClearLocalState( 61 void ClearLocalState(
62 const FilePath& indexeddb_path, 62 const FilePath& indexeddb_path,
63 bool clear_all_databases, 63 bool clear_all_databases,
64 scoped_refptr<quota::SpecialStoragePolicy> special_storage_policy) { 64 scoped_refptr<quota::SpecialStoragePolicy> special_storage_policy) {
65 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT)); 65 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED));
66 std::vector<GURL> origins; 66 std::vector<GURL> origins;
67 std::vector<FilePath> file_paths; 67 std::vector<FilePath> file_paths;
68 GetAllOriginsAndPaths(indexeddb_path, &origins, &file_paths); 68 GetAllOriginsAndPaths(indexeddb_path, &origins, &file_paths);
69 DCHECK_EQ(origins.size(), file_paths.size()); 69 DCHECK_EQ(origins.size(), file_paths.size());
70 std::vector<FilePath>::const_iterator file_path_iter = file_paths.begin(); 70 std::vector<FilePath>::const_iterator file_path_iter = file_paths.begin();
71 for (std::vector<GURL>::const_iterator iter = origins.begin(); 71 for (std::vector<GURL>::const_iterator iter = origins.begin();
72 iter != origins.end(); ++iter, ++file_path_iter) { 72 iter != origins.end(); ++iter, ++file_path_iter) {
73 if (!clear_all_databases && 73 if (!clear_all_databases &&
74 !special_storage_policy->IsStorageSessionOnly(*iter)) { 74 !special_storage_policy->IsStorageSessionOnly(*iter)) {
75 continue; 75 continue;
(...skipping 26 matching lines...) Expand all
102 data_path_ = webkit_context->data_path().Append(kIndexedDBDirectory); 102 data_path_ = webkit_context->data_path().Append(kIndexedDBDirectory);
103 if (quota_manager_proxy && 103 if (quota_manager_proxy &&
104 !CommandLine::ForCurrentProcess()->HasSwitch(switches::kSingleProcess)) { 104 !CommandLine::ForCurrentProcess()->HasSwitch(switches::kSingleProcess)) {
105 quota_manager_proxy->RegisterClient( 105 quota_manager_proxy->RegisterClient(
106 new IndexedDBQuotaClient(webkit_thread_loop, this)); 106 new IndexedDBQuotaClient(webkit_thread_loop, this));
107 } 107 }
108 } 108 }
109 109
110 IndexedDBContext::~IndexedDBContext() { 110 IndexedDBContext::~IndexedDBContext() {
111 WebKit::WebIDBFactory* factory = idb_factory_.release(); 111 WebKit::WebIDBFactory* factory = idb_factory_.release();
112 if (factory) 112 if (factory) {
113 BrowserThread::DeleteSoon(BrowserThread::WEBKIT, FROM_HERE, factory); 113 if (!BrowserThread::DeleteSoon(BrowserThread::WEBKIT_DEPRECATED,
114 FROM_HERE, factory))
115 delete factory;
116 }
114 117
115 if (data_path_.empty()) 118 if (data_path_.empty())
116 return; 119 return;
117 120
118 if (save_session_state_) 121 if (save_session_state_)
119 return; 122 return;
120 123
121 bool has_session_only_databases = 124 bool has_session_only_databases =
122 special_storage_policy_.get() && 125 special_storage_policy_.get() &&
123 special_storage_policy_->HasSessionOnlyOrigins(); 126 special_storage_policy_->HasSessionOnlyOrigins();
124 127
125 // Clearning only session-only databases, and there are none. 128 // Clearning only session-only databases, and there are none.
126 if (!clear_local_state_on_exit_ && !has_session_only_databases) 129 if (!clear_local_state_on_exit_ && !has_session_only_databases)
127 return; 130 return;
128 131
129 // No WEBKIT thread here means we are running in a unit test where no clean 132 // No WEBKIT thread here means we are running in a unit test where no clean
130 // up is needed. 133 // up is needed.
131 BrowserThread::PostTask( 134 BrowserThread::PostTask(
132 BrowserThread::WEBKIT, FROM_HERE, 135 BrowserThread::WEBKIT_DEPRECATED, FROM_HERE,
133 base::Bind(&ClearLocalState, data_path_, clear_local_state_on_exit_, 136 base::Bind(&ClearLocalState, data_path_, clear_local_state_on_exit_,
134 special_storage_policy_)); 137 special_storage_policy_));
135 } 138 }
136 139
137 WebIDBFactory* IndexedDBContext::GetIDBFactory() { 140 WebIDBFactory* IndexedDBContext::GetIDBFactory() {
138 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT)); 141 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED));
139 if (!idb_factory_.get()) { 142 if (!idb_factory_.get()) {
140 // Prime our cache of origins with existing databases so we can 143 // Prime our cache of origins with existing databases so we can
141 // detect when dbs are newly created. 144 // detect when dbs are newly created.
142 GetOriginSet(); 145 GetOriginSet();
143 idb_factory_.reset(WebIDBFactory::create()); 146 idb_factory_.reset(WebIDBFactory::create());
144 } 147 }
145 return idb_factory_.get(); 148 return idb_factory_.get();
146 } 149 }
147 150
148 void IndexedDBContext::DeleteIndexedDBForOrigin(const GURL& origin_url) { 151 void IndexedDBContext::DeleteIndexedDBForOrigin(const GURL& origin_url) {
149 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT)); 152 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED));
150 if (data_path_.empty() || !IsInOriginSet(origin_url)) 153 if (data_path_.empty() || !IsInOriginSet(origin_url))
151 return; 154 return;
152 // TODO(michaeln): When asked to delete an origin with open connections, 155 // TODO(michaeln): When asked to delete an origin with open connections,
153 // forcibly close those connections then delete. 156 // forcibly close those connections then delete.
154 if (connection_count_.find(origin_url) == connection_count_.end()) { 157 if (connection_count_.find(origin_url) == connection_count_.end()) {
155 string16 origin_id = DatabaseUtil::GetOriginIdentifier(origin_url); 158 string16 origin_id = DatabaseUtil::GetOriginIdentifier(origin_url);
156 FilePath idb_directory = GetIndexedDBFilePath(origin_id); 159 FilePath idb_directory = GetIndexedDBFilePath(origin_id);
157 EnsureDiskUsageCacheInitialized(origin_url); 160 EnsureDiskUsageCacheInitialized(origin_url);
158 bool deleted = file_util::Delete(idb_directory, true /*recursive*/); 161 bool deleted = file_util::Delete(idb_directory, true /*recursive*/);
159 QueryDiskAndUpdateQuotaUsage(origin_url); 162 QueryDiskAndUpdateQuotaUsage(origin_url);
160 if (deleted) { 163 if (deleted) {
161 RemoveFromOriginSet(origin_url); 164 RemoveFromOriginSet(origin_url);
162 origin_size_map_.erase(origin_url); 165 origin_size_map_.erase(origin_url);
163 space_available_map_.erase(origin_url); 166 space_available_map_.erase(origin_url);
164 } 167 }
165 } 168 }
166 } 169 }
167 170
168 void IndexedDBContext::GetAllOrigins(std::vector<GURL>* origins) { 171 void IndexedDBContext::GetAllOrigins(std::vector<GURL>* origins) {
169 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT)); 172 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED));
170 std::set<GURL>* origins_set = GetOriginSet(); 173 std::set<GURL>* origins_set = GetOriginSet();
171 for (std::set<GURL>::const_iterator iter = origins_set->begin(); 174 for (std::set<GURL>::const_iterator iter = origins_set->begin();
172 iter != origins_set->end(); ++iter) { 175 iter != origins_set->end(); ++iter) {
173 origins->push_back(*iter); 176 origins->push_back(*iter);
174 } 177 }
175 } 178 }
176 179
177 int64 IndexedDBContext::GetOriginDiskUsage(const GURL& origin_url) { 180 int64 IndexedDBContext::GetOriginDiskUsage(const GURL& origin_url) {
178 if (data_path_.empty() || !IsInOriginSet(origin_url)) 181 if (data_path_.empty() || !IsInOriginSet(origin_url))
179 return 0; 182 return 0;
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 quota::QuotaStatusCode status, 292 quota::QuotaStatusCode status,
290 int64 usage, int64 quota) { 293 int64 usage, int64 quota) {
291 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 294 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
292 DCHECK(status == quota::kQuotaStatusOk || status == quota::kQuotaErrorAbort) 295 DCHECK(status == quota::kQuotaStatusOk || status == quota::kQuotaErrorAbort)
293 << "status was " << status; 296 << "status was " << status;
294 if (status == quota::kQuotaErrorAbort) { 297 if (status == quota::kQuotaErrorAbort) {
295 // We seem to no longer care to wait around for the answer. 298 // We seem to no longer care to wait around for the answer.
296 return; 299 return;
297 } 300 }
298 BrowserThread::PostTask( 301 BrowserThread::PostTask(
299 BrowserThread::WEBKIT, FROM_HERE, 302 BrowserThread::WEBKIT_DEPRECATED, FROM_HERE,
300 base::Bind(&IndexedDBContext::GotUpdatedQuota, this, origin_url, usage, 303 base::Bind(&IndexedDBContext::GotUpdatedQuota, this, origin_url, usage,
301 quota)); 304 quota));
302 } 305 }
303 306
304 void IndexedDBContext::GotUpdatedQuota(const GURL& origin_url, int64 usage, 307 void IndexedDBContext::GotUpdatedQuota(const GURL& origin_url, int64 usage,
305 int64 quota) { 308 int64 quota) {
306 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT)); 309 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED));
307 space_available_map_[origin_url] = quota - usage; 310 space_available_map_[origin_url] = quota - usage;
308 } 311 }
309 312
310 void IndexedDBContext::QueryAvailableQuota(const GURL& origin_url) { 313 void IndexedDBContext::QueryAvailableQuota(const GURL& origin_url) {
311 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { 314 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) {
312 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT)); 315 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT_DEPRECATED));
313 if (quota_manager_proxy()) 316 if (quota_manager_proxy())
314 BrowserThread::PostTask( 317 BrowserThread::PostTask(
315 BrowserThread::IO, FROM_HERE, 318 BrowserThread::IO, FROM_HERE,
316 base::Bind(&IndexedDBContext::QueryAvailableQuota, this, origin_url)); 319 base::Bind(&IndexedDBContext::QueryAvailableQuota, this, origin_url));
317 return; 320 return;
318 } 321 }
319 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 322 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
320 if (!quota_manager_proxy()->quota_manager()) 323 if (!quota_manager_proxy()->quota_manager())
321 return; 324 return;
322 quota_manager_proxy()->quota_manager()->GetUsageAndQuota( 325 quota_manager_proxy()->quota_manager()->GetUsageAndQuota(
(...skipping 14 matching lines...) Expand all
337 } 340 }
338 } 341 }
339 return origin_set_.get(); 342 return origin_set_.get();
340 } 343 }
341 344
342 void IndexedDBContext::ResetCaches() { 345 void IndexedDBContext::ResetCaches() {
343 origin_set_.reset(); 346 origin_set_.reset();
344 origin_size_map_.clear(); 347 origin_size_map_.clear();
345 space_available_map_.clear(); 348 space_available_map_.clear();
346 } 349 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698