Avi Drissman | 4e1b7bc3 | 2022-09-15 14:03:50 | [diff] [blame] | 1 | // Copyright 2021 The Chromium Authors |
Lingqi Chi | ca31e24 | 2021-09-24 03:54:16 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
Sreeja Kamishetty | c227f7a | 2022-07-08 22:33:15 | [diff] [blame] | 5 | #include "content/browser/preloading/prerender/prerender_attributes.h" |
Asami Doi | cf0f164 | 2021-11-25 05:00:26 | [diff] [blame] | 6 | |
Liviu Tinta | cf066d5 | 2024-07-24 16:00:55 | [diff] [blame] | 7 | #include <optional> |
| 8 | |
Lingqi Chi | 8ebe71e | 2024-10-22 07:08:39 | [diff] [blame] | 9 | #include "content/browser/renderer_host/render_frame_host_impl.h" |
| 10 | #include "content/public/browser/render_frame_host.h" |
Lingqi Chi | ca31e24 | 2021-09-24 03:54:16 | [diff] [blame] | 11 | #include "third_party/perfetto/include/perfetto/tracing/traced_value.h" |
| 12 | |
| 13 | namespace content { |
| 14 | |
| 15 | void PrerenderAttributes::WriteIntoTrace( |
| 16 | perfetto::TracedValue trace_context) const { |
| 17 | auto dict = std::move(trace_context).WriteDictionary(); |
Robert Lin | d75062bf | 2021-10-28 12:50:55 | [diff] [blame] | 18 | dict.Add("url", prerendering_url); |
Lingqi Chi | ca31e24 | 2021-09-24 03:54:16 | [diff] [blame] | 19 | dict.Add("trigger_type", trigger_type); |
| 20 | } |
| 21 | |
Robert Lin | d75062bf | 2021-10-28 12:50:55 | [diff] [blame] | 22 | PrerenderAttributes::PrerenderAttributes( |
| 23 | const GURL& prerendering_url, |
Kouhei Ueno | 3f37992b | 2023-11-09 23:29:02 | [diff] [blame] | 24 | PreloadingTriggerType trigger_type, |
Asami Doi | 0240627 | 2021-11-12 05:01:44 | [diff] [blame] | 25 | const std::string& embedder_histogram_suffix, |
Hiroki Nakagawa | eeecc56e | 2025-03-27 02:57:30 | [diff] [blame] | 26 | std::optional<SpeculationRulesParams> speculation_rules_params, |
Robert Lin | d75062bf | 2021-10-28 12:50:55 | [diff] [blame] | 27 | Referrer referrer, |
Rulong Chen(陈汝龙) | bf12169c | 2024-12-16 05:38:16 | [diff] [blame] | 28 | std::optional<net::HttpNoVarySearchData> no_vary_search_hint, |
Lingqi Chi | 8ebe71e | 2024-10-22 07:08:39 | [diff] [blame] | 29 | RenderFrameHost* initiator_render_frame_host, |
Hiroki Nakagawa | b930733e | 2023-01-04 16:40:52 | [diff] [blame] | 30 | base::WeakPtr<WebContents> initiator_web_contents, |
Lingqi Chi | 21d9feb | 2022-02-02 09:42:18 | [diff] [blame] | 31 | ui::PageTransition transition_type, |
Taiyo Mizuhashi | bc91f80 | 2024-06-20 19:37:22 | [diff] [blame] | 32 | bool should_warm_up_compositor, |
Lingqi Chi | a2efa8c | 2024-11-08 10:20:29 | [diff] [blame] | 33 | bool should_prepare_paint_tree, |
Lingqi Chi | bc88ab5 | 2025-07-24 00:54:14 | [diff] [blame] | 34 | bool should_pause_javascript_execution, |
Liviu Tinta | cf066d5 | 2024-07-24 16:00:55 | [diff] [blame] | 35 | base::RepeatingCallback<bool(const GURL&, |
| 36 | const std::optional<UrlMatchType>&)> |
| 37 | url_match_predicate, |
Arthur Sonzogni | fd1e08d | 2024-03-05 15:59:36 | [diff] [blame] | 38 | base::RepeatingCallback<void(NavigationHandle&)> |
HuanPo Lin | 2ebb36c | 2023-10-06 01:48:48 | [diff] [blame] | 39 | prerender_navigation_handle_callback, |
Jiacheng Guo | ea20d39 | 2025-07-07 01:08:14 | [diff] [blame] | 40 | scoped_refptr<PreloadPipelineInfoImpl> preload_pipeline_info, |
| 41 | bool allow_reuse) |
Robert Lin | d75062bf | 2021-10-28 12:50:55 | [diff] [blame] | 42 | : prerendering_url(prerendering_url), |
| 43 | trigger_type(trigger_type), |
Asami Doi | 0240627 | 2021-11-12 05:01:44 | [diff] [blame] | 44 | embedder_histogram_suffix(embedder_histogram_suffix), |
Hiroki Nakagawa | eeecc56e | 2025-03-27 02:57:30 | [diff] [blame] | 45 | speculation_rules_params(std::move(speculation_rules_params)), |
Kevin McNee | d0c35522 | 2024-04-30 17:46:28 | [diff] [blame] | 46 | referrer(std::move(referrer)), |
Rulong Chen(陈汝龙) | bf12169c | 2024-12-16 05:38:16 | [diff] [blame] | 47 | no_vary_search_hint(std::move(no_vary_search_hint)), |
Hiroki Nakagawa | b930733e | 2023-01-04 16:40:52 | [diff] [blame] | 48 | initiator_web_contents(std::move(initiator_web_contents)), |
Lingqi Chi | 21d9feb | 2022-02-02 09:42:18 | [diff] [blame] | 49 | transition_type(transition_type), |
Taiyo Mizuhashi | bc91f80 | 2024-06-20 19:37:22 | [diff] [blame] | 50 | should_warm_up_compositor(should_warm_up_compositor), |
Lingqi Chi | a2efa8c | 2024-11-08 10:20:29 | [diff] [blame] | 51 | should_prepare_paint_tree(should_prepare_paint_tree), |
Lingqi Chi | bc88ab5 | 2025-07-24 00:54:14 | [diff] [blame] | 52 | should_pause_javascript_execution(should_pause_javascript_execution), |
Robert Lin | a5f5ca7 | 2023-03-23 02:44:48 | [diff] [blame] | 53 | url_match_predicate(std::move(url_match_predicate)), |
HuanPo Lin | 2ebb36c | 2023-10-06 01:48:48 | [diff] [blame] | 54 | prerender_navigation_handle_callback( |
| 55 | std::move(prerender_navigation_handle_callback)), |
Jiacheng Guo | ea20d39 | 2025-07-07 01:08:14 | [diff] [blame] | 56 | preload_pipeline_info(std::move(preload_pipeline_info)), |
| 57 | allow_reuse(allow_reuse) { |
Lingqi Chi | 8ebe71e | 2024-10-22 07:08:39 | [diff] [blame] | 58 | if (initiator_render_frame_host) { |
| 59 | initiator_origin = initiator_render_frame_host->GetLastCommittedOrigin(); |
Emily Andrews | d15fd76 | 2024-12-10 20:41:54 | [diff] [blame] | 60 | initiator_process_id = |
| 61 | initiator_render_frame_host->GetProcess()->GetDeprecatedID(); |
Lingqi Chi | 8ebe71e | 2024-10-22 07:08:39 | [diff] [blame] | 62 | initiator_frame_token = initiator_render_frame_host->GetFrameToken(); |
| 63 | initiator_frame_tree_node_id = |
| 64 | initiator_render_frame_host->GetFrameTreeNodeId(); |
| 65 | initiator_ukm_id = initiator_render_frame_host->GetPageUkmSourceId(); |
| 66 | auto* rfhi = static_cast<RenderFrameHostImpl*>(initiator_render_frame_host); |
| 67 | initiator_devtools_navigation_token = rfhi->GetDevToolsNavigationToken(); |
| 68 | } |
| 69 | |
Robert Lin | a5f5ca7 | 2023-03-23 02:44:48 | [diff] [blame] | 70 | CHECK(!IsBrowserInitiated() || |
| 71 | !initiator_devtools_navigation_token.has_value()); |
Hiroki Nakagawa | eeecc56e | 2025-03-27 02:57:30 | [diff] [blame] | 72 | CHECK(!IsBrowserInitiated() || !this->speculation_rules_params.has_value()); |
Robert Lin | a5f5ca7 | 2023-03-23 02:44:48 | [diff] [blame] | 73 | } |
Robert Lin | d75062bf | 2021-10-28 12:50:55 | [diff] [blame] | 74 | |
| 75 | PrerenderAttributes::~PrerenderAttributes() = default; |
Hiroki Nakagawa | eeecc56e | 2025-03-27 02:57:30 | [diff] [blame] | 76 | |
Kevin McNee | d0c35522 | 2024-04-30 17:46:28 | [diff] [blame] | 77 | PrerenderAttributes::PrerenderAttributes(const PrerenderAttributes&) = default; |
| 78 | PrerenderAttributes& PrerenderAttributes::operator=( |
| 79 | const PrerenderAttributes&) = default; |
Hiroki Nakagawa | eeecc56e | 2025-03-27 02:57:30 | [diff] [blame] | 80 | PrerenderAttributes::PrerenderAttributes(PrerenderAttributes&&) noexcept = |
Kevin McNee | d0c35522 | 2024-04-30 17:46:28 | [diff] [blame] | 81 | default; |
Hiroki Nakagawa | eeecc56e | 2025-03-27 02:57:30 | [diff] [blame] | 82 | PrerenderAttributes& PrerenderAttributes::operator=( |
| 83 | PrerenderAttributes&&) noexcept = default; |
| 84 | |
| 85 | std::optional<blink::mojom::SpeculationTargetHint> |
| 86 | PrerenderAttributes::GetTargetHint() const { |
| 87 | return speculation_rules_params.has_value() |
| 88 | ? std::make_optional(speculation_rules_params->target_hint) |
| 89 | : std::nullopt; |
| 90 | } |
| 91 | |
| 92 | std::optional<blink::mojom::SpeculationEagerness> |
| 93 | PrerenderAttributes::GetEagerness() const { |
| 94 | return speculation_rules_params.has_value() |
| 95 | ? std::make_optional(speculation_rules_params->eagerness) |
| 96 | : std::nullopt; |
| 97 | } |
Robert Lin | d75062bf | 2021-10-28 12:50:55 | [diff] [blame] | 98 | |
Hiroki Nakagawa | d60f9ff | 2025-03-27 04:20:27 | [diff] [blame] | 99 | std::optional<SpeculationRulesTags> PrerenderAttributes::GetTags() const { |
Hiroki Nakagawa | c91e3622 | 2025-05-02 11:00:27 | [diff] [blame] | 100 | return speculation_rules_params.has_value() |
| 101 | ? std::make_optional(speculation_rules_params->tags) |
| 102 | : std::nullopt; |
Hiroki Nakagawa | d60f9ff | 2025-03-27 04:20:27 | [diff] [blame] | 103 | } |
| 104 | |
Lingqi Chi | ca31e24 | 2021-09-24 03:54:16 | [diff] [blame] | 105 | } // namespace content |