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

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

Issue 1266953002: [Merge to M45]Check the response URL origin in BufferedDataSource to avoid mixing cross-origin resp… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2454
Patch Set: Created 5 years, 4 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
« no previous file with comments | « media/blink/buffered_data_source.cc ('k') | media/blink/buffered_resource_loader.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 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 // The origin URL of response1 and response2 are same. So no error should
495 // occur.
496 ExecuteMixedResponseSuccessTest(response1, response2);
497 }
498
499 TEST_F(BufferedDataSourceTest,
500 Http_MixedResponse_RedirectedToDifferentPathResponse) {
501 Initialize(kHttpUrl, true);
502 WebURLResponse response1 =
503 response_generator_->GeneratePartial206(0, kDataSize - 1);
504 WebURLResponse response2 =
505 response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1);
506 response2.setURL(GURL(kHttpDifferentPathUrl));
507 // The origin URL of response1 and response2 are same. So no error should
508 // occur.
509 ExecuteMixedResponseSuccessTest(response1, response2);
510 }
511
512 TEST_F(BufferedDataSourceTest,
513 Http_MixedResponse_RedirectedToDifferentOriginResponse) {
514 Initialize(kHttpUrl, true);
515 WebURLResponse response1 =
516 response_generator_->GeneratePartial206(0, kDataSize - 1);
517 WebURLResponse response2 =
518 response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1);
519 response2.setURL(GURL(kHttpDifferentOriginUrl));
520 // The origin URL of response1 and response2 are different. So an error should
521 // occur.
522 ExecuteMixedResponseFailureTest(response1, response2);
523 }
524
525 TEST_F(BufferedDataSourceTest,
526 Http_MixedResponse_ServiceWorkerGeneratedResponseAndNormalResponse) {
527 Initialize(kHttpUrl, true);
528 WebURLResponse response1 =
529 response_generator_->GeneratePartial206(0, kDataSize - 1);
530 response1.setWasFetchedViaServiceWorker(true);
531 WebURLResponse response2 =
532 response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1);
533 // response1 is generated in a Service Worker but response2 is from a native
534 // server. So an error should occur.
535 ExecuteMixedResponseFailureTest(response1, response2);
536 }
537
538 TEST_F(BufferedDataSourceTest,
539 Http_MixedResponse_ServiceWorkerProxiedAndSameURLResponse) {
540 Initialize(kHttpUrl, true);
541 WebURLResponse response1 =
542 response_generator_->GeneratePartial206(0, kDataSize - 1);
543 response1.setWasFetchedViaServiceWorker(true);
544 response1.setOriginalURLViaServiceWorker(GURL(kHttpUrl));
545 WebURLResponse response2 =
546 response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1);
547 // The origin URL of response1 and response2 are same. So no error should
548 // occur.
549 ExecuteMixedResponseSuccessTest(response1, response2);
550 }
551
552 TEST_F(BufferedDataSourceTest,
553 Http_MixedResponse_ServiceWorkerProxiedAndDifferentPathResponse) {
554 Initialize(kHttpUrl, true);
555 WebURLResponse response1 =
556 response_generator_->GeneratePartial206(0, kDataSize - 1);
557 response1.setWasFetchedViaServiceWorker(true);
558 response1.setOriginalURLViaServiceWorker(GURL(kHttpDifferentPathUrl));
559 WebURLResponse response2 =
560 response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1);
561 // The origin URL of response1 and response2 are same. So no error should
562 // occur.
563 ExecuteMixedResponseSuccessTest(response1, response2);
564 }
565
566 TEST_F(BufferedDataSourceTest,
567 Http_MixedResponse_ServiceWorkerProxiedAndDifferentOriginResponse) {
568 Initialize(kHttpUrl, true);
569 WebURLResponse response1 =
570 response_generator_->GeneratePartial206(0, kDataSize - 1);
571 response1.setWasFetchedViaServiceWorker(true);
572 response1.setOriginalURLViaServiceWorker(GURL(kHttpDifferentOriginUrl));
573 WebURLResponse response2 =
574 response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1);
575 // The origin URL of response1 and response2 are different. So an error should
576 // occur.
577 ExecuteMixedResponseFailureTest(response1, response2);
578 }
579
446 TEST_F(BufferedDataSourceTest, File_Retry) { 580 TEST_F(BufferedDataSourceTest, File_Retry) {
447 InitializeWithFileResponse(); 581 InitializeWithFileResponse();
448 582
449 // Read to advance our position. 583 // Read to advance our position.
450 EXPECT_CALL(*this, ReadCallback(kDataSize)); 584 EXPECT_CALL(*this, ReadCallback(kDataSize));
451 ReadAt(0); 585 ReadAt(0);
452 ReceiveData(kDataSize); 586 ReceiveData(kDataSize);
453 587
454 // Issue a pending read but terminate the connection to force a retry. 588 // Issue a pending read but terminate the connection to force a retry.
455 ReadAt(kDataSize); 589 ReadAt(kDataSize);
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after
844 // Read a bit from the beginning. 978 // Read a bit from the beginning.
845 ReadAt(0); 979 ReadAt(0);
846 EXPECT_CALL(*this, ReadCallback(kDataSize)); 980 EXPECT_CALL(*this, ReadCallback(kDataSize));
847 EXPECT_CALL(host_, AddBufferedByteRange(0, kDataSize - 1)); 981 EXPECT_CALL(host_, AddBufferedByteRange(0, kDataSize - 1));
848 ReceiveData(kDataSize); 982 ReceiveData(kDataSize);
849 983
850 EXPECT_FALSE(active_loader()); 984 EXPECT_FALSE(active_loader());
851 } 985 }
852 986
853 } // namespace media 987 } // namespace media
OLDNEW
« no previous file with comments | « media/blink/buffered_data_source.cc ('k') | media/blink/buffered_resource_loader.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698