15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_cookie_helper.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 8a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "base/run_loop.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/public/test/test_browser_thread_bundle.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/canonical_cookie.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/parsed_cookie.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_context_getter.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Test expectations for a given cookie. 1903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class CookieExpectation { 2003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) public: 2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CookieExpectation() : matched_(false) {} 2203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) bool MatchesCookie(const net::CanonicalCookie& cookie) const { 2403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (!source_.empty() && source_ != cookie.Source()) 2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return false; 2603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (!domain_.empty() && domain_ != cookie.Domain()) 2703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return false; 2803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (!path_.empty() && path_ != cookie.Path()) 2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return false; 3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (!name_.empty() && name_ != cookie.Name()) 3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return false; 3203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (!value_.empty() && value_ != cookie.Value()) 3303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return false; 3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return true; 3503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) std::string source_; 3803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) std::string domain_; 3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) std::string path_; 4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) std::string name_; 4103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) std::string value_; 4203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) bool matched_; 4303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}; 4403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 4503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Matches a CookieExpectation against a Cookie. 4603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class CookieMatcher { 4703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) public: 4803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) explicit CookieMatcher(const net::CanonicalCookie& cookie) 4903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) : cookie_(cookie) {} 5003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) bool operator()(const CookieExpectation& expectation) { 5103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return expectation.MatchesCookie(cookie_); 5203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 5303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) net::CanonicalCookie cookie_; 5403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}; 5503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 5603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Unary predicate to determine whether an expectation has been matched. 5703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)bool ExpectationIsMatched(const CookieExpectation& expectation) { 5803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return expectation.matched_; 5903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 6003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowsingDataCookieHelperTest : public testing::Test { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 63a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch BrowsingDataCookieHelperTest() 64a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch : testing_profile_(new TestingProfile()) { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) virtual void SetUp() OVERRIDE { cookie_expectations_.clear(); } 6803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 6903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Adds an expectation for a cookie that satisfies the given parameters. 7003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) void AddCookieExpectation(const char* source, 7103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const char* domain, 7203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const char* path, 7303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const char* name, 7403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const char* value) { 7503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CookieExpectation matcher; 7603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (source) 7703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) matcher.source_ = source; 7803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (domain) 7903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) matcher.domain_ = domain; 8003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (path) 8103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) matcher.path_ = path; 8203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (name) 8303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) matcher.name_ = name; 8403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (value) 8503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) matcher.value_ = value; 8603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) cookie_expectations_.push_back(matcher); 8703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 8803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 8903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Checks the existing expectations, and then clears all existing 9003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // expectations. 9103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) void CheckCookieExpectations() { 9203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ASSERT_EQ(cookie_expectations_.size(), cookie_list_.size()); 9303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 9403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // For each cookie, look for a matching expectation. 9503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) for (net::CookieList::iterator it = cookie_list_.begin(); 9603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) it != cookie_list_.end(); 9703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ++it) { 9803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CookieMatcher matcher(*it); 9903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) std::vector<CookieExpectation>::iterator match = std::find_if( 10003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) cookie_expectations_.begin(), cookie_expectations_.end(), matcher); 10103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (match != cookie_expectations_.end()) 10203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) match->matched_ = true; 10303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 10403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 10503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Check that each expectation has been matched. 10603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) unsigned long match_count = std::count_if(cookie_expectations_.begin(), 10703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) cookie_expectations_.end(), 10803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ExpectationIsMatched); 10903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(cookie_expectations_.size(), match_count); 11003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 11103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) cookie_expectations_.clear(); 11203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 11303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CreateCookiesForTest() { 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<net::CookieMonster> cookie_monster = 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing_profile_->GetCookieMonster(); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_monster->SetCookieWithOptionsAsync( 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://www.google.com"), "A=1", net::CookieOptions(), 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieMonster::SetCookiesCallback()); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_monster->SetCookieWithOptionsAsync( 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://www.gmail.google.com"), "B=1", net::CookieOptions(), 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieMonster::SetCookiesCallback()); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CreateCookiesForDomainCookieTest() { 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<net::CookieMonster> cookie_monster = 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing_profile_->GetCookieMonster(); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_monster->SetCookieWithOptionsAsync( 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://www.google.com"), "A=1", net::CookieOptions(), 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieMonster::SetCookiesCallback()); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_monster->SetCookieWithOptionsAsync( 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://www.google.com"), "A=2; Domain=.www.google.com ", 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieOptions(), net::CookieMonster::SetCookiesCallback()); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void FetchCallback(const net::CookieList& cookies) { 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_list_ = cookies; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) AddCookieExpectation(NULL, "www.google.com", NULL, "A", NULL); 14003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) AddCookieExpectation(NULL, "www.gmail.google.com", NULL, "B", NULL); 14103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CheckCookieExpectations(); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DomainCookieCallback(const net::CookieList& cookies) { 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_list_ = cookies; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) AddCookieExpectation(NULL, "www.google.com", NULL, "A", "1"); 14803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) AddCookieExpectation(NULL, ".www.google.com", NULL, "A", "2"); 14903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CheckCookieExpectations(); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DeleteCallback(const net::CookieList& cookies) { 15303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) cookie_list_ = cookies; 15403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) AddCookieExpectation(NULL, "www.gmail.google.com", NULL, "B", NULL); 15503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CheckCookieExpectations(); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CannedUniqueCallback(const net::CookieList& cookies) { 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_list_ = cookies; 16003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) AddCookieExpectation( 16103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) "http://www.google.com/", "www.google.com", "/", "A", NULL); 16203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CheckCookieExpectations(); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CannedReplaceCookieCallback(const net::CookieList& cookies) { 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_list_ = cookies; 16703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) AddCookieExpectation( 16803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) "http://www.google.com/", "www.google.com", "/", "A", "2"); 16903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) AddCookieExpectation( 17003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) "http://www.google.com/", "www.google.com", "/example/0", "A", "4"); 17103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) AddCookieExpectation( 17203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) "http://www.google.com/", ".google.com", "/", "A", "6"); 17303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) AddCookieExpectation( 17403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) "http://www.google.com/", ".google.com", "/example/1", "A", "8"); 17503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) AddCookieExpectation( 17603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) "http://www.google.com/", ".www.google.com", "/", "A", "10"); 17703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CheckCookieExpectations(); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CannedDomainCookieCallback(const net::CookieList& cookies) { 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_list_ = cookies; 18203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) AddCookieExpectation( 18303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) "http://www.google.com/", "www.google.com", NULL, "A", NULL); 18403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) AddCookieExpectation( 18503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) "http://www.google.com/", ".www.google.com", NULL, "A", NULL); 18603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CheckCookieExpectations(); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CannedDifferentFramesCallback(const net::CookieList& cookie_list) { 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(3U, cookie_list.size()); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) void DeleteCookie(BrowsingDataCookieHelper* helper, const GURL origin) { 19403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) for (net::CookieList::iterator it = cookie_list_.begin(); 19503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) it != cookie_list_.end(); 19603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ++it) { 19703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (it->Source() == net::CanonicalCookie::GetCookieSourceFromURL(origin)) 19803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) helper->DeleteCookie(*it); 19903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 20003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 20103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 203eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch content::TestBrowserThreadBundle thread_bundle_; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestingProfile> testing_profile_; 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) std::vector<CookieExpectation> cookie_expectations_; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieList cookie_list_; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataCookieHelperTest, FetchData) { 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateCookiesForTest(); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<BrowsingDataCookieHelper> cookie_helper( 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new BrowsingDataCookieHelper(testing_profile_->GetRequestContext())); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_helper->StartFetching( 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&BrowsingDataCookieHelperTest::FetchCallback, 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 218a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::RunLoop().RunUntilIdle(); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataCookieHelperTest, DomainCookie) { 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateCookiesForDomainCookieTest(); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<BrowsingDataCookieHelper> cookie_helper( 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new BrowsingDataCookieHelper(testing_profile_->GetRequestContext())); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_helper->StartFetching( 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&BrowsingDataCookieHelperTest::DomainCookieCallback, 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 229a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::RunLoop().RunUntilIdle(); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataCookieHelperTest, DeleteCookie) { 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateCookiesForTest(); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<BrowsingDataCookieHelper> cookie_helper( 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new BrowsingDataCookieHelper(testing_profile_->GetRequestContext())); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_helper->StartFetching( 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&BrowsingDataCookieHelperTest::FetchCallback, 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 240a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::RunLoop().RunUntilIdle(); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CanonicalCookie cookie = cookie_list_[0]; 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_helper->DeleteCookie(cookie); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_helper->StartFetching( 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&BrowsingDataCookieHelperTest::DeleteCallback, 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 248a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::RunLoop().RunUntilIdle(); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(BrowsingDataCookieHelperTest, CannedDeleteCookie) { 2525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CreateCookiesForTest(); 2535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_refptr<CannedBrowsingDataCookieHelper> helper( 2545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new CannedBrowsingDataCookieHelper( 2555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) testing_profile_->GetRequestContext())); 2565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(helper->empty()); 2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const GURL origin1("http://www.google.com"); 2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const GURL origin2("http://www.gmail.google.com"); 2615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) helper->AddChangedCookie(origin1, origin1, "A=1", net::CookieOptions()); 2625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) helper->AddChangedCookie(origin2, origin2, "B=1", net::CookieOptions()); 2635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) helper->StartFetching( 2655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind(&BrowsingDataCookieHelperTest::FetchCallback, 2665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Unretained(this))); 2675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 2685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(2u, helper->GetCookieCount()); 2705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 27103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) DeleteCookie(helper.get(), origin1); 2725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1u, helper->GetCookieCount()); 2745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) helper->StartFetching( 2755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind(&BrowsingDataCookieHelperTest::DeleteCallback, 2765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Unretained(this))); 2775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataCookieHelperTest, CannedDomainCookie) { 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL origin("http://www.google.com"); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieList cookie; 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CannedBrowsingDataCookieHelper> helper( 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new CannedBrowsingDataCookieHelper( 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing_profile_->GetRequestContext())); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(helper->empty()); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddChangedCookie(origin, origin, "A=1", net::CookieOptions()); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddChangedCookie(origin, origin, "A=1; Domain=.www.google.com", 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieOptions()); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Try adding invalid cookies that will be ignored. 293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) helper->AddChangedCookie(origin, origin, std::string(), net::CookieOptions()); 294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) helper->AddChangedCookie(origin, 295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) origin, 296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "C=bad guy; Domain=wrongdomain.com", 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieOptions()); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->StartFetching( 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&BrowsingDataCookieHelperTest::CannedDomainCookieCallback, 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie = cookie_list_; 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->Reset(); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(helper->empty()); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddReadCookies(origin, origin, cookie); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->StartFetching( 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&BrowsingDataCookieHelperTest::CannedDomainCookieCallback, 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataCookieHelperTest, CannedUnique) { 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL origin("http://www.google.com"); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieList cookie; 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CannedBrowsingDataCookieHelper> helper( 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new CannedBrowsingDataCookieHelper( 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing_profile_->GetRequestContext())); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(helper->empty()); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddChangedCookie(origin, origin, "A=1", net::CookieOptions()); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddChangedCookie(origin, origin, "A=1", net::CookieOptions()); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->StartFetching( 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&BrowsingDataCookieHelperTest::CannedUniqueCallback, 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie = cookie_list_; 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->Reset(); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(helper->empty()); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddReadCookies(origin, origin, cookie); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddReadCookies(origin, origin, cookie); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->StartFetching( 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&BrowsingDataCookieHelperTest::CannedUniqueCallback, 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataCookieHelperTest, CannedReplaceCookie) { 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL origin("http://www.google.com"); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieList cookie; 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CannedBrowsingDataCookieHelper> helper( 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new CannedBrowsingDataCookieHelper( 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing_profile_->GetRequestContext())); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(helper->empty()); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddChangedCookie(origin, origin, "A=1", net::CookieOptions()); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddChangedCookie(origin, origin, "A=2", net::CookieOptions()); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddChangedCookie(origin, origin, "A=3; Path=/example/0", 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieOptions()); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddChangedCookie(origin, origin, "A=4; Path=/example/0", 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieOptions()); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddChangedCookie(origin, origin, "A=5; Domain=google.com", 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieOptions()); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddChangedCookie(origin, origin, "A=6; Domain=google.com", 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieOptions()); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddChangedCookie(origin, origin, 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "A=7; Domain=google.com; Path=/example/1", 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieOptions()); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddChangedCookie(origin, origin, 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "A=8; Domain=google.com; Path=/example/1", 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieOptions()); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddChangedCookie(origin, origin, 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "A=9; Domain=www.google.com", 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieOptions()); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddChangedCookie(origin, origin, 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "A=10; Domain=www.google.com", 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieOptions()); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->StartFetching( 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&BrowsingDataCookieHelperTest::CannedReplaceCookieCallback, 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie = cookie_list_; 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->Reset(); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(helper->empty()); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddReadCookies(origin, origin, cookie); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddReadCookies(origin, origin, cookie); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->StartFetching( 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&BrowsingDataCookieHelperTest::CannedReplaceCookieCallback, 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataCookieHelperTest, CannedEmpty) { 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL url_google("http://www.google.com"); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CannedBrowsingDataCookieHelper> helper( 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new CannedBrowsingDataCookieHelper( 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing_profile_->GetRequestContext())); 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(helper->empty()); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddChangedCookie(url_google, url_google, "a=1", 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieOptions()); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(helper->empty()); 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->Reset(); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(helper->empty()); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieList cookies; 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::ParsedCookie pc("a=1"); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::CanonicalCookie> cookie( 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new net::CanonicalCookie(url_google, pc)); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookies.push_back(*cookie); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddReadCookies(url_google, url_google, cookies); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(helper->empty()); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->Reset(); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(helper->empty()); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataCookieHelperTest, CannedDifferentFrames) { 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL frame1_url("http://www.google.com"); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL frame2_url("http://www.google.de"); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL request_url("http://www.google.com"); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CannedBrowsingDataCookieHelper> helper( 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new CannedBrowsingDataCookieHelper( 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing_profile_->GetRequestContext())); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(helper->empty()); 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddChangedCookie(frame1_url, request_url, "a=1", 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieOptions()); 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddChangedCookie(frame1_url, request_url, "b=1", 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieOptions()); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddChangedCookie(frame2_url, request_url, "c=1", 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieOptions()); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->StartFetching( 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&BrowsingDataCookieHelperTest::CannedDifferentFramesCallback, 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataCookieHelperTest, CannedGetCookieCount) { 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The URL in the omnibox is a frame URL. This is not necessarily the request 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URL, since websites usually include other resources. 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL frame1_url("http://www.google.com"); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL frame2_url("http://www.google.de"); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The request URL used for all cookies that are added to the |helper|. 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL request1_url("http://static.google.com/foo/res1.html"); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL request2_url("http://static.google.com/bar/res2.html"); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string cookie_domain(".www.google.com"); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string cookie_pair1("A=1"); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string cookie_pair2("B=1"); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The cookie pair used for adding a cookie that overrides the cookie created 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // with |cookie_pair1|. The cookie-name of |cookie_pair3| must match the 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // cookie-name of |cookie-pair1|. 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string cookie_pair3("A=2"); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The cookie pair used for adding a non host-only cookie. The cookie-name 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // must match the cookie-name of |cookie_pair1| in order to add a host-only 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and a non host-only cookie with the same name below. 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string cookie_pair4("A=3"); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CannedBrowsingDataCookieHelper> helper( 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new CannedBrowsingDataCookieHelper( 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing_profile_->GetRequestContext())); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add two different cookies (distinguished by the tuple [cookie-name, 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // domain-value, path-value]) for a HTTP request to |frame1_url| and verify 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // that the cookie count is increased to two. The set-cookie-string consists 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // only of the cookie-pair. This means that the host and the default-path of 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the |request_url| are used as domain-value and path-value for the added 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // cookies. 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0U, helper->GetCookieCount()); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddChangedCookie(frame1_url, frame1_url, cookie_pair1, 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieOptions()); 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, helper->GetCookieCount()); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddChangedCookie(frame1_url, frame1_url, cookie_pair2, 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieOptions()); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2U, helper->GetCookieCount()); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use a different frame URL for adding another cookie that will replace one 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // of the previously added cookies. This could happen during an automatic 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // redirect e.g. |frame1_url| redirects to |frame2_url| and a cookie set by a 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // request to |frame1_url| is updated. 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddChangedCookie(frame2_url, frame1_url, cookie_pair3, 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieOptions()); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2U, helper->GetCookieCount()); 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add two more cookies that are set while loading resources. The two cookies 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // below have a differnt path-value since the request URLs have different 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // paths. 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddChangedCookie(frame2_url, request1_url, cookie_pair3, 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieOptions()); 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3U, helper->GetCookieCount()); 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddChangedCookie(frame2_url, request2_url, cookie_pair3, 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieOptions()); 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(4U, helper->GetCookieCount()); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Host-only and domain cookies are treated as seperate items. This means that 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the following two cookie-strings are stored as two separate cookies, even 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // though they have the same name and are send with the same request: 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "A=1; 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "A=3; Domain=www.google.com" 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a domain cookie and check if it increases the cookie count. 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper->AddChangedCookie(frame2_url, frame1_url, 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_pair4 + "; Domain=" + cookie_domain, 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CookieOptions()); 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(5U, helper->GetCookieCount()); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 504