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

Side by Side Diff: chrome/browser/favicon/favicon_handler_unittest.cc

Issue 684983003: Add Observer in FaviconTabHelper (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month 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 "chrome/browser/favicon/favicon_handler.h" 5 #include "chrome/browser/favicon/favicon_handler.h"
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "chrome/browser/favicon/chrome_favicon_client.h" 8 #include "chrome/browser/favicon/chrome_favicon_client.h"
9 #include "chrome/browser/favicon/chrome_favicon_client_factory.h" 9 #include "chrome/browser/favicon/chrome_favicon_client_factory.h"
10 #include "chrome/browser/favicon/favicon_service.h" 10 #include "chrome/browser/favicon/favicon_service.h"
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 FaviconService* GetFaviconService() override { 182 FaviconService* GetFaviconService() override {
183 // Just give none NULL value, so overridden methods can be hit. 183 // Just give none NULL value, so overridden methods can be hit.
184 return (FaviconService*)(1); 184 return (FaviconService*)(1);
185 } 185 }
186 186
187 bool IsBookmarked(const GURL& url) override { return false; } 187 bool IsBookmarked(const GURL& url) override { return false; }
188 }; 188 };
189 189
190 class TestFaviconDriver : public FaviconDriver { 190 class TestFaviconDriver : public FaviconDriver {
191 public: 191 public:
192 TestFaviconDriver() : favicon_validity_(false) {} 192 TestFaviconDriver()
193 : favicon_validity_(false),
194 num_favicon_available_(0),
195 update_active_favicon_(false) {}
193 196
194 virtual ~TestFaviconDriver() { 197 virtual ~TestFaviconDriver() {
195 } 198 }
196 199
197 bool IsOffTheRecord() override { return false; } 200 bool IsOffTheRecord() override { return false; }
198 201
199 const gfx::Image GetActiveFaviconImage() override { return image_; } 202 const gfx::Image GetActiveFaviconImage() override { return image_; }
200 203
201 const GURL GetActiveFaviconURL() override { return favicon_url_; } 204 const GURL GetActiveFaviconURL() override { return favicon_url_; }
202 205
203 bool GetActiveFaviconValidity() override { return favicon_validity_; } 206 bool GetActiveFaviconValidity() override { return favicon_validity_; }
204 207
205 const GURL GetActiveURL() override { return url_; } 208 const GURL GetActiveURL() override { return url_; }
206 209
207 void SetActiveFaviconImage(gfx::Image image) override { image_ = image; } 210 void SetActiveFaviconImage(gfx::Image image) { image_ = image; }
208 211
209 void SetActiveFaviconURL(GURL favicon_url) override { 212 void SetActiveFaviconURL(GURL favicon_url) { favicon_url_ = favicon_url; }
210 favicon_url_ = favicon_url;
211 }
212 213
213 void SetActiveFaviconValidity(bool favicon_validity) override { 214 void SetActiveFaviconValidity(bool favicon_validity) {
214 favicon_validity_ = favicon_validity; 215 favicon_validity_ = favicon_validity;
215 } 216 }
216 217
217 int StartDownload(const GURL& url, int max_bitmap_size) override { 218 int StartDownload(const GURL& url, int max_bitmap_size) override {
218 ADD_FAILURE() << "TestFaviconDriver::StartDownload() " 219 ADD_FAILURE() << "TestFaviconDriver::StartDownload() "
219 << "should never be called in tests."; 220 << "should never be called in tests.";
220 return -1; 221 return -1;
221 } 222 }
222 223
223 void NotifyFaviconUpdated(bool icon_url_changed) override { 224 void OnFaviconAvailable(const gfx::Image& image,
224 ADD_FAILURE() << "TestFaviconDriver::NotifyFaviconUpdated() " 225 const GURL& icon_url,
225 << "should never be called in tests."; 226 bool update_active_favicon) override {
227 available_image_ = image;
228 available_icon_url_ = icon_url;
229 update_active_favicon_ = update_active_favicon;
230 if (!update_active_favicon)
231 return;
232
233 ++num_favicon_available_;
234 SetActiveFaviconURL(icon_url);
235 SetActiveFaviconValidity(true);
236 SetActiveFaviconImage(image);
226 } 237 }
227 238
239 size_t num_favicon_available() const { return num_favicon_available_; }
240
241 void ResetNumFaviconAvailable() { num_favicon_available_ = 0; }
242
228 void SetActiveURL(GURL url) { url_ = url; } 243 void SetActiveURL(GURL url) { url_ = url; }
229 244
245 const gfx::Image available_favicon() { return available_image_; }
246
247 const GURL available_icon_url() { return available_icon_url_; }
248
249 bool update_active_favicon() { return update_active_favicon_; }
250
230 private: 251 private:
231 GURL favicon_url_; 252 GURL favicon_url_;
232 GURL url_; 253 GURL url_;
233 gfx::Image image_; 254 gfx::Image image_;
234 bool favicon_validity_; 255 bool favicon_validity_;
256
257 // The number of times that NotifyFaviconAvailable() has been called.
258 size_t num_favicon_available_;
259 gfx::Image available_image_;
260 GURL available_icon_url_;
261 bool update_active_favicon_;
262
235 DISALLOW_COPY_AND_ASSIGN(TestFaviconDriver); 263 DISALLOW_COPY_AND_ASSIGN(TestFaviconDriver);
236 }; 264 };
237 265
238 // This class is used to catch the FaviconHandler's download and history 266 // This class is used to catch the FaviconHandler's download and history
239 // request, and also provide the methods to access the FaviconHandler 267 // request, and also provide the methods to access the FaviconHandler
240 // internals. 268 // internals.
241 class TestFaviconHandler : public FaviconHandler { 269 class TestFaviconHandler : public FaviconHandler {
242 public: 270 public:
243 static int GetMaximalIconSize(favicon_base::IconType icon_type) { 271 static int GetMaximalIconSize(favicon_base::IconType icon_type) {
244 return FaviconHandler::GetMaximalIconSize(icon_type); 272 return FaviconHandler::GetMaximalIconSize(icon_type);
245 } 273 }
246 274
247 TestFaviconHandler(const GURL& page_url, 275 TestFaviconHandler(const GURL& page_url,
248 FaviconClient* client, 276 FaviconClient* client,
249 TestFaviconDriver* driver, 277 TestFaviconDriver* driver,
250 Type type, 278 Type type,
251 bool download_largest_icon) 279 bool download_largest_icon)
252 : FaviconHandler(client, driver, type, download_largest_icon), 280 : FaviconHandler(client, driver, type, download_largest_icon),
253 download_id_(0), 281 download_id_(0) {
254 num_favicon_updates_(0) {
255 driver->SetActiveURL(page_url); 282 driver->SetActiveURL(page_url);
256 download_handler_.reset(new DownloadHandler(this)); 283 download_handler_.reset(new DownloadHandler(this));
257 } 284 }
258 285
259 ~TestFaviconHandler() override {} 286 ~TestFaviconHandler() override {}
260 287
261 HistoryRequestHandler* history_handler() { 288 HistoryRequestHandler* history_handler() {
262 return history_handler_.get(); 289 return history_handler_.get();
263 } 290 }
264 291
265 // This method will take the ownership of the given handler. 292 // This method will take the ownership of the given handler.
266 void set_history_handler(HistoryRequestHandler* handler) { 293 void set_history_handler(HistoryRequestHandler* handler) {
267 history_handler_.reset(handler); 294 history_handler_.reset(handler);
268 } 295 }
269 296
270 DownloadHandler* download_handler() { 297 DownloadHandler* download_handler() {
271 return download_handler_.get(); 298 return download_handler_.get();
272 } 299 }
273 300
274 size_t num_favicon_update_notifications() const {
275 return num_favicon_updates_;
276 }
277
278 void ResetNumFaviconUpdateNotifications() {
279 num_favicon_updates_ = 0;
280 }
281
282 // Methods to access favicon internals. 301 // Methods to access favicon internals.
283 const std::vector<FaviconURL>& urls() { 302 const std::vector<FaviconURL>& urls() {
284 return image_urls_; 303 return image_urls_;
285 } 304 }
286 305
287 FaviconURL* current_candidate() { 306 FaviconURL* current_candidate() {
288 return FaviconHandler::current_candidate(); 307 return FaviconHandler::current_candidate();
289 } 308 }
290 309
291 const FaviconCandidate& best_favicon_candidate() { 310 const FaviconCandidate& best_favicon_candidate() {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 const gfx::Image& image) override { 355 const gfx::Image& image) override {
337 scoped_refptr<base::RefCountedMemory> bytes = image.As1xPNGBytes(); 356 scoped_refptr<base::RefCountedMemory> bytes = image.As1xPNGBytes();
338 std::vector<unsigned char> bitmap_data(bytes->front(), 357 std::vector<unsigned char> bitmap_data(bytes->front(),
339 bytes->front() + bytes->size()); 358 bytes->front() + bytes->size());
340 history_handler_.reset(new HistoryRequestHandler( 359 history_handler_.reset(new HistoryRequestHandler(
341 page_url, icon_url, icon_type, bitmap_data, image.Size())); 360 page_url, icon_url, icon_type, bitmap_data, image.Size()));
342 } 361 }
343 362
344 bool ShouldSaveFavicon(const GURL& url) override { return true; } 363 bool ShouldSaveFavicon(const GURL& url) override { return true; }
345 364
346 void NotifyFaviconUpdated(bool icon_url_changed) override {
347 ++num_favicon_updates_;
348 }
349
350 GURL page_url_; 365 GURL page_url_;
351 366
352 private: 367 private:
353 368
354 // The unique id of a download request. It will be returned to a 369 // The unique id of a download request. It will be returned to a
355 // FaviconHandler. 370 // FaviconHandler.
356 int download_id_; 371 int download_id_;
357 372
358 scoped_ptr<DownloadHandler> download_handler_; 373 scoped_ptr<DownloadHandler> download_handler_;
359 scoped_ptr<HistoryRequestHandler> history_handler_; 374 scoped_ptr<HistoryRequestHandler> history_handler_;
360 375
361 // The number of times that NotifyFaviconUpdated() has been called.
362 size_t num_favicon_updates_;
363
364 DISALLOW_COPY_AND_ASSIGN(TestFaviconHandler); 376 DISALLOW_COPY_AND_ASSIGN(TestFaviconHandler);
365 }; 377 };
366 378
367 namespace { 379 namespace {
368 380
369 void HistoryRequestHandler::InvokeCallback() { 381 void HistoryRequestHandler::InvokeCallback() {
370 if (!callback_.is_null()) { 382 if (!callback_.is_null()) {
371 callback_.Run(history_results_); 383 callback_.Run(history_results_);
372 } 384 }
373 } 385 }
(...skipping 30 matching lines...) Expand all
404 virtual ~FaviconHandlerTest() { 416 virtual ~FaviconHandlerTest() {
405 } 417 }
406 418
407 // Simulates requesting a favicon for |page_url| given: 419 // Simulates requesting a favicon for |page_url| given:
408 // - We have not previously cached anything in history for |page_url| or for 420 // - We have not previously cached anything in history for |page_url| or for
409 // any of |candidates|. 421 // any of |candidates|.
410 // - The page provides favicons at |candidate_icons|. 422 // - The page provides favicons at |candidate_icons|.
411 // - The favicons at |candidate_icons| have edge pixel sizes of 423 // - The favicons at |candidate_icons| have edge pixel sizes of
412 // |candidate_icon_sizes|. 424 // |candidate_icon_sizes|.
413 void DownloadTillDoneIgnoringHistory( 425 void DownloadTillDoneIgnoringHistory(
426 TestFaviconDriver* favicon_driver,
414 TestFaviconHandler* favicon_handler, 427 TestFaviconHandler* favicon_handler,
415 const GURL& page_url, 428 const GURL& page_url,
416 const std::vector<FaviconURL>& candidate_icons, 429 const std::vector<FaviconURL>& candidate_icons,
417 const int* candidate_icon_sizes) { 430 const int* candidate_icon_sizes) {
418 UpdateFaviconURL(favicon_handler, page_url, candidate_icons); 431 UpdateFaviconURL(
432 favicon_driver, favicon_handler, page_url, candidate_icons);
419 EXPECT_EQ(candidate_icons.size(), favicon_handler->image_urls().size()); 433 EXPECT_EQ(candidate_icons.size(), favicon_handler->image_urls().size());
420 434
421 DownloadHandler* download_handler = favicon_handler->download_handler(); 435 DownloadHandler* download_handler = favicon_handler->download_handler();
422 for (size_t i = 0; i < candidate_icons.size(); ++i) { 436 for (size_t i = 0; i < candidate_icons.size(); ++i) {
423 favicon_handler->history_handler()->history_results_.clear(); 437 favicon_handler->history_handler()->history_results_.clear();
424 favicon_handler->history_handler()->InvokeCallback(); 438 favicon_handler->history_handler()->InvokeCallback();
425 ASSERT_TRUE(download_handler->HasDownload()); 439 ASSERT_TRUE(download_handler->HasDownload());
426 EXPECT_EQ(download_handler->GetImageUrl(), 440 EXPECT_EQ(download_handler->GetImageUrl(),
427 candidate_icons[i].icon_url); 441 candidate_icons[i].icon_url);
428 std::vector<int> sizes; 442 std::vector<int> sizes;
429 sizes.push_back(candidate_icon_sizes[i]); 443 sizes.push_back(candidate_icon_sizes[i]);
430 download_handler->SetImageSizes(sizes); 444 download_handler->SetImageSizes(sizes);
431 download_handler->InvokeCallback(); 445 download_handler->InvokeCallback();
432 446
433 if (favicon_handler->num_favicon_update_notifications()) 447 if (favicon_driver->num_favicon_available())
434 return; 448 return;
435 } 449 }
436 } 450 }
437 451
438 void UpdateFaviconURL( 452 void UpdateFaviconURL(TestFaviconDriver* favicon_driver,
439 TestFaviconHandler* favicon_handler, 453 TestFaviconHandler* favicon_handler,
440 const GURL& page_url, 454 const GURL& page_url,
441 const std::vector<FaviconURL>& candidate_icons) { 455 const std::vector<FaviconURL>& candidate_icons) {
442 favicon_handler->ResetNumFaviconUpdateNotifications(); 456 favicon_driver->ResetNumFaviconAvailable();
443 457
444 favicon_handler->FetchFavicon(page_url); 458 favicon_handler->FetchFavicon(page_url);
445 favicon_handler->history_handler()->InvokeCallback(); 459 favicon_handler->history_handler()->InvokeCallback();
446 460
447 favicon_handler->OnUpdateFaviconURL(candidate_icons); 461 favicon_handler->OnUpdateFaviconURL(candidate_icons);
448 } 462 }
449 463
450 virtual void SetUp() { 464 virtual void SetUp() {
451 // The score computed by SelectFaviconFrames() is dependent on the supported 465 // The score computed by SelectFaviconFrames() is dependent on the supported
452 // scale factors of the platform. It is used for determining the goodness of 466 // scale factors of the platform. It is used for determining the goodness of
(...skipping 611 matching lines...) Expand 10 before | Expand all | Expand 10 after
1064 // 1) Test that if there are several single resolution favicons to choose from 1078 // 1) Test that if there are several single resolution favicons to choose from
1065 // that the largest exact match is chosen. 1079 // that the largest exact match is chosen.
1066 TestFaviconDriver driver1; 1080 TestFaviconDriver driver1;
1067 TestFaviconClient client; 1081 TestFaviconClient client;
1068 TestFaviconHandler handler1( 1082 TestFaviconHandler handler1(
1069 kPageURL, &client, &driver1, FaviconHandler::FAVICON, false); 1083 kPageURL, &client, &driver1, FaviconHandler::FAVICON, false);
1070 1084
1071 const int kSizes1[] = { 16, 24, 32, 48, 256 }; 1085 const int kSizes1[] = { 16, 24, 32, 48, 256 };
1072 std::vector<FaviconURL> urls1(kSourceIconURLs, 1086 std::vector<FaviconURL> urls1(kSourceIconURLs,
1073 kSourceIconURLs + arraysize(kSizes1)); 1087 kSourceIconURLs + arraysize(kSizes1));
1074 DownloadTillDoneIgnoringHistory(&handler1, kPageURL, urls1, kSizes1); 1088 DownloadTillDoneIgnoringHistory(
1089 &driver1, &handler1, kPageURL, urls1, kSizes1);
1075 1090
1076 EXPECT_EQ(0u, handler1.image_urls().size()); 1091 EXPECT_EQ(0u, handler1.image_urls().size());
1077 EXPECT_TRUE(driver1.GetActiveFaviconValidity()); 1092 EXPECT_TRUE(driver1.GetActiveFaviconValidity());
1078 EXPECT_FALSE(driver1.GetActiveFaviconImage().IsEmpty()); 1093 EXPECT_FALSE(driver1.GetActiveFaviconImage().IsEmpty());
1079 EXPECT_EQ(gfx::kFaviconSize, driver1.GetActiveFaviconImage().Width()); 1094 EXPECT_EQ(gfx::kFaviconSize, driver1.GetActiveFaviconImage().Width());
1080 1095
1081 size_t expected_index = 2u; 1096 size_t expected_index = 2u;
1082 EXPECT_EQ(32, kSizes1[expected_index]); 1097 EXPECT_EQ(32, kSizes1[expected_index]);
1083 EXPECT_EQ(kSourceIconURLs[expected_index].icon_url, 1098 EXPECT_EQ(kSourceIconURLs[expected_index].icon_url,
1084 driver1.GetActiveFaviconURL()); 1099 driver1.GetActiveFaviconURL());
1085 1100
1086 // 2) Test that if there are several single resolution favicons to choose 1101 // 2) Test that if there are several single resolution favicons to choose
1087 // from, the exact match is preferred even if it results in upsampling. 1102 // from, the exact match is preferred even if it results in upsampling.
1088 TestFaviconDriver driver2; 1103 TestFaviconDriver driver2;
1089 TestFaviconHandler handler2( 1104 TestFaviconHandler handler2(
1090 kPageURL, &client, &driver2, FaviconHandler::FAVICON, false); 1105 kPageURL, &client, &driver2, FaviconHandler::FAVICON, false);
1091 1106
1092 const int kSizes2[] = { 16, 24, 48, 256 }; 1107 const int kSizes2[] = { 16, 24, 48, 256 };
1093 std::vector<FaviconURL> urls2(kSourceIconURLs, 1108 std::vector<FaviconURL> urls2(kSourceIconURLs,
1094 kSourceIconURLs + arraysize(kSizes2)); 1109 kSourceIconURLs + arraysize(kSizes2));
1095 DownloadTillDoneIgnoringHistory(&handler2, kPageURL, urls2, kSizes2); 1110 DownloadTillDoneIgnoringHistory(
1111 &driver2, &handler2, kPageURL, urls2, kSizes2);
1096 EXPECT_TRUE(driver2.GetActiveFaviconValidity()); 1112 EXPECT_TRUE(driver2.GetActiveFaviconValidity());
1097 expected_index = 0u; 1113 expected_index = 0u;
1098 EXPECT_EQ(16, kSizes2[expected_index]); 1114 EXPECT_EQ(16, kSizes2[expected_index]);
1099 EXPECT_EQ(kSourceIconURLs[expected_index].icon_url, 1115 EXPECT_EQ(kSourceIconURLs[expected_index].icon_url,
1100 driver2.GetActiveFaviconURL()); 1116 driver2.GetActiveFaviconURL());
1101 1117
1102 // 3) Test that favicons which need to be upsampled a little or downsampled 1118 // 3) Test that favicons which need to be upsampled a little or downsampled
1103 // a little are preferred over huge favicons. 1119 // a little are preferred over huge favicons.
1104 TestFaviconDriver driver3; 1120 TestFaviconDriver driver3;
1105 TestFaviconHandler handler3( 1121 TestFaviconHandler handler3(
1106 kPageURL, &client, &driver3, FaviconHandler::FAVICON, false); 1122 kPageURL, &client, &driver3, FaviconHandler::FAVICON, false);
1107 1123
1108 const int kSizes3[] = { 256, 48 }; 1124 const int kSizes3[] = { 256, 48 };
1109 std::vector<FaviconURL> urls3(kSourceIconURLs, 1125 std::vector<FaviconURL> urls3(kSourceIconURLs,
1110 kSourceIconURLs + arraysize(kSizes3)); 1126 kSourceIconURLs + arraysize(kSizes3));
1111 DownloadTillDoneIgnoringHistory(&handler3, kPageURL, urls3, kSizes3); 1127 DownloadTillDoneIgnoringHistory(
1128 &driver3, &handler3, kPageURL, urls3, kSizes3);
1112 EXPECT_TRUE(driver3.GetActiveFaviconValidity()); 1129 EXPECT_TRUE(driver3.GetActiveFaviconValidity());
1113 expected_index = 1u; 1130 expected_index = 1u;
1114 EXPECT_EQ(48, kSizes3[expected_index]); 1131 EXPECT_EQ(48, kSizes3[expected_index]);
1115 EXPECT_EQ(kSourceIconURLs[expected_index].icon_url, 1132 EXPECT_EQ(kSourceIconURLs[expected_index].icon_url,
1116 driver3.GetActiveFaviconURL()); 1133 driver3.GetActiveFaviconURL());
1117 1134
1118 TestFaviconDriver driver4; 1135 TestFaviconDriver driver4;
1119 TestFaviconHandler handler4( 1136 TestFaviconHandler handler4(
1120 kPageURL, &client, &driver4, FaviconHandler::FAVICON, false); 1137 kPageURL, &client, &driver4, FaviconHandler::FAVICON, false);
1121 1138
1122 const int kSizes4[] = { 17, 256 }; 1139 const int kSizes4[] = { 17, 256 };
1123 std::vector<FaviconURL> urls4(kSourceIconURLs, 1140 std::vector<FaviconURL> urls4(kSourceIconURLs,
1124 kSourceIconURLs + arraysize(kSizes4)); 1141 kSourceIconURLs + arraysize(kSizes4));
1125 DownloadTillDoneIgnoringHistory(&handler4, kPageURL, urls4, kSizes4); 1142 DownloadTillDoneIgnoringHistory(
1143 &driver4, &handler4, kPageURL, urls4, kSizes4);
1126 EXPECT_TRUE(driver4.GetActiveFaviconValidity()); 1144 EXPECT_TRUE(driver4.GetActiveFaviconValidity());
1127 expected_index = 0u; 1145 expected_index = 0u;
1128 EXPECT_EQ(17, kSizes4[expected_index]); 1146 EXPECT_EQ(17, kSizes4[expected_index]);
1129 EXPECT_EQ(kSourceIconURLs[expected_index].icon_url, 1147 EXPECT_EQ(kSourceIconURLs[expected_index].icon_url,
1130 driver4.GetActiveFaviconURL()); 1148 driver4.GetActiveFaviconURL());
1131 } 1149 }
1132 1150
1133 #endif 1151 #endif
1134 1152
1135 TEST_F(FaviconHandlerTest, TestSortFavicon) { 1153 TEST_F(FaviconHandlerTest, TestSortFavicon) {
(...skipping 20 matching lines...) Expand all
1156 FaviconURL(GURL("http://www.google.com/e"), 1174 FaviconURL(GURL("http://www.google.com/e"),
1157 favicon_base::FAVICON, 1175 favicon_base::FAVICON,
1158 std::vector<gfx::Size>())}; 1176 std::vector<gfx::Size>())};
1159 1177
1160 TestFaviconClient client; 1178 TestFaviconClient client;
1161 TestFaviconDriver driver1; 1179 TestFaviconDriver driver1;
1162 TestFaviconHandler handler1( 1180 TestFaviconHandler handler1(
1163 kPageURL, &client, &driver1, FaviconHandler::FAVICON, true); 1181 kPageURL, &client, &driver1, FaviconHandler::FAVICON, true);
1164 std::vector<FaviconURL> urls1(kSourceIconURLs, 1182 std::vector<FaviconURL> urls1(kSourceIconURLs,
1165 kSourceIconURLs + arraysize(kSourceIconURLs)); 1183 kSourceIconURLs + arraysize(kSourceIconURLs));
1166 UpdateFaviconURL(&handler1, kPageURL, urls1); 1184 UpdateFaviconURL(&driver1, &handler1, kPageURL, urls1);
1167 1185
1168 struct ExpectedResult { 1186 struct ExpectedResult {
1169 // The favicon's index in kSourceIconURLs. 1187 // The favicon's index in kSourceIconURLs.
1170 size_t favicon_index; 1188 size_t favicon_index;
1171 // Width of largest bitmap. 1189 // Width of largest bitmap.
1172 int width; 1190 int width;
1173 } results[] = { 1191 } results[] = {
1174 // First is icon1, though its size larger than maximal. 1192 // First is icon1, though its size larger than maximal.
1175 {0, 1024}, 1193 {0, 1024},
1176 // Second is icon2 1194 // Second is icon2
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1220 FaviconURL(GURL("http://www.google.com/e"), 1238 FaviconURL(GURL("http://www.google.com/e"),
1221 favicon_base::FAVICON, 1239 favicon_base::FAVICON,
1222 std::vector<gfx::Size>())}; 1240 std::vector<gfx::Size>())};
1223 1241
1224 TestFaviconClient client; 1242 TestFaviconClient client;
1225 TestFaviconDriver driver1; 1243 TestFaviconDriver driver1;
1226 TestFaviconHandler handler1( 1244 TestFaviconHandler handler1(
1227 kPageURL, &client, &driver1, FaviconHandler::FAVICON, true); 1245 kPageURL, &client, &driver1, FaviconHandler::FAVICON, true);
1228 std::vector<FaviconURL> urls1(kSourceIconURLs, 1246 std::vector<FaviconURL> urls1(kSourceIconURLs,
1229 kSourceIconURLs + arraysize(kSourceIconURLs)); 1247 kSourceIconURLs + arraysize(kSourceIconURLs));
1230 UpdateFaviconURL(&handler1, kPageURL, urls1); 1248 UpdateFaviconURL(&driver1, &handler1, kPageURL, urls1);
1231 1249
1232 // Simulate the download failed, to check whether the icons were requested 1250 // Simulate the download failed, to check whether the icons were requested
1233 // to download according their size. 1251 // to download according their size.
1234 struct ExpectedResult { 1252 struct ExpectedResult {
1235 // The size of image_urls_. 1253 // The size of image_urls_.
1236 size_t image_urls_size; 1254 size_t image_urls_size;
1237 // The favicon's index in kSourceIconURLs. 1255 // The favicon's index in kSourceIconURLs.
1238 size_t favicon_index; 1256 size_t favicon_index;
1239 // Width of largest bitmap. 1257 // Width of largest bitmap.
1240 int width; 1258 int width;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1286 GURL("http://www.google.com/b"), favicon_base::FAVICON, one_icon), 1304 GURL("http://www.google.com/b"), favicon_base::FAVICON, one_icon),
1287 FaviconURL( 1305 FaviconURL(
1288 GURL("http://www.google.com/c"), favicon_base::FAVICON, two_icons)}; 1306 GURL("http://www.google.com/c"), favicon_base::FAVICON, two_icons)};
1289 1307
1290 TestFaviconClient client; 1308 TestFaviconClient client;
1291 TestFaviconDriver driver1; 1309 TestFaviconDriver driver1;
1292 TestFaviconHandler handler1( 1310 TestFaviconHandler handler1(
1293 kPageURL, &client, &driver1, FaviconHandler::FAVICON, true); 1311 kPageURL, &client, &driver1, FaviconHandler::FAVICON, true);
1294 std::vector<FaviconURL> urls1(kSourceIconURLs, 1312 std::vector<FaviconURL> urls1(kSourceIconURLs,
1295 kSourceIconURLs + arraysize(kSourceIconURLs)); 1313 kSourceIconURLs + arraysize(kSourceIconURLs));
1296 UpdateFaviconURL(&handler1, kPageURL, urls1); 1314 UpdateFaviconURL(&driver1, &handler1, kPageURL, urls1);
1297 1315
1298 ASSERT_EQ(2u, handler1.urls().size()); 1316 ASSERT_EQ(2u, handler1.urls().size());
1299 1317
1300 // Index of largest favicon in kSourceIconURLs. 1318 // Index of largest favicon in kSourceIconURLs.
1301 size_t i = 1; 1319 size_t i = 1;
1302 // The largest bitmap's index in Favicon . 1320 // The largest bitmap's index in Favicon .
1303 int b = 1; 1321 int b = 1;
1304 1322
1305 // Verify the icon_bitmaps_ was initialized correctly. 1323 // Verify the icon_bitmaps_ was initialized correctly.
1306 EXPECT_EQ(kSourceIconURLs[i].icon_url, 1324 EXPECT_EQ(kSourceIconURLs[i].icon_url,
(...skipping 17 matching lines...) Expand all
1324 j != kSourceIconURLs[i].icon_sizes.end(); ++j) 1342 j != kSourceIconURLs[i].icon_sizes.end(); ++j)
1325 sizes.push_back(j->width()); 1343 sizes.push_back(j->width());
1326 1344
1327 handler1.download_handler()->SetImageSizes(sizes); 1345 handler1.download_handler()->SetImageSizes(sizes);
1328 handler1.download_handler()->InvokeCallback(); 1346 handler1.download_handler()->InvokeCallback();
1329 1347
1330 // Verify the largest bitmap has been saved into history. 1348 // Verify the largest bitmap has been saved into history.
1331 EXPECT_EQ(kSourceIconURLs[i].icon_url, handler1.history_handler()->icon_url_); 1349 EXPECT_EQ(kSourceIconURLs[i].icon_url, handler1.history_handler()->icon_url_);
1332 EXPECT_EQ(kSourceIconURLs[i].icon_sizes[b], 1350 EXPECT_EQ(kSourceIconURLs[i].icon_sizes[b],
1333 handler1.history_handler()->size_); 1351 handler1.history_handler()->size_);
1352 // Verify NotifyFaviconAvailable().
1353 EXPECT_FALSE(driver1.update_active_favicon());
1354 EXPECT_EQ(kSourceIconURLs[i].icon_url, driver1.available_icon_url());
1355 EXPECT_EQ(kSourceIconURLs[i].icon_sizes[b],
1356 driver1.available_favicon().Size());
1334 } 1357 }
1335 1358
1336 TEST_F(FaviconHandlerTest, TestFaviconWasScaledAfterDownload) { 1359 TEST_F(FaviconHandlerTest, TestFaviconWasScaledAfterDownload) {
1337 const GURL kPageURL("http://www.google.com"); 1360 const GURL kPageURL("http://www.google.com");
1338 const int kMaximalSize = 1361 const int kMaximalSize =
1339 TestFaviconHandler::GetMaximalIconSize(favicon_base::FAVICON); 1362 TestFaviconHandler::GetMaximalIconSize(favicon_base::FAVICON);
1340 1363
1341 std::vector<gfx::Size> icon1; 1364 std::vector<gfx::Size> icon1;
1342 icon1.push_back(gfx::Size(kMaximalSize + 1, kMaximalSize + 1)); 1365 icon1.push_back(gfx::Size(kMaximalSize + 1, kMaximalSize + 1));
1343 1366
1344 std::vector<gfx::Size> icon2; 1367 std::vector<gfx::Size> icon2;
1345 icon2.push_back(gfx::Size(kMaximalSize + 2, kMaximalSize + 2)); 1368 icon2.push_back(gfx::Size(kMaximalSize + 2, kMaximalSize + 2));
1346 1369
1347 const FaviconURL kSourceIconURLs[] = { 1370 const FaviconURL kSourceIconURLs[] = {
1348 FaviconURL( 1371 FaviconURL(
1349 GURL("http://www.google.com/b"), favicon_base::FAVICON, icon1), 1372 GURL("http://www.google.com/b"), favicon_base::FAVICON, icon1),
1350 FaviconURL( 1373 FaviconURL(
1351 GURL("http://www.google.com/c"), favicon_base::FAVICON, icon2)}; 1374 GURL("http://www.google.com/c"), favicon_base::FAVICON, icon2)};
1352 1375
1353 TestFaviconClient client; 1376 TestFaviconClient client;
1354 TestFaviconDriver driver1; 1377 TestFaviconDriver driver1;
1355 TestFaviconHandler handler1( 1378 TestFaviconHandler handler1(
1356 kPageURL, &client, &driver1, FaviconHandler::FAVICON, true); 1379 kPageURL, &client, &driver1, FaviconHandler::FAVICON, true);
1357 std::vector<FaviconURL> urls1(kSourceIconURLs, 1380 std::vector<FaviconURL> urls1(kSourceIconURLs,
1358 kSourceIconURLs + arraysize(kSourceIconURLs)); 1381 kSourceIconURLs + arraysize(kSourceIconURLs));
1359 UpdateFaviconURL(&handler1, kPageURL, urls1); 1382 UpdateFaviconURL(&driver1, &handler1, kPageURL, urls1);
1360 1383
1361 ASSERT_EQ(2u, handler1.urls().size()); 1384 ASSERT_EQ(2u, handler1.urls().size());
1362 1385
1363 // Index of largest favicon in kSourceIconURLs. 1386 // Index of largest favicon in kSourceIconURLs.
1364 size_t i = 1; 1387 size_t i = 1;
1365 // The largest bitmap's index in Favicon . 1388 // The largest bitmap's index in Favicon .
1366 int b = 0; 1389 int b = 0;
1367 1390
1368 // Verify the icon_bitmaps_ was initialized correctly. 1391 // Verify the icon_bitmaps_ was initialized correctly.
1369 EXPECT_EQ(kSourceIconURLs[i].icon_url, 1392 EXPECT_EQ(kSourceIconURLs[i].icon_url,
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1411 FaviconURL(GURL("http://www.google.com/d"), 1434 FaviconURL(GURL("http://www.google.com/d"),
1412 favicon_base::FAVICON, 1435 favicon_base::FAVICON,
1413 std::vector<gfx::Size>())}; 1436 std::vector<gfx::Size>())};
1414 1437
1415 TestFaviconClient client; 1438 TestFaviconClient client;
1416 TestFaviconDriver driver1; 1439 TestFaviconDriver driver1;
1417 TestFaviconHandler handler1( 1440 TestFaviconHandler handler1(
1418 kPageURL, &client, &driver1, FaviconHandler::FAVICON, true); 1441 kPageURL, &client, &driver1, FaviconHandler::FAVICON, true);
1419 std::vector<FaviconURL> urls1(kSourceIconURLs, 1442 std::vector<FaviconURL> urls1(kSourceIconURLs,
1420 kSourceIconURLs + arraysize(kSourceIconURLs)); 1443 kSourceIconURLs + arraysize(kSourceIconURLs));
1421 UpdateFaviconURL(&handler1, kPageURL, urls1); 1444 UpdateFaviconURL(&driver1, &handler1, kPageURL, urls1);
1422 ASSERT_EQ(3u, handler1.urls().size()); 1445 ASSERT_EQ(3u, handler1.urls().size());
1423 1446
1424 // Simulate no favicon from history. 1447 // Simulate no favicon from history.
1425 handler1.history_handler()->history_results_.clear(); 1448 handler1.history_handler()->history_results_.clear();
1426 handler1.history_handler()->InvokeCallback(); 1449 handler1.history_handler()->InvokeCallback();
1427 1450
1428 // Verify the first icon was request to download 1451 // Verify the first icon was request to download
1429 ASSERT_TRUE(handler1.download_handler()->HasDownload()); 1452 ASSERT_TRUE(handler1.download_handler()->HasDownload());
1430 EXPECT_EQ(kSourceIconURLs[0].icon_url, 1453 EXPECT_EQ(kSourceIconURLs[0].icon_url,
1431 handler1.download_handler()->GetImageUrl()); 1454 handler1.download_handler()->GetImageUrl());
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
1542 download_id = favicon_tab_helper->StartDownload(missing_icon_url, 0); 1565 download_id = favicon_tab_helper->StartDownload(missing_icon_url, 0);
1543 EXPECT_NE(0, download_id); 1566 EXPECT_NE(0, download_id);
1544 // Report download success with HTTP 200 status. 1567 // Report download success with HTTP 200 status.
1545 favicon_tab_helper->DidDownloadFavicon(download_id, 200, missing_icon_url, 1568 favicon_tab_helper->DidDownloadFavicon(download_id, 200, missing_icon_url,
1546 empty_icons, empty_icon_sizes); 1569 empty_icons, empty_icon_sizes);
1547 // Icon is not marked as UnableToDownload as HTTP status is not 404. 1570 // Icon is not marked as UnableToDownload as HTTP status is not 404.
1548 EXPECT_FALSE(favicon_service->WasUnableToDownloadFavicon(missing_icon_url)); 1571 EXPECT_FALSE(favicon_service->WasUnableToDownloadFavicon(missing_icon_url));
1549 } 1572 }
1550 1573
1551 } // namespace. 1574 } // namespace.
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698