OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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.h" | 5 #include "components/offline_pages/offline_page_metadata_store.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 | 10 |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 "version INTEGER NOT NULL, " | 142 "version INTEGER NOT NULL, " |
143 "last_access_time INTEGER NOT NULL, " | 143 "last_access_time INTEGER NOT NULL, " |
144 "access_count INTEGER NOT NULL, " | 144 "access_count INTEGER NOT NULL, " |
145 "status INTEGER NOT NULL DEFAULT 0, " | 145 "status INTEGER NOT NULL DEFAULT 0, " |
146 "user_initiated INTEGER, " | 146 "user_initiated INTEGER, " |
147 "expiration_time INTEGER NOT NULL DEFAULT 0, " | 147 "expiration_time INTEGER NOT NULL DEFAULT 0, " |
148 "client_namespace VARCHAR NOT NULL, " | 148 "client_namespace VARCHAR NOT NULL, " |
149 "client_id VARCHAR NOT NULL, " | 149 "client_id VARCHAR NOT NULL, " |
150 "online_url VARCHAR NOT NULL, " | 150 "online_url VARCHAR NOT NULL, " |
151 "offline_url VARCHAR NOT NULL DEFAULT '', " | 151 "offline_url VARCHAR NOT NULL DEFAULT '', " |
152 "file_path VARCHAR NOT NULL " | 152 "file_path VARCHAR NOT NULL, " |
153 "title VARCHAR NOT NULL DEFAULT ''" | 153 "title VARCHAR NOT NULL DEFAULT ''" |
154 ")")); | 154 ")")); |
155 ASSERT_TRUE(connection.CommitTransaction()); | 155 ASSERT_TRUE(connection.CommitTransaction()); |
156 sql::Statement statement(connection.GetUniqueStatement( | 156 sql::Statement statement(connection.GetUniqueStatement( |
157 "INSERT INTO " OFFLINE_PAGES_TABLE_V1 | 157 "INSERT INTO " OFFLINE_PAGES_TABLE_V1 |
158 "(offline_id, creation_time, file_size, version, " | 158 "(offline_id, creation_time, file_size, version, " |
159 "last_access_time, access_count, client_namespace, " | 159 "last_access_time, access_count, client_namespace, " |
160 "client_id, online_url, file_path, expiration_time, title) " | 160 "client_id, online_url, file_path, expiration_time, title) " |
161 "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")); | 161 "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")); |
162 statement.BindInt64(0, kOfflineId); | 162 statement.BindInt64(0, kOfflineId); |
163 statement.BindInt(1, 0); | 163 statement.BindInt(1, 0); |
164 statement.BindInt64(2, kFileSize); | 164 statement.BindInt64(2, kFileSize); |
165 statement.BindInt(3, 0); | 165 statement.BindInt(3, 0); |
166 statement.BindInt(4, 0); | 166 statement.BindInt(4, 0); |
167 statement.BindInt(5, 1); | 167 statement.BindInt(5, 1); |
168 statement.BindCString(6, kTestClientNamespace); | 168 statement.BindCString(6, kTestClientNamespace); |
169 statement.BindString(7, kTestClientId2.id); | 169 statement.BindString(7, kTestClientId2.id); |
170 statement.BindCString(8, kTestURL); | 170 statement.BindCString(8, kTestURL); |
171 statement.BindString(9, base::FilePath(kFilePath).MaybeAsASCII()); | 171 statement.BindString(9, base::FilePath(kFilePath).MaybeAsASCII()); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 statement.BindString(8, base::FilePath(kFilePath).MaybeAsASCII()); | 218 statement.BindString(8, base::FilePath(kFilePath).MaybeAsASCII()); |
219 statement.BindInt64(9, base::Time::Now().ToInternalValue()); | 219 statement.BindInt64(9, base::Time::Now().ToInternalValue()); |
220 statement.BindString16(10, base::UTF8ToUTF16("Test title")); | 220 statement.BindString16(10, base::UTF8ToUTF16("Test title")); |
221 ASSERT_TRUE(statement.Run()); | 221 ASSERT_TRUE(statement.Run()); |
222 ASSERT_TRUE(connection.DoesTableExist(OFFLINE_PAGES_TABLE_V1)); | 222 ASSERT_TRUE(connection.DoesTableExist(OFFLINE_PAGES_TABLE_V1)); |
223 ASSERT_TRUE(connection.DoesColumnExist(OFFLINE_PAGES_TABLE_V1, "title")); | 223 ASSERT_TRUE(connection.DoesColumnExist(OFFLINE_PAGES_TABLE_V1, "title")); |
224 ASSERT_FALSE( | 224 ASSERT_FALSE( |
225 connection.DoesColumnExist(OFFLINE_PAGES_TABLE_V1, "original_url")); | 225 connection.DoesColumnExist(OFFLINE_PAGES_TABLE_V1, "original_url")); |
226 } | 226 } |
227 | 227 |
| 228 void BuildTestStoreWithSchemaFromM56(const base::FilePath& file) { |
| 229 sql::Connection connection; |
| 230 ASSERT_TRUE( |
| 231 connection.Open(file.Append(FILE_PATH_LITERAL("OfflinePages.db")))); |
| 232 ASSERT_TRUE(connection.is_open()); |
| 233 ASSERT_TRUE(connection.BeginTransaction()); |
| 234 ASSERT_TRUE(connection.Execute("CREATE TABLE " OFFLINE_PAGES_TABLE_V1 |
| 235 "(offline_id INTEGER PRIMARY KEY NOT NULL, " |
| 236 "creation_time INTEGER NOT NULL, " |
| 237 "file_size INTEGER NOT NULL, " |
| 238 "last_access_time INTEGER NOT NULL, " |
| 239 "access_count INTEGER NOT NULL, " |
| 240 "expiration_time INTEGER NOT NULL DEFAULT 0, " |
| 241 "client_namespace VARCHAR NOT NULL, " |
| 242 "client_id VARCHAR NOT NULL, " |
| 243 "online_url VARCHAR NOT NULL, " |
| 244 "file_path VARCHAR NOT NULL, " |
| 245 "title VARCHAR NOT NULL DEFAULT '', " |
| 246 "original_url VARCHAR NOT NULL DEFAULT ''" |
| 247 ")")); |
| 248 ASSERT_TRUE(connection.CommitTransaction()); |
| 249 sql::Statement statement(connection.GetUniqueStatement( |
| 250 "INSERT INTO " OFFLINE_PAGES_TABLE_V1 |
| 251 "(offline_id, creation_time, file_size, " |
| 252 "last_access_time, access_count, client_namespace, " |
| 253 "client_id, online_url, file_path, expiration_time, title, original_url) " |
| 254 "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")); |
| 255 statement.BindInt64(0, kOfflineId); |
| 256 statement.BindInt(1, 0); |
| 257 statement.BindInt64(2, kFileSize); |
| 258 statement.BindInt(3, 0); |
| 259 statement.BindInt(4, 1); |
| 260 statement.BindCString(5, kTestClientNamespace); |
| 261 statement.BindString(6, kTestClientId2.id); |
| 262 statement.BindCString(7, kTestURL); |
| 263 statement.BindString(8, base::FilePath(kFilePath).MaybeAsASCII()); |
| 264 statement.BindInt64(9, base::Time::Now().ToInternalValue()); |
| 265 statement.BindString16(10, base::UTF8ToUTF16("Test title")); |
| 266 statement.BindCString(11, kOriginalTestURL); |
| 267 ASSERT_TRUE(statement.Run()); |
| 268 ASSERT_TRUE(connection.DoesTableExist(OFFLINE_PAGES_TABLE_V1)); |
| 269 ASSERT_TRUE( |
| 270 connection.DoesColumnExist(OFFLINE_PAGES_TABLE_V1, "expiration_time")); |
| 271 } |
| 272 |
228 class OfflinePageMetadataStoreFactory { | 273 class OfflinePageMetadataStoreFactory { |
229 public: | 274 public: |
230 OfflinePageMetadataStore* BuildStore(const base::FilePath& file_path) { | 275 OfflinePageMetadataStore* BuildStore(const base::FilePath& file_path) { |
231 OfflinePageMetadataStoreSQL* store = new OfflinePageMetadataStoreSQL( | 276 OfflinePageMetadataStoreSQL* store = new OfflinePageMetadataStoreSQL( |
232 base::ThreadTaskRunnerHandle::Get(), file_path); | 277 base::ThreadTaskRunnerHandle::Get(), file_path); |
233 return store; | 278 return store; |
234 } | 279 } |
235 | 280 |
236 OfflinePageMetadataStore* BuildStoreM52(const base::FilePath& file_path) { | 281 OfflinePageMetadataStore* BuildStoreM52(const base::FilePath& file_path) { |
237 BuildTestStoreWithSchemaFromM52(file_path); | 282 BuildTestStoreWithSchemaFromM52(file_path); |
(...skipping 15 matching lines...) Expand all Loading... |
253 base::ThreadTaskRunnerHandle::Get(), file_path); | 298 base::ThreadTaskRunnerHandle::Get(), file_path); |
254 return store; | 299 return store; |
255 } | 300 } |
256 | 301 |
257 OfflinePageMetadataStore* BuildStoreM55(const base::FilePath& file_path) { | 302 OfflinePageMetadataStore* BuildStoreM55(const base::FilePath& file_path) { |
258 BuildTestStoreWithSchemaFromM55(file_path); | 303 BuildTestStoreWithSchemaFromM55(file_path); |
259 OfflinePageMetadataStoreSQL* store = new OfflinePageMetadataStoreSQL( | 304 OfflinePageMetadataStoreSQL* store = new OfflinePageMetadataStoreSQL( |
260 base::ThreadTaskRunnerHandle::Get(), file_path); | 305 base::ThreadTaskRunnerHandle::Get(), file_path); |
261 return store; | 306 return store; |
262 } | 307 } |
| 308 |
| 309 OfflinePageMetadataStore* BuildStoreM56(const base::FilePath& file_path) { |
| 310 BuildTestStoreWithSchemaFromM56(file_path); |
| 311 OfflinePageMetadataStoreSQL* store = new OfflinePageMetadataStoreSQL( |
| 312 base::ThreadTaskRunnerHandle::Get(), file_path); |
| 313 return store; |
| 314 } |
263 }; | 315 }; |
264 | 316 |
265 enum CalledCallback { NONE, LOAD, ADD, UPDATE, REMOVE, RESET }; | 317 enum CalledCallback { NONE, LOAD, ADD, UPDATE, REMOVE, RESET }; |
266 enum Status { STATUS_NONE, STATUS_TRUE, STATUS_FALSE }; | 318 enum Status { STATUS_NONE, STATUS_TRUE, STATUS_FALSE }; |
267 | 319 |
268 class OfflinePageMetadataStoreTest : public testing::Test { | 320 class OfflinePageMetadataStoreTest : public testing::Test { |
269 public: | 321 public: |
270 OfflinePageMetadataStoreTest(); | 322 OfflinePageMetadataStoreTest(); |
271 ~OfflinePageMetadataStoreTest() override; | 323 ~OfflinePageMetadataStoreTest() override; |
272 | 324 |
273 void TearDown() override { | 325 void TearDown() override { |
274 // Wait for all the pieces of the store to delete itself properly. | 326 // Wait for all the pieces of the store to delete itself properly. |
275 PumpLoop(); | 327 PumpLoop(); |
276 } | 328 } |
277 | 329 |
278 std::unique_ptr<OfflinePageMetadataStore> BuildStore(); | 330 std::unique_ptr<OfflinePageMetadataStore> BuildStore(); |
279 std::unique_ptr<OfflinePageMetadataStore> BuildStoreWithSchemaFromM52(); | 331 std::unique_ptr<OfflinePageMetadataStore> BuildStoreWithSchemaFromM52(); |
280 std::unique_ptr<OfflinePageMetadataStore> BuildStoreWithSchemaFromM53(); | 332 std::unique_ptr<OfflinePageMetadataStore> BuildStoreWithSchemaFromM53(); |
281 std::unique_ptr<OfflinePageMetadataStore> BuildStoreWithSchemaFromM54(); | 333 std::unique_ptr<OfflinePageMetadataStore> BuildStoreWithSchemaFromM54(); |
282 std::unique_ptr<OfflinePageMetadataStore> BuildStoreWithSchemaFromM55(); | 334 std::unique_ptr<OfflinePageMetadataStore> BuildStoreWithSchemaFromM55(); |
| 335 std::unique_ptr<OfflinePageMetadataStore> BuildStoreWithSchemaFromM56(); |
283 | 336 |
284 void PumpLoop(); | 337 void PumpLoop(); |
285 | 338 |
286 void InitializeCallback(bool success); | 339 void InitializeCallback(bool success); |
287 void GetOfflinePagesCallback( | 340 void GetOfflinePagesCallback( |
288 const std::vector<OfflinePageItem>& offline_pages); | 341 const std::vector<OfflinePageItem>& offline_pages); |
289 void AddCallback(ItemActionStatus status); | 342 void AddCallback(ItemActionStatus status); |
290 void UpdateCallback(CalledCallback called_callback, | 343 void UpdateCallback(CalledCallback called_callback, |
291 std::unique_ptr<OfflinePagesUpdateResult> result); | 344 std::unique_ptr<OfflinePagesUpdateResult> result); |
292 void ResetCallback(bool success); | 345 void ResetCallback(bool success); |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
372 | 425 |
373 return offline_pages_[0]; | 426 return offline_pages_[0]; |
374 } | 427 } |
375 | 428 |
376 void OfflinePageMetadataStoreTest::CheckThatOfflinePageCanBeSaved( | 429 void OfflinePageMetadataStoreTest::CheckThatOfflinePageCanBeSaved( |
377 std::unique_ptr<OfflinePageMetadataStore> store) { | 430 std::unique_ptr<OfflinePageMetadataStore> store) { |
378 size_t store_size = offline_pages_.size(); | 431 size_t store_size = offline_pages_.size(); |
379 OfflinePageItem offline_page(GURL(kTestURL), 1234LL, kTestClientId1, | 432 OfflinePageItem offline_page(GURL(kTestURL), 1234LL, kTestClientId1, |
380 base::FilePath(kFilePath), kFileSize); | 433 base::FilePath(kFilePath), kFileSize); |
381 offline_page.title = base::UTF8ToUTF16("a title"); | 434 offline_page.title = base::UTF8ToUTF16("a title"); |
382 base::Time expiration_time = base::Time::Now(); | |
383 offline_page.expiration_time = expiration_time; | |
384 offline_page.original_url = GURL(kOriginalTestURL); | 435 offline_page.original_url = GURL(kOriginalTestURL); |
385 | 436 |
386 store->AddOfflinePage(offline_page, | 437 store->AddOfflinePage(offline_page, |
387 base::Bind(&OfflinePageMetadataStoreTest::AddCallback, | 438 base::Bind(&OfflinePageMetadataStoreTest::AddCallback, |
388 base::Unretained(this))); | 439 base::Unretained(this))); |
389 PumpLoop(); | 440 PumpLoop(); |
390 EXPECT_EQ(ADD, last_called_callback_); | 441 EXPECT_EQ(ADD, last_called_callback_); |
391 EXPECT_EQ(STATUS_TRUE, last_status_); | 442 EXPECT_EQ(STATUS_TRUE, last_status_); |
392 ClearResults(); | 443 ClearResults(); |
393 | 444 |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
450 store->GetOfflinePages( | 501 store->GetOfflinePages( |
451 base::Bind(&OfflinePageMetadataStoreTest::GetOfflinePagesCallback, | 502 base::Bind(&OfflinePageMetadataStoreTest::GetOfflinePagesCallback, |
452 base::Unretained(this))); | 503 base::Unretained(this))); |
453 PumpLoop(); | 504 PumpLoop(); |
454 return store; | 505 return store; |
455 } | 506 } |
456 | 507 |
457 std::unique_ptr<OfflinePageMetadataStore> | 508 std::unique_ptr<OfflinePageMetadataStore> |
458 OfflinePageMetadataStoreTest::BuildStoreWithSchemaFromM54() { | 509 OfflinePageMetadataStoreTest::BuildStoreWithSchemaFromM54() { |
459 std::unique_ptr<OfflinePageMetadataStore> store( | 510 std::unique_ptr<OfflinePageMetadataStore> store( |
460 factory_.BuildStoreM53(temp_directory_.GetPath())); | 511 factory_.BuildStoreM54(temp_directory_.GetPath())); |
461 PumpLoop(); | 512 PumpLoop(); |
462 store->Initialize( | 513 store->Initialize( |
463 base::Bind(&OfflinePageMetadataStoreTest::InitializeCallback, | 514 base::Bind(&OfflinePageMetadataStoreTest::InitializeCallback, |
464 base::Unretained(this))); | 515 base::Unretained(this))); |
465 PumpLoop(); | 516 PumpLoop(); |
466 store->GetOfflinePages( | 517 store->GetOfflinePages( |
467 base::Bind(&OfflinePageMetadataStoreTest::GetOfflinePagesCallback, | 518 base::Bind(&OfflinePageMetadataStoreTest::GetOfflinePagesCallback, |
468 base::Unretained(this))); | 519 base::Unretained(this))); |
469 PumpLoop(); | 520 PumpLoop(); |
470 return store; | 521 return store; |
471 } | 522 } |
472 | 523 |
473 std::unique_ptr<OfflinePageMetadataStore> | 524 std::unique_ptr<OfflinePageMetadataStore> |
474 OfflinePageMetadataStoreTest::BuildStoreWithSchemaFromM55() { | 525 OfflinePageMetadataStoreTest::BuildStoreWithSchemaFromM55() { |
475 std::unique_ptr<OfflinePageMetadataStore> store( | 526 std::unique_ptr<OfflinePageMetadataStore> store( |
476 factory_.BuildStoreM55(temp_directory_.GetPath())); | 527 factory_.BuildStoreM55(temp_directory_.GetPath())); |
477 PumpLoop(); | 528 PumpLoop(); |
478 store->Initialize( | 529 store->Initialize( |
479 base::Bind(&OfflinePageMetadataStoreTest::InitializeCallback, | 530 base::Bind(&OfflinePageMetadataStoreTest::InitializeCallback, |
480 base::Unretained(this))); | 531 base::Unretained(this))); |
481 PumpLoop(); | 532 PumpLoop(); |
482 store->GetOfflinePages( | 533 store->GetOfflinePages( |
483 base::Bind(&OfflinePageMetadataStoreTest::GetOfflinePagesCallback, | 534 base::Bind(&OfflinePageMetadataStoreTest::GetOfflinePagesCallback, |
484 base::Unretained(this))); | 535 base::Unretained(this))); |
485 PumpLoop(); | 536 PumpLoop(); |
486 return store; | 537 return store; |
487 } | 538 } |
488 | 539 |
| 540 std::unique_ptr<OfflinePageMetadataStore> |
| 541 OfflinePageMetadataStoreTest::BuildStoreWithSchemaFromM56() { |
| 542 std::unique_ptr<OfflinePageMetadataStore> store( |
| 543 factory_.BuildStoreM56(temp_directory_.GetPath())); |
| 544 PumpLoop(); |
| 545 store->Initialize( |
| 546 base::Bind(&OfflinePageMetadataStoreTest::InitializeCallback, |
| 547 base::Unretained(this))); |
| 548 PumpLoop(); |
| 549 store->GetOfflinePages( |
| 550 base::Bind(&OfflinePageMetadataStoreTest::GetOfflinePagesCallback, |
| 551 base::Unretained(this))); |
| 552 PumpLoop(); |
| 553 return store; |
| 554 } |
| 555 |
489 // Loads empty store and makes sure that there are no offline pages stored in | 556 // Loads empty store and makes sure that there are no offline pages stored in |
490 // it. | 557 // it. |
491 TEST_F(OfflinePageMetadataStoreTest, LoadEmptyStore) { | 558 TEST_F(OfflinePageMetadataStoreTest, LoadEmptyStore) { |
492 std::unique_ptr<OfflinePageMetadataStore> store(BuildStore()); | 559 std::unique_ptr<OfflinePageMetadataStore> store(BuildStore()); |
493 EXPECT_EQ(LOAD, last_called_callback_); | 560 EXPECT_EQ(LOAD, last_called_callback_); |
494 EXPECT_EQ(STATUS_TRUE, last_status_); | 561 EXPECT_EQ(STATUS_TRUE, last_status_); |
495 EXPECT_EQ(0U, offline_pages_.size()); | 562 EXPECT_EQ(0U, offline_pages_.size()); |
496 } | 563 } |
497 | 564 |
498 TEST_F(OfflinePageMetadataStoreTest, GetOfflinePagesFromInvalidStore) { | 565 TEST_F(OfflinePageMetadataStoreTest, GetOfflinePagesFromInvalidStore) { |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
567 } | 634 } |
568 | 635 |
569 // Loads a store which has an outdated schema. | 636 // Loads a store which has an outdated schema. |
570 // This test case would crash if it's not handling correctly when we're loading | 637 // This test case would crash if it's not handling correctly when we're loading |
571 // old version stores. | 638 // old version stores. |
572 // TODO(romax): Move this to sql_unittest. | 639 // TODO(romax): Move this to sql_unittest. |
573 TEST_F(OfflinePageMetadataStoreTest, LoadVersion52Store) { | 640 TEST_F(OfflinePageMetadataStoreTest, LoadVersion52Store) { |
574 std::unique_ptr<OfflinePageMetadataStore> store( | 641 std::unique_ptr<OfflinePageMetadataStore> store( |
575 BuildStoreWithSchemaFromM52()); | 642 BuildStoreWithSchemaFromM52()); |
576 | 643 |
577 CheckThatStoreHasOneItem(); | 644 OfflinePageItem item = CheckThatStoreHasOneItem(); |
578 CheckThatOfflinePageCanBeSaved(std::move(store)); | 645 CheckThatOfflinePageCanBeSaved(std::move(store)); |
579 } | 646 } |
580 | 647 |
581 // Loads a store which has an outdated schema. | 648 // Loads a store which has an outdated schema. |
582 // This test case would crash if it's not handling correctly when we're loading | 649 // This test case would crash if it's not handling correctly when we're loading |
583 // old version stores. | 650 // old version stores. |
584 // TODO(romax): Move this to sql_unittest. | 651 // TODO(romax): Move this to sql_unittest. |
585 TEST_F(OfflinePageMetadataStoreTest, LoadVersion53Store) { | 652 TEST_F(OfflinePageMetadataStoreTest, LoadVersion53Store) { |
586 std::unique_ptr<OfflinePageMetadataStore> store( | 653 std::unique_ptr<OfflinePageMetadataStore> store( |
587 BuildStoreWithSchemaFromM53()); | 654 BuildStoreWithSchemaFromM53()); |
588 | 655 |
589 OfflinePageItem item = CheckThatStoreHasOneItem(); | 656 OfflinePageItem item = CheckThatStoreHasOneItem(); |
590 // We should have a valid expiration time after upgrade. | |
591 EXPECT_NE(base::Time::FromInternalValue(0), | |
592 offline_pages_[0].expiration_time); | |
593 | |
594 CheckThatOfflinePageCanBeSaved(std::move(store)); | 657 CheckThatOfflinePageCanBeSaved(std::move(store)); |
595 } | 658 } |
596 | 659 |
597 // Loads a string with schema from M54. | 660 // Loads a string with schema from M54. |
598 // Because for now we only reduce the number of fields it just makes sure there | 661 // This test case would crash if it's not handling correctly when we're loading |
599 // are no crashes in the process. | 662 // old version stores. |
600 // TODO(romax): Move this to sql_unittest. | 663 // TODO(romax): Move this to sql_unittest. |
601 TEST_F(OfflinePageMetadataStoreTest, LoadVersion54Store) { | 664 TEST_F(OfflinePageMetadataStoreTest, LoadVersion54Store) { |
602 std::unique_ptr<OfflinePageMetadataStore> store( | 665 std::unique_ptr<OfflinePageMetadataStore> store( |
603 BuildStoreWithSchemaFromM54()); | 666 BuildStoreWithSchemaFromM54()); |
604 | 667 |
605 OfflinePageItem item = CheckThatStoreHasOneItem(); | 668 OfflinePageItem item = CheckThatStoreHasOneItem(); |
606 | |
607 CheckThatOfflinePageCanBeSaved(std::move(store)); | 669 CheckThatOfflinePageCanBeSaved(std::move(store)); |
608 } | 670 } |
609 | 671 |
610 // Loads a string with schema from M55. | 672 // Loads a string with schema from M55. |
611 // Because for now we only reduce the number of fields it just makes sure there | 673 // This test case would crash if it's not handling correctly when we're loading |
612 // are no crashes in the process. | 674 // old version stores. |
613 // TODO(romax): Move this to sql_unittest. | 675 // TODO(romax): Move this to sql_unittest. |
614 TEST_F(OfflinePageMetadataStoreTest, LoadVersion55Store) { | 676 TEST_F(OfflinePageMetadataStoreTest, LoadVersion55Store) { |
615 std::unique_ptr<OfflinePageMetadataStore> store( | 677 std::unique_ptr<OfflinePageMetadataStore> store( |
616 BuildStoreWithSchemaFromM55()); | 678 BuildStoreWithSchemaFromM55()); |
617 | 679 |
618 OfflinePageItem item = CheckThatStoreHasOneItem(); | 680 OfflinePageItem item = CheckThatStoreHasOneItem(); |
619 | |
620 CheckThatOfflinePageCanBeSaved(std::move(store)); | 681 CheckThatOfflinePageCanBeSaved(std::move(store)); |
621 } | 682 } |
622 | 683 |
| 684 // Loads a string with schema from M56. |
| 685 // This test case would crash if it's not handling correctly when we're loading |
| 686 // old version stores. |
| 687 // TODO(romax): Move this to sql_unittest. |
| 688 TEST_F(OfflinePageMetadataStoreTest, LoadVersion56Store) { |
| 689 std::unique_ptr<OfflinePageMetadataStore> store( |
| 690 BuildStoreWithSchemaFromM56()); |
| 691 |
| 692 OfflinePageItem item = CheckThatStoreHasOneItem(); |
| 693 CheckThatOfflinePageCanBeSaved(std::move(store)); |
| 694 } |
| 695 |
623 // Adds metadata of an offline page into a store and then opens the store | 696 // Adds metadata of an offline page into a store and then opens the store |
624 // again to make sure that stored metadata survives store restarts. | 697 // again to make sure that stored metadata survives store restarts. |
625 TEST_F(OfflinePageMetadataStoreTest, AddOfflinePage) { | 698 TEST_F(OfflinePageMetadataStoreTest, AddOfflinePage) { |
626 CheckThatOfflinePageCanBeSaved(BuildStore()); | 699 CheckThatOfflinePageCanBeSaved(BuildStore()); |
627 } | 700 } |
628 | 701 |
629 TEST_F(OfflinePageMetadataStoreTest, AddSameOfflinePageTwice) { | 702 TEST_F(OfflinePageMetadataStoreTest, AddSameOfflinePageTwice) { |
630 std::unique_ptr<OfflinePageMetadataStore> store(BuildStore()); | 703 std::unique_ptr<OfflinePageMetadataStore> store(BuildStore()); |
631 | 704 |
632 OfflinePageItem offline_page(GURL(kTestURL), 1234LL, kTestClientId1, | 705 OfflinePageItem offline_page(GURL(kTestURL), 1234LL, kTestClientId1, |
633 base::FilePath(kFilePath), kFileSize); | 706 base::FilePath(kFilePath), kFileSize); |
634 offline_page.title = base::UTF8ToUTF16("a title"); | 707 offline_page.title = base::UTF8ToUTF16("a title"); |
635 base::Time expiration_time = base::Time::Now(); | |
636 offline_page.expiration_time = expiration_time; | |
637 | 708 |
638 store->AddOfflinePage(offline_page, | 709 store->AddOfflinePage(offline_page, |
639 base::Bind(&OfflinePageMetadataStoreTest::AddCallback, | 710 base::Bind(&OfflinePageMetadataStoreTest::AddCallback, |
640 base::Unretained(this))); | 711 base::Unretained(this))); |
641 PumpLoop(); | 712 PumpLoop(); |
642 EXPECT_EQ(ADD, last_called_callback_); | 713 EXPECT_EQ(ADD, last_called_callback_); |
643 EXPECT_EQ(STATUS_TRUE, last_status_); | 714 EXPECT_EQ(STATUS_TRUE, last_status_); |
644 ClearResults(); | 715 ClearResults(); |
645 | 716 |
646 store->AddOfflinePage(offline_page, | 717 store->AddOfflinePage(offline_page, |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
727 EXPECT_EQ(STATUS_TRUE, last_status_); | 798 EXPECT_EQ(STATUS_TRUE, last_status_); |
728 | 799 |
729 ClearResults(); | 800 ClearResults(); |
730 | 801 |
731 // Add anther offline page. | 802 // Add anther offline page. |
732 base::FilePath file_path_2 = | 803 base::FilePath file_path_2 = |
733 base::FilePath(FILE_PATH_LITERAL("//other.page.com.mhtml")); | 804 base::FilePath(FILE_PATH_LITERAL("//other.page.com.mhtml")); |
734 OfflinePageItem offline_page_2(GURL("https://other.page.com"), 5678LL, | 805 OfflinePageItem offline_page_2(GURL("https://other.page.com"), 5678LL, |
735 kTestClientId2, file_path_2, 12345, | 806 kTestClientId2, file_path_2, 12345, |
736 base::Time::Now()); | 807 base::Time::Now()); |
737 offline_page_2.expiration_time = base::Time::Now(); | |
738 offline_page_2.original_url = GURL("https://example.com/bar"); | 808 offline_page_2.original_url = GURL("https://example.com/bar"); |
739 store->AddOfflinePage(offline_page_2, | 809 store->AddOfflinePage(offline_page_2, |
740 base::Bind(&OfflinePageMetadataStoreTest::AddCallback, | 810 base::Bind(&OfflinePageMetadataStoreTest::AddCallback, |
741 base::Unretained(this))); | 811 base::Unretained(this))); |
742 PumpLoop(); | 812 PumpLoop(); |
743 EXPECT_EQ(ADD, last_called_callback_); | 813 EXPECT_EQ(ADD, last_called_callback_); |
744 EXPECT_EQ(STATUS_TRUE, last_status_); | 814 EXPECT_EQ(STATUS_TRUE, last_status_); |
745 | 815 |
746 ClearResults(); | 816 ClearResults(); |
747 | 817 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
783 EXPECT_EQ(LOAD, last_called_callback_); | 853 EXPECT_EQ(LOAD, last_called_callback_); |
784 EXPECT_EQ(STATUS_TRUE, last_status_); | 854 EXPECT_EQ(STATUS_TRUE, last_status_); |
785 ASSERT_EQ(1U, offline_pages_.size()); | 855 ASSERT_EQ(1U, offline_pages_.size()); |
786 EXPECT_EQ(offline_page_2.url, offline_pages_[0].url); | 856 EXPECT_EQ(offline_page_2.url, offline_pages_[0].url); |
787 EXPECT_EQ(offline_page_2.offline_id, offline_pages_[0].offline_id); | 857 EXPECT_EQ(offline_page_2.offline_id, offline_pages_[0].offline_id); |
788 EXPECT_EQ(offline_page_2.file_path, offline_pages_[0].file_path); | 858 EXPECT_EQ(offline_page_2.file_path, offline_pages_[0].file_path); |
789 EXPECT_EQ(offline_page_2.file_size, offline_pages_[0].file_size); | 859 EXPECT_EQ(offline_page_2.file_size, offline_pages_[0].file_size); |
790 EXPECT_EQ(offline_page_2.creation_time, offline_pages_[0].creation_time); | 860 EXPECT_EQ(offline_page_2.creation_time, offline_pages_[0].creation_time); |
791 EXPECT_EQ(offline_page_2.last_access_time, | 861 EXPECT_EQ(offline_page_2.last_access_time, |
792 offline_pages_[0].last_access_time); | 862 offline_pages_[0].last_access_time); |
793 EXPECT_EQ(offline_page_2.expiration_time, offline_pages_[0].expiration_time); | |
794 EXPECT_EQ(offline_page_2.access_count, offline_pages_[0].access_count); | 863 EXPECT_EQ(offline_page_2.access_count, offline_pages_[0].access_count); |
795 EXPECT_EQ(offline_page_2.client_id, offline_pages_[0].client_id); | 864 EXPECT_EQ(offline_page_2.client_id, offline_pages_[0].client_id); |
796 } | 865 } |
797 | 866 |
798 // Tests updating offline page metadata from the store. | 867 // Tests updating offline page metadata from the store. |
799 TEST_F(OfflinePageMetadataStoreTest, UpdateOfflinePage) { | 868 TEST_F(OfflinePageMetadataStoreTest, UpdateOfflinePage) { |
800 std::unique_ptr<OfflinePageMetadataStore> store(BuildStore()); | 869 std::unique_ptr<OfflinePageMetadataStore> store(BuildStore()); |
801 | 870 |
802 // First, adds a fresh page. | 871 // First, adds a fresh page. |
803 OfflinePageItem offline_page(GURL(kTestURL), 1234LL, kTestClientId1, | 872 OfflinePageItem offline_page(GURL(kTestURL), 1234LL, kTestClientId1, |
(...skipping 11 matching lines...) Expand all Loading... |
815 base::Unretained(this))); | 884 base::Unretained(this))); |
816 PumpLoop(); | 885 PumpLoop(); |
817 | 886 |
818 EXPECT_EQ(LOAD, last_called_callback_); | 887 EXPECT_EQ(LOAD, last_called_callback_); |
819 ASSERT_EQ(1U, offline_pages_.size()); | 888 ASSERT_EQ(1U, offline_pages_.size()); |
820 EXPECT_EQ(offline_page, offline_pages_[0]); | 889 EXPECT_EQ(offline_page, offline_pages_[0]); |
821 | 890 |
822 // Then update some data. | 891 // Then update some data. |
823 offline_page.file_size = kFileSize + 1; | 892 offline_page.file_size = kFileSize + 1; |
824 offline_page.access_count++; | 893 offline_page.access_count++; |
825 offline_page.expiration_time = base::Time::Now(); | |
826 offline_page.original_url = GURL("https://example.com/bar"); | 894 offline_page.original_url = GURL("https://example.com/bar"); |
827 std::vector<OfflinePageItem> items_to_update; | 895 std::vector<OfflinePageItem> items_to_update; |
828 items_to_update.push_back(offline_page); | 896 items_to_update.push_back(offline_page); |
829 store->UpdateOfflinePages( | 897 store->UpdateOfflinePages( |
830 items_to_update, base::Bind(&OfflinePageMetadataStoreTest::UpdateCallback, | 898 items_to_update, base::Bind(&OfflinePageMetadataStoreTest::UpdateCallback, |
831 base::Unretained(this), UPDATE)); | 899 base::Unretained(this), UPDATE)); |
832 PumpLoop(); | 900 PumpLoop(); |
833 EXPECT_EQ(UPDATE, last_called_callback_); | 901 EXPECT_EQ(UPDATE, last_called_callback_); |
834 EXPECT_EQ(STATUS_TRUE, last_status_); | 902 EXPECT_EQ(STATUS_TRUE, last_status_); |
835 ASSERT_TRUE(last_update_result() != nullptr); | 903 ASSERT_TRUE(last_update_result() != nullptr); |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
908 std::unique_ptr<OfflinePageMetadataStore> store(BuildStore()); | 976 std::unique_ptr<OfflinePageMetadataStore> store(BuildStore()); |
909 | 977 |
910 store->Reset(base::Bind(&OfflinePageMetadataStoreTest::ResetCallback, | 978 store->Reset(base::Bind(&OfflinePageMetadataStoreTest::ResetCallback, |
911 base::Unretained(this))); | 979 base::Unretained(this))); |
912 PumpLoop(); | 980 PumpLoop(); |
913 EXPECT_EQ(STATUS_TRUE, last_status_); | 981 EXPECT_EQ(STATUS_TRUE, last_status_); |
914 } | 982 } |
915 | 983 |
916 } // namespace | 984 } // namespace |
917 } // namespace offline_pages | 985 } // namespace offline_pages |
OLD | NEW |