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

Side by Side Diff: components/favicon/core/favicon_handler_unittest.cc

Issue 2781093002: Add attempt count metric to FaviconHandler (Closed)
Patch Set: Require metric for every notification icon type Created 3 years, 8 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
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 "components/favicon/core/favicon_handler.h" 5 #include "components/favicon/core/favicon_handler.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <map> 9 #include <map>
10 #include <memory> 10 #include <memory>
11 #include <set> 11 #include <set>
12 #include <string>
12 #include <vector> 13 #include <vector>
13 14
14 #include "base/macros.h" 15 #include "base/macros.h"
15 #include "base/memory/ptr_util.h" 16 #include "base/memory/ptr_util.h"
16 #include "base/message_loop/message_loop.h" 17 #include "base/message_loop/message_loop.h"
18 #include "base/metrics/statistics_recorder.h"
17 #include "base/run_loop.h" 19 #include "base/run_loop.h"
18 #include "base/strings/stringprintf.h" 20 #include "base/strings/stringprintf.h"
21 #include "base/test/histogram_tester.h"
19 #include "components/favicon/core/favicon_driver.h" 22 #include "components/favicon/core/favicon_driver.h"
20 #include "components/favicon/core/test/mock_favicon_service.h" 23 #include "components/favicon/core/test/mock_favicon_service.h"
21 #include "testing/gmock/include/gmock/gmock.h" 24 #include "testing/gmock/include/gmock/gmock.h"
22 #include "testing/gtest/include/gtest/gtest.h" 25 #include "testing/gtest/include/gtest/gtest.h"
23 #include "third_party/skia/include/core/SkBitmap.h" 26 #include "third_party/skia/include/core/SkBitmap.h"
24 #include "ui/base/layout.h" 27 #include "ui/base/layout.h"
25 #include "ui/gfx/codec/png_codec.h" 28 #include "ui/gfx/codec/png_codec.h"
26 #include "ui/gfx/favicon_size.h" 29 #include "ui/gfx/favicon_size.h"
27 #include "ui/gfx/image/image.h" 30 #include "ui/gfx/image/image.h"
28 31
29 namespace favicon { 32 namespace favicon {
30 namespace { 33 namespace {
31 34
32 using favicon_base::FAVICON; 35 using favicon_base::FAVICON;
33 using favicon_base::FaviconRawBitmapResult; 36 using favicon_base::FaviconRawBitmapResult;
34 using favicon_base::TOUCH_ICON; 37 using favicon_base::TOUCH_ICON;
35 using favicon_base::TOUCH_PRECOMPOSED_ICON; 38 using favicon_base::TOUCH_PRECOMPOSED_ICON;
36 using testing::Assign; 39 using testing::Assign;
40 using testing::Contains;
37 using testing::ElementsAre; 41 using testing::ElementsAre;
38 using testing::InSequence; 42 using testing::InSequence;
39 using testing::Invoke; 43 using testing::Invoke;
40 using testing::IsEmpty; 44 using testing::IsEmpty;
41 using testing::Return; 45 using testing::Return;
42 using testing::_; 46 using testing::_;
43 47
44 using IntVector = std::vector<int>; 48 using IntVector = std::vector<int>;
45 using URLVector = std::vector<GURL>; 49 using URLVector = std::vector<GURL>;
46 using BitmapVector = std::vector<SkBitmap>; 50 using BitmapVector = std::vector<SkBitmap>;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 FaviconRawBitmapResult bitmap_result; 88 FaviconRawBitmapResult bitmap_result;
85 bitmap_result.expired = expired; 89 bitmap_result.expired = expired;
86 bitmap_result.bitmap_data = data; 90 bitmap_result.bitmap_data = data;
87 // Use a pixel size other than (0,0) as (0,0) has a special meaning. 91 // Use a pixel size other than (0,0) as (0,0) has a special meaning.
88 bitmap_result.pixel_size = gfx::Size(gfx::kFaviconSize, gfx::kFaviconSize); 92 bitmap_result.pixel_size = gfx::Size(gfx::kFaviconSize, gfx::kFaviconSize);
89 bitmap_result.icon_type = icon_type; 93 bitmap_result.icon_type = icon_type;
90 bitmap_result.icon_url = icon_url; 94 bitmap_result.icon_url = icon_url;
91 return {bitmap_result}; 95 return {bitmap_result};
92 } 96 }
93 97
94 // Fake that implements the calls to FaviconHalder::Delegate's DownloadImage(), 98 // Fake that implements the calls to FaviconHandler::Delegate's DownloadImage(),
95 // delegated to this class through MockDelegate. 99 // delegated to this class through MockDelegate.
96 class FakeImageDownloader { 100 class FakeImageDownloader {
97 public: 101 public:
98 struct Response { 102 struct Response {
99 int http_status_code = 404; 103 int http_status_code = 404;
100 BitmapVector bitmaps; 104 BitmapVector bitmaps;
101 SizeVector original_bitmap_sizes; 105 SizeVector original_bitmap_sizes;
102 }; 106 };
103 107
104 FakeImageDownloader() : next_download_id_(1) {} 108 FakeImageDownloader() : next_download_id_(1) {}
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 protected: 319 protected:
316 const std::vector<gfx::Size> kEmptySizes; 320 const std::vector<gfx::Size> kEmptySizes;
317 321
318 // Some known icons for which download will succeed. 322 // Some known icons for which download will succeed.
319 const GURL kPageURL = GURL("http://www.google.com"); 323 const GURL kPageURL = GURL("http://www.google.com");
320 const GURL kIconURL10x10 = GURL("http://www.google.com/favicon10x10"); 324 const GURL kIconURL10x10 = GURL("http://www.google.com/favicon10x10");
321 const GURL kIconURL12x12 = GURL("http://www.google.com/favicon12x12"); 325 const GURL kIconURL12x12 = GURL("http://www.google.com/favicon12x12");
322 const GURL kIconURL16x16 = GURL("http://www.google.com/favicon16x16"); 326 const GURL kIconURL16x16 = GURL("http://www.google.com/favicon16x16");
323 const GURL kIconURL64x64 = GURL("http://www.google.com/favicon64x64"); 327 const GURL kIconURL64x64 = GURL("http://www.google.com/favicon64x64");
324 328
325 FaviconHandlerTest() { 329 FaviconHandlerTest() : download_histogram_(new base::HistogramTester()) {
326 // Register various known icon URLs. 330 // Register various known icon URLs.
327 delegate_.fake_downloader().Add(kIconURL10x10, IntVector{10}); 331 delegate_.fake_downloader().Add(kIconURL10x10, IntVector{10});
328 delegate_.fake_downloader().Add(kIconURL12x12, IntVector{12}); 332 delegate_.fake_downloader().Add(kIconURL12x12, IntVector{12});
329 delegate_.fake_downloader().Add(kIconURL16x16, IntVector{16}); 333 delegate_.fake_downloader().Add(kIconURL16x16, IntVector{16});
330 delegate_.fake_downloader().Add(kIconURL64x64, IntVector{64}); 334 delegate_.fake_downloader().Add(kIconURL64x64, IntVector{64});
331 335
332 // The score computed by SelectFaviconFrames() is dependent on the supported 336 // The score computed by SelectFaviconFrames() is dependent on the supported
333 // scale factors of the platform. It is used for determining the goodness of 337 // scale factors of the platform. It is used for determining the goodness of
334 // a downloaded bitmap in FaviconHandler::OnDidDownloadFavicon(). 338 // a downloaded bitmap in FaviconHandler::OnDidDownloadFavicon().
335 // Force the values of the scale factors so that the tests produce the same 339 // Force the values of the scale factors so that the tests produce the same
336 // results on all platforms. 340 // results on all platforms.
337 scoped_set_supported_scale_factors_.reset( 341 scoped_set_supported_scale_factors_.reset(
338 new ui::test::ScopedSetSupportedScaleFactors({ui::SCALE_FACTOR_100P})); 342 new ui::test::ScopedSetSupportedScaleFactors({ui::SCALE_FACTOR_100P}));
339 } 343 }
340 344
345 void TearDown() override {
346 // Check that if any downloads occurred, the attempt count was recorded.
347 if (!download_histogram_name_.empty() && delegate_.downloads().size() > 0) {
pkotwicz 2017/04/04 13:04:38 We should check the histogram only for some tests
fhorschig 2017/04/10 09:55:50 Done.
348 download_histogram_->ExpectBucketCount(
349 download_histogram_name_,
350 /*sample=*/delegate_.downloads().size(),
351 /*expected_count=*/1);
352 }
353 }
354
341 bool VerifyAndClearExpectations() { 355 bool VerifyAndClearExpectations() {
342 base::RunLoop().RunUntilIdle(); 356 base::RunLoop().RunUntilIdle();
343 favicon_service_.fake()->ClearDbRequests(); 357 favicon_service_.fake()->ClearDbRequests();
344 delegate_.fake_downloader().ClearDownloads(); 358 delegate_.fake_downloader().ClearDownloads();
359 // Drop download histogram without verification.
360 download_histogram_ = base::MakeUnique<base::HistogramTester>();
345 return testing::Mock::VerifyAndClearExpectations(&favicon_service_) && 361 return testing::Mock::VerifyAndClearExpectations(&favicon_service_) &&
346 testing::Mock::VerifyAndClearExpectations(&delegate_); 362 testing::Mock::VerifyAndClearExpectations(&delegate_);
347 } 363 }
348 364
349 // Creates a new handler and feeds in the page URL and the candidates. 365 // Creates a new handler and feeds in the page URL and the candidates.
350 // Returns the handler in case tests want to exercise further steps. 366 // Returns the handler in case tests want to exercise further steps.
351 std::unique_ptr<FaviconHandler> RunHandlerWithCandidates( 367 std::unique_ptr<FaviconHandler> RunHandlerWithCandidates(
352 FaviconDriverObserver::NotificationIconType handler_type, 368 FaviconDriverObserver::NotificationIconType handler_type,
353 const std::vector<favicon::FaviconURL>& candidates) { 369 const std::vector<favicon::FaviconURL>& candidates) {
370 download_histogram_name_ = GetHistogramForHandlerType(handler_type);
354 auto handler = base::MakeUnique<FaviconHandler>(&favicon_service_, 371 auto handler = base::MakeUnique<FaviconHandler>(&favicon_service_,
355 &delegate_, handler_type); 372 &delegate_, handler_type);
356 handler->FetchFavicon(kPageURL); 373 handler->FetchFavicon(kPageURL);
357 // The first RunUntilIdle() causes the FaviconService lookups be faster than 374 // The first RunUntilIdle() causes the FaviconService lookups be faster than
358 // OnUpdateFaviconURL(), which is the most likely scenario. 375 // OnUpdateFaviconURL(), which is the most likely scenario.
359 base::RunLoop().RunUntilIdle(); 376 base::RunLoop().RunUntilIdle();
360 handler->OnUpdateFaviconURL(kPageURL, candidates); 377 handler->OnUpdateFaviconURL(kPageURL, candidates);
361 base::RunLoop().RunUntilIdle(); 378 base::RunLoop().RunUntilIdle();
362 return handler; 379 return handler;
363 } 380 }
364 381
382 std::string GetHistogramForHandlerType(
383 FaviconDriverObserver::NotificationIconType handler_type) {
384 switch (handler_type) {
385 case FaviconDriverObserver::NON_TOUCH_16_DIP:
386 return "Favicons.FaviconDownloadAttempts";
387 case FaviconDriverObserver::NON_TOUCH_LARGEST:
388 return "Favicons.LargeIconDownloadAttempts";
389 case FaviconDriverObserver::TOUCH_LARGEST:
390 return "Favicons.TouchIconDownloadAttempts";
391 }
392 NOTREACHED() << "Expect a histogram for every NotificationIconType!";
393 return std::string();
394 }
395
365 // Same as above, but for the simplest case where all types are FAVICON and 396 // Same as above, but for the simplest case where all types are FAVICON and
366 // no sizes are provided, using a FaviconHandler of type NON_TOUCH_16_DIP. 397 // no sizes are provided, using a FaviconHandler of type NON_TOUCH_16_DIP.
367 std::unique_ptr<FaviconHandler> RunHandlerWithSimpleFaviconCandidates( 398 std::unique_ptr<FaviconHandler> RunHandlerWithSimpleFaviconCandidates(
368 const std::vector<GURL>& urls) { 399 const std::vector<GURL>& urls) {
369 std::vector<favicon::FaviconURL> candidates; 400 std::vector<favicon::FaviconURL> candidates;
370 for (const GURL& url : urls) { 401 for (const GURL& url : urls) {
371 candidates.emplace_back(url, FAVICON, kEmptySizes); 402 candidates.emplace_back(url, FAVICON, kEmptySizes);
372 } 403 }
373 return RunHandlerWithCandidates(FaviconDriverObserver::NON_TOUCH_16_DIP, 404 return RunHandlerWithCandidates(FaviconDriverObserver::NON_TOUCH_16_DIP,
374 candidates); 405 candidates);
375 } 406 }
376 407
408 std::string download_histogram_name_;
377 base::MessageLoopForUI message_loop_; 409 base::MessageLoopForUI message_loop_;
378 std::unique_ptr<ui::test::ScopedSetSupportedScaleFactors> 410 std::unique_ptr<ui::test::ScopedSetSupportedScaleFactors>
379 scoped_set_supported_scale_factors_; 411 scoped_set_supported_scale_factors_;
412 std::unique_ptr<base::HistogramTester> download_histogram_;
380 testing::NiceMock<MockFaviconServiceWithFake> favicon_service_; 413 testing::NiceMock<MockFaviconServiceWithFake> favicon_service_;
381 testing::NiceMock<MockDelegate> delegate_; 414 testing::NiceMock<MockDelegate> delegate_;
382 }; 415 };
383 416
384 TEST_F(FaviconHandlerTest, GetFaviconFromHistory) { 417 TEST_F(FaviconHandlerTest, GetFaviconFromHistory) {
385 const GURL kIconURL("http://www.google.com/favicon"); 418 const GURL kIconURL("http://www.google.com/favicon");
386 419
387 favicon_service_.fake()->Store(kPageURL, kIconURL, 420 favicon_service_.fake()->Store(kPageURL, kIconURL,
388 CreateRawBitmapResult(kIconURL)); 421 CreateRawBitmapResult(kIconURL));
389 422
390 EXPECT_CALL(delegate_, OnFaviconUpdated( 423 EXPECT_CALL(delegate_, OnFaviconUpdated(
391 kPageURL, FaviconDriverObserver::NON_TOUCH_16_DIP, 424 kPageURL, FaviconDriverObserver::NON_TOUCH_16_DIP,
392 kIconURL, /*icon_url_changed=*/true, _)); 425 kIconURL, /*icon_url_changed=*/true, _));
393 426
394 RunHandlerWithSimpleFaviconCandidates({kIconURL}); 427 RunHandlerWithSimpleFaviconCandidates({kIconURL});
395 EXPECT_THAT(delegate_.downloads(), IsEmpty()); 428 EXPECT_THAT(delegate_.downloads(), IsEmpty());
pkotwicz 2017/04/04 13:04:38 This is probably a better test to check download_h
fhorschig 2017/04/10 09:55:50 Added. (There are separate test cases, too, but th
396 } 429 }
397 430
398 // Test that the FaviconHandler process finishes when: 431 // Test that the FaviconHandler process finishes when:
399 // - There is data in the database for neither the page URL nor the icon URL. 432 // - There is data in the database for neither the page URL nor the icon URL.
400 // AND 433 // AND
401 // - FaviconService::GetFaviconForPageURL() callback returns before 434 // - FaviconService::GetFaviconForPageURL() callback returns before
402 // FaviconHandler::OnUpdateFaviconURL() is called. 435 // FaviconHandler::OnUpdateFaviconURL() is called.
403 // TODO(mastiz): Add test to verify UpdateFaviconMappingsAndFetch(). 436 // TODO(mastiz): Add test to verify UpdateFaviconMappingsAndFetch().
404 TEST_F(FaviconHandlerTest, DownloadUnknownFaviconIfCandidatesSlower) { 437 TEST_F(FaviconHandlerTest, DownloadUnknownFaviconIfCandidatesSlower) {
405 EXPECT_CALL(favicon_service_, SetFavicons(kPageURL, kIconURL16x16, FAVICON, 438 EXPECT_CALL(favicon_service_, SetFavicons(kPageURL, kIconURL16x16, FAVICON,
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
601 // Defer the download completion such that RunUntilIdle() doesn't complete 634 // Defer the download completion such that RunUntilIdle() doesn't complete
602 // the download. 635 // the download.
603 delegate_.fake_downloader().SetRunCallbackManuallyForUrl(kIconURL1); 636 delegate_.fake_downloader().SetRunCallbackManuallyForUrl(kIconURL1);
604 637
605 delegate_.fake_downloader().Add(kIconURL1, IntVector{16}); 638 delegate_.fake_downloader().Add(kIconURL1, IntVector{16});
606 delegate_.fake_downloader().Add(kIconURL3, IntVector{64}); 639 delegate_.fake_downloader().Add(kIconURL3, IntVector{64});
607 640
608 std::unique_ptr<FaviconHandler> handler = 641 std::unique_ptr<FaviconHandler> handler =
609 RunHandlerWithSimpleFaviconCandidates({kIconURL1, kIconURL2}); 642 RunHandlerWithSimpleFaviconCandidates({kIconURL1, kIconURL2});
610 643
644 download_histogram_->ExpectTotalCount("Favicons.DownloadAttempts", 0);
pkotwicz 2017/04/04 13:04:38 I don't think that this is a good test for this ch
fhorschig 2017/04/10 09:55:50 Gone.
611 ASSERT_TRUE(VerifyAndClearExpectations()); 645 ASSERT_TRUE(VerifyAndClearExpectations());
612 ASSERT_TRUE(delegate_.fake_downloader().HasPendingManualCallback()); 646 ASSERT_TRUE(delegate_.fake_downloader().HasPendingManualCallback());
613 647
614 // Favicon update should invalidate the ongoing download. 648 // Favicon update should invalidate the ongoing download.
615 EXPECT_CALL(favicon_service_, SetFavicons(_, kIconURL3, _, _)); 649 EXPECT_CALL(favicon_service_, SetFavicons(_, kIconURL3, _, _));
616 EXPECT_CALL(delegate_, OnFaviconUpdated(_, _, kIconURL3, _, _)); 650 EXPECT_CALL(delegate_, OnFaviconUpdated(_, _, kIconURL3, _, _));
617 651
618 handler->OnUpdateFaviconURL(kPageURL, 652 handler->OnUpdateFaviconURL(kPageURL,
619 {FaviconURL(kIconURL3, FAVICON, kEmptySizes)}); 653 {FaviconURL(kIconURL3, FAVICON, kEmptySizes)});
620 654
(...skipping 19 matching lines...) Expand all
640 // Defer the download completion such that RunUntilIdle() doesn't complete 674 // Defer the download completion such that RunUntilIdle() doesn't complete
641 // the download. 675 // the download.
642 delegate_.fake_downloader().SetRunCallbackManuallyForUrl(kSlowLoadingIconURL); 676 delegate_.fake_downloader().SetRunCallbackManuallyForUrl(kSlowLoadingIconURL);
643 delegate_.fake_downloader().Add(kSlowLoadingIconURL, IntVector{16}); 677 delegate_.fake_downloader().Add(kSlowLoadingIconURL, IntVector{16});
644 678
645 std::unique_ptr<FaviconHandler> handler = RunHandlerWithCandidates( 679 std::unique_ptr<FaviconHandler> handler = RunHandlerWithCandidates(
646 FaviconDriverObserver::NON_TOUCH_16_DIP, favicon_urls); 680 FaviconDriverObserver::NON_TOUCH_16_DIP, favicon_urls);
647 681
648 ASSERT_THAT(favicon_service_.fake()->db_requests(), 682 ASSERT_THAT(favicon_service_.fake()->db_requests(),
649 ElementsAre(kPageURL, kIconURL64x64, kSlowLoadingIconURL)); 683 ElementsAre(kPageURL, kIconURL64x64, kSlowLoadingIconURL));
684 download_histogram_->ExpectTotalCount("Favicons.FaviconDownloadAttempts", 0);
pkotwicz 2017/04/04 13:04:38 I don't think that this is a good test for this ch
fhorschig 2017/04/10 09:55:50 Gone.
650 ASSERT_TRUE(VerifyAndClearExpectations()); 685 ASSERT_TRUE(VerifyAndClearExpectations());
651 ASSERT_TRUE(delegate_.fake_downloader().HasPendingManualCallback()); 686 ASSERT_TRUE(delegate_.fake_downloader().HasPendingManualCallback());
652 687
653 // Calling OnUpdateFaviconURL() with the same icon URLs should have no effect, 688 // Calling OnUpdateFaviconURL() with the same icon URLs should have no effect,
654 // despite the ongoing download. 689 // despite the ongoing download.
655 handler->OnUpdateFaviconURL(kPageURL, favicon_urls); 690 handler->OnUpdateFaviconURL(kPageURL, favicon_urls);
656 base::RunLoop().RunUntilIdle(); 691 base::RunLoop().RunUntilIdle();
657 692
658 // Complete the download. 693 // Complete the download.
659 EXPECT_CALL(favicon_service_, SetFavicons(_, _, _, _)); 694 EXPECT_CALL(favicon_service_, SetFavicons(_, _, _, _));
660 EXPECT_CALL(delegate_, OnFaviconUpdated(_, _, _, _, _)); 695 EXPECT_CALL(delegate_, OnFaviconUpdated(_, _, _, _, _));
661 EXPECT_TRUE(delegate_.fake_downloader().RunCallbackManually()); 696 EXPECT_TRUE(delegate_.fake_downloader().RunCallbackManually());
662 base::RunLoop().RunUntilIdle(); 697 base::RunLoop().RunUntilIdle();
663 EXPECT_THAT(delegate_.downloads(), IsEmpty()); 698 EXPECT_THAT(delegate_.downloads(), IsEmpty());
664 } 699 }
665 700
666 // Test that calling OnUpdateFaviconUrl() with the same icon URLs as before is a 701 // Test that calling OnUpdateFaviconUrl() with the same icon URLs as before is a
667 // no-op. This is important because OnUpdateFaviconUrl() is called when the page 702 // no-op. This is important because OnUpdateFaviconUrl() is called when the page
668 // finishes loading. This can occur several times for pages with iframes. 703 // finishes loading. This can occur several times for pages with iframes.
669 TEST_F(FaviconHandlerTest, UpdateSameIconURLsAfterFinishedShouldBeNoop) { 704 TEST_F(FaviconHandlerTest, UpdateSameIconURLsAfterFinishedShouldBeNoop) {
670 const std::vector<FaviconURL> favicon_urls = { 705 const std::vector<FaviconURL> favicon_urls = {
671 FaviconURL(kIconURL10x10, FAVICON, kEmptySizes), 706 FaviconURL(kIconURL10x10, FAVICON, kEmptySizes),
672 FaviconURL(kIconURL16x16, FAVICON, kEmptySizes), 707 FaviconURL(kIconURL16x16, FAVICON, kEmptySizes),
673 }; 708 };
674 709
675 std::unique_ptr<FaviconHandler> handler = RunHandlerWithCandidates( 710 std::unique_ptr<FaviconHandler> handler = RunHandlerWithCandidates(
676 FaviconDriverObserver::NON_TOUCH_16_DIP, favicon_urls); 711 FaviconDriverObserver::NON_TOUCH_16_DIP, favicon_urls);
677 712
713 download_histogram_->ExpectBucketCount("Favicons.FaviconDownloadAttempts",
714 /*sample=*/2, /*expected_count=*/1);
pkotwicz 2017/04/04 13:04:38 I don't think that this is a good test for this ch
fhorschig 2017/04/10 09:55:50 Gone.
678 ASSERT_TRUE(VerifyAndClearExpectations()); 715 ASSERT_TRUE(VerifyAndClearExpectations());
679 716
680 // Calling OnUpdateFaviconURL() with identical data should be a no-op. 717 // Calling OnUpdateFaviconURL() with identical data should be a no-op.
681 EXPECT_CALL(delegate_, OnFaviconUpdated(_, _, _, _, _)).Times(0); 718 EXPECT_CALL(delegate_, OnFaviconUpdated(_, _, _, _, _)).Times(0);
682 EXPECT_CALL(favicon_service_, SetFavicons(_, _, _, _)).Times(0); 719 EXPECT_CALL(favicon_service_, SetFavicons(_, _, _, _)).Times(0);
683 720
684 handler->OnUpdateFaviconURL(kPageURL, favicon_urls); 721 handler->OnUpdateFaviconURL(kPageURL, favicon_urls);
685 base::RunLoop().RunUntilIdle(); 722 base::RunLoop().RunUntilIdle();
686 EXPECT_THAT(favicon_service_.fake()->db_requests(), IsEmpty()); 723 EXPECT_THAT(favicon_service_.fake()->db_requests(), IsEmpty());
687 EXPECT_THAT(delegate_.downloads(), IsEmpty()); 724 EXPECT_THAT(delegate_.downloads(), IsEmpty());
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
936 FaviconURL(kIconURLWithoutSize1, FAVICON, kEmptySizes), 973 FaviconURL(kIconURLWithoutSize1, FAVICON, kEmptySizes),
937 FaviconURL(kIconURLWithoutSize2, FAVICON, kEmptySizes)}); 974 FaviconURL(kIconURLWithoutSize2, FAVICON, kEmptySizes)});
938 975
939 // Icon URLs are not registered and hence 404s will be produced, which 976 // Icon URLs are not registered and hence 404s will be produced, which
940 // allows checking whether the icons were requested according to their size. 977 // allows checking whether the icons were requested according to their size.
941 // The favicons should have been requested in decreasing order of their sizes. 978 // The favicons should have been requested in decreasing order of their sizes.
942 // Favicons without any <link sizes=""> attribute should have been downloaded 979 // Favicons without any <link sizes=""> attribute should have been downloaded
943 // last. 980 // last.
944 EXPECT_THAT(delegate_.downloads(), 981 EXPECT_THAT(delegate_.downloads(),
945 ElementsAre(kIconURL1024_512, kIconURL16_512, kIconURL15_14, 982 ElementsAre(kIconURL1024_512, kIconURL16_512, kIconURL15_14,
946 kIconURLWithoutSize1, kIconURLWithoutSize2)); 983 kIconURLWithoutSize1, kIconURLWithoutSize2));
pkotwicz 2017/04/04 13:04:38 This is a good test to check download_histogram_>
fhorschig 2017/04/10 09:55:50 Added a new test for multiple downloads. If you pr
947 } 984 }
948 985
949 TEST_F(FaviconHandlerTest, TestSelectLargestFavicon) { 986 TEST_F(FaviconHandlerTest, TestSelectLargestFavicon) {
950 const GURL kIconURL1("http://www.google.com/b"); 987 const GURL kIconURL1("http://www.google.com/b");
951 const GURL kIconURL2("http://www.google.com/c"); 988 const GURL kIconURL2("http://www.google.com/c");
952 989
953 delegate_.fake_downloader().Add(kIconURL1, IntVector{15}); 990 delegate_.fake_downloader().Add(kIconURL1, IntVector{15});
954 delegate_.fake_downloader().Add(kIconURL2, IntVector{14, 16}); 991 delegate_.fake_downloader().Add(kIconURL2, IntVector{14, 16});
955 992
956 // Verify NotifyFaviconAvailable(). 993 // Verify NotifyFaviconAvailable().
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1006 1043
1007 RunHandlerWithCandidates( 1044 RunHandlerWithCandidates(
1008 FaviconDriverObserver::NON_TOUCH_LARGEST, 1045 FaviconDriverObserver::NON_TOUCH_LARGEST,
1009 {FaviconURL(kIconURL10x10, FAVICON, SizeVector{gfx::Size(16, 16)}), 1046 {FaviconURL(kIconURL10x10, FAVICON, SizeVector{gfx::Size(16, 16)}),
1010 FaviconURL(kIconURL12x12, FAVICON, SizeVector{gfx::Size(15, 15)}), 1047 FaviconURL(kIconURL12x12, FAVICON, SizeVector{gfx::Size(15, 15)}),
1011 FaviconURL(kIconURL16x16, FAVICON, kEmptySizes)}); 1048 FaviconURL(kIconURL16x16, FAVICON, kEmptySizes)});
1012 } 1049 }
1013 1050
1014 } // namespace 1051 } // namespace
1015 } // namespace favicon 1052 } // namespace favicon
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698