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

Side by Side Diff: webkit/glue/media/simple_data_source_unittest.cc

Issue 3863002: Refactoring BufferedDataSource to work with WebURLLoader instead of a MediaResourceLoaderBridge. (Closed) Base URL: http://git.chromium.org/git/chromium.git
Patch Set: little indent Created 10 years 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 | Annotate | Revision Log
« no previous file with comments | « webkit/glue/media/simple_data_source.cc ('k') | webkit/glue/mock_webframe.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/callback.h" 5 #include "base/callback.h"
6 #include "media/base/filters.h" 6 #include "media/base/filters.h"
7 #include "media/base/mock_filter_host.h" 7 #include "media/base/mock_filter_host.h"
8 #include "media/base/mock_filters.h" 8 #include "media/base/mock_filters.h"
9 #include "webkit/glue/media/mock_media_resource_loader_bridge_factory.h" 9 #include "net/base/net_errors.h"
10 #include "third_party/WebKit/WebKit/chromium/public/WebFrame.h"
11 #include "third_party/WebKit/WebKit/chromium/public/WebURLError.h"
12 #include "third_party/WebKit/WebKit/chromium/public/WebURLLoader.h"
13 #include "third_party/WebKit/WebKit/chromium/public/WebURLRequest.h"
14 #include "third_party/WebKit/WebKit/chromium/public/WebURLResponse.h"
10 #include "webkit/glue/media/simple_data_source.h" 15 #include "webkit/glue/media/simple_data_source.h"
11 #include "webkit/glue/mock_resource_loader_bridge.h" 16 #include "webkit/glue/mock_webframe.h"
17 #include "webkit/glue/mock_weburlloader_impl.h"
12 18
13 using ::testing::_; 19 using ::testing::_;
14 using ::testing::DoAll; 20 using ::testing::DoAll;
15 using ::testing::InSequence; 21 using ::testing::InSequence;
16 using ::testing::Invoke; 22 using ::testing::Invoke;
17 using ::testing::NiceMock; 23 using ::testing::NiceMock;
18 using ::testing::NotNull; 24 using ::testing::NotNull;
19 using ::testing::Return; 25 using ::testing::Return;
20 using ::testing::SetArgumentPointee; 26 using ::testing::SetArgumentPointee;
21 using ::testing::StrictMock; 27 using ::testing::StrictMock;
22 using ::testing::WithArgs; 28 using ::testing::WithArgs;
23 29
30 using WebKit::WebURLError;
31 using WebKit::WebURLLoader;
32 using WebKit::WebURLRequest;
33 using WebKit::WebURLResponse;
34
24 namespace { 35 namespace {
25 36
26 const int kDataSize = 1024; 37 const int kDataSize = 1024;
27 const char kHttpUrl[] = "http://test"; 38 const char kHttpUrl[] = "http://test";
28 const char kHttpsUrl[] = "https://test"; 39 const char kHttpsUrl[] = "https://test";
29 const char kFileUrl[] = "file://test"; 40 const char kFileUrl[] = "file://test";
30 const char kDataUrl[] = 41 const char kDataUrl[] =
31 "data:text/plain;base64,YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoK"; 42 "data:text/plain;base64,YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoK";
32 const char kDataUrlDecoded[] = "abcdefghijklmnopqrstuvwxyz"; 43 const char kDataUrlDecoded[] = "abcdefghijklmnopqrstuvwxyz";
33 const char kInvalidUrl[] = "whatever://test"; 44 const char kInvalidUrl[] = "whatever://test";
34 45
35 } // namespace 46 } // namespace
36 47
37 namespace webkit_glue { 48 namespace webkit_glue {
38 49
39 class SimpleDataSourceTest : public testing::Test { 50 class SimpleDataSourceTest : public testing::Test {
40 public: 51 public:
41 SimpleDataSourceTest() { 52 SimpleDataSourceTest() {
42 bridge_factory_.reset(
43 new NiceMock<MockMediaResourceLoaderBridgeFactory>());
44 bridge_.reset(new NiceMock<MockResourceLoaderBridge>());
45
46 for (int i = 0; i < kDataSize; ++i) { 53 for (int i = 0; i < kDataSize; ++i) {
47 data_[i] = i; 54 data_[i] = i;
48 } 55 }
49 } 56 }
50 57
51 virtual ~SimpleDataSourceTest() { 58 virtual ~SimpleDataSourceTest() {
52 if (bridge_.get()) 59 ignore_result(frame_.release());
53 EXPECT_CALL(*bridge_, OnDestroy());
54 if (bridge_factory_.get())
55 EXPECT_CALL(*bridge_factory_, OnDestroy());
56 } 60 }
57 61
58 void InitializeDataSource(const char* url) { 62 void InitializeDataSource(const char* url) {
63 gurl_ = GURL(url);
64
65 frame_.reset(new NiceMock<MockWebFrame>());
66 url_loader_ = new NiceMock<MockWebURLLoader>();
67
59 data_source_ = new SimpleDataSource(MessageLoop::current(), 68 data_source_ = new SimpleDataSource(MessageLoop::current(),
60 bridge_factory_.get()); 69 frame_.get());
61 CHECK(data_source_);
62 70
63 // There is no need to provide a message loop to data source. 71 // There is no need to provide a message loop to data source.
64 data_source_->set_host(&host_); 72 data_source_->set_host(&host_);
73 data_source_->SetURLLoaderForTest(url_loader_);
65 74
66 // First a bridge is created.
67 InSequence s; 75 InSequence s;
68 EXPECT_CALL(*bridge_factory_, CreateBridge(GURL(url), _, -1, -1))
69 .WillOnce(Return(bridge_.get()));
70 EXPECT_CALL(*bridge_, Start(data_source_.get()))
71 .WillOnce(Return(true));
72 76
73 data_source_->Initialize(url, callback_.NewCallback()); 77 data_source_->Initialize(url, callback_.NewCallback());
74
75 MessageLoop::current()->RunAllPending(); 78 MessageLoop::current()->RunAllPending();
76 } 79 }
77 80
78 void RequestSucceeded(bool is_loaded) { 81 void RequestSucceeded(bool is_loaded) {
79 ResourceResponseInfo info; 82 WebURLResponse response(gurl_);
80 info.content_length = kDataSize; 83 response.setExpectedContentLength(kDataSize);
81 84
82 data_source_->OnReceivedResponse(info, false); 85 data_source_->didReceiveResponse(NULL, response);
83 int64 size; 86 int64 size;
84 EXPECT_TRUE(data_source_->GetSize(&size)); 87 EXPECT_TRUE(data_source_->GetSize(&size));
85 EXPECT_EQ(kDataSize, size); 88 EXPECT_EQ(kDataSize, size);
86 89
87 for (int i = 0; i < kDataSize; ++i) 90 for (int i = 0; i < kDataSize; ++i) {
88 data_source_->OnReceivedData(data_ + i, 1); 91 data_source_->didReceiveData(NULL, data_ + i, 1);
92 }
89 93
90 EXPECT_CALL(host_, SetLoaded(is_loaded)); 94 EXPECT_CALL(host_, SetLoaded(is_loaded));
91 95
92 InSequence s; 96 InSequence s;
93 EXPECT_CALL(*bridge_, OnDestroy())
94 .WillOnce(Invoke(this, &SimpleDataSourceTest::ReleaseBridge));
95 EXPECT_CALL(host_, SetTotalBytes(kDataSize)); 97 EXPECT_CALL(host_, SetTotalBytes(kDataSize));
96 EXPECT_CALL(host_, SetBufferedBytes(kDataSize)); 98 EXPECT_CALL(host_, SetBufferedBytes(kDataSize));
97 EXPECT_CALL(callback_, OnFilterCallback()); 99 EXPECT_CALL(callback_, OnFilterCallback());
98 EXPECT_CALL(callback_, OnCallbackDestroyed()); 100 EXPECT_CALL(callback_, OnCallbackDestroyed());
99 101
100 URLRequestStatus status; 102 data_source_->didFinishLoading(NULL, 0);
101 status.set_status(URLRequestStatus::SUCCESS);
102 status.set_os_error(0);
103 data_source_->OnCompletedRequest(status, "", base::Time());
104 103
105 // Let the tasks to be executed. 104 // Let the tasks to be executed.
106 MessageLoop::current()->RunAllPending(); 105 MessageLoop::current()->RunAllPending();
107 } 106 }
108 107
109 void RequestFailed() { 108 void RequestFailed() {
110 InSequence s; 109 InSequence s;
111 EXPECT_CALL(*bridge_, OnDestroy())
112 .WillOnce(Invoke(this, &SimpleDataSourceTest::ReleaseBridge));
113 EXPECT_CALL(host_, SetError(media::PIPELINE_ERROR_NETWORK)); 110 EXPECT_CALL(host_, SetError(media::PIPELINE_ERROR_NETWORK));
114 EXPECT_CALL(callback_, OnFilterCallback()); 111 EXPECT_CALL(callback_, OnFilterCallback());
115 EXPECT_CALL(callback_, OnCallbackDestroyed()); 112 EXPECT_CALL(callback_, OnCallbackDestroyed());
116 113
117 URLRequestStatus status; 114 WebURLError error;
118 status.set_status(URLRequestStatus::FAILED); 115 error.reason = net::ERR_FAILED;
119 status.set_os_error(100); 116 data_source_->didFail(NULL, error);
120 data_source_->OnCompletedRequest(status, "", base::Time());
121 117
122 // Let the tasks to be executed. 118 // Let the tasks to be executed.
123 MessageLoop::current()->RunAllPending(); 119 MessageLoop::current()->RunAllPending();
124 } 120 }
125 121
126 void DestroyDataSource() { 122 void DestroyDataSource() {
127 EXPECT_CALL(*bridge_factory_, OnDestroy())
128 .WillOnce(Invoke(this, &SimpleDataSourceTest::ReleaseBridgeFactory));
129
130 StrictMock<media::MockFilterCallback> callback; 123 StrictMock<media::MockFilterCallback> callback;
131 EXPECT_CALL(callback, OnFilterCallback()); 124 EXPECT_CALL(callback, OnFilterCallback());
132 EXPECT_CALL(callback, OnCallbackDestroyed()); 125 EXPECT_CALL(callback, OnCallbackDestroyed());
126
133 data_source_->Stop(callback.NewCallback()); 127 data_source_->Stop(callback.NewCallback());
134 MessageLoop::current()->RunAllPending(); 128 MessageLoop::current()->RunAllPending();
135 129
136 data_source_ = NULL; 130 data_source_ = NULL;
137 } 131 }
138 132
139 void AsyncRead() { 133 void AsyncRead() {
140 for (int i = 0; i < kDataSize; ++i) { 134 for (int i = 0; i < kDataSize; ++i) {
141 uint8 buffer[1]; 135 uint8 buffer[1];
142 136
143 EXPECT_CALL(*this, ReadCallback(1)); 137 EXPECT_CALL(*this, ReadCallback(1));
144 data_source_->Read( 138 data_source_->Read(
145 i, 1, buffer, 139 i, 1, buffer,
146 NewCallback(this, &SimpleDataSourceTest::ReadCallback)); 140 NewCallback(this, &SimpleDataSourceTest::ReadCallback));
147 EXPECT_EQ(static_cast<uint8>(data_[i]), buffer[0]); 141 EXPECT_EQ(static_cast<uint8>(data_[i]), buffer[0]);
148 } 142 }
149 } 143 }
150 144
151 void ReleaseBridge() {
152 ignore_result(bridge_.release());
153 }
154
155 void ReleaseBridgeFactory() {
156 ignore_result(bridge_factory_.release());
157 }
158
159 MOCK_METHOD1(ReadCallback, void(size_t size)); 145 MOCK_METHOD1(ReadCallback, void(size_t size));
160 146
161 protected: 147 protected:
148 GURL gurl_;
162 scoped_ptr<MessageLoop> message_loop_; 149 scoped_ptr<MessageLoop> message_loop_;
163 scoped_ptr<NiceMock<MockMediaResourceLoaderBridgeFactory> > bridge_factory_; 150 NiceMock<MockWebURLLoader>* url_loader_;
164 scoped_ptr<NiceMock<MockResourceLoaderBridge> > bridge_;
165 scoped_refptr<SimpleDataSource> data_source_; 151 scoped_refptr<SimpleDataSource> data_source_;
166 StrictMock<media::MockFilterHost> host_; 152 StrictMock<media::MockFilterHost> host_;
167 StrictMock<media::MockFilterCallback> callback_; 153 StrictMock<media::MockFilterCallback> callback_;
154 scoped_ptr<NiceMock<MockWebFrame> > frame_;
155
168 char data_[kDataSize]; 156 char data_[kDataSize];
169 157
170 DISALLOW_COPY_AND_ASSIGN(SimpleDataSourceTest); 158 DISALLOW_COPY_AND_ASSIGN(SimpleDataSourceTest);
171 }; 159 };
172 160
173 TEST_F(SimpleDataSourceTest, InitializeHTTP) { 161 TEST_F(SimpleDataSourceTest, InitializeHTTP) {
174 InitializeDataSource(kHttpUrl); 162 InitializeDataSource(kHttpUrl);
175 RequestSucceeded(false); 163 RequestSucceeded(false);
176 DestroyDataSource(); 164 DestroyDataSource();
177 } 165 }
178 166
179 TEST_F(SimpleDataSourceTest, InitializeHTTPS) { 167 TEST_F(SimpleDataSourceTest, InitializeHTTPS) {
180 InitializeDataSource(kHttpsUrl); 168 InitializeDataSource(kHttpsUrl);
181 RequestSucceeded(false); 169 RequestSucceeded(false);
182 DestroyDataSource(); 170 DestroyDataSource();
183 } 171 }
184 172
185 TEST_F(SimpleDataSourceTest, InitializeFile) { 173 TEST_F(SimpleDataSourceTest, InitializeFile) {
186 InitializeDataSource(kFileUrl); 174 InitializeDataSource(kFileUrl);
187 RequestSucceeded(true); 175 RequestSucceeded(true);
188 DestroyDataSource(); 176 DestroyDataSource();
189 } 177 }
190 178
191 TEST_F(SimpleDataSourceTest, InitializeData) { 179 TEST_F(SimpleDataSourceTest, InitializeData) {
180 frame_.reset(new NiceMock<MockWebFrame>());
181 url_loader_ = new NiceMock<MockWebURLLoader>();
182
192 data_source_ = new SimpleDataSource(MessageLoop::current(), 183 data_source_ = new SimpleDataSource(MessageLoop::current(),
193 bridge_factory_.get()); 184 frame_.get());
194 EXPECT_TRUE(data_source_->IsUrlSupported(kDataUrl)); 185 EXPECT_TRUE(data_source_->IsUrlSupported(kDataUrl));
195 CHECK(data_source_);
196 186
197 // There is no need to provide a message loop to data source. 187 // There is no need to provide a message loop to data source.
198 data_source_->set_host(&host_); 188 data_source_->set_host(&host_);
189 data_source_->SetURLLoaderForTest(url_loader_);
199 190
200 EXPECT_CALL(host_, SetLoaded(true)); 191 EXPECT_CALL(host_, SetLoaded(true));
201 EXPECT_CALL(host_, SetTotalBytes(sizeof(kDataUrlDecoded))); 192 EXPECT_CALL(host_, SetTotalBytes(sizeof(kDataUrlDecoded)));
202 EXPECT_CALL(host_, SetBufferedBytes(sizeof(kDataUrlDecoded))); 193 EXPECT_CALL(host_, SetBufferedBytes(sizeof(kDataUrlDecoded)));
203 EXPECT_CALL(callback_, OnFilterCallback()); 194 EXPECT_CALL(callback_, OnFilterCallback());
204 EXPECT_CALL(callback_, OnCallbackDestroyed()); 195 EXPECT_CALL(callback_, OnCallbackDestroyed());
205 196
206 data_source_->Initialize(kDataUrl, callback_.NewCallback()); 197 data_source_->Initialize(kDataUrl, callback_.NewCallback());
207 MessageLoop::current()->RunAllPending(); 198 MessageLoop::current()->RunAllPending();
208 199
209 DestroyDataSource(); 200 DestroyDataSource();
210 } 201 }
211 202
212 TEST_F(SimpleDataSourceTest, RequestFailed) { 203 TEST_F(SimpleDataSourceTest, RequestFailed) {
213 InitializeDataSource(kHttpUrl); 204 InitializeDataSource(kHttpUrl);
214 RequestFailed(); 205 RequestFailed();
215 DestroyDataSource(); 206 DestroyDataSource();
216 } 207 }
217 208
218 TEST_F(SimpleDataSourceTest, StopWhenDownloading) { 209 TEST_F(SimpleDataSourceTest, StopWhenDownloading) {
219 InitializeDataSource(kHttpUrl); 210 InitializeDataSource(kHttpUrl);
220 211
221 EXPECT_CALL(*bridge_, Cancel()); 212 EXPECT_CALL(*url_loader_, cancel());
222 EXPECT_CALL(*bridge_, OnDestroy())
223 .WillOnce(Invoke(this, &SimpleDataSourceTest::ReleaseBridge));
224 EXPECT_CALL(callback_, OnCallbackDestroyed()); 213 EXPECT_CALL(callback_, OnCallbackDestroyed());
225 DestroyDataSource(); 214 DestroyDataSource();
226 } 215 }
227 216
228 TEST_F(SimpleDataSourceTest, AsyncRead) { 217 TEST_F(SimpleDataSourceTest, AsyncRead) {
229 InitializeDataSource(kFileUrl); 218 InitializeDataSource(kFileUrl);
230 RequestSucceeded(true); 219 RequestSucceeded(true);
231 AsyncRead(); 220 AsyncRead();
232 DestroyDataSource(); 221 DestroyDataSource();
233 } 222 }
234 223
235 } // namespace webkit_glue 224 } // namespace webkit_glue
OLDNEW
« no previous file with comments | « webkit/glue/media/simple_data_source.cc ('k') | webkit/glue/mock_webframe.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698