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 <memory> | 10 #include <memory> |
10 #include <set> | 11 #include <set> |
11 #include <vector> | 12 #include <vector> |
12 | 13 |
13 #include "base/macros.h" | 14 #include "base/macros.h" |
14 #include "base/memory/ptr_util.h" | 15 #include "base/memory/ptr_util.h" |
15 #include "base/message_loop/message_loop.h" | 16 #include "base/message_loop/message_loop.h" |
16 #include "base/run_loop.h" | 17 #include "base/run_loop.h" |
17 #include "base/strings/stringprintf.h" | 18 #include "base/strings/stringprintf.h" |
18 #include "components/favicon/core/favicon_driver.h" | 19 #include "components/favicon/core/favicon_driver.h" |
(...skipping 862 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
881 const GURL kInvalidFormatURL("invalid"); | 882 const GURL kInvalidFormatURL("invalid"); |
882 ASSERT_TRUE(kInvalidFormatURL.is_empty()); | 883 ASSERT_TRUE(kInvalidFormatURL.is_empty()); |
883 | 884 |
884 EXPECT_CALL(delegate_, OnFaviconUpdated(_, _, _, _, _)).Times(0); | 885 EXPECT_CALL(delegate_, OnFaviconUpdated(_, _, _, _, _)).Times(0); |
885 | 886 |
886 RunHandlerWithSimpleFaviconCandidates({kInvalidFormatURL}); | 887 RunHandlerWithSimpleFaviconCandidates({kInvalidFormatURL}); |
887 EXPECT_THAT(delegate_.downloads(), IsEmpty()); | 888 EXPECT_THAT(delegate_.downloads(), IsEmpty()); |
888 } | 889 } |
889 | 890 |
890 TEST_F(FaviconHandlerTest, TestSortFavicon) { | 891 TEST_F(FaviconHandlerTest, TestSortFavicon) { |
| 892 // Names represent the bitmap sizes per icon. |
| 893 const GURL kIconURL1_17("http://www.google.com/a"); |
| 894 const GURL kIconURL1024_512("http://www.google.com/b"); |
| 895 const GURL kIconURL16_14("http://www.google.com/c"); |
| 896 const GURL kIconURLWithoutSize1("http://www.google.com/d"); |
| 897 const GURL kIconURLWithoutSize2("http://www.google.com/e"); |
| 898 |
891 const std::vector<favicon::FaviconURL> kSourceIconURLs{ | 899 const std::vector<favicon::FaviconURL> kSourceIconURLs{ |
892 FaviconURL(GURL("http://www.google.com/a"), FAVICON, | 900 FaviconURL(kIconURL1_17, FAVICON, {gfx::Size(1, 1), gfx::Size(17, 17)}), |
893 {gfx::Size(1, 1), gfx::Size(17, 17)}), | 901 FaviconURL(kIconURL1024_512, FAVICON, |
894 FaviconURL(GURL("http://www.google.com/b"), FAVICON, | |
895 {gfx::Size(1024, 1024), gfx::Size(512, 512)}), | 902 {gfx::Size(1024, 1024), gfx::Size(512, 512)}), |
896 FaviconURL(GURL("http://www.google.com/c"), FAVICON, | 903 FaviconURL(kIconURL16_14, FAVICON, |
897 {gfx::Size(16, 16), gfx::Size(14, 14)}), | 904 {gfx::Size(16, 16), gfx::Size(14, 14)}), |
898 FaviconURL(GURL("http://www.google.com/d"), FAVICON, kEmptySizes), | 905 FaviconURL(kIconURLWithoutSize1, FAVICON, kEmptySizes), |
899 FaviconURL(GURL("http://www.google.com/e"), FAVICON, kEmptySizes)}; | 906 FaviconURL(kIconURLWithoutSize2, FAVICON, kEmptySizes)}; |
900 | 907 |
901 std::unique_ptr<FaviconHandler> handler = RunHandlerWithCandidates( | 908 std::unique_ptr<FaviconHandler> handler = RunHandlerWithCandidates( |
902 FaviconDriverObserver::NON_TOUCH_LARGEST, kSourceIconURLs); | 909 FaviconDriverObserver::NON_TOUCH_LARGEST, kSourceIconURLs); |
903 | 910 |
904 struct ExpectedResult { | 911 EXPECT_THAT( |
905 // The favicon's index in kSourceIconURLs. | 912 handler->GetIconURLs(), |
906 size_t favicon_index; | 913 ElementsAre( |
907 // Width of largest bitmap. | 914 // The 512x512 bitmap is the best match for the desired size. |
908 int width; | 915 kIconURL1024_512, kIconURL1_17, kIconURL16_14, |
909 } results[] = { | 916 // The rest of bitmaps come in order, there is no "sizes" attribute. |
910 // First is icon2, though its size larger than maximal. | 917 kIconURLWithoutSize1, kIconURLWithoutSize2)); |
911 {1, 1024}, | |
912 // Second is icon1 | |
913 // The 17x17 is largest. | |
914 {0, 17}, | |
915 // Third is icon3. | |
916 // The 16x16 is largest. | |
917 {2, 16}, | |
918 // The rest of bitmaps come in order, there is no "sizes" attribute. | |
919 {3, -1}, | |
920 {4, -1}, | |
921 }; | |
922 const std::vector<FaviconURL>& icons = handler->image_urls(); | |
923 ASSERT_EQ(5u, icons.size()); | |
924 for (size_t i = 0; i < icons.size(); ++i) { | |
925 EXPECT_EQ(kSourceIconURLs[results[i].favicon_index].icon_url, | |
926 icons[i].icon_url); | |
927 if (results[i].width != -1) | |
928 EXPECT_EQ(results[i].width, icons[i].icon_sizes[0].width()); | |
929 } | |
930 } | 918 } |
931 | 919 |
932 TEST_F(FaviconHandlerTest, TestDownloadLargestFavicon) { | 920 TEST_F(FaviconHandlerTest, TestDownloadLargestFavicon) { |
933 // Names represent the bitmap sizes per icon. | 921 // Names represent the bitmap sizes per icon. |
934 const GURL kIconURL1024_512("http://www.google.com/a"); | 922 const GURL kIconURL1024_512("http://www.google.com/a"); |
935 const GURL kIconURL15_14("http://www.google.com/b"); | 923 const GURL kIconURL15_14("http://www.google.com/b"); |
936 const GURL kIconURL16_512("http://www.google.com/c"); | 924 const GURL kIconURL16_512("http://www.google.com/c"); |
937 const GURL kIconURLWithoutSize1("http://www.google.com/d"); | 925 const GURL kIconURLWithoutSize1("http://www.google.com/d"); |
938 const GURL kIconURLWithoutSize2("http://www.google.com/e"); | 926 const GURL kIconURLWithoutSize2("http://www.google.com/e"); |
939 | 927 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
972 | 960 |
973 RunHandlerWithCandidates( | 961 RunHandlerWithCandidates( |
974 FaviconDriverObserver::NON_TOUCH_LARGEST, | 962 FaviconDriverObserver::NON_TOUCH_LARGEST, |
975 {FaviconURL(kIconURL1, FAVICON, {gfx::Size(15, 15)}), | 963 {FaviconURL(kIconURL1, FAVICON, {gfx::Size(15, 15)}), |
976 FaviconURL(kIconURL2, FAVICON, {gfx::Size(14, 14), gfx::Size(16, 16)})}); | 964 FaviconURL(kIconURL2, FAVICON, {gfx::Size(14, 14), gfx::Size(16, 16)})}); |
977 | 965 |
978 EXPECT_THAT(delegate_.downloads(), ElementsAre(kIconURL2)); | 966 EXPECT_THAT(delegate_.downloads(), ElementsAre(kIconURL2)); |
979 } | 967 } |
980 | 968 |
981 TEST_F(FaviconHandlerTest, TestFaviconWasScaledAfterDownload) { | 969 TEST_F(FaviconHandlerTest, TestFaviconWasScaledAfterDownload) { |
982 const int kMaximalSize = FaviconHandler::GetMaximalIconSize(FAVICON); | 970 const int kMaximalSize = FaviconHandler::GetMaximalIconSize( |
| 971 FaviconDriverObserver::NON_TOUCH_LARGEST); |
983 | 972 |
984 const GURL kIconURL1("http://www.google.com/b"); | 973 const GURL kIconURL1("http://www.google.com/b"); |
985 const GURL kIconURL2("http://www.google.com/c"); | 974 const GURL kIconURL2("http://www.google.com/c"); |
986 | 975 |
987 const int kOriginalSize1 = kMaximalSize + 1; | 976 const int kOriginalSize1 = kMaximalSize + 1; |
988 const int kOriginalSize2 = kMaximalSize + 2; | 977 const int kOriginalSize2 = kMaximalSize + 2; |
989 | 978 |
990 delegate_.fake_downloader().AddWithOriginalSizes( | 979 delegate_.fake_downloader().AddWithOriginalSizes( |
991 kIconURL1, IntVector{kMaximalSize}, IntVector{kOriginalSize1}); | 980 kIconURL1, IntVector{kMaximalSize}, IntVector{kOriginalSize1}); |
992 delegate_.fake_downloader().AddWithOriginalSizes( | 981 delegate_.fake_downloader().AddWithOriginalSizes( |
993 kIconURL2, IntVector{kMaximalSize}, IntVector{kOriginalSize2}); | 982 kIconURL2, IntVector{kMaximalSize}, IntVector{kOriginalSize2}); |
994 | 983 |
995 // Verify the largest bitmap was selected although it was scaled down to | 984 // Verify the best bitmap was selected (although smaller than |kIconURL2|) |
996 // maximal size and smaller than |kIconURL1| now. | 985 // and that it was scaled down to |kMaximalSize|. |
997 EXPECT_CALL(delegate_, | 986 EXPECT_CALL(delegate_, |
998 OnFaviconUpdated(_, _, kIconURL2, _, | 987 OnFaviconUpdated(_, _, kIconURL1, _, |
999 ImageSizeIs(kMaximalSize, kMaximalSize))); | 988 ImageSizeIs(kMaximalSize, kMaximalSize))); |
1000 | 989 |
1001 RunHandlerWithCandidates( | 990 RunHandlerWithCandidates( |
1002 FaviconDriverObserver::NON_TOUCH_LARGEST, | 991 FaviconDriverObserver::NON_TOUCH_LARGEST, |
1003 {FaviconURL(kIconURL1, FAVICON, | 992 {FaviconURL(kIconURL1, FAVICON, |
1004 SizeVector{gfx::Size(kOriginalSize1, kOriginalSize1)}), | 993 SizeVector{gfx::Size(kOriginalSize1, kOriginalSize1)}), |
1005 FaviconURL(kIconURL2, FAVICON, | 994 FaviconURL(kIconURL2, FAVICON, |
1006 SizeVector{gfx::Size(kOriginalSize2, kOriginalSize2)})}); | 995 SizeVector{gfx::Size(kOriginalSize2, kOriginalSize2)})}); |
1007 | 996 |
1008 EXPECT_THAT(delegate_.downloads(), ElementsAre(kIconURL2)); | 997 EXPECT_THAT(delegate_.downloads(), ElementsAre(kIconURL1)); |
1009 } | 998 } |
1010 | 999 |
1011 // Test that if several icons are downloaded because the icons are smaller than | 1000 // Test that if several icons are downloaded because the icons are smaller than |
1012 // expected that OnFaviconUpdated() is called with the largest downloaded | 1001 // expected that OnFaviconUpdated() is called with the largest downloaded |
1013 // bitmap. | 1002 // bitmap. |
1014 TEST_F(FaviconHandlerTest, TestKeepDownloadedLargestFavicon) { | 1003 TEST_F(FaviconHandlerTest, TestKeepDownloadedLargestFavicon) { |
1015 EXPECT_CALL(delegate_, | 1004 EXPECT_CALL(delegate_, |
1016 OnFaviconUpdated(_, _, kIconURL12x12, _, ImageSizeIs(12, 12))); | 1005 OnFaviconUpdated(_, _, kIconURL12x12, _, ImageSizeIs(12, 12))); |
1017 | 1006 |
1018 RunHandlerWithCandidates( | 1007 RunHandlerWithCandidates( |
1019 FaviconDriverObserver::NON_TOUCH_LARGEST, | 1008 FaviconDriverObserver::NON_TOUCH_LARGEST, |
1020 {FaviconURL(kIconURL10x10, FAVICON, SizeVector{gfx::Size(16, 16)}), | 1009 {FaviconURL(kIconURL10x10, FAVICON, SizeVector{gfx::Size(16, 16)}), |
1021 FaviconURL(kIconURL12x12, FAVICON, SizeVector{gfx::Size(15, 15)}), | 1010 FaviconURL(kIconURL12x12, FAVICON, SizeVector{gfx::Size(15, 15)}), |
1022 FaviconURL(kIconURL16x16, FAVICON, kEmptySizes)}); | 1011 FaviconURL(kIconURL16x16, FAVICON, kEmptySizes)}); |
1023 } | 1012 } |
1024 | 1013 |
1025 } // namespace | 1014 } // namespace |
1026 } // namespace favicon | 1015 } // namespace favicon |
OLD | NEW |