|  | // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "base/test/sequenced_worker_pool_owner.h" | 
|  |  | 
|  | #include "base/location.h" | 
|  | #include "base/message_loop/message_loop.h" | 
|  |  | 
|  | namespace base { | 
|  |  | 
|  | SequencedWorkerPoolOwner::SequencedWorkerPoolOwner( | 
|  | size_t max_threads, | 
|  | const std::string& thread_name_prefix) | 
|  | : constructor_message_loop_(MessageLoop::current()), | 
|  | pool_(new SequencedWorkerPool(max_threads, thread_name_prefix, this)), | 
|  | has_work_call_count_(0) {} | 
|  |  | 
|  | SequencedWorkerPoolOwner::~SequencedWorkerPoolOwner() { | 
|  | pool_ = NULL; | 
|  | MessageLoop::current()->Run(); | 
|  | } | 
|  |  | 
|  | const scoped_refptr<SequencedWorkerPool>& SequencedWorkerPoolOwner::pool() { | 
|  | return pool_; | 
|  | } | 
|  |  | 
|  | void SequencedWorkerPoolOwner::SetWillWaitForShutdownCallback( | 
|  | const Closure& callback) { | 
|  | will_wait_for_shutdown_callback_ = callback; | 
|  | } | 
|  |  | 
|  | int SequencedWorkerPoolOwner::has_work_call_count() const { | 
|  | AutoLock lock(has_work_lock_); | 
|  | return has_work_call_count_; | 
|  | } | 
|  |  | 
|  | void SequencedWorkerPoolOwner::OnHasWork() { | 
|  | AutoLock lock(has_work_lock_); | 
|  | ++has_work_call_count_; | 
|  | } | 
|  |  | 
|  | void SequencedWorkerPoolOwner::WillWaitForShutdown() { | 
|  | if (!will_wait_for_shutdown_callback_.is_null()) { | 
|  | will_wait_for_shutdown_callback_.Run(); | 
|  | } | 
|  | } | 
|  |  | 
|  | void SequencedWorkerPoolOwner::OnDestruct() { | 
|  | constructor_message_loop_->PostTask( | 
|  | FROM_HERE, | 
|  | constructor_message_loop_->QuitWhenIdleClosure()); | 
|  | } | 
|  |  | 
|  | }  // namespace base |