blob: d0f7c7c2b0ecc7bf9f3a8c48a40b430c645905fc [file] [log] [blame]
kenod930e48032023-05-18 11:38:401// Copyright 2023 The Chromium Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "content/browser/preloading/prerender/devtools_prerender_attempt.h"
6
7#include "base/check_op.h"
8#include "content/browser/devtools/devtools_instrumentation.h"
9
10namespace content {
11
12void DevToolsPrerenderAttempt::SetTriggeringOutcome(
13 const PrerenderAttributes& attributes,
14 PreloadingTriggeringOutcome outcome) {
15 // PreloadingTriggeringOutcome::kFailure should be reported with
16 // SetFailureReason to ensure having PrerenderFinalStatus.
17 CHECK_NE(outcome, PreloadingTriggeringOutcome::kFailure);
18
19 if (!attributes.initiator_devtools_navigation_token.has_value()) {
20 return;
21 }
22
23 devtools_instrumentation::DidUpdatePrerenderStatus(
24 attributes.initiator_frame_tree_node_id,
25 attributes.initiator_devtools_navigation_token.value(),
Hiroki Nakagawaeeecc56e2025-03-27 02:57:3026 attributes.prerendering_url, attributes.GetTargetHint(),
kenoss8422db52024-12-05 03:26:1727 attributes.preload_pipeline_info->id(), outcome,
Arthur Sonzognic686e8f2024-01-11 08:36:3728 /*prerender_status=*/std::nullopt,
29 /*disallowed_mojo_interface=*/std::nullopt,
Miina Koyamad0e41f32023-11-13 06:50:0930 /*mismatched_headers=*/nullptr);
kenod930e48032023-05-18 11:38:4031}
32
33void DevToolsPrerenderAttempt::SetFailureReason(
34 const PrerenderAttributes& attributes,
kenoe16970c2023-06-26 10:59:2935 PrerenderFinalStatus prerender_status) {
36 // Ensured by PrerenderCancellationReason.
37 CHECK_NE(prerender_status, PrerenderFinalStatus::kMojoBinderPolicy);
Miina Koyama89b815042023-10-31 08:20:1238 CHECK_NE(prerender_status,
39 PrerenderFinalStatus::kActivationNavigationParameterMismatch);
kenoe16970c2023-06-26 10:59:2940
kenod930e48032023-05-18 11:38:4041 if (!attributes.initiator_devtools_navigation_token.has_value()) {
42 return;
43 }
44
45 devtools_instrumentation::DidUpdatePrerenderStatus(
46 attributes.initiator_frame_tree_node_id,
47 attributes.initiator_devtools_navigation_token.value(),
Hiroki Nakagawaeeecc56e2025-03-27 02:57:3048 attributes.prerendering_url, attributes.GetTargetHint(),
kenoss8422db52024-12-05 03:26:1749 attributes.preload_pipeline_info->id(),
Hiroki Nakagawa134ada62023-10-16 10:50:2650 PreloadingTriggeringOutcome::kFailure, prerender_status,
Arthur Sonzognic686e8f2024-01-11 08:36:3751 /*disallowed_mojo_interface=*/std::nullopt,
Miina Koyamad0e41f32023-11-13 06:50:0952 /*mismatched_headers=*/nullptr);
kenoe16970c2023-06-26 10:59:2953}
54
55void DevToolsPrerenderAttempt::SetFailureReason(
56 const PrerenderAttributes& attributes,
57 const PrerenderCancellationReason& reason) {
58 PrerenderFinalStatus prerender_status = reason.final_status();
Arthur Sonzognic686e8f2024-01-11 08:36:3759 std::optional<std::string> disallowed_mojo_interface;
Miina Koyamad0e41f32023-11-13 06:50:0960 const std::vector<PrerenderMismatchedHeaders>* mismatched_headers = nullptr;
kenoe16970c2023-06-26 10:59:2961
62 // Ensured by PrerenderCancellationReason.
Miina Koyama89b815042023-10-31 08:20:1263 switch (prerender_status) {
64 case PrerenderFinalStatus::kMojoBinderPolicy:
65 disallowed_mojo_interface = reason.DisallowedMojoInterface();
66 CHECK(disallowed_mojo_interface.has_value());
67 break;
68 case PrerenderFinalStatus::kActivationNavigationParameterMismatch:
69 mismatched_headers = reason.GetPrerenderMismatchedHeaders();
70 break;
71 default:
72 break;
73 }
kenoe16970c2023-06-26 10:59:2974
75 if (!attributes.initiator_devtools_navigation_token.has_value()) {
76 return;
77 }
78
79 devtools_instrumentation::DidUpdatePrerenderStatus(
80 attributes.initiator_frame_tree_node_id,
81 attributes.initiator_devtools_navigation_token.value(),
Hiroki Nakagawaeeecc56e2025-03-27 02:57:3082 attributes.prerendering_url, attributes.GetTargetHint(),
kenoss8422db52024-12-05 03:26:1783 attributes.preload_pipeline_info->id(),
Hiroki Nakagawa134ada62023-10-16 10:50:2684 PreloadingTriggeringOutcome::kFailure, prerender_status,
Miina Koyamad0e41f32023-11-13 06:50:0985 disallowed_mojo_interface, mismatched_headers);
kenod930e48032023-05-18 11:38:4086}
87
88} // namespace content