| 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 |