// Copyright 2014 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 #include "base/macros.h" #include "chrome/browser/image_holder.h" #include "content/public/test/test_browser_thread_bundle.h" #include "testing/gtest/include/gtest/gtest.h" namespace { const char kIconUrl1[] = "http://www.google.com/icon1.jpg"; const char kIconUrl2[] = "http://www.google.com/icon2.jpg"; class TestDelegate : public chrome::ImageHolderDelegate { public: TestDelegate() : on_fetch_complete_called_(false) {} bool on_fetch_complete_called() const { return on_fetch_complete_called_; } // chrome::ImageHolderDelegate void OnFetchComplete() override { on_fetch_complete_called_ = true; } private: content::TestBrowserThreadBundle thread_bundle_; bool on_fetch_complete_called_; DISALLOW_COPY_AND_ASSIGN(TestDelegate); }; } // namespace namespace chrome { typedef testing::Test ImageHolderTest; TEST_F(ImageHolderTest, CreateBitmapFetcherTest) { TestDelegate delegate; ImageHolder image_holder(GURL(kIconUrl1), GURL(kIconUrl2), nullptr, &delegate); ASSERT_EQ(2U, image_holder.fetchers_.size()); EXPECT_EQ(GURL(kIconUrl1), image_holder.fetchers_[0]->url()); EXPECT_EQ(GURL(kIconUrl2), image_holder.fetchers_[1]->url()); // Adding a dup of an existing URL shouldn't change anything. image_holder.CreateBitmapFetcher(GURL(kIconUrl2)); ASSERT_EQ(2U, image_holder.fetchers_.size()); EXPECT_EQ(GURL(kIconUrl1), image_holder.fetchers_[0]->url()); EXPECT_EQ(GURL(kIconUrl2), image_holder.fetchers_[1]->url()); } TEST_F(ImageHolderTest, OnFetchCompleteTest) { TestDelegate delegate; ImageHolder image_holder(GURL(kIconUrl1), GURL(), nullptr, &delegate); // Put a real bitmap into "bitmap". 2x2 bitmap of green 32 bit pixels. SkBitmap bitmap; bitmap.allocN32Pixels(2, 2); bitmap.eraseColor(SK_ColorGREEN); image_holder.OnFetchComplete(GURL(kIconUrl1), &bitmap); // Expect that the app icon has some data in it. EXPECT_FALSE(image_holder.low_dpi_image().IsEmpty()); // Expect that we reported the fetch done to the delegate. EXPECT_TRUE(delegate.on_fetch_complete_called()); } TEST_F(ImageHolderTest, IsFetchingDoneTest) { TestDelegate delegate; ImageHolder image_holder1(GURL(kIconUrl1), GURL(kIconUrl2), nullptr, &delegate); ImageHolder image_holder2(GURL(kIconUrl1), GURL(), nullptr, &delegate); ImageHolder image_holder3(GURL(), GURL(kIconUrl2), nullptr, &delegate); ImageHolder image_holder4(GURL(), GURL(), nullptr, &delegate); // Initially, image holder 4 with no URLs should report done, but no others. EXPECT_FALSE(image_holder1.IsFetchingDone()); EXPECT_FALSE(image_holder2.IsFetchingDone()); EXPECT_FALSE(image_holder3.IsFetchingDone()); EXPECT_TRUE(image_holder4.IsFetchingDone()); // Put a real bitmap into "bitmap". 2x2 bitmap of green 32 bit pixels. SkBitmap bitmap; bitmap.allocN32Pixels(2, 2); bitmap.eraseColor(SK_ColorGREEN); // Add the first icon, and image holder 2 should now also report done. image_holder1.OnFetchComplete(GURL(kIconUrl1), &bitmap); image_holder2.OnFetchComplete(GURL(kIconUrl1), &bitmap); image_holder3.OnFetchComplete(GURL(kIconUrl1), &bitmap); image_holder4.OnFetchComplete(GURL(kIconUrl1), &bitmap); EXPECT_FALSE(image_holder1.IsFetchingDone()); EXPECT_TRUE(image_holder2.IsFetchingDone()); EXPECT_FALSE(image_holder3.IsFetchingDone()); EXPECT_TRUE(image_holder4.IsFetchingDone()); // Add the second image, and now all 4 should report done. image_holder1.OnFetchComplete(GURL(kIconUrl2), &bitmap); image_holder2.OnFetchComplete(GURL(kIconUrl2), &bitmap); image_holder3.OnFetchComplete(GURL(kIconUrl2), &bitmap); image_holder4.OnFetchComplete(GURL(kIconUrl2), &bitmap); EXPECT_TRUE(image_holder1.IsFetchingDone()); EXPECT_TRUE(image_holder2.IsFetchingDone()); EXPECT_TRUE(image_holder3.IsFetchingDone()); EXPECT_TRUE(image_holder4.IsFetchingDone()); } } // namespace chrome.