Index: chrome/browser/page_load_metrics/metrics_web_contents_observer.cc |
diff --git a/chrome/browser/page_load_metrics/metrics_web_contents_observer.cc b/chrome/browser/page_load_metrics/metrics_web_contents_observer.cc |
index 4f1d8d3ae07e1d5d7cf1f72e232076ab0e0b3bb3..29ce7bc4b0fcdad737f236eba370a5b5a615014b 100644 |
--- a/chrome/browser/page_load_metrics/metrics_web_contents_observer.cc |
+++ b/chrome/browser/page_load_metrics/metrics_web_contents_observer.cc |
@@ -9,6 +9,7 @@ |
#include <string> |
#include <utility> |
+#include "base/feature_list.h" |
#include "base/location.h" |
#include "base/memory/ptr_util.h" |
#include "base/metrics/histogram_macros.h" |
@@ -16,6 +17,7 @@ |
#include "chrome/browser/page_load_metrics/page_load_metrics_embedder_interface.h" |
#include "chrome/browser/page_load_metrics/page_load_metrics_util.h" |
#include "chrome/browser/page_load_metrics/page_load_tracker.h" |
+#include "chrome/common/chrome_features.h" |
#include "chrome/common/page_load_metrics/page_load_metrics_messages.h" |
#include "chrome/common/page_load_metrics/page_load_timing.h" |
#include "content/public/browser/browser_thread.h" |
@@ -70,7 +72,8 @@ MetricsWebContentsObserver::MetricsWebContentsObserver( |
: content::WebContentsObserver(web_contents), |
in_foreground_(false), |
embedder_interface_(std::move(embedder_interface)), |
- has_navigated_(false) { |
+ has_navigated_(false), |
+ page_load_metrics_binding_(web_contents, this) { |
RegisterInputEventObserver(web_contents->GetRenderViewHost()); |
} |
@@ -137,7 +140,7 @@ bool MetricsWebContentsObserver::OnMessageReceived( |
bool handled = true; |
IPC_BEGIN_MESSAGE_MAP_WITH_PARAM(MetricsWebContentsObserver, message, |
render_frame_host) |
- IPC_MESSAGE_HANDLER(PageLoadMetricsMsg_TimingUpdated, OnTimingUpdated) |
+ IPC_MESSAGE_HANDLER(PageLoadMetricsMsg_TimingUpdated, OnUpdateTimingOverIPC) |
IPC_MESSAGE_UNHANDLED(handled = false) |
IPC_END_MESSAGE_MAP() |
return handled; |
@@ -617,6 +620,29 @@ void MetricsWebContentsObserver::OnTimingUpdated( |
observer.OnTimingUpdated(is_main_frame, timing, metadata); |
} |
+void MetricsWebContentsObserver::OnUpdateTimingOverIPC( |
+ content::RenderFrameHost* render_frame_host, |
+ const mojom::PageLoadTiming& timing, |
+ const mojom::PageLoadMetadata& metadata) { |
+ DCHECK(!base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication)); |
+ OnTimingUpdated(render_frame_host, timing, metadata); |
+ |
+ for (auto& observer : testing_observers_) |
+ observer.DidReceiveTimingUpdate(TestingObserver::IPCType::LEGACY); |
+} |
+ |
+void MetricsWebContentsObserver::UpdateTiming( |
+ const mojom::PageLoadTimingPtr timing, |
+ const mojom::PageLoadMetadataPtr metadata) { |
+ content::RenderFrameHost* render_frame_host = |
+ page_load_metrics_binding_.GetCurrentTargetFrame(); |
+ DCHECK(base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication)); |
+ OnTimingUpdated(render_frame_host, *timing, *metadata); |
+ |
+ for (auto& observer : testing_observers_) |
+ observer.DidReceiveTimingUpdate(TestingObserver::IPCType::MOJO); |
+} |
+ |
bool MetricsWebContentsObserver::ShouldTrackNavigation( |
content::NavigationHandle* navigation_handle) const { |
DCHECK(navigation_handle->IsInMainFrame()); |