| 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 Stoppable(scoped_refptr<base::SingleThreadTaskRunner> task_runner, | |
| 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 |