// Copyright (c) 2009 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/browser.h" #include "chrome/browser/net/url_request_context_getter.h" #include "chrome/browser/profile.h" #include "chrome/common/pref_names.h" #include "chrome/common/pref_service.h" #include "chrome/test/in_process_browser_test.h" #include "chrome/test/ui_test_utils.h" class CookiePolicyBrowserTest : public InProcessBrowserTest { public: CookiePolicyBrowserTest() {} private: DISALLOW_COPY_AND_ASSIGN(CookiePolicyBrowserTest); }; // Visits a page that sets a first-party cookie. IN_PROC_BROWSER_TEST_F(CookiePolicyBrowserTest, AllowFirstPartyCookies) { HTTPTestServer* server = StartHTTPServer(); ASSERT_TRUE(server != NULL); PrefService* prefs = browser()->profile()->GetPrefs(); prefs->SetInteger(prefs::kCookieBehavior, net::CookiePolicy::BLOCK_THIRD_PARTY_COOKIES); net::CookiePolicy::Type policy_type = net::CookiePolicy::FromInt( prefs->GetInteger(prefs::kCookieBehavior)); ASSERT_EQ(net::CookiePolicy::BLOCK_THIRD_PARTY_COOKIES, policy_type); net::CookieStore* cookie_store = browser()->profile()->GetRequestContext()->GetCookieStore(); GURL url = server->TestServerPage("set-cookie?cookie1"); std::string cookie = cookie_store->GetCookies(url); ASSERT_EQ("", cookie); ui_test_utils::NavigateToURL(browser(), url); cookie = cookie_store->GetCookies(url); EXPECT_EQ("cookie1", cookie); } // Visits a page that is a redirect across domain boundary to a page that sets // a first-party cookie. IN_PROC_BROWSER_TEST_F(CookiePolicyBrowserTest, AllowFirstPartyCookiesRedirect) { HTTPTestServer* server = StartHTTPServer(); ASSERT_TRUE(server != NULL); PrefService* prefs = browser()->profile()->GetPrefs(); prefs->SetInteger(prefs::kCookieBehavior, net::CookiePolicy::BLOCK_THIRD_PARTY_COOKIES); net::CookiePolicy::Type policy_type = net::CookiePolicy::FromInt( prefs->GetInteger(prefs::kCookieBehavior)); ASSERT_EQ(net::CookiePolicy::BLOCK_THIRD_PARTY_COOKIES, policy_type); net::CookieStore* cookie_store = browser()->profile()->GetRequestContext()->GetCookieStore(); GURL url = server->TestServerPage("server-redirect?"); GURL redirected_url = server->TestServerPage("set-cookie?cookie2"); // Change the host name from localhost to www.example.com so it triggers // third-party cookie blocking if the first party for cookies URL is not // changed when we follow a redirect. ASSERT_EQ("localhost", redirected_url.host()); GURL::Replacements replacements; std::string new_host("www.example.com"); replacements.SetHostStr(new_host); redirected_url = redirected_url.ReplaceComponents(replacements); std::string cookie = cookie_store->GetCookies(redirected_url); ASSERT_EQ("", cookie); host_resolver()->AddRule("www.example.com", "127.0.0.1"); ui_test_utils::NavigateToURL(browser(), GURL(url.spec() + redirected_url.spec())); cookie = cookie_store->GetCookies(redirected_url); EXPECT_EQ("cookie2", cookie); }