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

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

Issue 10870022: Change FaviconData to be able to return data for multiple bitmaps for same icon URL (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 3 months 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 | Annotate | Revision Log
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 "base/memory/scoped_ptr.h" 5 #include "base/memory/scoped_ptr.h"
6 #include "chrome/browser/favicon/favicon_handler.h" 6 #include "chrome/browser/favicon/favicon_handler.h"
7 #include "chrome/browser/profiles/profile.h" 7 #include "chrome/browser/profiles/profile.h"
8 #include "chrome/test/base/chrome_render_view_host_test_harness.h" 8 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
9 #include "content/public/browser/invalidate_type.h" 9 #include "content/public/browser/invalidate_type.h"
10 #include "content/public/browser/navigation_entry.h" 10 #include "content/public/browser/navigation_entry.h"
(...skipping 26 matching lines...) Expand all
37 } 37 }
38 } 38 }
39 39
40 // Fill the given data buffer with valid png data. 40 // Fill the given data buffer with valid png data.
41 void FillBitmap(int w, int h, std::vector<unsigned char>* output) { 41 void FillBitmap(int w, int h, std::vector<unsigned char>* output) {
42 SkBitmap bitmap; 42 SkBitmap bitmap;
43 FillDataToBitmap(w, h, &bitmap); 43 FillDataToBitmap(w, h, &bitmap);
44 gfx::PNGCodec::EncodeBGRASkBitmap(bitmap, false, output); 44 gfx::PNGCodec::EncodeBGRASkBitmap(bitmap, false, output);
45 } 45 }
46 46
47 void SetFaviconBitmapResult(
48 const GURL& icon_url,
49 history::IconType icon_type,
50 bool expired,
51 std::vector<history::FaviconBitmapResult>* favicon_bitmap_results) {
52 scoped_refptr<base::RefCountedBytes> data(new base::RefCountedBytes());
53 FillBitmap(gfx::kFaviconSize, gfx::kFaviconSize, &data->data());
54 history::FaviconBitmapResult bitmap_result;
55 bitmap_result.expired = expired;
56 bitmap_result.bitmap_data = data;
57 bitmap_result.pixel_size = gfx::Size();
58 bitmap_result.icon_type = icon_type;
59 bitmap_result.icon_url = icon_url;
60
61 favicon_bitmap_results->push_back(bitmap_result);
62 }
63
64 void SetFaviconBitmapResult(
65 const GURL& icon_url,
66 std::vector<history::FaviconBitmapResult>* favicon_bitmap_results) {
67 SetFaviconBitmapResult(icon_url, history::FAVICON, false /* expired */,
68 favicon_bitmap_results);
69 }
70
47 // This class is used to save the download request for verifying with test case. 71 // This class is used to save the download request for verifying with test case.
48 // It also will be used to invoke the onDidDownload callback. 72 // It also will be used to invoke the onDidDownload callback.
49 class DownloadHandler { 73 class DownloadHandler {
50 public: 74 public:
51 explicit DownloadHandler(TestFaviconHandler* favicon_helper) 75 explicit DownloadHandler(TestFaviconHandler* favicon_helper)
52 : favicon_helper_(favicon_helper), 76 : favicon_helper_(favicon_helper),
53 failed_(false) { 77 failed_(false) {
54 } 78 }
55 79
56 virtual ~DownloadHandler() { 80 virtual ~DownloadHandler() {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 DISALLOW_COPY_AND_ASSIGN(DownloadHandler); 117 DISALLOW_COPY_AND_ASSIGN(DownloadHandler);
94 }; 118 };
95 119
96 // This class is used to save the history request for verifying with test case. 120 // This class is used to save the history request for verifying with test case.
97 // It also will be used to simulate the history response. 121 // It also will be used to simulate the history response.
98 class HistoryRequestHandler { 122 class HistoryRequestHandler {
99 public: 123 public:
100 HistoryRequestHandler(const GURL& page_url, 124 HistoryRequestHandler(const GURL& page_url,
101 const GURL& icon_url, 125 const GURL& icon_url,
102 int icon_type, 126 int icon_type,
103 const FaviconService::FaviconDataCallback& callback) 127 const FaviconService::FaviconResultsCallback& callback)
104 : page_url_(page_url), 128 : page_url_(page_url),
105 icon_url_(icon_url), 129 icon_url_(icon_url),
106 icon_type_(icon_type), 130 icon_type_(icon_type),
107 callback_(callback) { 131 callback_(callback) {
108 } 132 }
109 133
110 HistoryRequestHandler(const GURL& page_url, 134 HistoryRequestHandler(const GURL& page_url,
111 const GURL& icon_url, 135 const GURL& icon_url,
112 int icon_type, 136 int icon_type,
113 const std::vector<unsigned char>& image_data, 137 const std::vector<unsigned char>& bitmap_data,
114 const FaviconService::FaviconDataCallback& callback) 138 const FaviconService::FaviconResultsCallback& callback)
115 : page_url_(page_url), 139 : page_url_(page_url),
116 icon_url_(icon_url), 140 icon_url_(icon_url),
117 icon_type_(icon_type), 141 icon_type_(icon_type),
118 image_data_(image_data), 142 bitmap_data_(bitmap_data),
119 callback_(callback) { 143 callback_(callback) {
120 } 144 }
121 145
122 virtual ~HistoryRequestHandler() {} 146 virtual ~HistoryRequestHandler() {}
123 void InvokeCallback(); 147 void InvokeCallback();
124 148
125 const GURL page_url_; 149 const GURL page_url_;
126 const GURL icon_url_; 150 const GURL icon_url_;
127 const int icon_type_; 151 const int icon_type_;
128 const std::vector<unsigned char> image_data_; 152 const std::vector<unsigned char> bitmap_data_;
129 history::FaviconData favicon_data_; 153 std::vector<history::FaviconBitmapResult> history_results_;
130 FaviconService::FaviconDataCallback callback_; 154 FaviconService::FaviconResultsCallback callback_;
131 155
132 private: 156 private:
133 DISALLOW_COPY_AND_ASSIGN(HistoryRequestHandler); 157 DISALLOW_COPY_AND_ASSIGN(HistoryRequestHandler);
134 }; 158 };
135 159
136 } // namespace 160 } // namespace
137 161
138 162
139 // This class is used as a temporary hack to provide working implementations of 163 // This class is used as a temporary hack to provide working implementations of
140 // the various delegate methods. Most of these methods are actually never 164 // the various delegate methods. Most of these methods are actually never
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 FaviconURL* current_candidate() { 239 FaviconURL* current_candidate() {
216 return FaviconHandler::current_candidate(); 240 return FaviconHandler::current_candidate();
217 } 241 }
218 242
219 protected: 243 protected:
220 virtual void UpdateFaviconMappingAndFetch( 244 virtual void UpdateFaviconMappingAndFetch(
221 const GURL& page_url, 245 const GURL& page_url,
222 const GURL& icon_url, 246 const GURL& icon_url,
223 history::IconType icon_type, 247 history::IconType icon_type,
224 CancelableRequestConsumerBase* consumer, 248 CancelableRequestConsumerBase* consumer,
225 const FaviconService::FaviconDataCallback& callback) OVERRIDE { 249 const FaviconService::FaviconResultsCallback& callback) OVERRIDE {
226 history_handler_.reset(new HistoryRequestHandler(page_url, icon_url, 250 history_handler_.reset(new HistoryRequestHandler(page_url, icon_url,
227 icon_type, callback)); 251 icon_type, callback));
228 } 252 }
229 253
230 virtual void GetFavicon( 254 virtual void GetFavicon(
231 const GURL& icon_url, 255 const GURL& icon_url,
232 history::IconType icon_type, 256 history::IconType icon_type,
233 CancelableRequestConsumerBase* consumer, 257 CancelableRequestConsumerBase* consumer,
234 const FaviconService::FaviconDataCallback& callback) OVERRIDE { 258 const FaviconService::FaviconResultsCallback& callback) OVERRIDE {
235 history_handler_.reset(new HistoryRequestHandler(GURL(), icon_url, 259 history_handler_.reset(new HistoryRequestHandler(GURL(), icon_url,
236 icon_type, callback)); 260 icon_type, callback));
237 } 261 }
238 262
239 virtual void GetFaviconForURL( 263 virtual void GetFaviconForURL(
240 const GURL& page_url, 264 const GURL& page_url,
241 int icon_types, 265 int icon_types,
242 CancelableRequestConsumerBase* consumer, 266 CancelableRequestConsumerBase* consumer,
243 const FaviconService::FaviconDataCallback& callback) OVERRIDE { 267 const FaviconService::FaviconResultsCallback& callback) OVERRIDE {
244 history_handler_.reset(new HistoryRequestHandler(page_url, GURL(), 268 history_handler_.reset(new HistoryRequestHandler(page_url, GURL(),
245 icon_types, callback)); 269 icon_types, callback));
246 } 270 }
247 271
248 virtual int DownloadFavicon(const GURL& image_url, int image_size) OVERRIDE { 272 virtual int DownloadFavicon(const GURL& image_url, int image_size) OVERRIDE {
249 download_id_++; 273 download_id_++;
250 download_handler_->AddDownload(download_id_, image_url, image_size); 274 download_handler_->AddDownload(download_id_, image_url, image_size);
251 return download_id_; 275 return download_id_;
252 } 276 }
253 277
254 virtual void SetHistoryFavicon(const GURL& page_url, 278 virtual void SetHistoryFavicon(const GURL& page_url,
255 const GURL& icon_url, 279 const GURL& icon_url,
256 const std::vector<unsigned char>& image_data, 280 const std::vector<unsigned char>& bitmap_data,
257 history::IconType icon_type) OVERRIDE { 281 history::IconType icon_type) OVERRIDE {
258 history_handler_.reset(new HistoryRequestHandler( 282 history_handler_.reset(new HistoryRequestHandler(
259 page_url, icon_url,icon_type, image_data, 283 page_url, icon_url,icon_type, bitmap_data,
260 FaviconService::FaviconDataCallback())); 284 FaviconService::FaviconResultsCallback()));
261 } 285 }
262 286
263 virtual FaviconService* GetFaviconService() OVERRIDE { 287 virtual FaviconService* GetFaviconService() OVERRIDE {
264 // Just give none NULL value, so overridden methods can be hit. 288 // Just give none NULL value, so overridden methods can be hit.
265 return (FaviconService*)(1); 289 return (FaviconService*)(1);
266 } 290 }
267 291
268 virtual bool ShouldSaveFavicon(const GURL& url) OVERRIDE { 292 virtual bool ShouldSaveFavicon(const GURL& url) OVERRIDE {
269 return true; 293 return true;
270 } 294 }
(...skipping 13 matching lines...) Expand all
284 scoped_ptr<DownloadHandler> download_handler_; 308 scoped_ptr<DownloadHandler> download_handler_;
285 scoped_ptr<HistoryRequestHandler> history_handler_; 309 scoped_ptr<HistoryRequestHandler> history_handler_;
286 310
287 DISALLOW_COPY_AND_ASSIGN(TestFaviconHandler); 311 DISALLOW_COPY_AND_ASSIGN(TestFaviconHandler);
288 }; 312 };
289 313
290 namespace { 314 namespace {
291 315
292 void HistoryRequestHandler::InvokeCallback() { 316 void HistoryRequestHandler::InvokeCallback() {
293 if (!callback_.is_null()) 317 if (!callback_.is_null())
294 callback_.Run(0, favicon_data_); 318 callback_.Run(0, history_results_, history::IconURLSizesMap());
295 } 319 }
296 320
297 void DownloadHandler::InvokeCallback() { 321 void DownloadHandler::InvokeCallback() {
298 SkBitmap bitmap; 322 SkBitmap bitmap;
299 int bitmap_size = (download_->image_size > 0) ? 323 int bitmap_size = (download_->image_size > 0) ?
300 download_->image_size : gfx::kFaviconSize; 324 download_->image_size : gfx::kFaviconSize;
301 FillDataToBitmap(bitmap_size, bitmap_size, &bitmap); 325 FillDataToBitmap(bitmap_size, bitmap_size, &bitmap);
302 gfx::Image image(bitmap); 326 gfx::Image image(bitmap);
303 favicon_helper_->OnDidDownloadFavicon( 327 favicon_helper_->OnDidDownloadFavicon(
304 download_->download_id, download_->image_url, failed_, image, 328 download_->download_id, download_->image_url, failed_, image,
(...skipping 14 matching lines...) Expand all
319 &delegate, FaviconHandler::FAVICON); 343 &delegate, FaviconHandler::FAVICON);
320 344
321 helper.FetchFavicon(page_url); 345 helper.FetchFavicon(page_url);
322 HistoryRequestHandler* history_handler = helper.history_handler(); 346 HistoryRequestHandler* history_handler = helper.history_handler();
323 // Ensure the data given to history is correct. 347 // Ensure the data given to history is correct.
324 ASSERT_TRUE(history_handler); 348 ASSERT_TRUE(history_handler);
325 EXPECT_EQ(page_url, history_handler->page_url_); 349 EXPECT_EQ(page_url, history_handler->page_url_);
326 EXPECT_EQ(GURL(), history_handler->icon_url_); 350 EXPECT_EQ(GURL(), history_handler->icon_url_);
327 EXPECT_EQ(history::FAVICON, history_handler->icon_type_); 351 EXPECT_EQ(history::FAVICON, history_handler->icon_type_);
328 352
329 // Set valid icon data. 353 SetFaviconBitmapResult(icon_url, &history_handler->history_results_);
330 history_handler->favicon_data_.known_icon = true;
331 history_handler->favicon_data_.icon_type = history::FAVICON;
332 history_handler->favicon_data_.expired = false;
333 history_handler->favicon_data_.icon_url = icon_url;
334 scoped_refptr<base::RefCountedBytes> data = new base::RefCountedBytes();
335 FillBitmap(gfx::kFaviconSize, gfx::kFaviconSize, &data->data());
336 history_handler->favicon_data_.image_data = data;
337 354
338 // Send history response. 355 // Send history response.
339 history_handler->InvokeCallback(); 356 history_handler->InvokeCallback();
340 // Verify FaviconHandler status 357 // Verify FaviconHandler status
341 EXPECT_TRUE(helper.GetEntry()->GetFavicon().valid); 358 EXPECT_TRUE(helper.GetEntry()->GetFavicon().valid);
342 EXPECT_EQ(icon_url, helper.GetEntry()->GetFavicon().url); 359 EXPECT_EQ(icon_url, helper.GetEntry()->GetFavicon().url);
343 360
344 // Simulates update favicon url. 361 // Simulates update favicon url.
345 std::vector<FaviconURL> urls; 362 std::vector<FaviconURL> urls;
346 urls.push_back(FaviconURL(icon_url, FaviconURL::FAVICON)); 363 urls.push_back(FaviconURL(icon_url, FaviconURL::FAVICON));
(...skipping 21 matching lines...) Expand all
368 385
369 helper.FetchFavicon(page_url); 386 helper.FetchFavicon(page_url);
370 HistoryRequestHandler* history_handler = helper.history_handler(); 387 HistoryRequestHandler* history_handler = helper.history_handler();
371 // Ensure the data given to history is correct. 388 // Ensure the data given to history is correct.
372 ASSERT_TRUE(history_handler); 389 ASSERT_TRUE(history_handler);
373 EXPECT_EQ(page_url, history_handler->page_url_); 390 EXPECT_EQ(page_url, history_handler->page_url_);
374 EXPECT_EQ(GURL(), history_handler->icon_url_); 391 EXPECT_EQ(GURL(), history_handler->icon_url_);
375 EXPECT_EQ(history::FAVICON, history_handler->icon_type_); 392 EXPECT_EQ(history::FAVICON, history_handler->icon_type_);
376 393
377 // Set icon data expired 394 // Set icon data expired
378 history_handler->favicon_data_.known_icon = true; 395 SetFaviconBitmapResult(icon_url, history::FAVICON, true /* expired */,
379 history_handler->favicon_data_.icon_type = history::FAVICON; 396 &history_handler->history_results_);
380 history_handler->favicon_data_.expired = true;
381 history_handler->favicon_data_.icon_url = icon_url;
382 // Send history response. 397 // Send history response.
383 history_handler->InvokeCallback(); 398 history_handler->InvokeCallback();
384 // Verify FaviconHandler status 399 // Verify FaviconHandler status
385 EXPECT_TRUE(helper.GetEntry()->GetFavicon().valid); 400 EXPECT_TRUE(helper.GetEntry()->GetFavicon().valid);
386 EXPECT_EQ(icon_url, helper.GetEntry()->GetFavicon().url); 401 EXPECT_EQ(icon_url, helper.GetEntry()->GetFavicon().url);
387 402
388 // Simulates update favicon url. 403 // Simulates update favicon url.
389 std::vector<FaviconURL> urls; 404 std::vector<FaviconURL> urls;
390 urls.push_back(FaviconURL(icon_url, FaviconURL::FAVICON)); 405 urls.push_back(FaviconURL(icon_url, FaviconURL::FAVICON));
391 helper.OnUpdateFaviconURL(0, urls); 406 helper.OnUpdateFaviconURL(0, urls);
(...skipping 16 matching lines...) Expand all
408 helper.set_history_handler(NULL); 423 helper.set_history_handler(NULL);
409 424
410 // Smulates download done. 425 // Smulates download done.
411 download_handler->InvokeCallback(); 426 download_handler->InvokeCallback();
412 427
413 // New icon should be saved to history backend and navigation entry. 428 // New icon should be saved to history backend and navigation entry.
414 history_handler = helper.history_handler(); 429 history_handler = helper.history_handler();
415 ASSERT_TRUE(history_handler); 430 ASSERT_TRUE(history_handler);
416 EXPECT_EQ(icon_url, history_handler->icon_url_); 431 EXPECT_EQ(icon_url, history_handler->icon_url_);
417 EXPECT_EQ(FaviconURL::FAVICON, history_handler->icon_type_); 432 EXPECT_EQ(FaviconURL::FAVICON, history_handler->icon_type_);
418 EXPECT_LT(0U, history_handler->image_data_.size()); 433 EXPECT_LT(0U, history_handler->bitmap_data_.size());
419 EXPECT_EQ(page_url, history_handler->page_url_); 434 EXPECT_EQ(page_url, history_handler->page_url_);
420 435
421 // Verify NavigationEntry. 436 // Verify NavigationEntry.
422 EXPECT_EQ(icon_url, helper.GetEntry()->GetFavicon().url); 437 EXPECT_EQ(icon_url, helper.GetEntry()->GetFavicon().url);
423 EXPECT_TRUE(helper.GetEntry()->GetFavicon().valid); 438 EXPECT_TRUE(helper.GetEntry()->GetFavicon().valid);
424 EXPECT_FALSE(helper.GetEntry()->GetFavicon().image.IsEmpty()); 439 EXPECT_FALSE(helper.GetEntry()->GetFavicon().image.IsEmpty());
425 } 440 }
426 441
427 TEST_F(FaviconHandlerTest, UpdateAndDownloadFavicon) { 442 TEST_F(FaviconHandlerTest, UpdateAndDownloadFavicon) {
428 const GURL page_url("http://www.google.com"); 443 const GURL page_url("http://www.google.com");
429 const GURL icon_url("http://www.google.com/favicon"); 444 const GURL icon_url("http://www.google.com/favicon");
430 const GURL new_icon_url("http://www.google.com/new_favicon"); 445 const GURL new_icon_url("http://www.google.com/new_favicon");
431 446
432 TestFaviconHandlerDelegate delegate(contents()); 447 TestFaviconHandlerDelegate delegate(contents());
433 Profile* profile = Profile::FromBrowserContext( 448 Profile* profile = Profile::FromBrowserContext(
434 contents()->GetBrowserContext()); 449 contents()->GetBrowserContext());
435 TestFaviconHandler helper(page_url, profile, 450 TestFaviconHandler helper(page_url, profile,
436 &delegate, FaviconHandler::FAVICON); 451 &delegate, FaviconHandler::FAVICON);
437 452
438 helper.FetchFavicon(page_url); 453 helper.FetchFavicon(page_url);
439 HistoryRequestHandler* history_handler = helper.history_handler(); 454 HistoryRequestHandler* history_handler = helper.history_handler();
440 // Ensure the data given to history is correct. 455 // Ensure the data given to history is correct.
441 ASSERT_TRUE(history_handler); 456 ASSERT_TRUE(history_handler);
442 EXPECT_EQ(page_url, history_handler->page_url_); 457 EXPECT_EQ(page_url, history_handler->page_url_);
443 EXPECT_EQ(GURL(), history_handler->icon_url_); 458 EXPECT_EQ(GURL(), history_handler->icon_url_);
444 EXPECT_EQ(history::FAVICON, history_handler->icon_type_); 459 EXPECT_EQ(history::FAVICON, history_handler->icon_type_);
445 460
446 // Set valid icon data. 461 // Set valid icon data.
447 history_handler->favicon_data_.known_icon = true; 462 SetFaviconBitmapResult(icon_url, &history_handler->history_results_);
448 history_handler->favicon_data_.icon_type = history::FAVICON;
449 history_handler->favicon_data_.expired = false;
450 history_handler->favicon_data_.icon_url = icon_url;
451 scoped_refptr<base::RefCountedBytes> data = new base::RefCountedBytes();
452 FillBitmap(gfx::kFaviconSize, gfx::kFaviconSize, &data->data());
453 history_handler->favicon_data_.image_data = data;
454 463
455 // Send history response. 464 // Send history response.
456 history_handler->InvokeCallback(); 465 history_handler->InvokeCallback();
457 // Verify FaviconHandler status. 466 // Verify FaviconHandler status.
458 EXPECT_TRUE(helper.GetEntry()->GetFavicon().valid); 467 EXPECT_TRUE(helper.GetEntry()->GetFavicon().valid);
459 EXPECT_EQ(icon_url, helper.GetEntry()->GetFavicon().url); 468 EXPECT_EQ(icon_url, helper.GetEntry()->GetFavicon().url);
460 469
461 // Reset the history_handler to verify whether new icon is requested from 470 // Reset the history_handler to verify whether new icon is requested from
462 // history. 471 // history.
463 helper.set_history_handler(NULL); 472 helper.set_history_handler(NULL);
(...skipping 12 matching lines...) Expand all
476 ASSERT_EQ(new_icon_url, helper.GetEntry()->GetFavicon().url); 485 ASSERT_EQ(new_icon_url, helper.GetEntry()->GetFavicon().url);
477 486
478 // Favicon should be requested from history. 487 // Favicon should be requested from history.
479 history_handler = helper.history_handler(); 488 history_handler = helper.history_handler();
480 ASSERT_TRUE(history_handler); 489 ASSERT_TRUE(history_handler);
481 EXPECT_EQ(new_icon_url, history_handler->icon_url_); 490 EXPECT_EQ(new_icon_url, history_handler->icon_url_);
482 EXPECT_EQ(FaviconURL::FAVICON, history_handler->icon_type_); 491 EXPECT_EQ(FaviconURL::FAVICON, history_handler->icon_type_);
483 EXPECT_EQ(page_url, history_handler->page_url_); 492 EXPECT_EQ(page_url, history_handler->page_url_);
484 493
485 // Simulate not find icon. 494 // Simulate not find icon.
486 history_handler->favicon_data_.known_icon = false; 495 history_handler->history_results_.clear();
487 history_handler->InvokeCallback(); 496 history_handler->InvokeCallback();
488 497
489 // Favicon should request to download icon now. 498 // Favicon should request to download icon now.
490 DownloadHandler* download_handler = helper.download_handler(); 499 DownloadHandler* download_handler = helper.download_handler();
491 EXPECT_TRUE(helper.download_handler()->HasDownload()); 500 EXPECT_TRUE(helper.download_handler()->HasDownload());
492 501
493 // Verify the download request. 502 // Verify the download request.
494 EXPECT_EQ(new_icon_url, download_handler->GetImageUrl()); 503 EXPECT_EQ(new_icon_url, download_handler->GetImageUrl());
495 EXPECT_EQ(gfx::kFaviconSize, download_handler->GetImageSize()); 504 EXPECT_EQ(gfx::kFaviconSize, download_handler->GetImageSize());
496 505
497 // Reset the history_handler to verify whether favicon is set. 506 // Reset the history_handler to verify whether favicon is set.
498 helper.set_history_handler(NULL); 507 helper.set_history_handler(NULL);
499 508
500 // Smulates download done. 509 // Smulates download done.
501 download_handler->InvokeCallback(); 510 download_handler->InvokeCallback();
502 511
503 // New icon should be saved to history backend and navigation entry. 512 // New icon should be saved to history backend and navigation entry.
504 history_handler = helper.history_handler(); 513 history_handler = helper.history_handler();
505 ASSERT_TRUE(history_handler); 514 ASSERT_TRUE(history_handler);
506 EXPECT_EQ(new_icon_url, history_handler->icon_url_); 515 EXPECT_EQ(new_icon_url, history_handler->icon_url_);
507 EXPECT_EQ(FaviconURL::FAVICON, history_handler->icon_type_); 516 EXPECT_EQ(FaviconURL::FAVICON, history_handler->icon_type_);
508 EXPECT_LT(0U, history_handler->image_data_.size()); 517 EXPECT_LT(0U, history_handler->bitmap_data_.size());
509 EXPECT_EQ(page_url, history_handler->page_url_); 518 EXPECT_EQ(page_url, history_handler->page_url_);
510 519
511 // Verify NavigationEntry. 520 // Verify NavigationEntry.
512 EXPECT_EQ(new_icon_url, helper.GetEntry()->GetFavicon().url); 521 EXPECT_EQ(new_icon_url, helper.GetEntry()->GetFavicon().url);
513 EXPECT_TRUE(helper.GetEntry()->GetFavicon().valid); 522 EXPECT_TRUE(helper.GetEntry()->GetFavicon().valid);
514 EXPECT_FALSE(helper.GetEntry()->GetFavicon().image.IsEmpty()); 523 EXPECT_FALSE(helper.GetEntry()->GetFavicon().image.IsEmpty());
515 } 524 }
516 525
517 TEST_F(FaviconHandlerTest, UpdateFavicon) { 526 TEST_F(FaviconHandlerTest, UpdateFavicon) {
518 const GURL page_url("http://www.google.com"); 527 const GURL page_url("http://www.google.com");
519 const GURL icon_url("http://www.google.com/favicon"); 528 const GURL icon_url("http://www.google.com/favicon");
520 const GURL new_icon_url("http://www.google.com/new_favicon"); 529 const GURL new_icon_url("http://www.google.com/new_favicon");
521 530
522 TestFaviconHandlerDelegate delegate(contents()); 531 TestFaviconHandlerDelegate delegate(contents());
523 Profile* profile = Profile::FromBrowserContext( 532 Profile* profile = Profile::FromBrowserContext(
524 contents()->GetBrowserContext()); 533 contents()->GetBrowserContext());
525 TestFaviconHandler helper(page_url, profile, 534 TestFaviconHandler helper(page_url, profile,
526 &delegate, FaviconHandler::FAVICON); 535 &delegate, FaviconHandler::FAVICON);
527 536
528 helper.FetchFavicon(page_url); 537 helper.FetchFavicon(page_url);
529 HistoryRequestHandler* history_handler = helper.history_handler(); 538 HistoryRequestHandler* history_handler = helper.history_handler();
530 // Ensure the data given to history is correct. 539 // Ensure the data given to history is correct.
531 ASSERT_TRUE(history_handler); 540 ASSERT_TRUE(history_handler);
532 EXPECT_EQ(page_url, history_handler->page_url_); 541 EXPECT_EQ(page_url, history_handler->page_url_);
533 EXPECT_EQ(GURL(), history_handler->icon_url_); 542 EXPECT_EQ(GURL(), history_handler->icon_url_);
534 EXPECT_EQ(history::FAVICON, history_handler->icon_type_); 543 EXPECT_EQ(history::FAVICON, history_handler->icon_type_);
535 544
536 // Set valid icon data. 545 SetFaviconBitmapResult(icon_url, &history_handler->history_results_);
537 history_handler->favicon_data_.known_icon = true;
538 history_handler->favicon_data_.icon_type = history::FAVICON;
539 history_handler->favicon_data_.expired = false;
540 history_handler->favicon_data_.icon_url = icon_url;
541 scoped_refptr<base::RefCountedBytes> data = new base::RefCountedBytes();
542 FillBitmap(gfx::kFaviconSize, gfx::kFaviconSize, &data->data());
543 history_handler->favicon_data_.image_data = data;
544 546
545 // Send history response. 547 // Send history response.
546 history_handler->InvokeCallback(); 548 history_handler->InvokeCallback();
547 // Verify FaviconHandler status. 549 // Verify FaviconHandler status.
548 EXPECT_TRUE(helper.GetEntry()->GetFavicon().valid); 550 EXPECT_TRUE(helper.GetEntry()->GetFavicon().valid);
549 EXPECT_EQ(icon_url, helper.GetEntry()->GetFavicon().url); 551 EXPECT_EQ(icon_url, helper.GetEntry()->GetFavicon().url);
550 552
551 // Reset the history_handler to verify whether new icon is requested from 553 // Reset the history_handler to verify whether new icon is requested from
552 // history. 554 // history.
553 helper.set_history_handler(NULL); 555 helper.set_history_handler(NULL);
(...skipping 12 matching lines...) Expand all
566 ASSERT_EQ(new_icon_url, helper.GetEntry()->GetFavicon().url); 568 ASSERT_EQ(new_icon_url, helper.GetEntry()->GetFavicon().url);
567 569
568 // Favicon should be requested from history. 570 // Favicon should be requested from history.
569 history_handler = helper.history_handler(); 571 history_handler = helper.history_handler();
570 ASSERT_TRUE(history_handler); 572 ASSERT_TRUE(history_handler);
571 EXPECT_EQ(new_icon_url, history_handler->icon_url_); 573 EXPECT_EQ(new_icon_url, history_handler->icon_url_);
572 EXPECT_EQ(FaviconURL::FAVICON, history_handler->icon_type_); 574 EXPECT_EQ(FaviconURL::FAVICON, history_handler->icon_type_);
573 EXPECT_EQ(page_url, history_handler->page_url_); 575 EXPECT_EQ(page_url, history_handler->page_url_);
574 576
575 // Simulate find icon. 577 // Simulate find icon.
576 history_handler->favicon_data_.known_icon = true; 578 SetFaviconBitmapResult(new_icon_url, &history_handler->history_results_);
577 history_handler->favicon_data_.icon_type = history::FAVICON;
578 history_handler->favicon_data_.expired = false;
579 history_handler->favicon_data_.icon_url = new_icon_url;
580 history_handler->favicon_data_.image_data = data;
581 history_handler->InvokeCallback(); 579 history_handler->InvokeCallback();
582 580
583 // Shouldn't request download favicon 581 // Shouldn't request download favicon
584 EXPECT_FALSE(helper.download_handler()->HasDownload()); 582 EXPECT_FALSE(helper.download_handler()->HasDownload());
585 583
586 // Verify the favicon status. 584 // Verify the favicon status.
587 EXPECT_EQ(new_icon_url, helper.GetEntry()->GetFavicon().url); 585 EXPECT_EQ(new_icon_url, helper.GetEntry()->GetFavicon().url);
588 EXPECT_TRUE(helper.GetEntry()->GetFavicon().valid); 586 EXPECT_TRUE(helper.GetEntry()->GetFavicon().valid);
589 EXPECT_FALSE(helper.GetEntry()->GetFavicon().image.IsEmpty()); 587 EXPECT_FALSE(helper.GetEntry()->GetFavicon().image.IsEmpty());
590 } 588 }
(...skipping 12 matching lines...) Expand all
603 helper.FetchFavicon(page_url); 601 helper.FetchFavicon(page_url);
604 HistoryRequestHandler* history_handler = helper.history_handler(); 602 HistoryRequestHandler* history_handler = helper.history_handler();
605 // Ensure the data given to history is correct. 603 // Ensure the data given to history is correct.
606 ASSERT_TRUE(history_handler); 604 ASSERT_TRUE(history_handler);
607 EXPECT_EQ(page_url, history_handler->page_url_); 605 EXPECT_EQ(page_url, history_handler->page_url_);
608 EXPECT_EQ(GURL(), history_handler->icon_url_); 606 EXPECT_EQ(GURL(), history_handler->icon_url_);
609 EXPECT_EQ(history::TOUCH_PRECOMPOSED_ICON | history::TOUCH_ICON, 607 EXPECT_EQ(history::TOUCH_PRECOMPOSED_ICON | history::TOUCH_ICON,
610 history_handler->icon_type_); 608 history_handler->icon_type_);
611 609
612 // Icon not found. 610 // Icon not found.
613 history_handler->favicon_data_.known_icon = false; 611 history_handler->history_results_.clear();
614 // Send history response. 612 // Send history response.
615 history_handler->InvokeCallback(); 613 history_handler->InvokeCallback();
616 // Verify FaviconHandler status. 614 // Verify FaviconHandler status.
617 EXPECT_FALSE(helper.GetEntry()->GetFavicon().valid); 615 EXPECT_FALSE(helper.GetEntry()->GetFavicon().valid);
618 EXPECT_EQ(GURL(), helper.GetEntry()->GetFavicon().url); 616 EXPECT_EQ(GURL(), helper.GetEntry()->GetFavicon().url);
619 617
620 // Reset the history_handler to verify whether new icon is requested from 618 // Reset the history_handler to verify whether new icon is requested from
621 // history. 619 // history.
622 helper.set_history_handler(NULL); 620 helper.set_history_handler(NULL);
623 621
(...skipping 12 matching lines...) Expand all
636 helper.current_candidate()->icon_type); 634 helper.current_candidate()->icon_type);
637 635
638 // Favicon should be requested from history. 636 // Favicon should be requested from history.
639 history_handler = helper.history_handler(); 637 history_handler = helper.history_handler();
640 ASSERT_TRUE(history_handler); 638 ASSERT_TRUE(history_handler);
641 EXPECT_EQ(icon_url, history_handler->icon_url_); 639 EXPECT_EQ(icon_url, history_handler->icon_url_);
642 EXPECT_EQ(FaviconURL::TOUCH_PRECOMPOSED_ICON, history_handler->icon_type_); 640 EXPECT_EQ(FaviconURL::TOUCH_PRECOMPOSED_ICON, history_handler->icon_type_);
643 EXPECT_EQ(page_url, history_handler->page_url_); 641 EXPECT_EQ(page_url, history_handler->page_url_);
644 642
645 // Simulate not find icon. 643 // Simulate not find icon.
646 history_handler->favicon_data_.known_icon = false; 644 history_handler->history_results_.clear();
647 history_handler->InvokeCallback(); 645 history_handler->InvokeCallback();
648 646
649 // Should request download favicon. 647 // Should request download favicon.
650 DownloadHandler* download_handler = helper.download_handler(); 648 DownloadHandler* download_handler = helper.download_handler();
651 EXPECT_TRUE(helper.download_handler()->HasDownload()); 649 EXPECT_TRUE(helper.download_handler()->HasDownload());
652 650
653 // Verify the download request. 651 // Verify the download request.
654 EXPECT_EQ(icon_url, download_handler->GetImageUrl()); 652 EXPECT_EQ(icon_url, download_handler->GetImageUrl());
655 EXPECT_EQ(0, download_handler->GetImageSize()); 653 EXPECT_EQ(0, download_handler->GetImageSize());
656 654
(...skipping 13 matching lines...) Expand all
670 // Favicon should be requested from history. 668 // Favicon should be requested from history.
671 history_handler = helper.history_handler(); 669 history_handler = helper.history_handler();
672 ASSERT_TRUE(history_handler); 670 ASSERT_TRUE(history_handler);
673 EXPECT_EQ(new_icon_url, history_handler->icon_url_); 671 EXPECT_EQ(new_icon_url, history_handler->icon_url_);
674 EXPECT_EQ(FaviconURL::TOUCH_ICON, history_handler->icon_type_); 672 EXPECT_EQ(FaviconURL::TOUCH_ICON, history_handler->icon_type_);
675 EXPECT_EQ(page_url, history_handler->page_url_); 673 EXPECT_EQ(page_url, history_handler->page_url_);
676 674
677 // Reset download handler 675 // Reset download handler
678 download_handler->Reset(); 676 download_handler->Reset();
679 677
680 // Smulates getting a expired icon from history. 678 // Simulates getting a expired icon from history.
681 history_handler->favicon_data_.known_icon = true; 679 SetFaviconBitmapResult(new_icon_url, history::TOUCH_ICON,
682 history_handler->favicon_data_.icon_type = history::TOUCH_ICON; 680 true /* expired */, &history_handler->history_results_);
683 history_handler->favicon_data_.expired = true;
684 history_handler->favicon_data_.icon_url = new_icon_url;
685 scoped_refptr<base::RefCountedBytes> data = new base::RefCountedBytes();
686 FillBitmap(gfx::kFaviconSize, gfx::kFaviconSize, &data->data());
687 history_handler->favicon_data_.image_data = data;
688 history_handler->InvokeCallback(); 681 history_handler->InvokeCallback();
689 682
690 // Verify the download request. 683 // Verify the download request.
691 EXPECT_TRUE(helper.download_handler()->HasDownload()); 684 EXPECT_TRUE(helper.download_handler()->HasDownload());
692 EXPECT_EQ(new_icon_url, download_handler->GetImageUrl()); 685 EXPECT_EQ(new_icon_url, download_handler->GetImageUrl());
693 EXPECT_EQ(0, download_handler->GetImageSize()); 686 EXPECT_EQ(0, download_handler->GetImageSize());
694 687
695 helper.set_history_handler(NULL); 688 helper.set_history_handler(NULL);
696 689
697 // Simulates icon being downloaded. 690 // Simulates icon being downloaded.
698 download_handler->InvokeCallback(); 691 download_handler->InvokeCallback();
699 692
700 // New icon should be saved to history backend. 693 // New icon should be saved to history backend.
701 history_handler = helper.history_handler(); 694 history_handler = helper.history_handler();
702 ASSERT_TRUE(history_handler); 695 ASSERT_TRUE(history_handler);
703 EXPECT_EQ(new_icon_url, history_handler->icon_url_); 696 EXPECT_EQ(new_icon_url, history_handler->icon_url_);
704 EXPECT_EQ(FaviconURL::TOUCH_ICON, history_handler->icon_type_); 697 EXPECT_EQ(FaviconURL::TOUCH_ICON, history_handler->icon_type_);
705 EXPECT_LT(0U, history_handler->image_data_.size()); 698 EXPECT_LT(0U, history_handler->bitmap_data_.size());
706 EXPECT_EQ(page_url, history_handler->page_url_); 699 EXPECT_EQ(page_url, history_handler->page_url_);
707 } 700 }
708 701
709 TEST_F(FaviconHandlerTest, UpdateDuringDownloading) { 702 TEST_F(FaviconHandlerTest, UpdateDuringDownloading) {
710 const GURL page_url("http://www.google.com"); 703 const GURL page_url("http://www.google.com");
711 const GURL icon_url("http://www.google.com/favicon"); 704 const GURL icon_url("http://www.google.com/favicon");
712 const GURL new_icon_url("http://www.google.com/new_favicon"); 705 const GURL new_icon_url("http://www.google.com/new_favicon");
713 706
714 TestFaviconHandlerDelegate delegate(contents()); 707 TestFaviconHandlerDelegate delegate(contents());
715 Profile* profile = Profile::FromBrowserContext( 708 Profile* profile = Profile::FromBrowserContext(
716 contents()->GetBrowserContext()); 709 contents()->GetBrowserContext());
717 TestFaviconHandler helper(page_url, profile, 710 TestFaviconHandler helper(page_url, profile,
718 &delegate, FaviconHandler::TOUCH); 711 &delegate, FaviconHandler::TOUCH);
719 712
720 helper.FetchFavicon(page_url); 713 helper.FetchFavicon(page_url);
721 HistoryRequestHandler* history_handler = helper.history_handler(); 714 HistoryRequestHandler* history_handler = helper.history_handler();
722 // Ensure the data given to history is correct. 715 // Ensure the data given to history is correct.
723 ASSERT_TRUE(history_handler); 716 ASSERT_TRUE(history_handler);
724 EXPECT_EQ(page_url, history_handler->page_url_); 717 EXPECT_EQ(page_url, history_handler->page_url_);
725 EXPECT_EQ(GURL(), history_handler->icon_url_); 718 EXPECT_EQ(GURL(), history_handler->icon_url_);
726 EXPECT_EQ(history::TOUCH_PRECOMPOSED_ICON | history::TOUCH_ICON, 719 EXPECT_EQ(history::TOUCH_PRECOMPOSED_ICON | history::TOUCH_ICON,
727 history_handler->icon_type_); 720 history_handler->icon_type_);
728 721
729 // Icon not found. 722 // Icon not found.
730 history_handler->favicon_data_.known_icon = false; 723 history_handler->history_results_.clear();
731 // Send history response. 724 // Send history response.
732 history_handler->InvokeCallback(); 725 history_handler->InvokeCallback();
733 // Verify FaviconHandler status. 726 // Verify FaviconHandler status.
734 EXPECT_FALSE(helper.GetEntry()->GetFavicon().valid); 727 EXPECT_FALSE(helper.GetEntry()->GetFavicon().valid);
735 EXPECT_EQ(GURL(), helper.GetEntry()->GetFavicon().url); 728 EXPECT_EQ(GURL(), helper.GetEntry()->GetFavicon().url);
736 729
737 // Reset the history_handler to verify whether new icon is requested from 730 // Reset the history_handler to verify whether new icon is requested from
738 // history. 731 // history.
739 helper.set_history_handler(NULL); 732 helper.set_history_handler(NULL);
740 733
(...skipping 12 matching lines...) Expand all
753 helper.current_candidate()->icon_type); 746 helper.current_candidate()->icon_type);
754 747
755 // Favicon should be requested from history. 748 // Favicon should be requested from history.
756 history_handler = helper.history_handler(); 749 history_handler = helper.history_handler();
757 ASSERT_TRUE(history_handler); 750 ASSERT_TRUE(history_handler);
758 EXPECT_EQ(icon_url, history_handler->icon_url_); 751 EXPECT_EQ(icon_url, history_handler->icon_url_);
759 EXPECT_EQ(FaviconURL::TOUCH_PRECOMPOSED_ICON, history_handler->icon_type_); 752 EXPECT_EQ(FaviconURL::TOUCH_PRECOMPOSED_ICON, history_handler->icon_type_);
760 EXPECT_EQ(page_url, history_handler->page_url_); 753 EXPECT_EQ(page_url, history_handler->page_url_);
761 754
762 // Simulate not find icon. 755 // Simulate not find icon.
763 history_handler->favicon_data_.known_icon = false; 756 history_handler->history_results_.clear();
764 history_handler->InvokeCallback(); 757 history_handler->InvokeCallback();
765 758
766 // Should request download favicon. 759 // Should request download favicon.
767 DownloadHandler* download_handler = helper.download_handler(); 760 DownloadHandler* download_handler = helper.download_handler();
768 EXPECT_TRUE(helper.download_handler()->HasDownload()); 761 EXPECT_TRUE(helper.download_handler()->HasDownload());
769 762
770 // Verify the download request. 763 // Verify the download request.
771 EXPECT_EQ(icon_url, download_handler->GetImageUrl()); 764 EXPECT_EQ(icon_url, download_handler->GetImageUrl());
772 EXPECT_EQ(0, download_handler->GetImageSize()); 765 EXPECT_EQ(0, download_handler->GetImageSize());
773 766
(...skipping 12 matching lines...) Expand all
786 // Whether new icon is requested from history 779 // Whether new icon is requested from history
787 history_handler = helper.history_handler(); 780 history_handler = helper.history_handler();
788 ASSERT_TRUE(history_handler); 781 ASSERT_TRUE(history_handler);
789 EXPECT_EQ(latest_icon_url, history_handler->icon_url_); 782 EXPECT_EQ(latest_icon_url, history_handler->icon_url_);
790 EXPECT_EQ(FaviconURL::TOUCH_ICON, history_handler->icon_type_); 783 EXPECT_EQ(FaviconURL::TOUCH_ICON, history_handler->icon_type_);
791 EXPECT_EQ(page_url, history_handler->page_url_); 784 EXPECT_EQ(page_url, history_handler->page_url_);
792 785
793 // Reset the history_handler to verify whether favicon is request from 786 // Reset the history_handler to verify whether favicon is request from
794 // history. 787 // history.
795 // Save the callback for late use. 788 // Save the callback for late use.
796 FaviconService::FaviconDataCallback callback = history_handler->callback_; 789 FaviconService::FaviconResultsCallback callback = history_handler->callback_;
797 helper.set_history_handler(NULL); 790 helper.set_history_handler(NULL);
798 791
799 // Simulates download succeed. 792 // Simulates download succeed.
800 download_handler->InvokeCallback(); 793 download_handler->InvokeCallback();
801 // The downloaded icon should be thrown away as there is favicon update. 794 // The downloaded icon should be thrown away as there is favicon update.
802 EXPECT_FALSE(helper.history_handler()); 795 EXPECT_FALSE(helper.history_handler());
803 796
804 download_handler->Reset(); 797 download_handler->Reset();
805 798
806 // Simulates getting the icon from history. 799 // Simulates getting the icon from history.
807 scoped_ptr<HistoryRequestHandler> handler; 800 scoped_ptr<HistoryRequestHandler> handler;
808 handler.reset(new HistoryRequestHandler(page_url, latest_icon_url, 801 handler.reset(new HistoryRequestHandler(page_url, latest_icon_url,
809 history::TOUCH_ICON, callback)); 802 history::TOUCH_ICON, callback));
810 handler->favicon_data_.known_icon = true; 803 SetFaviconBitmapResult(latest_icon_url, history::TOUCH_ICON,
811 handler->favicon_data_.expired = false; 804 false /* expired */, &handler->history_results_);
812 handler->favicon_data_.icon_type = history::TOUCH_ICON;
813 handler->favicon_data_.icon_url = latest_icon_url;
814 scoped_refptr<base::RefCountedBytes> data = new base::RefCountedBytes();
815 FillBitmap(gfx::kFaviconSize, gfx::kFaviconSize, &data->data());
816 handler->favicon_data_.image_data = data;
817
818 handler->InvokeCallback(); 805 handler->InvokeCallback();
819 806
820 // No download request. 807 // No download request.
821 EXPECT_FALSE(download_handler->HasDownload()); 808 EXPECT_FALSE(download_handler->HasDownload());
822 } 809 }
823 810
824 TEST_F(FaviconHandlerTest, MultipleFavicon) { 811 TEST_F(FaviconHandlerTest, MultipleFavicon) {
825 const GURL page_url("http://www.google.com"); 812 const GURL page_url("http://www.google.com");
826 const GURL icon_url("http://www.google.com/favicon"); 813 const GURL icon_url("http://www.google.com/favicon");
827 const GURL icon_url_small("http://www.google.com/favicon_small"); 814 const GURL icon_url_small("http://www.google.com/favicon_small");
828 const GURL icon_url_large("http://www.google.com/favicon_large"); 815 const GURL icon_url_large("http://www.google.com/favicon_large");
829 const GURL icon_url_preferred1("http://www.google.com/favicon_preferred1"); 816 const GURL icon_url_preferred1("http://www.google.com/favicon_preferred1");
830 const GURL icon_url_preferred2("http://www.google.com/favicon_preferred2"); 817 const GURL icon_url_preferred2("http://www.google.com/favicon_preferred2");
831 818
832 TestFaviconHandlerDelegate delegate(contents()); 819 TestFaviconHandlerDelegate delegate(contents());
833 Profile* profile = Profile::FromBrowserContext( 820 Profile* profile = Profile::FromBrowserContext(
834 contents()->GetBrowserContext()); 821 contents()->GetBrowserContext());
835 TestFaviconHandler handler(page_url, profile, 822 TestFaviconHandler handler(page_url, profile,
836 &delegate, FaviconHandler::FAVICON); 823 &delegate, FaviconHandler::FAVICON);
837 824
838 handler.FetchFavicon(page_url); 825 handler.FetchFavicon(page_url);
839 HistoryRequestHandler* history_handler = handler.history_handler(); 826 HistoryRequestHandler* history_handler = handler.history_handler();
840 827
841 // Set valid icon data. 828 SetFaviconBitmapResult(icon_url, &history_handler->history_results_);
842 history_handler->favicon_data_.known_icon = true;
843 history_handler->favicon_data_.icon_type = history::FAVICON;
844 history_handler->favicon_data_.expired = false;
845 history_handler->favicon_data_.icon_url = icon_url;
846 scoped_refptr<base::RefCountedBytes> data = new base::RefCountedBytes();
847 FillBitmap(gfx::kFaviconSize, gfx::kFaviconSize, &data->data());
848 history_handler->favicon_data_.image_data = data;
849 829
850 // Send history response. 830 // Send history response.
851 history_handler->InvokeCallback(); 831 history_handler->InvokeCallback();
852 832
853 // Simulates update with the different favicon url. 833 // Simulates update with the different favicon url.
854 std::vector<FaviconURL> urls; 834 std::vector<FaviconURL> urls;
855 // Note: the code will stop making requests when an icon matching the 835 // Note: the code will stop making requests when an icon matching the
856 // preferred size is found, so icon_url_preferred must be last. 836 // preferred size is found, so icon_url_preferred must be last.
857 urls.push_back(FaviconURL(icon_url_small, FaviconURL::FAVICON)); 837 urls.push_back(FaviconURL(icon_url_small, FaviconURL::FAVICON));
858 urls.push_back(FaviconURL(icon_url_large, FaviconURL::FAVICON)); 838 urls.push_back(FaviconURL(icon_url_large, FaviconURL::FAVICON));
859 urls.push_back(FaviconURL(icon_url_preferred1, FaviconURL::FAVICON)); 839 urls.push_back(FaviconURL(icon_url_preferred1, FaviconURL::FAVICON));
860 urls.push_back(FaviconURL(icon_url_preferred2, FaviconURL::FAVICON)); 840 urls.push_back(FaviconURL(icon_url_preferred2, FaviconURL::FAVICON));
861 handler.OnUpdateFaviconURL(0, urls); 841 handler.OnUpdateFaviconURL(0, urls);
862 EXPECT_EQ(4U, handler.image_urls().size()); 842 EXPECT_EQ(4U, handler.image_urls().size());
863 843
864 DownloadHandler* download_handler = handler.download_handler(); 844 DownloadHandler* download_handler = handler.download_handler();
865 845
866 // Download the first icon (set not in history). 846 // Download the first icon (set not in history).
867 handler.history_handler()->favicon_data_.known_icon = false; 847 handler.history_handler()->history_results_.clear();
868 handler.history_handler()->InvokeCallback(); 848 handler.history_handler()->InvokeCallback();
869 ASSERT_TRUE(download_handler->HasDownload()); 849 ASSERT_TRUE(download_handler->HasDownload());
870 EXPECT_EQ(icon_url_small, download_handler->GetImageUrl()); 850 EXPECT_EQ(icon_url_small, download_handler->GetImageUrl());
871 download_handler->SetImageSize(gfx::kFaviconSize / 2); 851 download_handler->SetImageSize(gfx::kFaviconSize / 2);
872 download_handler->InvokeCallback(); 852 download_handler->InvokeCallback();
873 EXPECT_EQ(3U, handler.image_urls().size()); 853 EXPECT_EQ(3U, handler.image_urls().size());
874 854
875 // Download the second icon (set not in history). 855 // Download the second icon (set not in history).
876 handler.history_handler()->favicon_data_.known_icon = false; 856 handler.history_handler()->history_results_.clear();
877 handler.history_handler()->InvokeCallback(); 857 handler.history_handler()->InvokeCallback();
878 ASSERT_TRUE(download_handler->HasDownload()); 858 ASSERT_TRUE(download_handler->HasDownload());
879 EXPECT_EQ(icon_url_large, download_handler->GetImageUrl()); 859 EXPECT_EQ(icon_url_large, download_handler->GetImageUrl());
880 download_handler->SetImageSize(gfx::kFaviconSize * 2); 860 download_handler->SetImageSize(gfx::kFaviconSize * 2);
881 download_handler->InvokeCallback(); 861 download_handler->InvokeCallback();
882 EXPECT_EQ(2U, handler.image_urls().size()); 862 EXPECT_EQ(2U, handler.image_urls().size());
883 863
884 // Download the third icon (set not in history). 864 // Download the third icon (set not in history).
885 handler.history_handler()->favicon_data_.known_icon = false; 865 handler.history_handler()->history_results_.clear();
886 handler.history_handler()->InvokeCallback(); 866 handler.history_handler()->InvokeCallback();
887 ASSERT_TRUE(download_handler->HasDownload()); 867 ASSERT_TRUE(download_handler->HasDownload());
888 EXPECT_EQ(icon_url_preferred1, download_handler->GetImageUrl()); 868 EXPECT_EQ(icon_url_preferred1, download_handler->GetImageUrl());
889 download_handler->SetImageSize(gfx::kFaviconSize); 869 download_handler->SetImageSize(gfx::kFaviconSize);
890 download_handler->InvokeCallback(); 870 download_handler->InvokeCallback();
891 // Verify that this was detected as an exact match and image_urls_ is cleared. 871 // Verify that this was detected as an exact match and image_urls_ is cleared.
892 EXPECT_EQ(0U, handler.image_urls().size()); 872 EXPECT_EQ(0U, handler.image_urls().size());
893 873
894 // Verify correct icon size chosen. 874 // Verify correct icon size chosen.
895 EXPECT_EQ(icon_url_preferred1, handler.GetEntry()->GetFavicon().url); 875 EXPECT_EQ(icon_url_preferred1, handler.GetEntry()->GetFavicon().url);
(...skipping 12 matching lines...) Expand all
908 TestFaviconHandlerDelegate delegate(contents()); 888 TestFaviconHandlerDelegate delegate(contents());
909 Profile* profile = Profile::FromBrowserContext( 889 Profile* profile = Profile::FromBrowserContext(
910 contents()->GetBrowserContext()); 890 contents()->GetBrowserContext());
911 TestFaviconHandler handler(page_url, profile, 891 TestFaviconHandler handler(page_url, profile,
912 &delegate, FaviconHandler::FAVICON); 892 &delegate, FaviconHandler::FAVICON);
913 893
914 handler.FetchFavicon(page_url); 894 handler.FetchFavicon(page_url);
915 HistoryRequestHandler* history_handler = handler.history_handler(); 895 HistoryRequestHandler* history_handler = handler.history_handler();
916 896
917 // Set valid icon data. 897 // Set valid icon data.
918 history_handler->favicon_data_.known_icon = true; 898 SetFaviconBitmapResult(icon_url, &history_handler->history_results_);
919 history_handler->favicon_data_.icon_type = history::FAVICON;
920 history_handler->favicon_data_.expired = false;
921 history_handler->favicon_data_.icon_url = icon_url;
922 scoped_refptr<base::RefCountedBytes> data = new base::RefCountedBytes();
923 FillBitmap(gfx::kFaviconSize, gfx::kFaviconSize, &data->data());
924 history_handler->favicon_data_.image_data = data;
925 899
926 // Send history response. 900 // Send history response.
927 history_handler->InvokeCallback(); 901 history_handler->InvokeCallback();
928 902
929 // Simulates update with the different favicon url. 903 // Simulates update with the different favicon url.
930 std::vector<FaviconURL> urls; 904 std::vector<FaviconURL> urls;
931 // Note: the code will stop making requests when an icon matching the 905 // Note: the code will stop making requests when an icon matching the
932 // preferred size is found, so icon_url_preferred must be last. 906 // preferred size is found, so icon_url_preferred must be last.
933 urls.push_back(FaviconURL(icon_url_preferred1, FaviconURL::FAVICON)); 907 urls.push_back(FaviconURL(icon_url_preferred1, FaviconURL::FAVICON));
934 urls.push_back(FaviconURL(icon_url_large, FaviconURL::FAVICON)); 908 urls.push_back(FaviconURL(icon_url_large, FaviconURL::FAVICON));
935 handler.OnUpdateFaviconURL(0, urls); 909 handler.OnUpdateFaviconURL(0, urls);
936 EXPECT_EQ(2U, handler.image_urls().size()); 910 EXPECT_EQ(2U, handler.image_urls().size());
937 911
938 DownloadHandler* download_handler = handler.download_handler(); 912 DownloadHandler* download_handler = handler.download_handler();
939 913
940 // Download the first icon (set not in history). 914 // Download the first icon (set not in history).
941 handler.history_handler()->favicon_data_.known_icon = false; 915 handler.history_handler()->history_results_.clear();
942 handler.history_handler()->InvokeCallback(); 916 handler.history_handler()->InvokeCallback();
943 ASSERT_TRUE(download_handler->HasDownload()); 917 ASSERT_TRUE(download_handler->HasDownload());
944 EXPECT_EQ(icon_url_preferred1, download_handler->GetImageUrl()); 918 EXPECT_EQ(icon_url_preferred1, download_handler->GetImageUrl());
945 download_handler->SetImageSize(gfx::kFaviconSize); 919 download_handler->SetImageSize(gfx::kFaviconSize);
946 download_handler->InvokeCallback(); 920 download_handler->InvokeCallback();
947 // Verify that this was detected as an exact match and image_urls_ is cleared. 921 // Verify that this was detected as an exact match and image_urls_ is cleared.
948 EXPECT_EQ(0U, handler.image_urls().size()); 922 EXPECT_EQ(0U, handler.image_urls().size());
949 923
950 // Verify correct icon size chosen. 924 // Verify correct icon size chosen.
951 EXPECT_EQ(icon_url_preferred1, handler.GetEntry()->GetFavicon().url); 925 EXPECT_EQ(icon_url_preferred1, handler.GetEntry()->GetFavicon().url);
952 EXPECT_TRUE(handler.GetEntry()->GetFavicon().valid); 926 EXPECT_TRUE(handler.GetEntry()->GetFavicon().valid);
953 EXPECT_FALSE(handler.GetEntry()->GetFavicon().image.IsEmpty()); 927 EXPECT_FALSE(handler.GetEntry()->GetFavicon().image.IsEmpty());
954 EXPECT_EQ(gfx::kFaviconSize, 928 EXPECT_EQ(gfx::kFaviconSize,
955 handler.GetEntry()->GetFavicon().image.ToSkBitmap()->width()); 929 handler.GetEntry()->GetFavicon().image.ToSkBitmap()->width());
956 } 930 }
957 931
958 } // namespace. 932 } // namespace.
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698