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