Commit 860ac88c authored by Rakina Zata Amni's avatar Rakina Zata Amni Committed by Chromium LUCI CQ

Add flag for VerifyThatBrowserAndRendererCalculatedDidCommitParamsMatch

With a flag, we can control which params we verify in which releases, so
we won't block releases if we found inconsistencies with certain params.

Bug: 1155414
Change-Id: I1fb608e20f1bc22025b12a5ec21d000151acb21c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2574649
Commit-Queue: Rakina Zata Amni <rakina@chromium.org>
Reviewed-by: default avatarMatt Falkenhagen <falken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#834256}
parent 9065a120
......@@ -9437,11 +9437,26 @@ bool CalculateURLIsUnreachable(
return net_error_code != net::OK || has_history_url_for_data_url;
}
bool ShouldVerify(const std::string& param) {
#if DCHECK_IS_ON()
return true;
#else
return GetFieldTrialParamByFeatureAsBool(features::kVerifyDidCommitParams,
param, false);
#endif
}
void RenderFrameHostImpl::
VerifyThatBrowserAndRendererCalculatedDidCommitParamsMatch(
NavigationRequest* request,
const mojom::DidCommitProvisionalLoadParams& params,
bool is_same_document_navigation) {
#if !DCHECK_IS_ON()
// Only check for the flag if DCHECK is not enabled, so that we will always
// verify the params for tests.
if (!base::FeatureList::IsEnabled(features::kVerifyDidCommitParams))
return;
#endif
// Check if these values from DidCommitProvisionalLoadParams sent by the
// renderer can be calculated entirely in the browser side:
// - intended_as_new_entry
......@@ -9474,12 +9489,18 @@ void RenderFrameHostImpl::
is_same_document_navigation ? is_overriding_user_agent_
: (request->IsOverridingUserAgent() &&
frame_tree_node_->IsMainFrame());
if (request->commit_params().intended_as_new_entry ==
params.intended_as_new_entry &&
request->common_params().method == params.method &&
browser_url_is_unreachable == params.url_is_unreachable &&
base_url_expectations_match && browser_post_id == params.post_id &&
browser_is_overriding_user_agent == params.is_overriding_user_agent) {
if ((!ShouldVerify("intended_as_new_entry") ||
request->commit_params().intended_as_new_entry ==
params.intended_as_new_entry) &&
(!ShouldVerify("method") ||
request->common_params().method == params.method) &&
(!ShouldVerify("url_is_unreachable") ||
browser_url_is_unreachable == params.url_is_unreachable) &&
(!ShouldVerify("base_url") || base_url_expectations_match) &&
(!ShouldVerify("post_id") || browser_post_id == params.post_id) &&
(!ShouldVerify("is_overriding_user_agent") ||
browser_is_overriding_user_agent == params.is_overriding_user_agent)) {
return;
}
......
......@@ -725,6 +725,11 @@ const base::Feature kUserActivationSameOriginVisibility{
const base::Feature kUserAgentClientHint{"UserAgentClientHint",
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables comparing browser and renderer's DidCommitProvisionalLoadParams in
// RenderFrameHostImpl::VerifyThatBrowserAndRendererCalculatedDidCommitParamsMatch.
const base::Feature kVerifyDidCommitParams{"VerifyDidCommitParams",
base::FEATURE_DISABLED_BY_DEFAULT};
// Controls whether the <video>.getVideoPlaybackQuality() API is enabled.
const base::Feature kVideoPlaybackQuality{"VideoPlaybackQuality",
base::FEATURE_ENABLED_BY_DEFAULT};
......
......@@ -174,6 +174,7 @@ CONTENT_EXPORT extern const base::Feature kTrustedDOMTypes;
CONTENT_EXPORT extern const base::Feature kUseFramePriorityInRenderProcessHost;
CONTENT_EXPORT extern const base::Feature kUserActivationSameOriginVisibility;
CONTENT_EXPORT extern const base::Feature kUserAgentClientHint;
CONTENT_EXPORT extern const base::Feature kVerifyDidCommitParams;
CONTENT_EXPORT extern const base::Feature kVideoPlaybackQuality;
CONTENT_EXPORT extern const base::Feature kV8VmFuture;
CONTENT_EXPORT extern const base::Feature kWebAppManifestDisplayOverride;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment