| 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 "base/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/message_loop/message_loop.h" | 6 #include "base/message_loop/message_loop.h" |
| 7 #include "content/public/common/url_constants.h" | 7 #include "content/public/common/url_constants.h" |
| 8 #include "content/renderer/media/buffered_data_source.h" | 8 #include "content/renderer/media/buffered_data_source.h" |
| 9 #include "content/renderer/media/test_response_generator.h" | 9 #include "content/renderer/media/test_response_generator.h" |
| 10 #include "content/test/mock_webframeclient.h" | 10 #include "content/test/mock_webframeclient.h" |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 // Stops any active loaders and shuts down the data source. | 171 // Stops any active loaders and shuts down the data source. |
| 172 // | 172 // |
| 173 // This typically happens when the page is closed and for our purposes is | 173 // This typically happens when the page is closed and for our purposes is |
| 174 // appropriate to do when tearing down a test. | 174 // appropriate to do when tearing down a test. |
| 175 void Stop() { | 175 void Stop() { |
| 176 if (data_source_->loading()) { | 176 if (data_source_->loading()) { |
| 177 loader()->didFail(url_loader(), response_generator_->GenerateError()); | 177 loader()->didFail(url_loader(), response_generator_->GenerateError()); |
| 178 message_loop_.RunUntilIdle(); | 178 message_loop_.RunUntilIdle(); |
| 179 } | 179 } |
| 180 | 180 |
| 181 data_source_->Stop(media::NewExpectedClosure()); | 181 data_source_->Stop(); |
| 182 message_loop_.RunUntilIdle(); | 182 message_loop_.RunUntilIdle(); |
| 183 } | 183 } |
| 184 | 184 |
| 185 void ExpectCreateResourceLoader() { | 185 void ExpectCreateResourceLoader() { |
| 186 EXPECT_CALL(*data_source_, CreateResourceLoader(_, _)) | 186 EXPECT_CALL(*data_source_, CreateResourceLoader(_, _)) |
| 187 .WillOnce(Invoke(data_source_.get(), | 187 .WillOnce(Invoke(data_source_.get(), |
| 188 &MockBufferedDataSource::CreateMockResourceLoader)); | 188 &MockBufferedDataSource::CreateMockResourceLoader)); |
| 189 message_loop_.RunUntilIdle(); | 189 message_loop_.RunUntilIdle(); |
| 190 } | 190 } |
| 191 | 191 |
| (...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 498 } | 498 } |
| 499 | 499 |
| 500 TEST_F(BufferedDataSourceTest, File_Successful) { | 500 TEST_F(BufferedDataSourceTest, File_Successful) { |
| 501 InitializeWithFileResponse(); | 501 InitializeWithFileResponse(); |
| 502 | 502 |
| 503 EXPECT_TRUE(data_source_->loading()); | 503 EXPECT_TRUE(data_source_->loading()); |
| 504 EXPECT_FALSE(data_source_->IsStreaming()); | 504 EXPECT_FALSE(data_source_->IsStreaming()); |
| 505 Stop(); | 505 Stop(); |
| 506 } | 506 } |
| 507 | 507 |
| 508 static void SetTrue(bool* value) { | |
| 509 *value = true; | |
| 510 } | |
| 511 | |
| 512 // This test makes sure that Stop() does not require a task to run on | |
| 513 // |message_loop_| before it calls its callback. This prevents accidental | |
| 514 // introduction of a pipeline teardown deadlock. The pipeline owner blocks | |
| 515 // the render message loop while waiting for Stop() to complete. Since this | |
| 516 // object runs on the render message loop, Stop() will not complete if it | |
| 517 // requires a task to run on the the message loop that is being blocked. | |
| 518 TEST_F(BufferedDataSourceTest, StopDoesNotUseMessageLoopForCallback) { | |
| 519 InitializeWith206Response(); | |
| 520 | |
| 521 // Stop() the data source, using a callback that lets us verify that it was | |
| 522 // called before Stop() returns. This is to make sure that the callback does | |
| 523 // not require |message_loop_| to execute tasks before being called. | |
| 524 bool stop_done_called = false; | |
| 525 EXPECT_TRUE(data_source_->loading()); | |
| 526 data_source_->Stop(base::Bind(&SetTrue, &stop_done_called)); | |
| 527 | |
| 528 // Verify that the callback was called inside the Stop() call. | |
| 529 EXPECT_TRUE(stop_done_called); | |
| 530 message_loop_.RunUntilIdle(); | |
| 531 } | |
| 532 | |
| 533 TEST_F(BufferedDataSourceTest, StopDuringRead) { | 508 TEST_F(BufferedDataSourceTest, StopDuringRead) { |
| 534 InitializeWith206Response(); | 509 InitializeWith206Response(); |
| 535 | 510 |
| 536 uint8 buffer[256]; | 511 uint8 buffer[256]; |
| 537 data_source_->Read(0, arraysize(buffer), buffer, base::Bind( | 512 data_source_->Read(0, arraysize(buffer), buffer, base::Bind( |
| 538 &BufferedDataSourceTest::ReadCallback, base::Unretained(this))); | 513 &BufferedDataSourceTest::ReadCallback, base::Unretained(this))); |
| 539 | 514 |
| 540 // The outstanding read should fail before the stop callback runs. | 515 // The outstanding read should fail before the stop callback runs. |
| 541 { | 516 { |
| 542 InSequence s; | 517 InSequence s; |
| 543 EXPECT_CALL(*this, ReadCallback(media::DataSource::kReadError)); | 518 EXPECT_CALL(*this, ReadCallback(media::DataSource::kReadError)); |
| 544 data_source_->Stop(media::NewExpectedClosure()); | 519 data_source_->Stop(); |
| 545 } | 520 } |
| 546 message_loop_.RunUntilIdle(); | 521 message_loop_.RunUntilIdle(); |
| 547 } | 522 } |
| 548 | 523 |
| 549 TEST_F(BufferedDataSourceTest, DefaultValues) { | 524 TEST_F(BufferedDataSourceTest, DefaultValues) { |
| 550 InitializeWith206Response(); | 525 InitializeWith206Response(); |
| 551 | 526 |
| 552 // Ensure we have sane values for default loading scenario. | 527 // Ensure we have sane values for default loading scenario. |
| 553 EXPECT_EQ(AUTO, preload()); | 528 EXPECT_EQ(AUTO, preload()); |
| 554 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | 529 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 796 data_source_->MediaIsPlaying(); | 771 data_source_->MediaIsPlaying(); |
| 797 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | 772 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); |
| 798 set_might_be_reused_from_cache_in_future(false); | 773 set_might_be_reused_from_cache_in_future(false); |
| 799 data_source_->MediaIsPaused(); | 774 data_source_->MediaIsPaused(); |
| 800 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | 775 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); |
| 801 | 776 |
| 802 Stop(); | 777 Stop(); |
| 803 } | 778 } |
| 804 | 779 |
| 805 } // namespace content | 780 } // namespace content |
| OLD | NEW |