Chromium Code Reviews| Index: components/favicon/core/favicon_handler_unittest.cc |
| diff --git a/components/favicon/core/favicon_handler_unittest.cc b/components/favicon/core/favicon_handler_unittest.cc |
| index 5a608b8ec5446bff4af2dfe69ff1338178c962a3..0afe6284d503d582a3e70ff20656ee428d4885eb 100644 |
| --- a/components/favicon/core/favicon_handler_unittest.cc |
| +++ b/components/favicon/core/favicon_handler_unittest.cc |
| @@ -9,13 +9,16 @@ |
| #include <map> |
| #include <memory> |
| #include <set> |
| +#include <string> |
| #include <vector> |
| #include "base/macros.h" |
| #include "base/memory/ptr_util.h" |
| #include "base/message_loop/message_loop.h" |
| +#include "base/metrics/statistics_recorder.h" |
| #include "base/run_loop.h" |
| #include "base/strings/stringprintf.h" |
| +#include "base/test/histogram_tester.h" |
| #include "components/favicon/core/favicon_driver.h" |
| #include "components/favicon/core/test/mock_favicon_service.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| @@ -34,6 +37,7 @@ using favicon_base::FaviconRawBitmapResult; |
| using favicon_base::TOUCH_ICON; |
| using favicon_base::TOUCH_PRECOMPOSED_ICON; |
| using testing::Assign; |
| +using testing::Contains; |
| using testing::ElementsAre; |
| using testing::InSequence; |
| using testing::Invoke; |
| @@ -91,7 +95,7 @@ std::vector<FaviconRawBitmapResult> CreateRawBitmapResult( |
| return {bitmap_result}; |
| } |
| -// Fake that implements the calls to FaviconHalder::Delegate's DownloadImage(), |
| +// Fake that implements the calls to FaviconHandler::Delegate's DownloadImage(), |
| // delegated to this class through MockDelegate. |
| class FakeImageDownloader { |
| public: |
| @@ -322,7 +326,7 @@ class FaviconHandlerTest : public testing::Test { |
| const GURL kIconURL16x16 = GURL("http://www.google.com/favicon16x16"); |
| const GURL kIconURL64x64 = GURL("http://www.google.com/favicon64x64"); |
| - FaviconHandlerTest() { |
| + FaviconHandlerTest() : download_histogram_(new base::HistogramTester()) { |
| // Register various known icon URLs. |
| delegate_.fake_downloader().Add(kIconURL10x10, IntVector{10}); |
| delegate_.fake_downloader().Add(kIconURL12x12, IntVector{12}); |
| @@ -338,10 +342,22 @@ class FaviconHandlerTest : public testing::Test { |
| new ui::test::ScopedSetSupportedScaleFactors({ui::SCALE_FACTOR_100P})); |
| } |
| + void TearDown() override { |
| + // Check that if any downloads occurred, the attempt count was recorded. |
| + 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.
|
| + download_histogram_->ExpectBucketCount( |
| + download_histogram_name_, |
| + /*sample=*/delegate_.downloads().size(), |
| + /*expected_count=*/1); |
| + } |
| + } |
| + |
| bool VerifyAndClearExpectations() { |
| base::RunLoop().RunUntilIdle(); |
| favicon_service_.fake()->ClearDbRequests(); |
| delegate_.fake_downloader().ClearDownloads(); |
| + // Drop download histogram without verification. |
| + download_histogram_ = base::MakeUnique<base::HistogramTester>(); |
| return testing::Mock::VerifyAndClearExpectations(&favicon_service_) && |
| testing::Mock::VerifyAndClearExpectations(&delegate_); |
| } |
| @@ -351,6 +367,7 @@ class FaviconHandlerTest : public testing::Test { |
| std::unique_ptr<FaviconHandler> RunHandlerWithCandidates( |
| FaviconDriverObserver::NotificationIconType handler_type, |
| const std::vector<favicon::FaviconURL>& candidates) { |
| + download_histogram_name_ = GetHistogramForHandlerType(handler_type); |
| auto handler = base::MakeUnique<FaviconHandler>(&favicon_service_, |
| &delegate_, handler_type); |
| handler->FetchFavicon(kPageURL); |
| @@ -362,6 +379,20 @@ class FaviconHandlerTest : public testing::Test { |
| return handler; |
| } |
| + std::string GetHistogramForHandlerType( |
| + FaviconDriverObserver::NotificationIconType handler_type) { |
| + switch (handler_type) { |
| + case FaviconDriverObserver::NON_TOUCH_16_DIP: |
| + return "Favicons.FaviconDownloadAttempts"; |
| + case FaviconDriverObserver::NON_TOUCH_LARGEST: |
| + return "Favicons.LargeIconDownloadAttempts"; |
| + case FaviconDriverObserver::TOUCH_LARGEST: |
| + return "Favicons.TouchIconDownloadAttempts"; |
| + } |
| + NOTREACHED() << "Expect a histogram for every NotificationIconType!"; |
| + return std::string(); |
| + } |
| + |
| // Same as above, but for the simplest case where all types are FAVICON and |
| // no sizes are provided, using a FaviconHandler of type NON_TOUCH_16_DIP. |
| std::unique_ptr<FaviconHandler> RunHandlerWithSimpleFaviconCandidates( |
| @@ -374,9 +405,11 @@ class FaviconHandlerTest : public testing::Test { |
| candidates); |
| } |
| + std::string download_histogram_name_; |
| base::MessageLoopForUI message_loop_; |
| std::unique_ptr<ui::test::ScopedSetSupportedScaleFactors> |
| scoped_set_supported_scale_factors_; |
| + std::unique_ptr<base::HistogramTester> download_histogram_; |
| testing::NiceMock<MockFaviconServiceWithFake> favicon_service_; |
| testing::NiceMock<MockDelegate> delegate_; |
| }; |
| @@ -608,6 +641,7 @@ TEST_F(FaviconHandlerTest, UpdateDuringDownloading) { |
| std::unique_ptr<FaviconHandler> handler = |
| RunHandlerWithSimpleFaviconCandidates({kIconURL1, kIconURL2}); |
| + 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.
|
| ASSERT_TRUE(VerifyAndClearExpectations()); |
| ASSERT_TRUE(delegate_.fake_downloader().HasPendingManualCallback()); |
| @@ -647,6 +681,7 @@ TEST_F(FaviconHandlerTest, UpdateSameIconURLsWhileProcessingShouldBeNoop) { |
| ASSERT_THAT(favicon_service_.fake()->db_requests(), |
| ElementsAre(kPageURL, kIconURL64x64, kSlowLoadingIconURL)); |
| + 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.
|
| ASSERT_TRUE(VerifyAndClearExpectations()); |
| ASSERT_TRUE(delegate_.fake_downloader().HasPendingManualCallback()); |
| @@ -675,6 +710,8 @@ TEST_F(FaviconHandlerTest, UpdateSameIconURLsAfterFinishedShouldBeNoop) { |
| std::unique_ptr<FaviconHandler> handler = RunHandlerWithCandidates( |
| FaviconDriverObserver::NON_TOUCH_16_DIP, favicon_urls); |
| + download_histogram_->ExpectBucketCount("Favicons.FaviconDownloadAttempts", |
| + /*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.
|
| ASSERT_TRUE(VerifyAndClearExpectations()); |
| // Calling OnUpdateFaviconURL() with identical data should be a no-op. |