Chromium Code Reviews| 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 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 130 data_source_->Initialize( | 130 data_source_->Initialize( |
| 131 gurl, BufferedResourceLoader::kUnspecified, base::Bind( | 131 gurl, BufferedResourceLoader::kUnspecified, base::Bind( |
| 132 &BufferedDataSourceTest::OnInitialize, base::Unretained(this))); | 132 &BufferedDataSourceTest::OnInitialize, base::Unretained(this))); |
| 133 message_loop_.RunUntilIdle(); | 133 message_loop_.RunUntilIdle(); |
| 134 | 134 |
| 135 bool is_http = | 135 bool is_http = |
| 136 gurl.SchemeIs(url::kHttpScheme) || gurl.SchemeIs(url::kHttpsScheme); | 136 gurl.SchemeIs(url::kHttpScheme) || gurl.SchemeIs(url::kHttpsScheme); |
| 137 EXPECT_EQ(data_source_->downloading(), is_http); | 137 EXPECT_EQ(data_source_->downloading(), is_http); |
| 138 } | 138 } |
| 139 | 139 |
| 140 // Helper to initialize tests with a valid 200 response. | |
| 141 void InitializeWith200Response() { | |
| 142 Initialize(kHttpUrl, true); | |
| 143 | |
| 144 EXPECT_CALL(host_, SetTotalBytes(response_generator_->content_length())); | |
| 145 Respond(response_generator_->Generate200()); | |
| 146 } | |
| 147 | |
| 140 // Helper to initialize tests with a valid 206 response. | 148 // Helper to initialize tests with a valid 206 response. |
| 141 void InitializeWith206Response() { | 149 void InitializeWith206Response() { |
| 142 Initialize(kHttpUrl, true); | 150 Initialize(kHttpUrl, true); |
| 143 | 151 |
| 144 EXPECT_CALL(host_, SetTotalBytes(response_generator_->content_length())); | 152 EXPECT_CALL(host_, SetTotalBytes(response_generator_->content_length())); |
| 145 Respond(response_generator_->Generate206(0)); | 153 Respond(response_generator_->Generate206(0)); |
| 146 } | 154 } |
| 147 | 155 |
| 148 // Helper to initialize tests with a valid file:// response. | 156 // Helper to initialize tests with a valid file:// response. |
| 149 void InitializeWithFileResponse() { | 157 void InitializeWithFileResponse() { |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 212 } | 220 } |
| 213 | 221 |
| 214 Preload preload() { return data_source_->preload_; } | 222 Preload preload() { return data_source_->preload_; } |
| 215 BufferedResourceLoader::DeferStrategy defer_strategy() { | 223 BufferedResourceLoader::DeferStrategy defer_strategy() { |
| 216 return loader()->defer_strategy_; | 224 return loader()->defer_strategy_; |
| 217 } | 225 } |
| 218 int data_source_bitrate() { return data_source_->bitrate_; } | 226 int data_source_bitrate() { return data_source_->bitrate_; } |
| 219 int data_source_playback_rate() { return data_source_->playback_rate_; } | 227 int data_source_playback_rate() { return data_source_->playback_rate_; } |
| 220 int loader_bitrate() { return loader()->bitrate_; } | 228 int loader_bitrate() { return loader()->bitrate_; } |
| 221 int loader_playback_rate() { return loader()->playback_rate_; } | 229 int loader_playback_rate() { return loader()->playback_rate_; } |
| 230 bool is_local_source() { return data_source_->assume_fully_buffered_; } | |
| 231 void set_might_be_reused_from_cache_in_future(bool value) { | |
|
amogh.bihani
2014/06/03 10:15:43
I have explained why we need it here in comments i
| |
| 232 loader()->might_be_reused_from_cache_in_future_ = value; | |
| 233 } | |
| 222 | 234 |
| 223 scoped_ptr<MockBufferedDataSource> data_source_; | 235 scoped_ptr<MockBufferedDataSource> data_source_; |
| 224 | 236 |
| 225 scoped_ptr<TestResponseGenerator> response_generator_; | 237 scoped_ptr<TestResponseGenerator> response_generator_; |
| 226 MockWebFrameClient client_; | 238 MockWebFrameClient client_; |
| 227 WebView* view_; | 239 WebView* view_; |
| 228 WebLocalFrame* frame_; | 240 WebLocalFrame* frame_; |
| 229 | 241 |
| 230 StrictMock<MockBufferedDataSourceHost> host_; | 242 StrictMock<MockBufferedDataSourceHost> host_; |
| 231 base::MessageLoop message_loop_; | 243 base::MessageLoop message_loop_; |
| 232 | 244 |
| 233 private: | 245 private: |
| 234 // Used for calling BufferedDataSource::Read(). | 246 // Used for calling BufferedDataSource::Read(). |
| 235 uint8 buffer_[kDataSize]; | 247 uint8 buffer_[kDataSize]; |
| 236 | 248 |
| 237 DISALLOW_COPY_AND_ASSIGN(BufferedDataSourceTest); | 249 DISALLOW_COPY_AND_ASSIGN(BufferedDataSourceTest); |
| 238 }; | 250 }; |
| 239 | 251 |
| 240 TEST_F(BufferedDataSourceTest, Range_Supported) { | 252 TEST_F(BufferedDataSourceTest, Range_Supported) { |
| 241 Initialize(kHttpUrl, true); | 253 InitializeWith206Response(); |
| 242 | |
| 243 EXPECT_CALL(host_, SetTotalBytes(response_generator_->content_length())); | |
| 244 Respond(response_generator_->Generate206(0)); | |
| 245 | 254 |
| 246 EXPECT_TRUE(data_source_->loading()); | 255 EXPECT_TRUE(data_source_->loading()); |
| 247 EXPECT_FALSE(data_source_->IsStreaming()); | 256 EXPECT_FALSE(data_source_->IsStreaming()); |
| 248 Stop(); | 257 Stop(); |
| 249 } | 258 } |
| 250 | 259 |
| 251 TEST_F(BufferedDataSourceTest, Range_InstanceSizeUnknown) { | 260 TEST_F(BufferedDataSourceTest, Range_InstanceSizeUnknown) { |
| 252 Initialize(kHttpUrl, true); | 261 Initialize(kHttpUrl, true); |
| 253 | 262 |
| 254 Respond(response_generator_->Generate206( | 263 Respond(response_generator_->Generate206( |
| 255 0, TestResponseGenerator::kNoContentRangeInstanceSize)); | 264 0, TestResponseGenerator::kNoContentRangeInstanceSize)); |
| 256 | 265 |
| 257 EXPECT_TRUE(data_source_->loading()); | 266 EXPECT_TRUE(data_source_->loading()); |
| 258 EXPECT_TRUE(data_source_->IsStreaming()); | 267 EXPECT_TRUE(data_source_->IsStreaming()); |
| 259 Stop(); | 268 Stop(); |
| 260 } | 269 } |
| 261 | 270 |
| 262 TEST_F(BufferedDataSourceTest, Range_NotFound) { | 271 TEST_F(BufferedDataSourceTest, Range_NotFound) { |
| 263 Initialize(kHttpUrl, false); | 272 Initialize(kHttpUrl, false); |
| 264 Respond(response_generator_->Generate404()); | 273 Respond(response_generator_->Generate404()); |
| 265 | 274 |
| 266 EXPECT_FALSE(data_source_->loading()); | 275 EXPECT_FALSE(data_source_->loading()); |
| 267 Stop(); | 276 Stop(); |
| 268 } | 277 } |
| 269 | 278 |
| 270 TEST_F(BufferedDataSourceTest, Range_NotSupported) { | 279 TEST_F(BufferedDataSourceTest, Range_NotSupported) { |
| 271 Initialize(kHttpUrl, true); | 280 InitializeWith200Response(); |
| 272 EXPECT_CALL(host_, SetTotalBytes(response_generator_->content_length())); | |
| 273 Respond(response_generator_->Generate200()); | |
| 274 | 281 |
| 275 EXPECT_TRUE(data_source_->loading()); | 282 EXPECT_TRUE(data_source_->loading()); |
| 276 EXPECT_TRUE(data_source_->IsStreaming()); | 283 EXPECT_TRUE(data_source_->IsStreaming()); |
| 277 Stop(); | 284 Stop(); |
| 278 } | 285 } |
| 279 | 286 |
| 280 // Special carve-out for Apache versions that choose to return a 200 for | 287 // Special carve-out for Apache versions that choose to return a 200 for |
| 281 // Range:0- ("because it's more efficient" than a 206) | 288 // Range:0- ("because it's more efficient" than a 206) |
| 282 TEST_F(BufferedDataSourceTest, Range_SupportedButReturned200) { | 289 TEST_F(BufferedDataSourceTest, Range_SupportedButReturned200) { |
| 283 Initialize(kHttpUrl, true); | 290 Initialize(kHttpUrl, true); |
| (...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 662 TEST_F(BufferedDataSourceTest, File_FinishLoading) { | 669 TEST_F(BufferedDataSourceTest, File_FinishLoading) { |
| 663 InitializeWithFileResponse(); | 670 InitializeWithFileResponse(); |
| 664 | 671 |
| 665 EXPECT_FALSE(data_source_->downloading()); | 672 EXPECT_FALSE(data_source_->downloading()); |
| 666 FinishLoading(); | 673 FinishLoading(); |
| 667 EXPECT_FALSE(data_source_->downloading()); | 674 EXPECT_FALSE(data_source_->downloading()); |
| 668 | 675 |
| 669 Stop(); | 676 Stop(); |
| 670 } | 677 } |
| 671 | 678 |
| 679 TEST_F(BufferedDataSourceTest, LocalResource_DeferStrategy) { | |
| 680 InitializeWithFileResponse(); | |
| 681 | |
| 682 EXPECT_EQ(AUTO, preload()); | |
| 683 EXPECT_TRUE(is_local_source()); | |
| 684 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
| 685 | |
| 686 data_source_->MediaIsPlaying(); | |
| 687 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
| 688 | |
| 689 data_source_->MediaIsPaused(); | |
| 690 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
| 691 | |
| 692 Stop(); | |
| 693 } | |
| 694 | |
| 695 TEST_F(BufferedDataSourceTest, LocalResource_PreloadMetadata_DeferStrategy) { | |
| 696 data_source_->SetPreload(METADATA); | |
| 697 InitializeWithFileResponse(); | |
| 698 | |
| 699 EXPECT_EQ(METADATA, preload()); | |
| 700 EXPECT_TRUE(is_local_source()); | |
| 701 EXPECT_EQ(BufferedResourceLoader::kReadThenDefer, defer_strategy()); | |
| 702 | |
| 703 data_source_->MediaIsPlaying(); | |
| 704 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
| 705 | |
| 706 data_source_->MediaIsPaused(); | |
| 707 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
| 708 | |
| 709 Stop(); | |
| 710 } | |
| 711 | |
| 712 TEST_F(BufferedDataSourceTest, ExternalResource_Reponse200_DeferStrategy) { | |
| 713 InitializeWith200Response(); | |
| 714 | |
| 715 EXPECT_EQ(AUTO, preload()); | |
| 716 EXPECT_FALSE(is_local_source()); | |
| 717 EXPECT_FALSE(loader()->range_supported()); | |
| 718 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
| 719 | |
| 720 data_source_->MediaIsPlaying(); | |
| 721 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
| 722 | |
| 723 data_source_->MediaIsPaused(); | |
| 724 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
| 725 | |
| 726 Stop(); | |
| 727 } | |
| 728 | |
| 729 TEST_F(BufferedDataSourceTest, | |
| 730 ExternalResource_Response200_PreloadMetadata_DeferStrategy) { | |
| 731 data_source_->SetPreload(METADATA); | |
| 732 InitializeWith200Response(); | |
| 733 | |
| 734 EXPECT_EQ(METADATA, preload()); | |
| 735 EXPECT_FALSE(is_local_source()); | |
| 736 EXPECT_FALSE(loader()->range_supported()); | |
| 737 EXPECT_EQ(BufferedResourceLoader::kReadThenDefer, defer_strategy()); | |
| 738 | |
| 739 data_source_->MediaIsPlaying(); | |
| 740 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
| 741 | |
| 742 data_source_->MediaIsPaused(); | |
| 743 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
| 744 | |
| 745 Stop(); | |
| 746 } | |
| 747 | |
| 748 TEST_F(BufferedDataSourceTest, ExternalResource_Reponse206_DeferStrategy) { | |
| 749 InitializeWith206Response(); | |
| 750 | |
| 751 EXPECT_EQ(AUTO, preload()); | |
| 752 EXPECT_FALSE(is_local_source()); | |
| 753 EXPECT_TRUE(loader()->range_supported()); | |
| 754 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
| 755 | |
| 756 data_source_->MediaIsPlaying(); | |
| 757 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
| 758 set_might_be_reused_from_cache_in_future(true); | |
| 759 data_source_->MediaIsPaused(); | |
| 760 EXPECT_EQ(BufferedResourceLoader::kNeverDefer, defer_strategy()); | |
| 761 | |
| 762 data_source_->MediaIsPlaying(); | |
| 763 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
| 764 set_might_be_reused_from_cache_in_future(false); | |
| 765 data_source_->MediaIsPaused(); | |
| 766 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
| 767 | |
| 768 Stop(); | |
| 769 } | |
| 770 | |
| 771 TEST_F(BufferedDataSourceTest, | |
| 772 ExternalResource_Response206_PreloadMetadata_DeferStrategy) { | |
| 773 data_source_->SetPreload(METADATA); | |
| 774 InitializeWith206Response(); | |
| 775 | |
| 776 EXPECT_EQ(METADATA, preload()); | |
| 777 EXPECT_FALSE(is_local_source()); | |
| 778 EXPECT_TRUE(loader()->range_supported()); | |
| 779 EXPECT_EQ(BufferedResourceLoader::kReadThenDefer, defer_strategy()); | |
| 780 | |
| 781 data_source_->MediaIsPlaying(); | |
| 782 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
| 783 set_might_be_reused_from_cache_in_future(true); | |
| 784 data_source_->MediaIsPaused(); | |
| 785 EXPECT_EQ(BufferedResourceLoader::kNeverDefer, defer_strategy()); | |
| 786 | |
| 787 data_source_->MediaIsPlaying(); | |
| 788 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
| 789 set_might_be_reused_from_cache_in_future(false); | |
| 790 data_source_->MediaIsPaused(); | |
| 791 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
| 792 | |
| 793 Stop(); | |
| 794 } | |
| 795 | |
| 672 } // namespace content | 796 } // namespace content |
| OLD | NEW |