1// Copyright (c) 2011 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_NON_THREAD_SAFE_IMPL_H_
6#define BASE_THREADING_NON_THREAD_SAFE_IMPL_H_
7#pragma once
8
9#include "base/base_api.h"
10#include "base/threading/thread_checker_impl.h"
11
12namespace base {
13
14// Full implementation of NonThreadSafe, for debug mode or for occasional
15// temporary use in release mode e.g. when you need to CHECK on a thread
16// bug that only occurs in the wild.
17//
18// Note: You should almost always use the NonThreadSafe class to get
19// the right version of the class for your build configuration.
20class BASE_API NonThreadSafeImpl {
21 public:
22  ~NonThreadSafeImpl();
23
24  bool CalledOnValidThread() const;
25
26 protected:
27  // Changes the thread that is checked for in CalledOnValidThread. The next
28  // call to CalledOnValidThread will attach this class to a new thread. It is
29  // up to the NonThreadSafe derived class to decide to expose this or not.
30  // This may be useful when an object may be created on one thread and then
31  // used exclusively on another thread.
32  void DetachFromThread();
33
34 private:
35  ThreadCheckerImpl thread_checker_;
36};
37
38}  // namespace base
39
40#endif  // BASE_THREADING_NON_THREAD_SAFE_IMPL_H_
41