| OLD | NEW |
| 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 552 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 563 const GURL kIconURLReturning500("http://www.google.com/500.png"); | 563 const GURL kIconURLReturning500("http://www.google.com/500.png"); |
| 564 | 564 |
| 565 delegate_.fake_downloader().AddError(kIconURLReturning500, 500); | 565 delegate_.fake_downloader().AddError(kIconURLReturning500, 500); |
| 566 | 566 |
| 567 favicon_service_.fake()->Store( | 567 favicon_service_.fake()->Store( |
| 568 kPageURL, kIconURL64x64, | 568 kPageURL, kIconURL64x64, |
| 569 CreateRawBitmapResult(kIconURL64x64, TOUCH_ICON, | 569 CreateRawBitmapResult(kIconURL64x64, TOUCH_ICON, |
| 570 /*expired=*/true)); | 570 /*expired=*/true)); |
| 571 | 571 |
| 572 EXPECT_CALL(delegate_, | 572 EXPECT_CALL(delegate_, |
| 573 OnFaviconUpdated(kPageURL, FaviconDriverObserver::TOUCH_LARGEST, | 573 OnFaviconUpdated(kPageURL, FaviconDriverObserver::LARGEST, |
| 574 kIconURL64x64, /*icon_url_changed=*/true, _)); | 574 kIconURL64x64, /*icon_url_changed=*/true, _)); |
| 575 EXPECT_CALL(delegate_, | 575 EXPECT_CALL(delegate_, |
| 576 OnFaviconUpdated(kPageURL, FaviconDriverObserver::TOUCH_LARGEST, | 576 OnFaviconUpdated(kPageURL, FaviconDriverObserver::LARGEST, |
| 577 kIconURL64x64, /*icon_url_changed=*/false, _)); | 577 kIconURL64x64, /*icon_url_changed=*/false, _)); |
| 578 | 578 |
| 579 RunHandlerWithCandidates( | 579 RunHandlerWithCandidates( |
| 580 FaviconDriverObserver::TOUCH_LARGEST, | 580 FaviconDriverObserver::LARGEST, |
| 581 { | 581 { |
| 582 FaviconURL(kIconURLReturning500, TOUCH_PRECOMPOSED_ICON, kEmptySizes), | 582 FaviconURL(kIconURLReturning500, TOUCH_PRECOMPOSED_ICON, kEmptySizes), |
| 583 FaviconURL(kIconURL64x64, TOUCH_ICON, kEmptySizes), | 583 FaviconURL(kIconURL64x64, TOUCH_ICON, kEmptySizes), |
| 584 }); | 584 }); |
| 585 // First download fails, second succeeds. | 585 // First download fails, second succeeds. |
| 586 EXPECT_THAT(delegate_.downloads(), | 586 EXPECT_THAT(delegate_.downloads(), |
| 587 ElementsAre(kIconURLReturning500, kIconURL64x64)); | 587 ElementsAre(kIconURLReturning500, kIconURL64x64)); |
| 588 } | 588 } |
| 589 | 589 |
| 590 // Test that download data for icon URLs other than the current favicon | 590 // Test that download data for icon URLs other than the current favicon |
| (...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 898 | 898 |
| 899 const std::vector<favicon::FaviconURL> kSourceIconURLs{ | 899 const std::vector<favicon::FaviconURL> kSourceIconURLs{ |
| 900 FaviconURL(kIconURL1_17, FAVICON, {gfx::Size(1, 1), gfx::Size(17, 17)}), | 900 FaviconURL(kIconURL1_17, FAVICON, {gfx::Size(1, 1), gfx::Size(17, 17)}), |
| 901 FaviconURL(kIconURL1024_512, FAVICON, | 901 FaviconURL(kIconURL1024_512, FAVICON, |
| 902 {gfx::Size(1024, 1024), gfx::Size(512, 512)}), | 902 {gfx::Size(1024, 1024), gfx::Size(512, 512)}), |
| 903 FaviconURL(kIconURL16_14, FAVICON, | 903 FaviconURL(kIconURL16_14, FAVICON, |
| 904 {gfx::Size(16, 16), gfx::Size(14, 14)}), | 904 {gfx::Size(16, 16), gfx::Size(14, 14)}), |
| 905 FaviconURL(kIconURLWithoutSize1, FAVICON, kEmptySizes), | 905 FaviconURL(kIconURLWithoutSize1, FAVICON, kEmptySizes), |
| 906 FaviconURL(kIconURLWithoutSize2, FAVICON, kEmptySizes)}; | 906 FaviconURL(kIconURLWithoutSize2, FAVICON, kEmptySizes)}; |
| 907 | 907 |
| 908 std::unique_ptr<FaviconHandler> handler = RunHandlerWithCandidates( | 908 std::unique_ptr<FaviconHandler> handler = |
| 909 FaviconDriverObserver::NON_TOUCH_LARGEST, kSourceIconURLs); | 909 RunHandlerWithCandidates(FaviconDriverObserver::LARGEST, kSourceIconURLs); |
| 910 | 910 |
| 911 EXPECT_THAT( | 911 EXPECT_THAT( |
| 912 handler->GetIconURLs(), | 912 handler->GetIconURLs(), |
| 913 ElementsAre( | 913 ElementsAre( |
| 914 // The 512x512 bitmap is the best match for the desired size. | 914 // The 512x512 bitmap is the best match for the desired size. |
| 915 kIconURL1024_512, kIconURL1_17, kIconURL16_14, | 915 kIconURL1024_512, kIconURL1_17, kIconURL16_14, |
| 916 // The rest of bitmaps come in order, there is no "sizes" attribute. | 916 // The rest of bitmaps come in order, there is no "sizes" attribute. |
| 917 kIconURLWithoutSize1, kIconURLWithoutSize2)); | 917 kIconURLWithoutSize1, kIconURLWithoutSize2)); |
| 918 } | 918 } |
| 919 | 919 |
| 920 TEST_F(FaviconHandlerTest, TestDownloadLargestFavicon) { | 920 TEST_F(FaviconHandlerTest, TestDownloadLargestFavicon) { |
| 921 // Names represent the bitmap sizes per icon. | 921 // Names represent the bitmap sizes per icon. |
| 922 const GURL kIconURL1024_512("http://www.google.com/a"); | 922 const GURL kIconURL1024_512("http://www.google.com/a"); |
| 923 const GURL kIconURL15_14("http://www.google.com/b"); | 923 const GURL kIconURL15_14("http://www.google.com/b"); |
| 924 const GURL kIconURL16_512("http://www.google.com/c"); | 924 const GURL kIconURL16_512("http://www.google.com/c"); |
| 925 const GURL kIconURLWithoutSize1("http://www.google.com/d"); | 925 const GURL kIconURLWithoutSize1("http://www.google.com/d"); |
| 926 const GURL kIconURLWithoutSize2("http://www.google.com/e"); | 926 const GURL kIconURLWithoutSize2("http://www.google.com/e"); |
| 927 | 927 |
| 928 RunHandlerWithCandidates( | 928 RunHandlerWithCandidates( |
| 929 FaviconDriverObserver::NON_TOUCH_LARGEST, | 929 FaviconDriverObserver::LARGEST, |
| 930 {FaviconURL(kIconURL1024_512, FAVICON, | 930 {FaviconURL(kIconURL1024_512, FAVICON, |
| 931 {gfx::Size(1024, 1024), gfx::Size(512, 512)}), | 931 {gfx::Size(1024, 1024), gfx::Size(512, 512)}), |
| 932 FaviconURL(kIconURL15_14, FAVICON, | 932 FaviconURL(kIconURL15_14, FAVICON, |
| 933 {gfx::Size(15, 15), gfx::Size(14, 14)}), | 933 {gfx::Size(15, 15), gfx::Size(14, 14)}), |
| 934 FaviconURL(kIconURL16_512, FAVICON, | 934 FaviconURL(kIconURL16_512, FAVICON, |
| 935 {gfx::Size(16, 16), gfx::Size(512, 512)}), | 935 {gfx::Size(16, 16), gfx::Size(512, 512)}), |
| 936 FaviconURL(kIconURLWithoutSize1, FAVICON, kEmptySizes), | 936 FaviconURL(kIconURLWithoutSize1, FAVICON, kEmptySizes), |
| 937 FaviconURL(kIconURLWithoutSize2, FAVICON, kEmptySizes)}); | 937 FaviconURL(kIconURLWithoutSize2, FAVICON, kEmptySizes)}); |
| 938 | 938 |
| 939 // Icon URLs are not registered and hence 404s will be produced, which | 939 // Icon URLs are not registered and hence 404s will be produced, which |
| 940 // allows checking whether the icons were requested according to their size. | 940 // allows checking whether the icons were requested according to their size. |
| 941 // The favicons should have been requested in decreasing order of their sizes. | 941 // The favicons should have been requested in decreasing order of their sizes. |
| 942 // Favicons without any <link sizes=""> attribute should have been downloaded | 942 // Favicons without any <link sizes=""> attribute should have been downloaded |
| 943 // last. | 943 // last. |
| 944 EXPECT_THAT(delegate_.downloads(), | 944 EXPECT_THAT(delegate_.downloads(), |
| 945 ElementsAre(kIconURL1024_512, kIconURL16_512, kIconURL15_14, | 945 ElementsAre(kIconURL1024_512, kIconURL16_512, kIconURL15_14, |
| 946 kIconURLWithoutSize1, kIconURLWithoutSize2)); | 946 kIconURLWithoutSize1, kIconURLWithoutSize2)); |
| 947 } | 947 } |
| 948 | 948 |
| 949 TEST_F(FaviconHandlerTest, TestSelectLargestFavicon) { | 949 TEST_F(FaviconHandlerTest, TestSelectLargestFavicon) { |
| 950 const GURL kIconURL1("http://www.google.com/b"); | 950 const GURL kIconURL1("http://www.google.com/b"); |
| 951 const GURL kIconURL2("http://www.google.com/c"); | 951 const GURL kIconURL2("http://www.google.com/c"); |
| 952 | 952 |
| 953 delegate_.fake_downloader().Add(kIconURL1, IntVector{15}); | 953 delegate_.fake_downloader().Add(kIconURL1, IntVector{15}); |
| 954 delegate_.fake_downloader().Add(kIconURL2, IntVector{14, 16}); | 954 delegate_.fake_downloader().Add(kIconURL2, IntVector{14, 16}); |
| 955 | 955 |
| 956 // Verify NotifyFaviconAvailable(). | 956 // Verify NotifyFaviconAvailable(). |
| 957 EXPECT_CALL(delegate_, | 957 EXPECT_CALL(delegate_, OnFaviconUpdated(_, FaviconDriverObserver::LARGEST, |
| 958 OnFaviconUpdated(_, FaviconDriverObserver::NON_TOUCH_LARGEST, | 958 kIconURL2, _, _)); |
| 959 kIconURL2, _, _)); | |
| 960 | 959 |
| 961 RunHandlerWithCandidates( | 960 RunHandlerWithCandidates( |
| 962 FaviconDriverObserver::NON_TOUCH_LARGEST, | 961 FaviconDriverObserver::LARGEST, |
| 963 {FaviconURL(kIconURL1, FAVICON, {gfx::Size(15, 15)}), | 962 {FaviconURL(kIconURL1, FAVICON, {gfx::Size(15, 15)}), |
| 964 FaviconURL(kIconURL2, FAVICON, {gfx::Size(14, 14), gfx::Size(16, 16)})}); | 963 FaviconURL(kIconURL2, FAVICON, {gfx::Size(14, 14), gfx::Size(16, 16)})}); |
| 965 | 964 |
| 966 EXPECT_THAT(delegate_.downloads(), ElementsAre(kIconURL2)); | 965 EXPECT_THAT(delegate_.downloads(), ElementsAre(kIconURL2)); |
| 967 } | 966 } |
| 968 | 967 |
| 969 TEST_F(FaviconHandlerTest, TestFaviconWasScaledAfterDownload) { | 968 TEST_F(FaviconHandlerTest, TestFaviconWasScaledAfterDownload) { |
| 970 const int kMaximalSize = FaviconHandler::GetMaximalIconSize( | 969 const int kMaximalSize = |
| 971 FaviconDriverObserver::NON_TOUCH_LARGEST); | 970 FaviconHandler::GetMaximalIconSize(FaviconDriverObserver::LARGEST); |
| 972 | 971 |
| 973 const GURL kIconURL1("http://www.google.com/b"); | 972 const GURL kIconURL1("http://www.google.com/b"); |
| 974 const GURL kIconURL2("http://www.google.com/c"); | 973 const GURL kIconURL2("http://www.google.com/c"); |
| 975 | 974 |
| 976 const int kOriginalSize1 = kMaximalSize + 1; | 975 const int kOriginalSize1 = kMaximalSize + 1; |
| 977 const int kOriginalSize2 = kMaximalSize + 2; | 976 const int kOriginalSize2 = kMaximalSize + 2; |
| 978 | 977 |
| 979 delegate_.fake_downloader().AddWithOriginalSizes( | 978 delegate_.fake_downloader().AddWithOriginalSizes( |
| 980 kIconURL1, IntVector{kMaximalSize}, IntVector{kOriginalSize1}); | 979 kIconURL1, IntVector{kMaximalSize}, IntVector{kOriginalSize1}); |
| 981 delegate_.fake_downloader().AddWithOriginalSizes( | 980 delegate_.fake_downloader().AddWithOriginalSizes( |
| 982 kIconURL2, IntVector{kMaximalSize}, IntVector{kOriginalSize2}); | 981 kIconURL2, IntVector{kMaximalSize}, IntVector{kOriginalSize2}); |
| 983 | 982 |
| 984 // Verify the best bitmap was selected (although smaller than |kIconURL2|) | 983 // Verify the best bitmap was selected (although smaller than |kIconURL2|) |
| 985 // and that it was scaled down to |kMaximalSize|. | 984 // and that it was scaled down to |kMaximalSize|. |
| 986 EXPECT_CALL(delegate_, | 985 EXPECT_CALL(delegate_, |
| 987 OnFaviconUpdated(_, _, kIconURL1, _, | 986 OnFaviconUpdated(_, _, kIconURL1, _, |
| 988 ImageSizeIs(kMaximalSize, kMaximalSize))); | 987 ImageSizeIs(kMaximalSize, kMaximalSize))); |
| 989 | 988 |
| 990 RunHandlerWithCandidates( | 989 RunHandlerWithCandidates( |
| 991 FaviconDriverObserver::NON_TOUCH_LARGEST, | 990 FaviconDriverObserver::LARGEST, |
| 992 {FaviconURL(kIconURL1, FAVICON, | 991 {FaviconURL(kIconURL1, FAVICON, |
| 993 SizeVector{gfx::Size(kOriginalSize1, kOriginalSize1)}), | 992 SizeVector{gfx::Size(kOriginalSize1, kOriginalSize1)}), |
| 994 FaviconURL(kIconURL2, FAVICON, | 993 FaviconURL(kIconURL2, FAVICON, |
| 995 SizeVector{gfx::Size(kOriginalSize2, kOriginalSize2)})}); | 994 SizeVector{gfx::Size(kOriginalSize2, kOriginalSize2)})}); |
| 996 | 995 |
| 997 EXPECT_THAT(delegate_.downloads(), ElementsAre(kIconURL1)); | 996 EXPECT_THAT(delegate_.downloads(), ElementsAre(kIconURL1)); |
| 998 } | 997 } |
| 999 | 998 |
| 1000 // Test that if several icons are downloaded because the icons are smaller than | 999 // Test that if several icons are downloaded because the icons are smaller than |
| 1001 // expected that OnFaviconUpdated() is called with the largest downloaded | 1000 // expected that OnFaviconUpdated() is called with the largest downloaded |
| 1002 // bitmap. | 1001 // bitmap. |
| 1003 TEST_F(FaviconHandlerTest, TestKeepDownloadedLargestFavicon) { | 1002 TEST_F(FaviconHandlerTest, TestKeepDownloadedLargestFavicon) { |
| 1004 EXPECT_CALL(delegate_, | 1003 EXPECT_CALL(delegate_, |
| 1005 OnFaviconUpdated(_, _, kIconURL12x12, _, ImageSizeIs(12, 12))); | 1004 OnFaviconUpdated(_, _, kIconURL12x12, _, ImageSizeIs(12, 12))); |
| 1006 | 1005 |
| 1007 RunHandlerWithCandidates( | 1006 RunHandlerWithCandidates( |
| 1008 FaviconDriverObserver::NON_TOUCH_LARGEST, | 1007 FaviconDriverObserver::LARGEST, |
| 1009 {FaviconURL(kIconURL10x10, FAVICON, SizeVector{gfx::Size(16, 16)}), | 1008 {FaviconURL(kIconURL10x10, FAVICON, SizeVector{gfx::Size(16, 16)}), |
| 1010 FaviconURL(kIconURL12x12, FAVICON, SizeVector{gfx::Size(15, 15)}), | 1009 FaviconURL(kIconURL12x12, FAVICON, SizeVector{gfx::Size(15, 15)}), |
| 1011 FaviconURL(kIconURL16x16, FAVICON, kEmptySizes)}); | 1010 FaviconURL(kIconURL16x16, FAVICON, kEmptySizes)}); |
| 1012 } | 1011 } |
| 1013 | 1012 |
| 1014 } // namespace | 1013 } // namespace |
| 1015 } // namespace favicon | 1014 } // namespace favicon |
| OLD | NEW |