1 // Copyright 2015 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 BASE_THREADING_SEQUENCED_TASK_RUNNER_HANDLE_H_ 6 #define BASE_THREADING_SEQUENCED_TASK_RUNNER_HANDLE_H_ 7 8 #include "base/compiler_specific.h" 9 #include "base/macros.h" 10 #include "base/memory/ref_counted.h" 11 #include "base/sequenced_task_runner.h" 12 13 namespace base { 14 15 class BASE_EXPORT SequencedTaskRunnerHandle { 16 public: 17 // Returns a SequencedTaskRunner which guarantees that posted tasks will only 18 // run after the current task is finished and will satisfy a SequenceChecker. 19 // It should only be called if IsSet() returns true (see the comment there for 20 // the requirements). 21 static scoped_refptr<SequencedTaskRunner> Get(); 22 23 // Returns true if one of the following conditions is fulfilled: 24 // a) A SequencedTaskRunner has been assigned to the current thread by 25 // instantiating a SequencedTaskRunnerHandle. 26 // b) The current thread has a ThreadTaskRunnerHandle (which includes any 27 // thread that has a MessageLoop associated with it). 28 static bool IsSet(); 29 30 // Binds |task_runner| to the current thread. 31 explicit SequencedTaskRunnerHandle( 32 scoped_refptr<SequencedTaskRunner> task_runner); 33 ~SequencedTaskRunnerHandle(); 34 35 private: 36 scoped_refptr<SequencedTaskRunner> task_runner_; 37 38 DISALLOW_COPY_AND_ASSIGN(SequencedTaskRunnerHandle); 39 }; 40 41 } // namespace base 42 43 #endif // BASE_THREADING_SEQUENCED_TASK_RUNNER_HANDLE_H_ 44