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 |