| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef COMPONENTS_PAGE_LOAD_METRICS_BROWSER_METRICS_WEB_CONTENTS_OBSERVER_H_ | 5 #ifndef COMPONENTS_PAGE_LOAD_METRICS_BROWSER_METRICS_WEB_CONTENTS_OBSERVER_H_ |
| 6 #define COMPONENTS_PAGE_LOAD_METRICS_BROWSER_METRICS_WEB_CONTENTS_OBSERVER_H_ | 6 #define COMPONENTS_PAGE_LOAD_METRICS_BROWSER_METRICS_WEB_CONTENTS_OBSERVER_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "base/macros.h" | 12 #include "base/macros.h" |
| 13 #include "base/time/time.h" | 13 #include "base/time/time.h" |
| 14 #include "components/page_load_metrics/browser/page_load_metrics_observer.h" | 14 #include "components/page_load_metrics/browser/page_load_metrics_observer.h" |
| 15 #include "components/page_load_metrics/common/page_load_metrics.mojom.h" |
| 15 #include "components/page_load_metrics/common/page_load_timing.h" | 16 #include "components/page_load_metrics/common/page_load_timing.h" |
| 16 #include "content/public/browser/render_widget_host.h" | 17 #include "content/public/browser/render_widget_host.h" |
| 17 #include "content/public/browser/web_contents.h" | 18 #include "content/public/browser/web_contents.h" |
| 18 #include "content/public/browser/web_contents_observer.h" | 19 #include "content/public/browser/web_contents_observer.h" |
| 19 #include "content/public/browser/web_contents_user_data.h" | 20 #include "content/public/browser/web_contents_user_data.h" |
| 21 #include "mojo/public/cpp/bindings/binding.h" |
| 20 #include "net/base/net_errors.h" | 22 #include "net/base/net_errors.h" |
| 21 #include "third_party/WebKit/public/web/WebInputEvent.h" | 23 #include "third_party/WebKit/public/web/WebInputEvent.h" |
| 22 | 24 |
| 23 namespace content { | 25 namespace content { |
| 24 class NavigationHandle; | 26 class NavigationHandle; |
| 25 class RenderFrameHost; | 27 class RenderFrameHost; |
| 26 } // namespace content | 28 } // namespace content |
| 27 | 29 |
| 28 namespace IPC { | 30 namespace IPC { |
| 29 class Message; | 31 class Message; |
| 30 } // namespace IPC | 32 } // namespace IPC |
| 31 | 33 |
| 32 namespace page_load_metrics { | 34 namespace page_load_metrics { |
| 33 | 35 |
| 36 class MetricsWebContentsObserver; |
| 34 class PageLoadTracker; | 37 class PageLoadTracker; |
| 35 | 38 |
| 36 namespace internal { | 39 namespace internal { |
| 37 | 40 |
| 38 extern const char kErrorEvents[]; | 41 extern const char kErrorEvents[]; |
| 39 extern const char kAbortChainSizeReload[]; | 42 extern const char kAbortChainSizeReload[]; |
| 40 extern const char kAbortChainSizeForwardBack[]; | 43 extern const char kAbortChainSizeForwardBack[]; |
| 41 extern const char kAbortChainSizeNewNavigation[]; | 44 extern const char kAbortChainSizeNewNavigation[]; |
| 42 extern const char kAbortChainSizeNoCommit[]; | 45 extern const char kAbortChainSizeNoCommit[]; |
| 43 extern const char kAbortChainSizeSameURL[]; | 46 extern const char kAbortChainSizeSameURL[]; |
| (...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 273 // Note that the returned metrics is owned by the web contents. | 276 // Note that the returned metrics is owned by the web contents. |
| 274 static MetricsWebContentsObserver* CreateForWebContents( | 277 static MetricsWebContentsObserver* CreateForWebContents( |
| 275 content::WebContents* web_contents, | 278 content::WebContents* web_contents, |
| 276 std::unique_ptr<PageLoadMetricsEmbedderInterface> embedder_interface); | 279 std::unique_ptr<PageLoadMetricsEmbedderInterface> embedder_interface); |
| 277 MetricsWebContentsObserver( | 280 MetricsWebContentsObserver( |
| 278 content::WebContents* web_contents, | 281 content::WebContents* web_contents, |
| 279 std::unique_ptr<PageLoadMetricsEmbedderInterface> embedder_interface); | 282 std::unique_ptr<PageLoadMetricsEmbedderInterface> embedder_interface); |
| 280 ~MetricsWebContentsObserver() override; | 283 ~MetricsWebContentsObserver() override; |
| 281 | 284 |
| 282 // content::WebContentsObserver implementation: | 285 // content::WebContentsObserver implementation: |
| 283 bool OnMessageReceived(const IPC::Message& message, | 286 void RenderFrameCreated(content::RenderFrameHost* render_frame_host) override; |
| 284 content::RenderFrameHost* render_frame_host) override; | 287 void RenderFrameHostChanged(content::RenderFrameHost* old_host, |
| 288 content::RenderFrameHost* new_host) override; |
| 289 void WebContentsDestroyed() override; |
| 285 void DidStartNavigation( | 290 void DidStartNavigation( |
| 286 content::NavigationHandle* navigation_handle) override; | 291 content::NavigationHandle* navigation_handle) override; |
| 287 void DidFinishNavigation( | 292 void DidFinishNavigation( |
| 288 content::NavigationHandle* navigation_handle) override; | 293 content::NavigationHandle* navigation_handle) override; |
| 289 void DidRedirectNavigation( | 294 void DidRedirectNavigation( |
| 290 content::NavigationHandle* navigation_handle) override; | 295 content::NavigationHandle* navigation_handle) override; |
| 291 void NavigationStopped() override; | 296 void NavigationStopped() override; |
| 292 void OnInputEvent(const blink::WebInputEvent& event) override; | 297 void OnInputEvent(const blink::WebInputEvent& event) override; |
| 293 void WasShown() override; | 298 void WasShown() override; |
| 294 void WasHidden() override; | 299 void WasHidden() override; |
| 295 void RenderProcessGone(base::TerminationStatus status) override; | 300 void RenderProcessGone(base::TerminationStatus status) override; |
| 296 void RenderViewHostChanged(content::RenderViewHost* old_host, | 301 void RenderViewHostChanged(content::RenderViewHost* old_host, |
| 297 content::RenderViewHost* new_host) override; | 302 content::RenderViewHost* new_host) override; |
| 298 | 303 |
| 299 // This getter function is required for testing. | 304 // This getter function is required for testing. |
| 300 const PageLoadExtraInfo GetPageLoadExtraInfoForCommittedLoad(); | 305 const PageLoadExtraInfo GetPageLoadExtraInfoForCommittedLoad(); |
| 301 | 306 |
| 307 // Exposed for testing. |
| 308 void OnTimingUpdated(content::RenderFrameHost*, |
| 309 const PageLoadTiming& timing, |
| 310 const PageLoadMetadata& metadata); |
| 311 |
| 302 private: | 312 private: |
| 303 friend class content::WebContentsUserData<MetricsWebContentsObserver>; | 313 friend class content::WebContentsUserData<MetricsWebContentsObserver>; |
| 314 friend class MetricsWebContentsObserverTest; |
| 315 |
| 316 class PageLoadMetricsImpl; |
| 304 | 317 |
| 305 void HandleFailedNavigationForTrackedLoad( | 318 void HandleFailedNavigationForTrackedLoad( |
| 306 content::NavigationHandle* navigation_handle, | 319 content::NavigationHandle* navigation_handle, |
| 307 std::unique_ptr<PageLoadTracker> tracker); | 320 std::unique_ptr<PageLoadTracker> tracker); |
| 308 | 321 |
| 309 void HandleCommittedNavigationForTrackedLoad( | 322 void HandleCommittedNavigationForTrackedLoad( |
| 310 content::NavigationHandle* navigation_handle, | 323 content::NavigationHandle* navigation_handle, |
| 311 std::unique_ptr<PageLoadTracker> tracker); | 324 std::unique_ptr<PageLoadTracker> tracker); |
| 312 | 325 |
| 313 // Notify all loads, provisional and committed, that we performed an action | 326 // Notify all loads, provisional and committed, that we performed an action |
| 314 // that might abort them. | 327 // that might abort them. |
| 315 void NotifyAbortAllLoads(UserAbortType abort_type); | 328 void NotifyAbortAllLoads(UserAbortType abort_type); |
| 316 void NotifyAbortAllLoadsWithTimestamp(UserAbortType abort_type, | 329 void NotifyAbortAllLoadsWithTimestamp(UserAbortType abort_type, |
| 317 base::TimeTicks timestamp, | 330 base::TimeTicks timestamp, |
| 318 bool is_certainly_browser_timestamp); | 331 bool is_certainly_browser_timestamp); |
| 319 | 332 |
| 320 // Register / Unregister input event callback to given RenderViewHost | 333 // Register / Unregister input event callback to given RenderViewHost |
| 321 void RegisterInputEventObserver(content::RenderViewHost* host); | 334 void RegisterInputEventObserver(content::RenderViewHost* host); |
| 322 void UnregisterInputEventObserver(content::RenderViewHost* host); | 335 void UnregisterInputEventObserver(content::RenderViewHost* host); |
| 323 | 336 |
| 324 // Notify aborted provisional loads that a new navigation occurred. This is | 337 // Notify aborted provisional loads that a new navigation occurred. This is |
| 325 // used for more consistent attribution tracking for aborted provisional | 338 // used for more consistent attribution tracking for aborted provisional |
| 326 // loads. This method returns the provisional load that was likely aborted | 339 // loads. This method returns the provisional load that was likely aborted |
| 327 // by this navigation, to help instantiate the new PageLoadTracker. | 340 // by this navigation, to help instantiate the new PageLoadTracker. |
| 328 std::unique_ptr<PageLoadTracker> NotifyAbortedProvisionalLoadsNewNavigation( | 341 std::unique_ptr<PageLoadTracker> NotifyAbortedProvisionalLoadsNewNavigation( |
| 329 content::NavigationHandle* new_navigation); | 342 content::NavigationHandle* new_navigation); |
| 330 | 343 |
| 331 void OnTimingUpdated(content::RenderFrameHost*, | 344 // Register a PageLoadMetricsImpl factory, listening for connections to |
| 332 const PageLoadTiming& timing, | 345 // |host|. |
| 333 const PageLoadMetadata& metadata); | 346 void RegisterInterfaceImpl(content::RenderFrameHost* host); |
| 334 | 347 |
| 335 bool ShouldTrackNavigation( | 348 bool ShouldTrackNavigation( |
| 336 content::NavigationHandle* navigation_handle) const; | 349 content::NavigationHandle* navigation_handle) const; |
| 337 | 350 |
| 338 // True if the web contents is currently in the foreground. | 351 // True if the web contents is currently in the foreground. |
| 339 bool in_foreground_; | 352 bool in_foreground_; |
| 340 | 353 |
| 341 // The PageLoadTrackers must be deleted before the |embedder_interface_|, | 354 // The PageLoadTrackers must be deleted before the |embedder_interface_|, |
| 342 // because they hold a pointer to the |embedder_interface_|. | 355 // because they hold a pointer to the |embedder_interface_|. |
| 343 std::unique_ptr<PageLoadMetricsEmbedderInterface> embedder_interface_; | 356 std::unique_ptr<PageLoadMetricsEmbedderInterface> embedder_interface_; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 354 // navigation failed. This is because most provisional loads are destroyed | 367 // navigation failed. This is because most provisional loads are destroyed |
| 355 // and vanish before we get signal about what caused the abort (new | 368 // and vanish before we get signal about what caused the abort (new |
| 356 // navigation, stop button, etc.). | 369 // navigation, stop button, etc.). |
| 357 std::vector<std::unique_ptr<PageLoadTracker>> aborted_provisional_loads_; | 370 std::vector<std::unique_ptr<PageLoadTracker>> aborted_provisional_loads_; |
| 358 | 371 |
| 359 std::unique_ptr<PageLoadTracker> committed_load_; | 372 std::unique_ptr<PageLoadTracker> committed_load_; |
| 360 | 373 |
| 361 // Has the MWCO observed at least one navigation? | 374 // Has the MWCO observed at least one navigation? |
| 362 bool has_navigated_; | 375 bool has_navigated_; |
| 363 | 376 |
| 377 // Interface implementations we need to delete. |
| 378 std::vector<std::unique_ptr<PageLoadMetricsImpl>> registered_interfaces_; |
| 379 |
| 364 DISALLOW_COPY_AND_ASSIGN(MetricsWebContentsObserver); | 380 DISALLOW_COPY_AND_ASSIGN(MetricsWebContentsObserver); |
| 365 }; | 381 }; |
| 366 | 382 |
| 367 } // namespace page_load_metrics | 383 } // namespace page_load_metrics |
| 368 | 384 |
| 369 #endif // COMPONENTS_PAGE_LOAD_METRICS_BROWSER_METRICS_WEB_CONTENTS_OBSERVER_H_ | 385 #endif // COMPONENTS_PAGE_LOAD_METRICS_BROWSER_METRICS_WEB_CONTENTS_OBSERVER_H_ |
| OLD | NEW |