Chromium Code Reviews| 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 BodyStreamBuffer* buffer = new BodyStreamBuffer(createFetchDataConsumerHandl eFromWebHandle(createWaitingDataConsumerHandle())); | |
|
tyoshino (SeeGerritForStatus)
2016/04/21 06:47:42
add a comment here or in DataConsumerHandleUtil.h
yhirano
2016/04/21 08:22:35
Done.
| |
| 97 | |
| 98 EXPECT_FALSE(buffer->isStreamLocked()); | |
| 99 EXPECT_FALSE(buffer->isStreamDisturbed()); | |
| 100 EXPECT_FALSE(buffer->hasPendingActivity()); | |
| 101 | |
| 102 EXPECT_FALSE(buffer->drainAsBlobDataHandle(getExecutionContext(), FetchDataC onsumerHandle::Reader::AllowBlobWithInvalidSize)); | |
| 103 | |
| 104 EXPECT_FALSE(buffer->isStreamLocked()); | |
| 105 EXPECT_FALSE(buffer->isStreamDisturbed()); | |
| 106 EXPECT_FALSE(buffer->hasPendingActivity()); | |
| 107 } | |
| 108 | |
| 109 TEST_F(BodyStreamBufferTest, DrainAsFormData) | |
| 110 { | |
| 111 FormData* data = FormData::create(UTF8Encoding()); | |
| 112 data->append("name1", "value1"); | |
| 113 data->append("name2", "value2"); | |
| 114 RefPtr<EncodedFormData> inputFormData = data->encodeMultiPartFormData(); | |
| 115 | |
| 116 BodyStreamBuffer* buffer = new BodyStreamBuffer(FetchFormDataConsumerHandle: :create(getExecutionContext(), inputFormData)); | |
| 117 | |
| 118 EXPECT_FALSE(buffer->isStreamLocked()); | |
| 119 EXPECT_FALSE(buffer->isStreamDisturbed()); | |
| 120 EXPECT_FALSE(buffer->hasPendingActivity()); | |
| 121 RefPtr<EncodedFormData> outputFormData = buffer->drainAsFormData(getExecutio nContext()); | |
| 122 | |
| 123 EXPECT_TRUE(buffer->isStreamLocked()); | |
| 124 EXPECT_TRUE(buffer->isStreamDisturbed()); | |
| 125 EXPECT_FALSE(buffer->hasPendingActivity()); | |
| 126 EXPECT_EQ(outputFormData->flattenToString(), inputFormData->flattenToString( )); | |
| 127 } | |
| 128 | |
| 129 TEST_F(BodyStreamBufferTest, DrainAsFormDataReturnsNull) | |
| 130 { | |
| 131 BodyStreamBuffer* buffer = new BodyStreamBuffer(createFetchDataConsumerHandl eFromWebHandle(createWaitingDataConsumerHandle())); | |
| 132 | |
| 133 EXPECT_FALSE(buffer->isStreamLocked()); | |
| 134 EXPECT_FALSE(buffer->isStreamDisturbed()); | |
| 135 EXPECT_FALSE(buffer->hasPendingActivity()); | |
| 136 | |
| 137 EXPECT_FALSE(buffer->drainAsFormData(getExecutionContext())); | |
| 138 | |
| 139 EXPECT_FALSE(buffer->isStreamLocked()); | |
| 140 EXPECT_FALSE(buffer->isStreamDisturbed()); | |
| 141 EXPECT_FALSE(buffer->hasPendingActivity()); | |
| 142 } | |
| 143 | |
| 60 TEST_F(BodyStreamBufferTest, LoadBodyStreamBufferAsArrayBuffer) | 144 TEST_F(BodyStreamBufferTest, LoadBodyStreamBufferAsArrayBuffer) |
| 61 { | 145 { |
| 62 Checkpoint checkpoint; | 146 Checkpoint checkpoint; |
| 63 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); | 147 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); |
| 64 DOMArrayBuffer* arrayBuffer = nullptr; | 148 DOMArrayBuffer* arrayBuffer = nullptr; |
| 65 | 149 |
| 66 InSequence s; | 150 InSequence s; |
| 67 EXPECT_CALL(checkpoint, Call(1)); | 151 EXPECT_CALL(checkpoint, Call(1)); |
| 68 EXPECT_CALL(*client, didFetchDataLoadedArrayBufferMock(_)).WillOnce(SaveArg< 0>(&arrayBuffer)); | 152 EXPECT_CALL(*client, didFetchDataLoadedArrayBufferMock(_)).WillOnce(SaveArg< 0>(&arrayBuffer)); |
| 69 EXPECT_CALL(checkpoint, Call(2)); | 153 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()); | 395 BodyStreamBuffer* buffer = new BodyStreamBuffer(handle.release()); |
| 312 checkpoint.Call(1); | 396 checkpoint.Call(1); |
| 313 ScriptValue reason(getScriptState(), v8String(getScriptState()->isolate(), " reason")); | 397 ScriptValue reason(getScriptState(), v8String(getScriptState()->isolate(), " reason")); |
| 314 buffer->cancelSource(getScriptState(), reason); | 398 buffer->cancelSource(getScriptState(), reason); |
| 315 checkpoint.Call(2); | 399 checkpoint.Call(2); |
| 316 } | 400 } |
| 317 | 401 |
| 318 } // namespace | 402 } // namespace |
| 319 | 403 |
| 320 } // namespace blink | 404 } // namespace blink |
| OLD | NEW |