| 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 "core/html/FormData.h" |
| 7 #include "core/testing/DummyPageHolder.h" | 8 #include "core/testing/DummyPageHolder.h" |
| 8 #include "modules/fetch/DataConsumerHandleTestUtil.h" | 9 #include "modules/fetch/DataConsumerHandleTestUtil.h" |
| 10 #include "modules/fetch/FetchBlobDataConsumerHandle.h" |
| 11 #include "modules/fetch/FetchFormDataConsumerHandle.h" |
| 12 #include "platform/blob/BlobData.h" |
| 13 #include "platform/blob/BlobURL.h" |
| 14 #include "platform/network/EncodedFormData.h" |
| 9 #include "platform/testing/UnitTestHelpers.h" | 15 #include "platform/testing/UnitTestHelpers.h" |
| 10 #include "testing/gmock/include/gmock/gmock.h" | 16 #include "testing/gmock/include/gmock/gmock.h" |
| 11 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
| 12 #include "wtf/OwnPtr.h" | 18 #include "wtf/OwnPtr.h" |
| 13 | 19 |
| 14 namespace blink { | 20 namespace blink { |
| 15 | 21 |
| 16 namespace { | 22 namespace { |
| 17 | 23 |
| 18 using ::testing::InSequence; | 24 using ::testing::InSequence; |
| 19 using ::testing::_; | 25 using ::testing::_; |
| 20 using ::testing::SaveArg; | 26 using ::testing::SaveArg; |
| 21 using Checkpoint = ::testing::StrictMock<::testing::MockFunction<void(int)>>; | 27 using Checkpoint = ::testing::StrictMock<::testing::MockFunction<void(int)>>; |
| 22 using Command = DataConsumerHandleTestUtil::Command; | 28 using Command = DataConsumerHandleTestUtil::Command; |
| 23 using ReplayingHandle = DataConsumerHandleTestUtil::ReplayingHandle; | 29 using ReplayingHandle = DataConsumerHandleTestUtil::ReplayingHandle; |
| 24 using MockFetchDataLoaderClient = DataConsumerHandleTestUtil::MockFetchDataLoade
rClient; | 30 using MockFetchDataLoaderClient = DataConsumerHandleTestUtil::MockFetchDataLoade
rClient; |
| 25 | 31 |
| 32 class FakeLoaderFactory : public FetchBlobDataConsumerHandle::LoaderFactory { |
| 33 public: |
| 34 PassOwnPtr<ThreadableLoader> create(ExecutionContext&, ThreadableLoaderClien
t*, const ThreadableLoaderOptions&, const ResourceLoaderOptions&) override |
| 35 { |
| 36 ASSERT_NOT_REACHED(); |
| 37 return nullptr; |
| 38 } |
| 39 }; |
| 40 |
| 26 class BodyStreamBufferTest : public ::testing::Test { | 41 class BodyStreamBufferTest : public ::testing::Test { |
| 27 public: | 42 public: |
| 28 BodyStreamBufferTest() | 43 BodyStreamBufferTest() |
| 29 { | 44 { |
| 30 m_page = DummyPageHolder::create(IntSize(1, 1)); | 45 m_page = DummyPageHolder::create(IntSize(1, 1)); |
| 31 } | 46 } |
| 32 ~BodyStreamBufferTest() override {} | 47 ~BodyStreamBufferTest() override {} |
| 33 | 48 |
| 34 protected: | 49 protected: |
| 35 ScriptState* getScriptState() { return ScriptState::forMainWorld(m_page->doc
ument().frame()); } | 50 ScriptState* getScriptState() { return ScriptState::forMainWorld(m_page->doc
ument().frame()); } |
| (...skipping 14 matching lines...) Expand all Loading... |
| 50 EXPECT_TRUE(buffer->isStreamReadable()); | 65 EXPECT_TRUE(buffer->isStreamReadable()); |
| 51 | 66 |
| 52 OwnPtr<FetchDataConsumerHandle> handle2 = buffer->releaseHandle(getExecution
Context()); | 67 OwnPtr<FetchDataConsumerHandle> handle2 = buffer->releaseHandle(getExecution
Context()); |
| 53 | 68 |
| 54 ASSERT_EQ(rawHandle, handle2.get()); | 69 ASSERT_EQ(rawHandle, handle2.get()); |
| 55 EXPECT_TRUE(buffer->isStreamLocked()); | 70 EXPECT_TRUE(buffer->isStreamLocked()); |
| 56 EXPECT_TRUE(buffer->isStreamDisturbed()); | 71 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 57 EXPECT_TRUE(buffer->isStreamClosed()); | 72 EXPECT_TRUE(buffer->isStreamClosed()); |
| 58 } | 73 } |
| 59 | 74 |
| 75 TEST_F(BodyStreamBufferTest, DrainAsBlobDataHandle) |
| 76 { |
| 77 OwnPtr<BlobData> data = BlobData::create(); |
| 78 data->appendText("hello", false); |
| 79 auto size = data->length(); |
| 80 RefPtr<BlobDataHandle> blobDataHandle = BlobDataHandle::create(data.release(
), size); |
| 81 BodyStreamBuffer* buffer = new BodyStreamBuffer(FetchBlobDataConsumerHandle:
:create(getExecutionContext(), blobDataHandle, new FakeLoaderFactory)); |
| 82 |
| 83 EXPECT_FALSE(buffer->isStreamLocked()); |
| 84 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 85 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 86 RefPtr<BlobDataHandle> outputBlobDataHandle = buffer->drainAsBlobDataHandle(
getExecutionContext(), FetchDataConsumerHandle::Reader::AllowBlobWithInvalidSize
); |
| 87 |
| 88 EXPECT_TRUE(buffer->isStreamLocked()); |
| 89 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 90 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 91 EXPECT_EQ(blobDataHandle, outputBlobDataHandle); |
| 92 } |
| 93 |
| 94 TEST_F(BodyStreamBufferTest, DrainAsBlobDataHandleReturnsNull) |
| 95 { |
| 96 // This handle is not drainable. |
| 97 OwnPtr<FetchDataConsumerHandle> handle = createFetchDataConsumerHandleFromWe
bHandle(createWaitingDataConsumerHandle()); |
| 98 BodyStreamBuffer* buffer = new BodyStreamBuffer(handle.release()); |
| 99 |
| 100 EXPECT_FALSE(buffer->isStreamLocked()); |
| 101 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 102 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 103 |
| 104 EXPECT_FALSE(buffer->drainAsBlobDataHandle(getExecutionContext(), FetchDataC
onsumerHandle::Reader::AllowBlobWithInvalidSize)); |
| 105 |
| 106 EXPECT_FALSE(buffer->isStreamLocked()); |
| 107 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 108 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 109 } |
| 110 |
| 111 TEST_F(BodyStreamBufferTest, DrainAsFormData) |
| 112 { |
| 113 FormData* data = FormData::create(UTF8Encoding()); |
| 114 data->append("name1", "value1"); |
| 115 data->append("name2", "value2"); |
| 116 RefPtr<EncodedFormData> inputFormData = data->encodeMultiPartFormData(); |
| 117 |
| 118 BodyStreamBuffer* buffer = new BodyStreamBuffer(FetchFormDataConsumerHandle:
:create(getExecutionContext(), inputFormData)); |
| 119 |
| 120 EXPECT_FALSE(buffer->isStreamLocked()); |
| 121 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 122 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 123 RefPtr<EncodedFormData> outputFormData = buffer->drainAsFormData(getExecutio
nContext()); |
| 124 |
| 125 EXPECT_TRUE(buffer->isStreamLocked()); |
| 126 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 127 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 128 EXPECT_EQ(outputFormData->flattenToString(), inputFormData->flattenToString(
)); |
| 129 } |
| 130 |
| 131 TEST_F(BodyStreamBufferTest, DrainAsFormDataReturnsNull) |
| 132 { |
| 133 // This handle is not drainable. |
| 134 OwnPtr<FetchDataConsumerHandle> handle = createFetchDataConsumerHandleFromWe
bHandle(createWaitingDataConsumerHandle()); |
| 135 BodyStreamBuffer* buffer = new BodyStreamBuffer(handle.release()); |
| 136 |
| 137 EXPECT_FALSE(buffer->isStreamLocked()); |
| 138 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 139 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 140 |
| 141 EXPECT_FALSE(buffer->drainAsFormData(getExecutionContext())); |
| 142 |
| 143 EXPECT_FALSE(buffer->isStreamLocked()); |
| 144 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 145 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 146 } |
| 147 |
| 60 TEST_F(BodyStreamBufferTest, LoadBodyStreamBufferAsArrayBuffer) | 148 TEST_F(BodyStreamBufferTest, LoadBodyStreamBufferAsArrayBuffer) |
| 61 { | 149 { |
| 62 Checkpoint checkpoint; | 150 Checkpoint checkpoint; |
| 63 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); | 151 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); |
| 64 DOMArrayBuffer* arrayBuffer = nullptr; | 152 DOMArrayBuffer* arrayBuffer = nullptr; |
| 65 | 153 |
| 66 InSequence s; | 154 InSequence s; |
| 67 EXPECT_CALL(checkpoint, Call(1)); | 155 EXPECT_CALL(checkpoint, Call(1)); |
| 68 EXPECT_CALL(*client, didFetchDataLoadedArrayBufferMock(_)).WillOnce(SaveArg<
0>(&arrayBuffer)); | 156 EXPECT_CALL(*client, didFetchDataLoadedArrayBufferMock(_)).WillOnce(SaveArg<
0>(&arrayBuffer)); |
| 69 EXPECT_CALL(checkpoint, Call(2)); | 157 EXPECT_CALL(checkpoint, Call(2)); |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 311 BodyStreamBuffer* buffer = new BodyStreamBuffer(handle.release()); | 399 BodyStreamBuffer* buffer = new BodyStreamBuffer(handle.release()); |
| 312 checkpoint.Call(1); | 400 checkpoint.Call(1); |
| 313 ScriptValue reason(getScriptState(), v8String(getScriptState()->isolate(), "
reason")); | 401 ScriptValue reason(getScriptState(), v8String(getScriptState()->isolate(), "
reason")); |
| 314 buffer->cancelSource(getScriptState(), reason); | 402 buffer->cancelSource(getScriptState(), reason); |
| 315 checkpoint.Call(2); | 403 checkpoint.Call(2); |
| 316 } | 404 } |
| 317 | 405 |
| 318 } // namespace | 406 } // namespace |
| 319 | 407 |
| 320 } // namespace blink | 408 } // namespace blink |
| OLD | NEW |