OLD | NEW |
---|---|
(Empty) | |
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. | |
4 | |
5 #ifndef REMOTING_BASE_STOPPABLE_H_ | |
6 #define REMOTING_BASE_STOPPABLE_H_ | |
7 | |
8 #include "base/basictypes.h" | |
9 #include "base/callback.h" | |
10 #include "base/memory/ref_counted.h" | |
11 | |
12 namespace base { | |
13 class SingleThreadTaskRunner; | |
14 } // namespace base | |
15 | |
16 namespace remoting { | |
17 | |
18 // A helper base class that implements asynchronous shutdown on a specific | |
19 // thread. | |
20 class Stoppable { | |
21 public: | |
22 // Constructs an object and stores the callback to be posted to |task_runner| | |
23 // once the object has been shutdown completely. | |
24 explicit Stoppable(scoped_refptr<base::SingleThreadTaskRunner> task_runner, | |
Wez
2012/08/18 01:08:29
This doesn't need to be explicit, does it?
alexeypa (please no reviews)
2012/08/18 01:25:35
Yes, you are right. It should not be explicit. I'l
| |
25 const base::Closure& stopped_callback); | |
26 virtual ~Stoppable(); | |
27 | |
28 // Initiates shutdown. It can be called by both the owner of the object and | |
29 // the object itself resulting in the same shutdown sequence. | |
30 void Stop(); | |
31 | |
32 protected: | |
33 // Called by derived classes to notify about shutdown completion. Posts | |
34 // the completion task on |task_runner_| message loop. | |
35 void CompleteStopping(); | |
36 | |
37 // Derived classes have to override this method to implement the shutdown | |
38 // logic. | |
39 virtual void DoStop() = 0; | |
40 | |
41 enum State { | |
42 kRunning, | |
43 kStopping, | |
44 kStopped | |
45 }; | |
46 | |
47 State stoppable_state() const { return state_; } | |
48 | |
49 private: | |
50 State state_; | |
51 | |
52 // A callback to be called when shutdown is completed. | |
53 base::Closure stopped_callback_; | |
54 | |
55 // The target task runner where the shutdown notification will be posted. | |
56 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; | |
57 | |
58 DISALLOW_COPY_AND_ASSIGN(Stoppable); | |
59 }; | |
60 | |
61 } // namespace remoting | |
62 | |
63 #endif // REMOTING_BASE_STOPPABLE_H_ | |
OLD | NEW |