| 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 |