OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "media/base/filters.h" | 6 #include "media/base/filters.h" |
6 #include "media/base/mock_callback.h" | 7 #include "media/base/mock_callback.h" |
7 #include "media/base/mock_filter_host.h" | 8 #include "media/base/mock_filter_host.h" |
8 #include "media/base/mock_filters.h" | 9 #include "media/base/mock_filters.h" |
9 #include "net/base/net_errors.h" | 10 #include "net/base/net_errors.h" |
10 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLError.h" | 11 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLError.h" |
11 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLLoader.h" | 12 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLLoader.h" |
12 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLRequest.h" | 13 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLRequest.h" |
13 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLResponse.h" | 14 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLResponse.h" |
14 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" | 15 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 for (int i = 0; i < kDataSize; ++i) { | 58 for (int i = 0; i < kDataSize; ++i) { |
58 data_[i] = i; | 59 data_[i] = i; |
59 } | 60 } |
60 } | 61 } |
61 | 62 |
62 virtual ~SimpleDataSourceTest() { | 63 virtual ~SimpleDataSourceTest() { |
63 view_->close(); | 64 view_->close(); |
64 } | 65 } |
65 | 66 |
66 void InitializeDataSource(const char* url, | 67 void InitializeDataSource(const char* url, |
67 media::MockStatusCallback* callback) { | 68 const media::PipelineStatusCB& callback) { |
68 gurl_ = GURL(url); | 69 gurl_ = GURL(url); |
69 | 70 |
70 url_loader_ = new NiceMock<MockWebURLLoader>(); | 71 url_loader_ = new NiceMock<MockWebURLLoader>(); |
71 | 72 |
72 data_source_ = new SimpleDataSource(MessageLoop::current(), | 73 data_source_ = new SimpleDataSource(MessageLoop::current(), |
73 view_->mainFrame()); | 74 view_->mainFrame()); |
74 | 75 |
75 // There is no need to provide a message loop to data source. | 76 // There is no need to provide a message loop to data source. |
76 data_source_->set_host(&host_); | 77 data_source_->set_host(&host_); |
77 data_source_->SetURLLoaderForTest(url_loader_); | 78 data_source_->SetURLLoaderForTest(url_loader_); |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
157 MockWebFrameClient client_; | 158 MockWebFrameClient client_; |
158 WebView* view_; | 159 WebView* view_; |
159 | 160 |
160 char data_[kDataSize]; | 161 char data_[kDataSize]; |
161 | 162 |
162 DISALLOW_COPY_AND_ASSIGN(SimpleDataSourceTest); | 163 DISALLOW_COPY_AND_ASSIGN(SimpleDataSourceTest); |
163 }; | 164 }; |
164 | 165 |
165 TEST_F(SimpleDataSourceTest, InitializeHTTP) { | 166 TEST_F(SimpleDataSourceTest, InitializeHTTP) { |
166 InitializeDataSource(kHttpUrl, | 167 InitializeDataSource(kHttpUrl, |
167 media::NewExpectedStatusCallback(media::PIPELINE_OK)); | 168 media::NewExpectedStatusCB(media::PIPELINE_OK)); |
168 RequestSucceeded(false); | 169 RequestSucceeded(false); |
169 DestroyDataSource(); | 170 DestroyDataSource(); |
170 } | 171 } |
171 | 172 |
172 TEST_F(SimpleDataSourceTest, InitializeHTTPS) { | 173 TEST_F(SimpleDataSourceTest, InitializeHTTPS) { |
173 InitializeDataSource(kHttpsUrl, | 174 InitializeDataSource(kHttpsUrl, |
174 media::NewExpectedStatusCallback(media::PIPELINE_OK)); | 175 media::NewExpectedStatusCB(media::PIPELINE_OK)); |
175 RequestSucceeded(false); | 176 RequestSucceeded(false); |
176 DestroyDataSource(); | 177 DestroyDataSource(); |
177 } | 178 } |
178 | 179 |
179 TEST_F(SimpleDataSourceTest, InitializeFile) { | 180 TEST_F(SimpleDataSourceTest, InitializeFile) { |
180 InitializeDataSource(kFileUrl, | 181 InitializeDataSource(kFileUrl, |
181 media::NewExpectedStatusCallback(media::PIPELINE_OK)); | 182 media::NewExpectedStatusCB(media::PIPELINE_OK)); |
182 RequestSucceeded(true); | 183 RequestSucceeded(true); |
183 DestroyDataSource(); | 184 DestroyDataSource(); |
184 } | 185 } |
185 | 186 |
186 TEST_F(SimpleDataSourceTest, InitializeData) { | 187 TEST_F(SimpleDataSourceTest, InitializeData) { |
187 url_loader_ = new NiceMock<MockWebURLLoader>(); | 188 url_loader_ = new NiceMock<MockWebURLLoader>(); |
188 | 189 |
189 data_source_ = new SimpleDataSource(MessageLoop::current(), | 190 data_source_ = new SimpleDataSource(MessageLoop::current(), |
190 view_->mainFrame()); | 191 view_->mainFrame()); |
191 // There is no need to provide a message loop to data source. | 192 // There is no need to provide a message loop to data source. |
192 data_source_->set_host(&host_); | 193 data_source_->set_host(&host_); |
193 data_source_->SetURLLoaderForTest(url_loader_); | 194 data_source_->SetURLLoaderForTest(url_loader_); |
194 | 195 |
195 EXPECT_CALL(host_, SetLoaded(true)); | 196 EXPECT_CALL(host_, SetLoaded(true)); |
196 EXPECT_CALL(host_, SetTotalBytes(sizeof(kDataUrlDecoded))); | 197 EXPECT_CALL(host_, SetTotalBytes(sizeof(kDataUrlDecoded))); |
197 EXPECT_CALL(host_, SetBufferedBytes(sizeof(kDataUrlDecoded))); | 198 EXPECT_CALL(host_, SetBufferedBytes(sizeof(kDataUrlDecoded))); |
198 | 199 |
199 data_source_->Initialize(kDataUrl, | 200 data_source_->Initialize(kDataUrl, |
200 media::NewExpectedStatusCallback(media::PIPELINE_OK)); | 201 media::NewExpectedStatusCB(media::PIPELINE_OK)); |
201 MessageLoop::current()->RunAllPending(); | 202 MessageLoop::current()->RunAllPending(); |
202 | 203 |
203 DestroyDataSource(); | 204 DestroyDataSource(); |
204 } | 205 } |
205 | 206 |
206 TEST_F(SimpleDataSourceTest, RequestFailed) { | 207 TEST_F(SimpleDataSourceTest, RequestFailed) { |
207 InitializeDataSource(kHttpUrl, | 208 InitializeDataSource(kHttpUrl, |
208 media::NewExpectedStatusCallback(media::PIPELINE_ERROR_NETWORK)); | 209 media::NewExpectedStatusCB(media::PIPELINE_ERROR_NETWORK)); |
209 RequestFailed(); | 210 RequestFailed(); |
210 DestroyDataSource(); | 211 DestroyDataSource(); |
211 } | 212 } |
212 | 213 |
| 214 static void OnStatusCB(bool* called, media::PipelineStatus status) { |
| 215 *called = true; |
| 216 } |
| 217 |
213 TEST_F(SimpleDataSourceTest, StopWhenDownloading) { | 218 TEST_F(SimpleDataSourceTest, StopWhenDownloading) { |
214 // The callback should be deleted, but not executed. | 219 // The callback should be deleted, but not executed. |
215 // TODO(scherkus): should this really be the behaviour? Seems strange... | 220 // TODO(scherkus): should this really be the behaviour? Seems strange... |
216 StrictMock<media::MockStatusCallback>* callback = | 221 bool was_called = false; |
217 new StrictMock<media::MockStatusCallback>(); | 222 InitializeDataSource(kHttpUrl, base::Bind(&OnStatusCB, &was_called)); |
218 EXPECT_CALL(*callback, Destructor()); | |
219 | |
220 InitializeDataSource(kHttpUrl, callback); | |
221 | 223 |
222 EXPECT_CALL(*url_loader_, cancel()); | 224 EXPECT_CALL(*url_loader_, cancel()); |
223 DestroyDataSource(); | 225 DestroyDataSource(); |
| 226 EXPECT_FALSE(was_called); |
224 } | 227 } |
225 | 228 |
226 TEST_F(SimpleDataSourceTest, AsyncRead) { | 229 TEST_F(SimpleDataSourceTest, AsyncRead) { |
227 InitializeDataSource(kFileUrl, | 230 InitializeDataSource(kFileUrl, |
228 media::NewExpectedStatusCallback(media::PIPELINE_OK)); | 231 media::NewExpectedStatusCB(media::PIPELINE_OK)); |
229 RequestSucceeded(true); | 232 RequestSucceeded(true); |
230 AsyncRead(); | 233 AsyncRead(); |
231 DestroyDataSource(); | 234 DestroyDataSource(); |
232 } | 235 } |
233 | 236 |
234 // NOTE: This test will need to be reworked a little once | 237 // NOTE: This test will need to be reworked a little once |
235 // http://code.google.com/p/chromium/issues/detail?id=72578 | 238 // http://code.google.com/p/chromium/issues/detail?id=72578 |
236 // is fixed. | 239 // is fixed. |
237 TEST_F(SimpleDataSourceTest, HasSingleOrigin) { | 240 TEST_F(SimpleDataSourceTest, HasSingleOrigin) { |
238 // Make sure no redirect case works as expected. | 241 // Make sure no redirect case works as expected. |
239 InitializeDataSource(kHttpUrl, | 242 InitializeDataSource(kHttpUrl, |
240 media::NewExpectedStatusCallback(media::PIPELINE_OK)); | 243 media::NewExpectedStatusCB(media::PIPELINE_OK)); |
241 RequestSucceeded(false); | 244 RequestSucceeded(false); |
242 EXPECT_TRUE(data_source_->HasSingleOrigin()); | 245 EXPECT_TRUE(data_source_->HasSingleOrigin()); |
243 DestroyDataSource(); | 246 DestroyDataSource(); |
244 | 247 |
245 // Test redirect to the same domain. | 248 // Test redirect to the same domain. |
246 InitializeDataSource(kHttpUrl, | 249 InitializeDataSource(kHttpUrl, |
247 media::NewExpectedStatusCallback(media::PIPELINE_OK)); | 250 media::NewExpectedStatusCB(media::PIPELINE_OK)); |
248 Redirect(kHttpRedirectToSameDomainUrl1); | 251 Redirect(kHttpRedirectToSameDomainUrl1); |
249 RequestSucceeded(false); | 252 RequestSucceeded(false); |
250 EXPECT_TRUE(data_source_->HasSingleOrigin()); | 253 EXPECT_TRUE(data_source_->HasSingleOrigin()); |
251 DestroyDataSource(); | 254 DestroyDataSource(); |
252 | 255 |
253 // Test redirect twice to the same domain. | 256 // Test redirect twice to the same domain. |
254 InitializeDataSource(kHttpUrl, | 257 InitializeDataSource(kHttpUrl, |
255 media::NewExpectedStatusCallback(media::PIPELINE_OK)); | 258 media::NewExpectedStatusCB(media::PIPELINE_OK)); |
256 Redirect(kHttpRedirectToSameDomainUrl1); | 259 Redirect(kHttpRedirectToSameDomainUrl1); |
257 Redirect(kHttpRedirectToSameDomainUrl2); | 260 Redirect(kHttpRedirectToSameDomainUrl2); |
258 RequestSucceeded(false); | 261 RequestSucceeded(false); |
259 EXPECT_TRUE(data_source_->HasSingleOrigin()); | 262 EXPECT_TRUE(data_source_->HasSingleOrigin()); |
260 DestroyDataSource(); | 263 DestroyDataSource(); |
261 | 264 |
262 // Test redirect to a different domain. | 265 // Test redirect to a different domain. |
263 InitializeDataSource(kHttpUrl, | 266 InitializeDataSource(kHttpUrl, |
264 media::NewExpectedStatusCallback(media::PIPELINE_OK)); | 267 media::NewExpectedStatusCB(media::PIPELINE_OK)); |
265 Redirect(kHttpRedirectToDifferentDomainUrl1); | 268 Redirect(kHttpRedirectToDifferentDomainUrl1); |
266 RequestSucceeded(false); | 269 RequestSucceeded(false); |
267 EXPECT_FALSE(data_source_->HasSingleOrigin()); | 270 EXPECT_FALSE(data_source_->HasSingleOrigin()); |
268 DestroyDataSource(); | 271 DestroyDataSource(); |
269 | 272 |
270 // Test redirect to the same domain and then to a different domain. | 273 // Test redirect to the same domain and then to a different domain. |
271 InitializeDataSource(kHttpUrl, | 274 InitializeDataSource(kHttpUrl, |
272 media::NewExpectedStatusCallback(media::PIPELINE_OK)); | 275 media::NewExpectedStatusCB(media::PIPELINE_OK)); |
273 Redirect(kHttpRedirectToSameDomainUrl1); | 276 Redirect(kHttpRedirectToSameDomainUrl1); |
274 Redirect(kHttpRedirectToDifferentDomainUrl1); | 277 Redirect(kHttpRedirectToDifferentDomainUrl1); |
275 RequestSucceeded(false); | 278 RequestSucceeded(false); |
276 EXPECT_FALSE(data_source_->HasSingleOrigin()); | 279 EXPECT_FALSE(data_source_->HasSingleOrigin()); |
277 DestroyDataSource(); | 280 DestroyDataSource(); |
278 } | 281 } |
279 | 282 |
280 } // namespace webkit_glue | 283 } // namespace webkit_glue |
OLD | NEW |