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 |