| 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 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 50 ScriptState* getScriptState() { return ScriptState::forMainWorld(m_page->doc
ument().frame()); } | 50 ScriptState* getScriptState() { return ScriptState::forMainWorld(m_page->doc
ument().frame()); } |
| 51 ExecutionContext* getExecutionContext() { return &m_page->document(); } | 51 ExecutionContext* getExecutionContext() { return &m_page->document(); } |
| 52 | 52 |
| 53 OwnPtr<DummyPageHolder> m_page; | 53 OwnPtr<DummyPageHolder> m_page; |
| 54 }; | 54 }; |
| 55 | 55 |
| 56 TEST_F(BodyStreamBufferTest, ReleaseHandle) | 56 TEST_F(BodyStreamBufferTest, ReleaseHandle) |
| 57 { | 57 { |
| 58 OwnPtr<FetchDataConsumerHandle> handle = createFetchDataConsumerHandleFromWe
bHandle(createWaitingDataConsumerHandle()); | 58 OwnPtr<FetchDataConsumerHandle> handle = createFetchDataConsumerHandleFromWe
bHandle(createWaitingDataConsumerHandle()); |
| 59 FetchDataConsumerHandle* rawHandle = handle.get(); | 59 FetchDataConsumerHandle* rawHandle = handle.get(); |
| 60 BodyStreamBuffer* buffer = new BodyStreamBuffer(handle.release()); | 60 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), handle.rel
ease()); |
| 61 | 61 |
| 62 EXPECT_FALSE(buffer->hasPendingActivity()); | 62 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 63 EXPECT_FALSE(buffer->isStreamLocked()); | 63 EXPECT_FALSE(buffer->isStreamLocked()); |
| 64 EXPECT_FALSE(buffer->isStreamDisturbed()); | 64 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 65 EXPECT_TRUE(buffer->isStreamReadable()); | 65 EXPECT_TRUE(buffer->isStreamReadable()); |
| 66 | 66 |
| 67 OwnPtr<FetchDataConsumerHandle> handle2 = buffer->releaseHandle(getExecution
Context()); | 67 OwnPtr<FetchDataConsumerHandle> handle2 = buffer->releaseHandle(); |
| 68 | 68 |
| 69 ASSERT_EQ(rawHandle, handle2.get()); | 69 ASSERT_EQ(rawHandle, handle2.get()); |
| 70 EXPECT_TRUE(buffer->isStreamLocked()); | 70 EXPECT_TRUE(buffer->isStreamLocked()); |
| 71 EXPECT_TRUE(buffer->isStreamDisturbed()); | 71 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 72 EXPECT_TRUE(buffer->isStreamClosed()); | 72 EXPECT_TRUE(buffer->isStreamClosed()); |
| 73 } | 73 } |
| 74 | 74 |
| 75 TEST_F(BodyStreamBufferTest, DrainAsBlobDataHandle) | 75 TEST_F(BodyStreamBufferTest, DrainAsBlobDataHandle) |
| 76 { | 76 { |
| 77 OwnPtr<BlobData> data = BlobData::create(); | 77 OwnPtr<BlobData> data = BlobData::create(); |
| 78 data->appendText("hello", false); | 78 data->appendText("hello", false); |
| 79 auto size = data->length(); | 79 auto size = data->length(); |
| 80 RefPtr<BlobDataHandle> blobDataHandle = BlobDataHandle::create(data.release(
), size); | 80 RefPtr<BlobDataHandle> blobDataHandle = BlobDataHandle::create(data.release(
), size); |
| 81 BodyStreamBuffer* buffer = new BodyStreamBuffer(FetchBlobDataConsumerHandle:
:create(getExecutionContext(), blobDataHandle, new FakeLoaderFactory)); | 81 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), FetchBlobD
ataConsumerHandle::create(getExecutionContext(), blobDataHandle, new FakeLoaderF
actory)); |
| 82 | 82 |
| 83 EXPECT_FALSE(buffer->isStreamLocked()); | 83 EXPECT_FALSE(buffer->isStreamLocked()); |
| 84 EXPECT_FALSE(buffer->isStreamDisturbed()); | 84 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 85 EXPECT_FALSE(buffer->hasPendingActivity()); | 85 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 86 RefPtr<BlobDataHandle> outputBlobDataHandle = buffer->drainAsBlobDataHandle(
getExecutionContext(), FetchDataConsumerHandle::Reader::AllowBlobWithInvalidSize
); | 86 RefPtr<BlobDataHandle> outputBlobDataHandle = buffer->drainAsBlobDataHandle(
FetchDataConsumerHandle::Reader::AllowBlobWithInvalidSize); |
| 87 | 87 |
| 88 EXPECT_TRUE(buffer->isStreamLocked()); | 88 EXPECT_TRUE(buffer->isStreamLocked()); |
| 89 EXPECT_TRUE(buffer->isStreamDisturbed()); | 89 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 90 EXPECT_FALSE(buffer->hasPendingActivity()); | 90 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 91 EXPECT_EQ(blobDataHandle, outputBlobDataHandle); | 91 EXPECT_EQ(blobDataHandle, outputBlobDataHandle); |
| 92 } | 92 } |
| 93 | 93 |
| 94 TEST_F(BodyStreamBufferTest, DrainAsBlobDataHandleReturnsNull) | 94 TEST_F(BodyStreamBufferTest, DrainAsBlobDataHandleReturnsNull) |
| 95 { | 95 { |
| 96 // This handle is not drainable. | 96 // This handle is not drainable. |
| 97 OwnPtr<FetchDataConsumerHandle> handle = createFetchDataConsumerHandleFromWe
bHandle(createWaitingDataConsumerHandle()); | 97 OwnPtr<FetchDataConsumerHandle> handle = createFetchDataConsumerHandleFromWe
bHandle(createWaitingDataConsumerHandle()); |
| 98 BodyStreamBuffer* buffer = new BodyStreamBuffer(handle.release()); | 98 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), handle.rel
ease()); |
| 99 | 99 |
| 100 EXPECT_FALSE(buffer->isStreamLocked()); | 100 EXPECT_FALSE(buffer->isStreamLocked()); |
| 101 EXPECT_FALSE(buffer->isStreamDisturbed()); | 101 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 102 EXPECT_FALSE(buffer->hasPendingActivity()); | 102 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 103 | 103 |
| 104 EXPECT_FALSE(buffer->drainAsBlobDataHandle(getExecutionContext(), FetchDataC
onsumerHandle::Reader::AllowBlobWithInvalidSize)); | 104 EXPECT_FALSE(buffer->drainAsBlobDataHandle(FetchDataConsumerHandle::Reader::
AllowBlobWithInvalidSize)); |
| 105 | 105 |
| 106 EXPECT_FALSE(buffer->isStreamLocked()); | 106 EXPECT_FALSE(buffer->isStreamLocked()); |
| 107 EXPECT_FALSE(buffer->isStreamDisturbed()); | 107 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 108 EXPECT_FALSE(buffer->hasPendingActivity()); | 108 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 109 } | 109 } |
| 110 | 110 |
| 111 TEST_F(BodyStreamBufferTest, DrainAsFormData) | 111 TEST_F(BodyStreamBufferTest, DrainAsFormData) |
| 112 { | 112 { |
| 113 FormData* data = FormData::create(UTF8Encoding()); | 113 FormData* data = FormData::create(UTF8Encoding()); |
| 114 data->append("name1", "value1"); | 114 data->append("name1", "value1"); |
| 115 data->append("name2", "value2"); | 115 data->append("name2", "value2"); |
| 116 RefPtr<EncodedFormData> inputFormData = data->encodeMultiPartFormData(); | 116 RefPtr<EncodedFormData> inputFormData = data->encodeMultiPartFormData(); |
| 117 | 117 |
| 118 BodyStreamBuffer* buffer = new BodyStreamBuffer(FetchFormDataConsumerHandle:
:create(getExecutionContext(), inputFormData)); | 118 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), FetchFormD
ataConsumerHandle::create(getExecutionContext(), inputFormData)); |
| 119 | 119 |
| 120 EXPECT_FALSE(buffer->isStreamLocked()); | 120 EXPECT_FALSE(buffer->isStreamLocked()); |
| 121 EXPECT_FALSE(buffer->isStreamDisturbed()); | 121 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 122 EXPECT_FALSE(buffer->hasPendingActivity()); | 122 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 123 RefPtr<EncodedFormData> outputFormData = buffer->drainAsFormData(getExecutio
nContext()); | 123 RefPtr<EncodedFormData> outputFormData = buffer->drainAsFormData(); |
| 124 | 124 |
| 125 EXPECT_TRUE(buffer->isStreamLocked()); | 125 EXPECT_TRUE(buffer->isStreamLocked()); |
| 126 EXPECT_TRUE(buffer->isStreamDisturbed()); | 126 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 127 EXPECT_FALSE(buffer->hasPendingActivity()); | 127 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 128 EXPECT_EQ(outputFormData->flattenToString(), inputFormData->flattenToString(
)); | 128 EXPECT_EQ(outputFormData->flattenToString(), inputFormData->flattenToString(
)); |
| 129 } | 129 } |
| 130 | 130 |
| 131 TEST_F(BodyStreamBufferTest, DrainAsFormDataReturnsNull) | 131 TEST_F(BodyStreamBufferTest, DrainAsFormDataReturnsNull) |
| 132 { | 132 { |
| 133 // This handle is not drainable. | 133 // This handle is not drainable. |
| 134 OwnPtr<FetchDataConsumerHandle> handle = createFetchDataConsumerHandleFromWe
bHandle(createWaitingDataConsumerHandle()); | 134 OwnPtr<FetchDataConsumerHandle> handle = createFetchDataConsumerHandleFromWe
bHandle(createWaitingDataConsumerHandle()); |
| 135 BodyStreamBuffer* buffer = new BodyStreamBuffer(handle.release()); | 135 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), handle.rel
ease()); |
| 136 | 136 |
| 137 EXPECT_FALSE(buffer->isStreamLocked()); | 137 EXPECT_FALSE(buffer->isStreamLocked()); |
| 138 EXPECT_FALSE(buffer->isStreamDisturbed()); | 138 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 139 EXPECT_FALSE(buffer->hasPendingActivity()); | 139 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 140 | 140 |
| 141 EXPECT_FALSE(buffer->drainAsFormData(getExecutionContext())); | 141 EXPECT_FALSE(buffer->drainAsFormData()); |
| 142 | 142 |
| 143 EXPECT_FALSE(buffer->isStreamLocked()); | 143 EXPECT_FALSE(buffer->isStreamLocked()); |
| 144 EXPECT_FALSE(buffer->isStreamDisturbed()); | 144 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 145 EXPECT_FALSE(buffer->hasPendingActivity()); | 145 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 146 } | 146 } |
| 147 | 147 |
| 148 TEST_F(BodyStreamBufferTest, LoadBodyStreamBufferAsArrayBuffer) | 148 TEST_F(BodyStreamBufferTest, LoadBodyStreamBufferAsArrayBuffer) |
| 149 { | 149 { |
| 150 Checkpoint checkpoint; | 150 Checkpoint checkpoint; |
| 151 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); | 151 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); |
| 152 DOMArrayBuffer* arrayBuffer = nullptr; | 152 DOMArrayBuffer* arrayBuffer = nullptr; |
| 153 | 153 |
| 154 InSequence s; | 154 InSequence s; |
| 155 EXPECT_CALL(checkpoint, Call(1)); | 155 EXPECT_CALL(checkpoint, Call(1)); |
| 156 EXPECT_CALL(*client, didFetchDataLoadedArrayBufferMock(_)).WillOnce(SaveArg<
0>(&arrayBuffer)); | 156 EXPECT_CALL(*client, didFetchDataLoadedArrayBufferMock(_)).WillOnce(SaveArg<
0>(&arrayBuffer)); |
| 157 EXPECT_CALL(checkpoint, Call(2)); | 157 EXPECT_CALL(checkpoint, Call(2)); |
| 158 | 158 |
| 159 OwnPtr<ReplayingHandle> handle = ReplayingHandle::create(); | 159 OwnPtr<ReplayingHandle> handle = ReplayingHandle::create(); |
| 160 handle->add(Command(Command::Data, "hello")); | 160 handle->add(Command(Command::Data, "hello")); |
| 161 handle->add(Command(Command::Done)); | 161 handle->add(Command(Command::Done)); |
| 162 BodyStreamBuffer* buffer = new BodyStreamBuffer(createFetchDataConsumerHandl
eFromWebHandle(handle.release())); | 162 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), createFetc
hDataConsumerHandleFromWebHandle(handle.release())); |
| 163 buffer->startLoading(getExecutionContext(), FetchDataLoader::createLoaderAsA
rrayBuffer(), client); | 163 buffer->startLoading(FetchDataLoader::createLoaderAsArrayBuffer(), client); |
| 164 | 164 |
| 165 EXPECT_TRUE(buffer->isStreamLocked()); | 165 EXPECT_TRUE(buffer->isStreamLocked()); |
| 166 EXPECT_TRUE(buffer->isStreamDisturbed()); | 166 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 167 EXPECT_TRUE(buffer->hasPendingActivity()); | 167 EXPECT_TRUE(buffer->hasPendingActivity()); |
| 168 | 168 |
| 169 checkpoint.Call(1); | 169 checkpoint.Call(1); |
| 170 testing::runPendingTasks(); | 170 testing::runPendingTasks(); |
| 171 checkpoint.Call(2); | 171 checkpoint.Call(2); |
| 172 | 172 |
| 173 EXPECT_TRUE(buffer->isStreamLocked()); | 173 EXPECT_TRUE(buffer->isStreamLocked()); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 184 RefPtr<BlobDataHandle> blobDataHandle; | 184 RefPtr<BlobDataHandle> blobDataHandle; |
| 185 | 185 |
| 186 InSequence s; | 186 InSequence s; |
| 187 EXPECT_CALL(checkpoint, Call(1)); | 187 EXPECT_CALL(checkpoint, Call(1)); |
| 188 EXPECT_CALL(*client, didFetchDataLoadedBlobHandleMock(_)).WillOnce(SaveArg<0
>(&blobDataHandle)); | 188 EXPECT_CALL(*client, didFetchDataLoadedBlobHandleMock(_)).WillOnce(SaveArg<0
>(&blobDataHandle)); |
| 189 EXPECT_CALL(checkpoint, Call(2)); | 189 EXPECT_CALL(checkpoint, Call(2)); |
| 190 | 190 |
| 191 OwnPtr<ReplayingHandle> handle = ReplayingHandle::create(); | 191 OwnPtr<ReplayingHandle> handle = ReplayingHandle::create(); |
| 192 handle->add(Command(Command::Data, "hello")); | 192 handle->add(Command(Command::Data, "hello")); |
| 193 handle->add(Command(Command::Done)); | 193 handle->add(Command(Command::Done)); |
| 194 BodyStreamBuffer* buffer = new BodyStreamBuffer(createFetchDataConsumerHandl
eFromWebHandle(handle.release())); | 194 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), createFetc
hDataConsumerHandleFromWebHandle(handle.release())); |
| 195 buffer->startLoading(getExecutionContext(), FetchDataLoader::createLoaderAsB
lobHandle("text/plain"), client); | 195 buffer->startLoading(FetchDataLoader::createLoaderAsBlobHandle("text/plain")
, client); |
| 196 | 196 |
| 197 EXPECT_TRUE(buffer->isStreamLocked()); | 197 EXPECT_TRUE(buffer->isStreamLocked()); |
| 198 EXPECT_TRUE(buffer->isStreamDisturbed()); | 198 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 199 EXPECT_TRUE(buffer->hasPendingActivity()); | 199 EXPECT_TRUE(buffer->hasPendingActivity()); |
| 200 | 200 |
| 201 checkpoint.Call(1); | 201 checkpoint.Call(1); |
| 202 testing::runPendingTasks(); | 202 testing::runPendingTasks(); |
| 203 checkpoint.Call(2); | 203 checkpoint.Call(2); |
| 204 | 204 |
| 205 EXPECT_TRUE(buffer->isStreamLocked()); | 205 EXPECT_TRUE(buffer->isStreamLocked()); |
| 206 EXPECT_TRUE(buffer->isStreamDisturbed()); | 206 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 207 EXPECT_FALSE(buffer->hasPendingActivity()); | 207 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 208 EXPECT_EQ(5u, blobDataHandle->size()); | 208 EXPECT_EQ(5u, blobDataHandle->size()); |
| 209 } | 209 } |
| 210 | 210 |
| 211 TEST_F(BodyStreamBufferTest, LoadBodyStreamBufferAsString) | 211 TEST_F(BodyStreamBufferTest, LoadBodyStreamBufferAsString) |
| 212 { | 212 { |
| 213 Checkpoint checkpoint; | 213 Checkpoint checkpoint; |
| 214 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); | 214 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); |
| 215 | 215 |
| 216 InSequence s; | 216 InSequence s; |
| 217 EXPECT_CALL(checkpoint, Call(1)); | 217 EXPECT_CALL(checkpoint, Call(1)); |
| 218 EXPECT_CALL(*client, didFetchDataLoadedString(String("hello"))); | 218 EXPECT_CALL(*client, didFetchDataLoadedString(String("hello"))); |
| 219 EXPECT_CALL(checkpoint, Call(2)); | 219 EXPECT_CALL(checkpoint, Call(2)); |
| 220 | 220 |
| 221 OwnPtr<ReplayingHandle> handle = ReplayingHandle::create(); | 221 OwnPtr<ReplayingHandle> handle = ReplayingHandle::create(); |
| 222 handle->add(Command(Command::Data, "hello")); | 222 handle->add(Command(Command::Data, "hello")); |
| 223 handle->add(Command(Command::Done)); | 223 handle->add(Command(Command::Done)); |
| 224 BodyStreamBuffer* buffer = new BodyStreamBuffer(createFetchDataConsumerHandl
eFromWebHandle(handle.release())); | 224 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), createFetc
hDataConsumerHandleFromWebHandle(handle.release())); |
| 225 buffer->startLoading(getExecutionContext(), FetchDataLoader::createLoaderAsS
tring(), client); | 225 buffer->startLoading(FetchDataLoader::createLoaderAsString(), client); |
| 226 | 226 |
| 227 EXPECT_TRUE(buffer->isStreamLocked()); | 227 EXPECT_TRUE(buffer->isStreamLocked()); |
| 228 EXPECT_TRUE(buffer->isStreamDisturbed()); | 228 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 229 EXPECT_TRUE(buffer->hasPendingActivity()); | 229 EXPECT_TRUE(buffer->hasPendingActivity()); |
| 230 | 230 |
| 231 checkpoint.Call(1); | 231 checkpoint.Call(1); |
| 232 testing::runPendingTasks(); | 232 testing::runPendingTasks(); |
| 233 checkpoint.Call(2); | 233 checkpoint.Call(2); |
| 234 | 234 |
| 235 EXPECT_TRUE(buffer->isStreamLocked()); | 235 EXPECT_TRUE(buffer->isStreamLocked()); |
| 236 EXPECT_TRUE(buffer->isStreamDisturbed()); | 236 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 237 EXPECT_FALSE(buffer->hasPendingActivity()); | 237 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 238 } | 238 } |
| 239 | 239 |
| 240 TEST_F(BodyStreamBufferTest, ReleaseClosedHandle) | 240 TEST_F(BodyStreamBufferTest, ReleaseClosedHandle) |
| 241 { | 241 { |
| 242 BodyStreamBuffer* buffer = new BodyStreamBuffer(createFetchDataConsumerHandl
eFromWebHandle(createDoneDataConsumerHandle())); | 242 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), createFetc
hDataConsumerHandleFromWebHandle(createDoneDataConsumerHandle())); |
| 243 | 243 |
| 244 EXPECT_TRUE(buffer->isStreamReadable()); | 244 EXPECT_TRUE(buffer->isStreamReadable()); |
| 245 testing::runPendingTasks(); | 245 testing::runPendingTasks(); |
| 246 EXPECT_TRUE(buffer->isStreamClosed()); | 246 EXPECT_TRUE(buffer->isStreamClosed()); |
| 247 | 247 |
| 248 EXPECT_FALSE(buffer->isStreamLocked()); | 248 EXPECT_FALSE(buffer->isStreamLocked()); |
| 249 EXPECT_FALSE(buffer->isStreamDisturbed()); | 249 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 250 EXPECT_FALSE(buffer->hasPendingActivity()); | 250 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 251 OwnPtr<FetchDataConsumerHandle> handle = buffer->releaseHandle(getExecutionC
ontext()); | 251 OwnPtr<FetchDataConsumerHandle> handle = buffer->releaseHandle(); |
| 252 | 252 |
| 253 EXPECT_TRUE(handle); | 253 EXPECT_TRUE(handle); |
| 254 EXPECT_TRUE(buffer->isStreamLocked()); | 254 EXPECT_TRUE(buffer->isStreamLocked()); |
| 255 EXPECT_TRUE(buffer->isStreamDisturbed()); | 255 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 256 EXPECT_FALSE(buffer->hasPendingActivity()); | 256 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 257 } | 257 } |
| 258 | 258 |
| 259 TEST_F(BodyStreamBufferTest, LoadClosedHandle) | 259 TEST_F(BodyStreamBufferTest, LoadClosedHandle) |
| 260 { | 260 { |
| 261 Checkpoint checkpoint; | 261 Checkpoint checkpoint; |
| 262 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); | 262 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); |
| 263 | 263 |
| 264 InSequence s; | 264 InSequence s; |
| 265 EXPECT_CALL(checkpoint, Call(1)); | 265 EXPECT_CALL(checkpoint, Call(1)); |
| 266 EXPECT_CALL(*client, didFetchDataLoadedString(String(""))); | 266 EXPECT_CALL(*client, didFetchDataLoadedString(String(""))); |
| 267 EXPECT_CALL(checkpoint, Call(2)); | 267 EXPECT_CALL(checkpoint, Call(2)); |
| 268 | 268 |
| 269 BodyStreamBuffer* buffer = new BodyStreamBuffer(createFetchDataConsumerHandl
eFromWebHandle(createDoneDataConsumerHandle())); | 269 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), createFetc
hDataConsumerHandleFromWebHandle(createDoneDataConsumerHandle())); |
| 270 | 270 |
| 271 EXPECT_TRUE(buffer->isStreamReadable()); | 271 EXPECT_TRUE(buffer->isStreamReadable()); |
| 272 testing::runPendingTasks(); | 272 testing::runPendingTasks(); |
| 273 EXPECT_TRUE(buffer->isStreamClosed()); | 273 EXPECT_TRUE(buffer->isStreamClosed()); |
| 274 | 274 |
| 275 EXPECT_FALSE(buffer->isStreamLocked()); | 275 EXPECT_FALSE(buffer->isStreamLocked()); |
| 276 EXPECT_FALSE(buffer->isStreamDisturbed()); | 276 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 277 EXPECT_FALSE(buffer->hasPendingActivity()); | 277 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 278 | 278 |
| 279 buffer->startLoading(getExecutionContext(), FetchDataLoader::createLoaderAsS
tring(), client); | 279 buffer->startLoading(FetchDataLoader::createLoaderAsString(), client); |
| 280 EXPECT_TRUE(buffer->isStreamLocked()); | 280 EXPECT_TRUE(buffer->isStreamLocked()); |
| 281 EXPECT_TRUE(buffer->isStreamDisturbed()); | 281 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 282 EXPECT_TRUE(buffer->hasPendingActivity()); | 282 EXPECT_TRUE(buffer->hasPendingActivity()); |
| 283 | 283 |
| 284 checkpoint.Call(1); | 284 checkpoint.Call(1); |
| 285 testing::runPendingTasks(); | 285 testing::runPendingTasks(); |
| 286 checkpoint.Call(2); | 286 checkpoint.Call(2); |
| 287 | 287 |
| 288 EXPECT_TRUE(buffer->isStreamLocked()); | 288 EXPECT_TRUE(buffer->isStreamLocked()); |
| 289 EXPECT_TRUE(buffer->isStreamDisturbed()); | 289 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 290 EXPECT_FALSE(buffer->hasPendingActivity()); | 290 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 291 } | 291 } |
| 292 | 292 |
| 293 TEST_F(BodyStreamBufferTest, ReleaseErroredHandle) | 293 TEST_F(BodyStreamBufferTest, ReleaseErroredHandle) |
| 294 { | 294 { |
| 295 BodyStreamBuffer* buffer = new BodyStreamBuffer(createFetchDataConsumerHandl
eFromWebHandle(createUnexpectedErrorDataConsumerHandle())); | 295 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), createFetc
hDataConsumerHandleFromWebHandle(createUnexpectedErrorDataConsumerHandle())); |
| 296 | 296 |
| 297 EXPECT_TRUE(buffer->isStreamReadable()); | 297 EXPECT_TRUE(buffer->isStreamReadable()); |
| 298 testing::runPendingTasks(); | 298 testing::runPendingTasks(); |
| 299 EXPECT_TRUE(buffer->isStreamErrored()); | 299 EXPECT_TRUE(buffer->isStreamErrored()); |
| 300 | 300 |
| 301 EXPECT_FALSE(buffer->isStreamLocked()); | 301 EXPECT_FALSE(buffer->isStreamLocked()); |
| 302 EXPECT_FALSE(buffer->isStreamDisturbed()); | 302 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 303 EXPECT_FALSE(buffer->hasPendingActivity()); | 303 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 304 OwnPtr<FetchDataConsumerHandle> handle = buffer->releaseHandle(getExecutionC
ontext()); | 304 OwnPtr<FetchDataConsumerHandle> handle = buffer->releaseHandle(); |
| 305 EXPECT_TRUE(handle); | 305 EXPECT_TRUE(handle); |
| 306 EXPECT_TRUE(buffer->isStreamLocked()); | 306 EXPECT_TRUE(buffer->isStreamLocked()); |
| 307 EXPECT_TRUE(buffer->isStreamDisturbed()); | 307 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 308 EXPECT_FALSE(buffer->hasPendingActivity()); | 308 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 309 } | 309 } |
| 310 | 310 |
| 311 TEST_F(BodyStreamBufferTest, LoadErroredHandle) | 311 TEST_F(BodyStreamBufferTest, LoadErroredHandle) |
| 312 { | 312 { |
| 313 Checkpoint checkpoint; | 313 Checkpoint checkpoint; |
| 314 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); | 314 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); |
| 315 | 315 |
| 316 InSequence s; | 316 InSequence s; |
| 317 EXPECT_CALL(checkpoint, Call(1)); | 317 EXPECT_CALL(checkpoint, Call(1)); |
| 318 EXPECT_CALL(*client, didFetchDataLoadFailed()); | 318 EXPECT_CALL(*client, didFetchDataLoadFailed()); |
| 319 EXPECT_CALL(checkpoint, Call(2)); | 319 EXPECT_CALL(checkpoint, Call(2)); |
| 320 | 320 |
| 321 BodyStreamBuffer* buffer = new BodyStreamBuffer(createFetchDataConsumerHandl
eFromWebHandle(createUnexpectedErrorDataConsumerHandle())); | 321 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), createFetc
hDataConsumerHandleFromWebHandle(createUnexpectedErrorDataConsumerHandle())); |
| 322 | 322 |
| 323 EXPECT_TRUE(buffer->isStreamReadable()); | 323 EXPECT_TRUE(buffer->isStreamReadable()); |
| 324 testing::runPendingTasks(); | 324 testing::runPendingTasks(); |
| 325 EXPECT_TRUE(buffer->isStreamErrored()); | 325 EXPECT_TRUE(buffer->isStreamErrored()); |
| 326 | 326 |
| 327 EXPECT_FALSE(buffer->isStreamLocked()); | 327 EXPECT_FALSE(buffer->isStreamLocked()); |
| 328 EXPECT_FALSE(buffer->isStreamDisturbed()); | 328 EXPECT_FALSE(buffer->isStreamDisturbed()); |
| 329 EXPECT_FALSE(buffer->hasPendingActivity()); | 329 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 330 buffer->startLoading(getExecutionContext(), FetchDataLoader::createLoaderAsS
tring(), client); | 330 buffer->startLoading(FetchDataLoader::createLoaderAsString(), client); |
| 331 EXPECT_TRUE(buffer->isStreamLocked()); | 331 EXPECT_TRUE(buffer->isStreamLocked()); |
| 332 EXPECT_TRUE(buffer->isStreamDisturbed()); | 332 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 333 EXPECT_TRUE(buffer->hasPendingActivity()); | 333 EXPECT_TRUE(buffer->hasPendingActivity()); |
| 334 | 334 |
| 335 checkpoint.Call(1); | 335 checkpoint.Call(1); |
| 336 testing::runPendingTasks(); | 336 testing::runPendingTasks(); |
| 337 checkpoint.Call(2); | 337 checkpoint.Call(2); |
| 338 | 338 |
| 339 EXPECT_TRUE(buffer->isStreamLocked()); | 339 EXPECT_TRUE(buffer->isStreamLocked()); |
| 340 EXPECT_TRUE(buffer->isStreamDisturbed()); | 340 EXPECT_TRUE(buffer->isStreamDisturbed()); |
| 341 EXPECT_FALSE(buffer->hasPendingActivity()); | 341 EXPECT_FALSE(buffer->hasPendingActivity()); |
| 342 } | 342 } |
| 343 | 343 |
| 344 TEST_F(BodyStreamBufferTest, LoaderShouldBeKeptAliveByBodyStreamBuffer) | 344 TEST_F(BodyStreamBufferTest, LoaderShouldBeKeptAliveByBodyStreamBuffer) |
| 345 { | 345 { |
| 346 Checkpoint checkpoint; | 346 Checkpoint checkpoint; |
| 347 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); | 347 MockFetchDataLoaderClient* client = MockFetchDataLoaderClient::create(); |
| 348 | 348 |
| 349 InSequence s; | 349 InSequence s; |
| 350 EXPECT_CALL(checkpoint, Call(1)); | 350 EXPECT_CALL(checkpoint, Call(1)); |
| 351 EXPECT_CALL(*client, didFetchDataLoadedString(String("hello"))); | 351 EXPECT_CALL(*client, didFetchDataLoadedString(String("hello"))); |
| 352 EXPECT_CALL(checkpoint, Call(2)); | 352 EXPECT_CALL(checkpoint, Call(2)); |
| 353 | 353 |
| 354 OwnPtr<ReplayingHandle> handle = ReplayingHandle::create(); | 354 OwnPtr<ReplayingHandle> handle = ReplayingHandle::create(); |
| 355 handle->add(Command(Command::Data, "hello")); | 355 handle->add(Command(Command::Data, "hello")); |
| 356 handle->add(Command(Command::Done)); | 356 handle->add(Command(Command::Done)); |
| 357 Persistent<BodyStreamBuffer> buffer = new BodyStreamBuffer(createFetchDataCo
nsumerHandleFromWebHandle(handle.release())); | 357 Persistent<BodyStreamBuffer> buffer = new BodyStreamBuffer(getScriptState(),
createFetchDataConsumerHandleFromWebHandle(handle.release())); |
| 358 buffer->startLoading(getExecutionContext(), FetchDataLoader::createLoaderAsS
tring(), client); | 358 buffer->startLoading(FetchDataLoader::createLoaderAsString(), client); |
| 359 | 359 |
| 360 ThreadHeap::collectAllGarbage(); | 360 ThreadHeap::collectAllGarbage(); |
| 361 checkpoint.Call(1); | 361 checkpoint.Call(1); |
| 362 testing::runPendingTasks(); | 362 testing::runPendingTasks(); |
| 363 checkpoint.Call(2); | 363 checkpoint.Call(2); |
| 364 } | 364 } |
| 365 | 365 |
| 366 // TODO(hiroshige): Merge this class into MockFetchDataConsumerHandle. | 366 // TODO(hiroshige): Merge this class into MockFetchDataConsumerHandle. |
| 367 class MockFetchDataConsumerHandleWithMockDestructor : public DataConsumerHandleT
estUtil::MockFetchDataConsumerHandle { | 367 class MockFetchDataConsumerHandleWithMockDestructor : public DataConsumerHandleT
estUtil::MockFetchDataConsumerHandle { |
| 368 public: | 368 public: |
| (...skipping 20 matching lines...) Expand all Loading... |
| 389 | 389 |
| 390 EXPECT_CALL(*handle, obtainReaderInternal(_)).WillOnce(::testing::Return(rea
der.get())); | 390 EXPECT_CALL(*handle, obtainReaderInternal(_)).WillOnce(::testing::Return(rea
der.get())); |
| 391 EXPECT_CALL(checkpoint, Call(1)); | 391 EXPECT_CALL(checkpoint, Call(1)); |
| 392 EXPECT_CALL(*reader, destruct()); | 392 EXPECT_CALL(*reader, destruct()); |
| 393 EXPECT_CALL(*handle, destruct()); | 393 EXPECT_CALL(*handle, destruct()); |
| 394 EXPECT_CALL(checkpoint, Call(2)); | 394 EXPECT_CALL(checkpoint, Call(2)); |
| 395 | 395 |
| 396 // |reader| is adopted by |obtainReader|. | 396 // |reader| is adopted by |obtainReader|. |
| 397 ASSERT_TRUE(reader.leakPtr()); | 397 ASSERT_TRUE(reader.leakPtr()); |
| 398 | 398 |
| 399 BodyStreamBuffer* buffer = new BodyStreamBuffer(handle.release()); | 399 BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), handle.rel
ease()); |
| 400 checkpoint.Call(1); | 400 checkpoint.Call(1); |
| 401 ScriptValue reason(getScriptState(), v8String(getScriptState()->isolate(), "
reason")); | 401 ScriptValue reason(getScriptState(), v8String(getScriptState()->isolate(), "
reason")); |
| 402 buffer->cancelSource(getScriptState(), reason); | 402 buffer->cancelSource(getScriptState(), reason); |
| 403 checkpoint.Call(2); | 403 checkpoint.Call(2); |
| 404 } | 404 } |
| 405 | 405 |
| 406 } // namespace | 406 } // namespace |
| 407 | 407 |
| 408 } // namespace blink | 408 } // namespace blink |
| OLD | NEW |