OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/bind.h" | 5 #include "base/bind.h" |
6 #include "media/base/filters.h" | 6 #include "media/base/filters.h" |
7 #include "media/base/mock_callback.h" | 7 #include "media/base/mock_callback.h" |
8 #include "media/base/mock_data_source_host.h" | 8 #include "media/base/mock_data_source_host.h" |
9 #include "media/base/mock_filters.h" | 9 #include "media/base/mock_filters.h" |
10 #include "net/base/net_errors.h" | 10 #include "net/base/net_errors.h" |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
120 void Redirect(const char* url) { | 120 void Redirect(const char* url) { |
121 GURL redirectUrl(url); | 121 GURL redirectUrl(url); |
122 WebURLRequest newRequest(redirectUrl); | 122 WebURLRequest newRequest(redirectUrl); |
123 WebURLResponse redirectResponse(gurl_); | 123 WebURLResponse redirectResponse(gurl_); |
124 | 124 |
125 data_source_->willSendRequest(url_loader_, newRequest, redirectResponse); | 125 data_source_->willSendRequest(url_loader_, newRequest, redirectResponse); |
126 | 126 |
127 MessageLoop::current()->RunAllPending(); | 127 MessageLoop::current()->RunAllPending(); |
128 } | 128 } |
129 | 129 |
130 void DestroyDataSource() { | 130 void StopAndDestroyDataSource() { |
131 data_source_->Stop(media::NewExpectedClosure()); | 131 data_source_->Stop(media::NewExpectedClosure()); |
132 MessageLoop::current()->RunAllPending(); | 132 MessageLoop::current()->RunAllPending(); |
133 | |
134 data_source_ = NULL; | 133 data_source_ = NULL; |
135 } | 134 } |
136 | 135 |
| 136 void AbortAndDestroyDataSource() { |
| 137 data_source_->Abort(); |
| 138 MessageLoop::current()->RunAllPending(); |
| 139 data_source_ = NULL; |
| 140 } |
| 141 |
137 void AsyncRead() { | 142 void AsyncRead() { |
138 for (int i = 0; i < kDataSize; ++i) { | 143 for (int i = 0; i < kDataSize; ++i) { |
139 uint8 buffer[1]; | 144 uint8 buffer[1]; |
140 | 145 |
141 EXPECT_CALL(*this, ReadCallback(1)); | 146 EXPECT_CALL(*this, ReadCallback(1)); |
142 data_source_->Read( | 147 data_source_->Read( |
143 i, 1, buffer, | 148 i, 1, buffer, |
144 base::Bind(&SimpleDataSourceTest::ReadCallback, | 149 base::Bind(&SimpleDataSourceTest::ReadCallback, |
145 base::Unretained(this))); | 150 base::Unretained(this))); |
146 EXPECT_EQ(static_cast<uint8>(data_[i]), buffer[0]); | 151 EXPECT_EQ(static_cast<uint8>(data_[i]), buffer[0]); |
(...skipping 14 matching lines...) Expand all Loading... |
161 | 166 |
162 char data_[kDataSize]; | 167 char data_[kDataSize]; |
163 | 168 |
164 DISALLOW_COPY_AND_ASSIGN(SimpleDataSourceTest); | 169 DISALLOW_COPY_AND_ASSIGN(SimpleDataSourceTest); |
165 }; | 170 }; |
166 | 171 |
167 TEST_F(SimpleDataSourceTest, InitializeHTTP) { | 172 TEST_F(SimpleDataSourceTest, InitializeHTTP) { |
168 InitializeDataSource(kHttpUrl, | 173 InitializeDataSource(kHttpUrl, |
169 media::NewExpectedStatusCB(media::PIPELINE_OK)); | 174 media::NewExpectedStatusCB(media::PIPELINE_OK)); |
170 RequestSucceeded(); | 175 RequestSucceeded(); |
171 DestroyDataSource(); | 176 StopAndDestroyDataSource(); |
172 } | 177 } |
173 | 178 |
174 TEST_F(SimpleDataSourceTest, InitializeHTTPS) { | 179 TEST_F(SimpleDataSourceTest, InitializeHTTPS) { |
175 InitializeDataSource(kHttpsUrl, | 180 InitializeDataSource(kHttpsUrl, |
176 media::NewExpectedStatusCB(media::PIPELINE_OK)); | 181 media::NewExpectedStatusCB(media::PIPELINE_OK)); |
177 RequestSucceeded(); | 182 RequestSucceeded(); |
178 DestroyDataSource(); | 183 StopAndDestroyDataSource(); |
179 } | 184 } |
180 | 185 |
181 TEST_F(SimpleDataSourceTest, InitializeFile) { | 186 TEST_F(SimpleDataSourceTest, InitializeFile) { |
182 InitializeDataSource(kFileUrl, | 187 InitializeDataSource(kFileUrl, |
183 media::NewExpectedStatusCB(media::PIPELINE_OK)); | 188 media::NewExpectedStatusCB(media::PIPELINE_OK)); |
184 RequestSucceeded(); | 189 RequestSucceeded(); |
185 DestroyDataSource(); | 190 StopAndDestroyDataSource(); |
186 } | 191 } |
187 | 192 |
188 TEST_F(SimpleDataSourceTest, InitializeData) { | 193 TEST_F(SimpleDataSourceTest, InitializeData) { |
189 url_loader_ = new NiceMock<MockWebURLLoader>(); | 194 url_loader_ = new NiceMock<MockWebURLLoader>(); |
190 | 195 |
191 data_source_ = new SimpleDataSource(MessageLoop::current(), | 196 data_source_ = new SimpleDataSource(MessageLoop::current(), |
192 view_->mainFrame()); | 197 view_->mainFrame()); |
193 // There is no need to provide a message loop to data source. | 198 // There is no need to provide a message loop to data source. |
194 data_source_->set_host(&host_); | 199 data_source_->set_host(&host_); |
195 data_source_->SetURLLoaderForTest(url_loader_); | 200 data_source_->SetURLLoaderForTest(url_loader_); |
196 | 201 |
197 EXPECT_CALL(host_, SetTotalBytes(sizeof(kDataUrlDecoded))); | 202 EXPECT_CALL(host_, SetTotalBytes(sizeof(kDataUrlDecoded))); |
198 EXPECT_CALL(host_, SetBufferedBytes(sizeof(kDataUrlDecoded))); | 203 EXPECT_CALL(host_, SetBufferedBytes(sizeof(kDataUrlDecoded))); |
199 | 204 |
200 data_source_->Initialize(GURL(kDataUrl), | 205 data_source_->Initialize(GURL(kDataUrl), |
201 media::NewExpectedStatusCB(media::PIPELINE_OK)); | 206 media::NewExpectedStatusCB(media::PIPELINE_OK)); |
202 MessageLoop::current()->RunAllPending(); | 207 MessageLoop::current()->RunAllPending(); |
203 | 208 |
204 DestroyDataSource(); | 209 StopAndDestroyDataSource(); |
205 } | 210 } |
206 | 211 |
207 TEST_F(SimpleDataSourceTest, RequestFailed) { | 212 TEST_F(SimpleDataSourceTest, RequestFailed) { |
208 InitializeDataSource(kHttpUrl, | 213 InitializeDataSource(kHttpUrl, |
209 media::NewExpectedStatusCB(media::PIPELINE_ERROR_NETWORK)); | 214 media::NewExpectedStatusCB(media::PIPELINE_ERROR_NETWORK)); |
210 RequestFailed(); | 215 RequestFailed(); |
211 DestroyDataSource(); | 216 StopAndDestroyDataSource(); |
212 } | 217 } |
213 | 218 |
214 static void OnStatusCB(bool* called, media::PipelineStatus status) { | 219 static void OnStatusCB(bool* called, media::PipelineStatus status) { |
215 *called = true; | 220 *called = true; |
216 } | 221 } |
217 | 222 |
218 TEST_F(SimpleDataSourceTest, StopWhenDownloading) { | 223 TEST_F(SimpleDataSourceTest, StopWhenDownloading) { |
219 // The callback should be deleted, but not executed. | 224 // The callback should be deleted, but not executed. |
220 // TODO(scherkus): should this really be the behaviour? Seems strange... | 225 // TODO(scherkus): should this really be the behaviour? Seems strange... |
221 bool was_called = false; | 226 bool was_called = false; |
222 InitializeDataSource(kHttpUrl, base::Bind(&OnStatusCB, &was_called)); | 227 InitializeDataSource(kHttpUrl, base::Bind(&OnStatusCB, &was_called)); |
223 | 228 |
224 EXPECT_CALL(*url_loader_, cancel()); | 229 EXPECT_CALL(*url_loader_, cancel()); |
225 DestroyDataSource(); | 230 StopAndDestroyDataSource(); |
226 EXPECT_FALSE(was_called); | 231 EXPECT_FALSE(was_called); |
227 } | 232 } |
228 | 233 |
| 234 TEST_F(SimpleDataSourceTest, AbortWhenDownloading) { |
| 235 // The callback should be deleted, but not executed. |
| 236 // TODO(scherkus): should this really be the behaviour? Seems strange... |
| 237 bool was_called = false; |
| 238 InitializeDataSource(kHttpUrl, base::Bind(&OnStatusCB, &was_called)); |
| 239 |
| 240 EXPECT_CALL(*url_loader_, cancel()); |
| 241 AbortAndDestroyDataSource(); |
| 242 EXPECT_FALSE(was_called); |
| 243 } |
| 244 |
229 TEST_F(SimpleDataSourceTest, AsyncRead) { | 245 TEST_F(SimpleDataSourceTest, AsyncRead) { |
230 InitializeDataSource(kFileUrl, | 246 InitializeDataSource(kFileUrl, |
231 media::NewExpectedStatusCB(media::PIPELINE_OK)); | 247 media::NewExpectedStatusCB(media::PIPELINE_OK)); |
232 RequestSucceeded(); | 248 RequestSucceeded(); |
233 AsyncRead(); | 249 AsyncRead(); |
234 DestroyDataSource(); | 250 StopAndDestroyDataSource(); |
235 } | 251 } |
236 | 252 |
237 // NOTE: This test will need to be reworked a little once | 253 // NOTE: This test will need to be reworked a little once |
238 // http://code.google.com/p/chromium/issues/detail?id=72578 | 254 // http://code.google.com/p/chromium/issues/detail?id=72578 |
239 // is fixed. | 255 // is fixed. |
240 TEST_F(SimpleDataSourceTest, HasSingleOrigin) { | 256 TEST_F(SimpleDataSourceTest, HasSingleOrigin) { |
241 // Make sure no redirect case works as expected. | 257 // Make sure no redirect case works as expected. |
242 InitializeDataSource(kHttpUrl, | 258 InitializeDataSource(kHttpUrl, |
243 media::NewExpectedStatusCB(media::PIPELINE_OK)); | 259 media::NewExpectedStatusCB(media::PIPELINE_OK)); |
244 RequestSucceeded(); | 260 RequestSucceeded(); |
245 EXPECT_TRUE(data_source_->HasSingleOrigin()); | 261 EXPECT_TRUE(data_source_->HasSingleOrigin()); |
246 DestroyDataSource(); | 262 StopAndDestroyDataSource(); |
247 | 263 |
248 // Test redirect to the same domain. | 264 // Test redirect to the same domain. |
249 InitializeDataSource(kHttpUrl, | 265 InitializeDataSource(kHttpUrl, |
250 media::NewExpectedStatusCB(media::PIPELINE_OK)); | 266 media::NewExpectedStatusCB(media::PIPELINE_OK)); |
251 Redirect(kHttpRedirectToSameDomainUrl1); | 267 Redirect(kHttpRedirectToSameDomainUrl1); |
252 RequestSucceeded(); | 268 RequestSucceeded(); |
253 EXPECT_TRUE(data_source_->HasSingleOrigin()); | 269 EXPECT_TRUE(data_source_->HasSingleOrigin()); |
254 DestroyDataSource(); | 270 StopAndDestroyDataSource(); |
255 | 271 |
256 // Test redirect twice to the same domain. | 272 // Test redirect twice to the same domain. |
257 InitializeDataSource(kHttpUrl, | 273 InitializeDataSource(kHttpUrl, |
258 media::NewExpectedStatusCB(media::PIPELINE_OK)); | 274 media::NewExpectedStatusCB(media::PIPELINE_OK)); |
259 Redirect(kHttpRedirectToSameDomainUrl1); | 275 Redirect(kHttpRedirectToSameDomainUrl1); |
260 Redirect(kHttpRedirectToSameDomainUrl2); | 276 Redirect(kHttpRedirectToSameDomainUrl2); |
261 RequestSucceeded(); | 277 RequestSucceeded(); |
262 EXPECT_TRUE(data_source_->HasSingleOrigin()); | 278 EXPECT_TRUE(data_source_->HasSingleOrigin()); |
263 DestroyDataSource(); | 279 StopAndDestroyDataSource(); |
264 | 280 |
265 // Test redirect to a different domain. | 281 // Test redirect to a different domain. |
266 InitializeDataSource(kHttpUrl, | 282 InitializeDataSource(kHttpUrl, |
267 media::NewExpectedStatusCB(media::PIPELINE_OK)); | 283 media::NewExpectedStatusCB(media::PIPELINE_OK)); |
268 Redirect(kHttpRedirectToDifferentDomainUrl1); | 284 Redirect(kHttpRedirectToDifferentDomainUrl1); |
269 RequestSucceeded(); | 285 RequestSucceeded(); |
270 EXPECT_FALSE(data_source_->HasSingleOrigin()); | 286 EXPECT_FALSE(data_source_->HasSingleOrigin()); |
271 DestroyDataSource(); | 287 StopAndDestroyDataSource(); |
272 | 288 |
273 // Test redirect to the same domain and then to a different domain. | 289 // Test redirect to the same domain and then to a different domain. |
274 InitializeDataSource(kHttpUrl, | 290 InitializeDataSource(kHttpUrl, |
275 media::NewExpectedStatusCB(media::PIPELINE_OK)); | 291 media::NewExpectedStatusCB(media::PIPELINE_OK)); |
276 Redirect(kHttpRedirectToSameDomainUrl1); | 292 Redirect(kHttpRedirectToSameDomainUrl1); |
277 Redirect(kHttpRedirectToDifferentDomainUrl1); | 293 Redirect(kHttpRedirectToDifferentDomainUrl1); |
278 RequestSucceeded(); | 294 RequestSucceeded(); |
279 EXPECT_FALSE(data_source_->HasSingleOrigin()); | 295 EXPECT_FALSE(data_source_->HasSingleOrigin()); |
280 DestroyDataSource(); | 296 StopAndDestroyDataSource(); |
281 } | 297 } |
282 | 298 |
283 } // namespace webkit_media | 299 } // namespace webkit_media |
OLD | NEW |