| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/service_worker/service_worker_database.h" | 5 #include "content/browser/service_worker/service_worker_database.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/files/file_util.h" | 9 #include "base/files/file_util.h" |
| 10 #include "base/files/scoped_temp_dir.h" | 10 #include "base/files/scoped_temp_dir.h" |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 56 const RegistrationData& actual) { | 56 const RegistrationData& actual) { |
| 57 EXPECT_EQ(expected.registration_id, actual.registration_id); | 57 EXPECT_EQ(expected.registration_id, actual.registration_id); |
| 58 EXPECT_EQ(expected.scope, actual.scope); | 58 EXPECT_EQ(expected.scope, actual.scope); |
| 59 EXPECT_EQ(expected.script, actual.script); | 59 EXPECT_EQ(expected.script, actual.script); |
| 60 EXPECT_EQ(expected.version_id, actual.version_id); | 60 EXPECT_EQ(expected.version_id, actual.version_id); |
| 61 EXPECT_EQ(expected.is_active, actual.is_active); | 61 EXPECT_EQ(expected.is_active, actual.is_active); |
| 62 EXPECT_EQ(expected.has_fetch_handler, actual.has_fetch_handler); | 62 EXPECT_EQ(expected.has_fetch_handler, actual.has_fetch_handler); |
| 63 EXPECT_EQ(expected.last_update_check, actual.last_update_check); | 63 EXPECT_EQ(expected.last_update_check, actual.last_update_check); |
| 64 EXPECT_EQ(expected.resources_total_size_bytes, | 64 EXPECT_EQ(expected.resources_total_size_bytes, |
| 65 actual.resources_total_size_bytes); | 65 actual.resources_total_size_bytes); |
| 66 EXPECT_EQ(expected.foreign_fetch_scopes, actual.foreign_fetch_scopes); |
| 66 } | 67 } |
| 67 | 68 |
| 68 void VerifyResourceRecords(const std::vector<Resource>& expected, | 69 void VerifyResourceRecords(const std::vector<Resource>& expected, |
| 69 const std::vector<Resource>& actual) { | 70 const std::vector<Resource>& actual) { |
| 70 ASSERT_EQ(expected.size(), actual.size()); | 71 ASSERT_EQ(expected.size(), actual.size()); |
| 71 for (size_t i = 0; i < expected.size(); ++i) { | 72 for (size_t i = 0; i < expected.size(); ++i) { |
| 72 EXPECT_EQ(expected[i].resource_id, actual[i].resource_id); | 73 EXPECT_EQ(expected[i].resource_id, actual[i].resource_id); |
| 73 EXPECT_EQ(expected[i].url, actual[i].url); | 74 EXPECT_EQ(expected[i].url, actual[i].url); |
| 74 EXPECT_EQ(expected[i].size_bytes, actual[i].size_bytes); | 75 EXPECT_EQ(expected[i].size_bytes, actual[i].size_bytes); |
| 75 } | 76 } |
| (...skipping 576 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 652 TEST(ServiceWorkerDatabaseTest, Registration_Basic) { | 653 TEST(ServiceWorkerDatabaseTest, Registration_Basic) { |
| 653 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 654 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
| 654 | 655 |
| 655 GURL origin("http://example.com"); | 656 GURL origin("http://example.com"); |
| 656 RegistrationData data; | 657 RegistrationData data; |
| 657 data.registration_id = 100; | 658 data.registration_id = 100; |
| 658 data.scope = URL(origin, "/foo"); | 659 data.scope = URL(origin, "/foo"); |
| 659 data.script = URL(origin, "/script.js"); | 660 data.script = URL(origin, "/script.js"); |
| 660 data.version_id = 200; | 661 data.version_id = 200; |
| 661 data.resources_total_size_bytes = 10939 + 200; | 662 data.resources_total_size_bytes = 10939 + 200; |
| 663 data.foreign_fetch_scopes.push_back(URL(origin, "/foo/bar")); |
| 662 | 664 |
| 663 std::vector<Resource> resources; | 665 std::vector<Resource> resources; |
| 664 resources.push_back(CreateResource(1, URL(origin, "/resource1"), 10939)); | 666 resources.push_back(CreateResource(1, URL(origin, "/resource1"), 10939)); |
| 665 resources.push_back(CreateResource(2, URL(origin, "/resource2"), 200)); | 667 resources.push_back(CreateResource(2, URL(origin, "/resource2"), 200)); |
| 666 | 668 |
| 667 // Write a resource to the uncommitted list to make sure that writing | 669 // Write a resource to the uncommitted list to make sure that writing |
| 668 // registration removes resource ids associated with the registration from | 670 // registration removes resource ids associated with the registration from |
| 669 // the uncommitted list. | 671 // the uncommitted list. |
| 670 std::set<int64> uncommitted_ids; | 672 std::set<int64> uncommitted_ids; |
| 671 uncommitted_ids.insert(resources[0].resource_id); | 673 uncommitted_ids.insert(resources[0].resource_id); |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 788 TEST(ServiceWorkerDatabaseTest, Registration_Overwrite) { | 790 TEST(ServiceWorkerDatabaseTest, Registration_Overwrite) { |
| 789 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 791 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
| 790 | 792 |
| 791 GURL origin("http://example.com"); | 793 GURL origin("http://example.com"); |
| 792 RegistrationData data; | 794 RegistrationData data; |
| 793 data.registration_id = 100; | 795 data.registration_id = 100; |
| 794 data.scope = URL(origin, "/foo"); | 796 data.scope = URL(origin, "/foo"); |
| 795 data.script = URL(origin, "/script.js"); | 797 data.script = URL(origin, "/script.js"); |
| 796 data.version_id = 200; | 798 data.version_id = 200; |
| 797 data.resources_total_size_bytes = 10 + 11; | 799 data.resources_total_size_bytes = 10 + 11; |
| 800 data.foreign_fetch_scopes.push_back(URL(origin, "/foo")); |
| 798 | 801 |
| 799 std::vector<Resource> resources1; | 802 std::vector<Resource> resources1; |
| 800 resources1.push_back(CreateResource(1, URL(origin, "/resource1"), 10)); | 803 resources1.push_back(CreateResource(1, URL(origin, "/resource1"), 10)); |
| 801 resources1.push_back(CreateResource(2, URL(origin, "/resource2"), 11)); | 804 resources1.push_back(CreateResource(2, URL(origin, "/resource2"), 11)); |
| 802 | 805 |
| 803 ServiceWorkerDatabase::RegistrationData deleted_version; | 806 ServiceWorkerDatabase::RegistrationData deleted_version; |
| 804 deleted_version.version_id = 222; // Dummy inital value | 807 deleted_version.version_id = 222; // Dummy inital value |
| 805 std::vector<int64> newly_purgeable_resources; | 808 std::vector<int64> newly_purgeable_resources; |
| 806 | 809 |
| 807 EXPECT_EQ( | 810 EXPECT_EQ( |
| 808 ServiceWorkerDatabase::STATUS_OK, | 811 ServiceWorkerDatabase::STATUS_OK, |
| 809 database->WriteRegistration( | 812 database->WriteRegistration( |
| 810 data, resources1, &deleted_version, &newly_purgeable_resources)); | 813 data, resources1, &deleted_version, &newly_purgeable_resources)); |
| 811 EXPECT_EQ(kInvalidServiceWorkerVersionId, deleted_version.version_id); | 814 EXPECT_EQ(kInvalidServiceWorkerVersionId, deleted_version.version_id); |
| 812 EXPECT_TRUE(newly_purgeable_resources.empty()); | 815 EXPECT_TRUE(newly_purgeable_resources.empty()); |
| 813 | 816 |
| 814 // Make sure that the registration and resource records are stored. | 817 // Make sure that the registration and resource records are stored. |
| 815 RegistrationData data_out; | 818 RegistrationData data_out; |
| 816 std::vector<Resource> resources_out; | 819 std::vector<Resource> resources_out; |
| 817 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration( | 820 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration( |
| 818 data.registration_id, origin, &data_out, &resources_out)); | 821 data.registration_id, origin, &data_out, &resources_out)); |
| 819 VerifyRegistrationData(data, data_out); | 822 VerifyRegistrationData(data, data_out); |
| 820 VerifyResourceRecords(resources1, resources_out); | 823 VerifyResourceRecords(resources1, resources_out); |
| 821 | 824 |
| 822 // Update the registration. | 825 // Update the registration. |
| 823 RegistrationData updated_data = data; | 826 RegistrationData updated_data = data; |
| 824 updated_data.version_id = data.version_id + 1; | 827 updated_data.version_id = data.version_id + 1; |
| 825 updated_data.resources_total_size_bytes = 12 + 13; | 828 updated_data.resources_total_size_bytes = 12 + 13; |
| 829 updated_data.foreign_fetch_scopes.clear(); |
| 826 std::vector<Resource> resources2; | 830 std::vector<Resource> resources2; |
| 827 resources2.push_back(CreateResource(3, URL(origin, "/resource3"), 12)); | 831 resources2.push_back(CreateResource(3, URL(origin, "/resource3"), 12)); |
| 828 resources2.push_back(CreateResource(4, URL(origin, "/resource4"), 13)); | 832 resources2.push_back(CreateResource(4, URL(origin, "/resource4"), 13)); |
| 829 | 833 |
| 830 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 834 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 831 database->WriteRegistration(updated_data, | 835 database->WriteRegistration(updated_data, |
| 832 resources2, | 836 resources2, |
| 833 &deleted_version, | 837 &deleted_version, |
| 834 &newly_purgeable_resources)); | 838 &newly_purgeable_resources)); |
| 835 EXPECT_EQ(data.version_id, deleted_version.version_id); | 839 EXPECT_EQ(data.version_id, deleted_version.version_id); |
| (...skipping 622 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1458 GURL origin1("http://example.com"); | 1462 GURL origin1("http://example.com"); |
| 1459 GURL origin2("http://example.org"); | 1463 GURL origin2("http://example.org"); |
| 1460 | 1464 |
| 1461 // |origin1| has two registrations (registration1 and registration2). | 1465 // |origin1| has two registrations (registration1 and registration2). |
| 1462 RegistrationData data1; | 1466 RegistrationData data1; |
| 1463 data1.registration_id = 10; | 1467 data1.registration_id = 10; |
| 1464 data1.scope = URL(origin1, "/foo"); | 1468 data1.scope = URL(origin1, "/foo"); |
| 1465 data1.script = URL(origin1, "/script1.js"); | 1469 data1.script = URL(origin1, "/script1.js"); |
| 1466 data1.version_id = 100; | 1470 data1.version_id = 100; |
| 1467 data1.resources_total_size_bytes = 2013 + 512; | 1471 data1.resources_total_size_bytes = 2013 + 512; |
| 1472 data1.foreign_fetch_scopes.push_back(URL(origin1, "/foo/ff")); |
| 1468 | 1473 |
| 1469 std::vector<Resource> resources1; | 1474 std::vector<Resource> resources1; |
| 1470 resources1.push_back(CreateResource(1, URL(origin1, "/resource1"), 2013)); | 1475 resources1.push_back(CreateResource(1, URL(origin1, "/resource1"), 2013)); |
| 1471 resources1.push_back(CreateResource(2, URL(origin1, "/resource2"), 512)); | 1476 resources1.push_back(CreateResource(2, URL(origin1, "/resource2"), 512)); |
| 1472 ASSERT_EQ( | 1477 ASSERT_EQ( |
| 1473 ServiceWorkerDatabase::STATUS_OK, | 1478 ServiceWorkerDatabase::STATUS_OK, |
| 1474 database->WriteRegistration( | 1479 database->WriteRegistration( |
| 1475 data1, resources1, &deleted_version, &newly_purgeable_resources)); | 1480 data1, resources1, &deleted_version, &newly_purgeable_resources)); |
| 1476 ASSERT_EQ( | 1481 ASSERT_EQ( |
| 1477 ServiceWorkerDatabase::STATUS_OK, | 1482 ServiceWorkerDatabase::STATUS_OK, |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1505 database->WriteUserData( | 1510 database->WriteUserData( |
| 1506 data2.registration_id, origin1, "key4", "data4")); | 1511 data2.registration_id, origin1, "key4", "data4")); |
| 1507 | 1512 |
| 1508 // |origin2| has one registration (registration3). | 1513 // |origin2| has one registration (registration3). |
| 1509 RegistrationData data3; | 1514 RegistrationData data3; |
| 1510 data3.registration_id = 12; | 1515 data3.registration_id = 12; |
| 1511 data3.scope = URL(origin2, "/hoge"); | 1516 data3.scope = URL(origin2, "/hoge"); |
| 1512 data3.script = URL(origin2, "/script3.js"); | 1517 data3.script = URL(origin2, "/script3.js"); |
| 1513 data3.version_id = 102; | 1518 data3.version_id = 102; |
| 1514 data3.resources_total_size_bytes = 6 + 7; | 1519 data3.resources_total_size_bytes = 6 + 7; |
| 1520 data3.foreign_fetch_scopes.push_back(URL(origin2, "/hoge/ff")); |
| 1515 | 1521 |
| 1516 std::vector<Resource> resources3; | 1522 std::vector<Resource> resources3; |
| 1517 resources3.push_back(CreateResource(5, URL(origin2, "/resource5"), 6)); | 1523 resources3.push_back(CreateResource(5, URL(origin2, "/resource5"), 6)); |
| 1518 resources3.push_back(CreateResource(6, URL(origin2, "/resource6"), 7)); | 1524 resources3.push_back(CreateResource(6, URL(origin2, "/resource6"), 7)); |
| 1519 ASSERT_EQ( | 1525 ASSERT_EQ( |
| 1520 ServiceWorkerDatabase::STATUS_OK, | 1526 ServiceWorkerDatabase::STATUS_OK, |
| 1521 database->WriteRegistration( | 1527 database->WriteRegistration( |
| 1522 data3, resources3, &deleted_version, &newly_purgeable_resources)); | 1528 data3, resources3, &deleted_version, &newly_purgeable_resources)); |
| 1523 ASSERT_EQ( | 1529 ASSERT_EQ( |
| 1524 ServiceWorkerDatabase::STATUS_OK, | 1530 ServiceWorkerDatabase::STATUS_OK, |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1535 database->DeleteAllDataForOrigins(origins_to_delete, | 1541 database->DeleteAllDataForOrigins(origins_to_delete, |
| 1536 &newly_purgeable_resources)); | 1542 &newly_purgeable_resources)); |
| 1537 | 1543 |
| 1538 // |origin1| should be removed from the unique origin list. | 1544 // |origin1| should be removed from the unique origin list. |
| 1539 std::set<GURL> unique_origins; | 1545 std::set<GURL> unique_origins; |
| 1540 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1546 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 1541 database->GetOriginsWithRegistrations(&unique_origins)); | 1547 database->GetOriginsWithRegistrations(&unique_origins)); |
| 1542 EXPECT_EQ(1u, unique_origins.size()); | 1548 EXPECT_EQ(1u, unique_origins.size()); |
| 1543 EXPECT_TRUE(ContainsKey(unique_origins, origin2)); | 1549 EXPECT_TRUE(ContainsKey(unique_origins, origin2)); |
| 1544 | 1550 |
| 1551 // |origin1| should be removed from the foreign fetch origin list. |
| 1552 unique_origins.clear(); |
| 1553 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 1554 database->GetOriginsWithForeignFetchRegistrations(&unique_origins)); |
| 1555 EXPECT_EQ(1u, unique_origins.size()); |
| 1556 EXPECT_TRUE(ContainsKey(unique_origins, origin2)); |
| 1557 |
| 1545 // The registrations for |origin1| should be removed. | 1558 // The registrations for |origin1| should be removed. |
| 1546 std::vector<RegistrationData> registrations; | 1559 std::vector<RegistrationData> registrations; |
| 1547 EXPECT_EQ( | 1560 EXPECT_EQ( |
| 1548 ServiceWorkerDatabase::STATUS_OK, | 1561 ServiceWorkerDatabase::STATUS_OK, |
| 1549 database->GetRegistrationsForOrigin(origin1, ®istrations, nullptr)); | 1562 database->GetRegistrationsForOrigin(origin1, ®istrations, nullptr)); |
| 1550 EXPECT_TRUE(registrations.empty()); | 1563 EXPECT_TRUE(registrations.empty()); |
| 1551 GURL origin_out; | 1564 GURL origin_out; |
| 1552 EXPECT_EQ( | 1565 EXPECT_EQ( |
| 1553 ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, | 1566 ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
| 1554 database->ReadRegistrationOrigin(data1.registration_id, &origin_out)); | 1567 database->ReadRegistrationOrigin(data1.registration_id, &origin_out)); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1607 scoped_ptr<ServiceWorkerDatabase> database( | 1620 scoped_ptr<ServiceWorkerDatabase> database( |
| 1608 CreateDatabase(database_dir.path())); | 1621 CreateDatabase(database_dir.path())); |
| 1609 | 1622 |
| 1610 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true)); | 1623 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true)); |
| 1611 ASSERT_TRUE(base::DirectoryExists(database_dir.path())); | 1624 ASSERT_TRUE(base::DirectoryExists(database_dir.path())); |
| 1612 | 1625 |
| 1613 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->DestroyDatabase()); | 1626 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->DestroyDatabase()); |
| 1614 ASSERT_FALSE(base::DirectoryExists(database_dir.path())); | 1627 ASSERT_FALSE(base::DirectoryExists(database_dir.path())); |
| 1615 } | 1628 } |
| 1616 | 1629 |
| 1630 TEST(ServiceWorkerDatabaseTest, GetOriginsWithForeignFetchRegistrations) { |
| 1631 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
| 1632 |
| 1633 std::set<GURL> origins; |
| 1634 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 1635 database->GetOriginsWithForeignFetchRegistrations(&origins)); |
| 1636 EXPECT_TRUE(origins.empty()); |
| 1637 |
| 1638 ServiceWorkerDatabase::RegistrationData deleted_version; |
| 1639 std::vector<int64> newly_purgeable_resources; |
| 1640 |
| 1641 GURL origin1("http://example.com"); |
| 1642 RegistrationData data1; |
| 1643 data1.registration_id = 123; |
| 1644 data1.scope = URL(origin1, "/foo"); |
| 1645 data1.script = URL(origin1, "/script1.js"); |
| 1646 data1.version_id = 456; |
| 1647 data1.resources_total_size_bytes = 100; |
| 1648 data1.foreign_fetch_scopes.push_back(URL(origin1, "/foo/bar")); |
| 1649 std::vector<Resource> resources1; |
| 1650 resources1.push_back(CreateResource(1, data1.script, 100)); |
| 1651 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 1652 database->WriteRegistration(data1, resources1, &deleted_version, |
| 1653 &newly_purgeable_resources)); |
| 1654 |
| 1655 GURL origin2("https://www.example.com"); |
| 1656 RegistrationData data2; |
| 1657 data2.registration_id = 234; |
| 1658 data2.scope = URL(origin2, "/bar"); |
| 1659 data2.script = URL(origin2, "/script2.js"); |
| 1660 data2.version_id = 567; |
| 1661 data2.resources_total_size_bytes = 200; |
| 1662 std::vector<Resource> resources2; |
| 1663 resources2.push_back(CreateResource(2, data2.script, 200)); |
| 1664 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 1665 database->WriteRegistration(data2, resources2, &deleted_version, |
| 1666 &newly_purgeable_resources)); |
| 1667 |
| 1668 GURL origin3("https://example.org"); |
| 1669 RegistrationData data3; |
| 1670 data3.registration_id = 345; |
| 1671 data3.scope = URL(origin3, "/hoge"); |
| 1672 data3.script = URL(origin3, "/script3.js"); |
| 1673 data3.version_id = 678; |
| 1674 data3.resources_total_size_bytes = 300; |
| 1675 data3.foreign_fetch_scopes.push_back(URL(origin1, "/hoge/foo")); |
| 1676 std::vector<Resource> resources3; |
| 1677 resources3.push_back(CreateResource(3, data3.script, 300)); |
| 1678 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 1679 database->WriteRegistration(data3, resources3, &deleted_version, |
| 1680 &newly_purgeable_resources)); |
| 1681 |
| 1682 // |origin3| has three registrations. |
| 1683 RegistrationData data4; |
| 1684 data4.registration_id = 456; |
| 1685 data4.scope = URL(origin3, "/fuga"); |
| 1686 data4.script = URL(origin3, "/script4.js"); |
| 1687 data4.version_id = 789; |
| 1688 data4.resources_total_size_bytes = 400; |
| 1689 data4.foreign_fetch_scopes.push_back(URL(origin1, "/fuga/bar")); |
| 1690 std::vector<Resource> resources4; |
| 1691 resources4.push_back(CreateResource(4, data4.script, 400)); |
| 1692 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 1693 database->WriteRegistration(data4, resources4, &deleted_version, |
| 1694 &newly_purgeable_resources)); |
| 1695 |
| 1696 RegistrationData data5; |
| 1697 data5.registration_id = 567; |
| 1698 data5.scope = URL(origin3, "/bla"); |
| 1699 data5.script = URL(origin3, "/script5.js"); |
| 1700 data5.version_id = 890; |
| 1701 data5.resources_total_size_bytes = 500; |
| 1702 std::vector<Resource> resources5; |
| 1703 resources5.push_back(CreateResource(5, data5.script, 500)); |
| 1704 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 1705 database->WriteRegistration(data5, resources5, &deleted_version, |
| 1706 &newly_purgeable_resources)); |
| 1707 |
| 1708 origins.clear(); |
| 1709 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 1710 database->GetOriginsWithForeignFetchRegistrations(&origins)); |
| 1711 EXPECT_EQ(2U, origins.size()); |
| 1712 EXPECT_TRUE(ContainsKey(origins, origin1)); |
| 1713 EXPECT_TRUE(ContainsKey(origins, origin3)); |
| 1714 |
| 1715 // |origin3| has another registration, so should not remove it from the |
| 1716 // foreign fetch origin list. |
| 1717 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 1718 database->DeleteRegistration(data4.registration_id, origin3, |
| 1719 &deleted_version, |
| 1720 &newly_purgeable_resources)); |
| 1721 EXPECT_EQ(data4.registration_id, deleted_version.registration_id); |
| 1722 |
| 1723 origins.clear(); |
| 1724 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 1725 database->GetOriginsWithForeignFetchRegistrations(&origins)); |
| 1726 EXPECT_EQ(2U, origins.size()); |
| 1727 EXPECT_TRUE(ContainsKey(origins, origin1)); |
| 1728 EXPECT_TRUE(ContainsKey(origins, origin3)); |
| 1729 |
| 1730 // |origin3| should be removed from the foreign fetch origin list, since its |
| 1731 // only remaining registration doesn't have foreign fetch scopes. |
| 1732 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 1733 database->DeleteRegistration(data3.registration_id, origin3, |
| 1734 &deleted_version, |
| 1735 &newly_purgeable_resources)); |
| 1736 EXPECT_EQ(data3.registration_id, deleted_version.registration_id); |
| 1737 |
| 1738 origins.clear(); |
| 1739 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 1740 database->GetOriginsWithForeignFetchRegistrations(&origins)); |
| 1741 EXPECT_EQ(1U, origins.size()); |
| 1742 EXPECT_TRUE(ContainsKey(origins, origin1)); |
| 1743 |
| 1744 // |origin1| should be removed from the foreign fetch origin list, since we |
| 1745 // replace its registration with one without scopes. |
| 1746 RegistrationData updated_data1 = data1; |
| 1747 updated_data1.version_id++; |
| 1748 updated_data1.resources_total_size_bytes = 12 + 13; |
| 1749 updated_data1.foreign_fetch_scopes.clear(); |
| 1750 std::vector<Resource> updated_resources1; |
| 1751 updated_resources1.push_back( |
| 1752 CreateResource(13, URL(origin1, "/resource3"), 12)); |
| 1753 updated_resources1.push_back( |
| 1754 CreateResource(14, URL(origin1, "/resource4"), 13)); |
| 1755 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 1756 database->WriteRegistration(updated_data1, updated_resources1, |
| 1757 &deleted_version, |
| 1758 &newly_purgeable_resources)); |
| 1759 |
| 1760 origins.clear(); |
| 1761 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 1762 database->GetOriginsWithForeignFetchRegistrations(&origins)); |
| 1763 EXPECT_EQ(0U, origins.size()); |
| 1764 } |
| 1765 |
| 1617 } // namespace content | 1766 } // namespace content |
| OLD | NEW |