Prerender: record CWV metrics for prerendering depending on the trigger type
Currently, Core Web Vitals (CWV) metrics
(e.g. PageLoad.Clients.Prerender.PaintTiming.
ActivationToLargestContentfulPaint2) are recorded regardless of the
trigger type. We want to divide data depending on the trigger type
for experiments.
This CL does
1. expose PrerenderTriggerType to content/public
2. add getter functions to NavigationHandle to make data available
from components/page_load_metrics/
3. plumb the trigger type and the histogram suffix, which are passed to
PrerenderAttributes -> NavigationRequest ->
PrerenderPageLoadMetricsObserver
4. record data depending on the trigger type and append histogram suffix
if necessary.
The test will be added in another CL.
Bug: 1269158
Change-Id: Iab589455fd2e984594b65d61147733efa2dbe67c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3270224
Reviewed-by: Hiroki Nakagawa <[email protected]>
Reviewed-by: Egor Pasko <[email protected]>
Reviewed-by: Nasko Oskov <[email protected]>
Reviewed-by: Annie Sullivan <[email protected]>
Reviewed-by: Takashi Toyoshima <[email protected]>
Reviewed-by: Kouhei Ueno <[email protected]>
Commit-Queue: Asami Doi <[email protected]>
Cr-Commit-Position: refs/heads/main@{#945266}
diff --git a/content/public/browser/BUILD.gn b/content/public/browser/BUILD.gn
index 6ef4f1c8..21cfede5 100644
--- a/content/public/browser/BUILD.gn
+++ b/content/public/browser/BUILD.gn
@@ -283,6 +283,7 @@
"platform_notification_context.h",
"platform_notification_service.h",
"prerender_handle.h",
+ "prerender_trigger_type.h",
"presentation_receiver_flags.h",
"presentation_request.cc",
"presentation_request.h",
diff --git a/content/public/browser/navigation_handle.h b/content/public/browser/navigation_handle.h
index 9358012..d48ff37c 100644
--- a/content/public/browser/navigation_handle.h
+++ b/content/public/browser/navigation_handle.h
@@ -14,6 +14,7 @@
#include "content/public/browser/navigating_frame_type.h"
#include "content/public/browser/navigation_handle_timing.h"
#include "content/public/browser/navigation_throttle.h"
+#include "content/public/browser/prerender_trigger_type.h"
#include "content/public/browser/reload_type.h"
#include "content/public/browser/restore_type.h"
#include "content/public/common/referrer.h"
@@ -512,6 +513,11 @@
// will be ignored (they won't reset the timeout) and will return `false`.
virtual bool SetNavigationTimeout(base::TimeDelta timeout) = 0;
+ // Prerender2:
+ // Used for metrics.
+ virtual PrerenderTriggerType GetPrerenderTriggerType() = 0;
+ virtual std::string GetPrerenderEmbedderHistogramSuffix() = 0;
+
// Testing methods ----------------------------------------------------------
//
// The following methods should be used exclusively for writing unit tests.
diff --git a/content/public/browser/prerender_trigger_type.h b/content/public/browser/prerender_trigger_type.h
new file mode 100644
index 0000000..6c24705
--- /dev/null
+++ b/content/public/browser/prerender_trigger_type.h
@@ -0,0 +1,19 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_PUBLIC_BROWSER_PRERENDER_TRIGGER_TYPE_H_
+#define CONTENT_PUBLIC_BROWSER_PRERENDER_TRIGGER_TYPE_H_
+
+namespace content {
+
+enum class PrerenderTriggerType {
+ // https://wicg.github.io/nav-speculation/prerendering.html#speculation-rules
+ kSpeculationRule,
+ // Trigger used by content embedders.
+ kEmbedder,
+};
+
+} // namespace content
+
+#endif // CONTENT_PUBLIC_BROWSER_PRERENDER_TRIGGER_TYPE_H_
diff --git a/content/public/browser/web_contents.h b/content/public/browser/web_contents.h
index 8b7f3c9..4f2f831 100644
--- a/content/public/browser/web_contents.h
+++ b/content/public/browser/web_contents.h
@@ -30,6 +30,7 @@
#include "content/public/browser/page.h"
#include "content/public/browser/page_navigator.h"
#include "content/public/browser/prerender_handle.h"
+#include "content/public/browser/prerender_trigger_type.h"
#include "content/public/browser/save_page_type.h"
#include "content/public/browser/visibility.h"
#include "content/public/common/stop_find_action.h"
@@ -1334,7 +1335,9 @@
// disabled, failure happened or because this URL is already being
// prerendered), this function returns a nullptr.
virtual std::unique_ptr<PrerenderHandle> StartPrerendering(
- const GURL& prerendering_url) = 0;
+ const GURL& prerendering_url,
+ PrerenderTriggerType trigger_type,
+ const std::string& embedder_histogram_suffix) = 0;
private:
// This interface should only be implemented inside content.