| 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/FetchBlobDataConsumerHandle.h" | 5 #include "modules/fetch/FetchBlobDataConsumerHandle.h" |
| 6 | 6 |
| 7 #include "core/dom/ExecutionContext.h" | 7 #include "core/dom/ExecutionContext.h" |
| 8 #include "core/fetch/ResourceLoaderOptions.h" | 8 #include "core/fetch/ResourceLoaderOptions.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 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 EXPECT_CALL(*loaderPtr, start(_)).WillOnce(SaveArg<0>(&request)); | 112 EXPECT_CALL(*loaderPtr, start(_)).WillOnce(SaveArg<0>(&request)); |
| 113 EXPECT_CALL(checkpoint, Call(2)); | 113 EXPECT_CALL(checkpoint, Call(2)); |
| 114 EXPECT_CALL(*loaderPtr, cancel()); | 114 EXPECT_CALL(*loaderPtr, cancel()); |
| 115 | 115 |
| 116 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti
me"); | 116 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti
me"); |
| 117 std::unique_ptr<WebDataConsumerHandle> handle | 117 std::unique_ptr<WebDataConsumerHandle> handle |
| 118 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto
ry); | 118 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto
ry); |
| 119 testing::runPendingTasks(); | 119 testing::runPendingTasks(); |
| 120 | 120 |
| 121 size_t size = 0; | 121 size_t size = 0; |
| 122 handle->obtainReader(nullptr)->read(nullptr, 0, kNone, &size); | 122 handle->obtainReader(nullptr, getCurrentTaskRunner())->read(nullptr, 0, kNon
e, &size); |
| 123 checkpoint.Call(1); | 123 checkpoint.Call(1); |
| 124 testing::runPendingTasks(); | 124 testing::runPendingTasks(); |
| 125 checkpoint.Call(2); | 125 checkpoint.Call(2); |
| 126 | 126 |
| 127 EXPECT_TRUE(request.url().getString().startsWith("blob:")); | 127 EXPECT_TRUE(request.url().getString().startsWith("blob:")); |
| 128 EXPECT_TRUE(request.useStreamOnResponse()); | 128 EXPECT_TRUE(request.useStreamOnResponse()); |
| 129 | 129 |
| 130 EXPECT_EQ(ConsiderPreflight, options.preflightPolicy); | 130 EXPECT_EQ(ConsiderPreflight, options.preflightPolicy); |
| 131 EXPECT_EQ(DenyCrossOriginRequests, options.crossOriginRequestPolicy); | 131 EXPECT_EQ(DenyCrossOriginRequests, options.crossOriginRequestPolicy); |
| 132 EXPECT_EQ(DoNotEnforceContentSecurityPolicy, options.contentSecurityPolicyEn
forcement); | 132 EXPECT_EQ(DoNotEnforceContentSecurityPolicy, options.contentSecurityPolicyEn
forcement); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 155 EXPECT_CALL(checkpoint, Call(2)); | 155 EXPECT_CALL(checkpoint, Call(2)); |
| 156 EXPECT_CALL(*loaderPtr, cancel()); | 156 EXPECT_CALL(*loaderPtr, cancel()); |
| 157 EXPECT_CALL(checkpoint, Call(3)); | 157 EXPECT_CALL(checkpoint, Call(3)); |
| 158 | 158 |
| 159 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti
me"); | 159 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti
me"); |
| 160 std::unique_ptr<WebDataConsumerHandle> handle | 160 std::unique_ptr<WebDataConsumerHandle> handle |
| 161 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto
ry); | 161 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto
ry); |
| 162 testing::runPendingTasks(); | 162 testing::runPendingTasks(); |
| 163 | 163 |
| 164 size_t size = 0; | 164 size_t size = 0; |
| 165 handle->obtainReader(nullptr)->read(nullptr, 0, kNone, &size); | 165 handle->obtainReader(nullptr, getCurrentTaskRunner())->read(nullptr, 0, kNon
e, &size); |
| 166 checkpoint.Call(1); | 166 checkpoint.Call(1); |
| 167 testing::runPendingTasks(); | 167 testing::runPendingTasks(); |
| 168 checkpoint.Call(2); | 168 checkpoint.Call(2); |
| 169 document().stopActiveDOMObjects(); | 169 document().stopActiveDOMObjects(); |
| 170 checkpoint.Call(3); | 170 checkpoint.Call(3); |
| 171 } | 171 } |
| 172 | 172 |
| 173 TEST_F(FetchBlobDataConsumerHandleTest, CancelLoaderWhenDestinationDetached) | 173 TEST_F(FetchBlobDataConsumerHandleTest, CancelLoaderWhenDestinationDetached) |
| 174 { | 174 { |
| 175 auto factory = new StrictMock<MockLoaderFactory>; | 175 auto factory = new StrictMock<MockLoaderFactory>; |
| 176 Checkpoint checkpoint; | 176 Checkpoint checkpoint; |
| 177 | 177 |
| 178 std::unique_ptr<MockThreadableLoader> loader = MockThreadableLoader::create(
); | 178 std::unique_ptr<MockThreadableLoader> loader = MockThreadableLoader::create(
); |
| 179 MockThreadableLoader* loaderPtr = loader.get(); | 179 MockThreadableLoader* loaderPtr = loader.get(); |
| 180 | 180 |
| 181 InSequence s; | 181 InSequence s; |
| 182 EXPECT_CALL(checkpoint, Call(1)); | 182 EXPECT_CALL(checkpoint, Call(1)); |
| 183 EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(Ret
urn(loader.release())); | 183 EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(Ret
urn(loader.release())); |
| 184 EXPECT_CALL(*loaderPtr, start(_)); | 184 EXPECT_CALL(*loaderPtr, start(_)); |
| 185 EXPECT_CALL(checkpoint, Call(2)); | 185 EXPECT_CALL(checkpoint, Call(2)); |
| 186 EXPECT_CALL(checkpoint, Call(3)); | 186 EXPECT_CALL(checkpoint, Call(3)); |
| 187 EXPECT_CALL(*loaderPtr, cancel()); | 187 EXPECT_CALL(*loaderPtr, cancel()); |
| 188 EXPECT_CALL(checkpoint, Call(4)); | 188 EXPECT_CALL(checkpoint, Call(4)); |
| 189 | 189 |
| 190 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti
me"); | 190 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti
me"); |
| 191 std::unique_ptr<WebDataConsumerHandle> handle | 191 std::unique_ptr<WebDataConsumerHandle> handle |
| 192 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto
ry); | 192 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto
ry); |
| 193 std::unique_ptr<WebDataConsumerHandle::Reader> reader = handle->obtainReader
(nullptr); | 193 std::unique_ptr<WebDataConsumerHandle::Reader> reader = handle->obtainReader
(nullptr, getCurrentTaskRunner()); |
| 194 testing::runPendingTasks(); | 194 testing::runPendingTasks(); |
| 195 | 195 |
| 196 size_t size = 0; | 196 size_t size = 0; |
| 197 reader->read(nullptr, 0, kNone, &size); | 197 reader->read(nullptr, 0, kNone, &size); |
| 198 checkpoint.Call(1); | 198 checkpoint.Call(1); |
| 199 testing::runPendingTasks(); | 199 testing::runPendingTasks(); |
| 200 checkpoint.Call(2); | 200 checkpoint.Call(2); |
| 201 handle = nullptr; | 201 handle = nullptr; |
| 202 reader = nullptr; | 202 reader = nullptr; |
| 203 checkpoint.Call(3); | 203 checkpoint.Call(3); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 226 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto
ry); | 226 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto
ry); |
| 227 | 227 |
| 228 std::unique_ptr<ReplayingHandle> src = ReplayingHandle::create(); | 228 std::unique_ptr<ReplayingHandle> src = ReplayingHandle::create(); |
| 229 src->add(Command(Command::Wait)); | 229 src->add(Command(Command::Wait)); |
| 230 src->add(Command(Command::Data, "hello, ")); | 230 src->add(Command(Command::Data, "hello, ")); |
| 231 src->add(Command(Command::Data, "world")); | 231 src->add(Command(Command::Data, "world")); |
| 232 src->add(Command(Command::Wait)); | 232 src->add(Command(Command::Wait)); |
| 233 src->add(Command(Command::Done)); | 233 src->add(Command(Command::Done)); |
| 234 | 234 |
| 235 size_t size = 0; | 235 size_t size = 0; |
| 236 handle->obtainReader(nullptr)->read(nullptr, 0, kNone, &size); | 236 handle->obtainReader(nullptr, getCurrentTaskRunner())->read(nullptr, 0, kNon
e, &size); |
| 237 checkpoint.Call(1); | 237 checkpoint.Call(1); |
| 238 testing::runPendingTasks(); | 238 testing::runPendingTasks(); |
| 239 checkpoint.Call(2); | 239 checkpoint.Call(2); |
| 240 client->didReceiveResponse(0, ResourceResponse(), std::move(src)); | 240 client->didReceiveResponse(0, ResourceResponse(), std::move(src)); |
| 241 HandleReaderRunner<HandleReader> runner(std::move(handle)); | 241 HandleReaderRunner<HandleReader> runner(std::move(handle)); |
| 242 std::unique_ptr<HandleReadResult> r = runner.wait(); | 242 std::unique_ptr<HandleReadResult> r = runner.wait(); |
| 243 EXPECT_EQ(kDone, r->result()); | 243 EXPECT_EQ(kDone, r->result()); |
| 244 EXPECT_EQ("hello, world", toString(r->data())); | 244 EXPECT_EQ("hello, world", toString(r->data())); |
| 245 } | 245 } |
| 246 | 246 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 265 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto
ry); | 265 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto
ry); |
| 266 | 266 |
| 267 std::unique_ptr<ReplayingHandle> src = ReplayingHandle::create(); | 267 std::unique_ptr<ReplayingHandle> src = ReplayingHandle::create(); |
| 268 src->add(Command(Command::Wait)); | 268 src->add(Command(Command::Wait)); |
| 269 src->add(Command(Command::Data, "hello, ")); | 269 src->add(Command(Command::Data, "hello, ")); |
| 270 src->add(Command(Command::Data, "world")); | 270 src->add(Command(Command::Data, "world")); |
| 271 src->add(Command(Command::Wait)); | 271 src->add(Command(Command::Wait)); |
| 272 src->add(Command(Command::Done)); | 272 src->add(Command(Command::Done)); |
| 273 | 273 |
| 274 size_t size = 0; | 274 size_t size = 0; |
| 275 handle->obtainReader(nullptr)->read(nullptr, 0, kNone, &size); | 275 handle->obtainReader(nullptr, getCurrentTaskRunner())->read(nullptr, 0, kNon
e, &size); |
| 276 checkpoint.Call(1); | 276 checkpoint.Call(1); |
| 277 testing::runPendingTasks(); | 277 testing::runPendingTasks(); |
| 278 checkpoint.Call(2); | 278 checkpoint.Call(2); |
| 279 client->didReceiveResponse(0, ResourceResponse(), std::move(src)); | 279 client->didReceiveResponse(0, ResourceResponse(), std::move(src)); |
| 280 HandleReaderRunner<HandleTwoPhaseReader> runner(std::move(handle)); | 280 HandleReaderRunner<HandleTwoPhaseReader> runner(std::move(handle)); |
| 281 std::unique_ptr<HandleReadResult> r = runner.wait(); | 281 std::unique_ptr<HandleReadResult> r = runner.wait(); |
| 282 EXPECT_EQ(kDone, r->result()); | 282 EXPECT_EQ(kDone, r->result()); |
| 283 EXPECT_EQ("hello, world", toString(r->data())); | 283 EXPECT_EQ("hello, world", toString(r->data())); |
| 284 } | 284 } |
| 285 | 285 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 296 EXPECT_CALL(checkpoint, Call(1)); | 296 EXPECT_CALL(checkpoint, Call(1)); |
| 297 EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(DoA
ll(SaveArg<1>(&client), Return(loader.release()))); | 297 EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(DoA
ll(SaveArg<1>(&client), Return(loader.release()))); |
| 298 EXPECT_CALL(*loaderPtr, start(_)); | 298 EXPECT_CALL(*loaderPtr, start(_)); |
| 299 EXPECT_CALL(checkpoint, Call(2)); | 299 EXPECT_CALL(checkpoint, Call(2)); |
| 300 | 300 |
| 301 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti
me"); | 301 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti
me"); |
| 302 std::unique_ptr<WebDataConsumerHandle> handle | 302 std::unique_ptr<WebDataConsumerHandle> handle |
| 303 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto
ry); | 303 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto
ry); |
| 304 | 304 |
| 305 size_t size = 0; | 305 size_t size = 0; |
| 306 handle->obtainReader(nullptr)->read(nullptr, 0, kNone, &size); | 306 handle->obtainReader(nullptr, getCurrentTaskRunner())->read(nullptr, 0, kNon
e, &size); |
| 307 checkpoint.Call(1); | 307 checkpoint.Call(1); |
| 308 testing::runPendingTasks(); | 308 testing::runPendingTasks(); |
| 309 checkpoint.Call(2); | 309 checkpoint.Call(2); |
| 310 client->didFail(ResourceError()); | 310 client->didFail(ResourceError()); |
| 311 HandleReaderRunner<HandleReader> runner(std::move(handle)); | 311 HandleReaderRunner<HandleReader> runner(std::move(handle)); |
| 312 std::unique_ptr<HandleReadResult> r = runner.wait(); | 312 std::unique_ptr<HandleReadResult> r = runner.wait(); |
| 313 EXPECT_EQ(kUnexpectedError, r->result()); | 313 EXPECT_EQ(kUnexpectedError, r->result()); |
| 314 } | 314 } |
| 315 | 315 |
| 316 TEST_F(FetchBlobDataConsumerHandleTest, BodyLoadErrorTest) | 316 TEST_F(FetchBlobDataConsumerHandleTest, BodyLoadErrorTest) |
| (...skipping 15 matching lines...) Expand all Loading... |
| 332 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti
me"); | 332 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti
me"); |
| 333 std::unique_ptr<WebDataConsumerHandle> handle | 333 std::unique_ptr<WebDataConsumerHandle> handle |
| 334 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto
ry); | 334 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto
ry); |
| 335 | 335 |
| 336 std::unique_ptr<ReplayingHandle> src = ReplayingHandle::create(); | 336 std::unique_ptr<ReplayingHandle> src = ReplayingHandle::create(); |
| 337 src->add(Command(Command::Wait)); | 337 src->add(Command(Command::Wait)); |
| 338 src->add(Command(Command::Data, "hello, ")); | 338 src->add(Command(Command::Data, "hello, ")); |
| 339 src->add(Command(Command::Error)); | 339 src->add(Command(Command::Error)); |
| 340 | 340 |
| 341 size_t size = 0; | 341 size_t size = 0; |
| 342 handle->obtainReader(nullptr)->read(nullptr, 0, kNone, &size); | 342 handle->obtainReader(nullptr, getCurrentTaskRunner())->read(nullptr, 0, kNon
e, &size); |
| 343 checkpoint.Call(1); | 343 checkpoint.Call(1); |
| 344 testing::runPendingTasks(); | 344 testing::runPendingTasks(); |
| 345 checkpoint.Call(2); | 345 checkpoint.Call(2); |
| 346 client->didReceiveResponse(0, ResourceResponse(), std::move(src)); | 346 client->didReceiveResponse(0, ResourceResponse(), std::move(src)); |
| 347 HandleReaderRunner<HandleReader> runner(std::move(handle)); | 347 HandleReaderRunner<HandleReader> runner(std::move(handle)); |
| 348 std::unique_ptr<HandleReadResult> r = runner.wait(); | 348 std::unique_ptr<HandleReadResult> r = runner.wait(); |
| 349 EXPECT_EQ(kUnexpectedError, r->result()); | 349 EXPECT_EQ(kUnexpectedError, r->result()); |
| 350 } | 350 } |
| 351 | 351 |
| 352 TEST_F(FetchBlobDataConsumerHandleTest, DrainAsBlobDataHandle) | 352 TEST_F(FetchBlobDataConsumerHandleTest, DrainAsBlobDataHandle) |
| 353 { | 353 { |
| 354 auto factory = new StrictMock<MockLoaderFactory>; | 354 auto factory = new StrictMock<MockLoaderFactory>; |
| 355 | 355 |
| 356 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti
me"); | 356 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti
me"); |
| 357 std::unique_ptr<FetchDataConsumerHandle> handle | 357 std::unique_ptr<FetchDataConsumerHandle> handle |
| 358 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto
ry); | 358 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto
ry); |
| 359 | 359 |
| 360 size_t size = 0; | 360 size_t size = 0; |
| 361 EXPECT_EQ(blobDataHandle, handle->obtainFetchDataReader(nullptr)->drainAsBlo
bDataHandle()); | 361 EXPECT_EQ(blobDataHandle, handle->obtainFetchDataReader(nullptr, getCurrentT
askRunner())->drainAsBlobDataHandle()); |
| 362 EXPECT_FALSE(handle->obtainFetchDataReader(nullptr)->drainAsFormData()); | 362 EXPECT_FALSE(handle->obtainFetchDataReader(nullptr, getCurrentTaskRunner())-
>drainAsFormData()); |
| 363 | 363 |
| 364 EXPECT_EQ(kDone, handle->obtainReader(nullptr)->read(nullptr, 0, kNone, &siz
e)); | 364 EXPECT_EQ(kDone, handle->obtainReader(nullptr, getCurrentTaskRunner())->read
(nullptr, 0, kNone, &size)); |
| 365 } | 365 } |
| 366 | 366 |
| 367 TEST_F(FetchBlobDataConsumerHandleTest, DrainAsFormData) | 367 TEST_F(FetchBlobDataConsumerHandleTest, DrainAsFormData) |
| 368 { | 368 { |
| 369 auto factory = new StrictMock<MockLoaderFactory>; | 369 auto factory = new StrictMock<MockLoaderFactory>; |
| 370 | 370 |
| 371 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti
me"); | 371 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti
me"); |
| 372 std::unique_ptr<FetchDataConsumerHandle> handle | 372 std::unique_ptr<FetchDataConsumerHandle> handle |
| 373 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto
ry); | 373 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto
ry); |
| 374 | 374 |
| 375 RefPtr<EncodedFormData> formData = handle->obtainFetchDataReader(nullptr)->d
rainAsFormData(); | 375 RefPtr<EncodedFormData> formData = handle->obtainFetchDataReader(nullptr, ge
tCurrentTaskRunner())->drainAsFormData(); |
| 376 ASSERT_TRUE(formData); | 376 ASSERT_TRUE(formData); |
| 377 EXPECT_TRUE(formData->isSafeToSendToAnotherThread()); | 377 EXPECT_TRUE(formData->isSafeToSendToAnotherThread()); |
| 378 ASSERT_EQ(1u, formData->elements().size()); | 378 ASSERT_EQ(1u, formData->elements().size()); |
| 379 EXPECT_EQ(FormDataElement::encodedBlob, formData->elements()[0].m_type); | 379 EXPECT_EQ(FormDataElement::encodedBlob, formData->elements()[0].m_type); |
| 380 EXPECT_EQ(blobDataHandle->uuid(), formData->elements()[0].m_blobUUID); | 380 EXPECT_EQ(blobDataHandle->uuid(), formData->elements()[0].m_blobUUID); |
| 381 EXPECT_EQ(blobDataHandle, formData->elements()[0].m_optionalBlobDataHandle); | 381 EXPECT_EQ(blobDataHandle, formData->elements()[0].m_optionalBlobDataHandle); |
| 382 | 382 |
| 383 EXPECT_FALSE(handle->obtainFetchDataReader(nullptr)->drainAsBlobDataHandle()
); | 383 EXPECT_FALSE(handle->obtainFetchDataReader(nullptr, getCurrentTaskRunner())-
>drainAsBlobDataHandle()); |
| 384 size_t size; | 384 size_t size; |
| 385 EXPECT_EQ(kDone, handle->obtainFetchDataReader(nullptr)->read(nullptr, 0, kN
one, &size)); | 385 EXPECT_EQ(kDone, handle->obtainFetchDataReader(nullptr, getCurrentTaskRunner
())->read(nullptr, 0, kNone, &size)); |
| 386 } | 386 } |
| 387 | 387 |
| 388 TEST_F(FetchBlobDataConsumerHandleTest, ZeroByteReadDoesNotAffectDraining) | 388 TEST_F(FetchBlobDataConsumerHandleTest, ZeroByteReadDoesNotAffectDraining) |
| 389 { | 389 { |
| 390 auto factory = new StrictMock<MockLoaderFactory>; | 390 auto factory = new StrictMock<MockLoaderFactory>; |
| 391 | 391 |
| 392 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti
me"); | 392 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti
me"); |
| 393 std::unique_ptr<FetchDataConsumerHandle> handle | 393 std::unique_ptr<FetchDataConsumerHandle> handle |
| 394 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto
ry); | 394 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto
ry); |
| 395 std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainFetc
hDataReader(nullptr); | 395 std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainFetc
hDataReader(nullptr, getCurrentTaskRunner()); |
| 396 | 396 |
| 397 size_t readSize; | 397 size_t readSize; |
| 398 EXPECT_EQ(kShouldWait, reader->read(nullptr, 0, kNone, &readSize)); | 398 EXPECT_EQ(kShouldWait, reader->read(nullptr, 0, kNone, &readSize)); |
| 399 EXPECT_EQ(blobDataHandle, reader->drainAsBlobDataHandle()); | 399 EXPECT_EQ(blobDataHandle, reader->drainAsBlobDataHandle()); |
| 400 } | 400 } |
| 401 | 401 |
| 402 TEST_F(FetchBlobDataConsumerHandleTest, OneByteReadAffectsDraining) | 402 TEST_F(FetchBlobDataConsumerHandleTest, OneByteReadAffectsDraining) |
| 403 { | 403 { |
| 404 auto factory = new StrictMock<MockLoaderFactory>; | 404 auto factory = new StrictMock<MockLoaderFactory>; |
| 405 | 405 |
| 406 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti
me"); | 406 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti
me"); |
| 407 std::unique_ptr<FetchDataConsumerHandle> handle | 407 std::unique_ptr<FetchDataConsumerHandle> handle |
| 408 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto
ry); | 408 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto
ry); |
| 409 std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainFetc
hDataReader(nullptr); | 409 std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainFetc
hDataReader(nullptr, getCurrentTaskRunner()); |
| 410 | 410 |
| 411 size_t readSize; | 411 size_t readSize; |
| 412 char c; | 412 char c; |
| 413 EXPECT_EQ(kShouldWait, reader->read(&c, 1, kNone, &readSize)); | 413 EXPECT_EQ(kShouldWait, reader->read(&c, 1, kNone, &readSize)); |
| 414 EXPECT_FALSE(reader->drainAsFormData()); | 414 EXPECT_FALSE(reader->drainAsFormData()); |
| 415 } | 415 } |
| 416 | 416 |
| 417 TEST_F(FetchBlobDataConsumerHandleTest, BeginReadAffectsDraining) | 417 TEST_F(FetchBlobDataConsumerHandleTest, BeginReadAffectsDraining) |
| 418 { | 418 { |
| 419 auto factory = new StrictMock<MockLoaderFactory>; | 419 auto factory = new StrictMock<MockLoaderFactory>; |
| 420 | 420 |
| 421 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti
me"); | 421 RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a ti
me"); |
| 422 std::unique_ptr<FetchDataConsumerHandle> handle | 422 std::unique_ptr<FetchDataConsumerHandle> handle |
| 423 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto
ry); | 423 = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, facto
ry); |
| 424 std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainFetc
hDataReader(nullptr); | 424 std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainFetc
hDataReader(nullptr, getCurrentTaskRunner()); |
| 425 | 425 |
| 426 const void* buffer; | 426 const void* buffer; |
| 427 size_t available; | 427 size_t available; |
| 428 EXPECT_EQ(kShouldWait, reader->beginRead(&buffer, kNone, &available)); | 428 EXPECT_EQ(kShouldWait, reader->beginRead(&buffer, kNone, &available)); |
| 429 EXPECT_FALSE(reader->drainAsBlobDataHandle()); | 429 EXPECT_FALSE(reader->drainAsBlobDataHandle()); |
| 430 } | 430 } |
| 431 | 431 |
| 432 } // namespace | 432 } // namespace |
| 433 } // namespace blink | 433 } // namespace blink |
| OLD | NEW |