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

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: Rebase 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 5b0d5dde828234aa95d6a4b8834394db1c4934b8..79ddac9d1be1844dc4eb8ee4de043495cc14b0a6 100644
--- a/components/page_load_metrics/browser/metrics_web_contents_observer.cc
+++ b/components/page_load_metrics/browser/metrics_web_contents_observer.cc
@@ -15,7 +15,7 @@
#include "base/metrics/histogram.h"
#include "base/metrics/user_metrics.h"
#include "components/page_load_metrics/browser/page_load_metrics_util.h"
-#include "components/page_load_metrics/common/page_load_metrics_messages.h"
+#include "components/page_load_metrics/common/page_load_metrics_param_traits.h"
#include "components/page_load_metrics/common/page_load_timing.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/navigation_details.h"
@@ -27,6 +27,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(
@@ -574,6 +575,40 @@ void PageLoadTracker::UpdateAbortInternal(UserAbortType abort_type,
}
}
+class MetricsWebContentsObserver::PageLoadMetricsImpl
+ : public mojom::PageLoadMetrics {
+ public:
+ // Does not take ownership of the arguments, which need to outlive this
+ // object.
+ PageLoadMetricsImpl(MetricsWebContentsObserver* observer,
+ content::RenderFrameHost* host)
+ : observer_(observer), host_(host), binding_(this) {}
+ ~PageLoadMetricsImpl() override = default;
+
+ // Factory for creating PageLoadMetricsImpl objects upon incoming connections.
+ static void Create(MetricsWebContentsObserver* observer,
+ content::RenderFrameHost* host,
+ mojo::InterfaceRequest<mojom::PageLoadMetrics> request) {
+ auto impl = base::MakeUnique<PageLoadMetricsImpl>(observer, host);
+ impl->binding_.Bind(std::move(request));
+ observer->registered_interfaces_.push_back(std::move(impl));
+ }
+
+ // mojom::PageLoadMetrics override.
+ void TimingUpdated(const PageLoadTiming& timing,
+ const PageLoadMetadata& metadata) override {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+ observer_->OnTimingUpdated(host_, timing, metadata);
+ }
+
+ private:
+ MetricsWebContentsObserver* const observer_;
+ content::RenderFrameHost* const host_;
+ mojo::Binding<mojom::PageLoadMetrics> binding_;
+
+ DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsImpl);
+};
+
// static
MetricsWebContentsObserver::MetricsWebContentsObserver(
content::WebContents* web_contents,
@@ -622,19 +657,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())
@@ -892,6 +914,29 @@ MetricsWebContentsObserver::NotifyAbortedProvisionalLoadsNewNavigation(
return last_aborted_load;
}
+void MetricsWebContentsObserver::RenderFrameCreated(
+ content::RenderFrameHost* render_frame_host) {
+ RegisterInterfaceImpl(render_frame_host);
+}
+
+void MetricsWebContentsObserver::RenderFrameHostChanged(
+ content::RenderFrameHost* old_host,
+ content::RenderFrameHost* new_host) {
+ RegisterInterfaceImpl(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::RegisterInterfaceImpl(
+ content::RenderFrameHost* host) {
+ host->GetInterfaceRegistry()->AddInterface(
+ base::Bind(&PageLoadMetricsImpl::Create, base::Unretained(this),
+ base::Unretained(host)));
+}
+
void MetricsWebContentsObserver::OnTimingUpdated(
content::RenderFrameHost* render_frame_host,
const PageLoadTiming& timing,

Powered by Google App Engine
This is Rietveld 408576698