|
16 | 16 |
|
17 | 17 | package com.microsoft.playwright; |
18 | 18 |
|
| 19 | +import com.microsoft.playwright.options.HttpHeader; |
19 | 20 | import org.junit.jupiter.api.Test; |
| 21 | +import org.junit.jupiter.api.condition.DisabledIf; |
20 | 22 |
|
21 | 23 | import java.io.OutputStreamWriter; |
| 24 | +import java.util.HashMap; |
22 | 25 | import java.util.Map; |
23 | 26 | import java.util.concurrent.ExecutionException; |
24 | 27 | import java.util.concurrent.Future; |
@@ -79,16 +82,81 @@ void shouldNotThrowWhenContinuingAfterPageIsClosed() { |
79 | 82 | } |
80 | 83 |
|
81 | 84 | @Test |
82 | | - void shouldNotOverrideCookieHeader() throws ExecutionException, InterruptedException { |
| 85 | + @DisabledIf(value = "com.microsoft.playwright.TestBase#isFirefox", disabledReason = "We currently clear all headers during interception in firefox") |
| 86 | + void continueShouldNotPropagateCookieOverrideToRedirects() throws ExecutionException, InterruptedException { |
83 | 87 | // https://github.com/microsoft/playwright/issues/35168 |
| 88 | + server.setRoute("/set-cookie", exchange -> { |
| 89 | + exchange.getResponseHeaders().add("Set-Cookie", "foo=bar;"); |
| 90 | + exchange.sendResponseHeaders(200, 0); |
| 91 | + exchange.getResponseBody().close(); |
| 92 | + }); |
| 93 | + page.navigate(server.PREFIX + "/set-cookie"); |
| 94 | + assertEquals("foo=bar", page.evaluate("() => document.cookie")); |
| 95 | + |
| 96 | + server.setRedirect("/redirect", server.PREFIX + "/empty.html"); |
| 97 | + page.route("**/redirect", route -> { |
| 98 | + Map<String, String> headers = new HashMap<>(route.request().allHeaders()); |
| 99 | + headers.put("cookie", "override"); |
| 100 | + route.resume(new Route.ResumeOptions().setHeaders(headers)); |
| 101 | + }); |
| 102 | + |
84 | 103 | Future<Server.Request> serverRequest = server.futureRequest("/empty.html"); |
85 | | - page.route(server.EMPTY_PAGE, route -> { |
86 | | - Map<String, String> headers = route.request().allHeaders(); |
87 | | - headers.put("Cookie", "foo=bar"); |
| 104 | + page.navigate(server.PREFIX + "/redirect"); |
| 105 | + assertEquals(asList("foo=bar"), serverRequest.get().headers.get("cookie")); |
| 106 | + } |
| 107 | + |
| 108 | + @Test |
| 109 | + @DisabledIf(value = "com.microsoft.playwright.TestBase#isFirefox", disabledReason = "We currently clear all headers during interception in firefox") |
| 110 | + void continueShouldNotOverrideCookie() throws ExecutionException, InterruptedException { |
| 111 | + // https://github.com/microsoft/playwright/issues/35168 |
| 112 | + server.setRoute("/set-cookie", exchange -> { |
| 113 | + exchange.getResponseHeaders().add("Set-Cookie", "foo=bar;"); |
| 114 | + exchange.sendResponseHeaders(200, 0); |
| 115 | + exchange.getResponseBody().close(); |
| 116 | + }); |
| 117 | + page.navigate(server.PREFIX + "/set-cookie"); |
| 118 | + assertEquals("foo=bar", page.evaluate("() => document.cookie")); |
| 119 | + |
| 120 | + page.route("**", route -> { |
| 121 | + Map<String, String> headers = new HashMap<>(route.request().allHeaders()); |
| 122 | + headers.put("cookie", "override"); |
| 123 | + headers.put("custom", "value"); |
88 | 124 | route.resume(new Route.ResumeOptions().setHeaders(headers)); |
89 | 125 | }); |
90 | 126 |
|
| 127 | + Future<Server.Request> serverRequest = server.futureRequest("/empty.html"); |
| 128 | + page.navigate(server.EMPTY_PAGE); |
| 129 | + |
| 130 | + // Original cookie from the browser's cookie jar should be sent. |
| 131 | + assertEquals(asList("foo=bar"), serverRequest.get().headers.get("cookie")); |
| 132 | + assertEquals(asList("value"), serverRequest.get().headers.get("custom")); |
| 133 | + } |
| 134 | + |
| 135 | + @Test |
| 136 | + void redirectAfterContinueShouldBeAbleToDeleteCookie() throws ExecutionException, InterruptedException { |
| 137 | + // https://github.com/microsoft/playwright/issues/35168 |
| 138 | + server.setRoute("/set-cookie", exchange -> { |
| 139 | + exchange.getResponseHeaders().add("Set-Cookie", "foo=bar;"); |
| 140 | + exchange.sendResponseHeaders(200, 0); |
| 141 | + exchange.getResponseBody().close(); |
| 142 | + }); |
| 143 | + page.navigate(server.PREFIX + "/set-cookie"); |
| 144 | + assertEquals("foo=bar", page.evaluate("() => document.cookie")); |
| 145 | + |
| 146 | + server.setRoute("/delete-cookie", exchange -> { |
| 147 | + exchange.getResponseHeaders().add("Set-Cookie", "foo=bar; expires=Thu, 01 Jan 1970 00:00:00 GMT"); |
| 148 | + exchange.sendResponseHeaders(200, 0); |
| 149 | + exchange.getResponseBody().close(); |
| 150 | + }); |
| 151 | + server.setRedirect("/redirect", "/delete-cookie"); |
| 152 | + page.route("**/redirect", route -> { |
| 153 | + // Pass original headers explicitly when continuing. |
| 154 | + route.resume(new Route.ResumeOptions().setHeaders(route.request().allHeaders())); |
| 155 | + }); |
| 156 | + page.navigate(server.PREFIX + "/redirect"); |
| 157 | + |
| 158 | + Future<Server.Request> serverRequest = server.futureRequest("/empty.html"); |
91 | 159 | page.navigate(server.EMPTY_PAGE); |
92 | | - assertNull(serverRequest.get().headers.get("Cookie")); |
| 160 | + assertNull(serverRequest.get().headers.get("cookie")); |
93 | 161 | } |
94 | 162 | } |
0 commit comments