| 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 "components/offline_pages/offline_page_metadata_store_sql.h" | 5 #include "components/offline_pages/offline_page_metadata_store_sql.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/files/file_path.h" | 8 #include "base/files/file_path.h" |
| 9 #include "base/files/file_util.h" | 9 #include "base/files/file_util.h" |
| 10 #include "base/location.h" | 10 #include "base/location.h" |
| (...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 268 if (statement.Succeeded()) { | 268 if (statement.Succeeded()) { |
| 269 NotifyLoadResult(runner, callback, OfflinePageMetadataStore::LOAD_SUCCEEDED, | 269 NotifyLoadResult(runner, callback, OfflinePageMetadataStore::LOAD_SUCCEEDED, |
| 270 result); | 270 result); |
| 271 } else { | 271 } else { |
| 272 result.clear(); | 272 result.clear(); |
| 273 NotifyLoadResult(runner, callback, | 273 NotifyLoadResult(runner, callback, |
| 274 OfflinePageMetadataStore::STORE_LOAD_FAILED, result); | 274 OfflinePageMetadataStore::STORE_LOAD_FAILED, result); |
| 275 } | 275 } |
| 276 } | 276 } |
| 277 | 277 |
| 278 void AddOrUpdateOfflinePageSync( | 278 void AddOfflinePageSync(sql::Connection* db, |
| 279 const OfflinePageItem& offline_page, | 279 scoped_refptr<base::SingleThreadTaskRunner> runner, |
| 280 const OfflinePageItem& offline_page, |
| 281 const OfflinePageMetadataStore::AddCallback& callback) { |
| 282 // TODO(fgorski): Only insert should happen here. |
| 283 InsertOrReplace(db, offline_page); |
| 284 runner->PostTask(FROM_HERE, |
| 285 base::Bind(callback, OfflinePageMetadataStore::SUCCESS)); |
| 286 } |
| 287 |
| 288 void UpdateOfflinePagesSync( |
| 280 sql::Connection* db, | 289 sql::Connection* db, |
| 281 scoped_refptr<base::SingleThreadTaskRunner> runner, | 290 scoped_refptr<base::SingleThreadTaskRunner> runner, |
| 291 const std::vector<OfflinePageItem>& pages, |
| 282 const OfflinePageMetadataStore::UpdateCallback& callback) { | 292 const OfflinePageMetadataStore::UpdateCallback& callback) { |
| 283 // TODO(bburns): add UMA metrics here (and for levelDB). | 293 // TODO(fgorski): Update the callback to provide information about all items |
| 284 bool ok = InsertOrReplace(db, offline_page); | 294 // and not just a high level boolean. |
| 285 runner->PostTask(FROM_HERE, base::Bind(callback, ok)); | 295 sql::Transaction transaction(db); |
| 296 if (!transaction.Begin()) { |
| 297 runner->PostTask(FROM_HERE, base::Bind(callback, false)); |
| 298 return; |
| 299 } |
| 300 |
| 301 // TODO(fgorski): Switch to only accept updates and not create new items. |
| 302 for (auto& page : pages) |
| 303 InsertOrReplace(db, page); |
| 304 |
| 305 bool result = transaction.Commit(); |
| 306 runner->PostTask(FROM_HERE, base::Bind(callback, result)); |
| 286 } | 307 } |
| 287 | 308 |
| 288 void RemoveOfflinePagesSync( | 309 void RemoveOfflinePagesSync( |
| 289 const std::vector<int64_t>& offline_ids, | 310 const std::vector<int64_t>& offline_ids, |
| 290 sql::Connection* db, | 311 sql::Connection* db, |
| 291 scoped_refptr<base::SingleThreadTaskRunner> runner, | 312 scoped_refptr<base::SingleThreadTaskRunner> runner, |
| 292 const OfflinePageMetadataStore::UpdateCallback& callback) { | 313 const OfflinePageMetadataStore::UpdateCallback& callback) { |
| 293 // TODO(bburns): add UMA metrics here (and for levelDB). | 314 // TODO(bburns): add UMA metrics here (and for levelDB). |
| 294 | 315 |
| 295 // If you create a transaction but don't Commit() it is automatically | 316 // If you create a transaction but don't Commit() it is automatically |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 } | 369 } |
| 349 } | 370 } |
| 350 | 371 |
| 351 void OfflinePageMetadataStoreSQL::GetOfflinePages( | 372 void OfflinePageMetadataStoreSQL::GetOfflinePages( |
| 352 const LoadCallback& callback) { | 373 const LoadCallback& callback) { |
| 353 background_task_runner_->PostTask( | 374 background_task_runner_->PostTask( |
| 354 FROM_HERE, base::Bind(&GetOfflinePagesSync, db_.get(), | 375 FROM_HERE, base::Bind(&GetOfflinePagesSync, db_.get(), |
| 355 base::ThreadTaskRunnerHandle::Get(), callback)); | 376 base::ThreadTaskRunnerHandle::Get(), callback)); |
| 356 } | 377 } |
| 357 | 378 |
| 358 void OfflinePageMetadataStoreSQL::AddOrUpdateOfflinePage( | 379 void OfflinePageMetadataStoreSQL::AddOfflinePage( |
| 359 const OfflinePageItem& offline_page, | 380 const OfflinePageItem& offline_page, |
| 360 const UpdateCallback& callback) { | 381 const AddCallback& callback) { |
| 361 DCHECK(db_.get()); | 382 if (!CheckDb(base::Bind(callback, STORE_ERROR))) |
| 383 return; |
| 384 |
| 362 background_task_runner_->PostTask( | 385 background_task_runner_->PostTask( |
| 363 FROM_HERE, | 386 FROM_HERE, |
| 364 base::Bind(&AddOrUpdateOfflinePageSync, offline_page, db_.get(), | 387 base::Bind(&AddOfflinePageSync, db_.get(), |
| 365 base::ThreadTaskRunnerHandle::Get(), callback)); | 388 base::ThreadTaskRunnerHandle::Get(), offline_page, callback)); |
| 389 } |
| 390 |
| 391 void OfflinePageMetadataStoreSQL::UpdateOfflinePages( |
| 392 const std::vector<OfflinePageItem>& pages, |
| 393 const UpdateCallback& callback) { |
| 394 if (!CheckDb(base::Bind(callback, false))) |
| 395 return; |
| 396 |
| 397 background_task_runner_->PostTask( |
| 398 FROM_HERE, |
| 399 base::Bind(&UpdateOfflinePagesSync, db_.get(), |
| 400 base::ThreadTaskRunnerHandle::Get(), pages, callback)); |
| 366 } | 401 } |
| 367 | 402 |
| 368 void OfflinePageMetadataStoreSQL::RemoveOfflinePages( | 403 void OfflinePageMetadataStoreSQL::RemoveOfflinePages( |
| 369 const std::vector<int64_t>& offline_ids, | 404 const std::vector<int64_t>& offline_ids, |
| 370 const UpdateCallback& callback) { | 405 const UpdateCallback& callback) { |
| 371 DCHECK(db_.get()); | 406 DCHECK(db_.get()); |
| 372 | 407 |
| 373 if (offline_ids.empty()) { | 408 if (offline_ids.empty()) { |
| 374 // Nothing to do, but post a callback instead of calling directly | 409 // Nothing to do, but post a callback instead of calling directly |
| 375 // to preserve the async style behavior to prevent bugs. | 410 // to preserve the async style behavior to prevent bugs. |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 433 DCHECK(db_.get()); | 468 DCHECK(db_.get()); |
| 434 if (!db_.get()) { | 469 if (!db_.get()) { |
| 435 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, | 470 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, |
| 436 base::Bind(callback)); | 471 base::Bind(callback)); |
| 437 return false; | 472 return false; |
| 438 } | 473 } |
| 439 return true; | 474 return true; |
| 440 } | 475 } |
| 441 | 476 |
| 442 } // namespace offline_pages | 477 } // namespace offline_pages |
| OLD | NEW |