| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "modules/fetch/BodyStreamBuffer.h" | 5 #include "modules/fetch/BodyStreamBuffer.h" |
| 6 | 6 |
| 7 #include "bindings/core/v8/V8BindingForTesting.h" | 7 #include "bindings/core/v8/V8BindingForTesting.h" |
| 8 #include "core/html/FormData.h" | 8 #include "core/html/FormData.h" |
| 9 #include "modules/fetch/BlobBytesConsumer.h" |
| 9 #include "modules/fetch/BytesConsumerTestUtil.h" | 10 #include "modules/fetch/BytesConsumerTestUtil.h" |
| 10 #include "modules/fetch/DataConsumerHandleTestUtil.h" | 11 #include "modules/fetch/DataConsumerHandleTestUtil.h" |
| 11 #include "modules/fetch/FetchBlobDataConsumerHandle.h" | 12 #include "modules/fetch/FormDataBytesConsumer.h" |
| 12 #include "modules/fetch/FetchFormDataConsumerHandle.h" | |
| 13 #include "platform/blob/BlobData.h" | 13 #include "platform/blob/BlobData.h" |
| 14 #include "platform/blob/BlobURL.h" | 14 #include "platform/blob/BlobURL.h" |
| 15 #include "platform/network/EncodedFormData.h" | 15 #include "platform/network/EncodedFormData.h" |
| 16 #include "platform/testing/UnitTestHelpers.h" | 16 #include "platform/testing/UnitTestHelpers.h" |
| 17 #include "testing/gmock/include/gmock/gmock.h" | 17 #include "testing/gmock/include/gmock/gmock.h" |
| 18 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
| 19 #include "wtf/PtrUtil.h" | 19 #include "wtf/PtrUtil.h" |
| 20 #include <memory> | 20 #include <memory> |
| 21 | 21 |
| 22 namespace blink { | 22 namespace blink { |
| 23 | 23 |
| 24 namespace { | 24 namespace { |
| 25 | 25 |
| 26 using ::testing::ByMove; | 26 using ::testing::ByMove; |
| 27 using ::testing::InSequence; | 27 using ::testing::InSequence; |
| 28 using ::testing::Return; | 28 using ::testing::Return; |
| 29 using ::testing::_; | 29 using ::testing::_; |
| 30 using ::testing::SaveArg; | 30 using ::testing::SaveArg; |
| 31 using Checkpoint = ::testing::StrictMock<::testing::MockFunction<void(int)>>; | 31 using Checkpoint = ::testing::StrictMock<::testing::MockFunction<void(int)>>; |
| 32 using Command = DataConsumerHandleTestUtil::Command; | 32 using Command = DataConsumerHandleTestUtil::Command; |
| 33 using ReplayingHandle = DataConsumerHandleTestUtil::ReplayingHandle; | 33 using ReplayingHandle = DataConsumerHandleTestUtil::ReplayingHandle; |
| 34 using MockFetchDataLoaderClient = DataConsumerHandleTestUtil::MockFetchDataLoade
rClient; | 34 using MockFetchDataLoaderClient = DataConsumerHandleTestUtil::MockFetchDataLoade
rClient; |
| 35 | 35 |
| 36 class FakeLoaderFactory : public FetchBlobDataConsumerHandle::LoaderFactory { | |
| 37 public: | |
| 38 ThreadableLoader* create(ExecutionContext&, ThreadableLoaderClient*, const T
hreadableLoaderOptions&, const ResourceLoaderOptions&) override | |
| 39 { | |
| 40 ASSERT_NOT_REACHED(); | |
| 41 return nullptr; | |
| 42 } | |
| 43 }; | |
| 44 | |
| 45 class BodyStreamBufferTest : public ::testing::Test { | 36 class BodyStreamBufferTest : public ::testing::Test { |
| 46 protected: | 37 protected: |
| 47 ScriptValue eval(ScriptState* scriptState, const char* s) | 38 ScriptValue eval(ScriptState* scriptState, const char* s) |
| 48 { | 39 { |
| 49 v8::Local<v8::String> source; | 40 v8::Local<v8::String> source; |
| 50 v8::Local<v8::Script> script; | 41 v8::Local<v8::Script> script; |
| 51 v8::MicrotasksScope microtasks(scriptState->isolate(), v8::MicrotasksSco
pe::kDoNotRunMicrotasks); | 42 v8::MicrotasksScope microtasks(scriptState->isolate(), v8::MicrotasksSco
pe::kDoNotRunMicrotasks); |
| 52 if (!v8Call(v8::String::NewFromUtf8(scriptState->isolate(), s, v8::NewSt
ringType::kNormal), source)) { | 43 if (!v8Call(v8::String::NewFromUtf8(scriptState->isolate(), s, v8::NewSt
ringType::kNormal), source)) { |
| 53 ADD_FAILURE(); | 44 ADD_FAILURE(); |
| 54 return ScriptValue(); | 45 return ScriptValue(); |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 checkpoint.Call(4); | 158 checkpoint.Call(4); |
| 168 } | 159 } |
| 169 | 160 |
| 170 TEST_F(BodyStreamBufferTest, DrainAsBlobDataHandle) | 161 TEST_F(BodyStreamBufferTest, DrainAsBlobDataHandle) |
| 171 { | 162 { |
| 172 V8TestingScope scope; | 163 V8TestingScope scope; |
| 173 std::unique_ptr<BlobData> data = BlobData::create(); | 164 std::unique_ptr<BlobData> data = BlobData::create(); |
| 174 data->appendText("hello", false); | 165 data->appendText("hello", false); |
| 175 auto size = data->length(); | 166 auto size = data->length(); |
| 176 RefPtr<BlobDataHandle> blobDataHandle = BlobDataHandle::create(std::move(dat
a), size); | 167 RefPtr<BlobDataHandle> blobDataHandle = BlobDataHandle::create(std::move(dat
a), size); |
| 177 BodyStreamBuffer* buffer = new BodyStreamBuffer(scope.getScriptState(), Fetc
hBlobDataConsumerHandle::create(scope.getExecutionContext(), blobDataHandle, new
FakeLoaderFactory)); | 168 BodyStreamBuffer* buffer = new BodyStreamBuffer(scope.getScriptState(), new
BlobBytesConsumer(scope.getExecutionContext(), blobDataHandle)); |
| 178 | 169 |
| 179 EXPECT_FALSE(buffer->isStreamLocked()); | 170 EXPECT_FALSE(buffer->isStreamLocked()); |
| 180 EXPECT_FALSE(buffer->isStreamDisturbed()); | 171 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 181 EXPECT_FALSE(buffer->hasPendingActivity()); | 172 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 182 RefPtr<BlobDataHandle> outputBlobDataHandle = buffer->drainAsBlobDataHandle(
BytesConsumer::BlobSizePolicy::AllowBlobWithInvalidSize); | 173 RefPtr<BlobDataHandle> outputBlobDataHandle = buffer->drainAsBlobDataHandle(
BytesConsumer::BlobSizePolicy::AllowBlobWithInvalidSize); |
| 183 | 174 |
| 184 EXPECT_TRUE(buffer->isStreamLocked()); | 175 EXPECT_TRUE(buffer->isStreamLocked()); |
| 185 EXPECT_TRUE(buffer->isStreamDisturbed()); | 176 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 186 EXPECT_FALSE(buffer->hasPendingActivity()); | 177 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 187 EXPECT_EQ(blobDataHandle, outputBlobDataHandle); | 178 EXPECT_EQ(blobDataHandle, outputBlobDataHandle); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 225 } | 216 } |
| 226 | 217 |
| 227 TEST_F(BodyStreamBufferTest, DrainAsFormData) | 218 TEST_F(BodyStreamBufferTest, DrainAsFormData) |
| 228 { | 219 { |
| 229 V8TestingScope scope; | 220 V8TestingScope scope; |
| 230 FormData* data = FormData::create(UTF8Encoding()); | 221 FormData* data = FormData::create(UTF8Encoding()); |
| 231 data->append("name1", "value1"); | 222 data->append("name1", "value1"); |
| 232 data->append("name2", "value2"); | 223 data->append("name2", "value2"); |
| 233 RefPtr<EncodedFormData> inputFormData = data->encodeMultiPartFormData(); | 224 RefPtr<EncodedFormData> inputFormData = data->encodeMultiPartFormData(); |
| 234 | 225 |
| 235 BodyStreamBuffer* buffer = new BodyStreamBuffer(scope.getScriptState(), Fetc
hFormDataConsumerHandle::create(scope.getExecutionContext(), inputFormData)); | 226 BodyStreamBuffer* buffer = new BodyStreamBuffer(scope.getScriptState(), new
FormDataBytesConsumer(scope.getExecutionContext(), inputFormData)); |
| 236 | 227 |
| 237 EXPECT_FALSE(buffer->isStreamLocked()); | 228 EXPECT_FALSE(buffer->isStreamLocked()); |
| 238 EXPECT_FALSE(buffer->isStreamDisturbed()); | 229 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 239 EXPECT_FALSE(buffer->hasPendingActivity()); | 230 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 240 RefPtr<EncodedFormData> outputFormData = buffer->drainAsFormData(); | 231 RefPtr<EncodedFormData> outputFormData = buffer->drainAsFormData(); |
| 241 | 232 |
| 242 EXPECT_TRUE(buffer->isStreamLocked()); | 233 EXPECT_TRUE(buffer->isStreamLocked()); |
| 243 EXPECT_TRUE(buffer->isStreamDisturbed()); | 234 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 244 EXPECT_FALSE(buffer->hasPendingActivity()); | 235 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 245 EXPECT_EQ(outputFormData->flattenToString(), inputFormData->flattenToString(
)); | 236 EXPECT_EQ(outputFormData->flattenToString(), inputFormData->flattenToString(
)); |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 472 BodyStreamBuffer* buffer = new BodyStreamBuffer(scope.getScriptState(), cons
umer); | 463 BodyStreamBuffer* buffer = new BodyStreamBuffer(scope.getScriptState(), cons
umer); |
| 473 ScriptValue reason(scope.getScriptState(), v8String(scope.getScriptState()->
isolate(), "reason")); | 464 ScriptValue reason(scope.getScriptState(), v8String(scope.getScriptState()->
isolate(), "reason")); |
| 474 EXPECT_FALSE(consumer->isCancelled()); | 465 EXPECT_FALSE(consumer->isCancelled()); |
| 475 buffer->cancel(scope.getScriptState(), reason); | 466 buffer->cancel(scope.getScriptState(), reason); |
| 476 EXPECT_TRUE(consumer->isCancelled()); | 467 EXPECT_TRUE(consumer->isCancelled()); |
| 477 } | 468 } |
| 478 | 469 |
| 479 } // namespace | 470 } // namespace |
| 480 | 471 |
| 481 } // namespace blink | 472 } // namespace blink |
| OLD | NEW |