123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- // Copyright 2020 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "components/query_tiles/internal/cached_image_loader.h"
- #include <memory>
- #include <utility>
- #include "base/memory/weak_ptr.h"
- #include "base/test/metrics/histogram_tester.h"
- #include "base/test/mock_callback.h"
- #include "base/test/task_environment.h"
- #include "components/image_fetcher/core/mock_image_fetcher.h"
- #include "components/image_fetcher/core/request_metadata.h"
- #include "net/base/net_errors.h"
- #include "net/http/http_status_code.h"
- #include "testing/gtest/include/gtest/gtest.h"
- #include "third_party/skia/include/core/SkBitmap.h"
- #include "ui/gfx/image/image.h"
- using image_fetcher::ImageDataFetcherCallback;
- using image_fetcher::ImageFetcherCallback;
- using image_fetcher::ImageFetcherParams;
- using image_fetcher::RequestMetadata;
- using ::testing::_;
- using ::testing::Invoke;
- namespace query_tiles {
- namespace {
- const char kImagePreloadingHistogram[] =
- "Search.QueryTiles.ImagePreloadingEvent";
- class CachedImageLoaderTest : public testing::Test {
- public:
- CachedImageLoaderTest() = default;
- ~CachedImageLoaderTest() override = default;
- void SetUp() override {
- image_loader_ = std::make_unique<CachedImageLoader>(
- &mock_fetcher_, &mock_reduced_mode_fetcher_);
- }
- protected:
- void FetchImage() {
- image_loader_->FetchImage(
- GURL("https://www.example.com/dummy_image"),
- base::BindOnce(&CachedImageLoaderTest::OnBitmapFetched,
- weak_ptr_factory_.GetWeakPtr()));
- }
- void PrefetchImage(int http_response_code, bool expected_success) {
- base::MockCallback<ImageLoader::SuccessCallback> mock_callback;
- EXPECT_CALL(mock_callback, Run(expected_success));
- EXPECT_CALL(*mock_reduced_mode_fetcher(), FetchImageAndData_(_, _, _, _))
- .WillRepeatedly(
- Invoke([http_response_code](
- const GURL&, ImageDataFetcherCallback* data_callback,
- ImageFetcherCallback*, ImageFetcherParams) {
- RequestMetadata request_metadata;
- request_metadata.http_response_code = http_response_code;
- std::move(*data_callback).Run("test_data", request_metadata);
- }));
- image_loader_->PrefetchImage(GURL("https://www.example.com/dummy_image"),
- mock_callback.Get());
- }
- image_fetcher::MockImageFetcher* mock_fetcher() { return &mock_fetcher_; }
- image_fetcher::MockImageFetcher* mock_reduced_mode_fetcher() {
- return &mock_reduced_mode_fetcher_;
- }
- const SkBitmap& result() const { return result_; }
- base::HistogramTester* histogram_tester() { return &histogram_tester_; }
- private:
- void OnBitmapFetched(SkBitmap bitmap) { result_ = bitmap; }
- base::test::TaskEnvironment task_environment_;
- image_fetcher::MockImageFetcher mock_fetcher_;
- image_fetcher::MockImageFetcher mock_reduced_mode_fetcher_;
- std::unique_ptr<ImageLoader> image_loader_;
- SkBitmap result_;
- base::HistogramTester histogram_tester_;
- base::WeakPtrFactory<CachedImageLoaderTest> weak_ptr_factory_{this};
- };
- TEST_F(CachedImageLoaderTest, FetchImage) {
- // Create a non-empty bitmap.
- SkBitmap bitmap;
- bitmap.allocN32Pixels(32, 16);
- EXPECT_FALSE(bitmap.empty());
- EXPECT_EQ(bitmap.width(), 32);
- auto image = gfx::Image::CreateFrom1xBitmap(bitmap);
- EXPECT_CALL(*mock_fetcher(), FetchImageAndData_(_, _, _, _))
- .WillRepeatedly(Invoke([&image](const GURL&, ImageDataFetcherCallback*,
- ImageFetcherCallback* fetch_callback,
- ImageFetcherParams) {
- image_fetcher::RequestMetadata request_metadata;
- request_metadata.http_response_code = net::OK;
- std::move(*fetch_callback).Run(image, request_metadata);
- }));
- FetchImage();
- EXPECT_FALSE(result().empty());
- EXPECT_EQ(result().width(), 32);
- histogram_tester()->ExpectBucketCount(kImagePreloadingHistogram, 0, 1);
- histogram_tester()->ExpectBucketCount(kImagePreloadingHistogram, 1, 1);
- }
- TEST_F(CachedImageLoaderTest, PrefetchImage) {
- PrefetchImage(net::OK, true /*expected_succes*/);
- histogram_tester()->ExpectBucketCount(kImagePreloadingHistogram, 3, 1);
- histogram_tester()->ExpectBucketCount(kImagePreloadingHistogram, 4, 1);
- PrefetchImage(net::HTTP_NOT_FOUND, false /*expected_succes*/);
- histogram_tester()->ExpectBucketCount(kImagePreloadingHistogram, 3, 2);
- histogram_tester()->ExpectBucketCount(kImagePreloadingHistogram, 5, 1);
- }
- } // namespace
- } // namespace query_tiles
|