| <!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="/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.expireCookie('dom-' + testCase.name, testCase.path); |
| 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.expireCookie('header-' + testCase.name, testCase.path); |
| 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> |