Index: content/browser/devtools/protocol/devtools_protocol_browsertest.cc |
diff --git a/content/browser/devtools/protocol/devtools_protocol_browsertest.cc b/content/browser/devtools/protocol/devtools_protocol_browsertest.cc |
index bcbf2b4d8e74b68d6cde093e8cb824131682df76..c6e228fae207390fa561739e6ec6cebed0e89054 100644 |
--- a/content/browser/devtools/protocol/devtools_protocol_browsertest.cc |
+++ b/content/browser/devtools/protocol/devtools_protocol_browsertest.cc |
@@ -1448,4 +1448,71 @@ IN_PROC_BROWSER_TEST_F(SitePerProcessDevToolsProtocolTest, TargetNoDiscovery) { |
EXPECT_EQ(target_id, temp); |
} |
+IN_PROC_BROWSER_TEST_F(DevToolsProtocolTest, SetAndGetCookies) { |
+ ASSERT_TRUE(embedded_test_server()->Start()); |
+ GURL test_url = embedded_test_server()->GetURL("/title1.html"); |
+ NavigateToURLBlockUntilNavigationsComplete(shell(), test_url, 1); |
+ Attach(); |
+ |
+ // Set two cookies, one of which matches the loaded URL and another that |
+ // doesn't. |
+ std::unique_ptr<base::DictionaryValue> command_params; |
+ command_params.reset(new base::DictionaryValue()); |
+ command_params->SetString("url", test_url.spec()); |
+ command_params->SetString("name", "cookie_for_this_url"); |
+ command_params->SetString("value", "mendacious"); |
+ SendCommand("Network.setCookie", std::move(command_params), false); |
+ |
+ command_params.reset(new base::DictionaryValue()); |
+ command_params->SetString("url", "https://www.chromium.org"); |
+ command_params->SetString("name", "cookie_for_another_url"); |
+ command_params->SetString("value", "polyglottal"); |
+ SendCommand("Network.setCookie", std::move(command_params), false); |
+ |
+ // First get the cookies for just the loaded URL. |
+ SendCommand("Network.getCookies", nullptr, true); |
+ |
+ base::ListValue* cookies; |
+ EXPECT_TRUE(result_->HasKey("cookies")); |
+ EXPECT_TRUE(result_->GetList("cookies", &cookies)); |
+ EXPECT_EQ(1u, cookies->GetSize()); |
+ |
+ base::DictionaryValue* cookie; |
+ std::string name; |
+ std::string value; |
+ EXPECT_TRUE(cookies->GetDictionary(0, &cookie)); |
+ EXPECT_TRUE(cookie->GetString("name", &name)); |
+ EXPECT_TRUE(cookie->GetString("value", &value)); |
+ EXPECT_EQ("cookie_for_this_url", name); |
+ EXPECT_EQ("mendacious", value); |
+ |
+ // Then get all the cookies in the cookie jar. |
+ command_params.reset(new base::DictionaryValue()); |
+ command_params->SetBoolean("global", true); |
+ SendCommand("Network.getCookies", std::move(command_params), true); |
+ |
+ EXPECT_TRUE(result_->HasKey("cookies")); |
+ EXPECT_TRUE(result_->GetList("cookies", &cookies)); |
+ EXPECT_EQ(2u, cookies->GetSize()); |
+ |
+ // Note: the cookies will be returned in unspecified order. |
+ size_t found = 0; |
+ for (size_t i = 0; i < cookies->GetSize(); i++) { |
+ EXPECT_TRUE(cookies->GetDictionary(i, &cookie)); |
+ EXPECT_TRUE(cookie->GetString("name", &name)); |
+ if (name == "cookie_for_this_url") { |
+ EXPECT_TRUE(cookie->GetString("value", &value)); |
+ EXPECT_EQ("mendacious", value); |
+ found++; |
+ } else if (name == "cookie_for_another_url") { |
+ EXPECT_TRUE(cookie->GetString("value", &value)); |
+ EXPECT_EQ("polyglottal", value); |
+ found++; |
+ } else { |
+ FAIL(); |
+ } |
+ } |
+ EXPECT_EQ(2u, found); |
+} |
+ |
} // namespace content |