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

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: addresses comments and sync 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
« no previous file with comments | « chrome/browser/favicon/favicon_handler.cc ('k') | chrome/browser/favicon/favicon_tab_helper.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 29 matching lines...) Expand all
403 415
404 ~FaviconHandlerTest() override {} 416 ~FaviconHandlerTest() override {}
405 417
406 // Simulates requesting a favicon for |page_url| given: 418 // Simulates requesting a favicon for |page_url| given:
407 // - We have not previously cached anything in history for |page_url| or for 419 // - We have not previously cached anything in history for |page_url| or for
408 // any of |candidates|. 420 // any of |candidates|.
409 // - The page provides favicons at |candidate_icons|. 421 // - The page provides favicons at |candidate_icons|.
410 // - The favicons at |candidate_icons| have edge pixel sizes of 422 // - The favicons at |candidate_icons| have edge pixel sizes of
411 // |candidate_icon_sizes|. 423 // |candidate_icon_sizes|.
412 void DownloadTillDoneIgnoringHistory( 424 void DownloadTillDoneIgnoringHistory(
425 TestFaviconDriver* favicon_driver,
413 TestFaviconHandler* favicon_handler, 426 TestFaviconHandler* favicon_handler,
414 const GURL& page_url, 427 const GURL& page_url,
415 const std::vector<FaviconURL>& candidate_icons, 428 const std::vector<FaviconURL>& candidate_icons,
416 const int* candidate_icon_sizes) { 429 const int* candidate_icon_sizes) {
417 UpdateFaviconURL(favicon_handler, page_url, candidate_icons); 430 UpdateFaviconURL(
431 favicon_driver, favicon_handler, page_url, candidate_icons);
418 EXPECT_EQ(candidate_icons.size(), favicon_handler->image_urls().size()); 432 EXPECT_EQ(candidate_icons.size(), favicon_handler->image_urls().size());
419 433
420 DownloadHandler* download_handler = favicon_handler->download_handler(); 434 DownloadHandler* download_handler = favicon_handler->download_handler();
421 for (size_t i = 0; i < candidate_icons.size(); ++i) { 435 for (size_t i = 0; i < candidate_icons.size(); ++i) {
422 favicon_handler->history_handler()->history_results_.clear(); 436 favicon_handler->history_handler()->history_results_.clear();
423 favicon_handler->history_handler()->InvokeCallback(); 437 favicon_handler->history_handler()->InvokeCallback();
424 ASSERT_TRUE(download_handler->HasDownload()); 438 ASSERT_TRUE(download_handler->HasDownload());
425 EXPECT_EQ(download_handler->GetImageUrl(), 439 EXPECT_EQ(download_handler->GetImageUrl(),
426 candidate_icons[i].icon_url); 440 candidate_icons[i].icon_url);
427 std::vector<int> sizes; 441 std::vector<int> sizes;
428 sizes.push_back(candidate_icon_sizes[i]); 442 sizes.push_back(candidate_icon_sizes[i]);
429 download_handler->SetImageSizes(sizes); 443 download_handler->SetImageSizes(sizes);
430 download_handler->InvokeCallback(); 444 download_handler->InvokeCallback();
431 445
432 if (favicon_handler->num_favicon_update_notifications()) 446 if (favicon_driver->num_favicon_available())
433 return; 447 return;
434 } 448 }
435 } 449 }
436 450
437 void UpdateFaviconURL( 451 void UpdateFaviconURL(TestFaviconDriver* favicon_driver,
438 TestFaviconHandler* favicon_handler, 452 TestFaviconHandler* favicon_handler,
439 const GURL& page_url, 453 const GURL& page_url,
440 const std::vector<FaviconURL>& candidate_icons) { 454 const std::vector<FaviconURL>& candidate_icons) {
441 favicon_handler->ResetNumFaviconUpdateNotifications(); 455 favicon_driver->ResetNumFaviconAvailable();
442 456
443 favicon_handler->FetchFavicon(page_url); 457 favicon_handler->FetchFavicon(page_url);
444 favicon_handler->history_handler()->InvokeCallback(); 458 favicon_handler->history_handler()->InvokeCallback();
445 459
446 favicon_handler->OnUpdateFaviconURL(candidate_icons); 460 favicon_handler->OnUpdateFaviconURL(candidate_icons);
447 } 461 }
448 462
449 void SetUp() override { 463 void SetUp() override {
450 // The score computed by SelectFaviconFrames() is dependent on the supported 464 // The score computed by SelectFaviconFrames() is dependent on the supported
451 // scale factors of the platform. It is used for determining the goodness of 465 // 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
1063 // 1) Test that if there are several single resolution favicons to choose from 1077 // 1) Test that if there are several single resolution favicons to choose from
1064 // that the largest exact match is chosen. 1078 // that the largest exact match is chosen.
1065 TestFaviconDriver driver1; 1079 TestFaviconDriver driver1;
1066 TestFaviconClient client; 1080 TestFaviconClient client;
1067 TestFaviconHandler handler1( 1081 TestFaviconHandler handler1(
1068 kPageURL, &client, &driver1, FaviconHandler::FAVICON, false); 1082 kPageURL, &client, &driver1, FaviconHandler::FAVICON, false);
1069 1083
1070 const int kSizes1[] = { 16, 24, 32, 48, 256 }; 1084 const int kSizes1[] = { 16, 24, 32, 48, 256 };
1071 std::vector<FaviconURL> urls1(kSourceIconURLs, 1085 std::vector<FaviconURL> urls1(kSourceIconURLs,
1072 kSourceIconURLs + arraysize(kSizes1)); 1086 kSourceIconURLs + arraysize(kSizes1));
1073 DownloadTillDoneIgnoringHistory(&handler1, kPageURL, urls1, kSizes1); 1087 DownloadTillDoneIgnoringHistory(
1088 &driver1, &handler1, kPageURL, urls1, kSizes1);
1074 1089
1075 EXPECT_EQ(0u, handler1.image_urls().size()); 1090 EXPECT_EQ(0u, handler1.image_urls().size());
1076 EXPECT_TRUE(driver1.GetActiveFaviconValidity()); 1091 EXPECT_TRUE(driver1.GetActiveFaviconValidity());
1077 EXPECT_FALSE(driver1.GetActiveFaviconImage().IsEmpty()); 1092 EXPECT_FALSE(driver1.GetActiveFaviconImage().IsEmpty());
1078 EXPECT_EQ(gfx::kFaviconSize, driver1.GetActiveFaviconImage().Width()); 1093 EXPECT_EQ(gfx::kFaviconSize, driver1.GetActiveFaviconImage().Width());
1079 1094
1080 size_t expected_index = 2u; 1095 size_t expected_index = 2u;
1081 EXPECT_EQ(32, kSizes1[expected_index]); 1096 EXPECT_EQ(32, kSizes1[expected_index]);
1082 EXPECT_EQ(kSourceIconURLs[expected_index].icon_url, 1097 EXPECT_EQ(kSourceIconURLs[expected_index].icon_url,
1083 driver1.GetActiveFaviconURL()); 1098 driver1.GetActiveFaviconURL());
1084 1099
1085 // 2) Test that if there are several single resolution favicons to choose 1100 // 2) Test that if there are several single resolution favicons to choose
1086 // from, the exact match is preferred even if it results in upsampling. 1101 // from, the exact match is preferred even if it results in upsampling.
1087 TestFaviconDriver driver2; 1102 TestFaviconDriver driver2;
1088 TestFaviconHandler handler2( 1103 TestFaviconHandler handler2(
1089 kPageURL, &client, &driver2, FaviconHandler::FAVICON, false); 1104 kPageURL, &client, &driver2, FaviconHandler::FAVICON, false);
1090 1105
1091 const int kSizes2[] = { 16, 24, 48, 256 }; 1106 const int kSizes2[] = { 16, 24, 48, 256 };
1092 std::vector<FaviconURL> urls2(kSourceIconURLs, 1107 std::vector<FaviconURL> urls2(kSourceIconURLs,
1093 kSourceIconURLs + arraysize(kSizes2)); 1108 kSourceIconURLs + arraysize(kSizes2));
1094 DownloadTillDoneIgnoringHistory(&handler2, kPageURL, urls2, kSizes2); 1109 DownloadTillDoneIgnoringHistory(
1110 &driver2, &handler2, kPageURL, urls2, kSizes2);
1095 EXPECT_TRUE(driver2.GetActiveFaviconValidity()); 1111 EXPECT_TRUE(driver2.GetActiveFaviconValidity());
1096 expected_index = 0u; 1112 expected_index = 0u;
1097 EXPECT_EQ(16, kSizes2[expected_index]); 1113 EXPECT_EQ(16, kSizes2[expected_index]);
1098 EXPECT_EQ(kSourceIconURLs[expected_index].icon_url, 1114 EXPECT_EQ(kSourceIconURLs[expected_index].icon_url,
1099 driver2.GetActiveFaviconURL()); 1115 driver2.GetActiveFaviconURL());
1100 1116
1101 // 3) Test that favicons which need to be upsampled a little or downsampled 1117 // 3) Test that favicons which need to be upsampled a little or downsampled
1102 // a little are preferred over huge favicons. 1118 // a little are preferred over huge favicons.
1103 TestFaviconDriver driver3; 1119 TestFaviconDriver driver3;
1104 TestFaviconHandler handler3( 1120 TestFaviconHandler handler3(
1105 kPageURL, &client, &driver3, FaviconHandler::FAVICON, false); 1121 kPageURL, &client, &driver3, FaviconHandler::FAVICON, false);
1106 1122
1107 const int kSizes3[] = { 256, 48 }; 1123 const int kSizes3[] = { 256, 48 };
1108 std::vector<FaviconURL> urls3(kSourceIconURLs, 1124 std::vector<FaviconURL> urls3(kSourceIconURLs,
1109 kSourceIconURLs + arraysize(kSizes3)); 1125 kSourceIconURLs + arraysize(kSizes3));
1110 DownloadTillDoneIgnoringHistory(&handler3, kPageURL, urls3, kSizes3); 1126 DownloadTillDoneIgnoringHistory(
1127 &driver3, &handler3, kPageURL, urls3, kSizes3);
1111 EXPECT_TRUE(driver3.GetActiveFaviconValidity()); 1128 EXPECT_TRUE(driver3.GetActiveFaviconValidity());
1112 expected_index = 1u; 1129 expected_index = 1u;
1113 EXPECT_EQ(48, kSizes3[expected_index]); 1130 EXPECT_EQ(48, kSizes3[expected_index]);
1114 EXPECT_EQ(kSourceIconURLs[expected_index].icon_url, 1131 EXPECT_EQ(kSourceIconURLs[expected_index].icon_url,
1115 driver3.GetActiveFaviconURL()); 1132 driver3.GetActiveFaviconURL());
1116 1133
1117 TestFaviconDriver driver4; 1134 TestFaviconDriver driver4;
1118 TestFaviconHandler handler4( 1135 TestFaviconHandler handler4(
1119 kPageURL, &client, &driver4, FaviconHandler::FAVICON, false); 1136 kPageURL, &client, &driver4, FaviconHandler::FAVICON, false);
1120 1137
1121 const int kSizes4[] = { 17, 256 }; 1138 const int kSizes4[] = { 17, 256 };
1122 std::vector<FaviconURL> urls4(kSourceIconURLs, 1139 std::vector<FaviconURL> urls4(kSourceIconURLs,
1123 kSourceIconURLs + arraysize(kSizes4)); 1140 kSourceIconURLs + arraysize(kSizes4));
1124 DownloadTillDoneIgnoringHistory(&handler4, kPageURL, urls4, kSizes4); 1141 DownloadTillDoneIgnoringHistory(
1142 &driver4, &handler4, kPageURL, urls4, kSizes4);
1125 EXPECT_TRUE(driver4.GetActiveFaviconValidity()); 1143 EXPECT_TRUE(driver4.GetActiveFaviconValidity());
1126 expected_index = 0u; 1144 expected_index = 0u;
1127 EXPECT_EQ(17, kSizes4[expected_index]); 1145 EXPECT_EQ(17, kSizes4[expected_index]);
1128 EXPECT_EQ(kSourceIconURLs[expected_index].icon_url, 1146 EXPECT_EQ(kSourceIconURLs[expected_index].icon_url,
1129 driver4.GetActiveFaviconURL()); 1147 driver4.GetActiveFaviconURL());
1130 } 1148 }
1131 1149
1132 #endif 1150 #endif
1133 1151
1134 TEST_F(FaviconHandlerTest, TestSortFavicon) { 1152 TEST_F(FaviconHandlerTest, TestSortFavicon) {
(...skipping 20 matching lines...) Expand all
1155 FaviconURL(GURL("http://www.google.com/e"), 1173 FaviconURL(GURL("http://www.google.com/e"),
1156 favicon_base::FAVICON, 1174 favicon_base::FAVICON,
1157 std::vector<gfx::Size>())}; 1175 std::vector<gfx::Size>())};
1158 1176
1159 TestFaviconClient client; 1177 TestFaviconClient client;
1160 TestFaviconDriver driver1; 1178 TestFaviconDriver driver1;
1161 TestFaviconHandler handler1( 1179 TestFaviconHandler handler1(
1162 kPageURL, &client, &driver1, FaviconHandler::FAVICON, true); 1180 kPageURL, &client, &driver1, FaviconHandler::FAVICON, true);
1163 std::vector<FaviconURL> urls1(kSourceIconURLs, 1181 std::vector<FaviconURL> urls1(kSourceIconURLs,
1164 kSourceIconURLs + arraysize(kSourceIconURLs)); 1182 kSourceIconURLs + arraysize(kSourceIconURLs));
1165 UpdateFaviconURL(&handler1, kPageURL, urls1); 1183 UpdateFaviconURL(&driver1, &handler1, kPageURL, urls1);
1166 1184
1167 struct ExpectedResult { 1185 struct ExpectedResult {
1168 // The favicon's index in kSourceIconURLs. 1186 // The favicon's index in kSourceIconURLs.
1169 size_t favicon_index; 1187 size_t favicon_index;
1170 // Width of largest bitmap. 1188 // Width of largest bitmap.
1171 int width; 1189 int width;
1172 } results[] = { 1190 } results[] = {
1173 // First is icon1, though its size larger than maximal. 1191 // First is icon1, though its size larger than maximal.
1174 {0, 1024}, 1192 {0, 1024},
1175 // Second is icon2 1193 // Second is icon2
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1219 FaviconURL(GURL("http://www.google.com/e"), 1237 FaviconURL(GURL("http://www.google.com/e"),
1220 favicon_base::FAVICON, 1238 favicon_base::FAVICON,
1221 std::vector<gfx::Size>())}; 1239 std::vector<gfx::Size>())};
1222 1240
1223 TestFaviconClient client; 1241 TestFaviconClient client;
1224 TestFaviconDriver driver1; 1242 TestFaviconDriver driver1;
1225 TestFaviconHandler handler1( 1243 TestFaviconHandler handler1(
1226 kPageURL, &client, &driver1, FaviconHandler::FAVICON, true); 1244 kPageURL, &client, &driver1, FaviconHandler::FAVICON, true);
1227 std::vector<FaviconURL> urls1(kSourceIconURLs, 1245 std::vector<FaviconURL> urls1(kSourceIconURLs,
1228 kSourceIconURLs + arraysize(kSourceIconURLs)); 1246 kSourceIconURLs + arraysize(kSourceIconURLs));
1229 UpdateFaviconURL(&handler1, kPageURL, urls1); 1247 UpdateFaviconURL(&driver1, &handler1, kPageURL, urls1);
1230 1248
1231 // Simulate the download failed, to check whether the icons were requested 1249 // Simulate the download failed, to check whether the icons were requested
1232 // to download according their size. 1250 // to download according their size.
1233 struct ExpectedResult { 1251 struct ExpectedResult {
1234 // The size of image_urls_. 1252 // The size of image_urls_.
1235 size_t image_urls_size; 1253 size_t image_urls_size;
1236 // The favicon's index in kSourceIconURLs. 1254 // The favicon's index in kSourceIconURLs.
1237 size_t favicon_index; 1255 size_t favicon_index;
1238 // Width of largest bitmap. 1256 // Width of largest bitmap.
1239 int width; 1257 int width;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1285 GURL("http://www.google.com/b"), favicon_base::FAVICON, one_icon), 1303 GURL("http://www.google.com/b"), favicon_base::FAVICON, one_icon),
1286 FaviconURL( 1304 FaviconURL(
1287 GURL("http://www.google.com/c"), favicon_base::FAVICON, two_icons)}; 1305 GURL("http://www.google.com/c"), favicon_base::FAVICON, two_icons)};
1288 1306
1289 TestFaviconClient client; 1307 TestFaviconClient client;
1290 TestFaviconDriver driver1; 1308 TestFaviconDriver driver1;
1291 TestFaviconHandler handler1( 1309 TestFaviconHandler handler1(
1292 kPageURL, &client, &driver1, FaviconHandler::FAVICON, true); 1310 kPageURL, &client, &driver1, FaviconHandler::FAVICON, true);
1293 std::vector<FaviconURL> urls1(kSourceIconURLs, 1311 std::vector<FaviconURL> urls1(kSourceIconURLs,
1294 kSourceIconURLs + arraysize(kSourceIconURLs)); 1312 kSourceIconURLs + arraysize(kSourceIconURLs));
1295 UpdateFaviconURL(&handler1, kPageURL, urls1); 1313 UpdateFaviconURL(&driver1, &handler1, kPageURL, urls1);
1296 1314
1297 ASSERT_EQ(2u, handler1.urls().size()); 1315 ASSERT_EQ(2u, handler1.urls().size());
1298 1316
1299 // Index of largest favicon in kSourceIconURLs. 1317 // Index of largest favicon in kSourceIconURLs.
1300 size_t i = 1; 1318 size_t i = 1;
1301 // The largest bitmap's index in Favicon . 1319 // The largest bitmap's index in Favicon .
1302 int b = 1; 1320 int b = 1;
1303 1321
1304 // Verify the icon_bitmaps_ was initialized correctly. 1322 // Verify the icon_bitmaps_ was initialized correctly.
1305 EXPECT_EQ(kSourceIconURLs[i].icon_url, 1323 EXPECT_EQ(kSourceIconURLs[i].icon_url,
(...skipping 17 matching lines...) Expand all
1323 j != kSourceIconURLs[i].icon_sizes.end(); ++j) 1341 j != kSourceIconURLs[i].icon_sizes.end(); ++j)
1324 sizes.push_back(j->width()); 1342 sizes.push_back(j->width());
1325 1343
1326 handler1.download_handler()->SetImageSizes(sizes); 1344 handler1.download_handler()->SetImageSizes(sizes);
1327 handler1.download_handler()->InvokeCallback(); 1345 handler1.download_handler()->InvokeCallback();
1328 1346
1329 // Verify the largest bitmap has been saved into history. 1347 // Verify the largest bitmap has been saved into history.
1330 EXPECT_EQ(kSourceIconURLs[i].icon_url, handler1.history_handler()->icon_url_); 1348 EXPECT_EQ(kSourceIconURLs[i].icon_url, handler1.history_handler()->icon_url_);
1331 EXPECT_EQ(kSourceIconURLs[i].icon_sizes[b], 1349 EXPECT_EQ(kSourceIconURLs[i].icon_sizes[b],
1332 handler1.history_handler()->size_); 1350 handler1.history_handler()->size_);
1351 // Verify NotifyFaviconAvailable().
1352 EXPECT_FALSE(driver1.update_active_favicon());
1353 EXPECT_EQ(kSourceIconURLs[i].icon_url, driver1.available_icon_url());
1354 EXPECT_EQ(kSourceIconURLs[i].icon_sizes[b],
1355 driver1.available_favicon().Size());
1333 } 1356 }
1334 1357
1335 TEST_F(FaviconHandlerTest, TestFaviconWasScaledAfterDownload) { 1358 TEST_F(FaviconHandlerTest, TestFaviconWasScaledAfterDownload) {
1336 const GURL kPageURL("http://www.google.com"); 1359 const GURL kPageURL("http://www.google.com");
1337 const int kMaximalSize = 1360 const int kMaximalSize =
1338 TestFaviconHandler::GetMaximalIconSize(favicon_base::FAVICON); 1361 TestFaviconHandler::GetMaximalIconSize(favicon_base::FAVICON);
1339 1362
1340 std::vector<gfx::Size> icon1; 1363 std::vector<gfx::Size> icon1;
1341 icon1.push_back(gfx::Size(kMaximalSize + 1, kMaximalSize + 1)); 1364 icon1.push_back(gfx::Size(kMaximalSize + 1, kMaximalSize + 1));
1342 1365
1343 std::vector<gfx::Size> icon2; 1366 std::vector<gfx::Size> icon2;
1344 icon2.push_back(gfx::Size(kMaximalSize + 2, kMaximalSize + 2)); 1367 icon2.push_back(gfx::Size(kMaximalSize + 2, kMaximalSize + 2));
1345 1368
1346 const FaviconURL kSourceIconURLs[] = { 1369 const FaviconURL kSourceIconURLs[] = {
1347 FaviconURL( 1370 FaviconURL(
1348 GURL("http://www.google.com/b"), favicon_base::FAVICON, icon1), 1371 GURL("http://www.google.com/b"), favicon_base::FAVICON, icon1),
1349 FaviconURL( 1372 FaviconURL(
1350 GURL("http://www.google.com/c"), favicon_base::FAVICON, icon2)}; 1373 GURL("http://www.google.com/c"), favicon_base::FAVICON, icon2)};
1351 1374
1352 TestFaviconClient client; 1375 TestFaviconClient client;
1353 TestFaviconDriver driver1; 1376 TestFaviconDriver driver1;
1354 TestFaviconHandler handler1( 1377 TestFaviconHandler handler1(
1355 kPageURL, &client, &driver1, FaviconHandler::FAVICON, true); 1378 kPageURL, &client, &driver1, FaviconHandler::FAVICON, true);
1356 std::vector<FaviconURL> urls1(kSourceIconURLs, 1379 std::vector<FaviconURL> urls1(kSourceIconURLs,
1357 kSourceIconURLs + arraysize(kSourceIconURLs)); 1380 kSourceIconURLs + arraysize(kSourceIconURLs));
1358 UpdateFaviconURL(&handler1, kPageURL, urls1); 1381 UpdateFaviconURL(&driver1, &handler1, kPageURL, urls1);
1359 1382
1360 ASSERT_EQ(2u, handler1.urls().size()); 1383 ASSERT_EQ(2u, handler1.urls().size());
1361 1384
1362 // Index of largest favicon in kSourceIconURLs. 1385 // Index of largest favicon in kSourceIconURLs.
1363 size_t i = 1; 1386 size_t i = 1;
1364 // The largest bitmap's index in Favicon . 1387 // The largest bitmap's index in Favicon .
1365 int b = 0; 1388 int b = 0;
1366 1389
1367 // Verify the icon_bitmaps_ was initialized correctly. 1390 // Verify the icon_bitmaps_ was initialized correctly.
1368 EXPECT_EQ(kSourceIconURLs[i].icon_url, 1391 EXPECT_EQ(kSourceIconURLs[i].icon_url,
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1410 FaviconURL(GURL("http://www.google.com/d"), 1433 FaviconURL(GURL("http://www.google.com/d"),
1411 favicon_base::FAVICON, 1434 favicon_base::FAVICON,
1412 std::vector<gfx::Size>())}; 1435 std::vector<gfx::Size>())};
1413 1436
1414 TestFaviconClient client; 1437 TestFaviconClient client;
1415 TestFaviconDriver driver1; 1438 TestFaviconDriver driver1;
1416 TestFaviconHandler handler1( 1439 TestFaviconHandler handler1(
1417 kPageURL, &client, &driver1, FaviconHandler::FAVICON, true); 1440 kPageURL, &client, &driver1, FaviconHandler::FAVICON, true);
1418 std::vector<FaviconURL> urls1(kSourceIconURLs, 1441 std::vector<FaviconURL> urls1(kSourceIconURLs,
1419 kSourceIconURLs + arraysize(kSourceIconURLs)); 1442 kSourceIconURLs + arraysize(kSourceIconURLs));
1420 UpdateFaviconURL(&handler1, kPageURL, urls1); 1443 UpdateFaviconURL(&driver1, &handler1, kPageURL, urls1);
1421 ASSERT_EQ(3u, handler1.urls().size()); 1444 ASSERT_EQ(3u, handler1.urls().size());
1422 1445
1423 // Simulate no favicon from history. 1446 // Simulate no favicon from history.
1424 handler1.history_handler()->history_results_.clear(); 1447 handler1.history_handler()->history_results_.clear();
1425 handler1.history_handler()->InvokeCallback(); 1448 handler1.history_handler()->InvokeCallback();
1426 1449
1427 // Verify the first icon was request to download 1450 // Verify the first icon was request to download
1428 ASSERT_TRUE(handler1.download_handler()->HasDownload()); 1451 ASSERT_TRUE(handler1.download_handler()->HasDownload());
1429 EXPECT_EQ(kSourceIconURLs[0].icon_url, 1452 EXPECT_EQ(kSourceIconURLs[0].icon_url,
1430 handler1.download_handler()->GetImageUrl()); 1453 handler1.download_handler()->GetImageUrl());
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
1541 download_id = favicon_tab_helper->StartDownload(missing_icon_url, 0); 1564 download_id = favicon_tab_helper->StartDownload(missing_icon_url, 0);
1542 EXPECT_NE(0, download_id); 1565 EXPECT_NE(0, download_id);
1543 // Report download success with HTTP 200 status. 1566 // Report download success with HTTP 200 status.
1544 favicon_tab_helper->DidDownloadFavicon(download_id, 200, missing_icon_url, 1567 favicon_tab_helper->DidDownloadFavicon(download_id, 200, missing_icon_url,
1545 empty_icons, empty_icon_sizes); 1568 empty_icons, empty_icon_sizes);
1546 // Icon is not marked as UnableToDownload as HTTP status is not 404. 1569 // Icon is not marked as UnableToDownload as HTTP status is not 404.
1547 EXPECT_FALSE(favicon_service->WasUnableToDownloadFavicon(missing_icon_url)); 1570 EXPECT_FALSE(favicon_service->WasUnableToDownloadFavicon(missing_icon_url));
1548 } 1571 }
1549 1572
1550 } // namespace. 1573 } // namespace.
OLDNEW
« no previous file with comments | « chrome/browser/favicon/favicon_handler.cc ('k') | chrome/browser/favicon/favicon_tab_helper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698