Chromium Code Reviews| 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 2334223f46abbb1460b45f2d6494c1f3239aaab0..c630d399e37cb7844e41dffbf5dd1c8480b6886f 100644 |
| --- a/components/page_load_metrics/browser/metrics_web_contents_observer.h |
| +++ b/components/page_load_metrics/browser/metrics_web_contents_observer.h |
| @@ -12,11 +12,13 @@ |
| #include "base/macros.h" |
| #include "base/time/time.h" |
| #include "components/page_load_metrics/browser/page_load_metrics_observer.h" |
| +#include "components/page_load_metrics/common/page_load_metrics.mojom.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 "mojo/public/cpp/bindings/binding.h" |
| #include "net/base/net_errors.h" |
| #include "third_party/WebKit/public/web/WebInputEvent.h" |
| @@ -31,6 +33,7 @@ class Message; |
| namespace page_load_metrics { |
| +class MetricsWebContentsObserver; |
| class PageLoadTracker; |
| namespace internal { |
| @@ -254,6 +257,28 @@ class PageLoadTracker { |
| DISALLOW_COPY_AND_ASSIGN(PageLoadTracker); |
| }; |
| +class PageLoadMetricsImpl : public mojom::PageLoadMetrics { |
|
Sam McNally
2016/07/07 05:10:48
Can you move this definition into the .cc file?
tibell
2016/07/08 01:12:53
Done.
|
| + public: |
| + // Does not take ownership of the arguments, which need to outlive this |
| + // object. |
| + PageLoadMetricsImpl(MetricsWebContentsObserver* observer, |
| + content::RenderFrameHost* host); |
| + ~PageLoadMetricsImpl() override; |
| + |
| + void Bind(mojo::InterfaceRequest<mojom::PageLoadMetrics> request); |
| + |
| + // mojom::PageLoadMetrics override. |
| + void TimingUpdated(const PageLoadTiming& timing, |
| + const PageLoadMetadata& metadata) override; |
| + |
| + private: |
| + MetricsWebContentsObserver* observer_; |
|
Sam McNally
2016/07/07 05:10:48
const
tibell
2016/07/08 01:12:53
We call OnTimingUpdated, which isn't const.
|
| + content::RenderFrameHost* host_; |
|
Sam McNally
2016/07/07 05:10:48
const
tibell
2016/07/08 01:12:53
OnTimingUpdated takes a non-const RFH.
|
| + mojo::Binding<mojom::PageLoadMetrics> binding_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsImpl); |
| +}; |
| + |
| // MetricsWebContentsObserver tracks page loads and loading metrics |
| // related data based on IPC messages received from a |
| // MetricsRenderFrameObserver. |
| @@ -272,8 +297,10 @@ class MetricsWebContentsObserver |
| ~MetricsWebContentsObserver() override; |
| // content::WebContentsObserver implementation: |
| - bool OnMessageReceived(const IPC::Message& message, |
| - content::RenderFrameHost* render_frame_host) override; |
| + void RenderFrameCreated(content::RenderFrameHost* render_frame_host) override; |
| + void RenderFrameHostChanged(content::RenderFrameHost* old_host, |
| + content::RenderFrameHost* new_host) override; |
| + void WebContentsDestroyed() override; |
| void DidStartNavigation( |
| content::NavigationHandle* navigation_handle) override; |
| void DidFinishNavigation( |
| @@ -291,8 +318,14 @@ class MetricsWebContentsObserver |
| // This getter function is required for testing. |
| const PageLoadExtraInfo GetPageLoadExtraInfoForCommittedLoad(); |
| + // Exposed for testing. |
| + void OnTimingUpdated(content::RenderFrameHost*, |
| + const PageLoadTiming& timing, |
| + const PageLoadMetadata& metadata); |
| + |
| private: |
| friend class content::WebContentsUserData<MetricsWebContentsObserver>; |
| + friend class MetricsWebContentsObserverTest; |
| // Notify all loads, provisional and committed, that we performed an action |
| // that might abort them. |
| @@ -312,9 +345,9 @@ class MetricsWebContentsObserver |
| std::unique_ptr<PageLoadTracker> NotifyAbortedProvisionalLoadsNewNavigation( |
| content::NavigationHandle* new_navigation); |
| - void OnTimingUpdated(content::RenderFrameHost*, |
| - const PageLoadTiming& timing, |
| - const PageLoadMetadata& metadata); |
| + // Create and register a new PageLoadMetricsImpl, listening for messages to |
| + // |host|. |
| + void CreateRegisteredInterface(content::RenderFrameHost* host); |
| // True if the web contents is currently in the foreground. |
| bool in_foreground_; |
| @@ -342,6 +375,9 @@ class MetricsWebContentsObserver |
| // Has the MWCO observed at least one navigation? |
| bool has_navigated_; |
| + // Interface implementations we need to delete. |
| + std::vector<std::unique_ptr<PageLoadMetricsImpl>> registered_interfaces_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(MetricsWebContentsObserver); |
| }; |