15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef BASE_THREAD_TASK_RUNNER_HANDLE_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BASE_THREAD_TASK_RUNNER_HANDLE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/base_export.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base {
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SingleThreadTaskRunner;
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// ThreadTaskRunnerHandle stores a reference to a thread's TaskRunner
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// in thread-local storage.  Callers can then retrieve the TaskRunner
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// for the current thread by calling ThreadTaskRunnerHandle::Get().
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// At most one TaskRunner may be bound to each thread at a time.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BASE_EXPORT ThreadTaskRunnerHandle {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Gets the SingleThreadTaskRunner for the current thread.
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static scoped_refptr<SingleThreadTaskRunner> Get();
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Returns true if the SingleThreadTaskRunner is already created for
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // the current thread.
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  static bool IsSet();
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Binds |task_runner| to the current thread. |task_runner| must belong
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // to the current thread for this to succeed.
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  explicit ThreadTaskRunnerHandle(
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const scoped_refptr<SingleThreadTaskRunner>& task_runner);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~ThreadTaskRunnerHandle();
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<SingleThreadTaskRunner> task_runner_;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace base
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // BASE_THREAD_TASK_RUNNER_HANDLE_H_
41