|  | // Copyright 2024 The Chromium Authors | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef COMPONENTS_PAGE_LOAD_METRICS_BROWSER_NAVIGATION_HANDLE_USER_DATA_H_ | 
|  | #define COMPONENTS_PAGE_LOAD_METRICS_BROWSER_NAVIGATION_HANDLE_USER_DATA_H_ | 
|  |  | 
|  | #include "content/public/browser/navigation_handle.h" | 
|  | #include "content/public/browser/navigation_handle_user_data.h" | 
|  |  | 
|  | namespace page_load_metrics { | 
|  |  | 
|  | // Store the information about the from where source of a navigation is | 
|  | // initiated. | 
|  | class NavigationHandleUserData | 
|  | : public content::NavigationHandleUserData<NavigationHandleUserData> { | 
|  | public: | 
|  | // The enum is used for identifying the source of a navigation. | 
|  | // These values are persisted to logs. Entries should not be renumbered and | 
|  | // numeric values should never be reused. | 
|  | enum class InitiatorLocation { | 
|  | kOther = 0, | 
|  | kBookmarkBar = 1, | 
|  | kNewTabPage = 2, | 
|  | kMaxValue = kNewTabPage | 
|  | }; | 
|  |  | 
|  | ~NavigationHandleUserData() override = default; | 
|  |  | 
|  | InitiatorLocation navigation_type() const { return navigation_type_; } | 
|  |  | 
|  | static void AttachNewTabPageNavigationHandleUserData( | 
|  | content::NavigationHandle& navigation_handle); | 
|  |  | 
|  | private: | 
|  | NavigationHandleUserData(content::NavigationHandle& navigation, | 
|  | InitiatorLocation navigation_type); | 
|  |  | 
|  | // `navigation_type` is used to store where this navigation is initiated from. | 
|  | // This information is used to identify the source of the navigation, and this | 
|  | // kind of information is utilized by PageLoadMetricsObservers. | 
|  | const InitiatorLocation navigation_type_; | 
|  |  | 
|  | friend content::NavigationHandleUserData<NavigationHandleUserData>; | 
|  | NAVIGATION_HANDLE_USER_DATA_KEY_DECL(); | 
|  | }; | 
|  |  | 
|  | }  // namespace page_load_metrics | 
|  |  | 
|  | #endif  // COMPONENTS_PAGE_LOAD_METRICS_BROWSER_NAVIGATION_HANDLE_USER_DATA_H_ |