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

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: Move/rename service. 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 BitmapFetcherObserver {
14 public:
15 explicit TestObserver(BitmapFetcherObserver* target) : target_(target) {}
16 virtual ~TestObserver() {}
17
18 virtual void OnImageChanged(const SkBitmap& answers_image) OVERRIDE {
19 target_->OnImageChanged(answers_image);
20 }
21 virtual void OnRequestFinished(int request_id) OVERRIDE {
22 target_->OnRequestFinished(request_id);
23 }
24
25 BitmapFetcherObserver* target_;
26 };
27
28 class TestService : public BitmapFetcherService {
29 public:
30 explicit TestService(content::BrowserContext* context)
31 : BitmapFetcherService(context) {}
32 virtual ~TestService() {}
33
34 // Create a fetcher, but don't start downloading. That allows side-stepping
35 // the decode step, which requires a utility process.
36 virtual chrome::BitmapFetcher* CreateFetcher(const GURL& url) OVERRIDE {
37 return new chrome::BitmapFetcher(url, this);
38 }
39 };
40
41 } // namespace
42
43 class BitmapFetcherServiceTest : public testing::Test,
44 public BitmapFetcherObserver {
45 public:
46 virtual void SetUp() OVERRIDE {
47 service_.reset(new TestService(&profile_));
48 requestsFinished_ = 0;
49 imagesChanged_ = 0;
50 url1_ = GURL("http://example.org/sample-image-1.png");
51 url2_ = GURL("http://example.org/sample-image-2.png");
52 }
53
54 const ScopedVector<BitmapFetcherRequest>& requests() {
55 return service_->requests_;
56 }
57 const ScopedVector<chrome::BitmapFetcher>& active_fetchers() {
58 return service_->active_fetchers_;
59 }
60 size_t cache_size() { return service_->cache_.size(); }
61
62 virtual void OnImageChanged(const SkBitmap& answers_image) OVERRIDE {
63 imagesChanged_++;
64 }
65 virtual void OnRequestFinished(int request_id) OVERRIDE {
66 requestsFinished_++;
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(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 RequestId requestId = service_->RequestImage(url2_, new TestObserver(this));
135 service_->RequestImage(url1_, new TestObserver(this));
136 service_->RequestImage(url1_, new TestObserver(this));
137 EXPECT_EQ(5U, requests().size());
138
139 service_->CancelRequest(requestId);
140 EXPECT_EQ(4U, requests().size());
141
142 CompleteFetch(url2_);
143 EXPECT_EQ(0, imagesChanged_);
144
145 CompleteFetch(url1_);
146 EXPECT_EQ(4, imagesChanged_);
147 }
148
149 TEST_F(BitmapFetcherServiceTest, FailedRequestsDontEnterCache) {
150 service_->RequestImage(url1_, new TestObserver(this));
151 service_->RequestImage(url2_, new TestObserver(this));
152 EXPECT_EQ(0U, cache_size());
153
154 CompleteFetch(url1_);
155 EXPECT_EQ(1U, cache_size());
156
157 FailFetch(url2_);
158 EXPECT_EQ(1U, cache_size());
159 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698