diff options
Diffstat (limited to 'remoting/base/stoppable.cc')
-rw-r--r-- | remoting/base/stoppable.cc | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/remoting/base/stoppable.cc b/remoting/base/stoppable.cc new file mode 100644 index 0000000..88b3c95 --- /dev/null +++ b/remoting/base/stoppable.cc @@ -0,0 +1,41 @@ +// 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 "remoting/base/stoppable.h" + +#include "base/message_loop.h" +#include "base/single_thread_task_runner.h" + +namespace remoting { + +Stoppable::Stoppable( + scoped_refptr<base::SingleThreadTaskRunner> task_runner, + const base::Closure& stopped_callback) + : state_(kRunning), + stopped_callback_(stopped_callback), + task_runner_(task_runner) { +} + +Stoppable::~Stoppable() { + DCHECK_EQ(state_, kStopped); +} + +void Stoppable::Stop() { + DCHECK(task_runner_->BelongsToCurrentThread()); + + if (state_ == kRunning) { + state_ = kStopping; + DoStop(); + } +} + +void Stoppable::CompleteStopping() { + DCHECK(task_runner_->BelongsToCurrentThread()); + DCHECK_EQ(state_, kStopping); + + state_ = kStopped; + task_runner_->PostTask(FROM_HERE, stopped_callback_); +} + +} // namespace remoting |