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 "bindings/core/v8/V8BindingForTesting.h" | 7 #include "bindings/core/v8/V8BindingForTesting.h" |
8 #include "core/html/FormData.h" | 8 #include "core/html/FormData.h" |
9 #include "modules/fetch/DataConsumerHandleTestUtil.h" | 9 #include "modules/fetch/DataConsumerHandleTestUtil.h" |
10 #include "modules/fetch/FetchBlobDataConsumerHandle.h" | 10 #include "modules/fetch/FetchBlobDataConsumerHandle.h" |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 { | 74 { |
75 V8TestingScope scope; | 75 V8TestingScope scope; |
76 Checkpoint checkpoint; | 76 Checkpoint checkpoint; |
77 MockFetchDataLoaderClient* client1 = MockFetchDataLoaderClient::create(); | 77 MockFetchDataLoaderClient* client1 = MockFetchDataLoaderClient::create(); |
78 MockFetchDataLoaderClient* client2 = MockFetchDataLoaderClient::create(); | 78 MockFetchDataLoaderClient* client2 = MockFetchDataLoaderClient::create(); |
79 | 79 |
80 InSequence s; | 80 InSequence s; |
81 EXPECT_CALL(checkpoint, Call(1)); | 81 EXPECT_CALL(checkpoint, Call(1)); |
82 EXPECT_CALL(*client1, didFetchDataLoadedString(String("hello, world"))); | 82 EXPECT_CALL(*client1, didFetchDataLoadedString(String("hello, world"))); |
83 EXPECT_CALL(checkpoint, Call(2)); | 83 EXPECT_CALL(checkpoint, Call(2)); |
| 84 EXPECT_CALL(*client2, didFetchDataLoadedString(String("hello, world"))); |
84 EXPECT_CALL(checkpoint, Call(3)); | 85 EXPECT_CALL(checkpoint, Call(3)); |
85 EXPECT_CALL(*client2, didFetchDataLoadedString(String("hello, world"))); | |
86 EXPECT_CALL(checkpoint, Call(4)); | 86 EXPECT_CALL(checkpoint, Call(4)); |
87 | 87 |
88 std::unique_ptr<DataConsumerHandleTestUtil::ReplayingHandle> handle = DataCo
nsumerHandleTestUtil::ReplayingHandle::create(); | 88 std::unique_ptr<DataConsumerHandleTestUtil::ReplayingHandle> handle = DataCo
nsumerHandleTestUtil::ReplayingHandle::create(); |
89 handle->add(DataConsumerHandleTestUtil::Command(DataConsumerHandleTestUtil::
Command::Data, "hello, ")); | 89 handle->add(DataConsumerHandleTestUtil::Command(DataConsumerHandleTestUtil::
Command::Data, "hello, ")); |
90 handle->add(DataConsumerHandleTestUtil::Command(DataConsumerHandleTestUtil::
Command::Data, "world")); | 90 handle->add(DataConsumerHandleTestUtil::Command(DataConsumerHandleTestUtil::
Command::Data, "world")); |
91 handle->add(DataConsumerHandleTestUtil::Command(DataConsumerHandleTestUtil::
Command::Done)); | 91 handle->add(DataConsumerHandleTestUtil::Command(DataConsumerHandleTestUtil::
Command::Done)); |
92 BodyStreamBuffer* buffer = new BodyStreamBuffer(scope.getScriptState(), crea
teFetchDataConsumerHandleFromWebHandle(std::move(handle))); | 92 BodyStreamBuffer* buffer = new BodyStreamBuffer(scope.getScriptState(), crea
teFetchDataConsumerHandleFromWebHandle(std::move(handle))); |
93 | 93 |
94 BodyStreamBuffer* new1; | 94 BodyStreamBuffer* new1; |
95 BodyStreamBuffer* new2; | 95 BodyStreamBuffer* new2; |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
285 Checkpoint checkpoint; | 285 Checkpoint checkpoint; |
286 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); | 286 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); |
287 DOMArrayBuffer* arrayBuffer = nullptr; | 287 DOMArrayBuffer* arrayBuffer = nullptr; |
288 | 288 |
289 InSequence s; | 289 InSequence s; |
290 EXPECT_CALL(checkpoint, Call(1)); | 290 EXPECT_CALL(checkpoint, Call(1)); |
291 EXPECT_CALL(*client, didFetchDataLoadedArrayBufferMock(_)).WillOnce(SaveArg<
0>(&arrayBuffer)); | 291 EXPECT_CALL(*client, didFetchDataLoadedArrayBufferMock(_)).WillOnce(SaveArg<
0>(&arrayBuffer)); |
292 EXPECT_CALL(checkpoint, Call(2)); | 292 EXPECT_CALL(checkpoint, Call(2)); |
293 | 293 |
294 std::unique_ptr<ReplayingHandle> handle = ReplayingHandle::create(); | 294 std::unique_ptr<ReplayingHandle> handle = ReplayingHandle::create(); |
| 295 handle->add(Command(Command::Wait)); |
295 handle->add(Command(Command::Data, "hello")); | 296 handle->add(Command(Command::Data, "hello")); |
296 handle->add(Command(Command::Done)); | 297 handle->add(Command(Command::Done)); |
297 BodyStreamBuffer* buffer = new BodyStreamBuffer(scope.getScriptState(), crea
teFetchDataConsumerHandleFromWebHandle(std::move(handle))); | 298 BodyStreamBuffer* buffer = new BodyStreamBuffer(scope.getScriptState(), crea
teFetchDataConsumerHandleFromWebHandle(std::move(handle))); |
298 buffer->startLoading(FetchDataLoader::createLoaderAsArrayBuffer(), client); | 299 buffer->startLoading(FetchDataLoader::createLoaderAsArrayBuffer(), client); |
299 | 300 |
300 EXPECT_TRUE(buffer->isStreamLocked()); | 301 EXPECT_TRUE(buffer->isStreamLocked()); |
301 EXPECT_TRUE(buffer->isStreamDisturbed()); | 302 EXPECT_TRUE(buffer->isStreamDisturbed()); |
302 EXPECT_TRUE(buffer->hasPendingActivity()); | 303 EXPECT_TRUE(buffer->hasPendingActivity()); |
303 | 304 |
304 checkpoint.Call(1); | 305 checkpoint.Call(1); |
(...skipping 13 matching lines...) Expand all Loading... |
318 Checkpoint checkpoint; | 319 Checkpoint checkpoint; |
319 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); | 320 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); |
320 RefPtr<BlobDataHandle> blobDataHandle; | 321 RefPtr<BlobDataHandle> blobDataHandle; |
321 | 322 |
322 InSequence s; | 323 InSequence s; |
323 EXPECT_CALL(checkpoint, Call(1)); | 324 EXPECT_CALL(checkpoint, Call(1)); |
324 EXPECT_CALL(*client, didFetchDataLoadedBlobHandleMock(_)).WillOnce(SaveArg<0
>(&blobDataHandle)); | 325 EXPECT_CALL(*client, didFetchDataLoadedBlobHandleMock(_)).WillOnce(SaveArg<0
>(&blobDataHandle)); |
325 EXPECT_CALL(checkpoint, Call(2)); | 326 EXPECT_CALL(checkpoint, Call(2)); |
326 | 327 |
327 std::unique_ptr<ReplayingHandle> handle = ReplayingHandle::create(); | 328 std::unique_ptr<ReplayingHandle> handle = ReplayingHandle::create(); |
| 329 handle->add(Command(Command::Wait)); |
328 handle->add(Command(Command::Data, "hello")); | 330 handle->add(Command(Command::Data, "hello")); |
329 handle->add(Command(Command::Done)); | 331 handle->add(Command(Command::Done)); |
330 BodyStreamBuffer* buffer = new BodyStreamBuffer(scope.getScriptState(), crea
teFetchDataConsumerHandleFromWebHandle(std::move(handle))); | 332 BodyStreamBuffer* buffer = new BodyStreamBuffer(scope.getScriptState(), crea
teFetchDataConsumerHandleFromWebHandle(std::move(handle))); |
331 buffer->startLoading(FetchDataLoader::createLoaderAsBlobHandle("text/plain")
, client); | 333 buffer->startLoading(FetchDataLoader::createLoaderAsBlobHandle("text/plain")
, client); |
332 | 334 |
333 EXPECT_TRUE(buffer->isStreamLocked()); | 335 EXPECT_TRUE(buffer->isStreamLocked()); |
334 EXPECT_TRUE(buffer->isStreamDisturbed()); | 336 EXPECT_TRUE(buffer->isStreamDisturbed()); |
335 EXPECT_TRUE(buffer->hasPendingActivity()); | 337 EXPECT_TRUE(buffer->hasPendingActivity()); |
336 | 338 |
337 checkpoint.Call(1); | 339 checkpoint.Call(1); |
(...skipping 11 matching lines...) Expand all Loading... |
349 V8TestingScope scope; | 351 V8TestingScope scope; |
350 Checkpoint checkpoint; | 352 Checkpoint checkpoint; |
351 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); | 353 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); |
352 | 354 |
353 InSequence s; | 355 InSequence s; |
354 EXPECT_CALL(checkpoint, Call(1)); | 356 EXPECT_CALL(checkpoint, Call(1)); |
355 EXPECT_CALL(*client, didFetchDataLoadedString(String("hello"))); | 357 EXPECT_CALL(*client, didFetchDataLoadedString(String("hello"))); |
356 EXPECT_CALL(checkpoint, Call(2)); | 358 EXPECT_CALL(checkpoint, Call(2)); |
357 | 359 |
358 std::unique_ptr<ReplayingHandle> handle = ReplayingHandle::create(); | 360 std::unique_ptr<ReplayingHandle> handle = ReplayingHandle::create(); |
| 361 handle->add(Command(Command::Wait)); |
359 handle->add(Command(Command::Data, "hello")); | 362 handle->add(Command(Command::Data, "hello")); |
360 handle->add(Command(Command::Done)); | 363 handle->add(Command(Command::Done)); |
361 BodyStreamBuffer* buffer = new BodyStreamBuffer(scope.getScriptState(), crea
teFetchDataConsumerHandleFromWebHandle(std::move(handle))); | 364 BodyStreamBuffer* buffer = new BodyStreamBuffer(scope.getScriptState(), crea
teFetchDataConsumerHandleFromWebHandle(std::move(handle))); |
362 buffer->startLoading(FetchDataLoader::createLoaderAsString(), client); | 365 buffer->startLoading(FetchDataLoader::createLoaderAsString(), client); |
363 | 366 |
364 EXPECT_TRUE(buffer->isStreamLocked()); | 367 EXPECT_TRUE(buffer->isStreamLocked()); |
365 EXPECT_TRUE(buffer->isStreamDisturbed()); | 368 EXPECT_TRUE(buffer->isStreamDisturbed()); |
366 EXPECT_TRUE(buffer->hasPendingActivity()); | 369 EXPECT_TRUE(buffer->hasPendingActivity()); |
367 | 370 |
368 checkpoint.Call(1); | 371 checkpoint.Call(1); |
(...skipping 19 matching lines...) Expand all Loading... |
388 BodyStreamBuffer* buffer = new BodyStreamBuffer(scope.getScriptState(), crea
teFetchDataConsumerHandleFromWebHandle(createDoneDataConsumerHandle())); | 391 BodyStreamBuffer* buffer = new BodyStreamBuffer(scope.getScriptState(), crea
teFetchDataConsumerHandleFromWebHandle(createDoneDataConsumerHandle())); |
389 | 392 |
390 EXPECT_TRUE(buffer->isStreamReadable()); | 393 EXPECT_TRUE(buffer->isStreamReadable()); |
391 testing::runPendingTasks(); | 394 testing::runPendingTasks(); |
392 EXPECT_TRUE(buffer->isStreamClosed()); | 395 EXPECT_TRUE(buffer->isStreamClosed()); |
393 | 396 |
394 EXPECT_FALSE(buffer->isStreamLocked()); | 397 EXPECT_FALSE(buffer->isStreamLocked()); |
395 EXPECT_FALSE(buffer->isStreamDisturbed()); | 398 EXPECT_FALSE(buffer->isStreamDisturbed()); |
396 EXPECT_FALSE(buffer->hasPendingActivity()); | 399 EXPECT_FALSE(buffer->hasPendingActivity()); |
397 | 400 |
| 401 checkpoint.Call(1); |
398 buffer->startLoading(FetchDataLoader::createLoaderAsString(), client); | 402 buffer->startLoading(FetchDataLoader::createLoaderAsString(), client); |
399 EXPECT_TRUE(buffer->isStreamLocked()); | |
400 EXPECT_TRUE(buffer->isStreamDisturbed()); | |
401 EXPECT_TRUE(buffer->hasPendingActivity()); | |
402 | |
403 checkpoint.Call(1); | |
404 testing::runPendingTasks(); | |
405 checkpoint.Call(2); | 403 checkpoint.Call(2); |
406 | 404 |
407 EXPECT_TRUE(buffer->isStreamLocked()); | 405 EXPECT_TRUE(buffer->isStreamLocked()); |
408 EXPECT_TRUE(buffer->isStreamDisturbed()); | 406 EXPECT_TRUE(buffer->isStreamDisturbed()); |
409 EXPECT_FALSE(buffer->hasPendingActivity()); | 407 EXPECT_FALSE(buffer->hasPendingActivity()); |
410 } | 408 } |
411 | 409 |
412 TEST_F(BodyStreamBufferTest, LoadErroredHandle) | 410 TEST_F(BodyStreamBufferTest, LoadErroredHandle) |
413 { | 411 { |
414 V8TestingScope scope; | 412 V8TestingScope scope; |
415 Checkpoint checkpoint; | 413 Checkpoint checkpoint; |
416 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); | 414 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); |
417 | 415 |
418 InSequence s; | 416 InSequence s; |
419 EXPECT_CALL(checkpoint, Call(1)); | 417 EXPECT_CALL(checkpoint, Call(1)); |
420 EXPECT_CALL(*client, didFetchDataLoadFailed()); | 418 EXPECT_CALL(*client, didFetchDataLoadFailed()); |
421 EXPECT_CALL(checkpoint, Call(2)); | 419 EXPECT_CALL(checkpoint, Call(2)); |
422 | 420 |
423 BodyStreamBuffer* buffer = new BodyStreamBuffer(scope.getScriptState(), crea
teFetchDataConsumerHandleFromWebHandle(createUnexpectedErrorDataConsumerHandle()
)); | 421 BodyStreamBuffer* buffer = new BodyStreamBuffer(scope.getScriptState(), crea
teFetchDataConsumerHandleFromWebHandle(createUnexpectedErrorDataConsumerHandle()
)); |
424 | 422 |
425 EXPECT_TRUE(buffer->isStreamReadable()); | 423 EXPECT_TRUE(buffer->isStreamReadable()); |
426 testing::runPendingTasks(); | 424 testing::runPendingTasks(); |
427 EXPECT_TRUE(buffer->isStreamErrored()); | 425 EXPECT_TRUE(buffer->isStreamErrored()); |
428 | 426 |
429 EXPECT_FALSE(buffer->isStreamLocked()); | 427 EXPECT_FALSE(buffer->isStreamLocked()); |
430 EXPECT_FALSE(buffer->isStreamDisturbed()); | 428 EXPECT_FALSE(buffer->isStreamDisturbed()); |
431 EXPECT_FALSE(buffer->hasPendingActivity()); | 429 EXPECT_FALSE(buffer->hasPendingActivity()); |
432 buffer->startLoading(FetchDataLoader::createLoaderAsString(), client); | |
433 EXPECT_TRUE(buffer->isStreamLocked()); | |
434 EXPECT_TRUE(buffer->isStreamDisturbed()); | |
435 EXPECT_TRUE(buffer->hasPendingActivity()); | |
436 | 430 |
437 checkpoint.Call(1); | 431 checkpoint.Call(1); |
438 testing::runPendingTasks(); | 432 buffer->startLoading(FetchDataLoader::createLoaderAsString(), client); |
439 checkpoint.Call(2); | 433 checkpoint.Call(2); |
440 | 434 |
441 EXPECT_TRUE(buffer->isStreamLocked()); | 435 EXPECT_TRUE(buffer->isStreamLocked()); |
442 EXPECT_TRUE(buffer->isStreamDisturbed()); | 436 EXPECT_TRUE(buffer->isStreamDisturbed()); |
443 EXPECT_FALSE(buffer->hasPendingActivity()); | 437 EXPECT_FALSE(buffer->hasPendingActivity()); |
444 } | 438 } |
445 | 439 |
446 TEST_F(BodyStreamBufferTest, LoaderShouldBeKeptAliveByBodyStreamBuffer) | 440 TEST_F(BodyStreamBufferTest, LoaderShouldBeKeptAliveByBodyStreamBuffer) |
447 { | 441 { |
448 V8TestingScope scope; | 442 V8TestingScope scope; |
449 Checkpoint checkpoint; | 443 Checkpoint checkpoint; |
450 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); | 444 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); |
451 | 445 |
452 InSequence s; | 446 InSequence s; |
453 EXPECT_CALL(checkpoint, Call(1)); | 447 EXPECT_CALL(checkpoint, Call(1)); |
454 EXPECT_CALL(*client, didFetchDataLoadedString(String("hello"))); | 448 EXPECT_CALL(*client, didFetchDataLoadedString(String("hello"))); |
455 EXPECT_CALL(checkpoint, Call(2)); | 449 EXPECT_CALL(checkpoint, Call(2)); |
456 | 450 |
457 std::unique_ptr<ReplayingHandle> handle = ReplayingHandle::create(); | 451 std::unique_ptr<ReplayingHandle> handle = ReplayingHandle::create(); |
| 452 handle->add(Command(Command::Wait)); |
458 handle->add(Command(Command::Data, "hello")); | 453 handle->add(Command(Command::Data, "hello")); |
459 handle->add(Command(Command::Done)); | 454 handle->add(Command(Command::Done)); |
460 Persistent<BodyStreamBuffer> buffer = new BodyStreamBuffer(scope.getScriptSt
ate(), createFetchDataConsumerHandleFromWebHandle(std::move(handle))); | 455 Persistent<BodyStreamBuffer> buffer = new BodyStreamBuffer(scope.getScriptSt
ate(), createFetchDataConsumerHandleFromWebHandle(std::move(handle))); |
461 buffer->startLoading(FetchDataLoader::createLoaderAsString(), client); | 456 buffer->startLoading(FetchDataLoader::createLoaderAsString(), client); |
462 | 457 |
463 ThreadHeap::collectAllGarbage(); | 458 ThreadHeap::collectAllGarbage(); |
464 checkpoint.Call(1); | 459 checkpoint.Call(1); |
465 testing::runPendingTasks(); | 460 testing::runPendingTasks(); |
466 checkpoint.Call(2); | 461 checkpoint.Call(2); |
467 } | 462 } |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
500 BodyStreamBuffer* buffer = new BodyStreamBuffer(scope.getScriptState(), std:
:move(handle)); | 495 BodyStreamBuffer* buffer = new BodyStreamBuffer(scope.getScriptState(), std:
:move(handle)); |
501 checkpoint.Call(1); | 496 checkpoint.Call(1); |
502 ScriptValue reason(scope.getScriptState(), v8String(scope.getScriptState()->
isolate(), "reason")); | 497 ScriptValue reason(scope.getScriptState(), v8String(scope.getScriptState()->
isolate(), "reason")); |
503 buffer->cancel(scope.getScriptState(), reason); | 498 buffer->cancel(scope.getScriptState(), reason); |
504 checkpoint.Call(2); | 499 checkpoint.Call(2); |
505 } | 500 } |
506 | 501 |
507 } // namespace | 502 } // namespace |
508 | 503 |
509 } // namespace blink | 504 } // namespace blink |
OLD | NEW |