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 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
70 | 70 |
71 ThreadableLoaderClient* m_client; | 71 ThreadableLoaderClient* m_client; |
72 OwnPtr<WebDataConsumerHandle> m_handle; | 72 OwnPtr<WebDataConsumerHandle> m_handle; |
73 }; | 73 }; |
74 | 74 |
75 class FetchFormDataConsumerHandleTest : public ::testing::Test { | 75 class FetchFormDataConsumerHandleTest : public ::testing::Test { |
76 public: | 76 public: |
77 FetchFormDataConsumerHandleTest() : m_page(DummyPageHolder::create(IntSize(1
, 1))) {} | 77 FetchFormDataConsumerHandleTest() : m_page(DummyPageHolder::create(IntSize(1
, 1))) {} |
78 | 78 |
79 protected: | 79 protected: |
80 Document* document() { return &m_page->document(); } | 80 Document* getDocument() { return &m_page->document(); } |
81 | 81 |
82 OwnPtr<DummyPageHolder> m_page; | 82 OwnPtr<DummyPageHolder> m_page; |
83 }; | 83 }; |
84 | 84 |
85 PassRefPtr<EncodedFormData> complexFormData() | 85 PassRefPtr<EncodedFormData> complexFormData() |
86 { | 86 { |
87 RefPtr<EncodedFormData> data = EncodedFormData::create(); | 87 RefPtr<EncodedFormData> data = EncodedFormData::create(); |
88 | 88 |
89 data->appendData("foo", 3); | 89 data->appendData("foo", 3); |
90 data->appendFileRange("/foo/bar/baz", 3, 4, 5); | 90 data->appendFileRange("/foo/bar/baz", 3, 4, 5); |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 expected.append(data + offset, size); | 183 expected.append(data + offset, size); |
184 EXPECT_EQ(expected, r->data()); | 184 EXPECT_EQ(expected, r->data()); |
185 } | 185 } |
186 | 186 |
187 TEST_F(FetchFormDataConsumerHandleTest, ReadFromSimplFormData) | 187 TEST_F(FetchFormDataConsumerHandleTest, ReadFromSimplFormData) |
188 { | 188 { |
189 RefPtr<EncodedFormData> data = EncodedFormData::create(); | 189 RefPtr<EncodedFormData> data = EncodedFormData::create(); |
190 data->appendData("foo", 3); | 190 data->appendData("foo", 3); |
191 data->appendData("hoge", 4); | 191 data->appendData("hoge", 4); |
192 | 192 |
193 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(document(), data); | 193 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(getDocument(), data); |
194 HandleReaderRunner<HandleReader> runner(handle.release()); | 194 HandleReaderRunner<HandleReader> runner(handle.release()); |
195 testing::runPendingTasks(); | 195 testing::runPendingTasks(); |
196 OwnPtr<HandleReadResult> r = runner.wait(); | 196 OwnPtr<HandleReadResult> r = runner.wait(); |
197 EXPECT_EQ(kDone, r->result()); | 197 EXPECT_EQ(kDone, r->result()); |
198 EXPECT_EQ("foohoge", toString(r->data())); | 198 EXPECT_EQ("foohoge", toString(r->data())); |
199 } | 199 } |
200 | 200 |
201 TEST_F(FetchFormDataConsumerHandleTest, ReadFromComplexFormData) | 201 TEST_F(FetchFormDataConsumerHandleTest, ReadFromComplexFormData) |
202 { | 202 { |
203 RefPtr<EncodedFormData> data = complexFormData(); | 203 RefPtr<EncodedFormData> data = complexFormData(); |
204 OwnPtr<ReplayingHandle> src = ReplayingHandle::create(); | 204 OwnPtr<ReplayingHandle> src = ReplayingHandle::create(); |
205 src->add(Command(Command::Data, "bar")); | 205 src->add(Command(Command::Data, "bar")); |
206 src->add(Command(Command::Done)); | 206 src->add(Command(Command::Done)); |
207 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
ForTest(document(), data, new LoaderFactory(src.release())); | 207 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
ForTest(getDocument(), data, new LoaderFactory(src.release())); |
208 char c; | 208 char c; |
209 size_t readSize; | 209 size_t readSize; |
210 EXPECT_EQ(kShouldWait, handle->obtainReader(nullptr)->read(&c, 1, kNone, &re
adSize)); | 210 EXPECT_EQ(kShouldWait, handle->obtainReader(nullptr)->read(&c, 1, kNone, &re
adSize)); |
211 | 211 |
212 HandleReaderRunner<HandleReader> runner(handle.release()); | 212 HandleReaderRunner<HandleReader> runner(handle.release()); |
213 testing::runPendingTasks(); | 213 testing::runPendingTasks(); |
214 OwnPtr<HandleReadResult> r = runner.wait(); | 214 OwnPtr<HandleReadResult> r = runner.wait(); |
215 EXPECT_EQ(kDone, r->result()); | 215 EXPECT_EQ(kDone, r->result()); |
216 EXPECT_EQ("bar", toString(r->data())); | 216 EXPECT_EQ("bar", toString(r->data())); |
217 } | 217 } |
218 | 218 |
219 TEST_F(FetchFormDataConsumerHandleTest, TwoPhaseReadFromComplexFormData) | 219 TEST_F(FetchFormDataConsumerHandleTest, TwoPhaseReadFromComplexFormData) |
220 { | 220 { |
221 RefPtr<EncodedFormData> data = complexFormData(); | 221 RefPtr<EncodedFormData> data = complexFormData(); |
222 OwnPtr<ReplayingHandle> src = ReplayingHandle::create(); | 222 OwnPtr<ReplayingHandle> src = ReplayingHandle::create(); |
223 src->add(Command(Command::Data, "bar")); | 223 src->add(Command(Command::Data, "bar")); |
224 src->add(Command(Command::Done)); | 224 src->add(Command(Command::Done)); |
225 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
ForTest(document(), data, new LoaderFactory(src.release())); | 225 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
ForTest(getDocument(), data, new LoaderFactory(src.release())); |
226 char c; | 226 char c; |
227 size_t readSize; | 227 size_t readSize; |
228 EXPECT_EQ(kShouldWait, handle->obtainReader(nullptr)->read(&c, 1, kNone, &re
adSize)); | 228 EXPECT_EQ(kShouldWait, handle->obtainReader(nullptr)->read(&c, 1, kNone, &re
adSize)); |
229 | 229 |
230 HandleReaderRunner<HandleTwoPhaseReader> runner(handle.release()); | 230 HandleReaderRunner<HandleTwoPhaseReader> runner(handle.release()); |
231 testing::runPendingTasks(); | 231 testing::runPendingTasks(); |
232 OwnPtr<HandleReadResult> r = runner.wait(); | 232 OwnPtr<HandleReadResult> r = runner.wait(); |
233 EXPECT_EQ(kDone, r->result()); | 233 EXPECT_EQ(kDone, r->result()); |
234 EXPECT_EQ("bar", toString(r->data())); | 234 EXPECT_EQ("bar", toString(r->data())); |
235 } | 235 } |
(...skipping 28 matching lines...) Expand all Loading... |
264 EXPECT_EQ(kDone, reader->read(&c, 1, kNone, &readSize)); | 264 EXPECT_EQ(kDone, reader->read(&c, 1, kNone, &readSize)); |
265 } | 265 } |
266 | 266 |
267 TEST_F(FetchFormDataConsumerHandleTest, DrainAsBlobDataHandleFromSimpleFormData) | 267 TEST_F(FetchFormDataConsumerHandleTest, DrainAsBlobDataHandleFromSimpleFormData) |
268 { | 268 { |
269 FormData* data = FormData::create(UTF8Encoding()); | 269 FormData* data = FormData::create(UTF8Encoding()); |
270 data->append("name1", "value1"); | 270 data->append("name1", "value1"); |
271 data->append("name2", "value2"); | 271 data->append("name2", "value2"); |
272 RefPtr<EncodedFormData> inputFormData = data->encodeMultiPartFormData(); | 272 RefPtr<EncodedFormData> inputFormData = data->encodeMultiPartFormData(); |
273 | 273 |
274 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(document(), inputFormData); | 274 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(getDocument(), inputFormData); |
275 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); | 275 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); |
276 RefPtr<BlobDataHandle> blobDataHandle = reader->drainAsBlobDataHandle(); | 276 RefPtr<BlobDataHandle> blobDataHandle = reader->drainAsBlobDataHandle(); |
277 ASSERT_TRUE(blobDataHandle); | 277 ASSERT_TRUE(blobDataHandle); |
278 | 278 |
279 EXPECT_EQ(String(), blobDataHandle->type()); | 279 EXPECT_EQ(String(), blobDataHandle->type()); |
280 EXPECT_EQ(inputFormData->flattenToString().utf8().length(), blobDataHandle->
size()); | 280 EXPECT_EQ(inputFormData->flattenToString().utf8().length(), blobDataHandle->
size()); |
281 EXPECT_EQ(nullptr, reader->drainAsFormData()); | 281 EXPECT_EQ(nullptr, reader->drainAsFormData()); |
282 char c; | 282 char c; |
283 size_t readSize; | 283 size_t readSize; |
284 EXPECT_EQ(kDone, reader->read(&c, 1, kNone, &readSize)); | 284 EXPECT_EQ(kDone, reader->read(&c, 1, kNone, &readSize)); |
285 } | 285 } |
286 | 286 |
287 TEST_F(FetchFormDataConsumerHandleTest, DrainAsBlobDataHandleFromComplexFormData
) | 287 TEST_F(FetchFormDataConsumerHandleTest, DrainAsBlobDataHandleFromComplexFormData
) |
288 { | 288 { |
289 RefPtr<EncodedFormData> inputFormData = complexFormData(); | 289 RefPtr<EncodedFormData> inputFormData = complexFormData(); |
290 | 290 |
291 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(document(), inputFormData); | 291 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(getDocument(), inputFormData); |
292 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); | 292 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); |
293 RefPtr<BlobDataHandle> blobDataHandle = reader->drainAsBlobDataHandle(); | 293 RefPtr<BlobDataHandle> blobDataHandle = reader->drainAsBlobDataHandle(); |
294 ASSERT_TRUE(blobDataHandle); | 294 ASSERT_TRUE(blobDataHandle); |
295 | 295 |
296 EXPECT_EQ(nullptr, reader->drainAsFormData()); | 296 EXPECT_EQ(nullptr, reader->drainAsFormData()); |
297 char c; | 297 char c; |
298 size_t readSize; | 298 size_t readSize; |
299 EXPECT_EQ(kDone, reader->read(&c, 1, kNone, &readSize)); | 299 EXPECT_EQ(kDone, reader->read(&c, 1, kNone, &readSize)); |
300 } | 300 } |
301 | 301 |
(...skipping 22 matching lines...) Expand all Loading... |
324 EXPECT_EQ("foo", formData->flattenToString()); | 324 EXPECT_EQ("foo", formData->flattenToString()); |
325 } | 325 } |
326 | 326 |
327 TEST_F(FetchFormDataConsumerHandleTest, DrainAsFormDataFromSimpleFormData) | 327 TEST_F(FetchFormDataConsumerHandleTest, DrainAsFormDataFromSimpleFormData) |
328 { | 328 { |
329 FormData* data = FormData::create(UTF8Encoding()); | 329 FormData* data = FormData::create(UTF8Encoding()); |
330 data->append("name1", "value1"); | 330 data->append("name1", "value1"); |
331 data->append("name2", "value2"); | 331 data->append("name2", "value2"); |
332 RefPtr<EncodedFormData> inputFormData = data->encodeMultiPartFormData(); | 332 RefPtr<EncodedFormData> inputFormData = data->encodeMultiPartFormData(); |
333 | 333 |
334 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(document(), inputFormData); | 334 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(getDocument(), inputFormData); |
335 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); | 335 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); |
336 RefPtr<EncodedFormData> outputFormData = reader->drainAsFormData(); | 336 RefPtr<EncodedFormData> outputFormData = reader->drainAsFormData(); |
337 ASSERT_TRUE(outputFormData); | 337 ASSERT_TRUE(outputFormData); |
338 EXPECT_TRUE(outputFormData->isSafeToSendToAnotherThread()); | 338 EXPECT_TRUE(outputFormData->isSafeToSendToAnotherThread()); |
339 EXPECT_NE(outputFormData.get(), inputFormData.get()); | 339 EXPECT_NE(outputFormData.get(), inputFormData.get()); |
340 EXPECT_EQ(inputFormData->flattenToString(), outputFormData->flattenToString(
)); | 340 EXPECT_EQ(inputFormData->flattenToString(), outputFormData->flattenToString(
)); |
341 } | 341 } |
342 | 342 |
343 TEST_F(FetchFormDataConsumerHandleTest, DrainAsFormDataFromComplexFormData) | 343 TEST_F(FetchFormDataConsumerHandleTest, DrainAsFormDataFromComplexFormData) |
344 { | 344 { |
345 RefPtr<EncodedFormData> inputFormData = complexFormData(); | 345 RefPtr<EncodedFormData> inputFormData = complexFormData(); |
346 | 346 |
347 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(document(), inputFormData); | 347 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
(getDocument(), inputFormData); |
348 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); | 348 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); |
349 RefPtr<EncodedFormData> outputFormData = reader->drainAsFormData(); | 349 RefPtr<EncodedFormData> outputFormData = reader->drainAsFormData(); |
350 ASSERT_TRUE(outputFormData); | 350 ASSERT_TRUE(outputFormData); |
351 EXPECT_TRUE(outputFormData->isSafeToSendToAnotherThread()); | 351 EXPECT_TRUE(outputFormData->isSafeToSendToAnotherThread()); |
352 EXPECT_NE(outputFormData.get(), inputFormData.get()); | 352 EXPECT_NE(outputFormData.get(), inputFormData.get()); |
353 verifyComplexFormData(outputFormData.get()); | 353 verifyComplexFormData(outputFormData.get()); |
354 } | 354 } |
355 | 355 |
356 TEST_F(FetchFormDataConsumerHandleTest, ZeroByteReadDoesNotAffectDraining) | 356 TEST_F(FetchFormDataConsumerHandleTest, ZeroByteReadDoesNotAffectDraining) |
357 { | 357 { |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
389 EXPECT_FALSE(reader->drainAsFormData()); | 389 EXPECT_FALSE(reader->drainAsFormData()); |
390 reader->endRead(0); | 390 reader->endRead(0); |
391 EXPECT_FALSE(reader->drainAsFormData()); | 391 EXPECT_FALSE(reader->drainAsFormData()); |
392 } | 392 } |
393 | 393 |
394 TEST_F(FetchFormDataConsumerHandleTest, ZeroByteReadDoesNotAffectDrainingForComp
lexFormData) | 394 TEST_F(FetchFormDataConsumerHandleTest, ZeroByteReadDoesNotAffectDrainingForComp
lexFormData) |
395 { | 395 { |
396 OwnPtr<ReplayingHandle> src = ReplayingHandle::create(); | 396 OwnPtr<ReplayingHandle> src = ReplayingHandle::create(); |
397 src->add(Command(Command::Data, "bar")); | 397 src->add(Command(Command::Data, "bar")); |
398 src->add(Command(Command::Done)); | 398 src->add(Command(Command::Done)); |
399 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
ForTest(document(), complexFormData(), new LoaderFactory(src.release())); | 399 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
ForTest(getDocument(), complexFormData(), new LoaderFactory(src.release())); |
400 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); | 400 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); |
401 size_t readSize; | 401 size_t readSize; |
402 EXPECT_EQ(kShouldWait, reader->read(nullptr, 0, kNone, &readSize)); | 402 EXPECT_EQ(kShouldWait, reader->read(nullptr, 0, kNone, &readSize)); |
403 testing::runPendingTasks(); | 403 testing::runPendingTasks(); |
404 EXPECT_EQ(kOk, reader->read(nullptr, 0, kNone, &readSize)); | 404 EXPECT_EQ(kOk, reader->read(nullptr, 0, kNone, &readSize)); |
405 RefPtr<EncodedFormData> formData = reader->drainAsFormData(); | 405 RefPtr<EncodedFormData> formData = reader->drainAsFormData(); |
406 ASSERT_TRUE(formData); | 406 ASSERT_TRUE(formData); |
407 EXPECT_TRUE(formData->isSafeToSendToAnotherThread()); | 407 EXPECT_TRUE(formData->isSafeToSendToAnotherThread()); |
408 verifyComplexFormData(formData.get()); | 408 verifyComplexFormData(formData.get()); |
409 } | 409 } |
410 | 410 |
411 TEST_F(FetchFormDataConsumerHandleTest, OneByteReadAffectsDrainingForComplexForm
Data) | 411 TEST_F(FetchFormDataConsumerHandleTest, OneByteReadAffectsDrainingForComplexForm
Data) |
412 { | 412 { |
413 OwnPtr<ReplayingHandle> src = ReplayingHandle::create(); | 413 OwnPtr<ReplayingHandle> src = ReplayingHandle::create(); |
414 src->add(Command(Command::Data, "bar")); | 414 src->add(Command(Command::Data, "bar")); |
415 src->add(Command(Command::Done)); | 415 src->add(Command(Command::Done)); |
416 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
ForTest(document(), complexFormData(), new LoaderFactory(src.release())); | 416 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
ForTest(getDocument(), complexFormData(), new LoaderFactory(src.release())); |
417 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); | 417 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); |
418 char c; | 418 char c; |
419 size_t readSize; | 419 size_t readSize; |
420 EXPECT_EQ(kShouldWait, reader->read(&c, 1, kNone, &readSize)); | 420 EXPECT_EQ(kShouldWait, reader->read(&c, 1, kNone, &readSize)); |
421 testing::runPendingTasks(); | 421 testing::runPendingTasks(); |
422 EXPECT_EQ(kOk, reader->read(&c, 1, kNone, &readSize)); | 422 EXPECT_EQ(kOk, reader->read(&c, 1, kNone, &readSize)); |
423 EXPECT_EQ(1u, readSize); | 423 EXPECT_EQ(1u, readSize); |
424 EXPECT_EQ('b', c); | 424 EXPECT_EQ('b', c); |
425 EXPECT_FALSE(reader->drainAsFormData()); | 425 EXPECT_FALSE(reader->drainAsFormData()); |
426 } | 426 } |
427 | 427 |
428 TEST_F(FetchFormDataConsumerHandleTest, BeginReadAffectsDrainingForComplexFormDa
ta) | 428 TEST_F(FetchFormDataConsumerHandleTest, BeginReadAffectsDrainingForComplexFormDa
ta) |
429 { | 429 { |
430 OwnPtr<ReplayingHandle> src = ReplayingHandle::create(); | 430 OwnPtr<ReplayingHandle> src = ReplayingHandle::create(); |
431 src->add(Command(Command::Data, "bar")); | 431 src->add(Command(Command::Data, "bar")); |
432 src->add(Command(Command::Done)); | 432 src->add(Command(Command::Done)); |
433 const void* buffer = nullptr; | 433 const void* buffer = nullptr; |
434 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
ForTest(document(), complexFormData(), new LoaderFactory(src.release())); | 434 OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create
ForTest(getDocument(), complexFormData(), new LoaderFactory(src.release())); |
435 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); | 435 OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullpt
r); |
436 size_t available; | 436 size_t available; |
437 EXPECT_EQ(kShouldWait, reader->beginRead(&buffer, kNone, &available)); | 437 EXPECT_EQ(kShouldWait, reader->beginRead(&buffer, kNone, &available)); |
438 testing::runPendingTasks(); | 438 testing::runPendingTasks(); |
439 EXPECT_EQ(kOk, reader->beginRead(&buffer, kNone, &available)); | 439 EXPECT_EQ(kOk, reader->beginRead(&buffer, kNone, &available)); |
440 EXPECT_FALSE(reader->drainAsFormData()); | 440 EXPECT_FALSE(reader->drainAsFormData()); |
441 reader->endRead(0); | 441 reader->endRead(0); |
442 EXPECT_FALSE(reader->drainAsFormData()); | 442 EXPECT_FALSE(reader->drainAsFormData()); |
443 } | 443 } |
444 | 444 |
445 } // namespace | 445 } // namespace |
446 } // namespace blink | 446 } // namespace blink |
OLD | NEW |