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

Unified Diff: media/blink/multibuffer_data_source_unittest.cc

Issue 1993083002: The cross-origin checks in the multibuffer code are not sufficient, as they only trigger when a red… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2704
Patch Set: Created 4 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/blink/multibuffer_data_source.cc ('k') | media/blink/resource_multibuffer_data_provider.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/blink/multibuffer_data_source_unittest.cc
diff --git a/media/blink/multibuffer_data_source_unittest.cc b/media/blink/multibuffer_data_source_unittest.cc
index 2e4b45275be9758c2e6acee0887d3da36988cf66..b2ea71c3862b1d75d4a69df715abb5e3d25e53b7 100644
--- a/media/blink/multibuffer_data_source_unittest.cc
+++ b/media/blink/multibuffer_data_source_unittest.cc
@@ -54,11 +54,19 @@ class TestMultiBufferDataProvider : public ResourceMultiBufferDataProvider {
~TestMultiBufferDataProvider() override {
CHECK_EQ(static_cast<size_t>(1), test_data_providers.erase(this));
}
+ void SetLoadingToFalse() {
+ // Check that we have not been destroyed first.
+ if (test_data_providers.find(this) != test_data_providers.end()) {
+ loading_ = false;
+ }
+ }
void Start() override {
// Create a mock active loader.
// Keep track of active loading state via loadAsynchronously() and cancel().
NiceMock<MockWebURLLoader>* url_loader = new NiceMock<MockWebURLLoader>();
- ON_CALL(*url_loader, cancel()).WillByDefault(Assign(&loading_, false));
+ ON_CALL(*url_loader, cancel())
+ .WillByDefault(
+ Invoke(this, &TestMultiBufferDataProvider::SetLoadingToFalse));
loading_ = true;
active_loader_.reset(
new ActiveLoader(scoped_ptr<WebURLLoader>(url_loader)));
@@ -177,13 +185,14 @@ class MockMultibufferDataSource : public MultibufferDataSource {
public:
MockMultibufferDataSource(
const GURL& url,
+ UrlData::CORSMode cors_mode,
const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
linked_ptr<UrlIndex> url_index,
WebLocalFrame* frame,
BufferedDataSourceHost* host)
: MultibufferDataSource(
url,
- UrlData::CORS_UNSPECIFIED,
+ cors_mode,
task_runner,
url_index,
frame,
@@ -231,10 +240,12 @@ class MultibufferDataSourceTest : public testing::Test {
MOCK_METHOD1(OnInitialize, void(bool));
- void Initialize(const char* url, bool expected) {
+ void InitializeWithCORS(const char* url,
+ bool expected,
+ UrlData::CORSMode cors_mode) {
GURL gurl(url);
data_source_.reset(new MockMultibufferDataSource(
- gurl, message_loop_.task_runner(), url_index_,
+ gurl, cors_mode, message_loop_.task_runner(), url_index_,
view_->mainFrame()->toWebLocalFrame(), &host_));
data_source_->SetPreload(preload_);
@@ -248,6 +259,10 @@ class MultibufferDataSourceTest : public testing::Test {
EXPECT_EQ(data_source_->downloading(), false);
}
+ void Initialize(const char* url, bool expected) {
+ InitializeWithCORS(url, expected, UrlData::CORS_UNSPECIFIED);
+ }
+
// Helper to initialize tests with a valid 200 response.
void InitializeWith200Response() {
Initialize(kHttpUrl, true);
@@ -371,7 +386,11 @@ class MultibufferDataSourceTest : public testing::Test {
EXPECT_CALL(host_, SetTotalBytes(kFileSize));
EXPECT_CALL(host_, AddBufferedByteRange(0, kDataSize));
EXPECT_CALL(*this, ReadCallback(kDataSize));
- EXPECT_CALL(*this, ReadCallback(media::DataSource::kReadError));
+ // Stop() will also cause the readback to be called with kReadError, but
+ // we want to make sure it was called before Stop().
+ bool failed_ = false;
+ EXPECT_CALL(*this, ReadCallback(media::DataSource::kReadError))
+ .WillOnce(Assign(&failed_, true));
Respond(response1);
ReceiveData(kDataSize);
@@ -382,6 +401,7 @@ class MultibufferDataSourceTest : public testing::Test {
Restart();
ReadAt(kDataSize);
Respond(response2);
+ EXPECT_TRUE(failed_);
Stop();
}
@@ -772,6 +792,20 @@ TEST_F(MultibufferDataSourceTest,
ExecuteMixedResponseFailureTest(response1, response2);
}
+TEST_F(MultibufferDataSourceTest,
+ Http_MixedResponse_ServiceWorkerProxiedAndDifferentOriginResponseCORS) {
+ InitializeWithCORS(kHttpUrl, true, UrlData::CORS_ANONYMOUS);
+ WebURLResponse response1 =
+ response_generator_->GeneratePartial206(0, kDataSize - 1);
+ response1.setWasFetchedViaServiceWorker(true);
+ response1.setOriginalURLViaServiceWorker(GURL(kHttpDifferentOriginUrl));
+ WebURLResponse response2 =
+ response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1);
+ // The origin URL of response1 and response2 are different, but a CORS check
+ // has been passed for each request, so expect success.
+ ExecuteMixedResponseSuccessTest(response1, response2);
+}
+
TEST_F(MultibufferDataSourceTest, File_Retry) {
InitializeWithFileResponse();
@@ -967,8 +1001,8 @@ TEST_F(MultibufferDataSourceTest, Http_ShareData) {
StrictMock<MockBufferedDataSourceHost> host2;
MockMultibufferDataSource source2(
- GURL(kHttpUrl), message_loop_.task_runner(), url_index_,
- view_->mainFrame()->toWebLocalFrame(), &host2);
+ GURL(kHttpUrl), UrlData::CORS_UNSPECIFIED, message_loop_.task_runner(),
+ url_index_, view_->mainFrame()->toWebLocalFrame(), &host2);
source2.SetPreload(preload_);
EXPECT_CALL(*this, OnInitialize(true));
@@ -1261,7 +1295,7 @@ TEST_F(MultibufferDataSourceTest,
TEST_F(MultibufferDataSourceTest, SeekPastEOF) {
GURL gurl(kHttpUrl);
data_source_.reset(new MockMultibufferDataSource(
- gurl, message_loop_.task_runner(), url_index_,
+ gurl, UrlData::CORS_UNSPECIFIED, message_loop_.task_runner(), url_index_,
view_->mainFrame()->toWebLocalFrame(), &host_));
data_source_->SetPreload(preload_);
« no previous file with comments | « media/blink/multibuffer_data_source.cc ('k') | media/blink/resource_multibuffer_data_provider.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698