Chromium Code Reviews| 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 "core/html/FormData.h" | 7 #include "core/html/FormData.h" |
| 8 #include "core/testing/DummyPageHolder.h" | 8 #include "core/testing/DummyPageHolder.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 20 matching lines...) Expand all Loading... | |
| 31 | 31 |
| 32 class FakeLoaderFactory : public FetchBlobDataConsumerHandle::LoaderFactory { | 32 class FakeLoaderFactory : public FetchBlobDataConsumerHandle::LoaderFactory { |
| 33 public: | 33 public: |
| 34 PassOwnPtr<ThreadableLoader> create(ExecutionContext&, ThreadableLoaderClien t*, const ThreadableLoaderOptions&, const ResourceLoaderOptions&) override | 34 PassOwnPtr<ThreadableLoader> create(ExecutionContext&, ThreadableLoaderClien t*, const ThreadableLoaderOptions&, const ResourceLoaderOptions&) override |
| 35 { | 35 { |
| 36 ASSERT_NOT_REACHED(); | 36 ASSERT_NOT_REACHED(); |
| 37 return nullptr; | 37 return nullptr; |
| 38 } | 38 } |
| 39 }; | 39 }; |
| 40 | 40 |
| 41 class EmptyClient : public FetchDataConsumerHandle::Client { | |
| 42 public: | |
| 43 void didGetReadable() override {} | |
| 44 }; | |
|
tyoshino (SeeGerritForStatus)
2016/05/16 05:48:53
not used?
yhirano
2016/05/16 06:35:37
You're right. Thanks.
| |
| 45 | |
| 41 class BodyStreamBufferTest : public ::testing::Test { | 46 class BodyStreamBufferTest : public ::testing::Test { |
| 42 public: | 47 public: |
| 43 BodyStreamBufferTest() | 48 BodyStreamBufferTest() |
| 44 { | 49 { |
| 45 m_page = DummyPageHolder::create(IntSize(1, 1)); | 50 m_page = DummyPageHolder::create(IntSize(1, 1)); |
| 46 } | 51 } |
| 47 ~BodyStreamBufferTest() override {} | 52 ~BodyStreamBufferTest() override {} |
| 48 | 53 |
| 49 protected: | 54 protected: |
| 50 ScriptState* getScriptState() { return ScriptState::forMainWorld(m_page->doc ument().frame()); } | 55 ScriptState* getScriptState() { return ScriptState::forMainWorld(m_page->doc ument().frame()); } |
| 51 ExecutionContext* getExecutionContext() { return &m_page->document(); } | 56 ExecutionContext* getExecutionContext() { return &m_page->document(); } |
| 52 | 57 |
| 53 OwnPtr<DummyPageHolder> m_page; | 58 OwnPtr<DummyPageHolder> m_page; |
| 59 | |
| 60 ScriptValue eval(const char* s) | |
| 61 { | |
| 62 v8::Local<v8::String> source; | |
| 63 v8::Local<v8::Script> script; | |
| 64 v8::MicrotasksScope microtasks(getScriptState()->isolate(), v8::Microtas ksScope::kDoNotRunMicrotasks); | |
| 65 if (!v8Call(v8::String::NewFromUtf8(getScriptState()->isolate(), s, v8:: NewStringType::kNormal), source)) { | |
| 66 ADD_FAILURE(); | |
| 67 return ScriptValue(); | |
| 68 } | |
| 69 if (!v8Call(v8::Script::Compile(getScriptState()->context(), source), sc ript)) { | |
| 70 ADD_FAILURE() << "Compilation fails"; | |
| 71 return ScriptValue(); | |
| 72 } | |
| 73 return ScriptValue(getScriptState(), script->Run(getScriptState()->conte xt())); | |
| 74 } | |
| 75 ScriptValue evalWithPrintingError(const char* s) | |
| 76 { | |
| 77 v8::TryCatch block(getScriptState()->isolate()); | |
| 78 ScriptValue r = eval(s); | |
| 79 if (block.HasCaught()) { | |
| 80 ADD_FAILURE() << toCoreString(block.Exception()->ToString(getScriptS tate()->isolate())).utf8().data(); | |
| 81 block.ReThrow(); | |
| 82 } | |
| 83 return r; | |
| 84 } | |
| 54 }; | 85 }; |
| 55 | 86 |
| 56 TEST_F(BodyStreamBufferTest, ReleaseHandle) | 87 TEST_F(BodyStreamBufferTest, Tee) |
| 57 { | 88 { |
| 58 OwnPtr<FetchDataConsumerHandle> handle = createFetchDataConsumerHandleFromWe bHandle(createWaitingDataConsumerHandle()); | 89 Checkpoint checkpoint; |
| 59 FetchDataConsumerHandle* rawHandle = handle.get(); | 90 MockFetchDataLoaderClient* client1 = MockFetchDataLoaderClient::create(); |
| 60 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), handle.rel ease()); | 91 MockFetchDataLoaderClient* client2 = MockFetchDataLoaderClient::create(); |
| 61 | 92 |
| 62 EXPECT_FALSE(buffer->hasPendingActivity()); | 93 InSequence s; |
| 63 EXPECT_FALSE(buffer->isStreamLocked()); | 94 EXPECT_CALL(checkpoint, Call(1)); |
| 64 EXPECT_FALSE(buffer->isStreamDisturbed()); | 95 EXPECT_CALL(*client1, didFetchDataLoadedString(String("hello, world"))); |
| 65 EXPECT_TRUE(buffer->isStreamReadable()); | 96 EXPECT_CALL(checkpoint, Call(2)); |
| 97 EXPECT_CALL(checkpoint, Call(3)); | |
| 98 EXPECT_CALL(*client2, didFetchDataLoadedString(String("hello, world"))); | |
| 99 EXPECT_CALL(checkpoint, Call(4)); | |
| 66 | 100 |
| 67 OwnPtr<FetchDataConsumerHandle> handle2 = buffer->releaseHandle(); | 101 OwnPtr<DataConsumerHandleTestUtil::ReplayingHandle> handle = DataConsumerHan dleTestUtil::ReplayingHandle::create(); |
| 102 handle->add(DataConsumerHandleTestUtil::Command(DataConsumerHandleTestUtil:: Command::Data, "hello, ")); | |
| 103 handle->add(DataConsumerHandleTestUtil::Command(DataConsumerHandleTestUtil:: Command::Data, "world")); | |
| 104 handle->add(DataConsumerHandleTestUtil::Command(DataConsumerHandleTestUtil:: Command::Done)); | |
| 105 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), createFetc hDataConsumerHandleFromWebHandle(std::move(handle))); | |
| 68 | 106 |
| 69 ASSERT_EQ(rawHandle, handle2.get()); | 107 BodyStreamBuffer* new1; |
| 108 BodyStreamBuffer* new2; | |
| 109 buffer->tee(&new1, &new2); | |
| 110 | |
| 70 EXPECT_TRUE(buffer->isStreamLocked()); | 111 EXPECT_TRUE(buffer->isStreamLocked()); |
| 71 EXPECT_TRUE(buffer->isStreamDisturbed()); | 112 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 72 EXPECT_TRUE(buffer->isStreamClosed()); | 113 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 114 | |
| 115 new1->startLoading(FetchDataLoader::createLoaderAsString(), client1); | |
| 116 checkpoint.Call(1); | |
| 117 testing::runPendingTasks(); | |
| 118 checkpoint.Call(2); | |
| 119 | |
| 120 new2->startLoading(FetchDataLoader::createLoaderAsString(), client2); | |
| 121 checkpoint.Call(3); | |
| 122 testing::runPendingTasks(); | |
| 123 checkpoint.Call(4); | |
| 124 } | |
| 125 | |
| 126 TEST_F(BodyStreamBufferTest, TeeFromHandleMadeFromStream) | |
| 127 { | |
| 128 ScriptState::Scope scope(getScriptState()); | |
| 129 ScriptValue stream = evalWithPrintingError( | |
| 130 "stream = new ReadableStream({start: c => controller = c});" | |
| 131 "controller.enqueue(new Uint8Array([0x41, 0x42]));" | |
| 132 "controller.enqueue(new Uint8Array([0x55, 0x58]));" | |
| 133 "controller.close();" | |
| 134 "stream"); | |
| 135 Checkpoint checkpoint; | |
| 136 MockFetchDataLoaderClient* client1 = MockFetchDataLoaderClient::create(); | |
| 137 MockFetchDataLoaderClient* client2 = MockFetchDataLoaderClient::create(); | |
| 138 | |
| 139 InSequence s; | |
| 140 EXPECT_CALL(checkpoint, Call(1)); | |
| 141 EXPECT_CALL(*client1, didFetchDataLoadedString(String("ABUX"))); | |
| 142 EXPECT_CALL(checkpoint, Call(2)); | |
| 143 EXPECT_CALL(checkpoint, Call(3)); | |
| 144 EXPECT_CALL(*client2, didFetchDataLoadedString(String("ABUX"))); | |
| 145 EXPECT_CALL(checkpoint, Call(4)); | |
| 146 | |
| 147 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), stream); | |
| 148 | |
| 149 BodyStreamBuffer* new1; | |
| 150 BodyStreamBuffer* new2; | |
| 151 buffer->tee(&new1, &new2); | |
| 152 | |
| 153 EXPECT_TRUE(buffer->isStreamLocked()); | |
| 154 EXPECT_FALSE(buffer->isStreamDisturbed()); | |
|
tyoshino (SeeGerritForStatus)
2016/05/16 05:48:53
Leave some TODO about this behavior?
yhirano
2016/05/16 06:35:37
Done.
| |
| 155 EXPECT_FALSE(buffer->hasPendingActivity()); | |
| 156 | |
| 157 v8::MicrotasksScope::PerformCheckpoint(getScriptState()->isolate()); | |
| 158 | |
| 159 EXPECT_TRUE(buffer->isStreamLocked()); | |
| 160 EXPECT_TRUE(buffer->isStreamDisturbed()); | |
| 161 EXPECT_FALSE(buffer->hasPendingActivity()); | |
| 162 | |
| 163 new1->startLoading(FetchDataLoader::createLoaderAsString(), client1); | |
| 164 checkpoint.Call(1); | |
| 165 testing::runPendingTasks(); | |
| 166 checkpoint.Call(2); | |
| 167 | |
| 168 new2->startLoading(FetchDataLoader::createLoaderAsString(), client2); | |
| 169 checkpoint.Call(3); | |
| 170 testing::runPendingTasks(); | |
| 171 checkpoint.Call(4); | |
| 73 } | 172 } |
| 74 | 173 |
| 75 TEST_F(BodyStreamBufferTest, DrainAsBlobDataHandle) | 174 TEST_F(BodyStreamBufferTest, DrainAsBlobDataHandle) |
| 76 { | 175 { |
| 77 OwnPtr<BlobData> data = BlobData::create(); | 176 OwnPtr<BlobData> data = BlobData::create(); |
| 78 data->appendText("hello", false); | 177 data->appendText("hello", false); |
| 79 auto size = data->length(); | 178 auto size = data->length(); |
| 80 RefPtr<BlobDataHandle> blobDataHandle = BlobDataHandle::create(data.release( ), size); | 179 RefPtr<BlobDataHandle> blobDataHandle = BlobDataHandle::create(data.release( ), size); |
| 81 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), FetchBlobD ataConsumerHandle::create(getExecutionContext(), blobDataHandle, new FakeLoaderF actory)); | 180 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), FetchBlobD ataConsumerHandle::create(getExecutionContext(), blobDataHandle, new FakeLoaderF actory)); |
| 82 | 181 |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 101 EXPECT_FALSE(buffer->isStreamDisturbed()); | 200 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 102 EXPECT_FALSE(buffer->hasPendingActivity()); | 201 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 103 | 202 |
| 104 EXPECT_FALSE(buffer->drainAsBlobDataHandle(FetchDataConsumerHandle::Reader:: AllowBlobWithInvalidSize)); | 203 EXPECT_FALSE(buffer->drainAsBlobDataHandle(FetchDataConsumerHandle::Reader:: AllowBlobWithInvalidSize)); |
| 105 | 204 |
| 106 EXPECT_FALSE(buffer->isStreamLocked()); | 205 EXPECT_FALSE(buffer->isStreamLocked()); |
| 107 EXPECT_FALSE(buffer->isStreamDisturbed()); | 206 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 108 EXPECT_FALSE(buffer->hasPendingActivity()); | 207 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 109 } | 208 } |
| 110 | 209 |
| 210 TEST_F(BodyStreamBufferTest, DrainAsBlobFromBufferMadeFromBufferMadeFromStream) | |
| 211 { | |
| 212 ScriptState::Scope scope(getScriptState()); | |
| 213 ScriptValue stream = evalWithPrintingError("new ReadableStream()"); | |
| 214 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), stream); | |
| 215 | |
| 216 EXPECT_FALSE(buffer->hasPendingActivity()); | |
| 217 EXPECT_FALSE(buffer->isStreamLocked()); | |
| 218 EXPECT_FALSE(buffer->isStreamDisturbed()); | |
| 219 EXPECT_TRUE(buffer->isStreamReadable()); | |
| 220 | |
| 221 EXPECT_FALSE(buffer->drainAsBlobDataHandle(FetchDataConsumerHandle::Reader:: AllowBlobWithInvalidSize)); | |
| 222 | |
| 223 EXPECT_FALSE(buffer->hasPendingActivity()); | |
| 224 EXPECT_FALSE(buffer->isStreamLocked()); | |
| 225 EXPECT_FALSE(buffer->isStreamDisturbed()); | |
| 226 EXPECT_TRUE(buffer->isStreamReadable()); | |
| 227 } | |
| 228 | |
| 111 TEST_F(BodyStreamBufferTest, DrainAsFormData) | 229 TEST_F(BodyStreamBufferTest, DrainAsFormData) |
| 112 { | 230 { |
| 113 FormData* data = FormData::create(UTF8Encoding()); | 231 FormData* data = FormData::create(UTF8Encoding()); |
| 114 data->append("name1", "value1"); | 232 data->append("name1", "value1"); |
| 115 data->append("name2", "value2"); | 233 data->append("name2", "value2"); |
| 116 RefPtr<EncodedFormData> inputFormData = data->encodeMultiPartFormData(); | 234 RefPtr<EncodedFormData> inputFormData = data->encodeMultiPartFormData(); |
| 117 | 235 |
| 118 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), FetchFormD ataConsumerHandle::create(getExecutionContext(), inputFormData)); | 236 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), FetchFormD ataConsumerHandle::create(getExecutionContext(), inputFormData)); |
| 119 | 237 |
| 120 EXPECT_FALSE(buffer->isStreamLocked()); | 238 EXPECT_FALSE(buffer->isStreamLocked()); |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 138 EXPECT_FALSE(buffer->isStreamDisturbed()); | 256 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 139 EXPECT_FALSE(buffer->hasPendingActivity()); | 257 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 140 | 258 |
| 141 EXPECT_FALSE(buffer->drainAsFormData()); | 259 EXPECT_FALSE(buffer->drainAsFormData()); |
| 142 | 260 |
| 143 EXPECT_FALSE(buffer->isStreamLocked()); | 261 EXPECT_FALSE(buffer->isStreamLocked()); |
| 144 EXPECT_FALSE(buffer->isStreamDisturbed()); | 262 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 145 EXPECT_FALSE(buffer->hasPendingActivity()); | 263 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 146 } | 264 } |
| 147 | 265 |
| 266 TEST_F(BodyStreamBufferTest, DrainAsFormDataFromBufferMadeFromBufferMadeFromStre am) | |
| 267 { | |
| 268 ScriptState::Scope scope(getScriptState()); | |
| 269 ScriptValue stream = evalWithPrintingError("new ReadableStream()"); | |
| 270 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), stream); | |
| 271 | |
| 272 EXPECT_FALSE(buffer->hasPendingActivity()); | |
| 273 EXPECT_FALSE(buffer->isStreamLocked()); | |
| 274 EXPECT_FALSE(buffer->isStreamDisturbed()); | |
| 275 EXPECT_TRUE(buffer->isStreamReadable()); | |
| 276 | |
| 277 EXPECT_FALSE(buffer->drainAsFormData()); | |
| 278 | |
| 279 EXPECT_FALSE(buffer->hasPendingActivity()); | |
| 280 EXPECT_FALSE(buffer->isStreamLocked()); | |
| 281 EXPECT_FALSE(buffer->isStreamDisturbed()); | |
| 282 EXPECT_TRUE(buffer->isStreamReadable()); | |
| 283 } | |
| 284 | |
| 148 TEST_F(BodyStreamBufferTest, LoadBodyStreamBufferAsArrayBuffer) | 285 TEST_F(BodyStreamBufferTest, LoadBodyStreamBufferAsArrayBuffer) |
| 149 { | 286 { |
| 150 Checkpoint checkpoint; | 287 Checkpoint checkpoint; |
| 151 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); | 288 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); |
| 152 DOMArrayBuffer* arrayBuffer = nullptr; | 289 DOMArrayBuffer* arrayBuffer = nullptr; |
| 153 | 290 |
| 154 InSequence s; | 291 InSequence s; |
| 155 EXPECT_CALL(checkpoint, Call(1)); | 292 EXPECT_CALL(checkpoint, Call(1)); |
| 156 EXPECT_CALL(*client, didFetchDataLoadedArrayBufferMock(_)).WillOnce(SaveArg< 0>(&arrayBuffer)); | 293 EXPECT_CALL(*client, didFetchDataLoadedArrayBufferMock(_)).WillOnce(SaveArg< 0>(&arrayBuffer)); |
| 157 EXPECT_CALL(checkpoint, Call(2)); | 294 EXPECT_CALL(checkpoint, Call(2)); |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 230 | 367 |
| 231 checkpoint.Call(1); | 368 checkpoint.Call(1); |
| 232 testing::runPendingTasks(); | 369 testing::runPendingTasks(); |
| 233 checkpoint.Call(2); | 370 checkpoint.Call(2); |
| 234 | 371 |
| 235 EXPECT_TRUE(buffer->isStreamLocked()); | 372 EXPECT_TRUE(buffer->isStreamLocked()); |
| 236 EXPECT_TRUE(buffer->isStreamDisturbed()); | 373 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 237 EXPECT_FALSE(buffer->hasPendingActivity()); | 374 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 238 } | 375 } |
| 239 | 376 |
| 240 TEST_F(BodyStreamBufferTest, ReleaseClosedHandle) | |
| 241 { | |
| 242 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), createFetc hDataConsumerHandleFromWebHandle(createDoneDataConsumerHandle())); | |
| 243 | |
| 244 EXPECT_TRUE(buffer->isStreamReadable()); | |
| 245 testing::runPendingTasks(); | |
| 246 EXPECT_TRUE(buffer->isStreamClosed()); | |
| 247 | |
| 248 EXPECT_FALSE(buffer->isStreamLocked()); | |
| 249 EXPECT_FALSE(buffer->isStreamDisturbed()); | |
| 250 EXPECT_FALSE(buffer->hasPendingActivity()); | |
| 251 OwnPtr<FetchDataConsumerHandle> handle = buffer->releaseHandle(); | |
| 252 | |
| 253 EXPECT_TRUE(handle); | |
| 254 EXPECT_TRUE(buffer->isStreamLocked()); | |
| 255 EXPECT_TRUE(buffer->isStreamDisturbed()); | |
| 256 EXPECT_FALSE(buffer->hasPendingActivity()); | |
| 257 } | |
| 258 | |
| 259 TEST_F(BodyStreamBufferTest, LoadClosedHandle) | 377 TEST_F(BodyStreamBufferTest, LoadClosedHandle) |
| 260 { | 378 { |
| 261 Checkpoint checkpoint; | 379 Checkpoint checkpoint; |
| 262 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); | 380 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); |
| 263 | 381 |
| 264 InSequence s; | 382 InSequence s; |
| 265 EXPECT_CALL(checkpoint, Call(1)); | 383 EXPECT_CALL(checkpoint, Call(1)); |
| 266 EXPECT_CALL(*client, didFetchDataLoadedString(String(""))); | 384 EXPECT_CALL(*client, didFetchDataLoadedString(String(""))); |
| 267 EXPECT_CALL(checkpoint, Call(2)); | 385 EXPECT_CALL(checkpoint, Call(2)); |
| 268 | 386 |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 283 | 401 |
| 284 checkpoint.Call(1); | 402 checkpoint.Call(1); |
| 285 testing::runPendingTasks(); | 403 testing::runPendingTasks(); |
| 286 checkpoint.Call(2); | 404 checkpoint.Call(2); |
| 287 | 405 |
| 288 EXPECT_TRUE(buffer->isStreamLocked()); | 406 EXPECT_TRUE(buffer->isStreamLocked()); |
| 289 EXPECT_TRUE(buffer->isStreamDisturbed()); | 407 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 290 EXPECT_FALSE(buffer->hasPendingActivity()); | 408 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 291 } | 409 } |
| 292 | 410 |
| 293 TEST_F(BodyStreamBufferTest, ReleaseErroredHandle) | |
| 294 { | |
| 295 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), createFetc hDataConsumerHandleFromWebHandle(createUnexpectedErrorDataConsumerHandle())); | |
| 296 | |
| 297 EXPECT_TRUE(buffer->isStreamReadable()); | |
| 298 testing::runPendingTasks(); | |
| 299 EXPECT_TRUE(buffer->isStreamErrored()); | |
| 300 | |
| 301 EXPECT_FALSE(buffer->isStreamLocked()); | |
| 302 EXPECT_FALSE(buffer->isStreamDisturbed()); | |
| 303 EXPECT_FALSE(buffer->hasPendingActivity()); | |
| 304 OwnPtr<FetchDataConsumerHandle> handle = buffer->releaseHandle(); | |
| 305 EXPECT_TRUE(handle); | |
| 306 EXPECT_TRUE(buffer->isStreamLocked()); | |
| 307 EXPECT_TRUE(buffer->isStreamDisturbed()); | |
| 308 EXPECT_FALSE(buffer->hasPendingActivity()); | |
| 309 } | |
| 310 | |
| 311 TEST_F(BodyStreamBufferTest, LoadErroredHandle) | 411 TEST_F(BodyStreamBufferTest, LoadErroredHandle) |
| 312 { | 412 { |
| 313 Checkpoint checkpoint; | 413 Checkpoint checkpoint; |
| 314 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); | 414 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); |
| 315 | 415 |
| 316 InSequence s; | 416 InSequence s; |
| 317 EXPECT_CALL(checkpoint, Call(1)); | 417 EXPECT_CALL(checkpoint, Call(1)); |
| 318 EXPECT_CALL(*client, didFetchDataLoadFailed()); | 418 EXPECT_CALL(*client, didFetchDataLoadFailed()); |
| 319 EXPECT_CALL(checkpoint, Call(2)); | 419 EXPECT_CALL(checkpoint, Call(2)); |
| 320 | 420 |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 399 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), handle.rel ease()); | 499 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), handle.rel ease()); |
| 400 checkpoint.Call(1); | 500 checkpoint.Call(1); |
| 401 ScriptValue reason(getScriptState(), v8String(getScriptState()->isolate(), " reason")); | 501 ScriptValue reason(getScriptState(), v8String(getScriptState()->isolate(), " reason")); |
| 402 buffer->cancelSource(getScriptState(), reason); | 502 buffer->cancelSource(getScriptState(), reason); |
| 403 checkpoint.Call(2); | 503 checkpoint.Call(2); |
| 404 } | 504 } |
| 405 | 505 |
| 406 } // namespace | 506 } // namespace |
| 407 | 507 |
| 408 } // namespace blink | 508 } // namespace blink |
| OLD | NEW |