| Index: third_party/WebKit/LayoutTests/external/wpt/referrer-policy/generic/referrer-policy-test-case.js
|
| diff --git a/third_party/WebKit/LayoutTests/external/wpt/referrer-policy/generic/referrer-policy-test-case.js b/third_party/WebKit/LayoutTests/external/wpt/referrer-policy/generic/referrer-policy-test-case.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b90ecfd93cc881e07d651065f255ed9b94430ca2
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/external/wpt/referrer-policy/generic/referrer-policy-test-case.js
|
| @@ -0,0 +1,127 @@
|
| +function ReferrerPolicyTestCase(scenario, testDescription, sanityChecker) {
|
| + // Pass and skip rest of the test if browser does not support fetch.
|
| + if (scenario.subresource == "fetch-request" && !window.fetch) {
|
| + // TODO(kristijanburnik): This should be refactored.
|
| + return {
|
| + start: function() {
|
| + test(function() { assert_true(true); },
|
| + "[ReferrerPolicyTestCase] Skipping test: Fetch is not supported.");
|
| + }
|
| + };
|
| + }
|
| +
|
| + // This check is A NOOP in release.
|
| + sanityChecker.checkScenario(scenario);
|
| +
|
| + var subresourceInvoker = {
|
| + "a-tag": queryLink,
|
| + "area-tag": queryAreaLink,
|
| + "fetch-request": queryFetch,
|
| + "iframe-tag": queryIframe,
|
| + "img-tag": queryImage,
|
| + "script-tag": queryScript,
|
| + "worker-request": queryWorker,
|
| + "xhr-request": queryXhr
|
| + };
|
| +
|
| + var referrerUrlResolver = {
|
| + "omitted": function() {
|
| + return undefined;
|
| + },
|
| + "origin": function() {
|
| + return document.origin + "/";
|
| + },
|
| + "stripped-referrer": function() {
|
| + return stripUrlForUseAsReferrer(location.toString());
|
| + }
|
| + };
|
| +
|
| + var t = {
|
| + _scenario: scenario,
|
| + _testDescription: testDescription,
|
| + _subresourceUrl: null,
|
| + _expectedReferrerUrl: null,
|
| + _constructSubresourceUrl: function() {
|
| + // TODO(kristijanburnik): We should assert that these two domains are
|
| + // different. E.g. If someone runs the tets over www, this would fail.
|
| + var domainForOrigin = {
|
| + "cross-origin":"{{domains[www1]}}",
|
| + "same-origin": location.hostname
|
| + };
|
| +
|
| + // Values obtained and replaced by the wptserve pipeline:
|
| + // http://wptserve.readthedocs.org/en/latest/pipes.html#built-in-pipes
|
| + var portForProtocol = {
|
| + "http": parseInt("{{ports[http][0]}}"),
|
| + "https": parseInt("{{ports[https][0]}}")
|
| + }
|
| +
|
| + var targetPort = portForProtocol[t._scenario.target_protocol];
|
| +
|
| + t._subresourceUrl = t._scenario.target_protocol + "://" +
|
| + domainForOrigin[t._scenario.origin] +
|
| + normalizePort(targetPort) +
|
| + t._scenario["subresource_path"] +
|
| + "?redirection=" + t._scenario["redirection"] +
|
| + "&cache_destroyer=" + (new Date()).getTime();
|
| + },
|
| +
|
| + _constructExpectedReferrerUrl: function() {
|
| + t._expectedReferrerUrl = referrerUrlResolver[t._scenario.referrer_url]();
|
| + },
|
| +
|
| + _invokeSubresource: function(callback, test) {
|
| + var invoker = subresourceInvoker[t._scenario.subresource];
|
| +
|
| + // Depending on the delivery method, extend the subresource element with
|
| + // these attributes.
|
| + var elementAttributesForDeliveryMethod = {
|
| + "attr-referrer": {referrerPolicy: t._scenario.referrer_policy},
|
| + "rel-noreferrer": {rel: "noreferrer"}
|
| + };
|
| +
|
| + var delivery_method = t._scenario.delivery_method;
|
| +
|
| + if (delivery_method in elementAttributesForDeliveryMethod) {
|
| + invoker(t._subresourceUrl,
|
| + callback,
|
| + elementAttributesForDeliveryMethod[delivery_method],
|
| + t._scenario.referrer_policy,
|
| + test);
|
| + } else {
|
| + invoker(t._subresourceUrl, callback, null, t._scenario.referrer_policy, test);
|
| + }
|
| +
|
| + },
|
| +
|
| + start: function() {
|
| + t._constructSubresourceUrl();
|
| + t._constructExpectedReferrerUrl();
|
| +
|
| + var test = async_test(t._testDescription);
|
| +
|
| + t._invokeSubresource(function(result) {
|
| + // Check if the result is in valid format. NOOP in release.
|
| + sanityChecker.checkSubresourceResult(
|
| + test, t._scenario, t._subresourceUrl, result);
|
| +
|
| + // Check the reported URL.
|
| + test.step(function() {
|
| + assert_equals(result.referrer,
|
| + t._expectedReferrerUrl,
|
| + "Reported Referrer URL is '" +
|
| + t._scenario.referrer_url + "'.");
|
| + assert_equals(result.headers.referer,
|
| + t._expectedReferrerUrl,
|
| + "Reported Referrer URL from HTTP header is '" +
|
| + t._expectedReferrerUrl + "'");
|
| + }, "Reported Referrer URL is as expected: " + t._scenario.referrer_url);
|
| +
|
| + test.done();
|
| + }, test);
|
| +
|
| + }
|
| + }
|
| +
|
| + return t;
|
| +}
|
|
|