Import fetch/api/cors tests
[WebKit-https.git] / LayoutTests / imported / w3c / web-platform-tests / fetch / api / cors / cors-filtering.sub.any.js
1 // META: script=../resources/utils.js
2
3 function corsFilter(corsUrl, headerName, headerValue, isFiltered) {
4   var url = corsUrl + "?pipe=header(" + headerName + "," + encodeURIComponent(headerValue) +")|header(Access-Control-Allow-Origin,*)";
5   promise_test(function(test) {
6     return fetch(url).then(function(resp) {
7       assert_equals(resp.status, 200, "Fetch success with code 200");
8       assert_equals(resp.type , "cors", "CORS fetch's response has cors type");
9       if (!isFiltered) {
10         assert_equals(resp.headers.get(headerName), headerValue,
11           headerName + " header should be included in response with value: " + headerValue);
12       } else {
13         assert_false(resp.headers.has(headerName), "UA should exclude " + headerName + " header from response");
14       }
15       test.done();
16     });
17   }, "CORS filter on " + headerName + " header");
18 }
19
20 function corsExposeFilter(corsUrl, headerName, headerValue, isForbidden, withCredentials) {
21   var url = corsUrl + "?pipe=header(" + headerName + "," + encodeURIComponent(headerValue) +")|" +
22                             "header(Access-Control-Allow-Origin, http://{{host}}:{{ports[http][0]}})" +
23                             "header(Access-Control-Allow-Credentials, true)" +
24                             "header(Access-Control-Expose-Headers," + headerName + ")";
25
26   var title = "CORS filter on " + headerName + " header, header is " + (isForbidden ? "forbidden" : "exposed");
27   if (withCredentials)
28       title+= "(credentials = include)";
29   promise_test(function(test) {
30     return fetch(new Request(url, { credentials: withCredentials ? "include" : "omit" })).then(function(resp) {
31       assert_equals(resp.status, 200, "Fetch success with code 200");
32       assert_equals(resp.type , "cors", "CORS fetch's response has cors type");
33       if (!isForbidden) {
34         assert_equals(resp.headers.get(headerName), headerValue,
35           headerName + " header should be included in response with value: " + headerValue);
36       } else {
37         assert_false(resp.headers.has(headerName), "UA should exclude " + headerName + " header from response");
38       }
39       test.done();
40     });
41   }, title);
42 }
43
44 var url = "http://{{host}}:{{ports[http][1]}}" + dirname(location.pathname) + RESOURCES_DIR + "top.txt";
45
46 corsFilter(url, "Cache-Control", "no-cache", false);
47 corsFilter(url, "Content-Language", "fr", false);
48 corsFilter(url, "Content-Type", "text/html", false);
49 corsFilter(url, "Expires","04 May 1988 22:22:22 GMT" , false);
50 corsFilter(url, "Last-Modified", "04 May 1988 22:22:22 GMT", false);
51 corsFilter(url, "Pragma", "no-cache", false);
52 corsFilter(url, "Content-Length", "3" , false); // top.txt contains "top"
53
54 corsFilter(url, "Age", "27", true);
55 corsFilter(url, "Server", "wptServe" , true);
56 corsFilter(url, "Warning", "Mind the gap" , true);
57 corsFilter(url, "Set-Cookie", "name=value" , true);
58 corsFilter(url, "Set-Cookie2", "name=value" , true);
59
60 corsExposeFilter(url, "Age", "27", false);
61 corsExposeFilter(url, "Server", "wptServe" , false);
62 corsExposeFilter(url, "Warning", "Mind the gap" , false);
63
64 corsExposeFilter(url, "Set-Cookie", "name=value" , true);
65 corsExposeFilter(url, "Set-Cookie2", "name=value" , true);
66 corsExposeFilter(url, "Set-Cookie", "name=value" , true, true);
67 corsExposeFilter(url, "Set-Cookie2", "name=value" , true, true);
68
69 done();