| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/database_impl.h" | 5 #include "content/browser/indexed_db/database_impl.h" |
| 6 | 6 |
| 7 #include "base/memory/ptr_util.h" | 7 #include "base/memory/ptr_util.h" |
| 8 #include "base/metrics/histogram_macros.h" | 8 #include "base/metrics/histogram_macros.h" |
| 9 #include "base/numerics/safe_math.h" | 9 #include "base/numerics/safe_math.h" |
| 10 #include "base/sequence_checker.h" | 10 #include "base/sequence_checker.h" |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 const url::Origin& origin, | 147 const url::Origin& origin, |
| 148 IndexedDBDispatcherHost* dispatcher_host, | 148 IndexedDBDispatcherHost* dispatcher_host, |
| 149 scoped_refptr<base::SequencedTaskRunner> idb_runner) | 149 scoped_refptr<base::SequencedTaskRunner> idb_runner) |
| 150 : dispatcher_host_(dispatcher_host), | 150 : dispatcher_host_(dispatcher_host), |
| 151 origin_(origin), | 151 origin_(origin), |
| 152 idb_runner_(std::move(idb_runner)) { | 152 idb_runner_(std::move(idb_runner)) { |
| 153 DCHECK(connection); | 153 DCHECK(connection); |
| 154 helper_ = new IDBSequenceHelper(std::move(connection), origin, | 154 helper_ = new IDBSequenceHelper(std::move(connection), origin, |
| 155 dispatcher_host->context()); | 155 dispatcher_host->context()); |
| 156 idb_runner_->PostTask(FROM_HERE, | 156 idb_runner_->PostTask(FROM_HERE, |
| 157 base::Bind(&IDBSequenceHelper::ConnectionOpened, | 157 base::BindOnce(&IDBSequenceHelper::ConnectionOpened, |
| 158 base::Unretained(helper_))); | 158 base::Unretained(helper_))); |
| 159 } | 159 } |
| 160 | 160 |
| 161 DatabaseImpl::~DatabaseImpl() { | 161 DatabaseImpl::~DatabaseImpl() { |
| 162 idb_runner_->DeleteSoon(FROM_HERE, helper_); | 162 idb_runner_->DeleteSoon(FROM_HERE, helper_); |
| 163 } | 163 } |
| 164 | 164 |
| 165 void DatabaseImpl::CreateObjectStore(int64_t transaction_id, | 165 void DatabaseImpl::CreateObjectStore(int64_t transaction_id, |
| 166 int64_t object_store_id, | 166 int64_t object_store_id, |
| 167 const base::string16& name, | 167 const base::string16& name, |
| 168 const IndexedDBKeyPath& key_path, | 168 const IndexedDBKeyPath& key_path, |
| 169 bool auto_increment) { | 169 bool auto_increment) { |
| 170 idb_runner_->PostTask( | 170 idb_runner_->PostTask( |
| 171 FROM_HERE, base::Bind(&IDBSequenceHelper::CreateObjectStore, | 171 FROM_HERE, |
| 172 base::Unretained(helper_), transaction_id, | 172 base::BindOnce(&IDBSequenceHelper::CreateObjectStore, |
| 173 object_store_id, name, key_path, auto_increment)); | 173 base::Unretained(helper_), transaction_id, object_store_id, |
| 174 name, key_path, auto_increment)); |
| 174 } | 175 } |
| 175 | 176 |
| 176 void DatabaseImpl::DeleteObjectStore(int64_t transaction_id, | 177 void DatabaseImpl::DeleteObjectStore(int64_t transaction_id, |
| 177 int64_t object_store_id) { | 178 int64_t object_store_id) { |
| 178 idb_runner_->PostTask( | 179 idb_runner_->PostTask( |
| 179 FROM_HERE, | 180 FROM_HERE, base::BindOnce(&IDBSequenceHelper::DeleteObjectStore, |
| 180 base::Bind(&IDBSequenceHelper::DeleteObjectStore, | 181 base::Unretained(helper_), transaction_id, |
| 181 base::Unretained(helper_), transaction_id, object_store_id)); | 182 object_store_id)); |
| 182 } | 183 } |
| 183 | 184 |
| 184 void DatabaseImpl::RenameObjectStore(int64_t transaction_id, | 185 void DatabaseImpl::RenameObjectStore(int64_t transaction_id, |
| 185 int64_t object_store_id, | 186 int64_t object_store_id, |
| 186 const base::string16& new_name) { | 187 const base::string16& new_name) { |
| 187 idb_runner_->PostTask(FROM_HERE, | 188 idb_runner_->PostTask( |
| 188 base::Bind(&IDBSequenceHelper::RenameObjectStore, | 189 FROM_HERE, base::BindOnce(&IDBSequenceHelper::RenameObjectStore, |
| 189 base::Unretained(helper_), transaction_id, | 190 base::Unretained(helper_), transaction_id, |
| 190 object_store_id, new_name)); | 191 object_store_id, new_name)); |
| 191 } | 192 } |
| 192 | 193 |
| 193 void DatabaseImpl::CreateTransaction( | 194 void DatabaseImpl::CreateTransaction( |
| 194 int64_t transaction_id, | 195 int64_t transaction_id, |
| 195 const std::vector<int64_t>& object_store_ids, | 196 const std::vector<int64_t>& object_store_ids, |
| 196 blink::WebIDBTransactionMode mode) { | 197 blink::WebIDBTransactionMode mode) { |
| 197 idb_runner_->PostTask(FROM_HERE, | 198 idb_runner_->PostTask( |
| 198 base::Bind(&IDBSequenceHelper::CreateTransaction, | 199 FROM_HERE, base::BindOnce(&IDBSequenceHelper::CreateTransaction, |
| 199 base::Unretained(helper_), transaction_id, | 200 base::Unretained(helper_), transaction_id, |
| 200 object_store_ids, mode)); | 201 object_store_ids, mode)); |
| 201 } | 202 } |
| 202 | 203 |
| 203 void DatabaseImpl::Close() { | 204 void DatabaseImpl::Close() { |
| 204 idb_runner_->PostTask(FROM_HERE, base::Bind(&IDBSequenceHelper::Close, | 205 idb_runner_->PostTask(FROM_HERE, base::BindOnce(&IDBSequenceHelper::Close, |
| 205 base::Unretained(helper_))); | 206 base::Unretained(helper_))); |
| 206 } | 207 } |
| 207 | 208 |
| 208 void DatabaseImpl::VersionChangeIgnored() { | 209 void DatabaseImpl::VersionChangeIgnored() { |
| 209 idb_runner_->PostTask(FROM_HERE, | 210 idb_runner_->PostTask(FROM_HERE, |
| 210 base::Bind(&IDBSequenceHelper::VersionChangeIgnored, | 211 base::BindOnce(&IDBSequenceHelper::VersionChangeIgnored, |
| 211 base::Unretained(helper_))); | 212 base::Unretained(helper_))); |
| 212 } | 213 } |
| 213 | 214 |
| 214 void DatabaseImpl::AddObserver(int64_t transaction_id, | 215 void DatabaseImpl::AddObserver(int64_t transaction_id, |
| 215 int32_t observer_id, | 216 int32_t observer_id, |
| 216 bool include_transaction, | 217 bool include_transaction, |
| 217 bool no_records, | 218 bool no_records, |
| 218 bool values, | 219 bool values, |
| 219 uint16_t operation_types) { | 220 uint16_t operation_types) { |
| 220 idb_runner_->PostTask( | 221 idb_runner_->PostTask( |
| 221 FROM_HERE, | 222 FROM_HERE, |
| 222 base::Bind(&IDBSequenceHelper::AddObserver, base::Unretained(helper_), | 223 base::BindOnce(&IDBSequenceHelper::AddObserver, base::Unretained(helper_), |
| 223 transaction_id, observer_id, include_transaction, no_records, | 224 transaction_id, observer_id, include_transaction, |
| 224 values, operation_types)); | 225 no_records, values, operation_types)); |
| 225 } | 226 } |
| 226 | 227 |
| 227 void DatabaseImpl::RemoveObservers(const std::vector<int32_t>& observers) { | 228 void DatabaseImpl::RemoveObservers(const std::vector<int32_t>& observers) { |
| 228 idb_runner_->PostTask(FROM_HERE, | 229 idb_runner_->PostTask(FROM_HERE, |
| 229 base::Bind(&IDBSequenceHelper::RemoveObservers, | 230 base::BindOnce(&IDBSequenceHelper::RemoveObservers, |
| 230 base::Unretained(helper_), observers)); | 231 base::Unretained(helper_), observers)); |
| 231 } | 232 } |
| 232 | 233 |
| 233 void DatabaseImpl::Get( | 234 void DatabaseImpl::Get( |
| 234 int64_t transaction_id, | 235 int64_t transaction_id, |
| 235 int64_t object_store_id, | 236 int64_t object_store_id, |
| 236 int64_t index_id, | 237 int64_t index_id, |
| 237 const IndexedDBKeyRange& key_range, | 238 const IndexedDBKeyRange& key_range, |
| 238 bool key_only, | 239 bool key_only, |
| 239 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) { | 240 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) { |
| 240 scoped_refptr<IndexedDBCallbacks> callbacks( | 241 scoped_refptr<IndexedDBCallbacks> callbacks( |
| 241 new IndexedDBCallbacks(dispatcher_host_->AsWeakPtr(), origin_, | 242 new IndexedDBCallbacks(dispatcher_host_->AsWeakPtr(), origin_, |
| 242 std::move(callbacks_info), idb_runner_)); | 243 std::move(callbacks_info), idb_runner_)); |
| 243 idb_runner_->PostTask( | 244 idb_runner_->PostTask( |
| 244 FROM_HERE, base::Bind(&IDBSequenceHelper::Get, base::Unretained(helper_), | 245 FROM_HERE, |
| 245 transaction_id, object_store_id, index_id, | 246 base::BindOnce(&IDBSequenceHelper::Get, base::Unretained(helper_), |
| 246 key_range, key_only, base::Passed(&callbacks))); | 247 transaction_id, object_store_id, index_id, key_range, |
| 248 key_only, base::Passed(&callbacks))); |
| 247 } | 249 } |
| 248 | 250 |
| 249 void DatabaseImpl::GetAll( | 251 void DatabaseImpl::GetAll( |
| 250 int64_t transaction_id, | 252 int64_t transaction_id, |
| 251 int64_t object_store_id, | 253 int64_t object_store_id, |
| 252 int64_t index_id, | 254 int64_t index_id, |
| 253 const IndexedDBKeyRange& key_range, | 255 const IndexedDBKeyRange& key_range, |
| 254 bool key_only, | 256 bool key_only, |
| 255 int64_t max_count, | 257 int64_t max_count, |
| 256 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) { | 258 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) { |
| 257 scoped_refptr<IndexedDBCallbacks> callbacks( | 259 scoped_refptr<IndexedDBCallbacks> callbacks( |
| 258 new IndexedDBCallbacks(dispatcher_host_->AsWeakPtr(), origin_, | 260 new IndexedDBCallbacks(dispatcher_host_->AsWeakPtr(), origin_, |
| 259 std::move(callbacks_info), idb_runner_)); | 261 std::move(callbacks_info), idb_runner_)); |
| 260 idb_runner_->PostTask( | 262 idb_runner_->PostTask( |
| 261 FROM_HERE, | 263 FROM_HERE, |
| 262 base::Bind(&IDBSequenceHelper::GetAll, base::Unretained(helper_), | 264 base::BindOnce(&IDBSequenceHelper::GetAll, base::Unretained(helper_), |
| 263 transaction_id, object_store_id, index_id, key_range, key_only, | 265 transaction_id, object_store_id, index_id, key_range, |
| 264 max_count, base::Passed(&callbacks))); | 266 key_only, max_count, base::Passed(&callbacks))); |
| 265 } | 267 } |
| 266 | 268 |
| 267 void DatabaseImpl::Put( | 269 void DatabaseImpl::Put( |
| 268 int64_t transaction_id, | 270 int64_t transaction_id, |
| 269 int64_t object_store_id, | 271 int64_t object_store_id, |
| 270 ::indexed_db::mojom::ValuePtr value, | 272 ::indexed_db::mojom::ValuePtr value, |
| 271 const IndexedDBKey& key, | 273 const IndexedDBKey& key, |
| 272 blink::WebIDBPutMode mode, | 274 blink::WebIDBPutMode mode, |
| 273 const std::vector<IndexedDBIndexKeys>& index_keys, | 275 const std::vector<IndexedDBIndexKeys>& index_keys, |
| 274 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) { | 276 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 292 | 294 |
| 293 // Due to known issue crbug.com/351753, blobs can die while being passed to | 295 // Due to known issue crbug.com/351753, blobs can die while being passed to |
| 294 // a different process. So this case must be handled gracefully. | 296 // a different process. So this case must be handled gracefully. |
| 295 // TODO(dmurph): Revert back to using mojo::ReportBadMessage once fixed. | 297 // TODO(dmurph): Revert back to using mojo::ReportBadMessage once fixed. |
| 296 UMA_HISTOGRAM_BOOLEAN("Storage.IndexedDB.PutValidBlob", | 298 UMA_HISTOGRAM_BOOLEAN("Storage.IndexedDB.PutValidBlob", |
| 297 handle.get() != nullptr); | 299 handle.get() != nullptr); |
| 298 if (!handle) { | 300 if (!handle) { |
| 299 IndexedDBDatabaseError error(blink::kWebIDBDatabaseExceptionUnknownError, | 301 IndexedDBDatabaseError error(blink::kWebIDBDatabaseExceptionUnknownError, |
| 300 kInvalidBlobUuid); | 302 kInvalidBlobUuid); |
| 301 idb_runner_->PostTask( | 303 idb_runner_->PostTask( |
| 302 FROM_HERE, base::Bind(&IDBSequenceHelper::AbortWithError, | 304 FROM_HERE, base::BindOnce(&IDBSequenceHelper::AbortWithError, |
| 303 base::Unretained(helper_), transaction_id, | 305 base::Unretained(helper_), transaction_id, |
| 304 base::Passed(&callbacks), error)); | 306 base::Passed(&callbacks), error)); |
| 305 return; | 307 return; |
| 306 } | 308 } |
| 307 uint64_t size = handle->size(); | 309 uint64_t size = handle->size(); |
| 308 UMA_HISTOGRAM_MEMORY_KB("Storage.IndexedDB.PutBlobSizeKB", size / 1024ull); | 310 UMA_HISTOGRAM_MEMORY_KB("Storage.IndexedDB.PutBlobSizeKB", size / 1024ull); |
| 309 total_blob_size += size; | 311 total_blob_size += size; |
| 310 handles[i] = std::move(handle); | 312 handles[i] = std::move(handle); |
| 311 | 313 |
| 312 if (info->file) { | 314 if (info->file) { |
| 313 if (!info->file->path.empty() && | 315 if (!info->file->path.empty() && |
| 314 !policy->CanReadFile(dispatcher_host_->ipc_process_id(), | 316 !policy->CanReadFile(dispatcher_host_->ipc_process_id(), |
| (...skipping 15 matching lines...) Expand all Loading... |
| 330 blob_info.size()); | 332 blob_info.size()); |
| 331 uint64_t blob_size = 0; | 333 uint64_t blob_size = 0; |
| 332 total_blob_size.AssignIfValid(&blob_size); | 334 total_blob_size.AssignIfValid(&blob_size); |
| 333 if (blob_size != 0) { | 335 if (blob_size != 0) { |
| 334 // 1KB to 1GB. | 336 // 1KB to 1GB. |
| 335 UMA_HISTOGRAM_COUNTS_1M("WebCore.IndexedDB.PutBlobsTotalSize", | 337 UMA_HISTOGRAM_COUNTS_1M("WebCore.IndexedDB.PutBlobsTotalSize", |
| 336 blob_size / 1024); | 338 blob_size / 1024); |
| 337 } | 339 } |
| 338 idb_runner_->PostTask( | 340 idb_runner_->PostTask( |
| 339 FROM_HERE, | 341 FROM_HERE, |
| 340 base::Bind(&IDBSequenceHelper::Put, base::Unretained(helper_), | 342 base::BindOnce(&IDBSequenceHelper::Put, base::Unretained(helper_), |
| 341 transaction_id, object_store_id, base::Passed(&value), | 343 transaction_id, object_store_id, base::Passed(&value), |
| 342 base::Passed(&handles), base::Passed(&blob_info), key, mode, | 344 base::Passed(&handles), base::Passed(&blob_info), key, |
| 343 index_keys, base::Passed(&callbacks))); | 345 mode, index_keys, base::Passed(&callbacks))); |
| 344 } | 346 } |
| 345 | 347 |
| 346 void DatabaseImpl::SetIndexKeys( | 348 void DatabaseImpl::SetIndexKeys( |
| 347 int64_t transaction_id, | 349 int64_t transaction_id, |
| 348 int64_t object_store_id, | 350 int64_t object_store_id, |
| 349 const IndexedDBKey& primary_key, | 351 const IndexedDBKey& primary_key, |
| 350 const std::vector<IndexedDBIndexKeys>& index_keys) { | 352 const std::vector<IndexedDBIndexKeys>& index_keys) { |
| 351 idb_runner_->PostTask( | 353 idb_runner_->PostTask( |
| 352 FROM_HERE, | 354 FROM_HERE, base::BindOnce(&IDBSequenceHelper::SetIndexKeys, |
| 353 base::Bind(&IDBSequenceHelper::SetIndexKeys, base::Unretained(helper_), | 355 base::Unretained(helper_), transaction_id, |
| 354 transaction_id, object_store_id, primary_key, index_keys)); | 356 object_store_id, primary_key, index_keys)); |
| 355 } | 357 } |
| 356 | 358 |
| 357 void DatabaseImpl::SetIndexesReady(int64_t transaction_id, | 359 void DatabaseImpl::SetIndexesReady(int64_t transaction_id, |
| 358 int64_t object_store_id, | 360 int64_t object_store_id, |
| 359 const std::vector<int64_t>& index_ids) { | 361 const std::vector<int64_t>& index_ids) { |
| 360 idb_runner_->PostTask( | 362 idb_runner_->PostTask( |
| 361 FROM_HERE, | 363 FROM_HERE, base::BindOnce(&IDBSequenceHelper::SetIndexesReady, |
| 362 base::Bind(&IDBSequenceHelper::SetIndexesReady, base::Unretained(helper_), | 364 base::Unretained(helper_), transaction_id, |
| 363 transaction_id, object_store_id, index_ids)); | 365 object_store_id, index_ids)); |
| 364 } | 366 } |
| 365 | 367 |
| 366 void DatabaseImpl::OpenCursor( | 368 void DatabaseImpl::OpenCursor( |
| 367 int64_t transaction_id, | 369 int64_t transaction_id, |
| 368 int64_t object_store_id, | 370 int64_t object_store_id, |
| 369 int64_t index_id, | 371 int64_t index_id, |
| 370 const IndexedDBKeyRange& key_range, | 372 const IndexedDBKeyRange& key_range, |
| 371 blink::WebIDBCursorDirection direction, | 373 blink::WebIDBCursorDirection direction, |
| 372 bool key_only, | 374 bool key_only, |
| 373 blink::WebIDBTaskType task_type, | 375 blink::WebIDBTaskType task_type, |
| 374 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) { | 376 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) { |
| 375 scoped_refptr<IndexedDBCallbacks> callbacks( | 377 scoped_refptr<IndexedDBCallbacks> callbacks( |
| 376 new IndexedDBCallbacks(dispatcher_host_->AsWeakPtr(), origin_, | 378 new IndexedDBCallbacks(dispatcher_host_->AsWeakPtr(), origin_, |
| 377 std::move(callbacks_info), idb_runner_)); | 379 std::move(callbacks_info), idb_runner_)); |
| 378 idb_runner_->PostTask( | 380 idb_runner_->PostTask( |
| 379 FROM_HERE, | 381 FROM_HERE, |
| 380 base::Bind(&IDBSequenceHelper::OpenCursor, base::Unretained(helper_), | 382 base::BindOnce(&IDBSequenceHelper::OpenCursor, base::Unretained(helper_), |
| 381 transaction_id, object_store_id, index_id, key_range, | 383 transaction_id, object_store_id, index_id, key_range, |
| 382 direction, key_only, task_type, base::Passed(&callbacks))); | 384 direction, key_only, task_type, base::Passed(&callbacks))); |
| 383 } | 385 } |
| 384 | 386 |
| 385 void DatabaseImpl::Count( | 387 void DatabaseImpl::Count( |
| 386 int64_t transaction_id, | 388 int64_t transaction_id, |
| 387 int64_t object_store_id, | 389 int64_t object_store_id, |
| 388 int64_t index_id, | 390 int64_t index_id, |
| 389 const IndexedDBKeyRange& key_range, | 391 const IndexedDBKeyRange& key_range, |
| 390 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) { | 392 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) { |
| 391 scoped_refptr<IndexedDBCallbacks> callbacks( | 393 scoped_refptr<IndexedDBCallbacks> callbacks( |
| 392 new IndexedDBCallbacks(dispatcher_host_->AsWeakPtr(), origin_, | 394 new IndexedDBCallbacks(dispatcher_host_->AsWeakPtr(), origin_, |
| 393 std::move(callbacks_info), idb_runner_)); | 395 std::move(callbacks_info), idb_runner_)); |
| 394 idb_runner_->PostTask( | 396 idb_runner_->PostTask( |
| 395 FROM_HERE, | 397 FROM_HERE, |
| 396 base::Bind(&IDBSequenceHelper::Count, base::Unretained(helper_), | 398 base::BindOnce(&IDBSequenceHelper::Count, base::Unretained(helper_), |
| 397 transaction_id, object_store_id, index_id, key_range, | 399 transaction_id, object_store_id, index_id, key_range, |
| 398 base::Passed(&callbacks))); | 400 base::Passed(&callbacks))); |
| 399 } | 401 } |
| 400 | 402 |
| 401 void DatabaseImpl::DeleteRange( | 403 void DatabaseImpl::DeleteRange( |
| 402 int64_t transaction_id, | 404 int64_t transaction_id, |
| 403 int64_t object_store_id, | 405 int64_t object_store_id, |
| 404 const IndexedDBKeyRange& key_range, | 406 const IndexedDBKeyRange& key_range, |
| 405 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) { | 407 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) { |
| 406 scoped_refptr<IndexedDBCallbacks> callbacks( | 408 scoped_refptr<IndexedDBCallbacks> callbacks( |
| 407 new IndexedDBCallbacks(dispatcher_host_->AsWeakPtr(), origin_, | 409 new IndexedDBCallbacks(dispatcher_host_->AsWeakPtr(), origin_, |
| 408 std::move(callbacks_info), idb_runner_)); | 410 std::move(callbacks_info), idb_runner_)); |
| 409 idb_runner_->PostTask( | 411 idb_runner_->PostTask( |
| 410 FROM_HERE, | 412 FROM_HERE, |
| 411 base::Bind(&IDBSequenceHelper::DeleteRange, base::Unretained(helper_), | 413 base::BindOnce(&IDBSequenceHelper::DeleteRange, base::Unretained(helper_), |
| 412 transaction_id, object_store_id, key_range, | 414 transaction_id, object_store_id, key_range, |
| 413 base::Passed(&callbacks))); | 415 base::Passed(&callbacks))); |
| 414 } | 416 } |
| 415 | 417 |
| 416 void DatabaseImpl::Clear( | 418 void DatabaseImpl::Clear( |
| 417 int64_t transaction_id, | 419 int64_t transaction_id, |
| 418 int64_t object_store_id, | 420 int64_t object_store_id, |
| 419 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) { | 421 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) { |
| 420 scoped_refptr<IndexedDBCallbacks> callbacks( | 422 scoped_refptr<IndexedDBCallbacks> callbacks( |
| 421 new IndexedDBCallbacks(dispatcher_host_->AsWeakPtr(), origin_, | 423 new IndexedDBCallbacks(dispatcher_host_->AsWeakPtr(), origin_, |
| 422 std::move(callbacks_info), idb_runner_)); | 424 std::move(callbacks_info), idb_runner_)); |
| 423 idb_runner_->PostTask( | 425 idb_runner_->PostTask( |
| 424 FROM_HERE, | 426 FROM_HERE, base::BindOnce(&IDBSequenceHelper::Clear, |
| 425 base::Bind(&IDBSequenceHelper::Clear, base::Unretained(helper_), | 427 base::Unretained(helper_), transaction_id, |
| 426 transaction_id, object_store_id, base::Passed(&callbacks))); | 428 object_store_id, base::Passed(&callbacks))); |
| 427 } | 429 } |
| 428 | 430 |
| 429 void DatabaseImpl::CreateIndex(int64_t transaction_id, | 431 void DatabaseImpl::CreateIndex(int64_t transaction_id, |
| 430 int64_t object_store_id, | 432 int64_t object_store_id, |
| 431 int64_t index_id, | 433 int64_t index_id, |
| 432 const base::string16& name, | 434 const base::string16& name, |
| 433 const IndexedDBKeyPath& key_path, | 435 const IndexedDBKeyPath& key_path, |
| 434 bool unique, | 436 bool unique, |
| 435 bool multi_entry) { | 437 bool multi_entry) { |
| 436 idb_runner_->PostTask( | 438 idb_runner_->PostTask( |
| 437 FROM_HERE, | 439 FROM_HERE, |
| 438 base::Bind(&IDBSequenceHelper::CreateIndex, base::Unretained(helper_), | 440 base::BindOnce(&IDBSequenceHelper::CreateIndex, base::Unretained(helper_), |
| 439 transaction_id, object_store_id, index_id, name, key_path, | 441 transaction_id, object_store_id, index_id, name, key_path, |
| 440 unique, multi_entry)); | 442 unique, multi_entry)); |
| 441 } | 443 } |
| 442 | 444 |
| 443 void DatabaseImpl::DeleteIndex(int64_t transaction_id, | 445 void DatabaseImpl::DeleteIndex(int64_t transaction_id, |
| 444 int64_t object_store_id, | 446 int64_t object_store_id, |
| 445 int64_t index_id) { | 447 int64_t index_id) { |
| 446 idb_runner_->PostTask( | 448 idb_runner_->PostTask( |
| 447 FROM_HERE, | 449 FROM_HERE, |
| 448 base::Bind(&IDBSequenceHelper::DeleteIndex, base::Unretained(helper_), | 450 base::BindOnce(&IDBSequenceHelper::DeleteIndex, base::Unretained(helper_), |
| 449 transaction_id, object_store_id, index_id)); | 451 transaction_id, object_store_id, index_id)); |
| 450 } | 452 } |
| 451 | 453 |
| 452 void DatabaseImpl::RenameIndex(int64_t transaction_id, | 454 void DatabaseImpl::RenameIndex(int64_t transaction_id, |
| 453 int64_t object_store_id, | 455 int64_t object_store_id, |
| 454 int64_t index_id, | 456 int64_t index_id, |
| 455 const base::string16& new_name) { | 457 const base::string16& new_name) { |
| 456 idb_runner_->PostTask( | 458 idb_runner_->PostTask( |
| 457 FROM_HERE, | 459 FROM_HERE, |
| 458 base::Bind(&IDBSequenceHelper::RenameIndex, base::Unretained(helper_), | 460 base::BindOnce(&IDBSequenceHelper::RenameIndex, base::Unretained(helper_), |
| 459 transaction_id, object_store_id, index_id, new_name)); | 461 transaction_id, object_store_id, index_id, new_name)); |
| 460 } | 462 } |
| 461 | 463 |
| 462 void DatabaseImpl::Abort(int64_t transaction_id) { | 464 void DatabaseImpl::Abort(int64_t transaction_id) { |
| 463 idb_runner_->PostTask(FROM_HERE, | 465 idb_runner_->PostTask( |
| 464 base::Bind(&IDBSequenceHelper::Abort, | 466 FROM_HERE, base::BindOnce(&IDBSequenceHelper::Abort, |
| 465 base::Unretained(helper_), transaction_id)); | 467 base::Unretained(helper_), transaction_id)); |
| 466 } | 468 } |
| 467 | 469 |
| 468 void DatabaseImpl::Commit(int64_t transaction_id) { | 470 void DatabaseImpl::Commit(int64_t transaction_id) { |
| 469 idb_runner_->PostTask(FROM_HERE, | 471 idb_runner_->PostTask( |
| 470 base::Bind(&IDBSequenceHelper::Commit, | 472 FROM_HERE, base::BindOnce(&IDBSequenceHelper::Commit, |
| 471 base::Unretained(helper_), transaction_id)); | 473 base::Unretained(helper_), transaction_id)); |
| 472 } | 474 } |
| 473 | 475 |
| 474 void DatabaseImpl::AckReceivedBlobs(const std::vector<std::string>& uuids) { | 476 void DatabaseImpl::AckReceivedBlobs(const std::vector<std::string>& uuids) { |
| 475 for (const auto& uuid : uuids) | 477 for (const auto& uuid : uuids) |
| 476 dispatcher_host_->DropBlobData(uuid); | 478 dispatcher_host_->DropBlobData(uuid); |
| 477 } | 479 } |
| 478 | 480 |
| 479 DatabaseImpl::IDBSequenceHelper::IDBSequenceHelper( | 481 DatabaseImpl::IDBSequenceHelper::IDBSequenceHelper( |
| 480 std::unique_ptr<IndexedDBConnection> connection, | 482 std::unique_ptr<IndexedDBConnection> connection, |
| 481 const url::Origin& origin, | 483 const url::Origin& origin, |
| (...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 939 usage + transaction->size() <= quota) { | 941 usage + transaction->size() <= quota) { |
| 940 connection_->database()->Commit(transaction); | 942 connection_->database()->Commit(transaction); |
| 941 } else { | 943 } else { |
| 942 connection_->AbortTransaction( | 944 connection_->AbortTransaction( |
| 943 transaction, | 945 transaction, |
| 944 IndexedDBDatabaseError(blink::kWebIDBDatabaseExceptionQuotaError)); | 946 IndexedDBDatabaseError(blink::kWebIDBDatabaseExceptionQuotaError)); |
| 945 } | 947 } |
| 946 } | 948 } |
| 947 | 949 |
| 948 } // namespace content | 950 } // namespace content |
| OLD | NEW |