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 |