| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <memory> | 5 #include <memory> |
| 6 | 6 |
| 7 #include "base/memory/ptr_util.h" | 7 #include "base/memory/ptr_util.h" |
| 8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
| 9 #include "content/public/test/browser_test.h" | 9 #include "content/public/test/browser_test.h" |
| 10 #include "headless/public/domains/page.h" | 10 #include "headless/public/domains/page.h" |
| 11 #include "headless/public/headless_browser.h" | 11 #include "headless/public/headless_browser.h" |
| 12 #include "headless/public/headless_devtools_client.h" | 12 #include "headless/public/headless_devtools_client.h" |
| 13 #include "headless/public/headless_devtools_target.h" | 13 #include "headless/public/headless_devtools_target.h" |
| 14 #include "headless/public/headless_web_contents.h" | 14 #include "headless/public/headless_web_contents.h" |
| 15 #include "headless/test/headless_browser_test.h" | 15 #include "headless/test/headless_browser_test.h" |
| 16 #include "headless/test/test_protocol_handler.h" | 16 #include "headless/test/test_protocol_handler.h" |
| 17 #include "headless/test/test_url_request_job.h" | 17 #include "headless/test/test_url_request_job.h" |
| 18 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" | 18 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" |
| 19 #include "net/cookies/cookie_store.h" | 19 #include "net/cookies/cookie_store.h" |
| 20 #include "net/test/spawned_test_server/spawned_test_server.h" | 20 #include "net/test/spawned_test_server/spawned_test_server.h" |
| 21 #include "net/url_request/url_request_context.h" | 21 #include "net/url_request/url_request_context.h" |
| 22 #include "testing/gmock/include/gmock/gmock.h" |
| 22 #include "testing/gtest/include/gtest/gtest.h" | 23 #include "testing/gtest/include/gtest/gtest.h" |
| 23 #include "ui/gfx/geometry/size.h" | 24 #include "ui/gfx/geometry/size.h" |
| 24 | 25 |
| 26 using testing::UnorderedElementsAre; |
| 27 |
| 25 namespace headless { | 28 namespace headless { |
| 26 | 29 |
| 27 IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, CreateAndDestroyWebContents) { | 30 IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, CreateAndDestroyWebContents) { |
| 31 std::unique_ptr<HeadlessBrowserContext> browser_context = |
| 32 browser()->CreateBrowserContextBuilder().Build(); |
| 28 HeadlessWebContents* web_contents = | 33 HeadlessWebContents* web_contents = |
| 29 browser()->CreateWebContentsBuilder().Build(); | 34 browser_context->CreateWebContentsBuilder().Build(); |
| 30 EXPECT_TRUE(web_contents); | 35 EXPECT_TRUE(web_contents); |
| 31 | 36 |
| 32 EXPECT_EQ(static_cast<size_t>(1), browser()->GetAllWebContents().size()); | 37 EXPECT_THAT(browser()->GetAllWebContents(), |
| 33 EXPECT_EQ(web_contents, browser()->GetAllWebContents()[0]); | 38 UnorderedElementsAre(web_contents)); |
| 39 EXPECT_THAT(browser_context->GetAllWebContents(), |
| 40 UnorderedElementsAre(web_contents)); |
| 34 // TODO(skyostil): Verify viewport dimensions once we can. | 41 // TODO(skyostil): Verify viewport dimensions once we can. |
| 42 |
| 35 web_contents->Close(); | 43 web_contents->Close(); |
| 36 | 44 |
| 37 EXPECT_TRUE(browser()->GetAllWebContents().empty()); | 45 EXPECT_TRUE(browser()->GetAllWebContents().empty()); |
| 46 EXPECT_TRUE(browser_context->GetAllWebContents().empty()); |
| 47 } |
| 48 |
| 49 IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, |
| 50 WebContentsAreDestroyedWithContext) { |
| 51 std::unique_ptr<HeadlessBrowserContext> browser_context = |
| 52 browser()->CreateBrowserContextBuilder().Build(); |
| 53 HeadlessWebContents* web_contents = |
| 54 browser_context->CreateWebContentsBuilder().Build(); |
| 55 EXPECT_TRUE(web_contents); |
| 56 |
| 57 EXPECT_THAT(browser()->GetAllWebContents(), |
| 58 UnorderedElementsAre(web_contents)); |
| 59 EXPECT_THAT(browser_context->GetAllWebContents(), |
| 60 UnorderedElementsAre(web_contents)); |
| 61 |
| 62 browser_context.reset(); |
| 63 |
| 64 EXPECT_TRUE(browser()->GetAllWebContents().empty()); |
| 65 } |
| 66 |
| 67 IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, DestroyAndCreateTwoWebContents) { |
| 68 std::unique_ptr<HeadlessBrowserContext> browser_context1 = |
| 69 browser()->CreateBrowserContextBuilder().Build(); |
| 70 HeadlessWebContents* web_contents1 = |
| 71 browser_context1->CreateWebContentsBuilder().Build(); |
| 72 |
| 73 EXPECT_THAT(browser()->GetAllWebContents(), |
| 74 UnorderedElementsAre(web_contents1)); |
| 75 EXPECT_THAT(browser_context1->GetAllWebContents(), |
| 76 UnorderedElementsAre(web_contents1)); |
| 77 |
| 78 std::unique_ptr<HeadlessBrowserContext> browser_context2 = |
| 79 browser()->CreateBrowserContextBuilder().Build(); |
| 80 HeadlessWebContents* web_contents2 = |
| 81 browser_context2->CreateWebContentsBuilder().Build(); |
| 82 |
| 83 EXPECT_THAT(browser()->GetAllWebContents(), |
| 84 UnorderedElementsAre(web_contents1, web_contents2)); |
| 85 EXPECT_THAT(browser_context1->GetAllWebContents(), |
| 86 UnorderedElementsAre(web_contents1)); |
| 87 EXPECT_THAT(browser_context2->GetAllWebContents(), |
| 88 UnorderedElementsAre(web_contents2)); |
| 89 |
| 90 browser_context1.reset(); |
| 91 |
| 92 EXPECT_THAT(browser()->GetAllWebContents(), |
| 93 UnorderedElementsAre(web_contents2)); |
| 94 EXPECT_THAT(browser_context2->GetAllWebContents(), |
| 95 UnorderedElementsAre(web_contents2)); |
| 96 |
| 97 browser_context2.reset(); |
| 98 |
| 99 EXPECT_TRUE(browser()->GetAllWebContents().empty()); |
| 38 } | 100 } |
| 39 | 101 |
| 40 IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, CreateWithBadURL) { | 102 IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, CreateWithBadURL) { |
| 41 GURL bad_url("not_valid"); | 103 GURL bad_url("not_valid"); |
| 104 |
| 105 std::unique_ptr<HeadlessBrowserContext> browser_context = |
| 106 browser()->CreateBrowserContextBuilder().Build(); |
| 42 HeadlessWebContents* web_contents = | 107 HeadlessWebContents* web_contents = |
| 43 browser()->CreateWebContentsBuilder().SetInitialURL(bad_url).Build(); | 108 browser_context->CreateWebContentsBuilder() |
| 109 .SetInitialURL(bad_url) |
| 110 .Build(); |
| 111 |
| 44 EXPECT_FALSE(web_contents); | 112 EXPECT_FALSE(web_contents); |
| 45 EXPECT_TRUE(browser()->GetAllWebContents().empty()); | 113 EXPECT_TRUE(browser()->GetAllWebContents().empty()); |
| 46 } | 114 } |
| 47 | 115 |
| 48 class HeadlessBrowserTestWithProxy : public HeadlessBrowserTest { | 116 class HeadlessBrowserTestWithProxy : public HeadlessBrowserTest { |
| 49 public: | 117 public: |
| 50 HeadlessBrowserTestWithProxy() | 118 HeadlessBrowserTestWithProxy() |
| 51 : proxy_server_(net::SpawnedTestServer::TYPE_HTTP, | 119 : proxy_server_(net::SpawnedTestServer::TYPE_HTTP, |
| 52 net::SpawnedTestServer::kLocalhost, | 120 net::SpawnedTestServer::kLocalhost, |
| 53 base::FilePath(FILE_PATH_LITERAL("headless/test/data"))) { | 121 base::FilePath(FILE_PATH_LITERAL("headless/test/data"))) { |
| 54 } | 122 } |
| 55 | 123 |
| 56 void SetUp() override { | 124 void SetUp() override { |
| 57 ASSERT_TRUE(proxy_server_.Start()); | 125 ASSERT_TRUE(proxy_server_.Start()); |
| 58 HeadlessBrowserTest::SetUp(); | 126 HeadlessBrowserTest::SetUp(); |
| 59 } | 127 } |
| 60 | 128 |
| 61 void TearDown() override { | 129 void TearDown() override { |
| 62 proxy_server_.Stop(); | 130 proxy_server_.Stop(); |
| 63 HeadlessBrowserTest::TearDown(); | 131 HeadlessBrowserTest::TearDown(); |
| 64 } | 132 } |
| 65 | 133 |
| 66 net::SpawnedTestServer* proxy_server() { return &proxy_server_; } | 134 net::SpawnedTestServer* proxy_server() { return &proxy_server_; } |
| 67 | 135 |
| 68 private: | 136 private: |
| 69 net::SpawnedTestServer proxy_server_; | 137 net::SpawnedTestServer proxy_server_; |
| 70 }; | 138 }; |
| 71 | 139 |
| 72 IN_PROC_BROWSER_TEST_F(HeadlessBrowserTestWithProxy, SetProxyServer) { | 140 IN_PROC_BROWSER_TEST_F(HeadlessBrowserTestWithProxy, SetProxyServer) { |
| 73 HeadlessBrowser::Options::Builder builder; | 141 std::unique_ptr<HeadlessBrowserContext> browser_context = |
| 74 builder.SetProxyServer(proxy_server()->host_port_pair()); | 142 browser() |
| 75 SetBrowserOptions(builder.Build()); | 143 ->CreateBrowserContextBuilder() |
| 144 .SetProxyServer(proxy_server()->host_port_pair()) |
| 145 .Build(); |
| 76 | 146 |
| 77 // Load a page which doesn't actually exist, but for which the our proxy | 147 // Load a page which doesn't actually exist, but for which the our proxy |
| 78 // returns valid content anyway. | 148 // returns valid content anyway. |
| 79 // | 149 // |
| 80 // TODO(altimin): Currently this construction does not serve hello.html | 150 // TODO(altimin): Currently this construction does not serve hello.html |
| 81 // from headless/test/data as expected. We should fix this. | 151 // from headless/test/data as expected. We should fix this. |
| 82 HeadlessWebContents* web_contents = | 152 HeadlessWebContents* web_contents = |
| 83 browser() | 153 browser_context->CreateWebContentsBuilder() |
| 84 ->CreateWebContentsBuilder() | |
| 85 .SetInitialURL(GURL("http://not-an-actual-domain.tld/hello.html")) | 154 .SetInitialURL(GURL("http://not-an-actual-domain.tld/hello.html")) |
| 86 .Build(); | 155 .Build(); |
| 87 EXPECT_TRUE(WaitForLoad(web_contents)); | 156 EXPECT_TRUE(WaitForLoad(web_contents)); |
| 88 EXPECT_EQ(static_cast<size_t>(1), browser()->GetAllWebContents().size()); | 157 EXPECT_THAT(browser()->GetAllWebContents(), |
| 89 EXPECT_EQ(web_contents, browser()->GetAllWebContents()[0]); | 158 UnorderedElementsAre(web_contents)); |
| 90 web_contents->Close(); | 159 web_contents->Close(); |
| 91 EXPECT_TRUE(browser()->GetAllWebContents().empty()); | 160 EXPECT_TRUE(browser()->GetAllWebContents().empty()); |
| 92 } | 161 } |
| 93 | 162 |
| 94 IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, SetHostResolverRules) { | 163 IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, SetHostResolverRules) { |
| 95 EXPECT_TRUE(embedded_test_server()->Start()); | 164 EXPECT_TRUE(embedded_test_server()->Start()); |
| 96 HeadlessBrowser::Options::Builder builder; | 165 |
| 97 builder.SetHostResolverRules( | 166 std::string host_resolver_rules = |
| 98 base::StringPrintf("MAP not-an-actual-domain.tld 127.0.0.1:%d", | 167 base::StringPrintf("MAP not-an-actual-domain.tld 127.0.0.1:%d", |
| 99 embedded_test_server()->host_port_pair().port())); | 168 embedded_test_server()->host_port_pair().port()); |
| 100 SetBrowserOptions(builder.Build()); | 169 |
| 170 std::unique_ptr<HeadlessBrowserContext> browser_context = |
| 171 browser() |
| 172 ->CreateBrowserContextBuilder() |
| 173 .SetHostResolverRules(host_resolver_rules) |
| 174 .Build(); |
| 101 | 175 |
| 102 // Load a page which doesn't actually exist, but which is turned into a valid | 176 // Load a page which doesn't actually exist, but which is turned into a valid |
| 103 // address by our host resolver rules. | 177 // address by our host resolver rules. |
| 104 HeadlessWebContents* web_contents = | 178 HeadlessWebContents* web_contents = |
| 105 browser() | 179 browser_context->CreateWebContentsBuilder() |
| 106 ->CreateWebContentsBuilder() | |
| 107 .SetInitialURL(GURL("http://not-an-actual-domain.tld/hello.html")) | 180 .SetInitialURL(GURL("http://not-an-actual-domain.tld/hello.html")) |
| 108 .Build(); | 181 .Build(); |
| 182 |
| 109 EXPECT_TRUE(WaitForLoad(web_contents)); | 183 EXPECT_TRUE(WaitForLoad(web_contents)); |
| 110 } | 184 } |
| 111 | 185 |
| 112 IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, HttpProtocolHandler) { | 186 IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, HttpProtocolHandler) { |
| 113 const std::string kResponseBody = "<p>HTTP response body</p>"; | 187 const std::string kResponseBody = "<p>HTTP response body</p>"; |
| 114 ProtocolHandlerMap protocol_handlers; | 188 ProtocolHandlerMap protocol_handlers; |
| 115 protocol_handlers[url::kHttpScheme] = | 189 protocol_handlers[url::kHttpScheme] = |
| 116 base::WrapUnique(new TestProtocolHandler(kResponseBody)); | 190 base::WrapUnique(new TestProtocolHandler(kResponseBody)); |
| 117 | 191 |
| 118 HeadlessBrowser::Options::Builder builder; | 192 std::unique_ptr<HeadlessBrowserContext> browser_context = |
| 119 builder.SetProtocolHandlers(std::move(protocol_handlers)); | 193 browser() |
| 120 SetBrowserOptions(builder.Build()); | 194 ->CreateBrowserContextBuilder() |
| 195 .SetProtocolHandlers(std::move(protocol_handlers)) |
| 196 .Build(); |
| 121 | 197 |
| 122 // Load a page which doesn't actually exist, but which is fetched by our | 198 // Load a page which doesn't actually exist, but which is fetched by our |
| 123 // custom protocol handler. | 199 // custom protocol handler. |
| 124 HeadlessWebContents* web_contents = | 200 HeadlessWebContents* web_contents = |
| 125 browser() | 201 browser_context->CreateWebContentsBuilder() |
| 126 ->CreateWebContentsBuilder() | |
| 127 .SetInitialURL(GURL("http://not-an-actual-domain.tld/hello.html")) | 202 .SetInitialURL(GURL("http://not-an-actual-domain.tld/hello.html")) |
| 128 .Build(); | 203 .Build(); |
| 129 EXPECT_TRUE(WaitForLoad(web_contents)); | 204 EXPECT_TRUE(WaitForLoad(web_contents)); |
| 130 | 205 |
| 131 std::string inner_html; | 206 std::string inner_html; |
| 132 EXPECT_TRUE(EvaluateScript(web_contents, "document.body.innerHTML") | 207 EXPECT_TRUE(EvaluateScript(web_contents, "document.body.innerHTML") |
| 133 ->GetResult() | 208 ->GetResult() |
| 134 ->GetValue() | 209 ->GetValue() |
| 135 ->GetAsString(&inner_html)); | 210 ->GetAsString(&inner_html)); |
| 136 EXPECT_EQ(kResponseBody, inner_html); | 211 EXPECT_EQ(kResponseBody, inner_html); |
| 137 } | 212 } |
| 138 | 213 |
| 139 IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, HttpsProtocolHandler) { | 214 IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, HttpsProtocolHandler) { |
| 140 const std::string kResponseBody = "<p>HTTPS response body</p>"; | 215 const std::string kResponseBody = "<p>HTTPS response body</p>"; |
| 141 ProtocolHandlerMap protocol_handlers; | 216 ProtocolHandlerMap protocol_handlers; |
| 142 protocol_handlers[url::kHttpsScheme] = | 217 protocol_handlers[url::kHttpsScheme] = |
| 143 base::WrapUnique(new TestProtocolHandler(kResponseBody)); | 218 base::WrapUnique(new TestProtocolHandler(kResponseBody)); |
| 144 | 219 |
| 145 HeadlessBrowser::Options::Builder builder; | 220 std::unique_ptr<HeadlessBrowserContext> browser_context = |
| 146 builder.SetProtocolHandlers(std::move(protocol_handlers)); | 221 browser() |
| 147 SetBrowserOptions(builder.Build()); | 222 ->CreateBrowserContextBuilder() |
| 223 .SetProtocolHandlers(std::move(protocol_handlers)) |
| 224 .Build(); |
| 148 | 225 |
| 149 // Load a page which doesn't actually exist, but which is fetched by our | 226 // Load a page which doesn't actually exist, but which is fetched by our |
| 150 // custom protocol handler. | 227 // custom protocol handler. |
| 151 HeadlessWebContents* web_contents = | 228 HeadlessWebContents* web_contents = |
| 152 browser() | 229 browser_context->CreateWebContentsBuilder() |
| 153 ->CreateWebContentsBuilder() | |
| 154 .SetInitialURL(GURL("https://not-an-actual-domain.tld/hello.html")) | 230 .SetInitialURL(GURL("https://not-an-actual-domain.tld/hello.html")) |
| 155 .Build(); | 231 .Build(); |
| 156 EXPECT_TRUE(WaitForLoad(web_contents)); | 232 EXPECT_TRUE(WaitForLoad(web_contents)); |
| 157 | 233 |
| 158 std::string inner_html; | 234 std::string inner_html; |
| 159 EXPECT_TRUE(EvaluateScript(web_contents, "document.body.innerHTML") | 235 EXPECT_TRUE(EvaluateScript(web_contents, "document.body.innerHTML") |
| 160 ->GetResult() | 236 ->GetResult() |
| 161 ->GetValue() | 237 ->GetValue() |
| 162 ->GetAsString(&inner_html)); | 238 ->GetAsString(&inner_html)); |
| 163 EXPECT_EQ(kResponseBody, inner_html); | 239 EXPECT_EQ(kResponseBody, inner_html); |
| 164 } | 240 } |
| 165 | 241 |
| 166 IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, WebGLSupported) { | 242 IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, WebGLSupported) { |
| 243 std::unique_ptr<HeadlessBrowserContext> browser_context = |
| 244 browser()->CreateBrowserContextBuilder().Build(); |
| 245 |
| 167 HeadlessWebContents* web_contents = | 246 HeadlessWebContents* web_contents = |
| 168 browser()->CreateWebContentsBuilder().Build(); | 247 browser_context->CreateWebContentsBuilder().Build(); |
| 169 | 248 |
| 170 bool webgl_supported; | 249 bool webgl_supported; |
| 171 EXPECT_TRUE( | 250 EXPECT_TRUE( |
| 172 EvaluateScript(web_contents, | 251 EvaluateScript(web_contents, |
| 173 "(document.createElement('canvas').getContext('webgl')" | 252 "(document.createElement('canvas').getContext('webgl')" |
| 174 " instanceof WebGLRenderingContext)") | 253 " instanceof WebGLRenderingContext)") |
| 175 ->GetResult() | 254 ->GetResult() |
| 176 ->GetValue() | 255 ->GetValue() |
| 177 ->GetAsBoolean(&webgl_supported)); | 256 ->GetAsBoolean(&webgl_supported)); |
| 178 EXPECT_TRUE(webgl_supported); | 257 EXPECT_TRUE(webgl_supported); |
| 179 } | 258 } |
| 180 | 259 |
| 181 IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, DefaultSizes) { | 260 IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, DefaultSizes) { |
| 261 std::unique_ptr<HeadlessBrowserContext> browser_context = |
| 262 browser()->CreateBrowserContextBuilder().Build(); |
| 263 |
| 182 HeadlessWebContents* web_contents = | 264 HeadlessWebContents* web_contents = |
| 183 browser()->CreateWebContentsBuilder().Build(); | 265 browser_context->CreateWebContentsBuilder().Build(); |
| 184 | 266 |
| 185 HeadlessBrowser::Options::Builder builder; | 267 HeadlessBrowser::Options::Builder builder; |
| 186 const HeadlessBrowser::Options kDefaultOptions = builder.Build(); | 268 const HeadlessBrowser::Options kDefaultOptions = builder.Build(); |
| 187 | 269 |
| 188 int screen_width; | 270 int screen_width; |
| 189 int screen_height; | 271 int screen_height; |
| 190 int window_width; | 272 int window_width; |
| 191 int window_height; | 273 int window_height; |
| 192 | 274 |
| 193 EXPECT_TRUE(EvaluateScript(web_contents, "screen.width") | 275 EXPECT_TRUE(EvaluateScript(web_contents, "screen.width") |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 309 } | 391 } |
| 310 | 392 |
| 311 } // namespace | 393 } // namespace |
| 312 | 394 |
| 313 IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, ReadCookiesInProtocolHandler) { | 395 IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, ReadCookiesInProtocolHandler) { |
| 314 net::CookieList sent_cookies; | 396 net::CookieList sent_cookies; |
| 315 ProtocolHandlerMap protocol_handlers; | 397 ProtocolHandlerMap protocol_handlers; |
| 316 protocol_handlers[url::kHttpsScheme] = | 398 protocol_handlers[url::kHttpsScheme] = |
| 317 base::WrapUnique(new ProtocolHandlerWithCookies(&sent_cookies)); | 399 base::WrapUnique(new ProtocolHandlerWithCookies(&sent_cookies)); |
| 318 | 400 |
| 319 HeadlessBrowser::Options::Builder builder; | 401 std::unique_ptr<HeadlessBrowserContext> browser_context = |
| 320 builder.SetProtocolHandlers(std::move(protocol_handlers)); | 402 browser() |
| 321 SetBrowserOptions(builder.Build()); | 403 ->CreateBrowserContextBuilder() |
| 404 .SetProtocolHandlers(std::move(protocol_handlers)) |
| 405 .Build(); |
| 322 | 406 |
| 323 HeadlessWebContents* web_contents = | 407 HeadlessWebContents* web_contents = |
| 324 browser() | 408 browser_context->CreateWebContentsBuilder() |
| 325 ->CreateWebContentsBuilder() | |
| 326 .SetInitialURL(GURL("https://example.com/cookie.html")) | 409 .SetInitialURL(GURL("https://example.com/cookie.html")) |
| 327 .Build(); | 410 .Build(); |
| 328 EXPECT_TRUE(WaitForLoad(web_contents)); | 411 EXPECT_TRUE(WaitForLoad(web_contents)); |
| 329 | 412 |
| 330 // The first load has no cookies. | 413 // The first load has no cookies. |
| 331 EXPECT_EQ(0u, sent_cookies.size()); | 414 EXPECT_EQ(0u, sent_cookies.size()); |
| 332 | 415 |
| 333 // Set a cookie and reload the page. | 416 // Set a cookie and reload the page. |
| 334 EXPECT_FALSE(EvaluateScript( | 417 EXPECT_FALSE(EvaluateScript( |
| 335 web_contents, | 418 web_contents, |
| 336 "document.cookie = 'shape=oblong', window.location.reload()") | 419 "document.cookie = 'shape=oblong', window.location.reload()") |
| 337 ->HasExceptionDetails()); | 420 ->HasExceptionDetails()); |
| 338 EXPECT_TRUE(WaitForLoad(web_contents)); | 421 EXPECT_TRUE(WaitForLoad(web_contents)); |
| 339 | 422 |
| 340 // We should have sent the cookie this time. | 423 // We should have sent the cookie this time. |
| 341 EXPECT_EQ(1u, sent_cookies.size()); | 424 EXPECT_EQ(1u, sent_cookies.size()); |
| 342 EXPECT_EQ("shape", sent_cookies[0].Name()); | 425 EXPECT_EQ("shape", sent_cookies[0].Name()); |
| 343 EXPECT_EQ("oblong", sent_cookies[0].Value()); | 426 EXPECT_EQ("oblong", sent_cookies[0].Value()); |
| 344 } | 427 } |
| 345 | 428 |
| 346 } // namespace headless | 429 } // namespace headless |
| OLD | NEW |