| 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"))));
|
| +
|
| +}
|
|
|