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

Side by Side Diff: media/blink/buffered_data_source_unittest.cc

Issue 1220963004: Check the response URL origin in BufferedDataSource to avoid mixing cross-origin responses. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 5 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 "base/run_loop.h" 7 #include "base/run_loop.h"
8 #include "media/base/media_log.h" 8 #include "media/base/media_log.h"
9 #include "media/base/mock_filters.h" 9 #include "media/base/mock_filters.h"
10 #include "media/base/test_helpers.h" 10 #include "media/base/test_helpers.h"
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 101
102 DISALLOW_COPY_AND_ASSIGN(MockBufferedDataSource); 102 DISALLOW_COPY_AND_ASSIGN(MockBufferedDataSource);
103 }; 103 };
104 104
105 static const int64 kFileSize = 5000000; 105 static const int64 kFileSize = 5000000;
106 static const int64 kFarReadPosition = 4000000; 106 static const int64 kFarReadPosition = 4000000;
107 static const int kDataSize = 1024; 107 static const int kDataSize = 1024;
108 108
109 static const char kHttpUrl[] = "http://localhost/foo.webm"; 109 static const char kHttpUrl[] = "http://localhost/foo.webm";
110 static const char kFileUrl[] = "file:///tmp/bar.webm"; 110 static const char kFileUrl[] = "file:///tmp/bar.webm";
111 static const char kHttpOtherUrl[] = "http://127.0.0.1/foo.webm";
falken 2015/07/02 01:04:08 The point is this url has a different origin than
horo 2015/07/02 03:10:49 Done.
111 112
112 class BufferedDataSourceTest : public testing::Test { 113 class BufferedDataSourceTest : public testing::Test {
113 public: 114 public:
114 BufferedDataSourceTest() 115 BufferedDataSourceTest()
115 : view_(WebView::create(NULL)), 116 : view_(WebView::create(NULL)),
116 frame_( 117 frame_(
117 WebLocalFrame::create(blink::WebTreeScopeType::Document, &client_)), 118 WebLocalFrame::create(blink::WebTreeScopeType::Document, &client_)),
118 preload_(BufferedDataSource::AUTO) { 119 preload_(BufferedDataSource::AUTO) {
119 view_->setMainFrame(frame_); 120 view_->setMainFrame(frame_);
120 } 121 }
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 214
214 MOCK_METHOD1(ReadCallback, void(int size)); 215 MOCK_METHOD1(ReadCallback, void(int size));
215 216
216 void ReadAt(int64 position) { 217 void ReadAt(int64 position) {
217 data_source_->Read(position, kDataSize, buffer_, 218 data_source_->Read(position, kDataSize, buffer_,
218 base::Bind(&BufferedDataSourceTest::ReadCallback, 219 base::Bind(&BufferedDataSourceTest::ReadCallback,
219 base::Unretained(this))); 220 base::Unretained(this)));
220 message_loop_.RunUntilIdle(); 221 message_loop_.RunUntilIdle();
221 } 222 }
222 223
224 void ExecuteMixedResponseSuccessTest(const WebURLResponse& response1,
225 const WebURLResponse& response2) {
226 EXPECT_CALL(host_, SetTotalBytes(kFileSize));
227 EXPECT_CALL(host_, AddBufferedByteRange(kDataSize, kDataSize * 2 - 1));
228 EXPECT_CALL(host_, AddBufferedByteRange(0, kDataSize - 1));
229 EXPECT_CALL(*this, ReadCallback(kDataSize)).Times(2);
230
231 Respond(response1);
232 ReadAt(0);
233 ReceiveData(kDataSize);
234 EXPECT_TRUE(data_source_->loading());
235
236 ExpectCreateResourceLoader();
237 FinishLoading();
238 ReadAt(kDataSize);
239 Respond(response2);
240 ReceiveData(kDataSize);
241 FinishLoading();
242 Stop();
243 }
244
245 void ExecuteMixedResponseFailureTest(const WebURLResponse& response1,
246 const WebURLResponse& response2) {
247 EXPECT_CALL(host_, SetTotalBytes(kFileSize));
248 EXPECT_CALL(host_, AddBufferedByteRange(0, kDataSize - 1));
249 EXPECT_CALL(*this, ReadCallback(kDataSize));
250 EXPECT_CALL(*this, ReadCallback(media::DataSource::kReadError));
251
252 Respond(response1);
253 ReadAt(0);
254 ReceiveData(kDataSize);
255 EXPECT_TRUE(data_source_->loading());
256
257 ExpectCreateResourceLoader();
258 FinishLoading();
259 ReadAt(kDataSize);
260 Respond(response2);
261 EXPECT_FALSE(data_source_->loading());
262 Stop();
263 }
264
223 // Accessors for private variables on |data_source_|. 265 // Accessors for private variables on |data_source_|.
224 BufferedResourceLoader* loader() { 266 BufferedResourceLoader* loader() {
225 return data_source_->loader_.get(); 267 return data_source_->loader_.get();
226 } 268 }
227 ActiveLoader* active_loader() { return loader()->active_loader_.get(); } 269 ActiveLoader* active_loader() { return loader()->active_loader_.get(); }
228 WebURLLoader* url_loader() { 270 WebURLLoader* url_loader() {
229 return loader()->active_loader_->loader_.get(); 271 return loader()->active_loader_->loader_.get();
230 } 272 }
231 273
232 BufferedDataSource::Preload preload() { return data_source_->preload_; } 274 BufferedDataSource::Preload preload() { return data_source_->preload_; }
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
436 &MockBufferedDataSource::CreateMockResourceLoader))); 478 &MockBufferedDataSource::CreateMockResourceLoader)));
437 loader()->didFail(url_loader(), response_generator_->GenerateError()); 479 loader()->didFail(url_loader(), response_generator_->GenerateError());
438 run_loop.Run(); 480 run_loop.Run();
439 Respond(response_generator_->Generate206(kDataSize)); 481 Respond(response_generator_->Generate206(kDataSize));
440 ReceiveData(kDataSize); 482 ReceiveData(kDataSize);
441 FinishLoading(); 483 FinishLoading();
442 EXPECT_FALSE(data_source_->loading()); 484 EXPECT_FALSE(data_source_->loading());
443 Stop(); 485 Stop();
444 } 486 }
445 487
488 TEST_F(BufferedDataSourceTest, Http_PartialResponse) {
489 Initialize(kHttpUrl, true);
490 WebURLResponse response1 =
491 response_generator_->GeneratePartial206(0, kDataSize - 1);
492 WebURLResponse response2 =
493 response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1);
494 ExecuteMixedResponseSuccessTest(response1, response2);
495 }
496
497 TEST_F(BufferedDataSourceTest, Http_MixedResponse_RedirectedResponse) {
498 Initialize(kHttpUrl, true);
499 WebURLResponse response1 =
500 response_generator_->GeneratePartial206(0, kDataSize - 1);
501 WebURLResponse response2 =
502 response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1);
503 response2.setURL(GURL(kHttpOtherUrl));
504 ExecuteMixedResponseFailureTest(response1, response2);
505 }
506
507 TEST_F(BufferedDataSourceTest,
508 Http_MixedResponse_ServiceWorkerGeneratedResponseAndNormalResponse) {
509 Initialize(kHttpUrl, true);
510 WebURLResponse response1 =
511 response_generator_->GeneratePartial206(0, kDataSize - 1);
512 response1.setWasFetchedViaServiceWorker(true);
513 WebURLResponse response2 =
514 response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1);
515 ExecuteMixedResponseFailureTest(response1, response2);
516 }
517
518 TEST_F(BufferedDataSourceTest,
519 Http_MixedResponse_ServiceWorkerProxiedResponseAndNormalResponse) {
520 Initialize(kHttpUrl, true);
521 WebURLResponse response1 =
522 response_generator_->GeneratePartial206(0, kDataSize - 1);
523 response1.setWasFetchedViaServiceWorker(true);
524 response1.setOriginalURLViaServiceWorker(GURL(kHttpUrl));
525 WebURLResponse response2 =
526 response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1);
527 ExecuteMixedResponseSuccessTest(response1, response2);
528 }
529
530 TEST_F(BufferedDataSourceTest,
531 Http_MixedResponse_ServiceWorkerRedirectedResponseAndNormalResponse) {
532 Initialize(kHttpUrl, true);
533 WebURLResponse response1 =
534 response_generator_->GeneratePartial206(0, kDataSize - 1);
535 response1.setWasFetchedViaServiceWorker(true);
536 response1.setOriginalURLViaServiceWorker(GURL(kHttpOtherUrl));
537 WebURLResponse response2 =
538 response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1);
539 ExecuteMixedResponseFailureTest(response1, response2);
540 }
541
446 TEST_F(BufferedDataSourceTest, File_Retry) { 542 TEST_F(BufferedDataSourceTest, File_Retry) {
447 InitializeWithFileResponse(); 543 InitializeWithFileResponse();
448 544
449 // Read to advance our position. 545 // Read to advance our position.
450 EXPECT_CALL(*this, ReadCallback(kDataSize)); 546 EXPECT_CALL(*this, ReadCallback(kDataSize));
451 ReadAt(0); 547 ReadAt(0);
452 ReceiveData(kDataSize); 548 ReceiveData(kDataSize);
453 549
454 // Issue a pending read but terminate the connection to force a retry. 550 // Issue a pending read but terminate the connection to force a retry.
455 ReadAt(kDataSize); 551 ReadAt(kDataSize);
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after
844 // Read a bit from the beginning. 940 // Read a bit from the beginning.
845 ReadAt(0); 941 ReadAt(0);
846 EXPECT_CALL(*this, ReadCallback(kDataSize)); 942 EXPECT_CALL(*this, ReadCallback(kDataSize));
847 EXPECT_CALL(host_, AddBufferedByteRange(0, kDataSize - 1)); 943 EXPECT_CALL(host_, AddBufferedByteRange(0, kDataSize - 1));
848 ReceiveData(kDataSize); 944 ReceiveData(kDataSize);
849 945
850 EXPECT_FALSE(active_loader()); 946 EXPECT_FALSE(active_loader());
851 } 947 }
852 948
853 } // namespace media 949 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698