mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1143894 - Part 4: Add tests for handling of the Vary header in DOM Cache; r=bkelly
This commit is contained in:
parent
2ee2e1cfd2
commit
e9a5c75cb5
3
dom/cache/test/mochitest/mochitest.ini
vendored
3
dom/cache/test/mochitest/mochitest.ini
vendored
@ -12,9 +12,12 @@ support-files =
|
||||
test_cache_matchAll_request.js
|
||||
test_cache_overwrite.js
|
||||
mirror.sjs
|
||||
test_cache_match_vary.js
|
||||
vary.sjs
|
||||
|
||||
[test_cache.html]
|
||||
[test_cache_add.html]
|
||||
[test_cache_match_request.html]
|
||||
[test_cache_matchAll_request.html]
|
||||
[test_cache_overwrite.html]
|
||||
[test_cache_match_vary.html]
|
||||
|
20
dom/cache/test/mochitest/test_cache_match_vary.html
vendored
Normal file
20
dom/cache/test/mochitest/test_cache_match_vary.html
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
<!-- Any copyright is dedicated to the Public Domain.
|
||||
- http://creativecommons.org/publicdomain/zero/1.0/ -->
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<title>Validate calling match with requests involving the Vary header</title>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
<script type="text/javascript" src="driver.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<iframe id="frame"></iframe>
|
||||
<script class="testbody" type="text/javascript">
|
||||
runTests("test_cache_match_vary.js")
|
||||
.then(function() {
|
||||
SimpleTest.finish();
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
204
dom/cache/test/mochitest/test_cache_match_vary.js
vendored
Normal file
204
dom/cache/test/mochitest/test_cache_match_vary.js
vendored
Normal file
@ -0,0 +1,204 @@
|
||||
var requestURL = "//mochi.test:8888/tests/dom/cache/test/mochitest/vary.sjs?" + context;
|
||||
var name = "match-vary" + context;
|
||||
|
||||
function checkResponse(r, response, responseText) {
|
||||
ok(r !== response, "The objects should not be the same");
|
||||
is(r.url, response.url.replace("#fragment", ""),
|
||||
"The URLs should be the same");
|
||||
is(r.status, response.status, "The status codes should be the same");
|
||||
is(r.type, response.type, "The response types should be the same");
|
||||
is(r.ok, response.ok, "Both responses should have succeeded");
|
||||
is(r.statusText, response.statusText,
|
||||
"Both responses should have the same status text");
|
||||
is(r.headers.get("Vary"), response.headers.get("Vary"),
|
||||
"Both responses should have the same Vary header");
|
||||
return r.text().then(function(text) {
|
||||
is(text, responseText, "The response body should be correct");
|
||||
});
|
||||
}
|
||||
|
||||
// Returns a Promise that will be resolved to an object with the following
|
||||
// properties:
|
||||
// * cache: A Cache object that contains one entry fetched with headers.
|
||||
// * response: A Response object which is the result of fetching a request
|
||||
// with the specified headers.
|
||||
// * responseText: The body of the above response object.
|
||||
function setupTest(headers) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
var response, responseText, cache;
|
||||
fetch(new Request(requestURL, {headers: headers}))
|
||||
.then(function(r) {
|
||||
response = r;
|
||||
return r.text();
|
||||
}).then(function(text) {
|
||||
responseText = text;
|
||||
return caches.open(name);
|
||||
}).then(function(c) {
|
||||
cache = c;
|
||||
return c.add(new Request(requestURL, {headers: headers}));
|
||||
}).then(function() {
|
||||
resolve({response: response, responseText: responseText, cache: cache});
|
||||
}).catch(function(err) {
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function testBasics() {
|
||||
var test;
|
||||
return setupTest({"WhatToVary": "Cookie"})
|
||||
.then(function(t) {
|
||||
test = t;
|
||||
// Ensure that searching without specifying a Cookie header succeeds.
|
||||
return test.cache.match(requestURL);
|
||||
}).then(function(r) {
|
||||
return checkResponse(r, test.response, test.responseText);
|
||||
}).then(function() {
|
||||
// Ensure that searching with a non-matching value for the Cookie header fails.
|
||||
return test.cache.match(new Request(requestURL, {headers: {"Cookie": "foo=bar"}}));
|
||||
}).then(function(r) {
|
||||
is(typeof r, "undefined", "Searching for a request with an unknown Vary header should not succeed");
|
||||
// Ensure that searching with a non-matching value for the Cookie header but with ignoreVary set succeeds.
|
||||
return test.cache.match(new Request(requestURL, {headers: {"Cookie": "foo=bar"}}),
|
||||
{ignoreVary: true});
|
||||
}).then(function(r) {
|
||||
return checkResponse(r, test.response, test.responseText);
|
||||
});
|
||||
}
|
||||
|
||||
function testStar() {
|
||||
var test;
|
||||
return setupTest({"WhatToVary": "*", "Cookie": "foo=bar"})
|
||||
.then(function(t) {
|
||||
test = t;
|
||||
// Ensure that searching with a different Cookie header with Vary:* succeeds.
|
||||
return test.cache.match(new Request(requestURL, {headers: {"Cookie": "bar=baz"}}));
|
||||
}).then(function(r) {
|
||||
return checkResponse(r, test.response, test.responseText);
|
||||
});
|
||||
}
|
||||
|
||||
function testMatch() {
|
||||
var test;
|
||||
return setupTest({"WhatToVary": "Cookie", "Cookie": "foo=bar"})
|
||||
.then(function(t) {
|
||||
test = t;
|
||||
// Ensure that searching with a different Cookie header fails.
|
||||
return test.cache.match(new Request(requestURL, {headers: {"Cookie": "bar=baz"}}));
|
||||
}).then(function(r) {
|
||||
is(typeof r, "undefined", "Searching for a request with a non-matching Cookie header should not succeed");
|
||||
// Ensure that searching with the same Cookie header succeeds.
|
||||
return test.cache.match(new Request(requestURL, {headers: {"Cookie": "foo=bar"}}));
|
||||
}).then(function(r) {
|
||||
return checkResponse(r, test.response, test.responseText);
|
||||
});
|
||||
}
|
||||
|
||||
function testStarAndAnotherHeader() {
|
||||
var test;
|
||||
return setupTest({"WhatToVary": "*,User-Agent"})
|
||||
.then(function(t) {
|
||||
test = t;
|
||||
// Ensure that searching with a different User-Agent header fails.
|
||||
return test.cache.match(new Request(requestURL, {headers: {"User-Agent": "MyUA"}}));
|
||||
}).then(function(r) {
|
||||
is(typeof r, "undefined", "Searching for a request with a non-matching User-Agent header should not succeed");
|
||||
// Ensure that searching with a different User-Agent header but with ignoreVary succeeds.
|
||||
return test.cache.match(new Request(requestURL, {headers: {"User-Agent": "MyUA"}}),
|
||||
{ignoreVary: true});
|
||||
}).then(function(r) {
|
||||
return checkResponse(r, test.response, test.responseText);
|
||||
});
|
||||
}
|
||||
|
||||
function testInvalidHeaderName() {
|
||||
var test;
|
||||
return setupTest({"WhatToVary": "Foo/Bar, User-Agent"})
|
||||
.then(function(t) {
|
||||
test = t;
|
||||
// Ensure that searching with a different User-Agent header fails.
|
||||
return test.cache.match(new Request(requestURL, {headers: {"User-Agent": "MyUA"}}));
|
||||
}).then(function(r) {
|
||||
is(typeof r, "undefined", "Searching for a request with a non-matching User-Agent header should not succeed");
|
||||
// Ensure that searching with a different User-Agent header but with ignoreVary succeeds.
|
||||
return test.cache.match(new Request(requestURL, {headers: {"User-Agent": "MyUA"}}),
|
||||
{ignoreVary: true});
|
||||
}).then(function(r) {
|
||||
return checkResponse(r, test.response, test.responseText);
|
||||
}).then(function() {
|
||||
// Ensure that we do not mistakenly recognize the tokens in the invalid header name.
|
||||
return test.cache.match(new Request(requestURL, {headers: {"Foo": "foobar"}}));
|
||||
}).then(function(r) {
|
||||
return checkResponse(r, test.response, test.responseText);
|
||||
});
|
||||
}
|
||||
|
||||
function testMultipleHeaders() {
|
||||
var test;
|
||||
return setupTest({"WhatToVary": "Referer,\tAccept-Encoding"})
|
||||
.then(function(t) {
|
||||
test = t;
|
||||
// Ensure that searching with a different Referer header fails.
|
||||
return test.cache.match(new Request(requestURL, {headers: {"Referer": "https://somesite.com/"}}));
|
||||
}).then(function(r) {
|
||||
is(typeof r, "undefined", "Searching for a request with a non-matching Referer header should not succeed");
|
||||
// Ensure that searching with a different Referer header but with ignoreVary succeeds.
|
||||
return test.cache.match(new Request(requestURL, {headers: {"Referer": "https://somesite.com/"}}),
|
||||
{ignoreVary: true});
|
||||
}).then(function(r) {
|
||||
return checkResponse(r, test.response, test.responseText);
|
||||
}).then(function() {
|
||||
// Ensure that searching with a different Accept-Encoding header fails.
|
||||
return test.cache.match(new Request(requestURL, {headers: {"Accept-Encoding": "myencoding"}}));
|
||||
}).then(function(r) {
|
||||
is(typeof r, "undefined", "Searching for a request with a non-matching Accept-Encoding header should not succeed");
|
||||
// Ensure that searching with a different Accept-Encoding header but with ignoreVary succeeds.
|
||||
return test.cache.match(new Request(requestURL, {headers: {"Accept-Encoding": "myencoding"}}),
|
||||
{ignoreVary: true});
|
||||
}).then(function(r) {
|
||||
return checkResponse(r, test.response, test.responseText);
|
||||
}).then(function() {
|
||||
// Ensure that searching with an empty Referer header succeeds.
|
||||
return test.cache.match(new Request(requestURL, {headers: {"Referer": ""}}));
|
||||
}).then(function(r) {
|
||||
return checkResponse(r, test.response, test.responseText);
|
||||
}).then(function() {
|
||||
// Ensure that searching with an empty Accept-Encoding header succeeds.
|
||||
return test.cache.match(new Request(requestURL, {headers: {"Accept-Encoding": ""}}));
|
||||
}).then(function(r) {
|
||||
return checkResponse(r, test.response, test.responseText);
|
||||
}).then(function() {
|
||||
// Ensure that searching with an empty Referer header but with a different Accept-Encoding header fails.
|
||||
return test.cache.match(new Request(requestURL, {headers: {"Referer": "",
|
||||
"Accept-Encoding": "myencoding"}}));
|
||||
}).then(function(r) {
|
||||
is(typeof r, "undefined", "Searching for a request with a non-matching Accept-Encoding header should not succeed");
|
||||
// Ensure that searching with an empty Referer header but with a different Accept-Encoding header and ignoreVary succeeds.
|
||||
return test.cache.match(new Request(requestURL, {headers: {"Referer": "",
|
||||
"Accept-Encoding": "myencoding"}}),
|
||||
{ignoreVary: true});
|
||||
}).then(function(r) {
|
||||
return checkResponse(r, test.response, test.responseText);
|
||||
});
|
||||
}
|
||||
|
||||
// Make sure to clean up after each test step.
|
||||
function step(testPromise) {
|
||||
return testPromise.then(function() {
|
||||
caches.delete(name);
|
||||
});
|
||||
}
|
||||
|
||||
step(testBasics()).then(function() {
|
||||
return step(testStar());
|
||||
}).then(function() {
|
||||
return step(testMatch());
|
||||
}).then(function() {
|
||||
return step(testStarAndAnotherHeader());
|
||||
}).then(function() {
|
||||
return step(testInvalidHeaderName());
|
||||
}).then(function() {
|
||||
return step(testMultipleHeaders());
|
||||
}).then(function() {
|
||||
testDone();
|
||||
});
|
5
dom/cache/test/mochitest/vary.sjs
vendored
Normal file
5
dom/cache/test/mochitest/vary.sjs
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
function handleRequest(request, response) {
|
||||
response.setStatusLine(request.httpVersion, 200, "OK");
|
||||
response.setHeader("Vary", request.getHeader("WhatToVary"));
|
||||
response.write(request.getHeader("WhatToVary"));
|
||||
}
|
Loading…
Reference in New Issue
Block a user