OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/DataConsumerHandleTestUtil.h" | 5 #include "modules/fetch/DataConsumerHandleTestUtil.h" |
6 | 6 |
7 #include "bindings/core/v8/DOMWrapperWorld.h" | 7 #include "bindings/core/v8/DOMWrapperWorld.h" |
8 #include "wtf/PtrUtil.h" | |
9 #include <memory> | |
10 | 8 |
11 namespace blink { | 9 namespace blink { |
12 | 10 |
13 DataConsumerHandleTestUtil::Thread::Thread(const char* name, InitializationPolic
y initializationPolicy) | 11 DataConsumerHandleTestUtil::Thread::Thread(const char* name, InitializationPolic
y initializationPolicy) |
14 : m_thread(WebThreadSupportingGC::create(name)) | 12 : m_thread(WebThreadSupportingGC::create(name)) |
15 , m_initializationPolicy(initializationPolicy) | 13 , m_initializationPolicy(initializationPolicy) |
16 , m_waitableEvent(wrapUnique(new WaitableEvent())) | 14 , m_waitableEvent(adoptPtr(new WaitableEvent())) |
17 { | 15 { |
18 m_thread->postTask(BLINK_FROM_HERE, threadSafeBind(&Thread::initialize, Allo
wCrossThreadAccess(this))); | 16 m_thread->postTask(BLINK_FROM_HERE, threadSafeBind(&Thread::initialize, Allo
wCrossThreadAccess(this))); |
19 m_waitableEvent->wait(); | 17 m_waitableEvent->wait(); |
20 } | 18 } |
21 | 19 |
22 DataConsumerHandleTestUtil::Thread::~Thread() | 20 DataConsumerHandleTestUtil::Thread::~Thread() |
23 { | 21 { |
24 m_thread->postTask(BLINK_FROM_HERE, threadSafeBind(&Thread::shutdown, AllowC
rossThreadAccess(this))); | 22 m_thread->postTask(BLINK_FROM_HERE, threadSafeBind(&Thread::shutdown, AllowC
rossThreadAccess(this))); |
25 m_waitableEvent->wait(); | 23 m_waitableEvent->wait(); |
26 } | 24 } |
27 | 25 |
28 void DataConsumerHandleTestUtil::Thread::initialize() | 26 void DataConsumerHandleTestUtil::Thread::initialize() |
29 { | 27 { |
30 if (m_initializationPolicy >= ScriptExecution) { | 28 if (m_initializationPolicy >= ScriptExecution) { |
31 m_isolateHolder = wrapUnique(new gin::IsolateHolder()); | 29 m_isolateHolder = adoptPtr(new gin::IsolateHolder()); |
32 isolate()->Enter(); | 30 isolate()->Enter(); |
33 } | 31 } |
34 m_thread->initialize(); | 32 m_thread->initialize(); |
35 if (m_initializationPolicy >= ScriptExecution) { | 33 if (m_initializationPolicy >= ScriptExecution) { |
36 v8::HandleScope handleScope(isolate()); | 34 v8::HandleScope handleScope(isolate()); |
37 m_scriptState = ScriptState::create(v8::Context::New(isolate()), DOMWrap
perWorld::create(isolate())); | 35 m_scriptState = ScriptState::create(v8::Context::New(isolate()), DOMWrap
perWorld::create(isolate())); |
38 } | 36 } |
39 if (m_initializationPolicy >= WithExecutionContext) { | 37 if (m_initializationPolicy >= WithExecutionContext) { |
40 m_executionContext = new NullExecutionContext(); | 38 m_executionContext = new NullExecutionContext(); |
41 } | 39 } |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
160 consume(readSize); | 158 consume(readSize); |
161 return Ok; | 159 return Ok; |
162 } | 160 } |
163 | 161 |
164 DataConsumerHandleTestUtil::ReplayingHandle::Context::Context() | 162 DataConsumerHandleTestUtil::ReplayingHandle::Context::Context() |
165 : m_offset(0) | 163 : m_offset(0) |
166 , m_readerThread(nullptr) | 164 , m_readerThread(nullptr) |
167 , m_client(nullptr) | 165 , m_client(nullptr) |
168 , m_result(ShouldWait) | 166 , m_result(ShouldWait) |
169 , m_isHandleAttached(true) | 167 , m_isHandleAttached(true) |
170 , m_detached(wrapUnique(new WaitableEvent())) | 168 , m_detached(adoptPtr(new WaitableEvent())) |
171 { | 169 { |
172 } | 170 } |
173 | 171 |
174 const DataConsumerHandleTestUtil::Command& DataConsumerHandleTestUtil::Replaying
Handle::Context::top() | 172 const DataConsumerHandleTestUtil::Command& DataConsumerHandleTestUtil::Replaying
Handle::Context::top() |
175 { | 173 { |
176 ASSERT(!isEmpty()); | 174 ASSERT(!isEmpty()); |
177 return m_commands.first(); | 175 return m_commands.first(); |
178 } | 176 } |
179 | 177 |
180 void DataConsumerHandleTestUtil::ReplayingHandle::Context::consume(size_t size) | 178 void DataConsumerHandleTestUtil::ReplayingHandle::Context::consume(size_t size) |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
224 WebDataConsumerHandle::Reader* DataConsumerHandleTestUtil::ReplayingHandle::obta
inReaderInternal(Client* client) | 222 WebDataConsumerHandle::Reader* DataConsumerHandleTestUtil::ReplayingHandle::obta
inReaderInternal(Client* client) |
225 { | 223 { |
226 return new ReaderImpl(m_context, client); | 224 return new ReaderImpl(m_context, client); |
227 } | 225 } |
228 | 226 |
229 void DataConsumerHandleTestUtil::ReplayingHandle::add(const Command& command) | 227 void DataConsumerHandleTestUtil::ReplayingHandle::add(const Command& command) |
230 { | 228 { |
231 m_context->add(command); | 229 m_context->add(command); |
232 } | 230 } |
233 | 231 |
234 DataConsumerHandleTestUtil::HandleReader::HandleReader(std::unique_ptr<WebDataCo
nsumerHandle> handle, std::unique_ptr<OnFinishedReading> onFinishedReading) | 232 DataConsumerHandleTestUtil::HandleReader::HandleReader(PassOwnPtr<WebDataConsume
rHandle> handle, std::unique_ptr<OnFinishedReading> onFinishedReading) |
235 : m_reader(handle->obtainReader(this)) | 233 : m_reader(handle->obtainReader(this)) |
236 , m_onFinishedReading(std::move(onFinishedReading)) | 234 , m_onFinishedReading(std::move(onFinishedReading)) |
237 { | 235 { |
238 } | 236 } |
239 | 237 |
240 void DataConsumerHandleTestUtil::HandleReader::didGetReadable() | 238 void DataConsumerHandleTestUtil::HandleReader::didGetReadable() |
241 { | 239 { |
242 WebDataConsumerHandle::Result r = WebDataConsumerHandle::UnexpectedError; | 240 WebDataConsumerHandle::Result r = WebDataConsumerHandle::UnexpectedError; |
243 char buffer[3]; | 241 char buffer[3]; |
244 while (true) { | 242 while (true) { |
245 size_t size; | 243 size_t size; |
246 r = m_reader->read(buffer, sizeof(buffer), WebDataConsumerHandle::FlagNo
ne, &size); | 244 r = m_reader->read(buffer, sizeof(buffer), WebDataConsumerHandle::FlagNo
ne, &size); |
247 if (r == WebDataConsumerHandle::ShouldWait) | 245 if (r == WebDataConsumerHandle::ShouldWait) |
248 return; | 246 return; |
249 if (r != WebDataConsumerHandle::Ok) | 247 if (r != WebDataConsumerHandle::Ok) |
250 break; | 248 break; |
251 m_data.append(buffer, size); | 249 m_data.append(buffer, size); |
252 } | 250 } |
253 std::unique_ptr<HandleReadResult> result = wrapUnique(new HandleReadResult(r
, m_data)); | 251 OwnPtr<HandleReadResult> result = adoptPtr(new HandleReadResult(r, m_data)); |
254 m_data.clear(); | 252 m_data.clear(); |
255 Platform::current()->currentThread()->getWebTaskRunner()->postTask(BLINK_FRO
M_HERE, WTF::bind(&HandleReader::runOnFinishedReading, this, passed(std::move(re
sult)))); | 253 Platform::current()->currentThread()->getWebTaskRunner()->postTask(BLINK_FRO
M_HERE, bind(&HandleReader::runOnFinishedReading, this, passed(std::move(result)
))); |
256 m_reader = nullptr; | 254 m_reader = nullptr; |
257 } | 255 } |
258 | 256 |
259 void DataConsumerHandleTestUtil::HandleReader::runOnFinishedReading(std::unique_
ptr<HandleReadResult> result) | 257 void DataConsumerHandleTestUtil::HandleReader::runOnFinishedReading(PassOwnPtr<H
andleReadResult> result) |
260 { | 258 { |
261 ASSERT(m_onFinishedReading); | 259 ASSERT(m_onFinishedReading); |
262 std::unique_ptr<OnFinishedReading> onFinishedReading(std::move(m_onFinishedR
eading)); | 260 std::unique_ptr<OnFinishedReading> onFinishedReading(std::move(m_onFinishedR
eading)); |
263 (*onFinishedReading)(std::move(result)); | 261 (*onFinishedReading)(std::move(result)); |
264 } | 262 } |
265 | 263 |
266 DataConsumerHandleTestUtil::HandleTwoPhaseReader::HandleTwoPhaseReader(std::uniq
ue_ptr<WebDataConsumerHandle> handle, std::unique_ptr<OnFinishedReading> onFinis
hedReading) | 264 DataConsumerHandleTestUtil::HandleTwoPhaseReader::HandleTwoPhaseReader(PassOwnPt
r<WebDataConsumerHandle> handle, std::unique_ptr<OnFinishedReading> onFinishedRe
ading) |
267 : m_reader(handle->obtainReader(this)) | 265 : m_reader(handle->obtainReader(this)) |
268 , m_onFinishedReading(std::move(onFinishedReading)) | 266 , m_onFinishedReading(std::move(onFinishedReading)) |
269 { | 267 { |
270 } | 268 } |
271 | 269 |
272 void DataConsumerHandleTestUtil::HandleTwoPhaseReader::didGetReadable() | 270 void DataConsumerHandleTestUtil::HandleTwoPhaseReader::didGetReadable() |
273 { | 271 { |
274 WebDataConsumerHandle::Result r = WebDataConsumerHandle::UnexpectedError; | 272 WebDataConsumerHandle::Result r = WebDataConsumerHandle::UnexpectedError; |
275 while (true) { | 273 while (true) { |
276 const void* buffer = nullptr; | 274 const void* buffer = nullptr; |
277 size_t size; | 275 size_t size; |
278 r = m_reader->beginRead(&buffer, WebDataConsumerHandle::FlagNone, &size)
; | 276 r = m_reader->beginRead(&buffer, WebDataConsumerHandle::FlagNone, &size)
; |
279 if (r == WebDataConsumerHandle::ShouldWait) | 277 if (r == WebDataConsumerHandle::ShouldWait) |
280 return; | 278 return; |
281 if (r != WebDataConsumerHandle::Ok) | 279 if (r != WebDataConsumerHandle::Ok) |
282 break; | 280 break; |
283 // Read smaller than available in order to test |endRead|. | 281 // Read smaller than available in order to test |endRead|. |
284 size_t readSize = std::min(size, std::max(size * 2 / 3, static_cast<size
_t>(1))); | 282 size_t readSize = std::min(size, std::max(size * 2 / 3, static_cast<size
_t>(1))); |
285 m_data.append(static_cast<const char*>(buffer), readSize); | 283 m_data.append(static_cast<const char*>(buffer), readSize); |
286 m_reader->endRead(readSize); | 284 m_reader->endRead(readSize); |
287 } | 285 } |
288 std::unique_ptr<HandleReadResult> result = wrapUnique(new HandleReadResult(r
, m_data)); | 286 OwnPtr<HandleReadResult> result = adoptPtr(new HandleReadResult(r, m_data)); |
289 m_data.clear(); | 287 m_data.clear(); |
290 Platform::current()->currentThread()->getWebTaskRunner()->postTask(BLINK_FRO
M_HERE, WTF::bind(&HandleTwoPhaseReader::runOnFinishedReading, this, passed(std:
:move(result)))); | 288 Platform::current()->currentThread()->getWebTaskRunner()->postTask(BLINK_FRO
M_HERE, bind(&HandleTwoPhaseReader::runOnFinishedReading, this, passed(std::move
(result)))); |
291 m_reader = nullptr; | 289 m_reader = nullptr; |
292 } | 290 } |
293 | 291 |
294 void DataConsumerHandleTestUtil::HandleTwoPhaseReader::runOnFinishedReading(std:
:unique_ptr<HandleReadResult> result) | 292 void DataConsumerHandleTestUtil::HandleTwoPhaseReader::runOnFinishedReading(Pass
OwnPtr<HandleReadResult> result) |
295 { | 293 { |
296 ASSERT(m_onFinishedReading); | 294 ASSERT(m_onFinishedReading); |
297 std::unique_ptr<OnFinishedReading> onFinishedReading(std::move(m_onFinishedR
eading)); | 295 std::unique_ptr<OnFinishedReading> onFinishedReading(std::move(m_onFinishedR
eading)); |
298 (*onFinishedReading)(std::move(result)); | 296 (*onFinishedReading)(std::move(result)); |
299 } | 297 } |
300 | 298 |
301 } // namespace blink | 299 } // namespace blink |
OLD | NEW |