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

Side by Side Diff: components/favicon/core/favicon_handler_unittest.cc

Issue 2891333002: Introduce dedicated enum value for icons from Web Manifests (Closed)
Patch Set: Created 3 years, 7 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
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 "components/favicon/core/favicon_handler.h" 5 #include "components/favicon/core/favicon_handler.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <map> 9 #include <map>
10 #include <memory> 10 #include <memory>
(...skipping 19 matching lines...) Expand all
30 #include "ui/gfx/favicon_size.h" 30 #include "ui/gfx/favicon_size.h"
31 #include "ui/gfx/image/image.h" 31 #include "ui/gfx/image/image.h"
32 32
33 namespace favicon { 33 namespace favicon {
34 namespace { 34 namespace {
35 35
36 using favicon_base::FAVICON; 36 using favicon_base::FAVICON;
37 using favicon_base::FaviconRawBitmapResult; 37 using favicon_base::FaviconRawBitmapResult;
38 using favicon_base::TOUCH_ICON; 38 using favicon_base::TOUCH_ICON;
39 using favicon_base::TOUCH_PRECOMPOSED_ICON; 39 using favicon_base::TOUCH_PRECOMPOSED_ICON;
40 using favicon_base::WEB_MANIFEST_ICON;
40 using testing::AnyNumber; 41 using testing::AnyNumber;
41 using testing::Assign; 42 using testing::Assign;
42 using testing::Contains; 43 using testing::Contains;
43 using testing::ElementsAre; 44 using testing::ElementsAre;
44 using testing::InSequence; 45 using testing::InSequence;
45 using testing::Invoke; 46 using testing::Invoke;
46 using testing::IsEmpty; 47 using testing::IsEmpty;
47 using testing::Not; 48 using testing::Not;
48 using testing::Return; 49 using testing::Return;
49 using testing::_; 50 using testing::_;
(...skipping 1433 matching lines...) Expand 10 before | Expand all | Expand 10 after
1483 DISALLOW_COPY_AND_ASSIGN(FaviconHandlerManifestsEnabledTest); 1484 DISALLOW_COPY_AND_ASSIGN(FaviconHandlerManifestsEnabledTest);
1484 }; 1485 };
1485 1486
1486 // Test that a favicon corresponding to a web manifest is reported when: 1487 // Test that a favicon corresponding to a web manifest is reported when:
1487 // - There is data in the favicon database for the manifest URL. 1488 // - There is data in the favicon database for the manifest URL.
1488 // AND 1489 // AND
1489 // - FaviconService::OnFaviconDataForManifestFromFaviconService() runs before 1490 // - FaviconService::OnFaviconDataForManifestFromFaviconService() runs before
1490 // FaviconHandler::OnUpdateCandidates() is called. 1491 // FaviconHandler::OnUpdateCandidates() is called.
1491 TEST_F(FaviconHandlerManifestsEnabledTest, 1492 TEST_F(FaviconHandlerManifestsEnabledTest,
1492 GetFaviconFromManifestInHistoryIfCandidatesSlower) { 1493 GetFaviconFromManifestInHistoryIfCandidatesSlower) {
1493 favicon_service_.fake()->Store(kPageURL, kManifestURL, 1494 favicon_service_.fake()->Store(
1494 CreateRawBitmapResult(kManifestURL)); 1495 kPageURL, kManifestURL,
1496 CreateRawBitmapResult(kManifestURL, WEB_MANIFEST_ICON));
1495 1497
1496 EXPECT_CALL(favicon_service_, UnableToDownloadFavicon(_)).Times(0); 1498 EXPECT_CALL(favicon_service_, UnableToDownloadFavicon(_)).Times(0);
1497 1499
1498 EXPECT_CALL(favicon_service_, 1500 EXPECT_CALL(favicon_service_,
1499 UpdateFaviconMappingsAndFetch(_, kManifestURL, FAVICON, 1501 UpdateFaviconMappingsAndFetch(_, kManifestURL, WEB_MANIFEST_ICON,
1500 /*desired_size_in_dip=*/16, _, _)); 1502 /*desired_size_in_dip=*/16, _, _));
1501 EXPECT_CALL(delegate_, 1503 EXPECT_CALL(delegate_,
1502 OnFaviconUpdated(_, FaviconDriverObserver::NON_TOUCH_16_DIP, 1504 OnFaviconUpdated(_, FaviconDriverObserver::NON_TOUCH_16_DIP,
1503 kManifestURL, _, _)); 1505 kManifestURL, _, _));
1504 1506
1505 RunHandlerWithSimpleFaviconCandidates({kIconURL12x12}, kManifestURL); 1507 RunHandlerWithSimpleFaviconCandidates({kIconURL12x12}, kManifestURL);
1506 EXPECT_THAT(favicon_service_.fake()->db_requests(), 1508 EXPECT_THAT(favicon_service_.fake()->db_requests(),
1507 ElementsAre(kPageURL, kManifestURL)); 1509 ElementsAre(kPageURL, kManifestURL));
1508 EXPECT_THAT(delegate_.downloads(), IsEmpty()); 1510 EXPECT_THAT(delegate_.downloads(), IsEmpty());
1509 } 1511 }
1510 1512
1511 // Test that a favicon corresponding to a web manifest is reported when: 1513 // Test that a favicon corresponding to a web manifest is reported when:
1512 // - There is data in the favicon database for the manifest URL. 1514 // - There is data in the favicon database for the manifest URL.
1513 // AND 1515 // AND
1514 // - FaviconHandler::OnUpdateCandidates() is called before 1516 // - FaviconHandler::OnUpdateCandidates() is called before
1515 // FaviconService::OnFaviconDataForManifestFromFaviconService() runs. 1517 // FaviconService::OnFaviconDataForManifestFromFaviconService() runs.
1516 TEST_F(FaviconHandlerManifestsEnabledTest, 1518 TEST_F(FaviconHandlerManifestsEnabledTest,
1517 GetFaviconFromManifestInHistoryIfCandidatesFaster) { 1519 GetFaviconFromManifestInHistoryIfCandidatesFaster) {
1518 favicon_service_.fake()->Store(kPageURL, kManifestURL, 1520 favicon_service_.fake()->Store(
1519 CreateRawBitmapResult(kManifestURL)); 1521 kPageURL, kManifestURL,
1522 CreateRawBitmapResult(kManifestURL, WEB_MANIFEST_ICON));
1520 // Defer the database lookup completion to control the exact timing. 1523 // Defer the database lookup completion to control the exact timing.
1521 favicon_service_.fake()->SetRunCallbackManuallyForUrl(kManifestURL); 1524 favicon_service_.fake()->SetRunCallbackManuallyForUrl(kManifestURL);
1522 1525
1523 EXPECT_CALL(favicon_service_, UnableToDownloadFavicon(_)).Times(0); 1526 EXPECT_CALL(favicon_service_, UnableToDownloadFavicon(_)).Times(0);
1524 1527
1525 EXPECT_CALL(favicon_service_, 1528 EXPECT_CALL(favicon_service_,
1526 UpdateFaviconMappingsAndFetch(_, kManifestURL, FAVICON, 1529 UpdateFaviconMappingsAndFetch(_, kManifestURL, WEB_MANIFEST_ICON,
1527 /*desired_size_in_dip=*/16, _, _)); 1530 /*desired_size_in_dip=*/16, _, _));
1528 EXPECT_CALL(delegate_, 1531 EXPECT_CALL(delegate_,
1529 OnFaviconUpdated(_, FaviconDriverObserver::NON_TOUCH_16_DIP, 1532 OnFaviconUpdated(_, FaviconDriverObserver::NON_TOUCH_16_DIP,
1530 kManifestURL, _, _)); 1533 kManifestURL, _, _));
1531 1534
1532 std::unique_ptr<FaviconHandler> handler = 1535 std::unique_ptr<FaviconHandler> handler =
1533 RunHandlerWithSimpleFaviconCandidates({kIconURL12x12}, kManifestURL); 1536 RunHandlerWithSimpleFaviconCandidates({kIconURL12x12}, kManifestURL);
1534 ASSERT_TRUE(favicon_service_.fake()->HasPendingManualCallback()); 1537 ASSERT_TRUE(favicon_service_.fake()->HasPendingManualCallback());
1535 1538
1536 // Complete the lookup. 1539 // Complete the lookup.
1537 EXPECT_TRUE(favicon_service_.fake()->RunCallbackManually()); 1540 EXPECT_TRUE(favicon_service_.fake()->RunCallbackManually());
1538 base::RunLoop().RunUntilIdle(); 1541 base::RunLoop().RunUntilIdle();
1539 1542
1540 EXPECT_THAT(favicon_service_.fake()->db_requests(), 1543 EXPECT_THAT(favicon_service_.fake()->db_requests(),
1541 ElementsAre(kPageURL, kManifestURL)); 1544 ElementsAre(kPageURL, kManifestURL));
1542 EXPECT_THAT(delegate_.downloads(), IsEmpty()); 1545 EXPECT_THAT(delegate_.downloads(), IsEmpty());
1543 } 1546 }
1544 1547
1545 // Test that a favicon corresponding to a web manifest is reported when there is 1548 // Test that a favicon corresponding to a web manifest is reported when there is
1546 // data in the database for neither the page URL nor the manifest URL. 1549 // data in the database for neither the page URL nor the manifest URL.
1547 TEST_F(FaviconHandlerManifestsEnabledTest, GetFaviconFromUnknownManifest) { 1550 TEST_F(FaviconHandlerManifestsEnabledTest, GetFaviconFromUnknownManifest) {
1548 const std::vector<favicon::FaviconURL> kManifestIcons = { 1551 const std::vector<favicon::FaviconURL> kManifestIcons = {
1549 FaviconURL(kIconURL16x16, FAVICON, kEmptySizes), 1552 FaviconURL(kIconURL16x16, FAVICON, kEmptySizes),
1550 }; 1553 };
1551 1554
1552 delegate_.fake_manifest_downloader().Add(kManifestURL, kManifestIcons); 1555 delegate_.fake_manifest_downloader().Add(kManifestURL, kManifestIcons);
1553 1556
1554 EXPECT_CALL(favicon_service_, UnableToDownloadFavicon(_)).Times(0); 1557 EXPECT_CALL(favicon_service_, UnableToDownloadFavicon(_)).Times(0);
1555 1558
1556 EXPECT_CALL(favicon_service_, SetFavicons(_, kManifestURL, FAVICON, _)); 1559 EXPECT_CALL(favicon_service_,
1560 SetFavicons(_, kManifestURL, WEB_MANIFEST_ICON, _));
1557 EXPECT_CALL(delegate_, OnFaviconUpdated(_, _, kManifestURL, _, _)); 1561 EXPECT_CALL(delegate_, OnFaviconUpdated(_, _, kManifestURL, _, _));
1558 1562
1559 RunHandlerWithSimpleFaviconCandidates({kIconURL12x12}, kManifestURL); 1563 RunHandlerWithSimpleFaviconCandidates({kIconURL12x12}, kManifestURL);
1560 EXPECT_THAT(favicon_service_.fake()->db_requests(), 1564 EXPECT_THAT(favicon_service_.fake()->db_requests(),
1561 ElementsAre(kPageURL, kManifestURL)); 1565 ElementsAre(kPageURL, kManifestURL));
1562 EXPECT_THAT(delegate_.downloads(), ElementsAre(kManifestURL, kIconURL16x16)); 1566 EXPECT_THAT(delegate_.downloads(), ElementsAre(kManifestURL, kIconURL16x16));
1563 } 1567 }
1564 1568
1565 // Test that the manifest and icon are redownloaded if the icon cached for the 1569 // Test that the manifest and icon are redownloaded if the icon cached for the
1566 // page URL expired. 1570 // page URL expired.
1567 TEST_F(FaviconHandlerManifestsEnabledTest, GetFaviconFromExpiredManifest) { 1571 TEST_F(FaviconHandlerManifestsEnabledTest, GetFaviconFromExpiredManifest) {
1568 const std::vector<favicon::FaviconURL> kManifestIcons = { 1572 const std::vector<favicon::FaviconURL> kManifestIcons = {
1569 FaviconURL(kIconURL64x64, FAVICON, kEmptySizes), 1573 FaviconURL(kIconURL64x64, FAVICON, kEmptySizes),
1570 }; 1574 };
1571 1575
1572 favicon_service_.fake()->Store(kPageURL, kManifestURL, 1576 favicon_service_.fake()->Store(
1573 CreateRawBitmapResult(kManifestURL, FAVICON, 1577 kPageURL, kManifestURL,
1574 /*expired=*/true)); 1578 CreateRawBitmapResult(kManifestURL, WEB_MANIFEST_ICON,
1579 /*expired=*/true));
1575 delegate_.fake_manifest_downloader().Add(kManifestURL, kManifestIcons); 1580 delegate_.fake_manifest_downloader().Add(kManifestURL, kManifestIcons);
1576 1581
1577 EXPECT_CALL(delegate_, OnFaviconUpdated(_, _, kManifestURL, _, _)).Times(2); 1582 EXPECT_CALL(delegate_, OnFaviconUpdated(_, _, kManifestURL, _, _)).Times(2);
1578 EXPECT_CALL(favicon_service_, SetFavicons(_, kManifestURL, _, _)); 1583 EXPECT_CALL(favicon_service_, SetFavicons(_, kManifestURL, _, _));
1579 1584
1580 RunHandlerWithSimpleFaviconCandidates({kIconURL12x12}, kManifestURL); 1585 RunHandlerWithSimpleFaviconCandidates({kIconURL12x12}, kManifestURL);
1581 EXPECT_THAT(favicon_service_.fake()->db_requests(), 1586 EXPECT_THAT(favicon_service_.fake()->db_requests(),
1582 ElementsAre(kPageURL, kManifestURL)); 1587 ElementsAre(kPageURL, kManifestURL));
1583 EXPECT_THAT(delegate_.downloads(), ElementsAre(kManifestURL, kIconURL64x64)); 1588 EXPECT_THAT(delegate_.downloads(), ElementsAre(kManifestURL, kIconURL64x64));
1584 } 1589 }
1585 1590
1586 // Test that the manifest and icon are redownloaded if the icon cached for the 1591 // Test that the manifest and icon are redownloaded if the icon cached for the
1587 // manifest URL expired, which was observed during a visit to a different page 1592 // manifest URL expired, which was observed during a visit to a different page
1588 // URL. 1593 // URL.
1589 TEST_F(FaviconHandlerManifestsEnabledTest, 1594 TEST_F(FaviconHandlerManifestsEnabledTest,
1590 GetFaviconFromExpiredManifestLinkedFromOtherPage) { 1595 GetFaviconFromExpiredManifestLinkedFromOtherPage) {
1591 const GURL kSomePreviousPageURL("https://www.google.com/previous"); 1596 const GURL kSomePreviousPageURL("https://www.google.com/previous");
1592 const std::vector<favicon::FaviconURL> kManifestIcons = { 1597 const std::vector<favicon::FaviconURL> kManifestIcons = {
1593 FaviconURL(kIconURL64x64, FAVICON, kEmptySizes), 1598 FaviconURL(kIconURL64x64, FAVICON, kEmptySizes),
1594 }; 1599 };
1595 1600
1596 favicon_service_.fake()->Store(kSomePreviousPageURL, kManifestURL, 1601 favicon_service_.fake()->Store(
1597 CreateRawBitmapResult(kManifestURL, FAVICON, 1602 kSomePreviousPageURL, kManifestURL,
1598 /*expired=*/true)); 1603 CreateRawBitmapResult(kManifestURL, WEB_MANIFEST_ICON,
1604 /*expired=*/true));
1599 delegate_.fake_manifest_downloader().Add(kManifestURL, kManifestIcons); 1605 delegate_.fake_manifest_downloader().Add(kManifestURL, kManifestIcons);
1600 1606
1601 EXPECT_CALL(delegate_, OnFaviconUpdated(_, _, kManifestURL, _, _)).Times(2); 1607 EXPECT_CALL(delegate_, OnFaviconUpdated(_, _, kManifestURL, _, _)).Times(2);
1602 EXPECT_CALL(favicon_service_, SetFavicons(_, kManifestURL, _, _)); 1608 EXPECT_CALL(favicon_service_, SetFavicons(_, kManifestURL, _, _));
1603 1609
1604 RunHandlerWithSimpleFaviconCandidates({kIconURL12x12}, kManifestURL); 1610 RunHandlerWithSimpleFaviconCandidates({kIconURL12x12}, kManifestURL);
1605 EXPECT_THAT(favicon_service_.fake()->db_requests(), 1611 EXPECT_THAT(favicon_service_.fake()->db_requests(),
1606 ElementsAre(kPageURL, kManifestURL)); 1612 ElementsAre(kPageURL, kManifestURL));
1607 EXPECT_THAT(delegate_.downloads(), ElementsAre(kManifestURL, kIconURL64x64)); 1613 EXPECT_THAT(delegate_.downloads(), ElementsAre(kManifestURL, kIconURL64x64));
1608 } 1614 }
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
1845 // - The page doesn't initially link to a Web Manifest. 1851 // - The page doesn't initially link to a Web Manifest.
1846 // - The page has an icon URL provided via a <link rel="icon"> tag. 1852 // - The page has an icon URL provided via a <link rel="icon"> tag.
1847 // - The database does not know about the page URL or icon URL. 1853 // - The database does not know about the page URL or icon URL.
1848 // - While the icon is being downloaded, the page uses Javascript to add a 1854 // - While the icon is being downloaded, the page uses Javascript to add a
1849 // <link rel="manifest"> tag. 1855 // <link rel="manifest"> tag.
1850 // - The database has bitmap data for the manifest URL. 1856 // - The database has bitmap data for the manifest URL.
1851 TEST_F(FaviconHandlerManifestsEnabledTest, 1857 TEST_F(FaviconHandlerManifestsEnabledTest,
1852 AddKnownManifestViaJavascriptWhileImageDownload) { 1858 AddKnownManifestViaJavascriptWhileImageDownload) {
1853 const GURL kSomePreviousPageURL("https://www.google.com/previous"); 1859 const GURL kSomePreviousPageURL("https://www.google.com/previous");
1854 1860
1855 favicon_service_.fake()->Store(kSomePreviousPageURL, kManifestURL, 1861 favicon_service_.fake()->Store(
1856 CreateRawBitmapResult(kManifestURL)); 1862 kSomePreviousPageURL, kManifestURL,
1863 CreateRawBitmapResult(kManifestURL, WEB_MANIFEST_ICON));
1857 1864
1858 // Defer the image download completion to control the exact timing. 1865 // Defer the image download completion to control the exact timing.
1859 delegate_.fake_image_downloader().SetRunCallbackManuallyForUrl(kIconURL16x16); 1866 delegate_.fake_image_downloader().SetRunCallbackManuallyForUrl(kIconURL16x16);
1860 1867
1861 std::unique_ptr<FaviconHandler> handler = 1868 std::unique_ptr<FaviconHandler> handler =
1862 RunHandlerWithSimpleFaviconCandidates({kIconURL16x16}); 1869 RunHandlerWithSimpleFaviconCandidates({kIconURL16x16});
1863 1870
1864 ASSERT_TRUE(VerifyAndClearExpectations()); 1871 ASSERT_TRUE(VerifyAndClearExpectations());
1865 ASSERT_TRUE(delegate_.fake_image_downloader().HasPendingManualCallback()); 1872 ASSERT_TRUE(delegate_.fake_image_downloader().HasPendingManualCallback());
1866 1873
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
1958 1965
1959 // Complete the download. 1966 // Complete the download.
1960 EXPECT_CALL(favicon_service_, SetFavicons(_, kManifestURL2, _, _)); 1967 EXPECT_CALL(favicon_service_, SetFavicons(_, kManifestURL2, _, _));
1961 EXPECT_CALL(delegate_, OnFaviconUpdated(_, _, kManifestURL2, _, _)); 1968 EXPECT_CALL(delegate_, OnFaviconUpdated(_, _, kManifestURL2, _, _));
1962 EXPECT_TRUE(delegate_.fake_image_downloader().RunCallbackManually()); 1969 EXPECT_TRUE(delegate_.fake_image_downloader().RunCallbackManually());
1963 base::RunLoop().RunUntilIdle(); 1970 base::RunLoop().RunUntilIdle();
1964 } 1971 }
1965 1972
1966 } // namespace 1973 } // namespace
1967 } // namespace favicon 1974 } // namespace favicon
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698