| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../http/tests/inspector/resources/inspector-test.js"></script> |
| <script> |
| function test() |
| { |
| let suite = InspectorTest.createSyncSuite("Cookie"); |
| |
| suite.addTestCase({ |
| name: "WI.Cookie.parseCookieRequestHeader", |
| description: "Cookie request header.", |
| test() { |
| function test(header, expectedCookies) { |
| InspectorTest.log(`HEADER: Cookie: ${header}`); |
| let cookies = WI.Cookie.parseCookieRequestHeader(header); |
| InspectorTest.expectEqual(cookies.length, expectedCookies.length, `Should have ${expectedCookies.length} cookies.`); |
| for (let i = 0; i < cookies.length; ++i) { |
| let cookie = cookies[i]; |
| let expected = expectedCookies[i]; |
| InspectorTest.expectThat(cookie instanceof WI.Cookie, `Value should be a WI.Cookie.`); |
| InspectorTest.expectEqual(cookie.type, WI.Cookie.Type.Request, `cookie.type should be WI.Cookie.Type.Request.`); |
| InspectorTest.expectEqual(cookie.name, expected.name, `cookie.name should be '${expected.name}'.`); |
| InspectorTest.expectEqual(cookie.value, expected.value, `cookie.value should be '${expected.value}'.`); |
| } |
| InspectorTest.log(""); |
| } |
| |
| test("", []); |
| |
| test(`foo=bar`, [ |
| {name: "foo", value: "bar"}, |
| ]); |
| |
| test(`foo=bar; alpha=beta`, [ |
| {name: "foo", value: "bar"}, |
| {name: "alpha", value: "beta"}, |
| ]); |
| |
| test(`foo=a,b,c, d, e, f,g; alpha=123423 qwerty; beta=gamma`, [ |
| {name: "foo", value: "a,b,c, d, e, f,g"}, |
| {name: "alpha", value: "123423 qwerty"}, |
| {name: "beta", value: "gamma"}, |
| ]); |
| |
| return true; |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "WI.Cookie.parseSetCookieResponseHeader", |
| description: "Set-Cookie response headers.", |
| test() { |
| function test(header, expected) { |
| InspectorTest.log(`HEADER: Set-Cookie: ${header}`); |
| let cookie = WI.Cookie.parseSetCookieResponseHeader(header); |
| InspectorTest.expectThat(cookie instanceof WI.Cookie, `Value should be a WI.Cookie.`); |
| InspectorTest.expectEqual(cookie.header, header, `cookie.header should be the original header text.`); |
| InspectorTest.expectEqual(cookie.type, WI.Cookie.Type.Response, `cookie.type should be WI.Cookie.Type.Response.`); |
| InspectorTest.expectEqual(cookie.name, expected.name, `cookie.name should be '${expected.name}'.`); |
| InspectorTest.expectEqual(cookie.value, expected.value, `cookie.value should be '${expected.value}'.`); |
| if (cookie.expires && expected.expires) |
| InspectorTest.expectEqual(cookie.expires.getTime(), expected.expires.getTime(), `cookie.expires should be '${expected.expires}'.`); |
| else |
| InspectorTest.expectEqual(cookie.expires, expected.expires, `cookie.expires should be '${expected.expires}'.`); |
| InspectorTest.expectEqual(cookie.maxAge, expected.maxAge, `cookie.maxAge should be '${expected.maxAge}'.`); |
| InspectorTest.expectEqual(cookie.path, expected.path, `cookie.path should be '${expected.path}'.`); |
| InspectorTest.expectEqual(cookie.domain, expected.domain, `cookie.domain should be '${expected.domain}'.`); |
| InspectorTest.expectEqual(cookie.secure, expected.secure, `cookie.secure should be '${expected.secure}'.`); |
| InspectorTest.expectEqual(cookie.httpOnly, expected.httpOnly, `cookie.httpOnly should be '${expected.httpOnly}'.`); |
| InspectorTest.expectEqual(cookie.sameSite, expected.sameSite, `cookie.sameSite should be '${expected.sameSite}'.`); |
| InspectorTest.log(""); |
| } |
| |
| InspectorTest.expectNull(WI.Cookie.parseSetCookieResponseHeader(""), "Empty header should produce null."); |
| |
| test(`name=value`, { |
| name: "name", |
| value: "value", |
| expires: null, |
| maxAge: null, |
| path: null, |
| domain: null, |
| secure: false, |
| httpOnly: false, |
| sameSite: WI.Cookie.SameSiteType.None, |
| }); |
| |
| test(`name=value; path=/foo`, { |
| name: "name", |
| value: "value", |
| expires: null, |
| maxAge: null, |
| path: "/foo", |
| domain: null, |
| secure: false, |
| httpOnly: false, |
| sameSite: WI.Cookie.SameSiteType.None, |
| }); |
| |
| test(`name=value; domain=example.com`, { |
| name: "name", |
| value: "value", |
| expires: null, |
| maxAge: null, |
| path: null, |
| domain: "example.com", |
| secure: false, |
| httpOnly: false, |
| sameSite: WI.Cookie.SameSiteType.None, |
| }); |
| |
| test(`name=value; secure`, { |
| name: "name", |
| value: "value", |
| expires: null, |
| maxAge: null, |
| path: null, |
| domain: null, |
| secure: true, |
| httpOnly: false, |
| sameSite: WI.Cookie.SameSiteType.None, |
| }); |
| |
| test(`name=value; Secure`, { |
| name: "name", |
| value: "value", |
| expires: null, |
| maxAge: null, |
| path: null, |
| domain: null, |
| secure: true, |
| httpOnly: false, |
| sameSite: WI.Cookie.SameSiteType.None, |
| }); |
| |
| test(`name=value; HttpOnly`, { |
| name: "name", |
| value: "value", |
| expires: null, |
| maxAge: null, |
| path: null, |
| domain: null, |
| secure: false, |
| httpOnly: true, |
| sameSite: WI.Cookie.SameSiteType.None, |
| }); |
| |
| test(`name=value; SameSite=lax`, { |
| name: "name", |
| value: "value", |
| expires: null, |
| maxAge: null, |
| path: null, |
| domain: null, |
| secure: false, |
| httpOnly: false, |
| sameSite: WI.Cookie.SameSiteType.Lax, |
| }); |
| |
| test(`name=value; SameSite=strict`, { |
| name: "name", |
| value: "value", |
| expires: null, |
| maxAge: null, |
| path: null, |
| domain: null, |
| secure: false, |
| httpOnly: false, |
| sameSite: WI.Cookie.SameSiteType.Strict, |
| }); |
| |
| // SameSite with unknown value is ignored. |
| test(`name=value; SameSite=invalid`, { |
| name: "name", |
| value: "value", |
| expires: null, |
| maxAge: null, |
| path: null, |
| domain: null, |
| secure: false, |
| httpOnly: false, |
| sameSite: WI.Cookie.SameSiteType.None, |
| }); |
| |
| // SameSite without value is ignored. |
| test(`name=value; SameSite`, { |
| name: "name", |
| value: "value", |
| expires: null, |
| maxAge: null, |
| path: null, |
| domain: null, |
| secure: false, |
| httpOnly: false, |
| sameSite: WI.Cookie.SameSiteType.None, |
| }); |
| |
| test(`name=value; expires=Fri 06-Oct-2017 03:20:27 GMT; Max-Age=3600`, { |
| name: "name", |
| value: "value", |
| expires: new Date("Fri 06-Oct-2017 03:20:27 GMT"), |
| maxAge: 3600, |
| path: null, |
| domain: null, |
| secure: false, |
| httpOnly: false, |
| sameSite: WI.Cookie.SameSiteType.None, |
| }); |
| |
| test(`name=value; expires=Fri 06-Oct-2017 03:43:47 GMT; Max-Age=5000; path=/foo; domain=example.com; secure; HttpOnly`, { |
| name: "name", |
| value: "value", |
| expires: new Date("Fri 06-Oct-2017 03:43:47 GMT"), |
| maxAge: 5000, |
| path: "/foo", |
| domain: "example.com", |
| secure: true, |
| httpOnly: true, |
| sameSite: WI.Cookie.SameSiteType.None, |
| }); |
| |
| test(`name=value; Unknown; path=/one/two`, { |
| name: "name", |
| value: "value", |
| expires: null, |
| maxAge: null, |
| path: "/one/two", |
| domain: null, |
| secure: false, |
| httpOnly: false, |
| sameSite: WI.Cookie.SameSiteType.None, |
| }); |
| |
| test(`name=value; Unknown=Ignored; path=/one/two`, { |
| name: "name", |
| value: "value", |
| expires: null, |
| maxAge: null, |
| path: "/one/two", |
| domain: null, |
| secure: false, |
| httpOnly: false, |
| sameSite: WI.Cookie.SameSiteType.None, |
| }); |
| |
| test(`name=somewhat longer value than normal with spaces, and commas; domain=other.example.com`, { |
| name: "name", |
| value: "somewhat longer value than normal with spaces, and commas", |
| expires: null, |
| maxAge: null, |
| path: null, |
| domain: "other.example.com", |
| secure: false, |
| httpOnly: false, |
| sameSite: WI.Cookie.SameSiteType.None, |
| }); |
| |
| // Some servers omit the required space after the semicolon. |
| test(`name==value=;Domain=.example.com;Expires=Wed, 04-Apr-2018 03:34:02 GMT`, { |
| name: "name", |
| value: "=value=", |
| expires: new Date("Wed, 04-Apr-2018 03:34:02 GMT"), |
| maxAge: null, |
| path: null, |
| domain: ".example.com", |
| secure: false, |
| httpOnly: false, |
| sameSite: WI.Cookie.SameSiteType.None, |
| }); |
| |
| return true; |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "WI.Cookie.url", |
| description: "Cookie url property.", |
| test() { |
| let cookieWithDomain = WI.Cookie.parseSetCookieResponseHeader(`name=value; domain=example.com`); |
| InspectorTest.expectEqual(cookieWithDomain.url, "http://example.com", "Cookie url should include domain."); |
| |
| let cookieWithDomainAndPath = WI.Cookie.parseSetCookieResponseHeader(`name=value; domain=example.com; path=/foo`); |
| InspectorTest.expectEqual(cookieWithDomainAndPath.url, "http://example.com/foo", "Cookie url should include domain and path."); |
| |
| let secureCookie = WI.Cookie.parseSetCookieResponseHeader(`name=value; domain=example.com; secure`); |
| InspectorTest.expectEqual(secureCookie.url, "https://example.com", "Secure cookie url should begin with 'https'."); |
| |
| return true; |
| } |
| }); |
| |
| suite.runTestCasesAndFinish(); |
| } |
| </script> |
| </head> |
| <body onload="runTest()"> |
| <p>Testing WI.Cookie.</p> |
| </body> |
| </html> |