| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <stdint.h> | 5 #include <stdint.h> |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/macros.h" | 8 #include "base/macros.h" |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
| (...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 289 return loader()->defer_strategy_; | 289 return loader()->defer_strategy_; |
| 290 } | 290 } |
| 291 int data_source_bitrate() { return data_source_->bitrate_; } | 291 int data_source_bitrate() { return data_source_->bitrate_; } |
| 292 double data_source_playback_rate() { return data_source_->playback_rate_; } | 292 double data_source_playback_rate() { return data_source_->playback_rate_; } |
| 293 int loader_bitrate() { return loader()->bitrate_; } | 293 int loader_bitrate() { return loader()->bitrate_; } |
| 294 double loader_playback_rate() { return loader()->playback_rate_; } | 294 double loader_playback_rate() { return loader()->playback_rate_; } |
| 295 bool is_local_source() { return data_source_->assume_fully_buffered(); } | 295 bool is_local_source() { return data_source_->assume_fully_buffered(); } |
| 296 void set_might_be_reused_from_cache_in_future(bool value) { | 296 void set_might_be_reused_from_cache_in_future(bool value) { |
| 297 loader()->might_be_reused_from_cache_in_future_ = value; | 297 loader()->might_be_reused_from_cache_in_future_ = value; |
| 298 } | 298 } |
| 299 GURL url() { return data_source_->url_; } |
| 299 | 300 |
| 300 std::unique_ptr<MockBufferedDataSource> data_source_; | 301 std::unique_ptr<MockBufferedDataSource> data_source_; |
| 301 | 302 |
| 302 std::unique_ptr<TestResponseGenerator> response_generator_; | 303 std::unique_ptr<TestResponseGenerator> response_generator_; |
| 303 MockWebFrameClient client_; | 304 MockWebFrameClient client_; |
| 304 WebView* view_; | 305 WebView* view_; |
| 305 WebLocalFrame* frame_; | 306 WebLocalFrame* frame_; |
| 306 | 307 |
| 307 StrictMock<MockBufferedDataSourceHost> host_; | 308 StrictMock<MockBufferedDataSourceHost> host_; |
| 308 base::MessageLoop message_loop_; | 309 base::MessageLoop message_loop_; |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 492 bytes_received_ = 0; | 493 bytes_received_ = 0; |
| 493 loader()->didFail(url_loader(), response_generator_->GenerateError()); | 494 loader()->didFail(url_loader(), response_generator_->GenerateError()); |
| 494 run_loop.Run(); | 495 run_loop.Run(); |
| 495 Respond(response_generator_->Generate206(kDataSize)); | 496 Respond(response_generator_->Generate206(kDataSize)); |
| 496 ReceiveData(kDataSize); | 497 ReceiveData(kDataSize); |
| 497 FinishLoading(); | 498 FinishLoading(); |
| 498 EXPECT_FALSE(data_source_->loading()); | 499 EXPECT_FALSE(data_source_->loading()); |
| 499 Stop(); | 500 Stop(); |
| 500 } | 501 } |
| 501 | 502 |
| 503 // If the initial response is a redirect, BDS saves it and uses it for future |
| 504 // requests. |
| 505 TEST_F(BufferedDataSourceTest, Http_InitialReponseRedirectsAreCached) { |
| 506 Initialize(kHttpUrl, true); |
| 507 |
| 508 WebURLResponse redirect = |
| 509 response_generator_->GeneratePartial206(0, kDataSize - 1); |
| 510 redirect.setURL(GURL(kHttpDifferentPathUrl)); |
| 511 |
| 512 EXPECT_CALL(host_, SetTotalBytes(kFileSize)); |
| 513 Respond(redirect); |
| 514 ASSERT_TRUE(url() == GURL(kHttpDifferentPathUrl)); |
| 515 } |
| 516 |
| 517 TEST_F(BufferedDataSourceTest, |
| 518 Http_RedirectsAfterTheInitialReponseAreNotCached) { |
| 519 Initialize(kHttpUrl, true); |
| 520 |
| 521 WebURLResponse response = |
| 522 response_generator_->GeneratePartial206(0, kDataSize - 1); |
| 523 response.setURL(GURL(kHttpUrl)); |
| 524 |
| 525 EXPECT_CALL(host_, SetTotalBytes(kFileSize)); |
| 526 EXPECT_CALL(host_, AddBufferedByteRange(0, kDataSize - 1)); |
| 527 EXPECT_CALL(host_, AddBufferedByteRange(kDataSize, kDataSize * 2 - 1)); |
| 528 EXPECT_CALL(*this, ReadCallback(kDataSize)).Times(2); |
| 529 |
| 530 Respond(response); |
| 531 ReadAt(0); |
| 532 ReceiveData(kDataSize); |
| 533 |
| 534 WebURLResponse redirect = |
| 535 response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1); |
| 536 redirect.setURL(GURL(kHttpDifferentPathUrl)); |
| 537 |
| 538 ExpectCreateResourceLoader(); |
| 539 FinishLoading(); |
| 540 ReadAt(kDataSize); |
| 541 Respond(redirect); |
| 542 // The redirect isn't cached. |
| 543 ASSERT_TRUE(url() == GURL(kHttpUrl)); |
| 544 ReceiveData(kDataSize); |
| 545 FinishLoading(); |
| 546 Stop(); |
| 547 } |
| 548 |
| 549 TEST_F(BufferedDataSourceTest, Http_ServiceWorkerRedirectsAreNotCached) { |
| 550 Initialize(kHttpUrl, true); |
| 551 |
| 552 WebURLResponse redirect = |
| 553 response_generator_->GeneratePartial206(0, kDataSize - 1); |
| 554 redirect.setURL(GURL(kHttpDifferentPathUrl)); |
| 555 redirect.setWasFetchedViaServiceWorker(true); |
| 556 |
| 557 EXPECT_CALL(host_, SetTotalBytes(kFileSize)); |
| 558 Respond(redirect); |
| 559 ASSERT_TRUE(url() == GURL(kHttpUrl)); |
| 560 } |
| 561 |
| 502 TEST_F(BufferedDataSourceTest, Http_PartialResponse) { | 562 TEST_F(BufferedDataSourceTest, Http_PartialResponse) { |
| 503 Initialize(kHttpUrl, true); | 563 Initialize(kHttpUrl, true); |
| 504 WebURLResponse response1 = | 564 WebURLResponse response1 = |
| 505 response_generator_->GeneratePartial206(0, kDataSize - 1); | 565 response_generator_->GeneratePartial206(0, kDataSize - 1); |
| 506 WebURLResponse response2 = | 566 WebURLResponse response2 = |
| 507 response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1); | 567 response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1); |
| 508 // The origin URL of response1 and response2 are same. So no error should | 568 // The origin URL of response1 and response2 are same. So no error should |
| 509 // occur. | 569 // occur. |
| 510 ExecuteMixedResponseSuccessTest(response1, response2); | 570 ExecuteMixedResponseSuccessTest(response1, response2); |
| 511 } | 571 } |
| (...skipping 531 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1043 while (active_loader() && !active_loader()->deferred()) { | 1103 while (active_loader() && !active_loader()->deferred()) { |
| 1044 ReceiveData(kDataSize); | 1104 ReceiveData(kDataSize); |
| 1045 bytes_received += kDataSize; | 1105 bytes_received += kDataSize; |
| 1046 } | 1106 } |
| 1047 EXPECT_GT(bytes_received, 0); | 1107 EXPECT_GT(bytes_received, 0); |
| 1048 EXPECT_LT(bytes_received + kDataSize, kFileSize); | 1108 EXPECT_LT(bytes_received + kDataSize, kFileSize); |
| 1049 EXPECT_FALSE(active_loader()); | 1109 EXPECT_FALSE(active_loader()); |
| 1050 } | 1110 } |
| 1051 | 1111 |
| 1052 } // namespace media | 1112 } // namespace media |
| OLD | NEW |