Commit ca86b8af authored by horo's avatar horo Committed by Commit bot

Introduce Response.redirected attribute and add LayoutTest.

https://codereview.chromium.org/2516353002/ introduces URL list of Response.
Response.redirected returns true when the size of the list is larger than 1.

BUG=658249

Review-Url: https://codereview.chromium.org/2524703002
Cr-Commit-Position: refs/heads/master@{#437555}
parent 3387c177
...@@ -65,6 +65,14 @@ var checkFetchResponseType = function(type, url, data) { ...@@ -65,6 +65,14 @@ var checkFetchResponseType = function(type, url, data) {
type, type,
'type must match. url: ' + url); 'type must match. url: ' + url);
}; };
var checkFetchResponseRedirected = function(expected, url, data) {
assert_equals(data.fetchResult,
'resolved',
'fetchResult must be resolved. url = ' + url);
assert_equals(data.redirected,
expected,
url + ' redirected flag should match');
};
var checkURLList = function(redirectedURLList, url, data) { var checkURLList = function(redirectedURLList, url, data) {
if (!self.internals) if (!self.internals)
return; return;
...@@ -102,6 +110,8 @@ var noServerHeader = ...@@ -102,6 +110,8 @@ var noServerHeader =
var typeBasic = checkFetchResponseType.bind(this, 'basic'); var typeBasic = checkFetchResponseType.bind(this, 'basic');
var typeCors = checkFetchResponseType.bind(this, 'cors'); var typeCors = checkFetchResponseType.bind(this, 'cors');
var typeOpaque = checkFetchResponseType.bind(this, 'opaque'); var typeOpaque = checkFetchResponseType.bind(this, 'opaque');
var responseRedirected = checkFetchResponseRedirected.bind(this, true);
var responseNotRedirected = checkFetchResponseRedirected.bind(this, false);
// Functions to check the result of JSONP which is evaluated in // Functions to check the result of JSONP which is evaluated in
// thorough-iframe.html by appending <script> element. // thorough-iframe.html by appending <script> element.
...@@ -365,6 +375,7 @@ function doFetch(request) { ...@@ -365,6 +375,7 @@ function doFetch(request) {
status: response.status, status: response.status,
headers: headersToArray(response.headers), headers: headersToArray(response.headers),
type: response.type, type: response.type,
redirected: response.redirected,
urlList: self.internals ? urlList: self.internals ?
self.internals.getInternalResponseURLList(response) : self.internals.getInternalResponseURLList(response) :
[], [],
......
...@@ -29,6 +29,7 @@ promise_test(function(t) { ...@@ -29,6 +29,7 @@ promise_test(function(t) {
assert_equals(response.headers.get('Content-Type'), assert_equals(response.headers.get('Content-Type'),
'text/plain;charset=US-ASCII'); 'text/plain;charset=US-ASCII');
assert_equals(size(response.headers), 1); assert_equals(size(response.headers), 1);
assert_false(response.redirected);
if (self.internals) { if (self.internals) {
assert_array_equals( assert_array_equals(
self.internals.getInternalResponseURLList(response), self.internals.getInternalResponseURLList(response),
...@@ -68,6 +69,7 @@ promise_test(function(t) { ...@@ -68,6 +69,7 @@ promise_test(function(t) {
assert_equals(response.headers.get('Content-Type'), assert_equals(response.headers.get('Content-Type'),
'text/html;charset=utf-8'); 'text/html;charset=utf-8');
assert_equals(size(response.headers), 1); assert_equals(size(response.headers), 1);
assert_false(response.redirected);
if (self.internals) { if (self.internals) {
assert_array_equals( assert_array_equals(
self.internals.getInternalResponseURLList(response), self.internals.getInternalResponseURLList(response),
...@@ -99,6 +101,7 @@ if ('createObjectURL' in URL) { ...@@ -99,6 +101,7 @@ if ('createObjectURL' in URL) {
assert_equals(response.headers.get('Content-Type'), 'text/fox'); assert_equals(response.headers.get('Content-Type'), 'text/fox');
assert_equals(response.headers.get('Content-Length'), '3'); assert_equals(response.headers.get('Content-Length'), '3');
assert_equals(size(response.headers), 2); assert_equals(size(response.headers), 2);
assert_false(response.redirected);
if (self.internals) { if (self.internals) {
assert_array_equals( assert_array_equals(
self.internals.getInternalResponseURLList(response), [url]); self.internals.getInternalResponseURLList(response), [url]);
...@@ -136,6 +139,7 @@ promise_test(function(t) { ...@@ -136,6 +139,7 @@ promise_test(function(t) {
.then(function(response) { .then(function(response) {
assert_equals(response.status, 200); assert_equals(response.status, 200);
assert_equals(response.statusText, 'OK'); assert_equals(response.statusText, 'OK');
assert_false(response.redirected);
if (self.internals) { if (self.internals) {
assert_array_equals( assert_array_equals(
self.internals.getInternalResponseURLList(response), self.internals.getInternalResponseURLList(response),
...@@ -150,6 +154,7 @@ promise_test(function(t) { ...@@ -150,6 +154,7 @@ promise_test(function(t) {
.then(function(response) { .then(function(response) {
assert_equals(response.status, 404); assert_equals(response.status, 404);
assert_equals(response.statusText, 'Not Found'); assert_equals(response.statusText, 'Not Found');
assert_false(response.redirected);
if (self.internals) { if (self.internals) {
assert_array_equals( assert_array_equals(
self.internals.getInternalResponseURLList(response), self.internals.getInternalResponseURLList(response),
...@@ -176,6 +181,7 @@ promise_test(function(t) { ...@@ -176,6 +181,7 @@ promise_test(function(t) {
// serialized with the exclude fragment flag set, otherwise. // serialized with the exclude fragment flag set, otherwise.
assert_equals(response.url, assert_equals(response.url,
BASE_ORIGIN + '/fetch/resources/fetch-status.php?status=200'); BASE_ORIGIN + '/fetch/resources/fetch-status.php?status=200');
assert_false(response.redirected);
if (self.internals) { if (self.internals) {
assert_array_equals( assert_array_equals(
self.internals.getInternalResponseURLList(response), self.internals.getInternalResponseURLList(response),
...@@ -205,6 +211,7 @@ promise_test(function(t) { ...@@ -205,6 +211,7 @@ promise_test(function(t) {
'Response\'s url is locationURL'); 'Response\'s url is locationURL');
assert_equals(request.url, redirect_original_url, assert_equals(request.url, redirect_original_url,
'Request\'s url remains the original URL'); 'Request\'s url remains the original URL');
assert_true(response.redirected);
if (self.internals) { if (self.internals) {
assert_array_equals( assert_array_equals(
self.internals.getInternalResponseURLList(response), self.internals.getInternalResponseURLList(response),
...@@ -230,6 +237,7 @@ promise_test(function(t) { ...@@ -230,6 +237,7 @@ promise_test(function(t) {
assert_equals(response.status, 0); assert_equals(response.status, 0);
assert_equals(response.type, 'opaqueredirect'); assert_equals(response.type, 'opaqueredirect');
assert_equals(response.url, request.url); assert_equals(response.url, request.url);
assert_false(response.redirected);
if (self.internals) { if (self.internals) {
assert_array_equals( assert_array_equals(
self.internals.getInternalResponseURLList(response), self.internals.getInternalResponseURLList(response),
...@@ -285,6 +293,7 @@ promise_test(function(test) { ...@@ -285,6 +293,7 @@ promise_test(function(test) {
assert_equals(response.status, 200); assert_equals(response.status, 200);
assert_equals(response.statusText, 'OK'); assert_equals(response.statusText, 'OK');
assert_equals(response.url, url); assert_equals(response.url, url);
assert_false(response.redirected);
if (self.internals) { if (self.internals) {
assert_array_equals( assert_array_equals(
self.internals.getInternalResponseURLList(response), [url]); self.internals.getInternalResponseURLList(response), [url]);
...@@ -301,6 +310,7 @@ promise_test(function(test) { ...@@ -301,6 +310,7 @@ promise_test(function(test) {
assert_equals(response.status, 200); assert_equals(response.status, 200);
assert_equals(response.statusText, 'OK'); assert_equals(response.statusText, 'OK');
assert_equals(response.url, url); assert_equals(response.url, url);
assert_false(response.redirected);
if (self.internals) { if (self.internals) {
assert_array_equals( assert_array_equals(
self.internals.getInternalResponseURLList(response), [url]); self.internals.getInternalResponseURLList(response), [url]);
......
...@@ -18,6 +18,7 @@ test(function() { ...@@ -18,6 +18,7 @@ test(function() {
assert_equals(response.type, 'default', assert_equals(response.type, 'default',
'Default Response.type should be \'default\''); 'Default Response.type should be \'default\'');
assert_equals(response.url, '', 'Response.url should be the empty string'); assert_equals(response.url, '', 'Response.url should be the empty string');
assert_false(response.redirected, 'Response.redirected should be false.');
assert_equals(response.status, 200, assert_equals(response.status, 200,
'Default Response.status should be 200'); 'Default Response.status should be 200');
assert_true(response.ok, 'Default Response.ok must be true'); assert_true(response.ok, 'Default Response.ok must be true');
......
...@@ -16,6 +16,7 @@ var TEST_TARGETS = [ ...@@ -16,6 +16,7 @@ var TEST_TARGETS = [
[REDIRECT_LOOP_URL + encodeURIComponent(BASE_URL) + '&Count=20&mode=cors' + [REDIRECT_LOOP_URL + encodeURIComponent(BASE_URL) + '&Count=20&mode=cors' +
'&credentials=same-origin', '&credentials=same-origin',
[fetchResolved, hasContentLength, hasBody, typeBasic, [fetchResolved, hasContentLength, hasBody, typeBasic,
responseRedirected,
checkURLList.bind( checkURLList.bind(
self, self,
createExpectedURLList( createExpectedURLList(
...@@ -30,6 +31,7 @@ var TEST_TARGETS = [ ...@@ -30,6 +31,7 @@ var TEST_TARGETS = [
[REDIRECT_LOOP_URL + encodeURIComponent(OTHER_BASE_URL + '&ACAOrigin=*') + [REDIRECT_LOOP_URL + encodeURIComponent(OTHER_BASE_URL + '&ACAOrigin=*') +
'&Count=20&mode=cors&credentials=same-origin&method=GET', '&Count=20&mode=cors&credentials=same-origin&method=GET',
[fetchResolved, noContentLength, noServerHeader, hasBody, typeCors, [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors,
responseRedirected,
checkURLList.bind( checkURLList.bind(
self, self,
createExpectedURLList( createExpectedURLList(
...@@ -49,6 +51,7 @@ var TEST_TARGETS = [ ...@@ -49,6 +51,7 @@ var TEST_TARGETS = [
[OTHER_REDIRECT_LOOP_URL + encodeURIComponent(BASE_URL + 'ACAOrigin=*') + [OTHER_REDIRECT_LOOP_URL + encodeURIComponent(BASE_URL + 'ACAOrigin=*') +
'&Count=20&mode=cors&credentials=same-origin&method=GET&ACAOrigin=*', '&Count=20&mode=cors&credentials=same-origin&method=GET&ACAOrigin=*',
[fetchResolved, noContentLength, noServerHeader, hasBody, typeCors, [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors,
responseRedirected,
checkURLList.bind( checkURLList.bind(
self, self,
createExpectedURLList( createExpectedURLList(
...@@ -67,6 +70,7 @@ var TEST_TARGETS = [ ...@@ -67,6 +70,7 @@ var TEST_TARGETS = [
encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=*') + encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=*') +
'&Count=20&mode=cors&credentials=same-origin&method=GET&ACAOrigin=*', '&Count=20&mode=cors&credentials=same-origin&method=GET&ACAOrigin=*',
[fetchResolved, noContentLength, noServerHeader, hasBody, typeCors, [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors,
responseRedirected,
checkURLList.bind( checkURLList.bind(
self, self,
createExpectedURLList( createExpectedURLList(
......
...@@ -8,14 +8,14 @@ var TEST_TARGETS = [ ...@@ -8,14 +8,14 @@ var TEST_TARGETS = [
[REDIRECT_URL + encodeURIComponent(BASE_URL) + [REDIRECT_URL + encodeURIComponent(BASE_URL) +
'&mode=no-cors&method=GET&headers=CUSTOM', '&mode=no-cors&method=GET&headers=CUSTOM',
[fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic, [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic,
checkURLList.bind(self, [BASE_URL])], responseRedirected, checkURLList.bind(self, [BASE_URL])],
[methodIsGET, noCustomHeader, authCheck1]], [methodIsGET, noCustomHeader, authCheck1]],
// Redirect: same origin -> other origin // Redirect: same origin -> other origin
[REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL) + [REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL) +
'&mode=no-cors&method=GET&headers=CUSTOM', '&mode=no-cors&method=GET&headers=CUSTOM',
[fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque, [fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque,
checkURLList.bind(self, [OTHER_BASE_URL])], responseNotRedirected, checkURLList.bind(self, [OTHER_BASE_URL])],
onlyOnServiceWorkerProxiedTest([methodIsGET, noCustomHeader, authCheck2])], onlyOnServiceWorkerProxiedTest([methodIsGET, noCustomHeader, authCheck2])],
// Status code tests for mode="no-cors" // Status code tests for mode="no-cors"
...@@ -23,25 +23,25 @@ var TEST_TARGETS = [ ...@@ -23,25 +23,25 @@ var TEST_TARGETS = [
[REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL) + [REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL) +
'&mode=no-cors&method=POST&Status=301', '&mode=no-cors&method=POST&Status=301',
[fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque, [fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque,
checkURLList.bind(self, [OTHER_BASE_URL])], responseNotRedirected, checkURLList.bind(self, [OTHER_BASE_URL])],
onlyOnServiceWorkerProxiedTest([methodIsGET, authCheck2])], onlyOnServiceWorkerProxiedTest([methodIsGET, authCheck2])],
// The 302 redirect response changes POST method to GET method. // The 302 redirect response changes POST method to GET method.
[REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL) + [REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL) +
'&mode=no-cors&method=POST', '&mode=no-cors&method=POST',
[fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque, [fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque,
checkURLList.bind(self, [OTHER_BASE_URL])], responseNotRedirected, checkURLList.bind(self, [OTHER_BASE_URL])],
onlyOnServiceWorkerProxiedTest([methodIsGET, authCheck2])], onlyOnServiceWorkerProxiedTest([methodIsGET, authCheck2])],
// GET method must be used for 303 redirect. // GET method must be used for 303 redirect.
[REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL) + [REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL) +
'&mode=no-cors&method=POST&Status=303', '&mode=no-cors&method=POST&Status=303',
[fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque, [fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque,
checkURLList.bind(self, [OTHER_BASE_URL])], responseNotRedirected, checkURLList.bind(self, [OTHER_BASE_URL])],
onlyOnServiceWorkerProxiedTest([methodIsGET, authCheck2])], onlyOnServiceWorkerProxiedTest([methodIsGET, authCheck2])],
// The 307 redirect response doesn't change the method. // The 307 redirect response doesn't change the method.
[REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL) + [REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL) +
'&mode=no-cors&method=POST&Status=307', '&mode=no-cors&method=POST&Status=307',
[fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque, [fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque,
checkURLList.bind(self, [OTHER_BASE_URL])], responseNotRedirected, checkURLList.bind(self, [OTHER_BASE_URL])],
onlyOnServiceWorkerProxiedTest([methodIsPOST, authCheck2])], onlyOnServiceWorkerProxiedTest([methodIsPOST, authCheck2])],
// The 308 redirect response doesn't change the method. // The 308 redirect response doesn't change the method.
// FIXME: disabled due to https://crbug.com/451938 // FIXME: disabled due to https://crbug.com/451938
...@@ -54,12 +54,12 @@ var TEST_TARGETS = [ ...@@ -54,12 +54,12 @@ var TEST_TARGETS = [
[OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL) + [OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL) +
'&mode=no-cors&method=GET', '&mode=no-cors&method=GET',
[fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque, [fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque,
checkURLList.bind(self, [BASE_URL])], responseNotRedirected, checkURLList.bind(self, [BASE_URL])],
onlyOnServiceWorkerProxiedTest([methodIsGET, authCheck1])], onlyOnServiceWorkerProxiedTest([methodIsGET, authCheck1])],
[OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL) + [OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL) +
'&mode=no-cors&method=GET&headers=CUSTOM', '&mode=no-cors&method=GET&headers=CUSTOM',
[fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque, [fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque,
checkURLList.bind(self, [BASE_URL])], responseNotRedirected, checkURLList.bind(self, [BASE_URL])],
onlyOnServiceWorkerProxiedTest([methodIsGET, noCustomHeader, authCheck1])], onlyOnServiceWorkerProxiedTest([methodIsGET, noCustomHeader, authCheck1])],
// Status code tests for mode="no-cors" // Status code tests for mode="no-cors"
...@@ -67,25 +67,25 @@ var TEST_TARGETS = [ ...@@ -67,25 +67,25 @@ var TEST_TARGETS = [
[OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL) + [OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL) +
'&mode=no-cors&method=POST&Status=301', '&mode=no-cors&method=POST&Status=301',
[fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque, [fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque,
checkURLList.bind(self, [BASE_URL])], responseNotRedirected, checkURLList.bind(self, [BASE_URL])],
onlyOnServiceWorkerProxiedTest([methodIsGET, authCheck1])], onlyOnServiceWorkerProxiedTest([methodIsGET, authCheck1])],
// The 302 redirect response MAY change the request method from POST to GET. // The 302 redirect response MAY change the request method from POST to GET.
[OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL) + [OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL) +
'&mode=no-cors&method=POST', '&mode=no-cors&method=POST',
[fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque, [fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque,
checkURLList.bind(self, [BASE_URL])], responseNotRedirected, checkURLList.bind(self, [BASE_URL])],
onlyOnServiceWorkerProxiedTest([methodIsGET, authCheck1])], onlyOnServiceWorkerProxiedTest([methodIsGET, authCheck1])],
// GET method must be used for 303 redirect. // GET method must be used for 303 redirect.
[OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL) + [OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL) +
'&mode=no-cors&method=POST&Status=303', '&mode=no-cors&method=POST&Status=303',
[fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque, [fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque,
checkURLList.bind(self, [BASE_URL])], responseNotRedirected, checkURLList.bind(self, [BASE_URL])],
onlyOnServiceWorkerProxiedTest([methodIsGET, authCheck1])], onlyOnServiceWorkerProxiedTest([methodIsGET, authCheck1])],
// The 307 redirect response MUST NOT change the method. // The 307 redirect response MUST NOT change the method.
[OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL) + [OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL) +
'&mode=no-cors&method=POST&Status=307', '&mode=no-cors&method=POST&Status=307',
[fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque, [fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque,
checkURLList.bind(self, [BASE_URL])], responseNotRedirected, checkURLList.bind(self, [BASE_URL])],
onlyOnServiceWorkerProxiedTest([methodIsPOST, authCheck1])], onlyOnServiceWorkerProxiedTest([methodIsPOST, authCheck1])],
// The 308 redirect response MUST NOT change the method. // The 308 redirect response MUST NOT change the method.
// FIXME: disabled due to https://crbug.com/451938 // FIXME: disabled due to https://crbug.com/451938
...@@ -98,7 +98,7 @@ var TEST_TARGETS = [ ...@@ -98,7 +98,7 @@ var TEST_TARGETS = [
[OTHER_REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL) + [OTHER_REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL) +
'&mode=no-cors&method=GET', '&mode=no-cors&method=GET',
[fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque, [fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque,
checkURLList.bind(self, [OTHER_BASE_URL])], responseNotRedirected, checkURLList.bind(self, [OTHER_BASE_URL])],
onlyOnServiceWorkerProxiedTest([methodIsGET, authCheck2])], onlyOnServiceWorkerProxiedTest([methodIsGET, authCheck2])],
]; ];
......
...@@ -17,32 +17,32 @@ var TEST_TARGETS = [ ...@@ -17,32 +17,32 @@ var TEST_TARGETS = [
[REDIRECT_URL + encodeURIComponent(BASE_URL_WITH_USERNAME) + [REDIRECT_URL + encodeURIComponent(BASE_URL_WITH_USERNAME) +
'&mode=same-origin&method=GET', '&mode=same-origin&method=GET',
[fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic, [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic,
checkURLList.bind(self, [BASE_URL_WITH_USERNAME])], responseRedirected, checkURLList.bind(self, [BASE_URL_WITH_USERNAME])],
[methodIsGET]], [methodIsGET]],
[REDIRECT_URL + encodeURIComponent(BASE_URL_WITH_PASSWORD) + [REDIRECT_URL + encodeURIComponent(BASE_URL_WITH_PASSWORD) +
'&mode=same-origin&method=GET', '&mode=same-origin&method=GET',
[fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic, [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic,
checkURLList.bind(self, [BASE_URL_WITH_PASSWORD])], responseRedirected, checkURLList.bind(self, [BASE_URL_WITH_PASSWORD])],
[methodIsGET]], [methodIsGET]],
[REDIRECT_URL + encodeURIComponent(BASE_URL_WITH_USERNAME) + [REDIRECT_URL + encodeURIComponent(BASE_URL_WITH_USERNAME) +
'&mode=cors&method=GET', '&mode=cors&method=GET',
[fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic, [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic,
checkURLList.bind(self, [BASE_URL_WITH_USERNAME])], responseRedirected, checkURLList.bind(self, [BASE_URL_WITH_USERNAME])],
[methodIsGET]], [methodIsGET]],
[REDIRECT_URL + encodeURIComponent(BASE_URL_WITH_PASSWORD) + [REDIRECT_URL + encodeURIComponent(BASE_URL_WITH_PASSWORD) +
'&mode=cors&method=GET', '&mode=cors&method=GET',
[fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic, [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic,
checkURLList.bind(self, [BASE_URL_WITH_PASSWORD])], responseRedirected, checkURLList.bind(self, [BASE_URL_WITH_PASSWORD])],
[methodIsGET]], [methodIsGET]],
[REDIRECT_URL + encodeURIComponent(BASE_URL_WITH_USERNAME) + [REDIRECT_URL + encodeURIComponent(BASE_URL_WITH_USERNAME) +
'&mode=no-cors&method=GET', '&mode=no-cors&method=GET',
[fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic, [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic,
checkURLList.bind(self, [BASE_URL_WITH_USERNAME])], responseRedirected, checkURLList.bind(self, [BASE_URL_WITH_USERNAME])],
[methodIsGET]], [methodIsGET]],
[REDIRECT_URL + encodeURIComponent(BASE_URL_WITH_PASSWORD) + [REDIRECT_URL + encodeURIComponent(BASE_URL_WITH_PASSWORD) +
'&mode=no-cors&method=GET', '&mode=no-cors&method=GET',
[fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic, [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic,
checkURLList.bind(self, [BASE_URL_WITH_PASSWORD])], responseRedirected, checkURLList.bind(self, [BASE_URL_WITH_PASSWORD])],
[methodIsGET]], [methodIsGET]],
// Origin A -[fetch]-> Origin A -[redirect]-> Origin B // Origin A -[fetch]-> Origin A -[redirect]-> Origin B
...@@ -58,12 +58,14 @@ var TEST_TARGETS = [ ...@@ -58,12 +58,14 @@ var TEST_TARGETS = [
encodeURIComponent(OTHER_BASE_URL_WITH_USERNAME + '&ACAOrigin=*') + encodeURIComponent(OTHER_BASE_URL_WITH_USERNAME + '&ACAOrigin=*') +
'&mode=no-cors&method=GET', '&mode=no-cors&method=GET',
[fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque, [fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque,
responseNotRedirected,
checkURLList.bind(self, [OTHER_BASE_URL_WITH_USERNAME + '&ACAOrigin=*'])], checkURLList.bind(self, [OTHER_BASE_URL_WITH_USERNAME + '&ACAOrigin=*'])],
onlyOnServiceWorkerProxiedTest([methodIsGET])], onlyOnServiceWorkerProxiedTest([methodIsGET])],
[REDIRECT_URL + [REDIRECT_URL +
encodeURIComponent(OTHER_BASE_URL_WITH_PASSWORD + '&ACAOrigin=*') + encodeURIComponent(OTHER_BASE_URL_WITH_PASSWORD + '&ACAOrigin=*') +
'&mode=no-cors&method=GET', '&mode=no-cors&method=GET',
[fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque, [fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque,
responseNotRedirected,
checkURLList.bind(self, [OTHER_BASE_URL_WITH_PASSWORD + '&ACAOrigin=*'])], checkURLList.bind(self, [OTHER_BASE_URL_WITH_PASSWORD + '&ACAOrigin=*'])],
onlyOnServiceWorkerProxiedTest([methodIsGET])], onlyOnServiceWorkerProxiedTest([methodIsGET])],
...@@ -80,12 +82,14 @@ var TEST_TARGETS = [ ...@@ -80,12 +82,14 @@ var TEST_TARGETS = [
encodeURIComponent(BASE_URL_WITH_USERNAME + 'ACAOrigin=*') + encodeURIComponent(BASE_URL_WITH_USERNAME + 'ACAOrigin=*') +
'&mode=no-cors&method=GET&ACAOrigin=*', '&mode=no-cors&method=GET&ACAOrigin=*',
[fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque, [fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque,
responseNotRedirected,
checkURLList.bind(self, [BASE_URL_WITH_USERNAME + 'ACAOrigin=*'])], checkURLList.bind(self, [BASE_URL_WITH_USERNAME + 'ACAOrigin=*'])],
onlyOnServiceWorkerProxiedTest([methodIsGET])], onlyOnServiceWorkerProxiedTest([methodIsGET])],
[OTHER_REDIRECT_URL + [OTHER_REDIRECT_URL +
encodeURIComponent(BASE_URL_WITH_PASSWORD + 'ACAOrigin=*') + encodeURIComponent(BASE_URL_WITH_PASSWORD + 'ACAOrigin=*') +
'&mode=no-cors&method=GET&ACAOrigin=*', '&mode=no-cors&method=GET&ACAOrigin=*',
[fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque, [fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque,
responseNotRedirected,
checkURLList.bind(self, [BASE_URL_WITH_PASSWORD + 'ACAOrigin=*'])], checkURLList.bind(self, [BASE_URL_WITH_PASSWORD + 'ACAOrigin=*'])],
onlyOnServiceWorkerProxiedTest([methodIsGET])], onlyOnServiceWorkerProxiedTest([methodIsGET])],
...@@ -102,12 +106,14 @@ var TEST_TARGETS = [ ...@@ -102,12 +106,14 @@ var TEST_TARGETS = [
encodeURIComponent(OTHER_BASE_URL_WITH_USERNAME + 'ACAOrigin=*') + encodeURIComponent(OTHER_BASE_URL_WITH_USERNAME + 'ACAOrigin=*') +
'&mode=no-cors&method=GET&ACAOrigin=*', '&mode=no-cors&method=GET&ACAOrigin=*',
[fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque, [fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque,
responseNotRedirected,
checkURLList.bind(self, [OTHER_BASE_URL_WITH_USERNAME + 'ACAOrigin=*'])], checkURLList.bind(self, [OTHER_BASE_URL_WITH_USERNAME + 'ACAOrigin=*'])],
onlyOnServiceWorkerProxiedTest([methodIsGET])], onlyOnServiceWorkerProxiedTest([methodIsGET])],
[OTHER_REDIRECT_URL + [OTHER_REDIRECT_URL +
encodeURIComponent(OTHER_BASE_URL_WITH_PASSWORD + 'ACAOrigin=*') + encodeURIComponent(OTHER_BASE_URL_WITH_PASSWORD + 'ACAOrigin=*') +
'&mode=no-cors&method=GET&ACAOrigin=*', '&mode=no-cors&method=GET&ACAOrigin=*',
[fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque, [fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque,
responseNotRedirected,
checkURLList.bind(self, [OTHER_BASE_URL_WITH_PASSWORD + 'ACAOrigin=*'])], checkURLList.bind(self, [OTHER_BASE_URL_WITH_PASSWORD + 'ACAOrigin=*'])],
onlyOnServiceWorkerProxiedTest([methodIsGET])], onlyOnServiceWorkerProxiedTest([methodIsGET])],
]; ];
......
...@@ -8,7 +8,7 @@ var TEST_TARGETS = [ ...@@ -8,7 +8,7 @@ var TEST_TARGETS = [
[REDIRECT_URL + encodeURIComponent(BASE_URL) + [REDIRECT_URL + encodeURIComponent(BASE_URL) +
'&mode=same-origin&method=GET', '&mode=same-origin&method=GET',
[fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic, [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic,
checkURLList.bind(self, [BASE_URL])], responseRedirected, checkURLList.bind(self, [BASE_URL])],
[methodIsGET, authCheck1]], [methodIsGET, authCheck1]],
// https://fetch.spec.whatwg.org/#concept-http-fetch // https://fetch.spec.whatwg.org/#concept-http-fetch
...@@ -16,7 +16,8 @@ var TEST_TARGETS = [ ...@@ -16,7 +16,8 @@ var TEST_TARGETS = [
// Step 2: If location is null, return response. // Step 2: If location is null, return response.
[REDIRECT_URL + 'noLocation' + [REDIRECT_URL + 'noLocation' +
'&mode=same-origin&method=GET&NoRedirectTest=true', '&mode=same-origin&method=GET&NoRedirectTest=true',
[fetchResolved, hasBody, typeBasic, checkURLList.bind(self, [])], [fetchResolved, hasBody, typeBasic, responseNotRedirected,
checkURLList.bind(self, [])],
[checkJsonpNoRedirect]], [checkJsonpNoRedirect]],
// Step 5: If locationURL is failure, return a network error. // Step 5: If locationURL is failure, return a network error.
[REDIRECT_URL + 'http://' + [REDIRECT_URL + 'http://' +
...@@ -26,33 +27,33 @@ var TEST_TARGETS = [ ...@@ -26,33 +27,33 @@ var TEST_TARGETS = [
[REDIRECT_URL + encodeURIComponent(BASE_URL) + [REDIRECT_URL + encodeURIComponent(BASE_URL) +
'&mode=same-origin&method=GET&headers=CUSTOM', '&mode=same-origin&method=GET&headers=CUSTOM',
[fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic, [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic,
checkURLList.bind(self, [BASE_URL])], responseRedirected, checkURLList.bind(self, [BASE_URL])],
[methodIsGET, hasCustomHeader, authCheck1]], [methodIsGET, hasCustomHeader, authCheck1]],
// Chrome changes the method from POST to GET when it recieves 301 redirect // Chrome changes the method from POST to GET when it recieves 301 redirect
// response. See a note in http://tools.ietf.org/html/rfc7231#section-6.4.2 // response. See a note in http://tools.ietf.org/html/rfc7231#section-6.4.2
[REDIRECT_URL + encodeURIComponent(BASE_URL) + [REDIRECT_URL + encodeURIComponent(BASE_URL) +
'&mode=same-origin&method=POST&Status=301', '&mode=same-origin&method=POST&Status=301',
[fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic, [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic,
checkURLList.bind(self, [BASE_URL])], responseRedirected, checkURLList.bind(self, [BASE_URL])],
[methodIsGET, authCheck1]], [methodIsGET, authCheck1]],
// Chrome changes the method from POST to GET when it recieves 302 redirect // Chrome changes the method from POST to GET when it recieves 302 redirect
// response. See a note in http://tools.ietf.org/html/rfc7231#section-6.4.3 // response. See a note in http://tools.ietf.org/html/rfc7231#section-6.4.3
[REDIRECT_URL + encodeURIComponent(BASE_URL) + [REDIRECT_URL + encodeURIComponent(BASE_URL) +
'&mode=same-origin&method=POST', '&mode=same-origin&method=POST',
[fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic, [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic,
checkURLList.bind(self, [BASE_URL])], responseRedirected, checkURLList.bind(self, [BASE_URL])],
[methodIsGET, authCheck1]], [methodIsGET, authCheck1]],
// GET method must be used for 303 redirect. // GET method must be used for 303 redirect.
[REDIRECT_URL + encodeURIComponent(BASE_URL) + [REDIRECT_URL + encodeURIComponent(BASE_URL) +
'&mode=same-origin&method=POST&Status=303', '&mode=same-origin&method=POST&Status=303',
[fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic, [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic,
checkURLList.bind(self, [BASE_URL])], responseRedirected, checkURLList.bind(self, [BASE_URL])],
[methodIsGET, authCheck1]], [methodIsGET, authCheck1]],
// The 307 redirect response doesn't change the method. // The 307 redirect response doesn't change the method.
[REDIRECT_URL + encodeURIComponent(BASE_URL) + [REDIRECT_URL + encodeURIComponent(BASE_URL) +
'&mode=same-origin&method=POST&Status=307', '&mode=same-origin&method=POST&Status=307',
[fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic, [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic,
checkURLList.bind(self, [BASE_URL])], responseRedirected, checkURLList.bind(self, [BASE_URL])],
[methodIsPOST, authCheck1]], [methodIsPOST, authCheck1]],
// The 308 redirect response doesn't change the method. // The 308 redirect response doesn't change the method.
// FIXME: currently this and following 308 tests are disabled because they // FIXME: currently this and following 308 tests are disabled because they
...@@ -67,19 +68,20 @@ var TEST_TARGETS = [ ...@@ -67,19 +68,20 @@ var TEST_TARGETS = [
[REDIRECT_URL + encodeURIComponent(BASE_URL) + [REDIRECT_URL + encodeURIComponent(BASE_URL) +
'&mode=same-origin&credentials=same-origin&method=POST&Status=201&' + '&mode=same-origin&credentials=same-origin&method=POST&Status=201&' +
'NoRedirectTest=true', 'NoRedirectTest=true',
[fetchResolved, hasBody, typeBasic, checkURLList.bind(self, [])], [fetchResolved, hasBody, typeBasic,
responseNotRedirected, checkURLList.bind(self, [])],
[checkJsonpNoRedirect]], [checkJsonpNoRedirect]],
[REDIRECT_URL + encodeURIComponent(BASE_URL) + [REDIRECT_URL + encodeURIComponent(BASE_URL) +
'&mode=same-origin&credentials=same-origin&method=PUT', '&mode=same-origin&credentials=same-origin&method=PUT',
[fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic, [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic,
checkURLList.bind(self, [BASE_URL])], responseRedirected, checkURLList.bind(self, [BASE_URL])],
[methodIsPUT, authCheck1]], [methodIsPUT, authCheck1]],
[REDIRECT_URL + encodeURIComponent(BASE_URL) + [REDIRECT_URL + encodeURIComponent(BASE_URL) +
'&mode=cors&credentials=same-origin&method=GET&headers=CUSTOM', '&mode=cors&credentials=same-origin&method=GET&headers=CUSTOM',
[fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic, [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic,
checkURLList.bind(self, [BASE_URL])], responseRedirected, checkURLList.bind(self, [BASE_URL])],
[methodIsGET, hasCustomHeader, authCheck1]], [methodIsGET, hasCustomHeader, authCheck1]],
// Redirect: same origin -> other origin // Redirect: same origin -> other origin
...@@ -103,6 +105,7 @@ var TEST_TARGETS = [ ...@@ -103,6 +105,7 @@ var TEST_TARGETS = [
[REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + '&ACAOrigin=*') + [REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + '&ACAOrigin=*') +
'&mode=cors&credentials=same-origin&method=GET', '&mode=cors&credentials=same-origin&method=GET',
[fetchResolved, noContentLength, noServerHeader, hasBody, typeCors, [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors,
responseRedirected,
checkURLList.bind(self, [OTHER_BASE_URL + '&ACAOrigin=*'])], checkURLList.bind(self, [OTHER_BASE_URL + '&ACAOrigin=*'])],
[methodIsGET, authCheckNone]], [methodIsGET, authCheckNone]],
[REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + '&ACAOrigin=*') + [REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + '&ACAOrigin=*') +
...@@ -112,6 +115,7 @@ var TEST_TARGETS = [ ...@@ -112,6 +115,7 @@ var TEST_TARGETS = [
encodeURIComponent(OTHER_BASE_URL + '&ACAOrigin=*&ACAMethods=PUT') + encodeURIComponent(OTHER_BASE_URL + '&ACAOrigin=*&ACAMethods=PUT') +
'&mode=cors&credentials=same-origin&method=PUT', '&mode=cors&credentials=same-origin&method=PUT',
[fetchResolved, noContentLength, noServerHeader, hasBody, typeCors, [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors,
responseRedirected,
checkURLList.bind(self, [OTHER_BASE_URL + '&ACAOrigin=*&ACAMethods=PUT'])], checkURLList.bind(self, [OTHER_BASE_URL + '&ACAOrigin=*&ACAMethods=PUT'])],
[methodIsPUT, noCustomHeader, authCheckNone]], [methodIsPUT, noCustomHeader, authCheckNone]],
...@@ -120,24 +124,28 @@ var TEST_TARGETS = [ ...@@ -120,24 +124,28 @@ var TEST_TARGETS = [
[REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + '&ACAOrigin=*') + [REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + '&ACAOrigin=*') +
'&mode=cors&credentials=same-origin&method=POST&Status=301', '&mode=cors&credentials=same-origin&method=POST&Status=301',
[fetchResolved, noContentLength, noServerHeader, hasBody, typeCors, [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors,
responseRedirected,
checkURLList.bind(self, [OTHER_BASE_URL + '&ACAOrigin=*'])], checkURLList.bind(self, [OTHER_BASE_URL + '&ACAOrigin=*'])],
[methodIsGET]], [methodIsGET]],
// The 302 redirect response MAY change the request method from POST to GET. // The 302 redirect response MAY change the request method from POST to GET.
[REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + '&ACAOrigin=*') + [REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + '&ACAOrigin=*') +
'&mode=cors&credentials=same-origin&method=POST&Status=302', '&mode=cors&credentials=same-origin&method=POST&Status=302',
[fetchResolved, noContentLength, noServerHeader, hasBody, typeCors, [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors,
responseRedirected,
checkURLList.bind(self, [OTHER_BASE_URL + '&ACAOrigin=*'])], checkURLList.bind(self, [OTHER_BASE_URL + '&ACAOrigin=*'])],
[methodIsGET]], [methodIsGET]],
// GET method must be used for 303 redirect. // GET method must be used for 303 redirect.
[REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + '&ACAOrigin=*') + [REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + '&ACAOrigin=*') +
'&mode=cors&credentials=same-origin&method=POST&Status=303', '&mode=cors&credentials=same-origin&method=POST&Status=303',
[fetchResolved, noContentLength, noServerHeader, hasBody, typeCors, [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors,
responseRedirected,
checkURLList.bind(self, [OTHER_BASE_URL + '&ACAOrigin=*'])], checkURLList.bind(self, [OTHER_BASE_URL + '&ACAOrigin=*'])],
[methodIsGET]], [methodIsGET]],
// The 307 redirect response MUST NOT change the method. // The 307 redirect response MUST NOT change the method.
[REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + '&ACAOrigin=*') + [REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + '&ACAOrigin=*') +
'&mode=cors&credentials=same-origin&method=POST&Status=307', '&mode=cors&credentials=same-origin&method=POST&Status=307',
[fetchResolved, noContentLength, noServerHeader, hasBody, typeCors, [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors,
responseRedirected,
checkURLList.bind(self, [OTHER_BASE_URL + '&ACAOrigin=*'])], checkURLList.bind(self, [OTHER_BASE_URL + '&ACAOrigin=*'])],
[methodIsPOST]], [methodIsPOST]],
// The 308 redirect response MUST NOT change the method. // The 308 redirect response MUST NOT change the method.
...@@ -154,6 +162,7 @@ var TEST_TARGETS = [ ...@@ -154,6 +162,7 @@ var TEST_TARGETS = [
'ACAOrigin=*&ACAHeaders=x-serviceworker-test') + 'ACAOrigin=*&ACAHeaders=x-serviceworker-test') +
'&mode=cors&credentials=same-origin&method=GET&headers=CUSTOM', '&mode=cors&credentials=same-origin&method=GET&headers=CUSTOM',
[fetchResolved, noContentLength, noServerHeader, hasBody, typeCors, [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors,
responseRedirected,
checkURLList.bind( checkURLList.bind(
self, self,
[OTHER_BASE_URL + 'ACAOrigin=*&ACAHeaders=x-serviceworker-test'])], [OTHER_BASE_URL + 'ACAOrigin=*&ACAHeaders=x-serviceworker-test'])],
...@@ -175,6 +184,7 @@ var TEST_TARGETS = [ ...@@ -175,6 +184,7 @@ var TEST_TARGETS = [
'&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader') + '&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader') +
'&mode=cors&credentials=same-origin&method=GET', '&mode=cors&credentials=same-origin&method=GET',
[fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors, [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors,
responseRedirected,
checkURLList.bind( checkURLList.bind(
self, self,
[OTHER_BASE_URL +'&ACAOrigin=' + BASE_ORIGIN + [OTHER_BASE_URL +'&ACAOrigin=' + BASE_ORIGIN +
...@@ -198,6 +208,7 @@ var TEST_TARGETS = [ ...@@ -198,6 +208,7 @@ var TEST_TARGETS = [
[OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL + 'ACAOrigin=*') + [OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL + 'ACAOrigin=*') +
'&mode=cors&credentials=same-origin&method=GET&ACAOrigin=*', '&mode=cors&credentials=same-origin&method=GET&ACAOrigin=*',
[fetchResolved, noContentLength, noServerHeader, hasBody, typeCors, [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors,
responseRedirected,
checkURLList.bind(self, [BASE_URL + 'ACAOrigin=*'])], checkURLList.bind(self, [BASE_URL + 'ACAOrigin=*'])],
[methodIsGET, authCheckNone]], [methodIsGET, authCheckNone]],
...@@ -206,25 +217,25 @@ var TEST_TARGETS = [ ...@@ -206,25 +217,25 @@ var TEST_TARGETS = [
[OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL + 'ACAOrigin=*') + [OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL + 'ACAOrigin=*') +
'&mode=cors&credentials=same-origin&method=post&ACAOrigin=*&Status=301', '&mode=cors&credentials=same-origin&method=post&ACAOrigin=*&Status=301',
[fetchResolved, noContentLength, noServerHeader, hasBody, typeCors, [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors,
checkURLList.bind(self, [BASE_URL + 'ACAOrigin=*'])], responseRedirected, checkURLList.bind(self, [BASE_URL + 'ACAOrigin=*'])],
[methodIsGET]], [methodIsGET]],
// The 302 redirect response MAY change the request method from POST to GET. // The 302 redirect response MAY change the request method from POST to GET.
[OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL + 'ACAOrigin=*') + [OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL + 'ACAOrigin=*') +
'&mode=cors&credentials=same-origin&method=post&ACAOrigin=*&Status=302', '&mode=cors&credentials=same-origin&method=post&ACAOrigin=*&Status=302',
[fetchResolved, noContentLength, noServerHeader, hasBody, typeCors, [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors,
checkURLList.bind(self, [BASE_URL + 'ACAOrigin=*'])], responseRedirected, checkURLList.bind(self, [BASE_URL + 'ACAOrigin=*'])],
[methodIsGET]], [methodIsGET]],
// GET method must be used for 303 redirect. // GET method must be used for 303 redirect.
[OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL + 'ACAOrigin=*') + [OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL + 'ACAOrigin=*') +
'&mode=cors&credentials=same-origin&method=post&ACAOrigin=*&Status=303', '&mode=cors&credentials=same-origin&method=post&ACAOrigin=*&Status=303',
[fetchResolved, noContentLength, noServerHeader, hasBody, typeCors, [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors,
checkURLList.bind(self, [BASE_URL + 'ACAOrigin=*'])], responseRedirected, checkURLList.bind(self, [BASE_URL + 'ACAOrigin=*'])],
[methodIsGET]], [methodIsGET]],
// The 307 redirect response MUST NOT change the method. // The 307 redirect response MUST NOT change the method.
[OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL + 'ACAOrigin=*') + [OTHER_REDIRECT_URL + encodeURIComponent(BASE_URL + 'ACAOrigin=*') +
'&mode=cors&credentials=same-origin&method=post&ACAOrigin=*&Status=307', '&mode=cors&credentials=same-origin&method=post&ACAOrigin=*&Status=307',
[fetchResolved, noContentLength, noServerHeader, hasBody, typeCors, [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors,
checkURLList.bind(self, [BASE_URL + 'ACAOrigin=*'])], responseRedirected, checkURLList.bind(self, [BASE_URL + 'ACAOrigin=*'])],
[methodIsPOST]], [methodIsPOST]],
// The 308 redirect response MUST NOT change the method. // The 308 redirect response MUST NOT change the method.
// FIXME: disabled due to https://crbug.com/451938 // FIXME: disabled due to https://crbug.com/451938
...@@ -262,18 +273,21 @@ var TEST_TARGETS = [ ...@@ -262,18 +273,21 @@ var TEST_TARGETS = [
[OTHER_REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=*') + [OTHER_REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=*') +
'&mode=cors&credentials=same-origin&method=GET&ACAOrigin=*', '&mode=cors&credentials=same-origin&method=GET&ACAOrigin=*',
[fetchResolved, noContentLength, noServerHeader, hasBody, typeCors, [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors,
responseRedirected,
checkURLList.bind(self, [OTHER_BASE_URL + 'ACAOrigin=*'])], checkURLList.bind(self, [OTHER_BASE_URL + 'ACAOrigin=*'])],
[methodIsGET, authCheckNone]], [methodIsGET, authCheckNone]],
[OTHER_REDIRECT_URL + [OTHER_REDIRECT_URL +
encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=' + BASE_ORIGIN + '') + encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=' + BASE_ORIGIN + '') +
'&mode=cors&credentials=same-origin&method=GET&ACAOrigin=*', '&mode=cors&credentials=same-origin&method=GET&ACAOrigin=*',
[fetchResolved, noContentLength, noServerHeader, hasBody, typeCors, [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors,
responseRedirected,
checkURLList.bind(self, [OTHER_BASE_URL + 'ACAOrigin=' + BASE_ORIGIN])], checkURLList.bind(self, [OTHER_BASE_URL + 'ACAOrigin=' + BASE_ORIGIN])],
[methodIsGET, authCheckNone]], [methodIsGET, authCheckNone]],
[OTHER_REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=*') + [OTHER_REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=*') +
'&mode=cors&credentials=same-origin&method=GET' + '&mode=cors&credentials=same-origin&method=GET' +
'&ACAOrigin=' + BASE_ORIGIN + '', '&ACAOrigin=' + BASE_ORIGIN + '',
[fetchResolved, noContentLength, noServerHeader, hasBody, typeCors, [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors,
responseRedirected,
checkURLList.bind(self, [OTHER_BASE_URL + 'ACAOrigin=*'])], checkURLList.bind(self, [OTHER_BASE_URL + 'ACAOrigin=*'])],
[methodIsGET, authCheckNone]], [methodIsGET, authCheckNone]],
[OTHER_REDIRECT_URL + [OTHER_REDIRECT_URL +
...@@ -281,6 +295,7 @@ var TEST_TARGETS = [ ...@@ -281,6 +295,7 @@ var TEST_TARGETS = [
'&mode=cors&credentials=same-origin&method=GET' + '&mode=cors&credentials=same-origin&method=GET' +
'&ACAOrigin=' + BASE_ORIGIN + '', '&ACAOrigin=' + BASE_ORIGIN + '',
[fetchResolved, noContentLength, noServerHeader, hasBody, typeCors, [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors,
responseRedirected,
checkURLList.bind(self, [OTHER_BASE_URL + 'ACAOrigin=' + BASE_ORIGIN])], checkURLList.bind(self, [OTHER_BASE_URL + 'ACAOrigin=' + BASE_ORIGIN])],
[methodIsGET, authCheckNone]], [methodIsGET, authCheckNone]],
...@@ -289,24 +304,28 @@ var TEST_TARGETS = [ ...@@ -289,24 +304,28 @@ var TEST_TARGETS = [
[OTHER_REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=*') + [OTHER_REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=*') +
'&mode=cors&credentials=same-origin&method=POST&ACAOrigin=*&Status=301', '&mode=cors&credentials=same-origin&method=POST&ACAOrigin=*&Status=301',
[fetchResolved, noContentLength, noServerHeader, hasBody, typeCors, [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors,
responseRedirected,
checkURLList.bind(self, [OTHER_BASE_URL + 'ACAOrigin=*'])], checkURLList.bind(self, [OTHER_BASE_URL + 'ACAOrigin=*'])],
[methodIsGET]], [methodIsGET]],
// The 302 redirect response MAY change the request method from POST to GET. // The 302 redirect response MAY change the request method from POST to GET.
[OTHER_REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=*') + [OTHER_REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=*') +
'&mode=cors&credentials=same-origin&method=POST&ACAOrigin=*&Status=302', '&mode=cors&credentials=same-origin&method=POST&ACAOrigin=*&Status=302',
[fetchResolved, noContentLength, noServerHeader, hasBody, typeCors, [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors,
responseRedirected,
checkURLList.bind(self, [OTHER_BASE_URL + 'ACAOrigin=*'])], checkURLList.bind(self, [OTHER_BASE_URL + 'ACAOrigin=*'])],
[methodIsGET]], [methodIsGET]],
// GET method must be used for 303 redirect. // GET method must be used for 303 redirect.
[OTHER_REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=*') + [OTHER_REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=*') +
'&mode=cors&credentials=same-origin&method=POST&ACAOrigin=*&Status=303', '&mode=cors&credentials=same-origin&method=POST&ACAOrigin=*&Status=303',
[fetchResolved, noContentLength, noServerHeader, hasBody, typeCors, [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors,
responseRedirected,
checkURLList.bind(self, [OTHER_BASE_URL + 'ACAOrigin=*'])], checkURLList.bind(self, [OTHER_BASE_URL + 'ACAOrigin=*'])],
[methodIsGET]], [methodIsGET]],
// The 307 redirect response MUST NOT change the method. // The 307 redirect response MUST NOT change the method.
[OTHER_REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=*') + [OTHER_REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL + 'ACAOrigin=*') +
'&mode=cors&credentials=same-origin&method=POST&ACAOrigin=*&Status=307', '&mode=cors&credentials=same-origin&method=POST&ACAOrigin=*&Status=307',
[fetchResolved, noContentLength, noServerHeader, hasBody, typeCors, [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors,
responseRedirected,
checkURLList.bind(self, [OTHER_BASE_URL + 'ACAOrigin=*'])], checkURLList.bind(self, [OTHER_BASE_URL + 'ACAOrigin=*'])],
[methodIsPOST]], [methodIsPOST]],
// The 308 redirect response MUST NOT change the method. // The 308 redirect response MUST NOT change the method.
...@@ -322,6 +341,7 @@ var TEST_TARGETS = [ ...@@ -322,6 +341,7 @@ var TEST_TARGETS = [
'ACAOrigin=*&ACEHeaders=X-ServiceWorker-ServerHeader') + 'ACAOrigin=*&ACEHeaders=X-ServiceWorker-ServerHeader') +
'&mode=cors&credentials=same-origin&method=GET&ACAOrigin=*', '&mode=cors&credentials=same-origin&method=GET&ACAOrigin=*',
[fetchResolved, noContentLength, hasServerHeader, hasBody, typeCors, [fetchResolved, noContentLength, hasServerHeader, hasBody, typeCors,
responseRedirected,
checkURLList.bind( checkURLList.bind(
self, self,
[OTHER_BASE_URL + [OTHER_BASE_URL +
......
...@@ -9,9 +9,16 @@ ...@@ -9,9 +9,16 @@
function redirected_test(url, function redirected_test(url,
fetch_method, fetch_method,
cache, cache,
expected_redirected,
expected_url_list) { expected_url_list) {
return fetch_method(url).then(response => { return fetch_method(url).then(response => {
var cloned_response = response.clone(); var cloned_response = response.clone();
assert_equals(
response.redirected, expected_redirected,
'The redirected flag of response must match. URL: ' + url);
assert_equals(
cloned_response.redirected, expected_redirected,
'The redirected flag of cloned response must match. URL: ' + url);
if (self.internals) { if (self.internals) {
assert_array_equals( assert_array_equals(
self.internals.getInternalResponseURLList(response), self.internals.getInternalResponseURLList(response),
...@@ -26,6 +33,9 @@ function redirected_test(url, ...@@ -26,6 +33,9 @@ function redirected_test(url,
}) })
.then(_ => cache.match(url)) .then(_ => cache.match(url))
.then(response => { .then(response => {
assert_equals(response.redirected, expected_redirected,
'The redirected flag of response in CacheStorage must match. URL: ' +
url);
if (self.internals) { if (self.internals) {
assert_array_equals( assert_array_equals(
self.internals.getInternalResponseURLList(response), self.internals.getInternalResponseURLList(response),
...@@ -62,17 +72,21 @@ promise_test(t => { ...@@ -62,17 +72,21 @@ promise_test(t => {
frame = f; frame = f;
return Promise.all([ return Promise.all([
redirected_test(TARGET_URL, self.fetch, cache, redirected_test(TARGET_URL, self.fetch, cache,
false /* expected_redirected */,
[TARGET_URL]), [TARGET_URL]),
redirected_test(REDIRECT_TO_TARGET_URL, self.fetch, cache, redirected_test(REDIRECT_TO_TARGET_URL, self.fetch, cache,
true /* expected_redirected */,
[REDIRECT_TO_TARGET_URL, TARGET_URL]), [REDIRECT_TO_TARGET_URL, TARGET_URL]),
redirected_test('./?url=' + encodeURIComponent(TARGET_URL), redirected_test('./?url=' + encodeURIComponent(TARGET_URL),
frame.contentWindow.fetch, frame.contentWindow.fetch,
cache, cache,
false /* expected_redirected */,
[TARGET_URL]), [TARGET_URL]),
redirected_test( redirected_test(
'./?url=' + encodeURIComponent(REDIRECT_TO_TARGET_URL), './?url=' + encodeURIComponent(REDIRECT_TO_TARGET_URL),
frame.contentWindow.fetch, frame.contentWindow.fetch,
cache, cache,
true /* expected_redirected */,
[REDIRECT_TO_TARGET_URL, TARGET_URL]), [REDIRECT_TO_TARGET_URL, TARGET_URL]),
]); ]);
}) })
...@@ -81,5 +95,5 @@ promise_test(t => { ...@@ -81,5 +95,5 @@ promise_test(t => {
frame.remove(); frame.remove();
return service_worker_unregister(t, SCOPE); return service_worker_unregister(t, SCOPE);
}); });
}, 'Verify URL list of responses.'); }, 'Verify redirected flag of responses.');
</script> </script>
...@@ -649,6 +649,7 @@ interface Response ...@@ -649,6 +649,7 @@ interface Response
getter bodyUsed getter bodyUsed
getter headers getter headers
getter ok getter ok
getter redirected
getter status getter status
getter statusText getter statusText
getter type getter type
......
...@@ -4126,6 +4126,7 @@ interface Response ...@@ -4126,6 +4126,7 @@ interface Response
getter bodyUsed getter bodyUsed
getter headers getter headers
getter ok getter ok
getter redirected
getter status getter status
getter statusText getter statusText
getter type getter type
......
...@@ -656,6 +656,7 @@ interface Response ...@@ -656,6 +656,7 @@ interface Response
getter bodyUsed getter bodyUsed
getter headers getter headers
getter ok getter ok
getter redirected
getter status getter status
getter statusText getter statusText
getter type getter type
......
...@@ -512,6 +512,7 @@ interface Response ...@@ -512,6 +512,7 @@ interface Response
getter bodyUsed getter bodyUsed
getter headers getter headers
getter ok getter ok
getter redirected
getter status getter status
getter statusText getter statusText
getter type getter type
......
...@@ -516,6 +516,7 @@ Starting worker: resources/global-interface-listing.js ...@@ -516,6 +516,7 @@ Starting worker: resources/global-interface-listing.js
[Worker] getter bodyUsed [Worker] getter bodyUsed
[Worker] getter headers [Worker] getter headers
[Worker] getter ok [Worker] getter ok
[Worker] getter redirected
[Worker] getter status [Worker] getter status
[Worker] getter statusText [Worker] getter statusText
[Worker] getter type [Worker] getter type
......
...@@ -4184,6 +4184,7 @@ interface Response ...@@ -4184,6 +4184,7 @@ interface Response
getter bodyUsed getter bodyUsed
getter headers getter headers
getter ok getter ok
getter redirected
getter status getter status
getter statusText getter statusText
getter type getter type
......
...@@ -511,6 +511,7 @@ Starting worker: resources/global-interface-listing.js ...@@ -511,6 +511,7 @@ Starting worker: resources/global-interface-listing.js
[Worker] getter bodyUsed [Worker] getter bodyUsed
[Worker] getter headers [Worker] getter headers
[Worker] getter ok [Worker] getter ok
[Worker] getter redirected
[Worker] getter status [Worker] getter status
[Worker] getter statusText [Worker] getter statusText
[Worker] getter type [Worker] getter type
......
...@@ -652,6 +652,7 @@ Starting worker: resources/global-interface-listing.js ...@@ -652,6 +652,7 @@ Starting worker: resources/global-interface-listing.js
[Worker] getter bodyUsed [Worker] getter bodyUsed
[Worker] getter headers [Worker] getter headers
[Worker] getter ok [Worker] getter ok
[Worker] getter redirected
[Worker] getter status [Worker] getter status
[Worker] getter statusText [Worker] getter statusText
[Worker] getter type [Worker] getter type
......
...@@ -5052,6 +5052,7 @@ interface Response ...@@ -5052,6 +5052,7 @@ interface Response
getter bodyUsed getter bodyUsed
getter headers getter headers
getter ok getter ok
getter redirected
getter status getter status
getter statusText getter statusText
getter type getter type
......
...@@ -647,6 +647,7 @@ Starting worker: resources/global-interface-listing.js ...@@ -647,6 +647,7 @@ Starting worker: resources/global-interface-listing.js
[Worker] getter bodyUsed [Worker] getter bodyUsed
[Worker] getter headers [Worker] getter headers
[Worker] getter ok [Worker] getter ok
[Worker] getter redirected
[Worker] getter status [Worker] getter status
[Worker] getter statusText [Worker] getter statusText
[Worker] getter type [Worker] getter type
......
...@@ -87,6 +87,7 @@ class MODULES_EXPORT FetchResponseData final ...@@ -87,6 +87,7 @@ class MODULES_EXPORT FetchResponseData final
} }
void setURLList(const Vector<KURL>&); void setURLList(const Vector<KURL>&);
const Vector<KURL>& urlList() const { return m_urlList; }
const Vector<KURL>& internalURLList() const; const Vector<KURL>& internalURLList() const;
void setStatus(unsigned short status) { m_status = status; } void setStatus(unsigned short status) { m_status = status; }
......
...@@ -364,6 +364,10 @@ String Response::url() const { ...@@ -364,6 +364,10 @@ String Response::url() const {
return url; return url;
} }
bool Response::redirected() const {
return m_response->urlList().size() > 1;
}
unsigned short Response::status() const { unsigned short Response::status() const {
// "The status attribute's getter must return response's status." // "The status attribute's getter must return response's status."
return m_response->status(); return m_response->status();
......
...@@ -60,6 +60,7 @@ class MODULES_EXPORT Response final : public Body { ...@@ -60,6 +60,7 @@ class MODULES_EXPORT Response final : public Body {
// From Response.idl: // From Response.idl:
String type() const; String type() const;
String url() const; String url() const;
bool redirected() const;
unsigned short status() const; unsigned short status() const;
bool ok() const; bool ok() const;
String statusText() const; String statusText() const;
......
...@@ -20,6 +20,7 @@ enum ResponseType { "basic", "cors", "default", "error", "opaque", "opaqueredire ...@@ -20,6 +20,7 @@ enum ResponseType { "basic", "cors", "default", "error", "opaque", "opaqueredire
[CallWith=ExecutionContext, RaisesException] static Response redirect(USVString url, optional unsigned short status = 302); [CallWith=ExecutionContext, RaisesException] static Response redirect(USVString url, optional unsigned short status = 302);
readonly attribute ResponseType type; readonly attribute ResponseType type;
readonly attribute USVString url; readonly attribute USVString url;
readonly attribute boolean redirected;
readonly attribute unsigned short status; readonly attribute unsigned short status;
readonly attribute boolean ok; readonly attribute boolean ok;
readonly attribute ByteString statusText; readonly attribute ByteString statusText;
......
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