Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(553)

Unified Diff: components/page_load_metrics/browser/metrics_web_contents_observer.h

Issue 2056153002: Convert PageLoadMetrics to Mojo (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix gyp build deps Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
};

Powered by Google App Engine
This is Rietveld 408576698