| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COMPONENTS_OMNIBOX_BROWSER_OMNIBOX_EVENT_GLOBAL_TRACKER_H_ |
| #define COMPONENTS_OMNIBOX_BROWSER_OMNIBOX_EVENT_GLOBAL_TRACKER_H_ |
| |
| #include <memory> |
| |
| #include "base/callback_list.h" |
| |
| namespace base { |
| template <typename T> |
| struct DefaultSingletonTraits; |
| } // namespace base |
| |
| struct OmniboxLog; |
| |
| // Omnibox code tracks events on a per-user-context basis, but there are |
| // several clients who need to observe these events for all user contexts |
| // (e.g., all Profiles in the //chrome embedder). This class serves as an |
| // intermediary to bridge the gap: omnibox code calls the |
| // OmniboxEventGlobalTracker singleton on an event of interest, and it then |
| // forwards the event to its registered observers. |
| class OmniboxEventGlobalTracker { |
| public: |
| using OnURLOpenedCallbackList = |
| base::RepeatingCallbackList<void(OmniboxLog*)>; |
| using OnURLOpenedCallback = OnURLOpenedCallbackList::CallbackType; |
| |
| // Returns the instance of OmniboxEventGlobalTracker. |
| static OmniboxEventGlobalTracker* GetInstance(); |
| |
| // Registers |cb| to be invoked when user open an URL from the omnibox. |
| std::unique_ptr<OnURLOpenedCallbackList::Subscription> RegisterCallback( |
| const OnURLOpenedCallback& cb); |
| |
| // Called to notify all registered callbacks that an URL was opened from |
| // the omnibox. |
| void OnURLOpened(OmniboxLog* log); |
| |
| private: |
| friend struct base::DefaultSingletonTraits<OmniboxEventGlobalTracker>; |
| |
| OmniboxEventGlobalTracker(); |
| ~OmniboxEventGlobalTracker(); |
| OmniboxEventGlobalTracker(const OmniboxEventGlobalTracker&) = delete; |
| OmniboxEventGlobalTracker& operator=(const OmniboxEventGlobalTracker&) = |
| delete; |
| |
| OnURLOpenedCallbackList on_url_opened_callback_list_; |
| }; |
| |
| #endif // COMPONENTS_OMNIBOX_BROWSER_OMNIBOX_EVENT_GLOBAL_TRACKER_H_ |