Commit a62f9131 authored by Yutaka Hirano's avatar Yutaka Hirano Committed by Commit Bot

[Fetch API] Fix redirect leak on "no-cors" requests

The spec issue is now fixed, and this CL follows the spec change[1].

1: https://github.com/whatwg/fetch/commit/14858d3e9402285a7ff3b5e47a22896ff3adc95d

Bug: 791324
Change-Id: Ic3e3955f43578b38fc44a5a6b2a1b43d56a2becb
Reviewed-on: https://chromium-review.googlesource.com/1023613Reviewed-by: default avatarTsuyoshi Horo <horo@chromium.org>
Commit-Queue: Yutaka Hirano <yhirano@chromium.org>
Cr-Commit-Position: refs/heads/master@{#552964}
parent 79ca9100
This is a testharness.js-based test.
Found 60 tests; 55 PASS, 5 FAIL, 0 TIMEOUT, 0 NOTRUN.
PASS same-origin redirect 301 in error redirect and cors mode
PASS same-origin redirect 301 in error redirect and no-cors mode
PASS same-origin redirect 301 in manual redirect and cors mode
PASS same-origin redirect 301 in manual redirect and no-cors mode
PASS same-origin redirect 301 in follow redirect and cors mode
PASS same-origin redirect 301 in follow redirect and no-cors mode
PASS same-origin redirect 302 in error redirect and cors mode
PASS same-origin redirect 302 in error redirect and no-cors mode
PASS same-origin redirect 302 in manual redirect and cors mode
PASS same-origin redirect 302 in manual redirect and no-cors mode
PASS same-origin redirect 302 in follow redirect and cors mode
PASS same-origin redirect 302 in follow redirect and no-cors mode
PASS same-origin redirect 303 in error redirect and cors mode
PASS same-origin redirect 303 in error redirect and no-cors mode
PASS same-origin redirect 303 in manual redirect and cors mode
PASS same-origin redirect 303 in manual redirect and no-cors mode
PASS same-origin redirect 303 in follow redirect and cors mode
PASS same-origin redirect 303 in follow redirect and no-cors mode
PASS same-origin redirect 307 in error redirect and cors mode
PASS same-origin redirect 307 in error redirect and no-cors mode
PASS same-origin redirect 307 in manual redirect and cors mode
PASS same-origin redirect 307 in manual redirect and no-cors mode
PASS same-origin redirect 307 in follow redirect and cors mode
PASS same-origin redirect 307 in follow redirect and no-cors mode
PASS same-origin redirect 308 in error redirect and cors mode
PASS same-origin redirect 308 in error redirect and no-cors mode
PASS same-origin redirect 308 in manual redirect and cors mode
PASS same-origin redirect 308 in manual redirect and no-cors mode
PASS same-origin redirect 308 in follow redirect and cors mode
PASS same-origin redirect 308 in follow redirect and no-cors mode
PASS cross-origin redirect 301 in error redirect and cors mode
PASS cross-origin redirect 301 in error redirect and no-cors mode
PASS cross-origin redirect 301 in manual redirect and cors mode
FAIL cross-origin redirect 301 in manual redirect and no-cors mode assert_unreached: Should have rejected: undefined Reached unreachable code
PASS cross-origin redirect 301 in follow redirect and cors mode
PASS cross-origin redirect 301 in follow redirect and no-cors mode
PASS cross-origin redirect 302 in error redirect and cors mode
PASS cross-origin redirect 302 in error redirect and no-cors mode
PASS cross-origin redirect 302 in manual redirect and cors mode
FAIL cross-origin redirect 302 in manual redirect and no-cors mode assert_unreached: Should have rejected: undefined Reached unreachable code
PASS cross-origin redirect 302 in follow redirect and cors mode
PASS cross-origin redirect 302 in follow redirect and no-cors mode
PASS cross-origin redirect 303 in error redirect and cors mode
PASS cross-origin redirect 303 in error redirect and no-cors mode
PASS cross-origin redirect 303 in manual redirect and cors mode
FAIL cross-origin redirect 303 in manual redirect and no-cors mode assert_unreached: Should have rejected: undefined Reached unreachable code
PASS cross-origin redirect 303 in follow redirect and cors mode
PASS cross-origin redirect 303 in follow redirect and no-cors mode
PASS cross-origin redirect 307 in error redirect and cors mode
PASS cross-origin redirect 307 in error redirect and no-cors mode
PASS cross-origin redirect 307 in manual redirect and cors mode
FAIL cross-origin redirect 307 in manual redirect and no-cors mode assert_unreached: Should have rejected: undefined Reached unreachable code
PASS cross-origin redirect 307 in follow redirect and cors mode
PASS cross-origin redirect 307 in follow redirect and no-cors mode
PASS cross-origin redirect 308 in error redirect and cors mode
PASS cross-origin redirect 308 in error redirect and no-cors mode
PASS cross-origin redirect 308 in manual redirect and cors mode
FAIL cross-origin redirect 308 in manual redirect and no-cors mode assert_unreached: Should have rejected: undefined Reached unreachable code
PASS cross-origin redirect 308 in follow redirect and cors mode
PASS cross-origin redirect 308 in follow redirect and no-cors mode
Harness: the test ran to completion.
This is a testharness.js-based test.
Found 60 tests; 55 PASS, 5 FAIL, 0 TIMEOUT, 0 NOTRUN.
PASS same-origin redirect 301 in error redirect and cors mode
PASS same-origin redirect 301 in error redirect and no-cors mode
PASS same-origin redirect 301 in manual redirect and cors mode
PASS same-origin redirect 301 in manual redirect and no-cors mode
PASS same-origin redirect 301 in follow redirect and cors mode
PASS same-origin redirect 301 in follow redirect and no-cors mode
PASS same-origin redirect 302 in error redirect and cors mode
PASS same-origin redirect 302 in error redirect and no-cors mode
PASS same-origin redirect 302 in manual redirect and cors mode
PASS same-origin redirect 302 in manual redirect and no-cors mode
PASS same-origin redirect 302 in follow redirect and cors mode
PASS same-origin redirect 302 in follow redirect and no-cors mode
PASS same-origin redirect 303 in error redirect and cors mode
PASS same-origin redirect 303 in error redirect and no-cors mode
PASS same-origin redirect 303 in manual redirect and cors mode
PASS same-origin redirect 303 in manual redirect and no-cors mode
PASS same-origin redirect 303 in follow redirect and cors mode
PASS same-origin redirect 303 in follow redirect and no-cors mode
PASS same-origin redirect 307 in error redirect and cors mode
PASS same-origin redirect 307 in error redirect and no-cors mode
PASS same-origin redirect 307 in manual redirect and cors mode
PASS same-origin redirect 307 in manual redirect and no-cors mode
PASS same-origin redirect 307 in follow redirect and cors mode
PASS same-origin redirect 307 in follow redirect and no-cors mode
PASS same-origin redirect 308 in error redirect and cors mode
PASS same-origin redirect 308 in error redirect and no-cors mode
PASS same-origin redirect 308 in manual redirect and cors mode
PASS same-origin redirect 308 in manual redirect and no-cors mode
PASS same-origin redirect 308 in follow redirect and cors mode
PASS same-origin redirect 308 in follow redirect and no-cors mode
PASS cross-origin redirect 301 in error redirect and cors mode
PASS cross-origin redirect 301 in error redirect and no-cors mode
PASS cross-origin redirect 301 in manual redirect and cors mode
FAIL cross-origin redirect 301 in manual redirect and no-cors mode assert_unreached: Should have rejected: undefined Reached unreachable code
PASS cross-origin redirect 301 in follow redirect and cors mode
PASS cross-origin redirect 301 in follow redirect and no-cors mode
PASS cross-origin redirect 302 in error redirect and cors mode
PASS cross-origin redirect 302 in error redirect and no-cors mode
PASS cross-origin redirect 302 in manual redirect and cors mode
FAIL cross-origin redirect 302 in manual redirect and no-cors mode assert_unreached: Should have rejected: undefined Reached unreachable code
PASS cross-origin redirect 302 in follow redirect and cors mode
PASS cross-origin redirect 302 in follow redirect and no-cors mode
PASS cross-origin redirect 303 in error redirect and cors mode
PASS cross-origin redirect 303 in error redirect and no-cors mode
PASS cross-origin redirect 303 in manual redirect and cors mode
FAIL cross-origin redirect 303 in manual redirect and no-cors mode assert_unreached: Should have rejected: undefined Reached unreachable code
PASS cross-origin redirect 303 in follow redirect and cors mode
PASS cross-origin redirect 303 in follow redirect and no-cors mode
PASS cross-origin redirect 307 in error redirect and cors mode
PASS cross-origin redirect 307 in error redirect and no-cors mode
PASS cross-origin redirect 307 in manual redirect and cors mode
FAIL cross-origin redirect 307 in manual redirect and no-cors mode assert_unreached: Should have rejected: undefined Reached unreachable code
PASS cross-origin redirect 307 in follow redirect and cors mode
PASS cross-origin redirect 307 in follow redirect and no-cors mode
PASS cross-origin redirect 308 in error redirect and cors mode
PASS cross-origin redirect 308 in error redirect and no-cors mode
PASS cross-origin redirect 308 in manual redirect and cors mode
FAIL cross-origin redirect 308 in manual redirect and no-cors mode assert_unreached: Should have rejected: undefined Reached unreachable code
PASS cross-origin redirect 308 in follow redirect and cors mode
PASS cross-origin redirect 308 in follow redirect and no-cors mode
Harness: the test ran to completion.
......@@ -653,6 +653,16 @@ void FetchManager::Loader::Start() {
// "- |request|'s mode is |no CORS|"
if (fetch_request_data_->Mode() == FetchRequestMode::kNoCORS) {
// "If |request|'s redirect mode is not |follow|, then return a network
// error.
if (fetch_request_data_->Redirect() != FetchRedirectMode::kFollow) {
PerformNetworkError("Fetch API cannot load " +
fetch_request_data_->Url().GetString() +
". Request mode is \"no-cors\" but the redirect mode "
" is not \"follow\".");
return;
}
// "Set |request|'s response tainting to |opaque|."
fetch_request_data_->SetResponseTainting(FetchRequestData::kOpaqueTainting);
// "The result of performing a scheme fetch using |request|."
......
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