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 |