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

Unified Diff: components/favicon/core/favicon_handler_unittest.cc

Issue 2781093002: Add attempt count metric to FaviconHandler (Closed)
Patch Set: Use public sparse_slowly 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/favicon/core/favicon_handler.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 5e651a646febcaca5d9b28ba8b03e129f4fb5da8..e855508162435ebd488ad0229dc60db23986d55f 100644
--- a/components/favicon/core/favicon_handler_unittest.cc
+++ b/components/favicon/core/favicon_handler_unittest.cc
@@ -16,6 +16,7 @@
#include "base/message_loop/message_loop.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"
@@ -78,20 +79,21 @@ std::vector<unsigned char> FillBitmapWithEdgeSize(int size) {
std::vector<FaviconRawBitmapResult> CreateRawBitmapResult(
const GURL& icon_url,
favicon_base::IconType icon_type = FAVICON,
- bool expired = false) {
+ bool expired = false,
+ int edge_size = gfx::kFaviconSize) {
scoped_refptr<base::RefCountedBytes> data(new base::RefCountedBytes());
- data->data() = FillBitmapWithEdgeSize(gfx::kFaviconSize);
+ data->data() = FillBitmapWithEdgeSize(edge_size);
FaviconRawBitmapResult bitmap_result;
bitmap_result.expired = expired;
bitmap_result.bitmap_data = data;
// Use a pixel size other than (0,0) as (0,0) has a special meaning.
- bitmap_result.pixel_size = gfx::Size(gfx::kFaviconSize, gfx::kFaviconSize);
+ bitmap_result.pixel_size = gfx::Size(edge_size, edge_size);
bitmap_result.icon_type = icon_type;
bitmap_result.icon_url = icon_url;
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:
@@ -382,6 +384,7 @@ class FaviconHandlerTest : public testing::Test {
};
TEST_F(FaviconHandlerTest, GetFaviconFromHistory) {
+ base::HistogramTester histogram_tester;
const GURL kIconURL("http://www.google.com/favicon");
favicon_service_.fake()->Store(kPageURL, kIconURL,
@@ -393,6 +396,12 @@ TEST_F(FaviconHandlerTest, GetFaviconFromHistory) {
RunHandlerWithSimpleFaviconCandidates({kIconURL});
EXPECT_THAT(delegate_.downloads(), IsEmpty());
+ EXPECT_THAT(
+ histogram_tester.GetAllSamples("Favicons.DownloadAttempts.LargeIcons"),
+ IsEmpty());
+ EXPECT_THAT(
+ histogram_tester.GetAllSamples("Favicons.DownloadAttempts.Favicons"),
+ IsEmpty());
}
// Test that UpdateFaviconsAndFetch() is called with the appropriate parameters
@@ -535,15 +544,12 @@ TEST_F(FaviconHandlerTest, UpdateAndDownloadFavicon) {
// - The icon is redownloaded.
TEST_F(FaviconHandlerTest, FaviconInHistoryInvalid) {
// Set non empty but invalid data.
- FaviconRawBitmapResult bitmap_result;
- bitmap_result.expired = false;
+ std::vector<FaviconRawBitmapResult> bitmap_result =
+ CreateRawBitmapResult(kIconURL16x16);
// Empty bitmap data is invalid.
- bitmap_result.bitmap_data = new base::RefCountedBytes();
- bitmap_result.pixel_size = gfx::Size(gfx::kFaviconSize, gfx::kFaviconSize);
- bitmap_result.icon_type = FAVICON;
- bitmap_result.icon_url = kIconURL16x16;
+ bitmap_result[0].bitmap_data = new base::RefCountedBytes();
- favicon_service_.fake()->Store(kPageURL, kIconURL16x16, {bitmap_result});
+ favicon_service_.fake()->Store(kPageURL, kIconURL16x16, bitmap_result);
// TODO(crbug.com/700811): It would be nice if we could check the image
// being published to rule out invalid data.
@@ -1031,5 +1037,116 @@ TEST_F(FaviconHandlerTest, TestKeepDownloadedLargestFavicon) {
FaviconURL(kIconURL16x16, FAVICON, kEmptySizes)});
}
+TEST_F(FaviconHandlerTest, TestRecordMultipleDownloadAttempts) {
+ base::HistogramTester histogram_tester;
+
+ // Try to download the three failing icons and end up logging three attempts.
+ RunHandlerWithCandidates(
+ FaviconDriverObserver::NON_TOUCH_LARGEST,
+ {FaviconURL(GURL("http://www.google.com/a"), FAVICON, kEmptySizes),
+ FaviconURL(GURL("http://www.google.com/b"), FAVICON, kEmptySizes),
+ FaviconURL(GURL("http://www.google.com/c"), FAVICON, kEmptySizes)});
+
+ EXPECT_THAT(
+ histogram_tester.GetAllSamples("Favicons.DownloadAttempts.LargeIcons"),
+ ElementsAre(base::Bucket(/*sample=*/3, /*expected_count=*/1)));
+ EXPECT_THAT(
+ histogram_tester.GetAllSamples("Favicons.DownloadAttempts.Favicons"),
+ IsEmpty());
+ EXPECT_THAT(
+ histogram_tester.GetAllSamples("Favicons.DownloadAttempts.TouchIcons"),
+ IsEmpty());
+}
+
+TEST_F(FaviconHandlerTest, TestRecordSingleFaviconDownloadAttempt) {
+ base::HistogramTester histogram_tester;
+
+ RunHandlerWithSimpleFaviconCandidates({kIconURL16x16});
+
+ EXPECT_THAT(
+ histogram_tester.GetAllSamples("Favicons.DownloadAttempts.Favicons"),
+ ElementsAre(base::Bucket(/*sample=*/1, /*expected_count=*/1)));
+ EXPECT_THAT(
+ histogram_tester.GetAllSamples("Favicons.DownloadAttempts.LargeIcons"),
+ IsEmpty());
+ EXPECT_THAT(
+ histogram_tester.GetAllSamples("Favicons.DownloadAttempts.TouchIcons"),
+ IsEmpty());
+}
+
+TEST_F(FaviconHandlerTest, TestRecordSingleLargeIconDownloadAttempt) {
+ base::HistogramTester histogram_tester;
+
+ RunHandlerWithCandidates(FaviconDriverObserver::NON_TOUCH_LARGEST,
+ {FaviconURL(kIconURL64x64, FAVICON, kEmptySizes)});
+
+ EXPECT_THAT(
+ histogram_tester.GetAllSamples("Favicons.DownloadAttempts.Favicons"),
+ IsEmpty());
+ EXPECT_THAT(
+ histogram_tester.GetAllSamples("Favicons.DownloadAttempts.LargeIcons"),
+ ElementsAre(base::Bucket(/*sample=*/1, /*expected_count=*/1)));
+ EXPECT_THAT(
+ histogram_tester.GetAllSamples("Favicons.DownloadAttempts.TouchIcons"),
+ IsEmpty());
+}
+
+TEST_F(FaviconHandlerTest, TestRecordSingleTouchIconDownloadAttempt) {
+ base::HistogramTester histogram_tester;
+ RunHandlerWithCandidates(
+ FaviconDriverObserver::TOUCH_LARGEST,
+ {FaviconURL(kIconURL64x64, TOUCH_ICON, kEmptySizes)});
+
+ EXPECT_THAT(
+ histogram_tester.GetAllSamples("Favicons.DownloadAttempts.LargeIcons"),
+ IsEmpty());
+ EXPECT_THAT(
+ histogram_tester.GetAllSamples("Favicons.DownloadAttempts.Favicons"),
+ IsEmpty());
+ EXPECT_THAT(
+ histogram_tester.GetAllSamples("Favicons.DownloadAttempts.TouchIcons"),
+ ElementsAre(base::Bucket(/*sample=*/1, /*expected_count=*/1)));
+}
+
+TEST_F(FaviconHandlerTest, TestRecordDownloadAttemptsFinishedByCache) {
+ const GURL kIconURL1024x1024("http://www.google.com/a-404-ing-icon");
+ base::HistogramTester histogram_tester;
+ favicon_service_.fake()->Store(
+ GURL("http://so.de"), kIconURL64x64,
+ CreateRawBitmapResult(kIconURL64x64, FAVICON, /*expired=*/false, 64));
+
+ RunHandlerWithCandidates(
+ FaviconDriverObserver::NON_TOUCH_LARGEST,
+ {FaviconURL(kIconURL1024x1024, FAVICON, {gfx::Size(1024, 1024)}),
+ FaviconURL(kIconURL12x12, FAVICON, {gfx::Size(12, 12)}),
+ FaviconURL(kIconURL64x64, FAVICON, {gfx::Size(64, 64)})});
+
+ // Should try only the first (receive 404) and get second icon from cache.
+ EXPECT_THAT(delegate_.downloads(), ElementsAre(kIconURL1024x1024));
+
+ EXPECT_THAT(
+ histogram_tester.GetAllSamples("Favicons.DownloadAttempts.LargeIcons"),
+ ElementsAre(base::Bucket(/*sample=*/1, /*expected_count=*/1)));
+ EXPECT_THAT(
+ histogram_tester.GetAllSamples("Favicons.DownloadAttempts.Favicons"),
+ IsEmpty());
+ EXPECT_THAT(
+ histogram_tester.GetAllSamples("Favicons.DownloadAttempts.TouchIcons"),
+ IsEmpty());
+}
+
+TEST_F(FaviconHandlerTest, TestRecordSingleDownloadAttemptForRefreshingIcons) {
+ base::HistogramTester histogram_tester;
+ favicon_service_.fake()->Store(
+ GURL("http://www.google.com/ps"), kIconURL16x16,
+ CreateRawBitmapResult(kIconURL16x16, FAVICON, /*expired=*/true));
+
+ RunHandlerWithSimpleFaviconCandidates({kIconURL16x16});
+
+ EXPECT_THAT(
+ histogram_tester.GetAllSamples("Favicons.DownloadAttempts.Favicons"),
+ ElementsAre(base::Bucket(/*sample=*/1, /*expected_count=*/1)));
+}
+
} // namespace
} // namespace favicon
« no previous file with comments | « components/favicon/core/favicon_handler.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698