// Copyright 2018 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef BASE_OBSERVER_LIST_INTERNAL_H_ #define BASE_OBSERVER_LIST_INTERNAL_H_ #include <string> #include "base/base_export.h" #include "base/check.h" #include "base/containers/linked_list.h" #include "base/dcheck_is_on.h" #include "base/memory/raw_ptr.h" #include "base/memory/raw_ptr_exclusion.h" #include "base/memory/weak_ptr.h" #include "base/observer_list_types.h" #if DCHECK_IS_ON() #include "base/debug/stack_trace.h" #endif namespace base { namespace internal { // Adapter for putting raw pointers into an ObserverList<Foo>::Unchecked. template <base::RawPtrTraits ptr_traits = RawPtrTraits::kEmpty, bool use_raw_pointer = false> class BASE_EXPORT UncheckedObserverAdapter { … }; // Adapter for CheckedObserver types so that they can use the same syntax as a // raw pointer when stored in the std::vector of observers in an ObserverList. // It wraps a WeakPtr<CheckedObserver> and allows a "null" pointer via // destruction to be distinguished from an observer marked for deferred removal // whilst an iteration is in progress. class BASE_EXPORT CheckedObserverAdapter { … }; // Wraps a pointer in a stack-allocated, base::LinkNode. The node is // automatically removed from the linked list upon destruction (of the node, not // the pointer). Nodes are detached from the list via Invalidate() in the // destructor of ObserverList. This invalidates all WeakLinkNodes. There is no // threading support. template <class ObserverList> class WeakLinkNode : public base::LinkNode<WeakLinkNode<ObserverList>> { … }; } // namespace internal } // namespace base #endif // BASE_OBSERVER_LIST_INTERNAL_H_