| Index: components/page_load_metrics/browser/metrics_web_contents_observer.h | 
| diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer.h b/components/page_load_metrics/browser/metrics_web_contents_observer.h | 
| index d58cfb003b594b0b803b1b3b7fa8befb7d2354ab..291958a24c9ee45a1fa14b4026b3e85fb6c083cf 100644 | 
| --- a/components/page_load_metrics/browser/metrics_web_contents_observer.h | 
| +++ b/components/page_load_metrics/browser/metrics_web_contents_observer.h | 
| @@ -13,10 +13,12 @@ | 
| #include "base/time/time.h" | 
| #include "components/page_load_metrics/browser/page_load_metrics_observer.h" | 
| #include "components/page_load_metrics/common/page_load_timing.h" | 
| +#include "content/public/browser/render_widget_host.h" | 
| #include "content/public/browser/web_contents.h" | 
| #include "content/public/browser/web_contents_observer.h" | 
| #include "content/public/browser/web_contents_user_data.h" | 
| #include "net/base/net_errors.h" | 
| +#include "third_party/WebKit/public/web/WebInputEvent.h" | 
|  | 
| namespace content { | 
| class NavigationHandle; | 
| @@ -87,8 +89,11 @@ enum InternalErrorLoadEvent { | 
| // latest aborted load is used to track the chain size. | 
| ERR_NAVIGATION_SIGNALS_MULIPLE_ABORTED_LOADS, | 
|  | 
| +  // Receives user input before navigation start | 
| +  ERR_USER_INPUT_WITH_NO_RELEVANT_LOAD, | 
| + | 
| // Add values before this final count. | 
| -  ERR_LAST_ENTRY | 
| +  ERR_LAST_ENTRY, | 
| }; | 
|  | 
| // This class serves as a functional interface to various chrome// features. | 
| @@ -123,6 +128,8 @@ class PageLoadTracker { | 
| void WebContentsHidden(); | 
| void WebContentsShown(); | 
|  | 
| +  void OnInputEvent(const blink::WebInputEvent& event); | 
| + | 
| // Returns true if the timing was successfully updated. | 
| bool UpdateTiming(const PageLoadTiming& timing, | 
| const PageLoadMetadata& metadata); | 
| @@ -226,7 +233,8 @@ class PageLoadTracker { | 
| // MetricsRenderFrameObserver. | 
| class MetricsWebContentsObserver | 
| : public content::WebContentsObserver, | 
| -      public content::WebContentsUserData<MetricsWebContentsObserver> { | 
| +      public content::WebContentsUserData<MetricsWebContentsObserver>, | 
| +      public content::RenderWidgetHost::InputEventObserver { | 
| public: | 
| // Note that the returned metrics is owned by the web contents. | 
| static MetricsWebContentsObserver* CreateForWebContents( | 
| @@ -247,9 +255,12 @@ class MetricsWebContentsObserver | 
| void DidRedirectNavigation( | 
| content::NavigationHandle* navigation_handle) override; | 
| void NavigationStopped() override; | 
| +  void OnInputEvent(const blink::WebInputEvent& event) override; | 
| void WasShown() override; | 
| void WasHidden() override; | 
| void RenderProcessGone(base::TerminationStatus status) override; | 
| +  void RenderViewHostChanged(content::RenderViewHost* old_host, | 
| +                             content::RenderViewHost* new_host) override; | 
|  | 
| private: | 
| friend class content::WebContentsUserData<MetricsWebContentsObserver>; | 
| @@ -259,10 +270,15 @@ class MetricsWebContentsObserver | 
| void NotifyAbortAllLoads(UserAbortType abort_type); | 
| void NotifyAbortAllLoadsWithTimestamp(UserAbortType abort_type, | 
| base::TimeTicks timestamp); | 
| + | 
| +  // Register / Unregister input event callback to given RenderViewHost | 
| +  void RegisterInputEventObserver(content::RenderViewHost* host); | 
| +  void UnregisterInputEventObserver(content::RenderViewHost* host); | 
| + | 
| // Notify aborted provisional loads that a new navigation occurred. This is | 
| // used for more consistent attribution tracking for aborted provisional | 
| -  // loads. This method returns the provisional load that was likely aborted by | 
| -  // this navigation, to help instantiate the new PageLoadTracker. | 
| +  // loads. This method returns the provisional load that was likely aborted | 
| +  // by this navigation, to help instantiate the new PageLoadTracker. | 
| std::unique_ptr<PageLoadTracker> NotifyAbortedProvisionalLoadsNewNavigation( | 
| content::NavigationHandle* new_navigation); | 
|  | 
| @@ -286,9 +302,9 @@ class MetricsWebContentsObserver | 
|  | 
| // Tracks aborted provisional loads for a little bit longer than usual (one | 
| // more navigation commit at the max), in order to better understand how the | 
| -  // navigation failed. This is because most provisional loads are destroyed and | 
| -  // vanish before we get signal about what caused the abort (new navigation, | 
| -  // stop button, etc.). | 
| +  // navigation failed. This is because most provisional loads are destroyed | 
| +  // and vanish before we get signal about what caused the abort (new | 
| +  // navigation, stop button, etc.). | 
| std::vector<std::unique_ptr<PageLoadTracker>> aborted_provisional_loads_; | 
|  | 
| std::unique_ptr<PageLoadTracker> committed_load_; | 
|  |