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 24 matching lines...) Expand all Loading... |
35 using favicon_base::TOUCH_ICON; | 35 using favicon_base::TOUCH_ICON; |
36 using favicon_base::TOUCH_PRECOMPOSED_ICON; | 36 using favicon_base::TOUCH_PRECOMPOSED_ICON; |
37 using testing::Assign; | 37 using testing::Assign; |
38 using testing::ElementsAre; | 38 using testing::ElementsAre; |
39 using testing::InSequence; | 39 using testing::InSequence; |
40 using testing::Invoke; | 40 using testing::Invoke; |
41 using testing::IsEmpty; | 41 using testing::IsEmpty; |
42 using testing::Return; | 42 using testing::Return; |
43 using testing::_; | 43 using testing::_; |
44 | 44 |
| 45 using DownloadOutcome = FaviconHandler::DownloadOutcome; |
45 using IntVector = std::vector<int>; | 46 using IntVector = std::vector<int>; |
46 using URLVector = std::vector<GURL>; | 47 using URLVector = std::vector<GURL>; |
47 using BitmapVector = std::vector<SkBitmap>; | 48 using BitmapVector = std::vector<SkBitmap>; |
48 using SizeVector = std::vector<gfx::Size>; | 49 using SizeVector = std::vector<gfx::Size>; |
49 | 50 |
50 MATCHER_P2(ImageSizeIs, width, height, "") { | 51 MATCHER_P2(ImageSizeIs, width, height, "") { |
51 *result_listener << "where size is " << arg.Width() << "x" << arg.Height(); | 52 *result_listener << "where size is " << arg.Width() << "x" << arg.Height(); |
52 return arg.Size() == gfx::Size(width, height); | 53 return arg.Size() == gfx::Size(width, height); |
53 } | 54 } |
54 | 55 |
(...skipping 980 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1035 EXPECT_THAT( | 1036 EXPECT_THAT( |
1036 histogram_tester.GetAllSamples("Favicons.FaviconDownloadAttempts"), | 1037 histogram_tester.GetAllSamples("Favicons.FaviconDownloadAttempts"), |
1037 IsEmpty()); | 1038 IsEmpty()); |
1038 } | 1039 } |
1039 | 1040 |
1040 TEST_F(FaviconHandlerTest, TestRecordSingleFaviconDownloadAttempt) { | 1041 TEST_F(FaviconHandlerTest, TestRecordSingleFaviconDownloadAttempt) { |
1041 base::HistogramTester histogram_tester; | 1042 base::HistogramTester histogram_tester; |
1042 | 1043 |
1043 RunHandlerWithCandidates( | 1044 RunHandlerWithCandidates( |
1044 FaviconDriverObserver::NON_TOUCH_16_DIP, | 1045 FaviconDriverObserver::NON_TOUCH_16_DIP, |
1045 {FaviconURL(GURL("http://www.google.com/a"), FAVICON, | 1046 {FaviconURL(GURL(kIconURL64x64), FAVICON, |
1046 {gfx::Size(1024, 1024), gfx::Size(512, 512)})}); | 1047 {gfx::Size(1024, 1024), gfx::Size(512, 512)})}); |
1047 | 1048 |
1048 EXPECT_THAT( | 1049 EXPECT_THAT( |
1049 histogram_tester.GetAllSamples("Favicons.FaviconDownloadAttempts"), | 1050 histogram_tester.GetAllSamples("Favicons.FaviconDownloadAttempts"), |
1050 ElementsAre(base::Bucket(/*sample=*/1, /*expected_count=*/1))); | 1051 ElementsAre(base::Bucket(/*sample=*/1, /*expected_count=*/1))); |
1051 EXPECT_THAT( | 1052 EXPECT_THAT( |
1052 histogram_tester.GetAllSamples("Favicons.LargeIconDownloadAttempts"), | 1053 histogram_tester.GetAllSamples("Favicons.LargeIconDownloadAttempts"), |
1053 IsEmpty()); | 1054 IsEmpty()); |
| 1055 EXPECT_THAT(histogram_tester.GetAllSamples("Favicons.DownloadOutcome"), |
| 1056 ElementsAre(base::Bucket(DownloadOutcome::SUCCEEDED, |
| 1057 /*expected_count=*/1))); |
1054 } | 1058 } |
1055 | 1059 |
1056 TEST_F(FaviconHandlerTest, TestRecordSingleLargeIconDownloadAttempts) { | 1060 TEST_F(FaviconHandlerTest, TestRecordSingleLargeIconDownloadAttempts) { |
1057 base::HistogramTester histogram_tester; | 1061 base::HistogramTester histogram_tester; |
1058 | 1062 |
1059 RunHandlerWithCandidates( | 1063 RunHandlerWithCandidates( |
1060 FaviconDriverObserver::NON_TOUCH_LARGEST, | 1064 FaviconDriverObserver::NON_TOUCH_LARGEST, |
1061 {FaviconURL(GURL("http://www.google.com/a"), FAVICON, kEmptySizes)}); | 1065 {FaviconURL(GURL(kIconURL16x16), FAVICON, kEmptySizes)}); |
1062 | 1066 |
1063 EXPECT_THAT( | 1067 EXPECT_THAT( |
1064 histogram_tester.GetAllSamples("Favicons.LargeIconDownloadAttempts"), | 1068 histogram_tester.GetAllSamples("Favicons.LargeIconDownloadAttempts"), |
1065 ElementsAre(base::Bucket(/*sample=*/1, /*expected_count=*/1))); | 1069 ElementsAre(base::Bucket(/*sample=*/1, /*expected_count=*/1))); |
1066 | 1070 |
1067 // TOUCH_LARGEST fills the same bucket as NON_TOUCH_LARGEST. | 1071 // TOUCH_LARGEST fills the same bucket as NON_TOUCH_LARGEST. |
1068 RunHandlerWithCandidates( | 1072 RunHandlerWithCandidates( |
1069 FaviconDriverObserver::TOUCH_LARGEST, | 1073 FaviconDriverObserver::TOUCH_LARGEST, |
1070 {FaviconURL(GURL("http://www.google.com/b"), TOUCH_ICON, kEmptySizes)}); | 1074 {FaviconURL(GURL(kIconURL64x64), TOUCH_ICON, kEmptySizes)}); |
1071 | 1075 |
1072 EXPECT_THAT( | 1076 EXPECT_THAT( |
1073 histogram_tester.GetAllSamples("Favicons.LargeIconDownloadAttempts"), | 1077 histogram_tester.GetAllSamples("Favicons.LargeIconDownloadAttempts"), |
1074 ElementsAre(base::Bucket(/*sample=*/1, /*expected_count=*/2))); | 1078 ElementsAre(base::Bucket(/*sample=*/1, /*expected_count=*/2))); |
1075 EXPECT_THAT( | 1079 EXPECT_THAT( |
1076 histogram_tester.GetAllSamples("Favicons.FaviconDownloadAttempts"), | 1080 histogram_tester.GetAllSamples("Favicons.FaviconDownloadAttempts"), |
1077 IsEmpty()); | 1081 IsEmpty()); |
| 1082 EXPECT_THAT(histogram_tester.GetAllSamples("Favicons.DownloadOutcome"), |
| 1083 ElementsAre(base::Bucket(DownloadOutcome::SUCCEEDED, |
| 1084 /*expected_count=*/2))); |
1078 } | 1085 } |
1079 | 1086 |
1080 TEST_F(FaviconHandlerTest, TestRecordDownloadAttemptsFinishedByCache) { | 1087 TEST_F(FaviconHandlerTest, TestRecordDownloadAttemptsFinishedByCache) { |
1081 // Names represent the bitmap sizes per icon. | 1088 // Names represent the bitmap sizes per icon. |
1082 const GURL kIconURL1024_512("http://www.google.com/a"); | 1089 const GURL kIconURL1024_512("http://www.google.com/a"); |
1083 const GURL kIconURL15_14("http://www.google.com/b"); | 1090 const GURL kIconURL15_14("http://www.google.com/b"); |
1084 const GURL kIconURL16_512("http://www.google.com/c"); | 1091 const GURL kIconURL16_512("http://www.google.com/c"); |
1085 base::HistogramTester histogram_tester; | 1092 base::HistogramTester histogram_tester; |
1086 favicon_service_.fake()->Store( | 1093 favicon_service_.fake()->Store( |
1087 GURL("http://so.de"), kIconURL16_512, | 1094 GURL("http://so.de"), kIconURL16_512, |
(...skipping 15 matching lines...) Expand all Loading... |
1103 EXPECT_THAT(delegate_.downloads(), ElementsAre(kIconURL1024_512)); | 1110 EXPECT_THAT(delegate_.downloads(), ElementsAre(kIconURL1024_512)); |
1104 | 1111 |
1105 EXPECT_THAT( | 1112 EXPECT_THAT( |
1106 histogram_tester.GetAllSamples("Favicons.LargeIconDownloadAttempts"), | 1113 histogram_tester.GetAllSamples("Favicons.LargeIconDownloadAttempts"), |
1107 ElementsAre(base::Bucket(/*sample=*/1, /*expected_count=*/1))); | 1114 ElementsAre(base::Bucket(/*sample=*/1, /*expected_count=*/1))); |
1108 EXPECT_THAT( | 1115 EXPECT_THAT( |
1109 histogram_tester.GetAllSamples("Favicons.FaviconDownloadAttempts"), | 1116 histogram_tester.GetAllSamples("Favicons.FaviconDownloadAttempts"), |
1110 IsEmpty()); | 1117 IsEmpty()); |
1111 } | 1118 } |
1112 | 1119 |
| 1120 TEST_F(FaviconHandlerTest, TestRecordSkippedDownloadAttemptAfterFailure) { |
| 1121 base::HistogramTester histogram_tester; |
| 1122 const GURL k404IconURL("http://www.google.com/404.png"); |
| 1123 |
| 1124 delegate_.fake_downloader().AddError(k404IconURL, 404); |
| 1125 |
| 1126 // When calling an URL for the first time, it should log the failure. |
| 1127 EXPECT_CALL(favicon_service_, UnableToDownloadFavicon(k404IconURL)); |
| 1128 |
| 1129 RunHandlerWithCandidates( |
| 1130 FaviconDriverObserver::NON_TOUCH_LARGEST, |
| 1131 {FaviconURL(GURL(k404IconURL), FAVICON, kEmptySizes)}); |
| 1132 |
| 1133 EXPECT_THAT( |
| 1134 histogram_tester.GetAllSamples("Favicons.DownloadOutcome"), |
| 1135 ElementsAre(base::Bucket(DownloadOutcome::FAILED, /*expected_count=*/1))); |
| 1136 |
| 1137 // Now, the URL is known to be failing and should be skipped. |
| 1138 |
| 1139 ON_CALL(favicon_service_, WasUnableToDownloadFavicon(k404IconURL)) |
| 1140 .WillByDefault(Return(true)); |
| 1141 |
| 1142 RunHandlerWithCandidates( |
| 1143 FaviconDriverObserver::NON_TOUCH_LARGEST, |
| 1144 {FaviconURL(GURL(k404IconURL), FAVICON, kEmptySizes)}); |
| 1145 |
| 1146 EXPECT_THAT( |
| 1147 histogram_tester.GetAllSamples("Favicons.DownloadOutcome"), |
| 1148 ElementsAre( |
| 1149 base::Bucket(DownloadOutcome::FAILED, /*expected_count=*/1), |
| 1150 base::Bucket(DownloadOutcome::SKIPPED, /*expected_count=*/1))); |
| 1151 } |
| 1152 |
1113 } // namespace | 1153 } // namespace |
1114 } // namespace favicon | 1154 } // namespace favicon |
OLD | NEW |