| // 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" |
| #include "base/macros.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: |
| typedef base::Callback<void(OmniboxLog*)> OnURLOpenedCallback; |
| |
| // Returns the instance of OmniboxEventGlobalTracker. |
| static OmniboxEventGlobalTracker* GetInstance(); |
| |
| // Registers |cb| to be invoked when user open an URL from the omnibox. |
| std::unique_ptr<base::CallbackList<void(OmniboxLog*)>::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(); |
| |
| base::CallbackList<void(OmniboxLog*)> on_url_opened_callback_list_; |
| |
| DISALLOW_COPY_AND_ASSIGN(OmniboxEventGlobalTracker); |
| }; |
| |
| #endif // COMPONENTS_OMNIBOX_BROWSER_OMNIBOX_EVENT_GLOBAL_TRACKER_H_ |