|  | // Copyright 2023 The Chromium Authors | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef CONTENT_BROWSER_RENDERER_HOST_SYSTEM_ENTROPY_UTILS_H_ | 
|  | #define CONTENT_BROWSER_RENDERER_HOST_SYSTEM_ENTROPY_UTILS_H_ | 
|  |  | 
|  | #include "content/browser/renderer_host/frame_tree_node.h" | 
|  | #include "content/public/common/content_client.h" | 
|  | #include "third_party/blink/public/mojom/navigation/system_entropy.mojom.h" | 
|  |  | 
|  | namespace content { | 
|  |  | 
|  | class SystemEntropyUtils { | 
|  | public: | 
|  | // Determines the current system entropy value for `frame_tree_node`. | 
|  | // | 
|  | // Returns `SystemEntropy::kHigh` for all non-off-the-record top level | 
|  | // navigations that occur between the start of the browser process up until | 
|  | // the first visible page completes loading. | 
|  | // | 
|  | // Returns `SystemEntropy::kNormal` for all off-the-record top level | 
|  | // navigations, or top level navigations that occur after the first visible | 
|  | // page has completed loading. | 
|  | // | 
|  | // Returns `SystemEntropy::kEmpty` for all framed navigations, or if the | 
|  | // `suggested_system_entropy` is `SystemEntropy::kEmpty`. | 
|  | static blink::mojom::SystemEntropy ComputeSystemEntropyForFrameTreeNode( | 
|  | FrameTreeNode* frame_tree_node, | 
|  | blink::mojom::SystemEntropy suggested_system_entropy) { | 
|  | // If the suggested system entropy is `SystemEntropy::kEmpty`, or this is | 
|  | // a framed navigation, return `SystemEntropy::kEmpty`. | 
|  | if (suggested_system_entropy == blink::mojom::SystemEntropy::kEmpty || | 
|  | !frame_tree_node->IsOutermostMainFrame()) { | 
|  | return blink::mojom::SystemEntropy::kEmpty; | 
|  | } | 
|  |  | 
|  | // Off-the-record navigations always return `SystemEntropy::kNormal`. | 
|  | if (frame_tree_node->navigator() | 
|  | .controller() | 
|  | .GetBrowserContext() | 
|  | ->IsOffTheRecord()) { | 
|  | return blink::mojom::SystemEntropy::kNormal; | 
|  | } | 
|  |  | 
|  | // During browser startup, return `SystemEntropy::kHigh`. | 
|  | if (!GetContentClient()->browser()->IsBrowserStartupComplete()) { | 
|  | return blink::mojom::SystemEntropy::kHigh; | 
|  | } | 
|  |  | 
|  | CHECK_NE(suggested_system_entropy, blink::mojom::SystemEntropy::kEmpty); | 
|  | return suggested_system_entropy; | 
|  | } | 
|  | }; | 
|  | }  // namespace content | 
|  |  | 
|  | #endif  // CONTENT_BROWSER_RENDERER_HOST_SYSTEM_ENTROPY_UTILS_H_ |