| <!DOCTYPE html> |
| <meta charset="utf-8"> |
| <title>DBSC refresh sends back new session config</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="helper.js" type="module"></script> |
| |
| <script type="module"> |
| import { expireCookie, waitForCookie, addCookieAndSessionCleanup, configureServer, setupShardedServerState, documentHasCookie } from "./helper.js"; |
| |
| promise_test(async t => { |
| await setupShardedServerState(); |
| const expectedCookieAndValue1 = "auth_cookie=abcdef0123"; |
| const expectedCookieAndAttributes1 = `${expectedCookieAndValue1};Domain=${location.hostname};Path=/device-bound-session-credentials`; |
| const expectedCookieAndValue2 = "other_cookie=ghijkl4567"; |
| const expectedCookieAndAttributes2 = `${expectedCookieAndValue2};Domain=${location.hostname};Path=/device-bound-session-credentials`; |
| addCookieAndSessionCleanup(t); |
| |
| // Prompt starting a session, and wait until registration completes. |
| const loginResponse = await fetch('login.py'); |
| assert_equals(loginResponse.status, 200); |
| await waitForCookie(expectedCookieAndValue1, /*expectCookie=*/true); |
| |
| // Confirm that a request has the cookie set. |
| const authResponse = await fetch('verify_authenticated.py'); |
| assert_equals(authResponse.status, 200); |
| // Confirm that a request does not have alternate cookie set. |
| const alternateAuthResponse = await fetch('verify_authenticated.py', { |
| method: 'POST', |
| body: expectedCookieAndValue2 |
| }); |
| assert_equals(alternateAuthResponse.status, 401); |
| |
| // Configure server to change the cookie in the session config on next refresh. |
| configureServer({ cookieDetails: [{ nameAndValue: expectedCookieAndValue2 }] }); |
| |
| // Expire the first cookie and send a request, which triggers the refresh with the new session config. |
| expireCookie(expectedCookieAndAttributes1); |
| assert_false(documentHasCookie(expectedCookieAndValue1)); |
| const authResponseAfterExpiry1 = await fetch('verify_authenticated.py'); |
| assert_equals(authResponseAfterExpiry1.status, 401); |
| assert_false(documentHasCookie(expectedCookieAndValue1)); |
| |
| // Confirm the alternate cookie is set and included in requests. |
| assert_true(documentHasCookie(expectedCookieAndValue2)); |
| const alternateAuthResponseAfterExpiry1 = await fetch('verify_authenticated.py', { |
| method: 'POST', |
| body: expectedCookieAndValue2 |
| }); |
| assert_equals(alternateAuthResponseAfterExpiry1.status, 200); |
| |
| // Expire the second cookie. Confirm the second cookie is refreshed, and not the first. |
| expireCookie(expectedCookieAndAttributes2); |
| assert_false(documentHasCookie(expectedCookieAndValue2)); |
| const alternateAuthResponseAfterExpiry2 = await fetch('verify_authenticated.py', { |
| method: 'POST', |
| body: expectedCookieAndValue2 |
| }); |
| assert_equals(alternateAuthResponseAfterExpiry2.status, 200); |
| assert_true(documentHasCookie(expectedCookieAndValue2)); |
| assert_false(documentHasCookie(expectedCookieAndValue1)); |
| }, "Refresh can replace session config"); |
| </script> |