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

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: Check Origin and canRequest 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 kHttpDifferentPathUrl[] = "http://localhost/bar.webm";
112 static const char kHttpDifferentOriginUrl[] = "http://127.0.0.1/foo.webm";
111 113
112 class BufferedDataSourceTest : public testing::Test { 114 class BufferedDataSourceTest : public testing::Test {
113 public: 115 public:
114 BufferedDataSourceTest() 116 BufferedDataSourceTest()
115 : view_(WebView::create(NULL)), 117 : view_(WebView::create(NULL)),
116 frame_( 118 frame_(
117 WebLocalFrame::create(blink::WebTreeScopeType::Document, &client_)), 119 WebLocalFrame::create(blink::WebTreeScopeType::Document, &client_)),
118 preload_(BufferedDataSource::AUTO) { 120 preload_(BufferedDataSource::AUTO) {
119 view_->setMainFrame(frame_); 121 view_->setMainFrame(frame_);
120 } 122 }
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 215
214 MOCK_METHOD1(ReadCallback, void(int size)); 216 MOCK_METHOD1(ReadCallback, void(int size));
215 217
216 void ReadAt(int64 position) { 218 void ReadAt(int64 position) {
217 data_source_->Read(position, kDataSize, buffer_, 219 data_source_->Read(position, kDataSize, buffer_,
218 base::Bind(&BufferedDataSourceTest::ReadCallback, 220 base::Bind(&BufferedDataSourceTest::ReadCallback,
219 base::Unretained(this))); 221 base::Unretained(this)));
220 message_loop_.RunUntilIdle(); 222 message_loop_.RunUntilIdle();
221 } 223 }
222 224
225 void ExecuteMixedResponseSuccessTest(const WebURLResponse& response1,
226 const WebURLResponse& response2) {
227 EXPECT_CALL(host_, SetTotalBytes(kFileSize));
228 EXPECT_CALL(host_, AddBufferedByteRange(kDataSize, kDataSize * 2 - 1));
229 EXPECT_CALL(host_, AddBufferedByteRange(0, kDataSize - 1));
230 EXPECT_CALL(*this, ReadCallback(kDataSize)).Times(2);
231
232 Respond(response1);
233 ReadAt(0);
234 ReceiveData(kDataSize);
235 EXPECT_TRUE(data_source_->loading());
236
237 ExpectCreateResourceLoader();
238 FinishLoading();
239 ReadAt(kDataSize);
240 Respond(response2);
241 ReceiveData(kDataSize);
242 FinishLoading();
243 Stop();
244 }
245
246 void ExecuteMixedResponseFailureTest(const WebURLResponse& response1,
247 const WebURLResponse& response2) {
248 EXPECT_CALL(host_, SetTotalBytes(kFileSize));
249 EXPECT_CALL(host_, AddBufferedByteRange(0, kDataSize - 1));
250 EXPECT_CALL(*this, ReadCallback(kDataSize));
251 EXPECT_CALL(*this, ReadCallback(media::DataSource::kReadError));
252
253 Respond(response1);
254 ReadAt(0);
255 ReceiveData(kDataSize);
256 EXPECT_TRUE(data_source_->loading());
257
258 ExpectCreateResourceLoader();
259 FinishLoading();
260 ReadAt(kDataSize);
261 Respond(response2);
262 EXPECT_FALSE(data_source_->loading());
263 Stop();
264 }
265
223 // Accessors for private variables on |data_source_|. 266 // Accessors for private variables on |data_source_|.
224 BufferedResourceLoader* loader() { 267 BufferedResourceLoader* loader() {
225 return data_source_->loader_.get(); 268 return data_source_->loader_.get();
226 } 269 }
227 ActiveLoader* active_loader() { return loader()->active_loader_.get(); } 270 ActiveLoader* active_loader() { return loader()->active_loader_.get(); }
228 WebURLLoader* url_loader() { 271 WebURLLoader* url_loader() {
229 return loader()->active_loader_->loader_.get(); 272 return loader()->active_loader_->loader_.get();
230 } 273 }
231 274
232 BufferedDataSource::Preload preload() { return data_source_->preload_; } 275 BufferedDataSource::Preload preload() { return data_source_->preload_; }
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
436 &MockBufferedDataSource::CreateMockResourceLoader))); 479 &MockBufferedDataSource::CreateMockResourceLoader)));
437 loader()->didFail(url_loader(), response_generator_->GenerateError()); 480 loader()->didFail(url_loader(), response_generator_->GenerateError());
438 run_loop.Run(); 481 run_loop.Run();
439 Respond(response_generator_->Generate206(kDataSize)); 482 Respond(response_generator_->Generate206(kDataSize));
440 ReceiveData(kDataSize); 483 ReceiveData(kDataSize);
441 FinishLoading(); 484 FinishLoading();
442 EXPECT_FALSE(data_source_->loading()); 485 EXPECT_FALSE(data_source_->loading());
443 Stop(); 486 Stop();
444 } 487 }
445 488
489 TEST_F(BufferedDataSourceTest, Http_PartialResponse) {
490 Initialize(kHttpUrl, true);
491 WebURLResponse response1 =
492 response_generator_->GeneratePartial206(0, kDataSize - 1);
493 WebURLResponse response2 =
494 response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1);
495 ExecuteMixedResponseSuccessTest(response1, response2);
496 }
497
498 TEST_F(BufferedDataSourceTest,
499 Http_MixedResponse_RedirectedToDifferentPathResponse) {
500 Initialize(kHttpUrl, true);
501 WebURLResponse response1 =
502 response_generator_->GeneratePartial206(0, kDataSize - 1);
503 WebURLResponse response2 =
504 response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1);
505 response2.setURL(GURL(kHttpDifferentPathUrl));
506 ExecuteMixedResponseSuccessTest(response1, response2);
507 }
508
509 TEST_F(BufferedDataSourceTest,
510 Http_MixedResponse_RedirectedToDifferentOriginResponse) {
511 Initialize(kHttpUrl, true);
512 WebURLResponse response1 =
513 response_generator_->GeneratePartial206(0, kDataSize - 1);
514 WebURLResponse response2 =
515 response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1);
516 response2.setURL(GURL(kHttpDifferentOriginUrl));
517 ExecuteMixedResponseFailureTest(response1, response2);
518 }
519
520 TEST_F(BufferedDataSourceTest,
521 Http_MixedResponse_ServiceWorkerGeneratedResponseAndNormalResponse) {
522 Initialize(kHttpUrl, true);
523 WebURLResponse response1 =
524 response_generator_->GeneratePartial206(0, kDataSize - 1);
525 response1.setWasFetchedViaServiceWorker(true);
526 WebURLResponse response2 =
527 response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1);
528 ExecuteMixedResponseFailureTest(response1, response2);
falken 2015/07/07 02:32:49 (as discussed offline) I was confused by this expe
horo 2015/07/07 03:48:36 Done.
529 }
530
531 TEST_F(BufferedDataSourceTest,
532 Http_MixedResponse_ServiceWorkerProxiedAndSameURLResponse) {
533 Initialize(kHttpUrl, true);
534 WebURLResponse response1 =
535 response_generator_->GeneratePartial206(0, kDataSize - 1);
536 response1.setWasFetchedViaServiceWorker(true);
537 response1.setOriginalURLViaServiceWorker(GURL(kHttpUrl));
538 WebURLResponse response2 =
539 response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1);
540 ExecuteMixedResponseSuccessTest(response1, response2);
541 }
542
543 TEST_F(BufferedDataSourceTest,
544 Http_MixedResponse_ServiceWorkerProxiedAndDifferentPathResponse) {
545 Initialize(kHttpUrl, true);
546 WebURLResponse response1 =
547 response_generator_->GeneratePartial206(0, kDataSize - 1);
548 response1.setWasFetchedViaServiceWorker(true);
549 response1.setOriginalURLViaServiceWorker(GURL(kHttpDifferentPathUrl));
550 WebURLResponse response2 =
551 response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1);
552 ExecuteMixedResponseSuccessTest(response1, response2);
553 }
554
555 TEST_F(BufferedDataSourceTest,
556 Http_MixedResponse_ServiceWorkerProxiedAndDifferentOriginResponse) {
557 Initialize(kHttpUrl, true);
558 WebURLResponse response1 =
559 response_generator_->GeneratePartial206(0, kDataSize - 1);
560 response1.setWasFetchedViaServiceWorker(true);
561 response1.setOriginalURLViaServiceWorker(GURL(kHttpDifferentOriginUrl));
562 WebURLResponse response2 =
563 response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1);
564 ExecuteMixedResponseFailureTest(response1, response2);
565 }
566
446 TEST_F(BufferedDataSourceTest, File_Retry) { 567 TEST_F(BufferedDataSourceTest, File_Retry) {
447 InitializeWithFileResponse(); 568 InitializeWithFileResponse();
448 569
449 // Read to advance our position. 570 // Read to advance our position.
450 EXPECT_CALL(*this, ReadCallback(kDataSize)); 571 EXPECT_CALL(*this, ReadCallback(kDataSize));
451 ReadAt(0); 572 ReadAt(0);
452 ReceiveData(kDataSize); 573 ReceiveData(kDataSize);
453 574
454 // Issue a pending read but terminate the connection to force a retry. 575 // Issue a pending read but terminate the connection to force a retry.
455 ReadAt(kDataSize); 576 ReadAt(kDataSize);
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after
844 // Read a bit from the beginning. 965 // Read a bit from the beginning.
845 ReadAt(0); 966 ReadAt(0);
846 EXPECT_CALL(*this, ReadCallback(kDataSize)); 967 EXPECT_CALL(*this, ReadCallback(kDataSize));
847 EXPECT_CALL(host_, AddBufferedByteRange(0, kDataSize - 1)); 968 EXPECT_CALL(host_, AddBufferedByteRange(0, kDataSize - 1));
848 ReceiveData(kDataSize); 969 ReceiveData(kDataSize);
849 970
850 EXPECT_FALSE(active_loader()); 971 EXPECT_FALSE(active_loader());
851 } 972 }
852 973
853 } // namespace media 974 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698