| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/FetchFormDataConsumerHandle.h" | 5 #include "modules/fetch/FetchFormDataConsumerHandle.h" |
| 6 | 6 |
| 7 #include "core/dom/DOMTypedArray.h" | 7 #include "core/dom/DOMTypedArray.h" |
| 8 #include "core/html/FormData.h" | 8 #include "core/html/FormData.h" |
| 9 #include "core/loader/MockThreadableLoader.h" | 9 #include "core/loader/MockThreadableLoader.h" |
| 10 #include "core/loader/ThreadableLoaderClient.h" | 10 #include "core/loader/ThreadableLoaderClient.h" |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 explicit LoaderFactory(PassOwnPtr<WebDataConsumerHandle> handle) | 53 explicit LoaderFactory(PassOwnPtr<WebDataConsumerHandle> handle) |
| 54 : m_client(nullptr) | 54 : m_client(nullptr) |
| 55 , m_handle(std::move(handle)) {} | 55 , m_handle(std::move(handle)) {} |
| 56 PassOwnPtr<ThreadableLoader> create(ExecutionContext&, ThreadableLoaderClien
t* client, const ThreadableLoaderOptions&, const ResourceLoaderOptions&) overrid
e | 56 PassOwnPtr<ThreadableLoader> create(ExecutionContext&, ThreadableLoaderClien
t* client, const ThreadableLoaderOptions&, const ResourceLoaderOptions&) overrid
e |
| 57 { | 57 { |
| 58 m_client = client; | 58 m_client = client; |
| 59 | 59 |
| 60 OwnPtr<MockThreadableLoader> loader = MockThreadableLoader::create(); | 60 OwnPtr<MockThreadableLoader> loader = MockThreadableLoader::create(); |
| 61 EXPECT_CALL(*loader, start(_)).WillOnce(InvokeWithoutArgs(this, &LoaderF
actory::handleDidReceiveResponse)); | 61 EXPECT_CALL(*loader, start(_)).WillOnce(InvokeWithoutArgs(this, &LoaderF
actory::handleDidReceiveResponse)); |
| 62 EXPECT_CALL(*loader, cancel()).Times(1); | 62 EXPECT_CALL(*loader, cancel()).Times(1); |
| 63 return loader.release(); | 63 return std::move(loader); |
| 64 } | 64 } |
| 65 | 65 |
| 66 private: | 66 private: |
| 67 void handleDidReceiveResponse() | 67 void handleDidReceiveResponse() |
| 68 { | 68 { |
| 69 m_client->didReceiveResponse(0, ResourceResponse(), m_handle.release()); | 69 m_client->didReceiveResponse(0, ResourceResponse(), std::move(m_handle))
; |
| 70 } | 70 } |
| 71 | 71 |
| 72 ThreadableLoaderClient* m_client; | 72 ThreadableLoaderClient* m_client; |
| 73 OwnPtr<WebDataConsumerHandle> m_handle; | 73 OwnPtr<WebDataConsumerHandle> m_handle; |
| 74 }; | 74 }; |
| 75 | 75 |
| 76 class FetchFormDataConsumerHandleTest : public ::testing::Test { | 76 class FetchFormDataConsumerHandleTest : public ::testing::Test { |
| 77 public: | 77 public: |
| 78 FetchFormDataConsumerHandleTest() : m_page(DummyPageHolder::create(IntSize(1
, 1))) {} | 78 FetchFormDataConsumerHandleTest() : m_page(DummyPageHolder::create(IntSize(1
, 1))) {} |
| 79 | 79 |
| 80 protected: | 80 protected: |
| 81 Document* getDocument() { return &m_page->document(); } | 81 Document* getDocument() { return &m_page->document(); } |
| 82 | 82 |
| 83 OwnPtr<DummyPageHolder> m_page; | 83 OwnPtr<DummyPageHolder> m_page; |
| 84 }; | 84 }; |
| 85 | 85 |
| 86 PassRefPtr<EncodedFormData> complexFormData() | 86 PassRefPtr<EncodedFormData> complexFormData() |
| 87 { | 87 { |
| 88 RefPtr<EncodedFormData> data = EncodedFormData::create(); | 88 RefPtr<EncodedFormData> data = EncodedFormData::create(); |
| 89 | 89 |
| 90 data->appendData("foo", 3); | 90 data->appendData("foo", 3); |
| 91 data->appendFileRange("/foo/bar/baz", 3, 4, 5); | 91 data->appendFileRange("/foo/bar/baz", 3, 4, 5); |
| 92 data->appendFileSystemURLRange(KURL(KURL(), "file:///foo/bar/baz"), 6, 7, 8)
; | 92 data->appendFileSystemURLRange(KURL(KURL(), "file:///foo/bar/baz"), 6, 7, 8)
; |
| 93 OwnPtr<BlobData> blobData = BlobData::create(); | 93 OwnPtr<BlobData> blobData = BlobData::create(); |
| 94 blobData->appendText("hello", false); | 94 blobData->appendText("hello", false); |
| 95 auto size = blobData->length(); | 95 auto size = blobData->length(); |
| 96 RefPtr<BlobDataHandle> blobDataHandle = BlobDataHandle::create(blobData.rele
ase(), size); | 96 RefPtr<BlobDataHandle> blobDataHandle = BlobDataHandle::create(std::move(blo
bData), size); |
| 97 data->appendBlob(blobDataHandle->uuid(), blobDataHandle); | 97 data->appendBlob(blobDataHandle->uuid(), blobDataHandle); |
| 98 Vector<char> boundary; | 98 Vector<char> boundary; |
| 99 boundary.append("\0", 1); | 99 boundary.append("\0", 1); |
| 100 data->setBoundary(boundary); | 100 data->setBoundary(boundary); |
| 101 return data.release(); | 101 return data.release(); |
| 102 } | 102 } |
| 103 | 103 |
| 104 void verifyComplexFormData(EncodedFormData* data) | 104 void verifyComplexFormData(EncodedFormData* data) |
| 105 { | 105 { |
| 106 const auto& elements = data->elements(); | 106 const auto& elements = data->elements(); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 126 if (!elements[3].m_optionalBlobDataHandle) { | 126 if (!elements[3].m_optionalBlobDataHandle) { |
| 127 FAIL() << "optional BlobDataHandle must be set."; | 127 FAIL() << "optional BlobDataHandle must be set."; |
| 128 } | 128 } |
| 129 EXPECT_EQ(elements[3].m_blobUUID, elements[3].m_optionalBlobDataHandle->uuid
()); | 129 EXPECT_EQ(elements[3].m_blobUUID, elements[3].m_optionalBlobDataHandle->uuid
()); |
| 130 EXPECT_EQ(5u, elements[3].m_optionalBlobDataHandle->size()); | 130 EXPECT_EQ(5u, elements[3].m_optionalBlobDataHandle->size()); |
| 131 } | 131 } |
| 132 | 132 |
| 133 TEST_F(FetchFormDataConsumerHandleTest, ReadFromString) | 133 TEST_F(FetchFormDataConsumerHandleTest, ReadFromString) |
| 134 { | 134 { |
| 135 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(String("hello, world")); | 135 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(String("hello, world")); |
| 136 HandleReaderRunner<HandleReader> runner(handle.release()); | 136 HandleReaderRunner<HandleReader> runner(std::move(handle)); |
| 137 OwnPtr<HandleReadResult> r = runner.wait(); | 137 OwnPtr<HandleReadResult> r = runner.wait(); |
| 138 EXPECT_EQ(kDone, r->result()); | 138 EXPECT_EQ(kDone, r->result()); |
| 139 EXPECT_EQ("hello, world", toString(r->data())); | 139 EXPECT_EQ("hello, world", toString(r->data())); |
| 140 } | 140 } |
| 141 | 141 |
| 142 TEST_F(FetchFormDataConsumerHandleTest, TwoPhaseReadFromString) | 142 TEST_F(FetchFormDataConsumerHandleTest, TwoPhaseReadFromString) |
| 143 { | 143 { |
| 144 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(String("hello, world")); | 144 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(String("hello, world")); |
| 145 HandleReaderRunner<HandleTwoPhaseReader> runner(handle.release()); | 145 HandleReaderRunner<HandleTwoPhaseReader> runner(std::move(handle)); |
| 146 OwnPtr<HandleReadResult> r = runner.wait(); | 146 OwnPtr<HandleReadResult> r = runner.wait(); |
| 147 EXPECT_EQ(kDone, r->result()); | 147 EXPECT_EQ(kDone, r->result()); |
| 148 EXPECT_EQ("hello, world", toString(r->data())); | 148 EXPECT_EQ("hello, world", toString(r->data())); |
| 149 } | 149 } |
| 150 | 150 |
| 151 TEST_F(FetchFormDataConsumerHandleTest, ReadFromStringNonLatin) | 151 TEST_F(FetchFormDataConsumerHandleTest, ReadFromStringNonLatin) |
| 152 { | 152 { |
| 153 UChar cs[] = {0x3042, 0}; | 153 UChar cs[] = {0x3042, 0}; |
| 154 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(String(cs)); | 154 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(String(cs)); |
| 155 HandleReaderRunner<HandleReader> runner(handle.release()); | 155 HandleReaderRunner<HandleReader> runner(std::move(handle)); |
| 156 OwnPtr<HandleReadResult> r = runner.wait(); | 156 OwnPtr<HandleReadResult> r = runner.wait(); |
| 157 EXPECT_EQ(kDone, r->result()); | 157 EXPECT_EQ(kDone, r->result()); |
| 158 EXPECT_EQ("\xe3\x81\x82", toString(r->data())); | 158 EXPECT_EQ("\xe3\x81\x82", toString(r->data())); |
| 159 } | 159 } |
| 160 | 160 |
| 161 TEST_F(FetchFormDataConsumerHandleTest, ReadFromArrayBuffer) | 161 TEST_F(FetchFormDataConsumerHandleTest, ReadFromArrayBuffer) |
| 162 { | 162 { |
| 163 const unsigned char data[] = { 0x21, 0xfe, 0x00, 0x00, 0xff, 0xa3, 0x42, 0x3
0, 0x42, 0x99, 0x88 }; | 163 const unsigned char data[] = { 0x21, 0xfe, 0x00, 0x00, 0xff, 0xa3, 0x42, 0x3
0, 0x42, 0x99, 0x88 }; |
| 164 DOMArrayBuffer* buffer = DOMArrayBuffer::create(data, WTF_ARRAY_LENGTH(data)
); | 164 DOMArrayBuffer* buffer = DOMArrayBuffer::create(data, WTF_ARRAY_LENGTH(data)
); |
| 165 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(buffer); | 165 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(buffer); |
| 166 HandleReaderRunner<HandleReader> runner(handle.release()); | 166 HandleReaderRunner<HandleReader> runner(std::move(handle)); |
| 167 OwnPtr<HandleReadResult> r = runner.wait(); | 167 OwnPtr<HandleReadResult> r = runner.wait(); |
| 168 EXPECT_EQ(kDone, r->result()); | 168 EXPECT_EQ(kDone, r->result()); |
| 169 Vector<char> expected; | 169 Vector<char> expected; |
| 170 expected.append(data, WTF_ARRAY_LENGTH(data)); | 170 expected.append(data, WTF_ARRAY_LENGTH(data)); |
| 171 EXPECT_EQ(expected, r->data()); | 171 EXPECT_EQ(expected, r->data()); |
| 172 } | 172 } |
| 173 | 173 |
| 174 TEST_F(FetchFormDataConsumerHandleTest, ReadFromArrayBufferView) | 174 TEST_F(FetchFormDataConsumerHandleTest, ReadFromArrayBufferView) |
| 175 { | 175 { |
| 176 const unsigned char data[] = { 0x21, 0xfe, 0x00, 0x00, 0xff, 0xa3, 0x42, 0x3
0, 0x42, 0x99, 0x88 }; | 176 const unsigned char data[] = { 0x21, 0xfe, 0x00, 0x00, 0xff, 0xa3, 0x42, 0x3
0, 0x42, 0x99, 0x88 }; |
| 177 const size_t offset = 1, size = 4; | 177 const size_t offset = 1, size = 4; |
| 178 DOMArrayBuffer* buffer = DOMArrayBuffer::create(data, WTF_ARRAY_LENGTH(data)
); | 178 DOMArrayBuffer* buffer = DOMArrayBuffer::create(data, WTF_ARRAY_LENGTH(data)
); |
| 179 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(DOMUint8Array::create(buffer, offset, size)); | 179 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(DOMUint8Array::create(buffer, offset, size)); |
| 180 HandleReaderRunner<HandleReader> runner(handle.release()); | 180 HandleReaderRunner<HandleReader> runner(std::move(handle)); |
| 181 OwnPtr<HandleReadResult> r = runner.wait(); | 181 OwnPtr<HandleReadResult> r = runner.wait(); |
| 182 EXPECT_EQ(kDone, r->result()); | 182 EXPECT_EQ(kDone, r->result()); |
| 183 Vector<char> expected; | 183 Vector<char> expected; |
| 184 expected.append(data + offset, size); | 184 expected.append(data + offset, size); |
| 185 EXPECT_EQ(expected, r->data()); | 185 EXPECT_EQ(expected, r->data()); |
| 186 } | 186 } |
| 187 | 187 |
| 188 TEST_F(FetchFormDataConsumerHandleTest, ReadFromSimplFormData) | 188 TEST_F(FetchFormDataConsumerHandleTest, ReadFromSimplFormData) |
| 189 { | 189 { |
| 190 RefPtr<EncodedFormData> data = EncodedFormData::create(); | 190 RefPtr<EncodedFormData> data = EncodedFormData::create(); |
| 191 data->appendData("foo", 3); | 191 data->appendData("foo", 3); |
| 192 data->appendData("hoge", 4); | 192 data->appendData("hoge", 4); |
| 193 | 193 |
| 194 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(getDocument(), data); | 194 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(getDocument(), data); |
| 195 HandleReaderRunner<HandleReader> runner(handle.release()); | 195 HandleReaderRunner<HandleReader> runner(std::move(handle)); |
| 196 testing::runPendingTasks(); | 196 testing::runPendingTasks(); |
| 197 OwnPtr<HandleReadResult> r = runner.wait(); | 197 OwnPtr<HandleReadResult> r = runner.wait(); |
| 198 EXPECT_EQ(kDone, r->result()); | 198 EXPECT_EQ(kDone, r->result()); |
| 199 EXPECT_EQ("foohoge", toString(r->data())); | 199 EXPECT_EQ("foohoge", toString(r->data())); |
| 200 } | 200 } |
| 201 | 201 |
| 202 TEST_F(FetchFormDataConsumerHandleTest, ReadFromComplexFormData) | 202 TEST_F(FetchFormDataConsumerHandleTest, ReadFromComplexFormData) |
| 203 { | 203 { |
| 204 RefPtr<EncodedFormData> data = complexFormData(); | 204 RefPtr<EncodedFormData> data = complexFormData(); |
| 205 OwnPtr<ReplayingHandle> src = ReplayingHandle::create(); | 205 OwnPtr<ReplayingHandle> src = ReplayingHandle::create(); |
| 206 src->add(Command(Command::Data, "bar")); | 206 src->add(Command(Command::Data, "bar")); |
| 207 src->add(Command(Command::Done)); | 207 src->add(Command(Command::Done)); |
| 208 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
ForTest(getDocument(), data, new LoaderFactory(src.release())); | 208 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
ForTest(getDocument(), data, new LoaderFactory(std::move(src))); |
| 209 char c; | 209 char c; |
| 210 size_t readSize; | 210 size_t readSize; |
| 211 EXPECT_EQ(kShouldWait, handle->obtainReader(nullptr)->read(&c, 1, kNone, &re
adSize)); | 211 EXPECT_EQ(kShouldWait, handle->obtainReader(nullptr)->read(&c, 1, kNone, &re
adSize)); |
| 212 | 212 |
| 213 HandleReaderRunner<HandleReader> runner(handle.release()); | 213 HandleReaderRunner<HandleReader> runner(std::move(handle)); |
| 214 testing::runPendingTasks(); | 214 testing::runPendingTasks(); |
| 215 OwnPtr<HandleReadResult> r = runner.wait(); | 215 OwnPtr<HandleReadResult> r = runner.wait(); |
| 216 EXPECT_EQ(kDone, r->result()); | 216 EXPECT_EQ(kDone, r->result()); |
| 217 EXPECT_EQ("bar", toString(r->data())); | 217 EXPECT_EQ("bar", toString(r->data())); |
| 218 } | 218 } |
| 219 | 219 |
| 220 TEST_F(FetchFormDataConsumerHandleTest, TwoPhaseReadFromComplexFormData) | 220 TEST_F(FetchFormDataConsumerHandleTest, TwoPhaseReadFromComplexFormData) |
| 221 { | 221 { |
| 222 RefPtr<EncodedFormData> data = complexFormData(); | 222 RefPtr<EncodedFormData> data = complexFormData(); |
| 223 OwnPtr<ReplayingHandle> src = ReplayingHandle::create(); | 223 OwnPtr<ReplayingHandle> src = ReplayingHandle::create(); |
| 224 src->add(Command(Command::Data, "bar")); | 224 src->add(Command(Command::Data, "bar")); |
| 225 src->add(Command(Command::Done)); | 225 src->add(Command(Command::Done)); |
| 226 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
ForTest(getDocument(), data, new LoaderFactory(src.release())); | 226 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
ForTest(getDocument(), data, new LoaderFactory(std::move(src))); |
| 227 char c; | 227 char c; |
| 228 size_t readSize; | 228 size_t readSize; |
| 229 EXPECT_EQ(kShouldWait, handle->obtainReader(nullptr)->read(&c, 1, kNone, &re
adSize)); | 229 EXPECT_EQ(kShouldWait, handle->obtainReader(nullptr)->read(&c, 1, kNone, &re
adSize)); |
| 230 | 230 |
| 231 HandleReaderRunner<HandleTwoPhaseReader> runner(handle.release()); | 231 HandleReaderRunner<HandleTwoPhaseReader> runner(std::move(handle)); |
| 232 testing::runPendingTasks(); | 232 testing::runPendingTasks(); |
| 233 OwnPtr<HandleReadResult> r = runner.wait(); | 233 OwnPtr<HandleReadResult> r = runner.wait(); |
| 234 EXPECT_EQ(kDone, r->result()); | 234 EXPECT_EQ(kDone, r->result()); |
| 235 EXPECT_EQ("bar", toString(r->data())); | 235 EXPECT_EQ("bar", toString(r->data())); |
| 236 } | 236 } |
| 237 | 237 |
| 238 TEST_F(FetchFormDataConsumerHandleTest, DrainAsBlobDataHandleFromString) | 238 TEST_F(FetchFormDataConsumerHandleTest, DrainAsBlobDataHandleFromString) |
| 239 { | 239 { |
| 240 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(String("hello, world")); | 240 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(String("hello, world")); |
| 241 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); | 241 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 390 EXPECT_FALSE(reader->drainAsFormData()); | 390 EXPECT_FALSE(reader->drainAsFormData()); |
| 391 reader->endRead(0); | 391 reader->endRead(0); |
| 392 EXPECT_FALSE(reader->drainAsFormData()); | 392 EXPECT_FALSE(reader->drainAsFormData()); |
| 393 } | 393 } |
| 394 | 394 |
| 395 TEST_F(FetchFormDataConsumerHandleTest, ZeroByteReadDoesNotAffectDrainingForComp
lexFormData) | 395 TEST_F(FetchFormDataConsumerHandleTest, ZeroByteReadDoesNotAffectDrainingForComp
lexFormData) |
| 396 { | 396 { |
| 397 OwnPtr<ReplayingHandle> src = ReplayingHandle::create(); | 397 OwnPtr<ReplayingHandle> src = ReplayingHandle::create(); |
| 398 src->add(Command(Command::Data, "bar")); | 398 src->add(Command(Command::Data, "bar")); |
| 399 src->add(Command(Command::Done)); | 399 src->add(Command(Command::Done)); |
| 400 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
ForTest(getDocument(), complexFormData(), new LoaderFactory(src.release())); | 400 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
ForTest(getDocument(), complexFormData(), new LoaderFactory(std::move(src))); |
| 401 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); | 401 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); |
| 402 size_t readSize; | 402 size_t readSize; |
| 403 EXPECT_EQ(kShouldWait, reader->read(nullptr, 0, kNone, &readSize)); | 403 EXPECT_EQ(kShouldWait, reader->read(nullptr, 0, kNone, &readSize)); |
| 404 testing::runPendingTasks(); | 404 testing::runPendingTasks(); |
| 405 EXPECT_EQ(kOk, reader->read(nullptr, 0, kNone, &readSize)); | 405 EXPECT_EQ(kOk, reader->read(nullptr, 0, kNone, &readSize)); |
| 406 RefPtr<EncodedFormData> formData = reader->drainAsFormData(); | 406 RefPtr<EncodedFormData> formData = reader->drainAsFormData(); |
| 407 ASSERT_TRUE(formData); | 407 ASSERT_TRUE(formData); |
| 408 EXPECT_TRUE(formData->isSafeToSendToAnotherThread()); | 408 EXPECT_TRUE(formData->isSafeToSendToAnotherThread()); |
| 409 verifyComplexFormData(formData.get()); | 409 verifyComplexFormData(formData.get()); |
| 410 } | 410 } |
| 411 | 411 |
| 412 TEST_F(FetchFormDataConsumerHandleTest, OneByteReadAffectsDrainingForComplexForm
Data) | 412 TEST_F(FetchFormDataConsumerHandleTest, OneByteReadAffectsDrainingForComplexForm
Data) |
| 413 { | 413 { |
| 414 OwnPtr<ReplayingHandle> src = ReplayingHandle::create(); | 414 OwnPtr<ReplayingHandle> src = ReplayingHandle::create(); |
| 415 src->add(Command(Command::Data, "bar")); | 415 src->add(Command(Command::Data, "bar")); |
| 416 src->add(Command(Command::Done)); | 416 src->add(Command(Command::Done)); |
| 417 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
ForTest(getDocument(), complexFormData(), new LoaderFactory(src.release())); | 417 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
ForTest(getDocument(), complexFormData(), new LoaderFactory(std::move(src))); |
| 418 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); | 418 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); |
| 419 char c; | 419 char c; |
| 420 size_t readSize; | 420 size_t readSize; |
| 421 EXPECT_EQ(kShouldWait, reader->read(&c, 1, kNone, &readSize)); | 421 EXPECT_EQ(kShouldWait, reader->read(&c, 1, kNone, &readSize)); |
| 422 testing::runPendingTasks(); | 422 testing::runPendingTasks(); |
| 423 EXPECT_EQ(kOk, reader->read(&c, 1, kNone, &readSize)); | 423 EXPECT_EQ(kOk, reader->read(&c, 1, kNone, &readSize)); |
| 424 EXPECT_EQ(1u, readSize); | 424 EXPECT_EQ(1u, readSize); |
| 425 EXPECT_EQ('b', c); | 425 EXPECT_EQ('b', c); |
| 426 EXPECT_FALSE(reader->drainAsFormData()); | 426 EXPECT_FALSE(reader->drainAsFormData()); |
| 427 } | 427 } |
| 428 | 428 |
| 429 TEST_F(FetchFormDataConsumerHandleTest, BeginReadAffectsDrainingForComplexFormDa
ta) | 429 TEST_F(FetchFormDataConsumerHandleTest, BeginReadAffectsDrainingForComplexFormDa
ta) |
| 430 { | 430 { |
| 431 OwnPtr<ReplayingHandle> src = ReplayingHandle::create(); | 431 OwnPtr<ReplayingHandle> src = ReplayingHandle::create(); |
| 432 src->add(Command(Command::Data, "bar")); | 432 src->add(Command(Command::Data, "bar")); |
| 433 src->add(Command(Command::Done)); | 433 src->add(Command(Command::Done)); |
| 434 const void* buffer = nullptr; | 434 const void* buffer = nullptr; |
| 435 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
ForTest(getDocument(), complexFormData(), new LoaderFactory(src.release())); | 435 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
ForTest(getDocument(), complexFormData(), new LoaderFactory(std::move(src))); |
| 436 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); | 436 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); |
| 437 size_t available; | 437 size_t available; |
| 438 EXPECT_EQ(kShouldWait, reader->beginRead(&buffer, kNone, &available)); | 438 EXPECT_EQ(kShouldWait, reader->beginRead(&buffer, kNone, &available)); |
| 439 testing::runPendingTasks(); | 439 testing::runPendingTasks(); |
| 440 EXPECT_EQ(kOk, reader->beginRead(&buffer, kNone, &available)); | 440 EXPECT_EQ(kOk, reader->beginRead(&buffer, kNone, &available)); |
| 441 EXPECT_FALSE(reader->drainAsFormData()); | 441 EXPECT_FALSE(reader->drainAsFormData()); |
| 442 reader->endRead(0); | 442 reader->endRead(0); |
| 443 EXPECT_FALSE(reader->drainAsFormData()); | 443 EXPECT_FALSE(reader->drainAsFormData()); |
| 444 } | 444 } |
| 445 | 445 |
| 446 } // namespace | 446 } // namespace |
| 447 } // namespace blink | 447 } // namespace blink |
| OLD | NEW |