| 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/dom/Document.h" | 8 #include "core/dom/Document.h" |
| 9 #include "core/html/FormData.h" | 9 #include "core/html/FormData.h" |
| 10 #include "modules/fetch/BlobBytesConsumer.h" | 10 #include "modules/fetch/BlobBytesConsumer.h" |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 79 EXPECT_CALL(checkpoint, Call(1)); | 79 EXPECT_CALL(checkpoint, Call(1)); |
| 80 EXPECT_CALL(checkpoint, Call(2)); | 80 EXPECT_CALL(checkpoint, Call(2)); |
| 81 EXPECT_CALL(*client2, didFetchDataLoadedString(String("hello, world"))); | 81 EXPECT_CALL(*client2, didFetchDataLoadedString(String("hello, world"))); |
| 82 EXPECT_CALL(checkpoint, Call(3)); | 82 EXPECT_CALL(checkpoint, Call(3)); |
| 83 EXPECT_CALL(checkpoint, Call(4)); | 83 EXPECT_CALL(checkpoint, Call(4)); |
| 84 | 84 |
| 85 ReplayingBytesConsumer* src = new ReplayingBytesConsumer(&scope.document()); | 85 ReplayingBytesConsumer* src = new ReplayingBytesConsumer(&scope.document()); |
| 86 src->add(Command(Command::Data, "hello, ")); | 86 src->add(Command(Command::Data, "hello, ")); |
| 87 src->add(Command(Command::Data, "world")); | 87 src->add(Command(Command::Data, "world")); |
| 88 src->add(Command(Command::Done)); | 88 src->add(Command(Command::Done)); |
| 89 BodyStreamBuffer* buffer = new BodyStreamBuffer(scope.getScriptState(), src); | 89 BodyStreamBuffer* buffer = |
| 90 BodyStreamBuffer::create(scope.getScriptState(), src); |
| 90 | 91 |
| 91 BodyStreamBuffer* new1; | 92 BodyStreamBuffer* new1; |
| 92 BodyStreamBuffer* new2; | 93 BodyStreamBuffer* new2; |
| 93 buffer->tee(&new1, &new2); | 94 buffer->tee(&new1, &new2); |
| 94 | 95 |
| 95 EXPECT_TRUE(buffer->isStreamLocked()); | 96 EXPECT_TRUE(buffer->isStreamLocked()); |
| 96 EXPECT_TRUE(buffer->isStreamDisturbed()); | 97 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 97 EXPECT_FALSE(buffer->hasPendingActivity()); | 98 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 98 | 99 |
| 99 checkpoint.Call(0); | 100 checkpoint.Call(0); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 123 | 124 |
| 124 InSequence s; | 125 InSequence s; |
| 125 EXPECT_CALL(checkpoint, Call(1)); | 126 EXPECT_CALL(checkpoint, Call(1)); |
| 126 EXPECT_CALL(*client1, didFetchDataLoadedString(String("ABUX"))); | 127 EXPECT_CALL(*client1, didFetchDataLoadedString(String("ABUX"))); |
| 127 EXPECT_CALL(checkpoint, Call(2)); | 128 EXPECT_CALL(checkpoint, Call(2)); |
| 128 EXPECT_CALL(checkpoint, Call(3)); | 129 EXPECT_CALL(checkpoint, Call(3)); |
| 129 EXPECT_CALL(*client2, didFetchDataLoadedString(String("ABUX"))); | 130 EXPECT_CALL(*client2, didFetchDataLoadedString(String("ABUX"))); |
| 130 EXPECT_CALL(checkpoint, Call(4)); | 131 EXPECT_CALL(checkpoint, Call(4)); |
| 131 | 132 |
| 132 BodyStreamBuffer* buffer = | 133 BodyStreamBuffer* buffer = |
| 133 new BodyStreamBuffer(scope.getScriptState(), stream); | 134 BodyStreamBuffer::create(scope.getScriptState(), stream); |
| 134 | 135 |
| 135 BodyStreamBuffer* new1; | 136 BodyStreamBuffer* new1; |
| 136 BodyStreamBuffer* new2; | 137 BodyStreamBuffer* new2; |
| 137 buffer->tee(&new1, &new2); | 138 buffer->tee(&new1, &new2); |
| 138 | 139 |
| 139 EXPECT_TRUE(buffer->isStreamLocked()); | 140 EXPECT_TRUE(buffer->isStreamLocked()); |
| 140 // Note that this behavior is slightly different from for the behavior of | 141 // Note that this behavior is slightly different from for the behavior of |
| 141 // a BodyStreamBuffer made from a BytesConsumer. See the above test. In this | 142 // a BodyStreamBuffer made from a BytesConsumer. See the above test. In this |
| 142 // test, the stream will get disturbed when the microtask is performed. | 143 // test, the stream will get disturbed when the microtask is performed. |
| 143 // TODO(yhirano): A uniformed behavior is preferred. | 144 // TODO(yhirano): A uniformed behavior is preferred. |
| (...skipping 17 matching lines...) Expand all Loading... |
| 161 checkpoint.Call(4); | 162 checkpoint.Call(4); |
| 162 } | 163 } |
| 163 | 164 |
| 164 TEST_F(BodyStreamBufferTest, DrainAsBlobDataHandle) { | 165 TEST_F(BodyStreamBufferTest, DrainAsBlobDataHandle) { |
| 165 V8TestingScope scope; | 166 V8TestingScope scope; |
| 166 std::unique_ptr<BlobData> data = BlobData::create(); | 167 std::unique_ptr<BlobData> data = BlobData::create(); |
| 167 data->appendText("hello", false); | 168 data->appendText("hello", false); |
| 168 auto size = data->length(); | 169 auto size = data->length(); |
| 169 RefPtr<BlobDataHandle> blobDataHandle = | 170 RefPtr<BlobDataHandle> blobDataHandle = |
| 170 BlobDataHandle::create(std::move(data), size); | 171 BlobDataHandle::create(std::move(data), size); |
| 171 BodyStreamBuffer* buffer = new BodyStreamBuffer( | 172 BodyStreamBuffer* buffer = BodyStreamBuffer::create( |
| 172 scope.getScriptState(), | 173 scope.getScriptState(), |
| 173 new BlobBytesConsumer(scope.getExecutionContext(), blobDataHandle)); | 174 new BlobBytesConsumer(scope.getExecutionContext(), blobDataHandle)); |
| 174 | 175 |
| 175 EXPECT_FALSE(buffer->isStreamLocked()); | 176 EXPECT_FALSE(buffer->isStreamLocked()); |
| 176 EXPECT_FALSE(buffer->isStreamDisturbed()); | 177 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 177 EXPECT_FALSE(buffer->hasPendingActivity()); | 178 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 178 RefPtr<BlobDataHandle> outputBlobDataHandle = buffer->drainAsBlobDataHandle( | 179 RefPtr<BlobDataHandle> outputBlobDataHandle = buffer->drainAsBlobDataHandle( |
| 179 BytesConsumer::BlobSizePolicy::AllowBlobWithInvalidSize); | 180 BytesConsumer::BlobSizePolicy::AllowBlobWithInvalidSize); |
| 180 | 181 |
| 181 EXPECT_TRUE(buffer->isStreamLocked()); | 182 EXPECT_TRUE(buffer->isStreamLocked()); |
| 182 EXPECT_TRUE(buffer->isStreamDisturbed()); | 183 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 183 EXPECT_FALSE(buffer->hasPendingActivity()); | 184 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 184 EXPECT_EQ(blobDataHandle, outputBlobDataHandle); | 185 EXPECT_EQ(blobDataHandle, outputBlobDataHandle); |
| 185 } | 186 } |
| 186 | 187 |
| 187 TEST_F(BodyStreamBufferTest, DrainAsBlobDataHandleReturnsNull) { | 188 TEST_F(BodyStreamBufferTest, DrainAsBlobDataHandleReturnsNull) { |
| 188 V8TestingScope scope; | 189 V8TestingScope scope; |
| 189 // This BytesConsumer is not drainable. | 190 // This BytesConsumer is not drainable. |
| 190 BytesConsumer* src = new ReplayingBytesConsumer(&scope.document()); | 191 BytesConsumer* src = new ReplayingBytesConsumer(&scope.document()); |
| 191 BodyStreamBuffer* buffer = new BodyStreamBuffer(scope.getScriptState(), src); | 192 BodyStreamBuffer* buffer = |
| 193 BodyStreamBuffer::create(scope.getScriptState(), src); |
| 192 | 194 |
| 193 EXPECT_FALSE(buffer->isStreamLocked()); | 195 EXPECT_FALSE(buffer->isStreamLocked()); |
| 194 EXPECT_FALSE(buffer->isStreamDisturbed()); | 196 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 195 EXPECT_FALSE(buffer->hasPendingActivity()); | 197 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 196 | 198 |
| 197 EXPECT_FALSE(buffer->drainAsBlobDataHandle( | 199 EXPECT_FALSE(buffer->drainAsBlobDataHandle( |
| 198 BytesConsumer::BlobSizePolicy::AllowBlobWithInvalidSize)); | 200 BytesConsumer::BlobSizePolicy::AllowBlobWithInvalidSize)); |
| 199 | 201 |
| 200 EXPECT_FALSE(buffer->isStreamLocked()); | 202 EXPECT_FALSE(buffer->isStreamLocked()); |
| 201 EXPECT_FALSE(buffer->isStreamDisturbed()); | 203 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 202 EXPECT_FALSE(buffer->hasPendingActivity()); | 204 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 203 } | 205 } |
| 204 | 206 |
| 205 TEST_F(BodyStreamBufferTest, | 207 TEST_F(BodyStreamBufferTest, |
| 206 DrainAsBlobFromBufferMadeFromBufferMadeFromStream) { | 208 DrainAsBlobFromBufferMadeFromBufferMadeFromStream) { |
| 207 V8TestingScope scope; | 209 V8TestingScope scope; |
| 208 ScriptValue stream = | 210 ScriptValue stream = |
| 209 evalWithPrintingError(scope.getScriptState(), "new ReadableStream()"); | 211 evalWithPrintingError(scope.getScriptState(), "new ReadableStream()"); |
| 210 BodyStreamBuffer* buffer = | 212 BodyStreamBuffer* buffer = |
| 211 new BodyStreamBuffer(scope.getScriptState(), stream); | 213 BodyStreamBuffer::create(scope.getScriptState(), stream); |
| 212 | 214 |
| 213 EXPECT_FALSE(buffer->hasPendingActivity()); | 215 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 214 EXPECT_FALSE(buffer->isStreamLocked()); | 216 EXPECT_FALSE(buffer->isStreamLocked()); |
| 215 EXPECT_FALSE(buffer->isStreamDisturbed()); | 217 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 216 EXPECT_TRUE(buffer->isStreamReadable()); | 218 EXPECT_TRUE(buffer->isStreamReadable()); |
| 217 | 219 |
| 218 EXPECT_FALSE(buffer->drainAsBlobDataHandle( | 220 EXPECT_FALSE(buffer->drainAsBlobDataHandle( |
| 219 BytesConsumer::BlobSizePolicy::AllowBlobWithInvalidSize)); | 221 BytesConsumer::BlobSizePolicy::AllowBlobWithInvalidSize)); |
| 220 | 222 |
| 221 EXPECT_FALSE(buffer->hasPendingActivity()); | 223 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 222 EXPECT_FALSE(buffer->isStreamLocked()); | 224 EXPECT_FALSE(buffer->isStreamLocked()); |
| 223 EXPECT_FALSE(buffer->isStreamDisturbed()); | 225 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 224 EXPECT_TRUE(buffer->isStreamReadable()); | 226 EXPECT_TRUE(buffer->isStreamReadable()); |
| 225 } | 227 } |
| 226 | 228 |
| 227 TEST_F(BodyStreamBufferTest, DrainAsFormData) { | 229 TEST_F(BodyStreamBufferTest, DrainAsFormData) { |
| 228 V8TestingScope scope; | 230 V8TestingScope scope; |
| 229 FormData* data = FormData::create(UTF8Encoding()); | 231 FormData* data = FormData::create(UTF8Encoding()); |
| 230 data->append("name1", "value1"); | 232 data->append("name1", "value1"); |
| 231 data->append("name2", "value2"); | 233 data->append("name2", "value2"); |
| 232 RefPtr<EncodedFormData> inputFormData = data->encodeMultiPartFormData(); | 234 RefPtr<EncodedFormData> inputFormData = data->encodeMultiPartFormData(); |
| 233 | 235 |
| 234 BodyStreamBuffer* buffer = new BodyStreamBuffer( | 236 BodyStreamBuffer* buffer = BodyStreamBuffer::create( |
| 235 scope.getScriptState(), | 237 scope.getScriptState(), |
| 236 new FormDataBytesConsumer(scope.getExecutionContext(), inputFormData)); | 238 new FormDataBytesConsumer(scope.getExecutionContext(), inputFormData)); |
| 237 | 239 |
| 238 EXPECT_FALSE(buffer->isStreamLocked()); | 240 EXPECT_FALSE(buffer->isStreamLocked()); |
| 239 EXPECT_FALSE(buffer->isStreamDisturbed()); | 241 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 240 EXPECT_FALSE(buffer->hasPendingActivity()); | 242 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 241 RefPtr<EncodedFormData> outputFormData = buffer->drainAsFormData(); | 243 RefPtr<EncodedFormData> outputFormData = buffer->drainAsFormData(); |
| 242 | 244 |
| 243 EXPECT_TRUE(buffer->isStreamLocked()); | 245 EXPECT_TRUE(buffer->isStreamLocked()); |
| 244 EXPECT_TRUE(buffer->isStreamDisturbed()); | 246 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 245 EXPECT_FALSE(buffer->hasPendingActivity()); | 247 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 246 EXPECT_EQ(outputFormData->flattenToString(), | 248 EXPECT_EQ(outputFormData->flattenToString(), |
| 247 inputFormData->flattenToString()); | 249 inputFormData->flattenToString()); |
| 248 } | 250 } |
| 249 | 251 |
| 250 TEST_F(BodyStreamBufferTest, DrainAsFormDataReturnsNull) { | 252 TEST_F(BodyStreamBufferTest, DrainAsFormDataReturnsNull) { |
| 251 V8TestingScope scope; | 253 V8TestingScope scope; |
| 252 // This BytesConsumer is not drainable. | 254 // This BytesConsumer is not drainable. |
| 253 BytesConsumer* src = new ReplayingBytesConsumer(&scope.document()); | 255 BytesConsumer* src = new ReplayingBytesConsumer(&scope.document()); |
| 254 BodyStreamBuffer* buffer = new BodyStreamBuffer(scope.getScriptState(), src); | 256 BodyStreamBuffer* buffer = |
| 257 BodyStreamBuffer::create(scope.getScriptState(), src); |
| 255 | 258 |
| 256 EXPECT_FALSE(buffer->isStreamLocked()); | 259 EXPECT_FALSE(buffer->isStreamLocked()); |
| 257 EXPECT_FALSE(buffer->isStreamDisturbed()); | 260 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 258 EXPECT_FALSE(buffer->hasPendingActivity()); | 261 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 259 | 262 |
| 260 EXPECT_FALSE(buffer->drainAsFormData()); | 263 EXPECT_FALSE(buffer->drainAsFormData()); |
| 261 | 264 |
| 262 EXPECT_FALSE(buffer->isStreamLocked()); | 265 EXPECT_FALSE(buffer->isStreamLocked()); |
| 263 EXPECT_FALSE(buffer->isStreamDisturbed()); | 266 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 264 EXPECT_FALSE(buffer->hasPendingActivity()); | 267 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 265 } | 268 } |
| 266 | 269 |
| 267 TEST_F(BodyStreamBufferTest, | 270 TEST_F(BodyStreamBufferTest, |
| 268 DrainAsFormDataFromBufferMadeFromBufferMadeFromStream) { | 271 DrainAsFormDataFromBufferMadeFromBufferMadeFromStream) { |
| 269 V8TestingScope scope; | 272 V8TestingScope scope; |
| 270 ScriptValue stream = | 273 ScriptValue stream = |
| 271 evalWithPrintingError(scope.getScriptState(), "new ReadableStream()"); | 274 evalWithPrintingError(scope.getScriptState(), "new ReadableStream()"); |
| 272 BodyStreamBuffer* buffer = | 275 BodyStreamBuffer* buffer = |
| 273 new BodyStreamBuffer(scope.getScriptState(), stream); | 276 BodyStreamBuffer::create(scope.getScriptState(), stream); |
| 274 | 277 |
| 275 EXPECT_FALSE(buffer->hasPendingActivity()); | 278 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 276 EXPECT_FALSE(buffer->isStreamLocked()); | 279 EXPECT_FALSE(buffer->isStreamLocked()); |
| 277 EXPECT_FALSE(buffer->isStreamDisturbed()); | 280 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 278 EXPECT_TRUE(buffer->isStreamReadable()); | 281 EXPECT_TRUE(buffer->isStreamReadable()); |
| 279 | 282 |
| 280 EXPECT_FALSE(buffer->drainAsFormData()); | 283 EXPECT_FALSE(buffer->drainAsFormData()); |
| 281 | 284 |
| 282 EXPECT_FALSE(buffer->hasPendingActivity()); | 285 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 283 EXPECT_FALSE(buffer->isStreamLocked()); | 286 EXPECT_FALSE(buffer->isStreamLocked()); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 294 InSequence s; | 297 InSequence s; |
| 295 EXPECT_CALL(checkpoint, Call(1)); | 298 EXPECT_CALL(checkpoint, Call(1)); |
| 296 EXPECT_CALL(*client, didFetchDataLoadedArrayBufferMock(_)) | 299 EXPECT_CALL(*client, didFetchDataLoadedArrayBufferMock(_)) |
| 297 .WillOnce(SaveArg<0>(&arrayBuffer)); | 300 .WillOnce(SaveArg<0>(&arrayBuffer)); |
| 298 EXPECT_CALL(checkpoint, Call(2)); | 301 EXPECT_CALL(checkpoint, Call(2)); |
| 299 | 302 |
| 300 ReplayingBytesConsumer* src = new ReplayingBytesConsumer(&scope.document()); | 303 ReplayingBytesConsumer* src = new ReplayingBytesConsumer(&scope.document()); |
| 301 src->add(Command(Command::Wait)); | 304 src->add(Command(Command::Wait)); |
| 302 src->add(Command(Command::Data, "hello")); | 305 src->add(Command(Command::Data, "hello")); |
| 303 src->add(Command(Command::Done)); | 306 src->add(Command(Command::Done)); |
| 304 BodyStreamBuffer* buffer = new BodyStreamBuffer(scope.getScriptState(), src); | 307 BodyStreamBuffer* buffer = |
| 308 BodyStreamBuffer::create(scope.getScriptState(), src); |
| 305 buffer->startLoading(FetchDataLoader::createLoaderAsArrayBuffer(), client); | 309 buffer->startLoading(FetchDataLoader::createLoaderAsArrayBuffer(), client); |
| 306 | 310 |
| 307 EXPECT_TRUE(buffer->isStreamLocked()); | 311 EXPECT_TRUE(buffer->isStreamLocked()); |
| 308 EXPECT_TRUE(buffer->isStreamDisturbed()); | 312 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 309 EXPECT_TRUE(buffer->hasPendingActivity()); | 313 EXPECT_TRUE(buffer->hasPendingActivity()); |
| 310 | 314 |
| 311 checkpoint.Call(1); | 315 checkpoint.Call(1); |
| 312 testing::runPendingTasks(); | 316 testing::runPendingTasks(); |
| 313 checkpoint.Call(2); | 317 checkpoint.Call(2); |
| 314 | 318 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 329 InSequence s; | 333 InSequence s; |
| 330 EXPECT_CALL(checkpoint, Call(1)); | 334 EXPECT_CALL(checkpoint, Call(1)); |
| 331 EXPECT_CALL(*client, didFetchDataLoadedBlobHandleMock(_)) | 335 EXPECT_CALL(*client, didFetchDataLoadedBlobHandleMock(_)) |
| 332 .WillOnce(SaveArg<0>(&blobDataHandle)); | 336 .WillOnce(SaveArg<0>(&blobDataHandle)); |
| 333 EXPECT_CALL(checkpoint, Call(2)); | 337 EXPECT_CALL(checkpoint, Call(2)); |
| 334 | 338 |
| 335 ReplayingBytesConsumer* src = new ReplayingBytesConsumer(&scope.document()); | 339 ReplayingBytesConsumer* src = new ReplayingBytesConsumer(&scope.document()); |
| 336 src->add(Command(Command::Wait)); | 340 src->add(Command(Command::Wait)); |
| 337 src->add(Command(Command::Data, "hello")); | 341 src->add(Command(Command::Data, "hello")); |
| 338 src->add(Command(Command::Done)); | 342 src->add(Command(Command::Done)); |
| 339 BodyStreamBuffer* buffer = new BodyStreamBuffer(scope.getScriptState(), src); | 343 BodyStreamBuffer* buffer = |
| 344 BodyStreamBuffer::create(scope.getScriptState(), src); |
| 340 buffer->startLoading(FetchDataLoader::createLoaderAsBlobHandle("text/plain"), | 345 buffer->startLoading(FetchDataLoader::createLoaderAsBlobHandle("text/plain"), |
| 341 client); | 346 client); |
| 342 | 347 |
| 343 EXPECT_TRUE(buffer->isStreamLocked()); | 348 EXPECT_TRUE(buffer->isStreamLocked()); |
| 344 EXPECT_TRUE(buffer->isStreamDisturbed()); | 349 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 345 EXPECT_TRUE(buffer->hasPendingActivity()); | 350 EXPECT_TRUE(buffer->hasPendingActivity()); |
| 346 | 351 |
| 347 checkpoint.Call(1); | 352 checkpoint.Call(1); |
| 348 testing::runPendingTasks(); | 353 testing::runPendingTasks(); |
| 349 checkpoint.Call(2); | 354 checkpoint.Call(2); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 361 | 366 |
| 362 InSequence s; | 367 InSequence s; |
| 363 EXPECT_CALL(checkpoint, Call(1)); | 368 EXPECT_CALL(checkpoint, Call(1)); |
| 364 EXPECT_CALL(*client, didFetchDataLoadedString(String("hello"))); | 369 EXPECT_CALL(*client, didFetchDataLoadedString(String("hello"))); |
| 365 EXPECT_CALL(checkpoint, Call(2)); | 370 EXPECT_CALL(checkpoint, Call(2)); |
| 366 | 371 |
| 367 ReplayingBytesConsumer* src = new ReplayingBytesConsumer(&scope.document()); | 372 ReplayingBytesConsumer* src = new ReplayingBytesConsumer(&scope.document()); |
| 368 src->add(Command(Command::Wait)); | 373 src->add(Command(Command::Wait)); |
| 369 src->add(Command(Command::Data, "hello")); | 374 src->add(Command(Command::Data, "hello")); |
| 370 src->add(Command(Command::Done)); | 375 src->add(Command(Command::Done)); |
| 371 BodyStreamBuffer* buffer = new BodyStreamBuffer(scope.getScriptState(), src); | 376 BodyStreamBuffer* buffer = |
| 377 BodyStreamBuffer::create(scope.getScriptState(), src); |
| 372 buffer->startLoading(FetchDataLoader::createLoaderAsString(), client); | 378 buffer->startLoading(FetchDataLoader::createLoaderAsString(), client); |
| 373 | 379 |
| 374 EXPECT_TRUE(buffer->isStreamLocked()); | 380 EXPECT_TRUE(buffer->isStreamLocked()); |
| 375 EXPECT_TRUE(buffer->isStreamDisturbed()); | 381 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 376 EXPECT_TRUE(buffer->hasPendingActivity()); | 382 EXPECT_TRUE(buffer->hasPendingActivity()); |
| 377 | 383 |
| 378 checkpoint.Call(1); | 384 checkpoint.Call(1); |
| 379 testing::runPendingTasks(); | 385 testing::runPendingTasks(); |
| 380 checkpoint.Call(2); | 386 checkpoint.Call(2); |
| 381 | 387 |
| 382 EXPECT_TRUE(buffer->isStreamLocked()); | 388 EXPECT_TRUE(buffer->isStreamLocked()); |
| 383 EXPECT_TRUE(buffer->isStreamDisturbed()); | 389 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 384 EXPECT_FALSE(buffer->hasPendingActivity()); | 390 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 385 } | 391 } |
| 386 | 392 |
| 387 TEST_F(BodyStreamBufferTest, LoadClosedHandle) { | 393 TEST_F(BodyStreamBufferTest, LoadClosedHandle) { |
| 388 V8TestingScope scope; | 394 V8TestingScope scope; |
| 389 Checkpoint checkpoint; | 395 Checkpoint checkpoint; |
| 390 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); | 396 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); |
| 391 | 397 |
| 392 InSequence s; | 398 InSequence s; |
| 393 EXPECT_CALL(checkpoint, Call(1)); | 399 EXPECT_CALL(checkpoint, Call(1)); |
| 394 EXPECT_CALL(*client, didFetchDataLoadedString(String(""))); | 400 EXPECT_CALL(*client, didFetchDataLoadedString(String(""))); |
| 395 EXPECT_CALL(checkpoint, Call(2)); | 401 EXPECT_CALL(checkpoint, Call(2)); |
| 396 | 402 |
| 397 BodyStreamBuffer* buffer = new BodyStreamBuffer( | 403 BodyStreamBuffer* buffer = BodyStreamBuffer::create( |
| 398 scope.getScriptState(), BytesConsumer::createClosed()); | 404 scope.getScriptState(), BytesConsumer::createClosed()); |
| 399 | 405 |
| 400 EXPECT_TRUE(buffer->isStreamClosed()); | 406 EXPECT_TRUE(buffer->isStreamClosed()); |
| 401 | 407 |
| 402 EXPECT_FALSE(buffer->isStreamLocked()); | 408 EXPECT_FALSE(buffer->isStreamLocked()); |
| 403 EXPECT_FALSE(buffer->isStreamDisturbed()); | 409 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 404 EXPECT_FALSE(buffer->hasPendingActivity()); | 410 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 405 | 411 |
| 406 checkpoint.Call(1); | 412 checkpoint.Call(1); |
| 407 buffer->startLoading(FetchDataLoader::createLoaderAsString(), client); | 413 buffer->startLoading(FetchDataLoader::createLoaderAsString(), client); |
| 408 checkpoint.Call(2); | 414 checkpoint.Call(2); |
| 409 | 415 |
| 410 EXPECT_TRUE(buffer->isStreamLocked()); | 416 EXPECT_TRUE(buffer->isStreamLocked()); |
| 411 EXPECT_TRUE(buffer->isStreamDisturbed()); | 417 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 412 EXPECT_FALSE(buffer->hasPendingActivity()); | 418 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 413 } | 419 } |
| 414 | 420 |
| 415 TEST_F(BodyStreamBufferTest, LoadErroredHandle) { | 421 TEST_F(BodyStreamBufferTest, LoadErroredHandle) { |
| 416 V8TestingScope scope; | 422 V8TestingScope scope; |
| 417 Checkpoint checkpoint; | 423 Checkpoint checkpoint; |
| 418 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); | 424 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); |
| 419 | 425 |
| 420 InSequence s; | 426 InSequence s; |
| 421 EXPECT_CALL(checkpoint, Call(1)); | 427 EXPECT_CALL(checkpoint, Call(1)); |
| 422 EXPECT_CALL(*client, didFetchDataLoadFailed()); | 428 EXPECT_CALL(*client, didFetchDataLoadFailed()); |
| 423 EXPECT_CALL(checkpoint, Call(2)); | 429 EXPECT_CALL(checkpoint, Call(2)); |
| 424 | 430 |
| 425 BodyStreamBuffer* buffer = new BodyStreamBuffer( | 431 BodyStreamBuffer* buffer = BodyStreamBuffer::create( |
| 426 scope.getScriptState(), | 432 scope.getScriptState(), |
| 427 BytesConsumer::createErrored(BytesConsumer::Error())); | 433 BytesConsumer::createErrored(BytesConsumer::Error())); |
| 428 | 434 |
| 429 EXPECT_TRUE(buffer->isStreamErrored()); | 435 EXPECT_TRUE(buffer->isStreamErrored()); |
| 430 | 436 |
| 431 EXPECT_FALSE(buffer->isStreamLocked()); | 437 EXPECT_FALSE(buffer->isStreamLocked()); |
| 432 EXPECT_FALSE(buffer->isStreamDisturbed()); | 438 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 433 EXPECT_FALSE(buffer->hasPendingActivity()); | 439 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 434 | 440 |
| 435 checkpoint.Call(1); | 441 checkpoint.Call(1); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 449 InSequence s; | 455 InSequence s; |
| 450 EXPECT_CALL(checkpoint, Call(1)); | 456 EXPECT_CALL(checkpoint, Call(1)); |
| 451 EXPECT_CALL(*client, didFetchDataLoadedString(String("hello"))); | 457 EXPECT_CALL(*client, didFetchDataLoadedString(String("hello"))); |
| 452 EXPECT_CALL(checkpoint, Call(2)); | 458 EXPECT_CALL(checkpoint, Call(2)); |
| 453 | 459 |
| 454 ReplayingBytesConsumer* src = new ReplayingBytesConsumer(&scope.document()); | 460 ReplayingBytesConsumer* src = new ReplayingBytesConsumer(&scope.document()); |
| 455 src->add(Command(Command::Wait)); | 461 src->add(Command(Command::Wait)); |
| 456 src->add(Command(Command::Data, "hello")); | 462 src->add(Command(Command::Data, "hello")); |
| 457 src->add(Command(Command::Done)); | 463 src->add(Command(Command::Done)); |
| 458 Persistent<BodyStreamBuffer> buffer = | 464 Persistent<BodyStreamBuffer> buffer = |
| 459 new BodyStreamBuffer(scope.getScriptState(), src); | 465 BodyStreamBuffer::create(scope.getScriptState(), src); |
| 460 buffer->startLoading(FetchDataLoader::createLoaderAsString(), client); | 466 buffer->startLoading(FetchDataLoader::createLoaderAsString(), client); |
| 461 | 467 |
| 462 ThreadState::current()->collectAllGarbage(); | 468 ThreadState::current()->collectAllGarbage(); |
| 463 checkpoint.Call(1); | 469 checkpoint.Call(1); |
| 464 testing::runPendingTasks(); | 470 testing::runPendingTasks(); |
| 465 checkpoint.Call(2); | 471 checkpoint.Call(2); |
| 466 } | 472 } |
| 467 | 473 |
| 468 TEST_F(BodyStreamBufferTest, SourceShouldBeCanceledWhenCanceled) { | 474 TEST_F(BodyStreamBufferTest, SourceShouldBeCanceledWhenCanceled) { |
| 469 V8TestingScope scope; | 475 V8TestingScope scope; |
| 470 ReplayingBytesConsumer* consumer = | 476 ReplayingBytesConsumer* consumer = |
| 471 new BytesConsumerTestUtil::ReplayingBytesConsumer( | 477 new BytesConsumerTestUtil::ReplayingBytesConsumer( |
| 472 scope.getExecutionContext()); | 478 scope.getExecutionContext()); |
| 473 | 479 |
| 474 BodyStreamBuffer* buffer = | 480 BodyStreamBuffer* buffer = |
| 475 new BodyStreamBuffer(scope.getScriptState(), consumer); | 481 BodyStreamBuffer::create(scope.getScriptState(), consumer); |
| 476 ScriptValue reason(scope.getScriptState(), | 482 ScriptValue reason(scope.getScriptState(), |
| 477 v8String(scope.getScriptState()->isolate(), "reason")); | 483 v8String(scope.getScriptState()->isolate(), "reason")); |
| 478 EXPECT_FALSE(consumer->isCancelled()); | 484 EXPECT_FALSE(consumer->isCancelled()); |
| 479 buffer->cancel(scope.getScriptState(), reason); | 485 buffer->cancel(scope.getScriptState(), reason); |
| 480 EXPECT_TRUE(consumer->isCancelled()); | 486 EXPECT_TRUE(consumer->isCancelled()); |
| 481 } | 487 } |
| 482 | 488 |
| 483 } // namespace | 489 } // namespace |
| 484 | 490 |
| 485 } // namespace blink | 491 } // namespace blink |
| OLD | NEW |