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), or 28 // c) The current thread is a worker thread belonging to a 29 // SequencedWorkerPool. 30 static bool IsSet(); 31 32 // Binds |task_runner| to the current thread. 33 explicit SequencedTaskRunnerHandle( 34 scoped_refptr<SequencedTaskRunner> task_runner); 35 ~SequencedTaskRunnerHandle(); 36 37 private: 38 scoped_refptr<SequencedTaskRunner> task_runner_; 39 40 DISALLOW_COPY_AND_ASSIGN(SequencedTaskRunnerHandle); 41 }; 42 43 } // namespace base 44 45 #endif // BASE_THREADING_SEQUENCED_TASK_RUNNER_HANDLE_H_ 46