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 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
114 view_->setMainFrame(frame_); | 114 view_->setMainFrame(frame_); |
115 } | 115 } |
116 | 116 |
117 virtual ~BufferedDataSourceTest() { | 117 virtual ~BufferedDataSourceTest() { |
118 view_->close(); | 118 view_->close(); |
119 frame_->close(); | 119 frame_->close(); |
120 } | 120 } |
121 | 121 |
122 MOCK_METHOD1(OnInitialize, void(bool)); | 122 MOCK_METHOD1(OnInitialize, void(bool)); |
123 | 123 |
124 void Initialize(const char* url, bool expected) { | 124 void Initialize(const char* url, bool expected, Preload preload = AUTO) { |
scherkus (not reviewing)
2014/06/06 16:39:20
instead of default arguments (which the style guid
| |
125 GURL gurl(url); | 125 GURL gurl(url); |
126 data_source_.reset( | 126 data_source_.reset( |
127 new MockBufferedDataSource(gurl, | 127 new MockBufferedDataSource(gurl, |
128 message_loop_.message_loop_proxy(), | 128 message_loop_.message_loop_proxy(), |
129 view_->mainFrame()->toWebLocalFrame(), | 129 view_->mainFrame()->toWebLocalFrame(), |
130 &host_)); | 130 &host_)); |
131 data_source_->SetPreload(preload); | |
131 | 132 |
132 response_generator_.reset(new TestResponseGenerator(gurl, kFileSize)); | 133 response_generator_.reset(new TestResponseGenerator(gurl, kFileSize)); |
133 ExpectCreateResourceLoader(); | 134 ExpectCreateResourceLoader(); |
134 EXPECT_CALL(*this, OnInitialize(expected)); | 135 EXPECT_CALL(*this, OnInitialize(expected)); |
135 data_source_->Initialize(base::Bind(&BufferedDataSourceTest::OnInitialize, | 136 data_source_->Initialize(base::Bind(&BufferedDataSourceTest::OnInitialize, |
136 base::Unretained(this))); | 137 base::Unretained(this))); |
137 message_loop_.RunUntilIdle(); | 138 message_loop_.RunUntilIdle(); |
138 | 139 |
139 bool is_http = gurl.SchemeIsHTTPOrHTTPS(); | 140 bool is_http = gurl.SchemeIsHTTPOrHTTPS(); |
140 EXPECT_EQ(data_source_->downloading(), is_http); | 141 EXPECT_EQ(data_source_->downloading(), is_http); |
141 } | 142 } |
142 | 143 |
144 // Helper to initialize tests with a valid 200 response. | |
145 void InitializeWith200Response(Preload preload = AUTO) { | |
146 Initialize(kHttpUrl, true, preload); | |
147 | |
148 EXPECT_CALL(host_, SetTotalBytes(response_generator_->content_length())); | |
149 Respond(response_generator_->Generate200()); | |
150 } | |
151 | |
143 // Helper to initialize tests with a valid 206 response. | 152 // Helper to initialize tests with a valid 206 response. |
144 void InitializeWith206Response() { | 153 void InitializeWith206Response(Preload preload = AUTO) { |
145 Initialize(kHttpUrl, true); | 154 Initialize(kHttpUrl, true, preload); |
146 | 155 |
147 EXPECT_CALL(host_, SetTotalBytes(response_generator_->content_length())); | 156 EXPECT_CALL(host_, SetTotalBytes(response_generator_->content_length())); |
148 Respond(response_generator_->Generate206(0)); | 157 Respond(response_generator_->Generate206(0)); |
149 } | 158 } |
150 | 159 |
151 // Helper to initialize tests with a valid file:// response. | 160 // Helper to initialize tests with a valid file:// response. |
152 void InitializeWithFileResponse() { | 161 void InitializeWithFileResponse(Preload preload = AUTO) { |
153 Initialize(kFileUrl, true); | 162 Initialize(kFileUrl, true, preload); |
154 | 163 |
155 EXPECT_CALL(host_, SetTotalBytes(kFileSize)); | 164 EXPECT_CALL(host_, SetTotalBytes(kFileSize)); |
156 EXPECT_CALL(host_, AddBufferedByteRange(0, kFileSize)); | 165 EXPECT_CALL(host_, AddBufferedByteRange(0, kFileSize)); |
157 Respond(response_generator_->GenerateFileResponse(0)); | 166 Respond(response_generator_->GenerateFileResponse(0)); |
158 } | 167 } |
159 | 168 |
160 // Stops any active loaders and shuts down the data source. | 169 // Stops any active loaders and shuts down the data source. |
161 // | 170 // |
162 // This typically happens when the page is closed and for our purposes is | 171 // This typically happens when the page is closed and for our purposes is |
163 // appropriate to do when tearing down a test. | 172 // appropriate to do when tearing down a test. |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
215 } | 224 } |
216 | 225 |
217 Preload preload() { return data_source_->preload_; } | 226 Preload preload() { return data_source_->preload_; } |
218 BufferedResourceLoader::DeferStrategy defer_strategy() { | 227 BufferedResourceLoader::DeferStrategy defer_strategy() { |
219 return loader()->defer_strategy_; | 228 return loader()->defer_strategy_; |
220 } | 229 } |
221 int data_source_bitrate() { return data_source_->bitrate_; } | 230 int data_source_bitrate() { return data_source_->bitrate_; } |
222 int data_source_playback_rate() { return data_source_->playback_rate_; } | 231 int data_source_playback_rate() { return data_source_->playback_rate_; } |
223 int loader_bitrate() { return loader()->bitrate_; } | 232 int loader_bitrate() { return loader()->bitrate_; } |
224 int loader_playback_rate() { return loader()->playback_rate_; } | 233 int loader_playback_rate() { return loader()->playback_rate_; } |
234 bool is_local_source() { return data_source_->assume_fully_buffered(); } | |
235 void set_might_be_reused_from_cache_in_future(bool value) { | |
236 loader()->might_be_reused_from_cache_in_future_ = value; | |
237 } | |
225 | 238 |
226 scoped_ptr<MockBufferedDataSource> data_source_; | 239 scoped_ptr<MockBufferedDataSource> data_source_; |
227 | 240 |
228 scoped_ptr<TestResponseGenerator> response_generator_; | 241 scoped_ptr<TestResponseGenerator> response_generator_; |
229 MockWebFrameClient client_; | 242 MockWebFrameClient client_; |
230 WebView* view_; | 243 WebView* view_; |
231 WebLocalFrame* frame_; | 244 WebLocalFrame* frame_; |
232 | 245 |
233 StrictMock<MockBufferedDataSourceHost> host_; | 246 StrictMock<MockBufferedDataSourceHost> host_; |
234 base::MessageLoop message_loop_; | 247 base::MessageLoop message_loop_; |
235 | 248 |
236 private: | 249 private: |
237 // Used for calling BufferedDataSource::Read(). | 250 // Used for calling BufferedDataSource::Read(). |
238 uint8 buffer_[kDataSize]; | 251 uint8 buffer_[kDataSize]; |
239 | 252 |
240 DISALLOW_COPY_AND_ASSIGN(BufferedDataSourceTest); | 253 DISALLOW_COPY_AND_ASSIGN(BufferedDataSourceTest); |
241 }; | 254 }; |
242 | 255 |
243 TEST_F(BufferedDataSourceTest, Range_Supported) { | 256 TEST_F(BufferedDataSourceTest, Range_Supported) { |
244 Initialize(kHttpUrl, true); | 257 InitializeWith206Response(); |
245 | |
246 EXPECT_CALL(host_, SetTotalBytes(response_generator_->content_length())); | |
247 Respond(response_generator_->Generate206(0)); | |
248 | 258 |
249 EXPECT_TRUE(data_source_->loading()); | 259 EXPECT_TRUE(data_source_->loading()); |
250 EXPECT_FALSE(data_source_->IsStreaming()); | 260 EXPECT_FALSE(data_source_->IsStreaming()); |
251 Stop(); | 261 Stop(); |
252 } | 262 } |
253 | 263 |
254 TEST_F(BufferedDataSourceTest, Range_InstanceSizeUnknown) { | 264 TEST_F(BufferedDataSourceTest, Range_InstanceSizeUnknown) { |
255 Initialize(kHttpUrl, true); | 265 Initialize(kHttpUrl, true); |
256 | 266 |
257 Respond(response_generator_->Generate206( | 267 Respond(response_generator_->Generate206( |
258 0, TestResponseGenerator::kNoContentRangeInstanceSize)); | 268 0, TestResponseGenerator::kNoContentRangeInstanceSize)); |
259 | 269 |
260 EXPECT_TRUE(data_source_->loading()); | 270 EXPECT_TRUE(data_source_->loading()); |
261 EXPECT_TRUE(data_source_->IsStreaming()); | 271 EXPECT_TRUE(data_source_->IsStreaming()); |
262 Stop(); | 272 Stop(); |
263 } | 273 } |
264 | 274 |
265 TEST_F(BufferedDataSourceTest, Range_NotFound) { | 275 TEST_F(BufferedDataSourceTest, Range_NotFound) { |
266 Initialize(kHttpUrl, false); | 276 Initialize(kHttpUrl, false); |
267 Respond(response_generator_->Generate404()); | 277 Respond(response_generator_->Generate404()); |
268 | 278 |
269 EXPECT_FALSE(data_source_->loading()); | 279 EXPECT_FALSE(data_source_->loading()); |
270 Stop(); | 280 Stop(); |
271 } | 281 } |
272 | 282 |
273 TEST_F(BufferedDataSourceTest, Range_NotSupported) { | 283 TEST_F(BufferedDataSourceTest, Range_NotSupported) { |
274 Initialize(kHttpUrl, true); | 284 InitializeWith200Response(); |
275 EXPECT_CALL(host_, SetTotalBytes(response_generator_->content_length())); | |
276 Respond(response_generator_->Generate200()); | |
277 | 285 |
278 EXPECT_TRUE(data_source_->loading()); | 286 EXPECT_TRUE(data_source_->loading()); |
279 EXPECT_TRUE(data_source_->IsStreaming()); | 287 EXPECT_TRUE(data_source_->IsStreaming()); |
280 Stop(); | 288 Stop(); |
281 } | 289 } |
282 | 290 |
283 // Special carve-out for Apache versions that choose to return a 200 for | 291 // Special carve-out for Apache versions that choose to return a 200 for |
284 // Range:0- ("because it's more efficient" than a 206) | 292 // Range:0- ("because it's more efficient" than a 206) |
285 TEST_F(BufferedDataSourceTest, Range_SupportedButReturned200) { | 293 TEST_F(BufferedDataSourceTest, Range_SupportedButReturned200) { |
286 Initialize(kHttpUrl, true); | 294 Initialize(kHttpUrl, true); |
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
665 TEST_F(BufferedDataSourceTest, File_FinishLoading) { | 673 TEST_F(BufferedDataSourceTest, File_FinishLoading) { |
666 InitializeWithFileResponse(); | 674 InitializeWithFileResponse(); |
667 | 675 |
668 EXPECT_FALSE(data_source_->downloading()); | 676 EXPECT_FALSE(data_source_->downloading()); |
669 FinishLoading(); | 677 FinishLoading(); |
670 EXPECT_FALSE(data_source_->downloading()); | 678 EXPECT_FALSE(data_source_->downloading()); |
671 | 679 |
672 Stop(); | 680 Stop(); |
673 } | 681 } |
674 | 682 |
683 TEST_F(BufferedDataSourceTest, LocalResource_DeferStrategy) { | |
684 InitializeWithFileResponse(); | |
685 | |
686 EXPECT_EQ(AUTO, preload()); | |
687 EXPECT_TRUE(is_local_source()); | |
688 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
689 | |
690 data_source_->MediaIsPlaying(); | |
691 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
692 | |
693 data_source_->MediaIsPaused(); | |
694 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
695 | |
696 Stop(); | |
697 } | |
698 | |
699 TEST_F(BufferedDataSourceTest, LocalResource_PreloadMetadata_DeferStrategy) { | |
700 InitializeWithFileResponse(METADATA); | |
701 | |
702 EXPECT_EQ(METADATA, preload()); | |
703 EXPECT_TRUE(is_local_source()); | |
704 EXPECT_EQ(BufferedResourceLoader::kReadThenDefer, defer_strategy()); | |
705 | |
706 data_source_->MediaIsPlaying(); | |
707 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
708 | |
709 data_source_->MediaIsPaused(); | |
710 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
711 | |
712 Stop(); | |
713 } | |
714 | |
715 TEST_F(BufferedDataSourceTest, ExternalResource_Reponse200_DeferStrategy) { | |
716 InitializeWith200Response(); | |
717 | |
718 EXPECT_EQ(AUTO, preload()); | |
719 EXPECT_FALSE(is_local_source()); | |
720 EXPECT_FALSE(loader()->range_supported()); | |
721 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
722 | |
723 data_source_->MediaIsPlaying(); | |
724 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
725 | |
726 data_source_->MediaIsPaused(); | |
727 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
728 | |
729 Stop(); | |
730 } | |
731 | |
732 TEST_F(BufferedDataSourceTest, | |
733 ExternalResource_Response200_PreloadMetadata_DeferStrategy) { | |
734 InitializeWith200Response(METADATA); | |
735 | |
736 EXPECT_EQ(METADATA, preload()); | |
737 EXPECT_FALSE(is_local_source()); | |
738 EXPECT_FALSE(loader()->range_supported()); | |
739 EXPECT_EQ(BufferedResourceLoader::kReadThenDefer, defer_strategy()); | |
740 | |
741 data_source_->MediaIsPlaying(); | |
742 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
743 | |
744 data_source_->MediaIsPaused(); | |
745 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
746 | |
747 Stop(); | |
748 } | |
749 | |
750 TEST_F(BufferedDataSourceTest, ExternalResource_Reponse206_DeferStrategy) { | |
751 InitializeWith206Response(); | |
752 | |
753 EXPECT_EQ(AUTO, preload()); | |
754 EXPECT_FALSE(is_local_source()); | |
755 EXPECT_TRUE(loader()->range_supported()); | |
756 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
757 | |
758 data_source_->MediaIsPlaying(); | |
759 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
760 set_might_be_reused_from_cache_in_future(true); | |
761 data_source_->MediaIsPaused(); | |
762 EXPECT_EQ(BufferedResourceLoader::kNeverDefer, defer_strategy()); | |
763 | |
764 data_source_->MediaIsPlaying(); | |
765 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
766 set_might_be_reused_from_cache_in_future(false); | |
767 data_source_->MediaIsPaused(); | |
768 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
769 | |
770 Stop(); | |
771 } | |
772 | |
773 TEST_F(BufferedDataSourceTest, | |
774 ExternalResource_Response206_PreloadMetadata_DeferStrategy) { | |
775 InitializeWith206Response(METADATA); | |
776 | |
777 EXPECT_EQ(METADATA, preload()); | |
778 EXPECT_FALSE(is_local_source()); | |
779 EXPECT_TRUE(loader()->range_supported()); | |
780 EXPECT_EQ(BufferedResourceLoader::kReadThenDefer, defer_strategy()); | |
781 | |
782 data_source_->MediaIsPlaying(); | |
783 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
784 set_might_be_reused_from_cache_in_future(true); | |
785 data_source_->MediaIsPaused(); | |
786 EXPECT_EQ(BufferedResourceLoader::kNeverDefer, defer_strategy()); | |
787 | |
788 data_source_->MediaIsPlaying(); | |
789 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
790 set_might_be_reused_from_cache_in_future(false); | |
791 data_source_->MediaIsPaused(); | |
792 EXPECT_EQ(BufferedResourceLoader::kCapacityDefer, defer_strategy()); | |
793 | |
794 Stop(); | |
795 } | |
796 | |
675 } // namespace content | 797 } // namespace content |
OLD | NEW |