Index: net/base/cookie_monster_unittest.cc |
diff --git a/net/base/cookie_monster_unittest.cc b/net/base/cookie_monster_unittest.cc |
index a814480038e463a4f991f35800082fac67556ebe..21d6df853e4682e791a8ea2468efb23675e09602 100644 |
--- a/net/base/cookie_monster_unittest.cc |
+++ b/net/base/cookie_monster_unittest.cc |
@@ -163,6 +163,91 @@ void AddKeyedCookieToList( |
key, cookie.release())); |
} |
+// Helper for DeleteAllForHost test; repopulates CM with same layout |
+// each time. |
+const char* kTopLevelDomainPlus1 = "http://www.harvard.edu"; |
+const char* kTopLevelDomainPlus2 = "http://www.math.harvard.edu"; |
+const char* kTopLevelDomainPlus2Secure = "https://www.math.harvard.edu"; |
+const char* kTopLevelDomainPlus3 = |
+ "http://www.bourbaki.math.harvard.edu"; |
+const char* kOtherDomain = "http://www.mit.edu"; |
+ |
+void PopulateCmForDeleteAllForHost(scoped_refptr<net::CookieMonster> cm) { |
+ GURL url_top_level_domain_plus_1(kTopLevelDomainPlus1); |
+ GURL url_top_level_domain_plus_2(kTopLevelDomainPlus2); |
+ GURL url_top_level_domain_plus_2_secure(kTopLevelDomainPlus2Secure); |
+ GURL url_top_level_domain_plus_3(kTopLevelDomainPlus3); |
+ GURL url_other(kOtherDomain); |
+ |
+ cm->DeleteAll(true); |
+ |
+ // Static population for probe: |
+ // * Three levels of domain cookie (.b.a, .c.b.a, .d.c.b.a) |
+ // * Three levels of host cookie (w.b.a, w.c.b.a, w.d.c.b.a) |
+ // * http_only cookie (w.c.b.a) |
+ // * Two secure cookies (.c.b.a, w.c.b.a) |
+ // * Two domain path cookies (.c.b.a/dir1, .c.b.a/dir1/dir2) |
+ // * Two host path cookies (w.c.b.a/dir1, w.c.b.a/dir1/dir2) |
+ |
+ // Domain cookies |
+ EXPECT_TRUE(cm->SetCookieWithDetails(url_top_level_domain_plus_1, |
+ "dom_1", "X", ".harvard.edu", "/", |
+ base::Time(), false, false)); |
+ EXPECT_TRUE(cm->SetCookieWithDetails(url_top_level_domain_plus_2, |
+ "dom_2", "X", ".math.harvard.edu", "/", |
+ base::Time(), false, false)); |
+ EXPECT_TRUE(cm->SetCookieWithDetails(url_top_level_domain_plus_3, |
+ "dom_3", "X", |
+ ".bourbaki.math.harvard.edu", "/", |
+ base::Time(), false, false)); |
+ |
+ // Host cookies |
+ EXPECT_TRUE(cm->SetCookieWithDetails(url_top_level_domain_plus_1, |
+ "host_1", "X", "", "/", |
+ base::Time(), false, false)); |
+ EXPECT_TRUE(cm->SetCookieWithDetails(url_top_level_domain_plus_2, |
+ "host_2", "X", "", "/", |
+ base::Time(), false, false)); |
+ EXPECT_TRUE(cm->SetCookieWithDetails(url_top_level_domain_plus_3, |
+ "host_3", "X", "", "/", |
+ base::Time(), false, false)); |
+ |
+ // Http_only cookie |
+ EXPECT_TRUE(cm->SetCookieWithDetails(url_top_level_domain_plus_2, |
+ "httpo_check", "X", "", "/", |
+ base::Time(), false, true)); |
+ |
+ // Secure cookies |
+ EXPECT_TRUE(cm->SetCookieWithDetails(url_top_level_domain_plus_2_secure, |
+ "sec_dom", "X", ".math.harvard.edu", |
+ "/", base::Time(), true, false)); |
+ EXPECT_TRUE(cm->SetCookieWithDetails(url_top_level_domain_plus_2_secure, |
+ "sec_host", "X", "", "/", |
+ base::Time(), true, false)); |
+ |
+ // Domain path cookies |
+ EXPECT_TRUE(cm->SetCookieWithDetails(url_top_level_domain_plus_2, |
+ "dom_path_1", "X", |
+ ".math.harvard.edu", "/dir1", |
+ base::Time(), false, false)); |
+ EXPECT_TRUE(cm->SetCookieWithDetails(url_top_level_domain_plus_2, |
+ "dom_path_2", "X", |
+ ".math.harvard.edu", "/dir1/dir2", |
+ base::Time(), false, false)); |
+ |
+ // Host path cookies |
+ EXPECT_TRUE(cm->SetCookieWithDetails(url_top_level_domain_plus_2, |
+ "host_path_1", "X", |
+ "", "/dir1", |
+ base::Time(), false, false)); |
+ EXPECT_TRUE(cm->SetCookieWithDetails(url_top_level_domain_plus_2, |
+ "host_path_2", "X", |
+ "", "/dir1/dir2", |
+ base::Time(), false, false)); |
+ |
+ EXPECT_EQ(13U, cm->GetAllCookies().size()); |
+} |
+ |
} // namespace |
@@ -1631,3 +1716,68 @@ TEST(CookieMonsterTest, SetCookieWithDetails) { |
ASSERT_TRUE(++it == cookies.end()); |
} |
+ |
+ |
+ |
+TEST(CookieMonsterTest, DeleteAllForHost) { |
+ scoped_refptr<net::CookieMonster> cm(new net::CookieMonster(NULL, NULL)); |
+ |
+ // Test probes: |
+ // * Non-secure URL, mid-level (http://w.c.b.a) |
+ // * Secure URL, mid-level (https://w.c.b.a) |
+ // * URL with path, mid-level (https:/w.c.b.a/dir1/xx) |
+ // All three tests should nuke only the midlevel host cookie, |
+ // the http_only cookie, the host secure cookie, and the two host |
+ // path cookies. http_only, secure, and paths are ignored by |
+ // this call, and domain cookies arent touched. |
+ PopulateCmForDeleteAllForHost(cm); |
+ EXPECT_EQ("dom_1=X; dom_2=X; dom_3=X; host_3=X", |
+ cm->GetCookies(GURL(kTopLevelDomainPlus3))); |
+ EXPECT_EQ("dom_1=X; dom_2=X; host_2=X; sec_dom=X; sec_host=X", |
+ cm->GetCookies(GURL(kTopLevelDomainPlus2Secure))); |
+ EXPECT_EQ("dom_1=X; host_1=X", cm->GetCookies(GURL(kTopLevelDomainPlus1))); |
+ EXPECT_EQ("dom_path_2=X; host_path_2=X; dom_path_1=X; host_path_1=X; " |
+ "dom_1=X; dom_2=X; host_2=X; sec_dom=X; sec_host=X", |
+ cm->GetCookies(GURL(kTopLevelDomainPlus2Secure + |
+ std::string("/dir1/dir2/xxx")))); |
+ |
+ EXPECT_EQ(5, cm->DeleteAllForHost(GURL(kTopLevelDomainPlus2))); |
+ EXPECT_EQ(8U, cm->GetAllCookies().size()); |
+ |
+ EXPECT_EQ("dom_1=X; dom_2=X; dom_3=X; host_3=X", |
+ cm->GetCookies(GURL(kTopLevelDomainPlus3))); |
+ EXPECT_EQ("dom_1=X; dom_2=X; sec_dom=X", |
+ cm->GetCookies(GURL(kTopLevelDomainPlus2Secure))); |
+ EXPECT_EQ("dom_1=X; host_1=X", cm->GetCookies(GURL(kTopLevelDomainPlus1))); |
+ EXPECT_EQ("dom_path_2=X; dom_path_1=X; dom_1=X; dom_2=X; sec_dom=X", |
+ cm->GetCookies(GURL(kTopLevelDomainPlus2Secure + |
+ std::string("/dir1/dir2/xxx")))); |
+ |
+ PopulateCmForDeleteAllForHost(cm); |
+ EXPECT_EQ(5, cm->DeleteAllForHost(GURL(kTopLevelDomainPlus2Secure))); |
+ EXPECT_EQ(8U, cm->GetAllCookies().size()); |
+ |
+ EXPECT_EQ("dom_1=X; dom_2=X; dom_3=X; host_3=X", |
+ cm->GetCookies(GURL(kTopLevelDomainPlus3))); |
+ EXPECT_EQ("dom_1=X; dom_2=X; sec_dom=X", |
+ cm->GetCookies(GURL(kTopLevelDomainPlus2Secure))); |
+ EXPECT_EQ("dom_1=X; host_1=X", cm->GetCookies(GURL(kTopLevelDomainPlus1))); |
+ EXPECT_EQ("dom_path_2=X; dom_path_1=X; dom_1=X; dom_2=X; sec_dom=X", |
+ cm->GetCookies(GURL(kTopLevelDomainPlus2Secure + |
+ std::string("/dir1/dir2/xxx")))); |
+ |
+ PopulateCmForDeleteAllForHost(cm); |
+ EXPECT_EQ(5, cm->DeleteAllForHost(GURL(kTopLevelDomainPlus2Secure + |
+ std::string("/dir1/xxx")))); |
+ EXPECT_EQ(8U, cm->GetAllCookies().size()); |
+ |
+ EXPECT_EQ("dom_1=X; dom_2=X; dom_3=X; host_3=X", |
+ cm->GetCookies(GURL(kTopLevelDomainPlus3))); |
+ EXPECT_EQ("dom_1=X; dom_2=X; sec_dom=X", |
+ cm->GetCookies(GURL(kTopLevelDomainPlus2Secure))); |
+ EXPECT_EQ("dom_1=X; host_1=X", cm->GetCookies(GURL(kTopLevelDomainPlus1))); |
+ EXPECT_EQ("dom_path_2=X; dom_path_1=X; dom_1=X; dom_2=X; sec_dom=X", |
+ cm->GetCookies(GURL(kTopLevelDomainPlus2Secure + |
+ std::string("/dir1/dir2/xxx")))); |
+ |
+} |