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

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

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.cc
diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer.cc b/components/page_load_metrics/browser/metrics_web_contents_observer.cc
index 617d7d6d211ed1b8283e168b81edebda28cde8f5..0444ed573d3a015a17ae29be0d7deb1081109f96 100644
--- a/components/page_load_metrics/browser/metrics_web_contents_observer.cc
+++ b/components/page_load_metrics/browser/metrics_web_contents_observer.cc
@@ -26,6 +26,7 @@
#include "content/public/browser/web_contents_user_data.h"
#include "ipc/ipc_message.h"
#include "ipc/ipc_message_macros.h"
+#include "services/shell/public/cpp/interface_registry.h"
#include "ui/base/page_transition_types.h"
DEFINE_WEB_CONTENTS_USER_DATA_KEY(
@@ -572,6 +573,23 @@ void PageLoadTracker::UpdateAbortInternal(UserAbortType abort_type,
}
}
+PageLoadMetricsImpl::PageLoadMetricsImpl(MetricsWebContentsObserver* observer,
+ content::RenderFrameHost* host)
+ : observer_(observer), host_(host), binding_(this) {}
+
+PageLoadMetricsImpl::~PageLoadMetricsImpl() = default;
+
+void PageLoadMetricsImpl::Bind(
+ mojo::InterfaceRequest<mojom::PageLoadMetrics> request) {
+ binding_.Bind(std::move(request));
+}
+
+void PageLoadMetricsImpl::TimingUpdated(const PageLoadTiming& timing,
+ const PageLoadMetadata& metadata) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+ observer_->OnTimingUpdated(host_, timing, metadata);
+}
+
// static
MetricsWebContentsObserver::MetricsWebContentsObserver(
content::WebContents* web_contents,
@@ -620,19 +638,6 @@ void MetricsWebContentsObserver::RenderViewHostChanged(
RegisterInputEventObserver(new_host);
}
-bool MetricsWebContentsObserver::OnMessageReceived(
- const IPC::Message& message,
- content::RenderFrameHost* render_frame_host) {
- DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
- bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_WITH_PARAM(MetricsWebContentsObserver, message,
- render_frame_host)
- IPC_MESSAGE_HANDLER(PageLoadMetricsMsg_TimingUpdated, OnTimingUpdated)
- IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP()
- return handled;
-}
-
void MetricsWebContentsObserver::DidStartNavigation(
content::NavigationHandle* navigation_handle) {
if (!navigation_handle->IsInMainFrame())
@@ -882,6 +887,31 @@ MetricsWebContentsObserver::NotifyAbortedProvisionalLoadsNewNavigation(
return last_aborted_load;
}
+void MetricsWebContentsObserver::RenderFrameCreated(
+ content::RenderFrameHost* render_frame_host) {
+ CreateRegisteredInterface(render_frame_host);
+}
+
+void MetricsWebContentsObserver::RenderFrameHostChanged(
+ content::RenderFrameHost* old_host,
+ content::RenderFrameHost* new_host) {
+ CreateRegisteredInterface(new_host);
+}
+void MetricsWebContentsObserver::WebContentsDestroyed() {
+ // At this point we no longer accept any more requests, as OnTimingUpdated
+ // requires the WebContents to exist.
+ registered_interfaces_.clear();
+}
+
+void MetricsWebContentsObserver::CreateRegisteredInterface(
+ content::RenderFrameHost* host) {
+ registered_interfaces_.push_back(
Sam McNally 2016/07/07 05:10:48 Do you need to create the interface impls eagerly?
tibell 2016/07/08 01:12:53 Done.
+ base::MakeUnique<PageLoadMetricsImpl>(this, host));
+ host->GetInterfaceRegistry()->AddInterface(
+ base::Bind(&PageLoadMetricsImpl::Bind,
+ base::Unretained(registered_interfaces_.back().get())));
+}
+
void MetricsWebContentsObserver::OnTimingUpdated(
content::RenderFrameHost* render_frame_host,
const PageLoadTiming& timing,

Powered by Google App Engine
This is Rietveld 408576698