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

Side by Side Diff: chrome/browser/bitmap_fetcher/bitmap_fetcher_service_unittest.cc

Issue 319623003: [AiS] ImageService (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix signed/unsigned conflict. Created 6 years, 6 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 unified diff | Download patch
OLDNEW
(Empty)
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.
4
5 #include "chrome/browser/bitmap_fetcher/bitmap_fetcher_service.h"
6
7 #include "chrome/browser/bitmap_fetcher/bitmap_fetcher.h"
8 #include "chrome/test/base/testing_profile.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 namespace {
12
13 class TestObserver : public BitmapFetcherService::Observer {
14 public:
15 explicit TestObserver(BitmapFetcherService::Observer* target)
16 : target_(target) {}
17 virtual ~TestObserver() {}
18
19 virtual void OnImageChanged(BitmapFetcherService::RequestId request_id,
20 const SkBitmap& answers_image) OVERRIDE {
21 target_->OnImageChanged(request_id, answers_image);
22 }
23
24 BitmapFetcherService::Observer* target_;
25 };
26
27 class TestService : public BitmapFetcherService {
28 public:
29 explicit TestService(content::BrowserContext* context)
30 : BitmapFetcherService(context) {}
31 virtual ~TestService() {}
32
33 // Create a fetcher, but don't start downloading. That allows side-stepping
34 // the decode step, which requires a utility process.
35 virtual chrome::BitmapFetcher* CreateFetcher(const GURL& url) OVERRIDE {
36 return new chrome::BitmapFetcher(url, this);
37 }
38 };
39
40 } // namespace
41
42 class BitmapFetcherServiceTest : public testing::Test,
43 public BitmapFetcherService::Observer {
44 public:
45 virtual void SetUp() OVERRIDE {
46 service_.reset(new TestService(&profile_));
47 requestsFinished_ = 0;
48 imagesChanged_ = 0;
49 url1_ = GURL("http://example.org/sample-image-1.png");
50 url2_ = GURL("http://example.org/sample-image-2.png");
51 }
52
53 const ScopedVector<BitmapFetcherRequest>& requests() {
54 return service_->requests_;
55 }
56 const ScopedVector<chrome::BitmapFetcher>& active_fetchers() {
57 return service_->active_fetchers_;
58 }
59 size_t cache_size() { return service_->cache_.size(); }
60
61 virtual void OnImageChanged(BitmapFetcherService::RequestId request_id,
62 const SkBitmap& answers_image) OVERRIDE {
63 if (answers_image.empty())
64 requestsFinished_++;
65 else
66 imagesChanged_++;
67 }
68
69 // Simulate finishing a URL fetch and decode for the given fetcher.
70 void CompleteFetch(const GURL& url) {
71 const chrome::BitmapFetcher* fetcher = service_->FindFetcherForUrl(url);
72 ASSERT_TRUE(NULL != fetcher);
73
74 // Create a non-empty bitmap.
75 SkBitmap image;
76 image.setConfig(SkBitmap::kARGB_8888_Config, 2, 2);
77 image.allocPixels();
78 image.eraseColor(SK_ColorGREEN);
79
80 const_cast<chrome::BitmapFetcher*>(fetcher)->OnImageDecoded(NULL, image);
81 }
82
83 void FailFetch(const GURL& url) {
84 const chrome::BitmapFetcher* fetcher = service_->FindFetcherForUrl(url);
85 ASSERT_TRUE(NULL != fetcher);
86 const_cast<chrome::BitmapFetcher*>(fetcher)
87 ->OnImageDecoded(NULL, SkBitmap());
88 }
89
90 protected:
91 scoped_ptr<BitmapFetcherService> service_;
92
93 int imagesChanged_;
94 int requestsFinished_;
95
96 GURL url1_;
97 GURL url2_;
98
99 private:
100 TestingProfile profile_;
101 };
102
103 TEST_F(BitmapFetcherServiceTest, CancelInvalidRequest) {
104 service_->CancelRequest(BitmapFetcherService::REQUEST_ID_INVALID);
105 service_->CancelRequest(23);
106 }
107
108 TEST_F(BitmapFetcherServiceTest, OnlyFirstRequestCreatesFetcher) {
109 EXPECT_EQ(0U, active_fetchers().size());
110
111 service_->RequestImage(url1_, new TestObserver(this));
112 EXPECT_EQ(1U, active_fetchers().size());
113
114 service_->RequestImage(url1_, new TestObserver(this));
115 EXPECT_EQ(1U, active_fetchers().size());
116 }
117
118 TEST_F(BitmapFetcherServiceTest, CompletedFetchNotifiesAllObservers) {
119 service_->RequestImage(url1_, new TestObserver(this));
120 service_->RequestImage(url1_, new TestObserver(this));
121 service_->RequestImage(url1_, new TestObserver(this));
122 service_->RequestImage(url1_, new TestObserver(this));
123 EXPECT_EQ(1U, active_fetchers().size());
124 EXPECT_EQ(4U, requests().size());
125
126 CompleteFetch(url1_);
127 EXPECT_EQ(4, imagesChanged_);
128 EXPECT_EQ(4, requestsFinished_);
129 }
130
131 TEST_F(BitmapFetcherServiceTest, CancelRequest) {
132 service_->RequestImage(url1_, new TestObserver(this));
133 service_->RequestImage(url1_, new TestObserver(this));
134 BitmapFetcherService::RequestId requestId =
135 service_->RequestImage(url2_, new TestObserver(this));
136 service_->RequestImage(url1_, new TestObserver(this));
137 service_->RequestImage(url1_, new TestObserver(this));
138 EXPECT_EQ(5U, requests().size());
139
140 service_->CancelRequest(requestId);
141 EXPECT_EQ(4U, requests().size());
142
143 CompleteFetch(url2_);
144 EXPECT_EQ(0, imagesChanged_);
145
146 CompleteFetch(url1_);
147 EXPECT_EQ(4, imagesChanged_);
148 }
149
150 TEST_F(BitmapFetcherServiceTest, FailedRequestsDontEnterCache) {
151 service_->RequestImage(url1_, new TestObserver(this));
152 service_->RequestImage(url2_, new TestObserver(this));
153 EXPECT_EQ(0U, cache_size());
154
155 CompleteFetch(url1_);
156 EXPECT_EQ(1U, cache_size());
157
158 FailFetch(url2_);
159 EXPECT_EQ(1U, cache_size());
160 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698