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); |
}; |