Commit 03b4cdff authored by Takeshi Yoshino's avatar Takeshi Yoshino Committed by Commit Bot

Clean up redirect handling logic in DocumentThreadableLoader

Removing the variable allow_redirect and calling
DispatchDidFailAccessControlCheck() immediately on each of check
points would be more readable.

Bug: 427429
Change-Id: Ib8d98c274104e2d5d6c65af123502b872a6658d7
Reviewed-on: https://chromium-review.googlesource.com/544646
Commit-Queue: Takeshi Yoshino <tyoshino@chromium.org>
Reviewed-by: default avatarYutaka Hirano <yhirano@chromium.org>
Cr-Commit-Position: refs/heads/master@{#490744}
parent 40de2a14
......@@ -624,29 +624,30 @@ bool DocumentThreadableLoader::RedirectReceived(
redirect_response, resource);
}
String access_control_error_description;
CrossOriginAccessControl::RedirectStatus redirect_status =
CrossOriginAccessControl::CheckRedirectLocation(new_url);
bool allow_redirect =
redirect_status == CrossOriginAccessControl::kRedirectSuccess;
if (!allow_redirect) {
if (redirect_status != CrossOriginAccessControl::kRedirectSuccess) {
StringBuilder builder;
builder.Append("Redirect from '");
builder.Append(original_url.GetString());
builder.Append("' has been blocked by CORS policy: ");
CrossOriginAccessControl::RedirectErrorString(builder, redirect_status,
new_url);
access_control_error_description = builder.ToString();
} else if (cors_flag_) {
DispatchDidFailAccessControlCheck(
ResourceError::CancelledDueToAccessCheckError(
original_url, ResourceRequestBlockedReason::kOther,
builder.ToString()));
return false;
}
if (cors_flag_) {
// The redirect response must pass the access control check if the CORS
// flag is set.
CrossOriginAccessControl::AccessStatus cors_status =
CrossOriginAccessControl::CheckAccess(
redirect_response, new_request.GetFetchCredentialsMode(),
GetSecurityOrigin());
allow_redirect = cors_status == CrossOriginAccessControl::kAccessAllowed;
if (!allow_redirect) {
if (cors_status != CrossOriginAccessControl::kAccessAllowed) {
StringBuilder builder;
builder.Append("Redirect from '");
builder.Append(original_url.GetString());
......@@ -656,18 +657,14 @@ bool DocumentThreadableLoader::RedirectReceived(
CrossOriginAccessControl::AccessControlErrorString(
builder, cors_status, redirect_response, GetSecurityOrigin(),
request_context_);
access_control_error_description = builder.ToString();
DispatchDidFailAccessControlCheck(
ResourceError::CancelledDueToAccessCheckError(
original_url, ResourceRequestBlockedReason::kOther,
builder.ToString()));
return false;
}
}
if (!allow_redirect) {
DispatchDidFailAccessControlCheck(
ResourceError::CancelledDueToAccessCheckError(
original_url, ResourceRequestBlockedReason::kOther,
access_control_error_description));
return false;
}
client_->DidReceiveRedirectTo(new_url);
// FIXME: consider combining this with CORS redirect handling performed by
......
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