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 |