Popular sites on the NTP: re-download popular suggestions once per Chrome run
[chromium-blink-merge.git] / chrome / browser / image_holder_unittest.cc
blob03da2ca35e529edc0f130f865b59bd5b0dda97f6
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include <string>
7 #include "chrome/browser/image_holder.h"
8 #include "content/public/test/test_browser_thread_bundle.h"
9 #include "testing/gtest/include/gtest/gtest.h"
11 namespace {
13 const char kIconUrl1[] = "http://www.google.com/icon1.jpg";
14 const char kIconUrl2[] = "http://www.google.com/icon2.jpg";
16 class TestDelegate : public chrome::ImageHolderDelegate {
17 public:
18 TestDelegate() : on_fetch_complete_called_(false) {}
20 bool on_fetch_complete_called() const { return on_fetch_complete_called_; }
22 // chrome::ImageHolderDelegate
23 void OnFetchComplete() override { on_fetch_complete_called_ = true; }
25 private:
26 content::TestBrowserThreadBundle thread_bundle_;
27 bool on_fetch_complete_called_;
29 DISALLOW_COPY_AND_ASSIGN(TestDelegate);
32 } // namespace
34 namespace chrome {
36 typedef testing::Test ImageHolderTest;
38 TEST_F(ImageHolderTest, CreateBitmapFetcherTest) {
39 TestDelegate delegate;
40 ImageHolder image_holder(GURL(kIconUrl1), GURL(kIconUrl2), nullptr,
41 &delegate);
43 ASSERT_EQ(2U, image_holder.fetchers_.size());
44 EXPECT_EQ(GURL(kIconUrl1), image_holder.fetchers_[0]->url());
45 EXPECT_EQ(GURL(kIconUrl2), image_holder.fetchers_[1]->url());
47 // Adding a dup of an existing URL shouldn't change anything.
48 image_holder.CreateBitmapFetcher(GURL(kIconUrl2));
49 ASSERT_EQ(2U, image_holder.fetchers_.size());
50 EXPECT_EQ(GURL(kIconUrl1), image_holder.fetchers_[0]->url());
51 EXPECT_EQ(GURL(kIconUrl2), image_holder.fetchers_[1]->url());
54 TEST_F(ImageHolderTest, OnFetchCompleteTest) {
55 TestDelegate delegate;
56 ImageHolder image_holder(GURL(kIconUrl1), GURL(), nullptr, &delegate);
58 // Put a real bitmap into "bitmap". 2x2 bitmap of green 32 bit pixels.
59 SkBitmap bitmap;
60 bitmap.allocN32Pixels(2, 2);
61 bitmap.eraseColor(SK_ColorGREEN);
63 image_holder.OnFetchComplete(GURL(kIconUrl1), &bitmap);
65 // Expect that the app icon has some data in it.
66 EXPECT_FALSE(image_holder.low_dpi_image().IsEmpty());
68 // Expect that we reported the fetch done to the delegate.
69 EXPECT_TRUE(delegate.on_fetch_complete_called());
72 TEST_F(ImageHolderTest, IsFetchingDoneTest) {
73 TestDelegate delegate;
74 ImageHolder image_holder1(GURL(kIconUrl1), GURL(kIconUrl2), nullptr,
75 &delegate);
76 ImageHolder image_holder2(GURL(kIconUrl1), GURL(), nullptr, &delegate);
77 ImageHolder image_holder3(GURL(), GURL(kIconUrl2), nullptr, &delegate);
78 ImageHolder image_holder4(GURL(), GURL(), nullptr, &delegate);
80 // Initially, image holder 4 with no URLs should report done, but no others.
81 EXPECT_FALSE(image_holder1.IsFetchingDone());
82 EXPECT_FALSE(image_holder2.IsFetchingDone());
83 EXPECT_FALSE(image_holder3.IsFetchingDone());
84 EXPECT_TRUE(image_holder4.IsFetchingDone());
86 // Put a real bitmap into "bitmap". 2x2 bitmap of green 32 bit pixels.
87 SkBitmap bitmap;
88 bitmap.allocN32Pixels(2, 2);
89 bitmap.eraseColor(SK_ColorGREEN);
91 // Add the first icon, and image holder 2 should now also report done.
92 image_holder1.OnFetchComplete(GURL(kIconUrl1), &bitmap);
93 image_holder2.OnFetchComplete(GURL(kIconUrl1), &bitmap);
94 image_holder3.OnFetchComplete(GURL(kIconUrl1), &bitmap);
95 image_holder4.OnFetchComplete(GURL(kIconUrl1), &bitmap);
96 EXPECT_FALSE(image_holder1.IsFetchingDone());
97 EXPECT_TRUE(image_holder2.IsFetchingDone());
98 EXPECT_FALSE(image_holder3.IsFetchingDone());
99 EXPECT_TRUE(image_holder4.IsFetchingDone());
101 // Add the second image, and now all 4 should report done.
102 image_holder1.OnFetchComplete(GURL(kIconUrl2), &bitmap);
103 image_holder2.OnFetchComplete(GURL(kIconUrl2), &bitmap);
104 image_holder3.OnFetchComplete(GURL(kIconUrl2), &bitmap);
105 image_holder4.OnFetchComplete(GURL(kIconUrl2), &bitmap);
106 EXPECT_TRUE(image_holder1.IsFetchingDone());
107 EXPECT_TRUE(image_holder2.IsFetchingDone());
108 EXPECT_TRUE(image_holder3.IsFetchingDone());
109 EXPECT_TRUE(image_holder4.IsFetchingDone());
112 } // namespace chrome.