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

Side by Side Diff: webkit/support/simple_database_system.cc

Issue 13219005: Replace string16 with base::string16 in src/webkit (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 8 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) 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 "webkit/support/simple_database_system.h" 5 #include "webkit/support/simple_database_system.h"
6 6
7 #include "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/bind_helpers.h" 9 #include "base/bind_helpers.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 base::WaitableEvent done_event(false, false); 49 base::WaitableEvent done_event(false, false);
50 db_thread_proxy_->PostTask( 50 db_thread_proxy_->PostTask(
51 FROM_HERE, 51 FROM_HERE,
52 base::Bind(&SimpleDatabaseSystem::ThreadCleanup, 52 base::Bind(&SimpleDatabaseSystem::ThreadCleanup,
53 base::Unretained(this), &done_event)); 53 base::Unretained(this), &done_event));
54 done_event.Wait(); 54 done_event.Wait();
55 instance_ = NULL; 55 instance_ = NULL;
56 } 56 }
57 57
58 void SimpleDatabaseSystem::databaseOpened(const WebKit::WebDatabase& database) { 58 void SimpleDatabaseSystem::databaseOpened(const WebKit::WebDatabase& database) {
59 string16 origin_identifier = database.securityOrigin().databaseIdentifier(); 59 base::string16 origin_identifier =
60 string16 database_name = database.name(); 60 database.securityOrigin().databaseIdentifier();
61 base::string16 database_name = database.name();
61 open_connections_->AddOpenConnection(origin_identifier, database_name); 62 open_connections_->AddOpenConnection(origin_identifier, database_name);
62 db_thread_proxy_->PostTask( 63 db_thread_proxy_->PostTask(
63 FROM_HERE, 64 FROM_HERE,
64 base::Bind(&SimpleDatabaseSystem::DatabaseOpened, 65 base::Bind(&SimpleDatabaseSystem::DatabaseOpened,
65 base::Unretained(this), 66 base::Unretained(this),
66 origin_identifier, 67 origin_identifier,
67 database_name, database.displayName(), 68 database_name, database.displayName(),
68 database.estimatedSize())); 69 database.estimatedSize()));
69 } 70 }
70 71
71 void SimpleDatabaseSystem::databaseModified( 72 void SimpleDatabaseSystem::databaseModified(
72 const WebKit::WebDatabase& database) { 73 const WebKit::WebDatabase& database) {
73 db_thread_proxy_->PostTask( 74 db_thread_proxy_->PostTask(
74 FROM_HERE, 75 FROM_HERE,
75 base::Bind(&SimpleDatabaseSystem::DatabaseModified, 76 base::Bind(&SimpleDatabaseSystem::DatabaseModified,
76 base::Unretained(this), 77 base::Unretained(this),
77 database.securityOrigin().databaseIdentifier(), 78 database.securityOrigin().databaseIdentifier(),
78 database.name())); 79 database.name()));
79 } 80 }
80 81
81 void SimpleDatabaseSystem::databaseClosed(const WebKit::WebDatabase& database) { 82 void SimpleDatabaseSystem::databaseClosed(const WebKit::WebDatabase& database) {
82 string16 origin_identifier = database.securityOrigin().databaseIdentifier(); 83 base::string16 origin_identifier =
83 string16 database_name = database.name(); 84 database.securityOrigin().databaseIdentifier();
85 base::string16 database_name = database.name();
84 db_thread_proxy_->PostTask( 86 db_thread_proxy_->PostTask(
85 FROM_HERE, 87 FROM_HERE,
86 base::Bind(&SimpleDatabaseSystem::DatabaseClosed, 88 base::Bind(&SimpleDatabaseSystem::DatabaseClosed,
87 base::Unretained(this), origin_identifier, database_name)); 89 base::Unretained(this), origin_identifier, database_name));
88 } 90 }
89 91
90 base::PlatformFile SimpleDatabaseSystem::OpenFile( 92 base::PlatformFile SimpleDatabaseSystem::OpenFile(
91 const string16& vfs_file_name, int desired_flags) { 93 const base::string16& vfs_file_name, int desired_flags) {
92 base::PlatformFile result = base::kInvalidPlatformFileValue; 94 base::PlatformFile result = base::kInvalidPlatformFileValue;
93 base::WaitableEvent done_event(false, false); 95 base::WaitableEvent done_event(false, false);
94 db_thread_proxy_->PostTask( 96 db_thread_proxy_->PostTask(
95 FROM_HERE, 97 FROM_HERE,
96 base::Bind(&SimpleDatabaseSystem::VfsOpenFile, 98 base::Bind(&SimpleDatabaseSystem::VfsOpenFile,
97 base::Unretained(this), 99 base::Unretained(this),
98 vfs_file_name, desired_flags, 100 vfs_file_name, desired_flags,
99 &result, &done_event)); 101 &result, &done_event));
100 done_event.Wait(); 102 done_event.Wait();
101 return result; 103 return result;
102 } 104 }
103 105
104 int SimpleDatabaseSystem::DeleteFile( 106 int SimpleDatabaseSystem::DeleteFile(
105 const string16& vfs_file_name, bool sync_dir) { 107 const base::string16& vfs_file_name, bool sync_dir) {
106 int result = SQLITE_OK; 108 int result = SQLITE_OK;
107 base::WaitableEvent done_event(false, false); 109 base::WaitableEvent done_event(false, false);
108 db_thread_proxy_->PostTask( 110 db_thread_proxy_->PostTask(
109 FROM_HERE, 111 FROM_HERE,
110 base::Bind(&SimpleDatabaseSystem::VfsDeleteFile, 112 base::Bind(&SimpleDatabaseSystem::VfsDeleteFile,
111 base::Unretained(this), 113 base::Unretained(this),
112 vfs_file_name, sync_dir, 114 vfs_file_name, sync_dir,
113 &result, &done_event)); 115 &result, &done_event));
114 done_event.Wait(); 116 done_event.Wait();
115 return result; 117 return result;
116 } 118 }
117 119
118 uint32 SimpleDatabaseSystem::GetFileAttributes(const string16& vfs_file_name) { 120 uint32 SimpleDatabaseSystem::GetFileAttributes(
121 const base::string16& vfs_file_name) {
119 uint32 result = 0; 122 uint32 result = 0;
120 base::WaitableEvent done_event(false, false); 123 base::WaitableEvent done_event(false, false);
121 db_thread_proxy_->PostTask( 124 db_thread_proxy_->PostTask(
122 FROM_HERE, 125 FROM_HERE,
123 base::Bind(&SimpleDatabaseSystem::VfsGetFileAttributes, 126 base::Bind(&SimpleDatabaseSystem::VfsGetFileAttributes,
124 base::Unretained(this), vfs_file_name, &result, &done_event)); 127 base::Unretained(this), vfs_file_name, &result, &done_event));
125 done_event.Wait(); 128 done_event.Wait();
126 return result; 129 return result;
127 } 130 }
128 131
129 int64 SimpleDatabaseSystem::GetFileSize(const string16& vfs_file_name) { 132 int64 SimpleDatabaseSystem::GetFileSize(const base::string16& vfs_file_name) {
130 int64 result = 0; 133 int64 result = 0;
131 base::WaitableEvent done_event(false, false); 134 base::WaitableEvent done_event(false, false);
132 db_thread_proxy_->PostTask( 135 db_thread_proxy_->PostTask(
133 FROM_HERE, 136 FROM_HERE,
134 base::Bind(&SimpleDatabaseSystem::VfsGetFileSize, 137 base::Bind(&SimpleDatabaseSystem::VfsGetFileSize,
135 base::Unretained(this), vfs_file_name, &result, &done_event)); 138 base::Unretained(this), vfs_file_name, &result, &done_event));
136 done_event.Wait(); 139 done_event.Wait();
137 return result; 140 return result;
138 } 141 }
139 142
140 int64 SimpleDatabaseSystem::GetSpaceAvailable( 143 int64 SimpleDatabaseSystem::GetSpaceAvailable(
141 const string16& origin_identifier) { 144 const base::string16& origin_identifier) {
142 int64 result = 0; 145 int64 result = 0;
143 base::WaitableEvent done_event(false, false); 146 base::WaitableEvent done_event(false, false);
144 db_thread_proxy_->PostTask( 147 db_thread_proxy_->PostTask(
145 FROM_HERE, 148 FROM_HERE,
146 base::Bind(&SimpleDatabaseSystem::VfsGetSpaceAvailable, 149 base::Bind(&SimpleDatabaseSystem::VfsGetSpaceAvailable,
147 base::Unretained(this), origin_identifier, 150 base::Unretained(this), origin_identifier,
148 &result, &done_event)); 151 &result, &done_event));
149 done_event.Wait(); 152 done_event.Wait();
150 return result; 153 return result;
151 } 154 }
152 155
153 void SimpleDatabaseSystem::ClearAllDatabases() { 156 void SimpleDatabaseSystem::ClearAllDatabases() {
154 open_connections_->WaitForAllDatabasesToClose(); 157 open_connections_->WaitForAllDatabasesToClose();
155 db_thread_proxy_->PostTask( 158 db_thread_proxy_->PostTask(
156 FROM_HERE, 159 FROM_HERE,
157 base::Bind(&SimpleDatabaseSystem::ResetTracker, base::Unretained(this))); 160 base::Bind(&SimpleDatabaseSystem::ResetTracker, base::Unretained(this)));
158 } 161 }
159 162
160 void SimpleDatabaseSystem::SetDatabaseQuota(int64 quota) { 163 void SimpleDatabaseSystem::SetDatabaseQuota(int64 quota) {
161 if (!db_thread_proxy_->BelongsToCurrentThread()) { 164 if (!db_thread_proxy_->BelongsToCurrentThread()) {
162 db_thread_proxy_->PostTask( 165 db_thread_proxy_->PostTask(
163 FROM_HERE, 166 FROM_HERE,
164 base::Bind(&SimpleDatabaseSystem::SetDatabaseQuota, 167 base::Bind(&SimpleDatabaseSystem::SetDatabaseQuota,
165 base::Unretained(this), quota)); 168 base::Unretained(this), quota));
166 return; 169 return;
167 } 170 }
168 quota_per_origin_ = quota; 171 quota_per_origin_ = quota;
169 } 172 }
170 173
171 void SimpleDatabaseSystem::DatabaseOpened(const string16& origin_identifier, 174 void SimpleDatabaseSystem::DatabaseOpened(
172 const string16& database_name, 175 const base::string16& origin_identifier,
173 const string16& description, 176 const base::string16& database_name,
174 int64 estimated_size) { 177 const base::string16& description,
178 int64 estimated_size) {
175 DCHECK(db_thread_proxy_->BelongsToCurrentThread()); 179 DCHECK(db_thread_proxy_->BelongsToCurrentThread());
176 int64 database_size = 0; 180 int64 database_size = 0;
177 db_tracker_->DatabaseOpened( 181 db_tracker_->DatabaseOpened(
178 origin_identifier, database_name, description, 182 origin_identifier, database_name, description,
179 estimated_size, &database_size); 183 estimated_size, &database_size);
180 OnDatabaseSizeChanged(origin_identifier, database_name, 184 OnDatabaseSizeChanged(origin_identifier, database_name,
181 database_size); 185 database_size);
182 } 186 }
183 187
184 void SimpleDatabaseSystem::DatabaseModified(const string16& origin_identifier, 188 void SimpleDatabaseSystem::DatabaseModified(
185 const string16& database_name) { 189 const base::string16& origin_identifier,
190 const base::string16& database_name) {
186 DCHECK(db_thread_proxy_->BelongsToCurrentThread()); 191 DCHECK(db_thread_proxy_->BelongsToCurrentThread());
187 db_tracker_->DatabaseModified(origin_identifier, database_name); 192 db_tracker_->DatabaseModified(origin_identifier, database_name);
188 } 193 }
189 194
190 void SimpleDatabaseSystem::DatabaseClosed(const string16& origin_identifier, 195 void SimpleDatabaseSystem::DatabaseClosed(
191 const string16& database_name) { 196 const base::string16& origin_identifier,
197 const base::string16& database_name) {
192 DCHECK(db_thread_proxy_->BelongsToCurrentThread()); 198 DCHECK(db_thread_proxy_->BelongsToCurrentThread());
193 db_tracker_->DatabaseClosed(origin_identifier, database_name); 199 db_tracker_->DatabaseClosed(origin_identifier, database_name);
194 open_connections_->RemoveOpenConnection(origin_identifier, database_name); 200 open_connections_->RemoveOpenConnection(origin_identifier, database_name);
195 } 201 }
196 202
197 void SimpleDatabaseSystem::OnDatabaseSizeChanged( 203 void SimpleDatabaseSystem::OnDatabaseSizeChanged(
198 const string16& origin_identifier, 204 const base::string16& origin_identifier,
199 const string16& database_name, 205 const base::string16& database_name,
200 int64 database_size) { 206 int64 database_size) {
201 DCHECK(db_thread_proxy_->BelongsToCurrentThread()); 207 DCHECK(db_thread_proxy_->BelongsToCurrentThread());
202 // We intentionally call into webkit on our background db_thread_ 208 // We intentionally call into webkit on our background db_thread_
203 // to better emulate what happens in chrome where this method is 209 // to better emulate what happens in chrome where this method is
204 // invoked on the background ipc thread. 210 // invoked on the background ipc thread.
205 WebKit::WebDatabase::updateDatabaseSize( 211 WebKit::WebDatabase::updateDatabaseSize(
206 origin_identifier, database_name, database_size); 212 origin_identifier, database_name, database_size);
207 } 213 }
208 214
209 void SimpleDatabaseSystem::OnDatabaseScheduledForDeletion( 215 void SimpleDatabaseSystem::OnDatabaseScheduledForDeletion(
210 const string16& origin_identifier, 216 const base::string16& origin_identifier,
211 const string16& database_name) { 217 const base::string16& database_name) {
212 DCHECK(db_thread_proxy_->BelongsToCurrentThread()); 218 DCHECK(db_thread_proxy_->BelongsToCurrentThread());
213 // We intentionally call into webkit on our background db_thread_ 219 // We intentionally call into webkit on our background db_thread_
214 // to better emulate what happens in chrome where this method is 220 // to better emulate what happens in chrome where this method is
215 // invoked on the background ipc thread. 221 // invoked on the background ipc thread.
216 WebKit::WebDatabase::closeDatabaseImmediately( 222 WebKit::WebDatabase::closeDatabaseImmediately(
217 origin_identifier, database_name); 223 origin_identifier, database_name);
218 } 224 }
219 225
220 void SimpleDatabaseSystem::VfsOpenFile( 226 void SimpleDatabaseSystem::VfsOpenFile(
221 const string16& vfs_file_name, int desired_flags, 227 const base::string16& vfs_file_name, int desired_flags,
222 base::PlatformFile* file_handle, base::WaitableEvent* done_event ) { 228 base::PlatformFile* file_handle, base::WaitableEvent* done_event ) {
223 DCHECK(db_thread_proxy_->BelongsToCurrentThread()); 229 DCHECK(db_thread_proxy_->BelongsToCurrentThread());
224 base::FilePath file_name = GetFullFilePathForVfsFile(vfs_file_name); 230 base::FilePath file_name = GetFullFilePathForVfsFile(vfs_file_name);
225 if (file_name.empty()) { 231 if (file_name.empty()) {
226 VfsBackend::OpenTempFileInDirectory( 232 VfsBackend::OpenTempFileInDirectory(
227 db_tracker_->DatabaseDirectory(), desired_flags, file_handle); 233 db_tracker_->DatabaseDirectory(), desired_flags, file_handle);
228 } else { 234 } else {
229 VfsBackend::OpenFile(file_name, desired_flags, file_handle); 235 VfsBackend::OpenFile(file_name, desired_flags, file_handle);
230 } 236 }
231 done_event->Signal(); 237 done_event->Signal();
232 } 238 }
233 239
234 void SimpleDatabaseSystem::VfsDeleteFile( 240 void SimpleDatabaseSystem::VfsDeleteFile(
235 const string16& vfs_file_name, bool sync_dir, 241 const base::string16& vfs_file_name, bool sync_dir,
236 int* result, base::WaitableEvent* done_event) { 242 int* result, base::WaitableEvent* done_event) {
237 DCHECK(db_thread_proxy_->BelongsToCurrentThread()); 243 DCHECK(db_thread_proxy_->BelongsToCurrentThread());
238 // We try to delete the file multiple times, because that's what the default 244 // We try to delete the file multiple times, because that's what the default
239 // VFS does (apparently deleting a file can sometimes fail on Windows). 245 // VFS does (apparently deleting a file can sometimes fail on Windows).
240 // We sleep for 10ms between retries for the same reason. 246 // We sleep for 10ms between retries for the same reason.
241 const int kNumDeleteRetries = 3; 247 const int kNumDeleteRetries = 3;
242 int num_retries = 0; 248 int num_retries = 0;
243 *result = SQLITE_OK; 249 *result = SQLITE_OK;
244 base::FilePath file_name = GetFullFilePathForVfsFile(vfs_file_name); 250 base::FilePath file_name = GetFullFilePathForVfsFile(vfs_file_name);
245 do { 251 do {
246 *result = VfsBackend::DeleteFile(file_name, sync_dir); 252 *result = VfsBackend::DeleteFile(file_name, sync_dir);
247 } while ((++num_retries < kNumDeleteRetries) && 253 } while ((++num_retries < kNumDeleteRetries) &&
248 (*result == SQLITE_IOERR_DELETE) && 254 (*result == SQLITE_IOERR_DELETE) &&
249 (base::PlatformThread::Sleep( 255 (base::PlatformThread::Sleep(
250 base::TimeDelta::FromMilliseconds(10)), 256 base::TimeDelta::FromMilliseconds(10)),
251 1)); 257 1));
252 258
253 done_event->Signal(); 259 done_event->Signal();
254 } 260 }
255 261
256 void SimpleDatabaseSystem::VfsGetFileAttributes( 262 void SimpleDatabaseSystem::VfsGetFileAttributes(
257 const string16& vfs_file_name, 263 const base::string16& vfs_file_name,
258 uint32* result, base::WaitableEvent* done_event) { 264 uint32* result, base::WaitableEvent* done_event) {
259 DCHECK(db_thread_proxy_->BelongsToCurrentThread()); 265 DCHECK(db_thread_proxy_->BelongsToCurrentThread());
260 *result = VfsBackend::GetFileAttributes( 266 *result = VfsBackend::GetFileAttributes(
261 GetFullFilePathForVfsFile(vfs_file_name)); 267 GetFullFilePathForVfsFile(vfs_file_name));
262 done_event->Signal(); 268 done_event->Signal();
263 } 269 }
264 270
265 void SimpleDatabaseSystem::VfsGetFileSize( 271 void SimpleDatabaseSystem::VfsGetFileSize(
266 const string16& vfs_file_name, 272 const base::string16& vfs_file_name,
267 int64* result, base::WaitableEvent* done_event) { 273 int64* result, base::WaitableEvent* done_event) {
268 DCHECK(db_thread_proxy_->BelongsToCurrentThread()); 274 DCHECK(db_thread_proxy_->BelongsToCurrentThread());
269 *result = VfsBackend::GetFileSize(GetFullFilePathForVfsFile(vfs_file_name)); 275 *result = VfsBackend::GetFileSize(GetFullFilePathForVfsFile(vfs_file_name));
270 done_event->Signal(); 276 done_event->Signal();
271 } 277 }
272 278
273 void SimpleDatabaseSystem::VfsGetSpaceAvailable( 279 void SimpleDatabaseSystem::VfsGetSpaceAvailable(
274 const string16& origin_identifier, 280 const base::string16& origin_identifier,
275 int64* result, base::WaitableEvent* done_event) { 281 int64* result, base::WaitableEvent* done_event) {
276 DCHECK(db_thread_proxy_->BelongsToCurrentThread()); 282 DCHECK(db_thread_proxy_->BelongsToCurrentThread());
277 // This method isn't actually part of the "vfs" interface, but it is 283 // This method isn't actually part of the "vfs" interface, but it is
278 // used from within webcore and handled here in the same fashion. 284 // used from within webcore and handled here in the same fashion.
279 OriginInfo info; 285 OriginInfo info;
280 if (db_tracker_->GetOriginInfo(origin_identifier, &info)) { 286 if (db_tracker_->GetOriginInfo(origin_identifier, &info)) {
281 int64 space_available = quota_per_origin_ - info.TotalSize(); 287 int64 space_available = quota_per_origin_ - info.TotalSize();
282 *result = space_available < 0 ? 0 : space_available; 288 *result = space_available < 0 ? 0 : space_available;
283 } else { 289 } else {
284 NOTREACHED(); 290 NOTREACHED();
285 *result = 0; 291 *result = 0;
286 } 292 }
287 done_event->Signal(); 293 done_event->Signal();
288 } 294 }
289 295
290 base::FilePath SimpleDatabaseSystem::GetFullFilePathForVfsFile( 296 base::FilePath SimpleDatabaseSystem::GetFullFilePathForVfsFile(
291 const string16& vfs_file_name) { 297 const base::string16& vfs_file_name) {
292 DCHECK(db_thread_proxy_->BelongsToCurrentThread()); 298 DCHECK(db_thread_proxy_->BelongsToCurrentThread());
293 if (vfs_file_name.empty()) // temp file, used for vacuuming 299 if (vfs_file_name.empty()) // temp file, used for vacuuming
294 return base::FilePath(); 300 return base::FilePath();
295 return DatabaseUtil::GetFullFilePathForVfsFile( 301 return DatabaseUtil::GetFullFilePathForVfsFile(
296 db_tracker_.get(), vfs_file_name); 302 db_tracker_.get(), vfs_file_name);
297 } 303 }
298 304
299 void SimpleDatabaseSystem::ResetTracker() { 305 void SimpleDatabaseSystem::ResetTracker() {
300 DCHECK(db_thread_proxy_->BelongsToCurrentThread()); 306 DCHECK(db_thread_proxy_->BelongsToCurrentThread());
301 db_tracker_->CloseTrackerDatabaseAndClearCaches(); 307 db_tracker_->CloseTrackerDatabaseAndClearCaches();
302 file_util::Delete(db_tracker_->DatabaseDirectory(), true); 308 file_util::Delete(db_tracker_->DatabaseDirectory(), true);
303 } 309 }
304 310
305 void SimpleDatabaseSystem::ThreadCleanup(base::WaitableEvent* done_event) { 311 void SimpleDatabaseSystem::ThreadCleanup(base::WaitableEvent* done_event) {
306 ResetTracker(); 312 ResetTracker();
307 db_tracker_->RemoveObserver(this); 313 db_tracker_->RemoveObserver(this);
308 db_tracker_ = NULL; 314 db_tracker_ = NULL;
309 done_event->Signal(); 315 done_event->Signal();
310 } 316 }
311 317
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698