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