Revert 187554 "Implement IPC::ChannelFactory, a class that accep..."
[chromium-blink-merge.git] / remoting / base / stoppable.cc
blob99acba4c06d6cbecd32db96df5838572d11669cb
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "remoting/base/stoppable.h"
7 #include "base/message_loop.h"
8 #include "base/single_thread_task_runner.h"
10 namespace remoting {
12 Stoppable::Stoppable(
13 scoped_refptr<base::SingleThreadTaskRunner> task_runner,
14 const base::Closure& stopped_callback)
15 : state_(kRunning),
16 stopped_callback_(stopped_callback),
17 task_runner_(task_runner) {
20 Stoppable::~Stoppable() {
21 CHECK_EQ(state_, kStopped);
24 void Stoppable::Stop() {
25 DCHECK(task_runner_->BelongsToCurrentThread());
27 if (state_ == kRunning) {
28 state_ = kStopping;
31 // DoStop() can be called multiple times.
32 DoStop();
35 void Stoppable::CompleteStopping() {
36 DCHECK(task_runner_->BelongsToCurrentThread());
37 DCHECK_EQ(state_, kStopping);
39 state_ = kStopped;
40 task_runner_->PostTask(FROM_HERE, stopped_callback_);
43 } // namespace remoting