| <!doctype html> | |
| <html> | |
| <head> | |
| <meta charset=utf-8> | |
| <title>tests for matching cookie paths</title> | |
| <meta name="timeout" content="long"> | |
| <meta name=help href="http://tools.ietf.org/html/rfc6265#section-5.1.4"> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script src="/resources/testdriver.js"></script> | |
| <script src="/resources/testdriver-vendor.js"></script> | |
| <script src="/cookies/resources/testharness-helpers.js"></script> | |
| </head> | |
| <body> | |
| <div id=log></div> | |
| <script> | |
| var body = document.getElementsByTagName('body')[0]; | |
| var createIframeThen = function (callback) { | |
| var iframe = document.createElement('iframe'); | |
| iframe.src = "/cookies/resources/echo-cookie.html"; | |
| body.appendChild(iframe); | |
| iframe.onload = callback; | |
| return iframe; | |
| }; | |
| var testCookiePathFromDOM = function (testCase, test) { | |
| var iframe = createIframeThen(test.step_func(function () { | |
| iframe.contentWindow.setCookie('dom-' + testCase.name, testCase.path); | |
| var cookieSet = iframe.contentWindow.isCookieSet('dom-' + testCase.name, testCase.path); | |
| if (testCase.match === false) { | |
| assert_equals(cookieSet, null); | |
| } else { | |
| assert_not_equals(cookieSet, null, "Cookie path from DOM should not be `null`"); | |
| } | |
| iframe.contentWindow.expireCookies().then(() => test.done()); | |
| })); | |
| }; | |
| var testCookiePathFromHeader = function (testCase, test) { | |
| var iframe = createIframeThen(test.step_func(function () { | |
| iframe.contentWindow.fetchCookieThen('header-' + testCase.name, testCase.path).then(test.step_func(function (response) { | |
| assert_true(response.ok); | |
| var cookieSet = iframe.contentWindow.isCookieSet('header-' + testCase.name, testCase.path); | |
| iframe.contentWindow.expireCookies().then(() => { | |
| if (testCase.match === false) { | |
| assert_equals(cookieSet, null); | |
| } else { | |
| assert_not_equals(cookieSet, null, "Cookie path from header should not be `null`"); | |
| } | |
| test.done(); | |
| }); | |
| })).catch(test.unreached_func()); | |
| })); | |
| }; | |
| var tests = [{ | |
| "name": "match-slash", | |
| "path": "/", | |
| }, { | |
| "name": "match-page", | |
| "path": "match.html", | |
| }, { | |
| "name": "match-prefix", | |
| "path": "cookies", | |
| }, { | |
| "name": "match-slash-prefix", | |
| "path": "/cookies", | |
| }, { | |
| "name": "match-slash-prefix-slash", | |
| "path": "/cookies/", | |
| }, { | |
| "name": "match-exact-page", | |
| "path": "/cookies/resources/echo-cookie.html", | |
| }, { | |
| "name": "no-match", | |
| "path": "/cook", | |
| "match": false | |
| }, { | |
| "name": "no-match-subpath", | |
| "path": "/w/", | |
| "match": false | |
| }]; | |
| var domTests = tests.map(function (testCase) { | |
| var testName = "`document.cookie` on /cookies/resources/echo-cookie.html sets cookie with path: " + testCase.path; | |
| if (testCase.match === false) { | |
| testName = "`document.cookie` on /cookies/resources/echo-cookie.html DOES NOT set cookie for path: " + testCase.path; | |
| } | |
| return [ | |
| testName, | |
| function () { | |
| testCookiePathFromDOM(testCase, this); | |
| } | |
| ]; | |
| }); | |
| var headerTests = tests.map(function (testCase) { | |
| var testName = "`Set-Cookie` on /cookies/resources/echo-cookie.html sets cookie with path: " + testCase.path; | |
| if (testCase.match === false) { | |
| testName = "`Set-Cookie` on /cookies/resources/echo-cookie.html DOES NOT set cookie for path: " + testCase.path; | |
| } | |
| return [ | |
| testName, | |
| function () { | |
| testCookiePathFromHeader(testCase, this); | |
| } | |
| ]; | |
| }); | |
| executeTestsSerially(domTests.concat(headerTests)); | |
| </script> | |
| </body> | |
| </html> |