Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(177)

Side by Side Diff: content/renderer/media/buffered_data_source_unittest.cc

Issue 302553006: Suppress pause and buffer for local resources (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Adding tests for local, 206 and 200 repsonses Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698