| 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 "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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 private: | 44 private: |
| 45 DISALLOW_COPY_AND_ASSIGN(MockBufferedDataSourceHost); | 45 DISALLOW_COPY_AND_ASSIGN(MockBufferedDataSourceHost); |
| 46 }; | 46 }; |
| 47 | 47 |
| 48 // Overrides CreateResourceLoader() to permit injecting a MockWebURLLoader. | 48 // Overrides CreateResourceLoader() to permit injecting a MockWebURLLoader. |
| 49 // Also keeps track of whether said MockWebURLLoader is actively loading. | 49 // Also keeps track of whether said MockWebURLLoader is actively loading. |
| 50 class MockBufferedDataSource : public BufferedDataSource { | 50 class MockBufferedDataSource : public BufferedDataSource { |
| 51 public: | 51 public: |
| 52 MockBufferedDataSource( | 52 MockBufferedDataSource( |
| 53 const GURL& url, | 53 const GURL& url, |
| 54 BufferedResourceLoader::CORSMode cors_mode, |
| 54 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, | 55 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, |
| 55 WebLocalFrame* frame, | 56 WebLocalFrame* frame, |
| 56 BufferedDataSourceHost* host) | 57 BufferedDataSourceHost* host) |
| 57 : BufferedDataSource(url, | 58 : BufferedDataSource(url, |
| 58 BufferedResourceLoader::kUnspecified, | 59 cors_mode, |
| 59 task_runner, | 60 task_runner, |
| 60 frame, | 61 frame, |
| 61 new media::MediaLog(), | 62 new media::MediaLog(), |
| 62 host, | 63 host, |
| 63 base::Bind(&MockBufferedDataSource::set_downloading, | 64 base::Bind(&MockBufferedDataSource::set_downloading, |
| 64 base::Unretained(this))), | 65 base::Unretained(this))), |
| 65 downloading_(false), | 66 downloading_(false), |
| 66 loading_(false) {} | 67 loading_(false) {} |
| 67 virtual ~MockBufferedDataSource() {} | 68 virtual ~MockBufferedDataSource() {} |
| 68 | 69 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 121 view_->setMainFrame(frame_); | 122 view_->setMainFrame(frame_); |
| 122 } | 123 } |
| 123 | 124 |
| 124 virtual ~BufferedDataSourceTest() { | 125 virtual ~BufferedDataSourceTest() { |
| 125 view_->close(); | 126 view_->close(); |
| 126 frame_->close(); | 127 frame_->close(); |
| 127 } | 128 } |
| 128 | 129 |
| 129 MOCK_METHOD1(OnInitialize, void(bool)); | 130 MOCK_METHOD1(OnInitialize, void(bool)); |
| 130 | 131 |
| 131 void Initialize(const char* url, bool expected) { | 132 void InitializeWithCORS(const char* url, |
| 133 bool expected, |
| 134 BufferedResourceLoader::CORSMode cors_mode) { |
| 132 GURL gurl(url); | 135 GURL gurl(url); |
| 133 data_source_.reset( | 136 data_source_.reset(new MockBufferedDataSource( |
| 134 new MockBufferedDataSource(gurl, | 137 gurl, cors_mode, message_loop_.task_runner(), |
| 135 message_loop_.task_runner(), | 138 view_->mainFrame()->toWebLocalFrame(), &host_)); |
| 136 view_->mainFrame()->toWebLocalFrame(), | |
| 137 &host_)); | |
| 138 data_source_->SetPreload(preload_); | 139 data_source_->SetPreload(preload_); |
| 139 | 140 |
| 140 response_generator_.reset(new TestResponseGenerator(gurl, kFileSize)); | 141 response_generator_.reset(new TestResponseGenerator(gurl, kFileSize)); |
| 141 ExpectCreateResourceLoader(); | 142 ExpectCreateResourceLoader(); |
| 142 EXPECT_CALL(*this, OnInitialize(expected)); | 143 EXPECT_CALL(*this, OnInitialize(expected)); |
| 143 data_source_->Initialize(base::Bind(&BufferedDataSourceTest::OnInitialize, | 144 data_source_->Initialize(base::Bind(&BufferedDataSourceTest::OnInitialize, |
| 144 base::Unretained(this))); | 145 base::Unretained(this))); |
| 145 message_loop_.RunUntilIdle(); | 146 message_loop_.RunUntilIdle(); |
| 146 | 147 |
| 147 bool is_http = gurl.SchemeIsHTTPOrHTTPS(); | 148 bool is_http = gurl.SchemeIsHTTPOrHTTPS(); |
| 148 EXPECT_EQ(data_source_->downloading(), is_http); | 149 EXPECT_EQ(data_source_->downloading(), is_http); |
| 149 } | 150 } |
| 150 | 151 |
| 152 void Initialize(const char* url, bool expected) { |
| 153 InitializeWithCORS(url, expected, BufferedResourceLoader::kUnspecified); |
| 154 } |
| 155 |
| 151 // Helper to initialize tests with a valid 200 response. | 156 // Helper to initialize tests with a valid 200 response. |
| 152 void InitializeWith200Response() { | 157 void InitializeWith200Response() { |
| 153 Initialize(kHttpUrl, true); | 158 Initialize(kHttpUrl, true); |
| 154 | 159 |
| 155 EXPECT_CALL(host_, SetTotalBytes(response_generator_->content_length())); | 160 EXPECT_CALL(host_, SetTotalBytes(response_generator_->content_length())); |
| 156 Respond(response_generator_->Generate200()); | 161 Respond(response_generator_->Generate200()); |
| 157 } | 162 } |
| 158 | 163 |
| 159 // Helper to initialize tests with a valid 206 response. | 164 // Helper to initialize tests with a valid 206 response. |
| 160 void InitializeWith206Response() { | 165 void InitializeWith206Response() { |
| (...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 570 response_generator_->GeneratePartial206(0, kDataSize - 1); | 575 response_generator_->GeneratePartial206(0, kDataSize - 1); |
| 571 response1.setWasFetchedViaServiceWorker(true); | 576 response1.setWasFetchedViaServiceWorker(true); |
| 572 response1.setOriginalURLViaServiceWorker(GURL(kHttpDifferentOriginUrl)); | 577 response1.setOriginalURLViaServiceWorker(GURL(kHttpDifferentOriginUrl)); |
| 573 WebURLResponse response2 = | 578 WebURLResponse response2 = |
| 574 response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1); | 579 response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1); |
| 575 // The origin URL of response1 and response2 are different. So an error should | 580 // The origin URL of response1 and response2 are different. So an error should |
| 576 // occur. | 581 // occur. |
| 577 ExecuteMixedResponseFailureTest(response1, response2); | 582 ExecuteMixedResponseFailureTest(response1, response2); |
| 578 } | 583 } |
| 579 | 584 |
| 585 TEST_F(BufferedDataSourceTest, |
| 586 Http_MixedResponse_ServiceWorkerProxiedAndDifferentOriginResponseCORS) { |
| 587 InitializeWithCORS(kHttpUrl, true, BufferedResourceLoader::kAnonymous); |
| 588 WebURLResponse response1 = |
| 589 response_generator_->GeneratePartial206(0, kDataSize - 1); |
| 590 response1.setWasFetchedViaServiceWorker(true); |
| 591 response1.setOriginalURLViaServiceWorker(GURL(kHttpDifferentOriginUrl)); |
| 592 WebURLResponse response2 = |
| 593 response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1); |
| 594 // The origin URL of response1 and response2 are different, but a CORS check |
| 595 // has been passed for each request, so expect success. |
| 596 ExecuteMixedResponseSuccessTest(response1, response2); |
| 597 } |
| 598 |
| 580 TEST_F(BufferedDataSourceTest, File_Retry) { | 599 TEST_F(BufferedDataSourceTest, File_Retry) { |
| 581 InitializeWithFileResponse(); | 600 InitializeWithFileResponse(); |
| 582 | 601 |
| 583 // Read to advance our position. | 602 // Read to advance our position. |
| 584 EXPECT_CALL(*this, ReadCallback(kDataSize)); | 603 EXPECT_CALL(*this, ReadCallback(kDataSize)); |
| 585 ReadAt(0); | 604 ReadAt(0); |
| 586 ReceiveData(kDataSize); | 605 ReceiveData(kDataSize); |
| 587 | 606 |
| 588 // Issue a pending read but terminate the connection to force a retry. | 607 // Issue a pending read but terminate the connection to force a retry. |
| 589 ReadAt(kDataSize); | 608 ReadAt(kDataSize); |
| (...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 978 // Read a bit from the beginning. | 997 // Read a bit from the beginning. |
| 979 ReadAt(0); | 998 ReadAt(0); |
| 980 EXPECT_CALL(*this, ReadCallback(kDataSize)); | 999 EXPECT_CALL(*this, ReadCallback(kDataSize)); |
| 981 EXPECT_CALL(host_, AddBufferedByteRange(0, kDataSize - 1)); | 1000 EXPECT_CALL(host_, AddBufferedByteRange(0, kDataSize - 1)); |
| 982 ReceiveData(kDataSize); | 1001 ReceiveData(kDataSize); |
| 983 | 1002 |
| 984 EXPECT_FALSE(active_loader()); | 1003 EXPECT_FALSE(active_loader()); |
| 985 } | 1004 } |
| 986 | 1005 |
| 987 } // namespace media | 1006 } // namespace media |
| OLD | NEW |