keno | d930e4803 | 2023-05-18 11:38:40 | [diff] [blame] | 1 | // 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 | |
| 10 | namespace content { |
| 11 | |
| 12 | void 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 Nakagawa | eeecc56e | 2025-03-27 02:57:30 | [diff] [blame] | 26 | attributes.prerendering_url, attributes.GetTargetHint(), |
kenoss | 8422db5 | 2024-12-05 03:26:17 | [diff] [blame] | 27 | attributes.preload_pipeline_info->id(), outcome, |
Arthur Sonzogni | c686e8f | 2024-01-11 08:36:37 | [diff] [blame] | 28 | /*prerender_status=*/std::nullopt, |
| 29 | /*disallowed_mojo_interface=*/std::nullopt, |
Miina Koyama | d0e41f3 | 2023-11-13 06:50:09 | [diff] [blame] | 30 | /*mismatched_headers=*/nullptr); |
keno | d930e4803 | 2023-05-18 11:38:40 | [diff] [blame] | 31 | } |
| 32 | |
| 33 | void DevToolsPrerenderAttempt::SetFailureReason( |
| 34 | const PrerenderAttributes& attributes, |
keno | e16970c | 2023-06-26 10:59:29 | [diff] [blame] | 35 | PrerenderFinalStatus prerender_status) { |
| 36 | // Ensured by PrerenderCancellationReason. |
| 37 | CHECK_NE(prerender_status, PrerenderFinalStatus::kMojoBinderPolicy); |
Miina Koyama | 89b81504 | 2023-10-31 08:20:12 | [diff] [blame] | 38 | CHECK_NE(prerender_status, |
| 39 | PrerenderFinalStatus::kActivationNavigationParameterMismatch); |
keno | e16970c | 2023-06-26 10:59:29 | [diff] [blame] | 40 | |
keno | d930e4803 | 2023-05-18 11:38:40 | [diff] [blame] | 41 | 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 Nakagawa | eeecc56e | 2025-03-27 02:57:30 | [diff] [blame] | 48 | attributes.prerendering_url, attributes.GetTargetHint(), |
kenoss | 8422db5 | 2024-12-05 03:26:17 | [diff] [blame] | 49 | attributes.preload_pipeline_info->id(), |
Hiroki Nakagawa | 134ada6 | 2023-10-16 10:50:26 | [diff] [blame] | 50 | PreloadingTriggeringOutcome::kFailure, prerender_status, |
Arthur Sonzogni | c686e8f | 2024-01-11 08:36:37 | [diff] [blame] | 51 | /*disallowed_mojo_interface=*/std::nullopt, |
Miina Koyama | d0e41f3 | 2023-11-13 06:50:09 | [diff] [blame] | 52 | /*mismatched_headers=*/nullptr); |
keno | e16970c | 2023-06-26 10:59:29 | [diff] [blame] | 53 | } |
| 54 | |
| 55 | void DevToolsPrerenderAttempt::SetFailureReason( |
| 56 | const PrerenderAttributes& attributes, |
| 57 | const PrerenderCancellationReason& reason) { |
| 58 | PrerenderFinalStatus prerender_status = reason.final_status(); |
Arthur Sonzogni | c686e8f | 2024-01-11 08:36:37 | [diff] [blame] | 59 | std::optional<std::string> disallowed_mojo_interface; |
Miina Koyama | d0e41f3 | 2023-11-13 06:50:09 | [diff] [blame] | 60 | const std::vector<PrerenderMismatchedHeaders>* mismatched_headers = nullptr; |
keno | e16970c | 2023-06-26 10:59:29 | [diff] [blame] | 61 | |
| 62 | // Ensured by PrerenderCancellationReason. |
Miina Koyama | 89b81504 | 2023-10-31 08:20:12 | [diff] [blame] | 63 | 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 | } |
keno | e16970c | 2023-06-26 10:59:29 | [diff] [blame] | 74 | |
| 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 Nakagawa | eeecc56e | 2025-03-27 02:57:30 | [diff] [blame] | 82 | attributes.prerendering_url, attributes.GetTargetHint(), |
kenoss | 8422db5 | 2024-12-05 03:26:17 | [diff] [blame] | 83 | attributes.preload_pipeline_info->id(), |
Hiroki Nakagawa | 134ada6 | 2023-10-16 10:50:26 | [diff] [blame] | 84 | PreloadingTriggeringOutcome::kFailure, prerender_status, |
Miina Koyama | d0e41f3 | 2023-11-13 06:50:09 | [diff] [blame] | 85 | disallowed_mojo_interface, mismatched_headers); |
keno | d930e4803 | 2023-05-18 11:38:40 | [diff] [blame] | 86 | } |
| 87 | |
| 88 | } // namespace content |