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 "net/cookies/cookie_store_unittest.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <algorithm> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <vector> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 159ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/metrics/histogram.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/metrics/histogram_samples.h" 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/strings/string_piece.h" 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/strings/string_split.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_tokenizer.h" 225e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/stringprintf.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/threading/thread.h" 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/canonical_cookie.h" 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/cookies/cookie_constants.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/cookie_monster.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/cookie_monster_store_test.h" // For CookieStore mock 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/cookie_util.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/parsed_cookie.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::Time; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::TimeDelta; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(erikwright): Replace the pre-existing MockPersistentCookieStore (and 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// brethren) with this one, and remove the 'New' prefix. 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NewMockPersistentCookieStore 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public CookieMonster::PersistentCookieStore { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(Load, void(const LoadedCallback& loaded_callback)); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD2(LoadCookiesForKey, void(const std::string& key, 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const LoadedCallback& loaded_callback)); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(AddCookie, void(const CanonicalCookie& cc)); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(UpdateCookieAccessTime, void(const CanonicalCookie& cc)); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(DeleteCookie, void(const CanonicalCookie& cc)); 534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void Flush(const base::Closure& callback) { 544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!callback.is_null()) 554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask(FROM_HERE, callback); 564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(SetForceKeepSessionState, void()); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~NewMockPersistentCookieStore() {} 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* kTopLevelDomainPlus1 = "http://www.harvard.edu"; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* kTopLevelDomainPlus2 = "http://www.math.harvard.edu"; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* kTopLevelDomainPlus2Secure = "https://www.math.harvard.edu"; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* kTopLevelDomainPlus3 = 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://www.bourbaki.math.harvard.edu"; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* kOtherDomain = "http://www.mit.edu"; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kUrlGoogleSpecific[] = "http://www.gmail.google.izzle"; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GetCookieListCallback : public CookieCallback { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCookieListCallback() {} 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit GetCookieListCallback(Thread* run_in_thread) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : CookieCallback(run_in_thread) {} 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Run(const CookieList& cookies) { 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookies_ = cookies; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CallbackEpilogue(); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CookieList& cookies() { return cookies_; } 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieList cookies_; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct CookieMonsterTestTraits { 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static scoped_refptr<CookieStore> Create() { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new CookieMonster(NULL, NULL); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const bool is_cookie_monster = true; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const bool supports_http_only = true; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const bool supports_non_dotted_domains = true; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const bool supports_trailing_dots = true; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const bool filters_schemes = true; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const bool has_path_prefix_bug = false; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const int creation_time_granularity_in_ms = 0; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)INSTANTIATE_TYPED_TEST_CASE_P(CookieMonster, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieStoreTest, 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieMonsterTestTraits); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)INSTANTIATE_TYPED_TEST_CASE_P(CookieMonster, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MultiThreadedCookieStoreTest, 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieMonsterTestTraits); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CookieMonsterTest : public CookieStoreTest<CookieMonsterTestTraits> { 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieList GetAllCookies(CookieMonster* cm) { 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(cm); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCookieListCallback callback; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm->GetAllCookiesAsync( 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&GetCookieListCallback::Run, 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(&callback))); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunFor(kTimeout); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(callback.did_run()); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return callback.cookies(); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieList GetAllCookiesForURL(CookieMonster* cm, 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url) { 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(cm); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCookieListCallback callback; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm->GetAllCookiesForURLAsync( 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, base::Bind(&GetCookieListCallback::Run, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(&callback))); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunFor(kTimeout); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(callback.did_run()); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return callback.cookies(); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieList GetAllCookiesForURLWithOptions(CookieMonster* cm, 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CookieOptions& options) { 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(cm); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCookieListCallback callback; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm->GetAllCookiesForURLWithOptionsAsync( 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, options, base::Bind(&GetCookieListCallback::Run, 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(&callback))); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunFor(kTimeout); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(callback.did_run()); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return callback.cookies(); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool SetCookieWithDetails(CookieMonster* cm, 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& name, 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& value, 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& domain, 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& path, 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& expiration_time, 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool secure, 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool http_only, 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CookiePriority priority) { 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(cm); 160e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ResultSavingCookieCallback<bool> callback; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm->SetCookieWithDetailsAsync( 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, name, value, domain, path, expiration_time, secure, http_only, 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) priority, 164e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch base::Bind( 165e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch &ResultSavingCookieCallback<bool>::Run, 166e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch base::Unretained(&callback))); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunFor(kTimeout); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(callback.did_run()); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return callback.result(); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int DeleteAll(CookieMonster*cm) { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(cm); 174e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ResultSavingCookieCallback<int> callback; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm->DeleteAllAsync( 176e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch base::Bind( 177e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch &ResultSavingCookieCallback<int>::Run, 178e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch base::Unretained(&callback))); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunFor(kTimeout); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(callback.did_run()); 18190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return callback.result(); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int DeleteAllCreatedBetween(CookieMonster*cm, 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& delete_begin, 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& delete_end) { 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(cm); 188e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ResultSavingCookieCallback<int> callback; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm->DeleteAllCreatedBetweenAsync( 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete_begin, delete_end, 191e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch base::Bind( 192e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch &ResultSavingCookieCallback<int>::Run, 193e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch base::Unretained(&callback))); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunFor(kTimeout); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(callback.did_run()); 19690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return callback.result(); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1993240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch int DeleteAllCreatedBetweenForHost(CookieMonster* cm, 2003240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch const base::Time delete_begin, 2013240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch const base::Time delete_end, 2023240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch const GURL& url) { 2033240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch DCHECK(cm); 204e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ResultSavingCookieCallback<int> callback; 2053240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch cm->DeleteAllCreatedBetweenForHostAsync( 2063240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch delete_begin, delete_end, url, 207e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch base::Bind( 208e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch &ResultSavingCookieCallback<int>::Run, 209e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch base::Unretained(&callback))); 2103240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch RunFor(kTimeout); 2113240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch EXPECT_TRUE(callback.did_run()); 2123240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch return callback.result(); 2133240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 2143240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 2153240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch int DeleteAllForHost(CookieMonster* cm, 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url) { 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(cm); 218e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ResultSavingCookieCallback<int> callback; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm->DeleteAllForHostAsync( 220e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch url, base::Bind(&ResultSavingCookieCallback<int>::Run, 22190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::Unretained(&callback))); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunFor(kTimeout); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(callback.did_run()); 22490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return callback.result(); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2273240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch bool DeleteCanonicalCookie(CookieMonster* cm, const CanonicalCookie& cookie) { 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(cm); 229e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ResultSavingCookieCallback<bool> callback; 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm->DeleteCanonicalCookieAsync( 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie, 232e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch base::Bind(&ResultSavingCookieCallback<bool>::Run, 23390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::Unretained(&callback))); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunFor(kTimeout); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(callback.did_run()); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return callback.result(); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Helper for DeleteAllForHost test; repopulates CM with same layout 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // each time. 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void PopulateCmForDeleteAllForHost(scoped_refptr<CookieMonster> cm) { 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url_top_level_domain_plus_1(kTopLevelDomainPlus1); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url_top_level_domain_plus_2(kTopLevelDomainPlus2); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url_top_level_domain_plus_2_secure(kTopLevelDomainPlus2Secure); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url_top_level_domain_plus_3(kTopLevelDomainPlus3); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url_other(kOtherDomain); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 248868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DeleteAll(cm.get()); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Static population for probe: 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // * Three levels of domain cookie (.b.a, .c.b.a, .d.c.b.a) 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // * Three levels of host cookie (w.b.a, w.c.b.a, w.d.c.b.a) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // * http_only cookie (w.c.b.a) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // * Two secure cookies (.c.b.a, w.c.b.a) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // * Two domain path cookies (.c.b.a/dir1, .c.b.a/dir1/dir2) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // * Two host path cookies (w.c.b.a/dir1, w.c.b.a/dir1/dir2) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Domain cookies 259868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(this->SetCookieWithDetails(cm.get(), 260868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) url_top_level_domain_plus_1, 261868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "dom_1", 262868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "X", 263868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ".harvard.edu", 264868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "/", 265868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::Time(), 266868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 267868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) COOKIE_PRIORITY_DEFAULT)); 269868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(this->SetCookieWithDetails(cm.get(), 270868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) url_top_level_domain_plus_2, 271868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "dom_2", 272868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "X", 273868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ".math.harvard.edu", 274868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "/", 275868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::Time(), 276868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 277868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) COOKIE_PRIORITY_DEFAULT)); 279868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(this->SetCookieWithDetails(cm.get(), 280868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) url_top_level_domain_plus_3, 281868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "dom_3", 282868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "X", 283868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ".bourbaki.math.harvard.edu", 284868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "/", 285868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::Time(), 286868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 287868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) COOKIE_PRIORITY_DEFAULT)); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Host cookies 291868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(this->SetCookieWithDetails(cm.get(), 292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url_top_level_domain_plus_1, 293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "host_1", 294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "X", 295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "/", 297c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Time(), 298c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 300c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) COOKIE_PRIORITY_DEFAULT)); 301868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(this->SetCookieWithDetails(cm.get(), 302c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url_top_level_domain_plus_2, 303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "host_2", 304c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "X", 305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 306c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "/", 307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Time(), 308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 309c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) COOKIE_PRIORITY_DEFAULT)); 311868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(this->SetCookieWithDetails(cm.get(), 312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url_top_level_domain_plus_3, 313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "host_3", 314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "X", 315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "/", 317c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Time(), 318c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) COOKIE_PRIORITY_DEFAULT)); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Http_only cookie 323868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(this->SetCookieWithDetails(cm.get(), 324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url_top_level_domain_plus_2, 325c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "httpo_check", 326c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "X", 327c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "/", 329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Time(), 330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) COOKIE_PRIORITY_DEFAULT)); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Secure cookies 335868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(this->SetCookieWithDetails(cm.get(), 336c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url_top_level_domain_plus_2_secure, 337868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "sec_dom", 338868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "X", 339868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ".math.harvard.edu", 340868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "/", 341868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::Time(), 342868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) true, 343868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) COOKIE_PRIORITY_DEFAULT)); 345868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(this->SetCookieWithDetails(cm.get(), 346c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url_top_level_domain_plus_2_secure, 347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "sec_host", 348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "X", 349c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 350c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "/", 351c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Time(), 352c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 353c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 354c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) COOKIE_PRIORITY_DEFAULT)); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Domain path cookies 357868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(this->SetCookieWithDetails(cm.get(), 358868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) url_top_level_domain_plus_2, 359868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "dom_path_1", 360868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "X", 361868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ".math.harvard.edu", 362868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "/dir1", 363868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::Time(), 364868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 365868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 366c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) COOKIE_PRIORITY_DEFAULT)); 367868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(this->SetCookieWithDetails(cm.get(), 368868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) url_top_level_domain_plus_2, 369868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "dom_path_2", 370868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "X", 371868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ".math.harvard.edu", 372868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "/dir1/dir2", 373868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::Time(), 374868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 375868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 376c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) COOKIE_PRIORITY_DEFAULT)); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Host path cookies 379868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(this->SetCookieWithDetails(cm.get(), 380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url_top_level_domain_plus_2, 381c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "host_path_1", 382c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "X", 383c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 384c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "/dir1", 385c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Time(), 386c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 387c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 388c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) COOKIE_PRIORITY_DEFAULT)); 389868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(this->SetCookieWithDetails(cm.get(), 390c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url_top_level_domain_plus_2, 391c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "host_path_2", 392c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "X", 393c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 394c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "/dir1/dir2", 395c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Time(), 396c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 397c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 398c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) COOKIE_PRIORITY_DEFAULT)); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 400868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(13U, this->GetAllCookies(cm.get()).size()); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time GetFirstCookieAccessDate(CookieMonster* cm) { 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CookieList all_cookies(this->GetAllCookies(cm)); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return all_cookies.front().LastAccessDate(); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool FindAndDeleteCookie(CookieMonster* cm, 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& domain, 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& name) { 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieList cookies = this->GetAllCookies(cm); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (CookieList::iterator it = cookies.begin(); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != cookies.end(); ++it) 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (it->Domain() == domain && it->Name() == name) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this->DeleteCanonicalCookie(cm, *it); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int CountInString(const std::string& str, char c) { 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return std::count(str.begin(), str.end(), c); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 423c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void TestHostGarbageCollectHelper() { 424c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int domain_max_cookies = CookieMonster::kDomainMaxCookies; 425c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int domain_purge_cookies = CookieMonster::kDomainPurgeCookies; 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int more_than_enough_cookies = 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (domain_max_cookies + domain_purge_cookies) * 2; 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a bunch of cookies on a single host, should purge them. 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < more_than_enough_cookies; ++i) { 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string cookie = base::StringPrintf("a%03d=b", i); 433868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), url_google_, cookie)); 434868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string cookies = this->GetCookies(cm.get(), url_google_); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure we find it in the cookies. 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(cookies.find(cookie), std::string::npos); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Count the number of cookies. 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LE(CountInString(cookies, '='), domain_max_cookies); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a bunch of cookies on multiple hosts within a single eTLD. 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should keep at least kDomainMaxCookies - kDomainPurgeCookies 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // between them. We shouldn't go above kDomainMaxCookies for both together. 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url_google_specific(kUrlGoogleSpecific); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < more_than_enough_cookies; ++i) { 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string cookie_general = base::StringPrintf("a%03d=b", i); 450868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), url_google_, cookie_general)); 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string cookie_specific = base::StringPrintf("c%03d=b", i); 452868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), url_google_specific, cookie_specific)); 453868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string cookies_general = this->GetCookies(cm.get(), url_google_); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(cookies_general.find(cookie_general), std::string::npos); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string cookies_specific = 456868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) this->GetCookies(cm.get(), url_google_specific); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(cookies_specific.find(cookie_specific), std::string::npos); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LE((CountInString(cookies_general, '=') + 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CountInString(cookies_specific, '=')), 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) domain_max_cookies); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // After all this, there should be at least 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // kDomainMaxCookies - kDomainPurgeCookies for both URLs. 464868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string cookies_general = this->GetCookies(cm.get(), url_google_); 465868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string cookies_specific = 466868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) this->GetCookies(cm.get(), url_google_specific); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int total_cookies = (CountInString(cookies_general, '=') + 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CountInString(cookies_specific, '=')); 469c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_GE(total_cookies, domain_max_cookies - domain_purge_cookies); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LE(total_cookies, domain_max_cookies); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 474c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CookiePriority CharToPriority(char ch) { 475c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) switch (ch) { 476c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) case 'L': 477c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return COOKIE_PRIORITY_LOW; 478c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) case 'M': 479c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return COOKIE_PRIORITY_MEDIUM; 480c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) case 'H': 481c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return COOKIE_PRIORITY_HIGH; 482c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 483c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NOTREACHED(); 484c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return COOKIE_PRIORITY_DEFAULT; 485c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 486c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 487c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Instantiates a CookieMonster, adds multiple cookies (to url_google_) with 488c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // priorities specified by |coded_priority_str|, and tests priority-aware 489c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // domain cookie eviction. 490c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // |coded_priority_str| specifies a run-length-encoded string of priorities. 491c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Example: "2M 3L M 4H" means "MMLLLMHHHH", and speicifies sequential (i.e., 492c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // from least- to most-recently accessed) insertion of 2 medium-priority 493c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // cookies, 3 low-priority cookies, 1 medium-priority cookie, and 4 494c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // high-priority cookies. 495c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Within each priority, only the least-accessed cookies should be evicted. 496c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Thus, to describe expected suriving cookies, it suffices to specify the 497c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // expected population of surviving cookies per priority, i.e., 498c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // |expected_low_count|, |expected_medium_count|, and |expected_high_count|. 499c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void TestPriorityCookieCase(CookieMonster* cm, 500c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& coded_priority_str, 501c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) size_t expected_low_count, 502c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) size_t expected_medium_count, 503c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) size_t expected_high_count) { 504c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DeleteAll(cm); 505c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int next_cookie_id = 0; 506c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<CookiePriority> priority_list; 507c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<int> id_list[3]; // Indexed by CookiePriority. 508c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 509c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Parse |coded_priority_str| and add cookies. 510c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<std::string> priority_tok_list; 511c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::SplitString(coded_priority_str, ' ', &priority_tok_list); 512c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (std::vector<std::string>::iterator it = priority_tok_list.begin(); 513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) it != priority_tok_list.end(); ++it) { 514c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) size_t len = it->length(); 515c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_NE(len, 0U); 516c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Take last character as priority. 517c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CookiePriority priority = CharToPriority((*it)[len - 1]); 518c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string priority_str = CookiePriorityToString(priority); 519c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The rest of the string (possibly empty) specifies repetition. 520c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int rep = 1; 521c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!it->empty()) { 522c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool result = base::StringToInt( 523c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::StringPiece(it->begin(), it->end() - 1), &rep); 524c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(result); 525c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 526c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (; rep > 0; --rep, ++next_cookie_id) { 527c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string cookie = base::StringPrintf( 528c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "a%d=b;priority=%s", next_cookie_id, priority_str.c_str()); 529c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(SetCookie(cm, url_google_, cookie)); 530c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) priority_list.push_back(priority); 531c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) id_list[priority].push_back(next_cookie_id); 532c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 533c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 534c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 535c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int num_cookies = static_cast<int>(priority_list.size()); 536c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<int> surviving_id_list[3]; // Indexed by CookiePriority. 537c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 538c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Parse the list of cookies 539c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string cookie_str = this->GetCookies(cm, url_google_); 540c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<std::string> cookie_tok_list; 541c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::SplitString(cookie_str, ';', &cookie_tok_list); 542c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (std::vector<std::string>::iterator it = cookie_tok_list.begin(); 543c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) it != cookie_tok_list.end(); ++it) { 544c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Assuming *it is "a#=b", so extract and parse "#" portion. 545c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int id = -1; 546c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool result = base::StringToInt( 547c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::StringPiece(it->begin() + 1, it->end() - 2), &id); 548c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(result); 549c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_GE(id, 0); 550c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_LT(id, num_cookies); 551c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) surviving_id_list[priority_list[id]].push_back(id); 552c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 553c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 554c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Validate each priority. 555c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) size_t expected_count[3] = { 556c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) expected_low_count, expected_medium_count, expected_high_count 557c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 558c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (int i = 0; i < 3; ++i) { 559c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_LE(surviving_id_list[i].size(), id_list[i].size()); 560c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(expected_count[i], surviving_id_list[i].size()); 561c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Verify that the remaining cookies are the most recent among those 562c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // with the same priorities. 563c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (expected_count[i] == surviving_id_list[i].size()) { 564c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::sort(surviving_id_list[i].begin(), surviving_id_list[i].end()); 565c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(std::equal(surviving_id_list[i].begin(), 566c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) surviving_id_list[i].end(), 567c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) id_list[i].end() - expected_count[i])); 568c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 569c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 570c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 571c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 572c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void TestPriorityAwareGarbageCollectHelper() { 573c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Hard-coding limits in the test, but use DCHECK_EQ to enforce constraint. 574c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(180U, CookieMonster::kDomainMaxCookies); 575c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(150U, CookieMonster::kDomainMaxCookies - 576c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CookieMonster::kDomainPurgeCookies); 577c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(30U, CookieMonster::kDomainCookiesQuotaLow); 578c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(50U, CookieMonster::kDomainCookiesQuotaMedium); 579c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(70U, CookieMonster::kDomainCookiesQuotaHigh); 580c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 581c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 582c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 583c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Each test case adds 181 cookies, so 31 cookies are evicted. 584c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Cookie same priority, repeated for each priority. 585868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TestPriorityCookieCase(cm.get(), "181L", 150U, 0U, 0U); 586868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TestPriorityCookieCase(cm.get(), "181M", 0U, 150U, 0U); 587868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TestPriorityCookieCase(cm.get(), "181H", 0U, 0U, 150U); 588c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 589c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Pairwise scenarios. 590c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Round 1 => none; round2 => 31M; round 3 => none. 591868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TestPriorityCookieCase(cm.get(), "10H 171M", 0U, 140U, 10U); 592c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Round 1 => 10L; round2 => 21M; round 3 => none. 593868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TestPriorityCookieCase(cm.get(), "141M 40L", 30U, 120U, 0U); 594c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Round 1 => none; round2 => none; round 3 => 31H. 595868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TestPriorityCookieCase(cm.get(), "101H 80M", 0U, 80U, 70U); 596c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 597c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // For {low, medium} priorities right on quota, different orders. 598c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Round 1 => 1L; round 2 => none, round3 => 30L. 599868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TestPriorityCookieCase(cm.get(), "31L 50M 100H", 0U, 50U, 100U); 600c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Round 1 => none; round 2 => 1M, round3 => 30M. 601868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TestPriorityCookieCase(cm.get(), "51M 100H 30L", 30U, 20U, 100U); 602c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Round 1 => none; round 2 => none; round3 => 31H. 603868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TestPriorityCookieCase(cm.get(), "101H 50M 30L", 30U, 50U, 70U); 604c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 605c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Round 1 => 10L; round 2 => 10M; round3 => 11H. 606868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TestPriorityCookieCase(cm.get(), "81H 60M 40L", 30U, 50U, 70U); 607c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 608c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // More complex scenarios. 609c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Round 1 => 10L; round 2 => 10M; round 3 => 11H. 610868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TestPriorityCookieCase(cm.get(), "21H 60M 40L 60H", 30U, 50U, 70U); 611c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Round 1 => 10L; round 2 => 11M, 10L; round 3 => none. 612868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TestPriorityCookieCase( 613868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cm.get(), "11H 10M 20L 110M 20L 10H", 20U, 109U, 21U); 614c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Round 1 => none; round 2 => none; round 3 => 11L, 10M, 10H. 615868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TestPriorityCookieCase(cm.get(), "11L 10M 140H 10M 10L", 10U, 10U, 130U); 616c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Round 1 => none; round 2 => 1M; round 3 => 10L, 10M, 10H. 617868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TestPriorityCookieCase(cm.get(), "11M 10H 10L 60M 90H", 0U, 60U, 90U); 618c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Round 1 => none; round 2 => 10L, 21M; round 3 => none. 619868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TestPriorityCookieCase(cm.get(), "11M 10H 10L 90M 60H", 0U, 80U, 70U); 620c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 621c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Function for creating a CM with a number of cookies in it, 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // no store (and hence no ability to affect access time). 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieMonster* CreateMonsterForGC(int num_cookies) { 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieMonster* cm(new CookieMonster(NULL, NULL)); 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < num_cookies; i++) { 6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetCookie(cm, GURL(base::StringPrintf("http://h%05d.izzle", i)), "a=1"); 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return cm; 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(erikwright): Replace the other callbacks and synchronous helper methods 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// in this test suite with these Mocks. 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template<typename T, typename C> class MockCookieCallback { 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) C AsCallback() { 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::Bind(&T::Invoke, base::Unretained(static_cast<T*>(this))); 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockGetCookiesCallback 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public MockCookieCallback<MockGetCookiesCallback, 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieStore::GetCookiesCallback> { 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(Invoke, void(const std::string& cookies)); 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockSetCookiesCallback 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public MockCookieCallback<MockSetCookiesCallback, 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieStore::SetCookiesCallback> { 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(Invoke, void(bool success)); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockClosure 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public MockCookieCallback<MockClosure, base::Closure> { 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(Invoke, void(void)); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockGetCookieListCallback 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public MockCookieCallback<MockGetCookieListCallback, 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieMonster::GetCookieListCallback> { 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(Invoke, void(const CookieList& cookies)); 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockDeleteCallback 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public MockCookieCallback<MockDeleteCallback, 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieMonster::DeleteCallback> { 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(Invoke, void(int num_deleted)); 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockDeleteCookieCallback 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public MockCookieCallback<MockDeleteCookieCallback, 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieMonster::DeleteCookieCallback> { 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(Invoke, void(bool success)); 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 683c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct CookiesInputInfo { 684c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GURL url; 685c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string name; 686c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string value; 687c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string domain; 688c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string path; 689c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::Time expiration_time; 690c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool secure; 691c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool http_only; 692c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CookiePriority priority; 693c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 694c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ACTION(QuitCurrentMessageLoop) { 69690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->PostTask(FROM_HERE, 69790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::QuitClosure()); 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(erikwright): When the synchronous helpers 'GetCookies' etc. are removed, 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// rename these, removing the 'Action' suffix. 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ACTION_P4(DeleteCookieAction, cookie_monster, url, name, callback) { 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_monster->DeleteCookieAsync(url, name, callback->AsCallback()); 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ACTION_P3(GetCookiesAction, cookie_monster, url, callback) { 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_monster->GetCookiesWithOptionsAsync( 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, CookieOptions(), callback->AsCallback()); 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ACTION_P4(SetCookieAction, cookie_monster, url, cookie_line, callback) { 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_monster->SetCookieWithOptionsAsync( 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, cookie_line, CookieOptions(), callback->AsCallback()); 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ACTION_P4(DeleteAllCreatedBetweenAction, 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_monster, delete_begin, delete_end, callback) { 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_monster->DeleteAllCreatedBetweenAsync( 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete_begin, delete_end, callback->AsCallback()); 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 718c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ACTION_P3(SetCookieWithDetailsAction, cookie_monster, cc, callback) { 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_monster->SetCookieWithDetailsAsync( 720c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cc.url, cc.name, cc.value, cc.domain, cc.path, cc.expiration_time, 721c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cc.secure, cc.http_only, cc.priority, 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback->AsCallback()); 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ACTION_P2(GetAllCookiesAction, cookie_monster, callback) { 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_monster->GetAllCookiesAsync(callback->AsCallback()); 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ACTION_P3(DeleteAllForHostAction, cookie_monster, url, callback) { 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_monster->DeleteAllForHostAsync(url, callback->AsCallback()); 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ACTION_P3(DeleteCanonicalCookieAction, cookie_monster, cookie, callback) { 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_monster->DeleteCanonicalCookieAsync(cookie, callback->AsCallback()); 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ACTION_P2(DeleteAllAction, cookie_monster, callback) { 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_monster->DeleteAllAsync(callback->AsCallback()); 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ACTION_P3(GetAllCookiesForUrlWithOptionsAction, cookie_monster, url, callback) { 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_monster->GetAllCookiesForURLWithOptionsAsync( 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, CookieOptions(), callback->AsCallback()); 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ACTION_P3(GetAllCookiesForUrlAction, cookie_monster, url, callback) { 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_monster->GetAllCookiesForURLAsync(url, callback->AsCallback()); 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ACTION_P(PushCallbackAction, callback_vector) { 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback_vector->push(arg1); 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ACTION_P2(DeleteSessionCookiesAction, cookie_monster, callback) { 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_monster->DeleteSessionCookiesAsync(callback->AsCallback()); 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test suite verifies the task deferral behaviour of the CookieMonster. 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Specifically, for each asynchronous method, verify that: 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 1. invoking it on an uninitialized cookie store causes the store to begin 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// chain-loading its backing data or loading data for a specific domain key 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// (eTLD+1). 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2. The initial invocation does not complete until the loading completes. 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 3. Invocations after the loading has completed complete immediately. 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DeferredCookieTaskTest : public CookieMonsterTest { 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeferredCookieTaskTest() { 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) persistent_store_ = new NewMockPersistentCookieStore(); 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_monster_ = new CookieMonster(persistent_store_.get(), NULL); 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Defines a cookie to be returned from PersistentCookieStore::Load 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DeclareLoadedCookie(const std::string& key, 776c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& cookie_line, 777c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::Time& creation_time) { 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddCookieToList(key, cookie_line, creation_time, &loaded_cookies_); 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Runs the message loop, waiting until PersistentCookieStore::Load is called. 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Call CompleteLoadingAndWait to cause the load to complete. 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void WaitForLoadCall() { 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunFor(kTimeout); 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify that PeristentStore::Load was called. 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::Mock::VerifyAndClear(persistent_store_.get()); 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invokes the PersistentCookieStore::LoadCookiesForKey completion callbacks 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and PersistentCookieStore::Load completion callback and waits 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // until the message loop is quit. 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CompleteLoadingAndWait() { 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (!loaded_for_key_callbacks_.empty()) { 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loaded_for_key_callbacks_.front().Run(loaded_cookies_); 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loaded_cookies_.clear(); 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loaded_for_key_callbacks_.pop(); 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loaded_callback_.Run(loaded_cookies_); 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunFor(kTimeout); 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Performs the provided action, expecting it to cause a call to 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PersistentCookieStore::Load. Call WaitForLoadCall to verify the load call 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is received. 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void BeginWith(testing::Action<void(void)> action) { 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*this, Begin()).WillOnce(action); 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectLoadCall(); 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Begin(); 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void BeginWithForDomainKey(std::string key, 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::Action<void(void)> action) { 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*this, Begin()).WillOnce(action); 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectLoadCall(); 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectLoadForKeyCall(key, false); 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Begin(); 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Declares an expectation that PersistentCookieStore::Load will be called, 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // saving the provided callback and sending a quit to the message loop. 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ExpectLoadCall() { 824868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_CALL(*persistent_store_.get(), Load(testing::_)) 825868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) .WillOnce(testing::DoAll(testing::SaveArg<0>(&loaded_callback_), 826868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) QuitCurrentMessageLoop())); 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Declares an expectation that PersistentCookieStore::LoadCookiesForKey 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // will be called, saving the provided callback and sending a quit to the 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // message loop. 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ExpectLoadForKeyCall(std::string key, bool quit_queue) { 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (quit_queue) 834868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_CALL(*persistent_store_.get(), LoadCookiesForKey(key, testing::_)) 835868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) .WillOnce( 836868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) testing::DoAll(PushCallbackAction(&loaded_for_key_callbacks_), 837868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) QuitCurrentMessageLoop())); 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 839868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_CALL(*persistent_store_.get(), LoadCookiesForKey(key, testing::_)) 840868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) .WillOnce(PushCallbackAction(&loaded_for_key_callbacks_)); 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invokes the initial action. 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(Begin, void(void)); 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the CookieMonster instance under test. 847868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CookieMonster& cookie_monster() { return *cookie_monster_.get(); } 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Declares that mock expectations in this test suite are strictly ordered. 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::InSequence in_sequence_; 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Holds cookies to be returned from PersistentCookieStore::Load or 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PersistentCookieStore::LoadCookiesForKey. 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<CanonicalCookie*> loaded_cookies_; 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stores the callback passed from the CookieMonster to the 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PersistentCookieStore::Load 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieMonster::PersistentCookieStore::LoadedCallback loaded_callback_; 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stores the callback passed from the CookieMonster to the 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PersistentCookieStore::LoadCookiesForKey 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::queue<CookieMonster::PersistentCookieStore::LoadedCallback> 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loaded_for_key_callbacks_; 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stores the CookieMonster under test. 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cookie_monster_; 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stores the mock PersistentCookieStore. 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<NewMockPersistentCookieStore> persistent_store_; 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DeferredCookieTaskTest, DeferredGetCookies) { 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeclareLoadedCookie("www.google.izzle", 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "X=1; path=/; expires=Mon, 18-Apr-22 22:50:14 GMT", 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time::Now() + TimeDelta::FromDays(3)); 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockGetCookiesCallback get_cookies_callback; 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BeginWithForDomainKey("google.izzle", GetCookiesAction( 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cookie_monster(), url_google_, &get_cookies_callback)); 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WaitForLoadCall(); 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(get_cookies_callback, Invoke("X=1")).WillOnce( 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCookiesAction(&cookie_monster(), url_google_, &get_cookies_callback)); 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(get_cookies_callback, Invoke("X=1")).WillOnce( 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuitCurrentMessageLoop()); 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CompleteLoadingAndWait(); 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DeferredCookieTaskTest, DeferredSetCookie) { 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockSetCookiesCallback set_cookies_callback; 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BeginWithForDomainKey("google.izzle", SetCookieAction( 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cookie_monster(), url_google_, "A=B", &set_cookies_callback)); 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WaitForLoadCall(); 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(set_cookies_callback, Invoke(true)).WillOnce( 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetCookieAction( 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cookie_monster(), url_google_, "X=Y", &set_cookies_callback)); 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(set_cookies_callback, Invoke(true)).WillOnce( 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuitCurrentMessageLoop()); 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CompleteLoadingAndWait(); 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DeferredCookieTaskTest, DeferredDeleteCookie) { 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockClosure delete_cookie_callback; 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BeginWithForDomainKey("google.izzle", DeleteCookieAction( 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cookie_monster(), url_google_, "A", &delete_cookie_callback)); 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WaitForLoadCall(); 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(delete_cookie_callback, Invoke()).WillOnce( 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteCookieAction( 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cookie_monster(), url_google_, "X", &delete_cookie_callback)); 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(delete_cookie_callback, Invoke()).WillOnce( 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuitCurrentMessageLoop()); 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CompleteLoadingAndWait(); 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DeferredCookieTaskTest, DeferredSetCookieWithDetails) { 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockSetCookiesCallback set_cookies_callback; 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 926c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CookiesInputInfo cookie_info = { 927c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url_google_foo_, "A", "B", std::string(), "/foo", 928c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Time(), false, false, COOKIE_PRIORITY_DEFAULT 929c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BeginWithForDomainKey("google.izzle", SetCookieWithDetailsAction( 931c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &cookie_monster(), cookie_info, &set_cookies_callback)); 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WaitForLoadCall(); 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CookiesInputInfo cookie_info_exp = { 936c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url_google_foo_, "A", "B", std::string(), "/foo", 937c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Time(), false, false, COOKIE_PRIORITY_DEFAULT 938c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(set_cookies_callback, Invoke(true)).WillOnce( 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetCookieWithDetailsAction( 941c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &cookie_monster(), cookie_info_exp, &set_cookies_callback)); 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(set_cookies_callback, Invoke(true)).WillOnce( 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuitCurrentMessageLoop()); 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CompleteLoadingAndWait(); 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DeferredCookieTaskTest, DeferredGetAllCookies) { 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeclareLoadedCookie("www.google.izzle", 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "X=1; path=/; expires=Mon, 18-Apr-22 22:50:14 GMT", 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time::Now() + TimeDelta::FromDays(3)); 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockGetCookieListCallback get_cookie_list_callback; 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BeginWith(GetAllCookiesAction( 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cookie_monster(), &get_cookie_list_callback)); 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WaitForLoadCall(); 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(get_cookie_list_callback, Invoke(testing::_)).WillOnce( 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAllCookiesAction(&cookie_monster(), &get_cookie_list_callback)); 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(get_cookie_list_callback, Invoke(testing::_)).WillOnce( 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuitCurrentMessageLoop()); 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CompleteLoadingAndWait(); 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DeferredCookieTaskTest, DeferredGetAllForUrlCookies) { 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeclareLoadedCookie("www.google.izzle", 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "X=1; path=/; expires=Mon, 18-Apr-22 22:50:14 GMT", 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time::Now() + TimeDelta::FromDays(3)); 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockGetCookieListCallback get_cookie_list_callback; 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BeginWithForDomainKey("google.izzle", GetAllCookiesForUrlAction( 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cookie_monster(), url_google_, &get_cookie_list_callback)); 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WaitForLoadCall(); 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(get_cookie_list_callback, Invoke(testing::_)).WillOnce( 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAllCookiesForUrlAction( 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cookie_monster(), url_google_, &get_cookie_list_callback)); 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(get_cookie_list_callback, Invoke(testing::_)).WillOnce( 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuitCurrentMessageLoop()); 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CompleteLoadingAndWait(); 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DeferredCookieTaskTest, DeferredGetAllForUrlWithOptionsCookies) { 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeclareLoadedCookie("www.google.izzle", 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "X=1; path=/; expires=Mon, 18-Apr-22 22:50:14 GMT", 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time::Now() + TimeDelta::FromDays(3)); 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockGetCookieListCallback get_cookie_list_callback; 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BeginWithForDomainKey("google.izzle", GetAllCookiesForUrlWithOptionsAction( 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cookie_monster(), url_google_, &get_cookie_list_callback)); 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WaitForLoadCall(); 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(get_cookie_list_callback, Invoke(testing::_)).WillOnce( 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAllCookiesForUrlWithOptionsAction( 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cookie_monster(), url_google_, &get_cookie_list_callback)); 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(get_cookie_list_callback, Invoke(testing::_)).WillOnce( 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuitCurrentMessageLoop()); 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CompleteLoadingAndWait(); 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DeferredCookieTaskTest, DeferredDeleteAllCookies) { 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockDeleteCallback delete_callback; 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BeginWith(DeleteAllAction( 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cookie_monster(), &delete_callback)); 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WaitForLoadCall(); 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(delete_callback, Invoke(false)).WillOnce( 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteAllAction(&cookie_monster(), &delete_callback)); 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(delete_callback, Invoke(false)).WillOnce( 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuitCurrentMessageLoop()); 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CompleteLoadingAndWait(); 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DeferredCookieTaskTest, DeferredDeleteAllCreatedBetweenCookies) { 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockDeleteCallback delete_callback; 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BeginWith(DeleteAllCreatedBetweenAction( 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cookie_monster(), base::Time(), base::Time::Now(), &delete_callback)); 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WaitForLoadCall(); 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(delete_callback, Invoke(false)).WillOnce( 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteAllCreatedBetweenAction( 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cookie_monster(), base::Time(), base::Time::Now(), 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &delete_callback)); 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(delete_callback, Invoke(false)).WillOnce( 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuitCurrentMessageLoop()); 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CompleteLoadingAndWait(); 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DeferredCookieTaskTest, DeferredDeleteAllForHostCookies) { 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockDeleteCallback delete_callback; 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BeginWithForDomainKey("google.izzle", DeleteAllForHostAction( 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cookie_monster(), url_google_, &delete_callback)); 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WaitForLoadCall(); 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(delete_callback, Invoke(false)).WillOnce( 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteAllForHostAction( 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cookie_monster(), url_google_, &delete_callback)); 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(delete_callback, Invoke(false)).WillOnce( 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuitCurrentMessageLoop()); 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CompleteLoadingAndWait(); 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DeferredCookieTaskTest, DeferredDeleteCanonicalCookie) { 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<CanonicalCookie*> cookies; 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CanonicalCookie cookie = BuildCanonicalCookie( 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "www.google.com", "X=1; path=/", base::Time::Now()); 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockDeleteCookieCallback delete_cookie_callback; 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BeginWith(DeleteCanonicalCookieAction( 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cookie_monster(), cookie, &delete_cookie_callback)); 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WaitForLoadCall(); 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(delete_cookie_callback, Invoke(false)).WillOnce( 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteCanonicalCookieAction( 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cookie_monster(), cookie, &delete_cookie_callback)); 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(delete_cookie_callback, Invoke(false)).WillOnce( 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuitCurrentMessageLoop()); 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CompleteLoadingAndWait(); 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DeferredCookieTaskTest, DeferredDeleteSessionCookies) { 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockDeleteCallback delete_callback; 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BeginWith(DeleteSessionCookiesAction( 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cookie_monster(), &delete_callback)); 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WaitForLoadCall(); 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(delete_callback, Invoke(false)).WillOnce( 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteSessionCookiesAction(&cookie_monster(), &delete_callback)); 10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(delete_callback, Invoke(false)).WillOnce( 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuitCurrentMessageLoop()); 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CompleteLoadingAndWait(); 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verify that a series of queued tasks are executed in order upon loading of 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the backing store and that new tasks received while the queued tasks are 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// being dispatched go to the end of the queue. 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(DeferredCookieTaskTest, DeferredTaskOrder) { 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeclareLoadedCookie("www.google.izzle", 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "X=1; path=/; expires=Mon, 18-Apr-22 22:50:14 GMT", 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time::Now() + TimeDelta::FromDays(3)); 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockGetCookiesCallback get_cookies_callback; 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockSetCookiesCallback set_cookies_callback; 11082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockGetCookiesCallback get_cookies_callback_deferred; 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*this, Begin()).WillOnce(testing::DoAll( 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCookiesAction( 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cookie_monster(), url_google_, &get_cookies_callback), 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetCookieAction( 11141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) &cookie_monster(), url_google_, "A=B", &set_cookies_callback))); 11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectLoadCall(); 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectLoadForKeyCall("google.izzle", false); 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Begin(); 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WaitForLoadCall(); 11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(get_cookies_callback, Invoke("X=1")).WillOnce( 11212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetCookiesAction( 11222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &cookie_monster(), url_google_, &get_cookies_callback_deferred)); 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(set_cookies_callback, Invoke(true)); 11241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_CALL(get_cookies_callback_deferred, Invoke("A=B; X=1")).WillOnce( 11251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) QuitCurrentMessageLoop()); 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CompleteLoadingAndWait(); 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieMonsterTest, TestCookieDeleteAll) { 11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<MockPersistentCookieStore> store( 11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new MockPersistentCookieStore); 1133868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(store.get(), NULL)); 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieOptions options; 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options.set_include_httponly(); 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1137868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), url_google_, kValidCookieLine)); 1138868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ("A=B", GetCookies(cm.get(), url_google_)); 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1140868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE( 1141868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetCookieWithOptions(cm.get(), url_google_, "C=D; httponly", options)); 1142868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ("A=B; C=D", GetCookiesWithOptions(cm.get(), url_google_, options)); 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1144868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(2, DeleteAll(cm.get())); 1145868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ("", GetCookiesWithOptions(cm.get(), url_google_, options)); 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0u, store->commands().size()); 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a persistent cookie. 1149868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie( 1150868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cm.get(), 1151868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) url_google_, 1152868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string(kValidCookieLine) + "; expires=Mon, 18-Apr-22 22:50:13 GMT")); 11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, store->commands().size()); 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[0].type); 11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1156868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(1, DeleteAll(cm.get())); // sync_to_store = true. 11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, store->commands().size()); 11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[1].type); 11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1160868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ("", GetCookiesWithOptions(cm.get(), url_google_, options)); 11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieMonsterTest, TestCookieDeleteAllCreatedBetweenTimestamps) { 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time now = Time::Now(); 11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Nothing has been added so nothing should be deleted. 1168868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ( 1169868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 0, 1170868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DeleteAllCreatedBetween(cm.get(), now - TimeDelta::FromDays(99), Time())); 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create 3 cookies with creation date of today, yesterday and the day before. 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cm->SetCookieWithCreationTime(url_google_, "T-0=Now", now)); 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cm->SetCookieWithCreationTime(url_google_, "T-1=Yesterday", 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) now - TimeDelta::FromDays(1))); 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cm->SetCookieWithCreationTime(url_google_, "T-2=DayBefore", 11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) now - TimeDelta::FromDays(2))); 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cm->SetCookieWithCreationTime(url_google_, "T-3=ThreeDays", 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) now - TimeDelta::FromDays(3))); 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cm->SetCookieWithCreationTime(url_google_, "T-7=LastWeek", 11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) now - TimeDelta::FromDays(7))); 11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Try to delete threedays and the daybefore. 1184868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(2, 1185868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DeleteAllCreatedBetween(cm.get(), 1186868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) now - TimeDelta::FromDays(3), 1187868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) now - TimeDelta::FromDays(1))); 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Try to delete yesterday, also make sure that delete_end is not 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // inclusive. 1191868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ( 1192868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1, DeleteAllCreatedBetween(cm.get(), now - TimeDelta::FromDays(2), now)); 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the delete_begin is inclusive. 1195868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ( 1196868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1, DeleteAllCreatedBetween(cm.get(), now - TimeDelta::FromDays(7), now)); 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Delete the last (now) item. 1199868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(1, DeleteAllCreatedBetween(cm.get(), Time(), Time())); 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Really make sure everything is gone. 1202868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(0, DeleteAll(cm.get())); 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const int kAccessDelayMs = kLastAccessThresholdMilliseconds + 20; 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieMonsterTest, TestLastAccess) { 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm( 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new CookieMonster(NULL, NULL, kLastAccessThresholdMilliseconds)); 12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1211868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), url_google_, "A=B")); 1212868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const Time last_access_date(GetFirstCookieAccessDate(cm.get())); 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reading the cookie again immediately shouldn't update the access date, 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // since we're inside the threshold. 1216868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ("A=B", GetCookies(cm.get(), url_google_)); 1217868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(last_access_date == GetFirstCookieAccessDate(cm.get())); 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reading after a short wait should update the access date. 12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::PlatformThread::Sleep( 12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta::FromMilliseconds(kAccessDelayMs)); 1222868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ("A=B", GetCookies(cm.get(), url_google_)); 1223868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE(last_access_date == GetFirstCookieAccessDate(cm.get())); 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieMonsterTest, TestHostGarbageCollection) { 1227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TestHostGarbageCollectHelper(); 1228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 1229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(CookieMonsterTest, TestPriorityAwareGarbageCollection) { 1231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TestPriorityAwareGarbageCollectHelper(); 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieMonsterTest, TestDeleteSingleCookie) { 12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1237868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), url_google_, "A=B")); 1238868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), url_google_, "C=D")); 1239868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), url_google_, "E=F")); 1240868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ("A=B; C=D; E=F", GetCookies(cm.get(), url_google_)); 12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1242868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(FindAndDeleteCookie(cm.get(), url_google_.host(), "C")); 1243868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ("A=B; E=F", GetCookies(cm.get(), url_google_)); 12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE(FindAndDeleteCookie(cm.get(), "random.host", "E")); 1246868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ("A=B; E=F", GetCookies(cm.get(), url_google_)); 12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieMonsterTest, SetCookieableSchemes) { 12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm_foo(new CookieMonster(NULL, NULL)); 12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Only cm_foo should allow foo:// cookies. 12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* kSchemes[] = {"foo"}; 12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm_foo->SetCookieableSchemes(kSchemes, 1); 12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL foo_url("foo://host/path"); 12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL http_url("http://host/path"); 12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1260868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), http_url, "x=1")); 1261868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE(SetCookie(cm.get(), foo_url, "x=1")); 1262868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm_foo.get(), foo_url, "x=1")); 1263868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE(SetCookie(cm_foo.get(), http_url, "x=1")); 12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieMonsterTest, GetAllCookiesForURL) { 12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm( 12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new CookieMonster(NULL, NULL, kLastAccessThresholdMilliseconds)); 12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create an httponly cookie. 12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieOptions options; 12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options.set_include_httponly(); 12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1274868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE( 1275868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetCookieWithOptions(cm.get(), url_google_, "A=B; httponly", options)); 1276868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookieWithOptions( 1277868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cm.get(), url_google_, "C=D; domain=.google.izzle", options)); 1278868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookieWithOptions(cm.get(), 1279868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) url_google_secure_, 12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "E=F; domain=.google.izzle; secure", 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options)); 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1283868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const Time last_access_date(GetFirstCookieAccessDate(cm.get())); 12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::PlatformThread::Sleep( 12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta::FromMilliseconds(kAccessDelayMs)); 12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check cookies for url. 1289868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CookieList cookies = GetAllCookiesForURL(cm.get(), url_google_); 12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieList::iterator it = cookies.begin(); 12915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(it != cookies.end()); 12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("www.google.izzle", it->Domain()); 12945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("A", it->Name()); 12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(++it != cookies.end()); 12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(".google.izzle", it->Domain()); 12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("C", it->Name()); 12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(++it == cookies.end()); 13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check cookies for url excluding http-only cookies. 13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookies = 1304868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetAllCookiesForURLWithOptions(cm.get(), url_google_, CookieOptions()); 13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it = cookies.begin(); 13065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(it != cookies.end()); 13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(".google.izzle", it->Domain()); 13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("C", it->Name()); 13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(++it == cookies.end()); 13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test secure cookies. 1314868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cookies = GetAllCookiesForURL(cm.get(), url_google_secure_); 13155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it = cookies.begin(); 13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(it != cookies.end()); 13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("www.google.izzle", it->Domain()); 13195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("A", it->Name()); 13205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(++it != cookies.end()); 13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(".google.izzle", it->Domain()); 13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("C", it->Name()); 13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(++it != cookies.end()); 13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(".google.izzle", it->Domain()); 13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("E", it->Name()); 13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(++it == cookies.end()); 13305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reading after a short wait should not update the access date. 1332868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(last_access_date == GetFirstCookieAccessDate(cm.get())); 13335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieMonsterTest, GetAllCookiesForURLPathMatching) { 13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieOptions options; 13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1339868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookieWithOptions( 1340868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cm.get(), url_google_foo_, "A=B; path=/foo;", options)); 1341868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookieWithOptions( 1342868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cm.get(), url_google_bar_, "C=D; path=/bar;", options)); 1343868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookieWithOptions(cm.get(), url_google_, "E=F;", options)); 13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CookieList cookies = GetAllCookiesForURL(cm.get(), url_google_foo_); 13465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieList::iterator it = cookies.begin(); 13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(it != cookies.end()); 13495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("A", it->Name()); 13505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("/foo", it->Path()); 13515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(++it != cookies.end()); 13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("E", it->Name()); 13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("/", it->Path()); 13555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(++it == cookies.end()); 13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1358868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cookies = GetAllCookiesForURL(cm.get(), url_google_bar_); 13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it = cookies.begin(); 13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(it != cookies.end()); 13625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("C", it->Name()); 13635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("/bar", it->Path()); 13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(++it != cookies.end()); 13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("E", it->Name()); 13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("/", it->Path()); 13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(++it == cookies.end()); 13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieMonsterTest, DeleteCookieByName) { 13735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), url_google_, "A=A1; path=/")); 1376868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), url_google_, "A=A2; path=/foo")); 1377868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), url_google_, "A=A3; path=/bar")); 1378868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), url_google_, "B=B1; path=/")); 1379868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), url_google_, "B=B2; path=/foo")); 1380868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), url_google_, "B=B3; path=/bar")); 13815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1382868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DeleteCookie(cm.get(), GURL(std::string(kUrlGoogle) + "/foo/bar"), "A"); 13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1384868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CookieList cookies = GetAllCookies(cm.get()); 13855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t expected_size = 4; 13865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_size, cookies.size()); 13875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (CookieList::iterator it = cookies.begin(); 13885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != cookies.end(); ++it) { 13895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE("A1", it->Value()); 13905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE("A2", it->Value()); 13915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(CookieMonsterTest, ImportCookiesFromCookieMonster) { 13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm_1(new CookieMonster(NULL, NULL)); 13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieOptions options; 13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(SetCookieWithOptions(cm_1.get(), url_google_foo_, 13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "A1=B; path=/foo;", 14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options)); 14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(SetCookieWithOptions(cm_1.get(), url_google_bar_, 14025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "A2=D; path=/bar;", 14035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options)); 14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(SetCookieWithOptions(cm_1.get(), url_google_, 14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "A3=F;", 14065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options)); 14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1408868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CookieList cookies_1 = GetAllCookies(cm_1.get()); 14095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm_2(new CookieMonster(NULL, NULL)); 14101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(cm_2->ImportCookies(cookies_1)); 1411868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CookieList cookies_2 = GetAllCookies(cm_2.get()); 14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t expected_size = 3; 14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_size, cookies_2.size()); 14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieList::iterator it = cookies_2.begin(); 14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(it != cookies_2.end()); 14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("A1", it->Name()); 14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("/foo", it->Path()); 14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(++it != cookies_2.end()); 14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("A2", it->Name()); 14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("/bar", it->Path()); 14255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(++it != cookies_2.end()); 14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("A3", it->Name()); 14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("/", it->Path()); 14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests importing from a persistent cookie store that contains duplicate 14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// equivalent cookies. This situation should be handled by removing the 14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// duplicate cookie (both from the in-memory cache, and from the backing store). 14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is a regression test for: http://crbug.com/17855. 14365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieMonsterTest, DontImportDuplicateCookies) { 14375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<MockPersistentCookieStore> store( 14385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new MockPersistentCookieStore); 14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We will fill some initial cookies into the PersistentCookieStore, 14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to simulate a database with 4 duplicates. Note that we need to 14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be careful not to have any duplicate creation times at all (as it's a 14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // violation of a CookieMonster invariant) even if Time::Now() doesn't 14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // move between calls. 14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<CanonicalCookie*> initial_cookies; 14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Insert 4 cookies with name "X" on path "/", with varying creation 14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // dates. We expect only the most recent one to be preserved following 14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the import. 14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddCookieToList("www.google.com", 14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "X=1; path=/; expires=Mon, 18-Apr-22 22:50:14 GMT", 14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time::Now() + TimeDelta::FromDays(3), 14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &initial_cookies); 14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddCookieToList("www.google.com", 14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "X=2; path=/; expires=Mon, 18-Apr-22 22:50:14 GMT", 14585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time::Now() + TimeDelta::FromDays(1), 14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &initial_cookies); 14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ===> This one is the WINNER (biggest creation time). <==== 14625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddCookieToList("www.google.com", 14635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "X=3; path=/; expires=Mon, 18-Apr-22 22:50:14 GMT", 14645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time::Now() + TimeDelta::FromDays(4), 14655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &initial_cookies); 14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddCookieToList("www.google.com", 14685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "X=4; path=/; expires=Mon, 18-Apr-22 22:50:14 GMT", 14695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time::Now(), 14705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &initial_cookies); 14715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Insert 2 cookies with name "X" on path "/2", with varying creation 14735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // dates. We expect only the most recent one to be preserved the import. 14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ===> This one is the WINNER (biggest creation time). <==== 14765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddCookieToList("www.google.com", 14775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "X=a1; path=/2; expires=Mon, 18-Apr-22 22:50:14 GMT", 14785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time::Now() + TimeDelta::FromDays(9), 14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &initial_cookies); 14805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddCookieToList("www.google.com", 14825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "X=a2; path=/2; expires=Mon, 18-Apr-22 22:50:14 GMT", 14835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time::Now() + TimeDelta::FromDays(2), 14845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &initial_cookies); 14855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Insert 1 cookie with name "Y" on path "/". 14875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddCookieToList("www.google.com", 14885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Y=a; path=/; expires=Mon, 18-Apr-22 22:50:14 GMT", 14895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time::Now() + TimeDelta::FromDays(10), 14905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &initial_cookies); 14915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Inject our initial cookies into the mock PersistentCookieStore. 14935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) store->SetLoadExpectation(true, initial_cookies); 14945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(store.get(), NULL)); 14965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify that duplicates were not imported for path "/". 14985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (If this had failed, GetCookies() would have also returned X=1, X=2, X=4). 1499868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ("X=3; Y=a", GetCookies(cm.get(), GURL("http://www.google.com/"))); 15005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify that same-named cookie on a different path ("/x2") didn't get 15025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // messed up. 15035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("X=a1; X=3; Y=a", 1504868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetCookies(cm.get(), GURL("http://www.google.com/2/x"))); 15055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify that the PersistentCookieStore was told to kill its 4 duplicates. 15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(4u, store->commands().size()); 15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[0].type); 15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[1].type); 15105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[2].type); 15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[3].type); 15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests importing from a persistent cookie store that contains cookies 15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// with duplicate creation times. This situation should be handled by 15165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// dropping the cookies before insertion/visibility to user. 15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 15185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is a regression test for: http://crbug.com/43188. 15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieMonsterTest, DontImportDuplicateCreationTimes) { 15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<MockPersistentCookieStore> store( 15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new MockPersistentCookieStore); 15225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time now(Time::Now()); 15245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time earlier(now - TimeDelta::FromDays(1)); 15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Insert 8 cookies, four with the current time as creation times, and 15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // four with the earlier time as creation times. We should only get 15285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // two cookies remaining, but which two (other than that there should 15295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be one from each set) will be random. 15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<CanonicalCookie*> initial_cookies; 15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddCookieToList("www.google.com", "X=1; path=/", now, &initial_cookies); 15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddCookieToList("www.google.com", "X=2; path=/", now, &initial_cookies); 15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddCookieToList("www.google.com", "X=3; path=/", now, &initial_cookies); 15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddCookieToList("www.google.com", "X=4; path=/", now, &initial_cookies); 15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddCookieToList("www.google.com", "Y=1; path=/", earlier, &initial_cookies); 15375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddCookieToList("www.google.com", "Y=2; path=/", earlier, &initial_cookies); 15385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddCookieToList("www.google.com", "Y=3; path=/", earlier, &initial_cookies); 15395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddCookieToList("www.google.com", "Y=4; path=/", earlier, &initial_cookies); 15405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Inject our initial cookies into the mock PersistentCookieStore. 15425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) store->SetLoadExpectation(true, initial_cookies); 15435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1544868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(store.get(), NULL)); 15455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1546868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CookieList list(GetAllCookies(cm.get())); 15475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2U, list.size()); 15485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Confirm that we have one of each. 15495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string name1(list[0].Name()); 15505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string name2(list[1].Name()); 15515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(name1 == "X" || name2 == "X"); 15525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(name1 == "Y" || name2 == "Y"); 15535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(name1, name2); 15545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(CookieMonsterTest, CookieMonsterDelegate) { 15575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<MockPersistentCookieStore> store( 15585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new MockPersistentCookieStore); 15595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<MockCookieMonsterDelegate> delegate( 15605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new MockCookieMonsterDelegate); 1561868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_refptr<CookieMonster> cm( 1562868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new CookieMonster(store.get(), delegate.get())); 15635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1564868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), url_google_, "A=B")); 1565868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), url_google_, "C=D")); 1566868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), url_google_, "E=F")); 1567868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ("A=B; C=D; E=F", GetCookies(cm.get(), url_google_)); 15685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(3u, delegate->changes().size()); 15695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(delegate->changes()[0].second); 15705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url_google_.host(), delegate->changes()[0].first.Domain()); 15715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("A", delegate->changes()[0].first.Name()); 15725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("B", delegate->changes()[0].first.Value()); 15735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url_google_.host(), delegate->changes()[1].first.Domain()); 15745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(delegate->changes()[1].second); 15755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("C", delegate->changes()[1].first.Name()); 15765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("D", delegate->changes()[1].first.Value()); 15775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url_google_.host(), delegate->changes()[2].first.Domain()); 15785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(delegate->changes()[2].second); 15795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("E", delegate->changes()[2].first.Name()); 15805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("F", delegate->changes()[2].first.Value()); 15815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate->reset(); 15825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1583868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(FindAndDeleteCookie(cm.get(), url_google_.host(), "C")); 1584868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ("A=B; E=F", GetCookies(cm.get(), url_google_)); 15855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, delegate->changes().size()); 15865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url_google_.host(), delegate->changes()[0].first.Domain()); 15875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(delegate->changes()[0].second); 15885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("C", delegate->changes()[0].first.Name()); 15895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("D", delegate->changes()[0].first.Value()); 15905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate->reset(); 15915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1592868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE(FindAndDeleteCookie(cm.get(), "random.host", "E")); 1593868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ("A=B; E=F", GetCookies(cm.get(), url_google_)); 15945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0u, delegate->changes().size()); 15955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Insert a cookie "a" for path "/path1" 1597868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), 1598868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) url_google_, 1599868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "a=val1; path=/path1; " 1600868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "expires=Mon, 18-Apr-22 22:50:13 GMT")); 16015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, store->commands().size()); 16025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[0].type); 16035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, delegate->changes().size()); 16045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(delegate->changes()[0].second); 16055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url_google_.host(), delegate->changes()[0].first.Domain()); 16065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("a", delegate->changes()[0].first.Name()); 16075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("val1", delegate->changes()[0].first.Value()); 16085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate->reset(); 16095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Insert a cookie "a" for path "/path1", that is httponly. This should 16115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // overwrite the non-http-only version. 16125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieOptions allow_httponly; 16135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allow_httponly.set_include_httponly(); 1614868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookieWithOptions(cm.get(), 1615868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) url_google_, 1616868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "a=val2; path=/path1; httponly; " 1617868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "expires=Mon, 18-Apr-22 22:50:14 GMT", 1618868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) allow_httponly)); 16195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(3u, store->commands().size()); 16205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[1].type); 16215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[2].type); 16225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, delegate->changes().size()); 16235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url_google_.host(), delegate->changes()[0].first.Domain()); 16245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(delegate->changes()[0].second); 16255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("a", delegate->changes()[0].first.Name()); 16265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("val1", delegate->changes()[0].first.Value()); 16275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url_google_.host(), delegate->changes()[1].first.Domain()); 16285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(delegate->changes()[1].second); 16295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("a", delegate->changes()[1].first.Name()); 16305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("val2", delegate->changes()[1].first.Value()); 16315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate->reset(); 16325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieMonsterTest, SetCookieWithDetails) { 16355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 16365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1637868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookieWithDetails(cm.get(), 1638868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) url_google_foo_, 1639868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "A", 1640868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "B", 1641868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string(), 1642868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "/foo", 1643868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::Time(), 1644868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 1645868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 1646868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) COOKIE_PRIORITY_DEFAULT)); 1647868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookieWithDetails(cm.get(), 1648868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) url_google_bar_, 1649868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "C", 1650868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "D", 1651868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "google.izzle", 1652868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "/bar", 1653868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::Time(), 1654868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 1655868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) true, 1656868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) COOKIE_PRIORITY_DEFAULT)); 1657868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookieWithDetails(cm.get(), 1658868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) url_google_, 1659868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "E", 1660868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "F", 1661868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string(), 1662868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string(), 1663868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::Time(), 1664868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) true, 1665868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 1666868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) COOKIE_PRIORITY_DEFAULT)); 16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test that malformed attributes fail to set the cookie. 1669868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE(SetCookieWithDetails(cm.get(), 1670868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) url_google_foo_, 1671868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) " A", 1672868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "B", 1673868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string(), 1674868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "/foo", 1675868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::Time(), 1676868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 1677868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 1678868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) COOKIE_PRIORITY_DEFAULT)); 1679868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE(SetCookieWithDetails(cm.get(), 1680868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) url_google_foo_, 1681868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "A;", 1682868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "B", 1683868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string(), 1684868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "/foo", 1685868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::Time(), 1686868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 1687868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 1688868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) COOKIE_PRIORITY_DEFAULT)); 1689868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE(SetCookieWithDetails(cm.get(), 1690868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) url_google_foo_, 1691868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "A=", 1692868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "B", 1693868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string(), 1694868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "/foo", 1695868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::Time(), 1696868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 1697868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 1698868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) COOKIE_PRIORITY_DEFAULT)); 1699868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE(SetCookieWithDetails(cm.get(), 1700868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) url_google_foo_, 1701868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "A", 1702868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "B", 1703868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "google.ozzzzzzle", 1704868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "foo", 1705868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::Time(), 1706868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 1707868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 1708868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) COOKIE_PRIORITY_DEFAULT)); 1709868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE(SetCookieWithDetails(cm.get(), 1710868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) url_google_foo_, 1711868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "A=", 1712868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "B", 1713868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string(), 1714868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "foo", 1715868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::Time(), 1716868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 1717868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 1718868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) COOKIE_PRIORITY_DEFAULT)); 1719868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1720868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CookieList cookies = GetAllCookiesForURL(cm.get(), url_google_foo_); 17215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieList::iterator it = cookies.begin(); 17225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(it != cookies.end()); 17245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("A", it->Name()); 17255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("B", it->Value()); 17265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("www.google.izzle", it->Domain()); 17275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("/foo", it->Path()); 17285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(it->IsPersistent()); 17295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(it->IsSecure()); 17305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(it->IsHttpOnly()); 17315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(++it == cookies.end()); 17335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1734868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cookies = GetAllCookiesForURL(cm.get(), url_google_bar_); 17355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it = cookies.begin(); 17365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(it != cookies.end()); 17385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("C", it->Name()); 17395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("D", it->Value()); 17405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(".google.izzle", it->Domain()); 17415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("/bar", it->Path()); 17425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(it->IsSecure()); 17435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(it->IsHttpOnly()); 17445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(++it == cookies.end()); 17465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1747868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cookies = GetAllCookiesForURL(cm.get(), url_google_secure_); 17485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it = cookies.begin(); 17495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(it != cookies.end()); 17515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("E", it->Name()); 17525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("F", it->Value()); 17535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("/", it->Path()); 17545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("www.google.izzle", it->Domain()); 17555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(it->IsSecure()); 17565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(it->IsHttpOnly()); 17575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(++it == cookies.end()); 17595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieMonsterTest, DeleteAllForHost) { 17625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 17635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test probes: 17655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // * Non-secure URL, mid-level (http://w.c.b.a) 17665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // * Secure URL, mid-level (https://w.c.b.a) 17675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // * URL with path, mid-level (https:/w.c.b.a/dir1/xx) 17685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // All three tests should nuke only the midlevel host cookie, 17695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the http_only cookie, the host secure cookie, and the two host 17705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // path cookies. http_only, secure, and paths are ignored by 17715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this call, and domain cookies arent touched. 17725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PopulateCmForDeleteAllForHost(cm); 17735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("dom_1=X; dom_2=X; dom_3=X; host_3=X", 1774868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetCookies(cm.get(), GURL(kTopLevelDomainPlus3))); 17755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("dom_1=X; dom_2=X; host_2=X; sec_dom=X; sec_host=X", 1776868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetCookies(cm.get(), GURL(kTopLevelDomainPlus2Secure))); 1777868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ("dom_1=X; host_1=X", 1778868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetCookies(cm.get(), GURL(kTopLevelDomainPlus1))); 17795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("dom_path_2=X; host_path_2=X; dom_path_1=X; host_path_1=X; " 17805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "dom_1=X; dom_2=X; host_2=X; sec_dom=X; sec_host=X", 1781868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetCookies(cm.get(), 1782868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GURL(kTopLevelDomainPlus2Secure + 1783868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string("/dir1/dir2/xxx")))); 17845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(5, DeleteAllForHost(cm.get(), GURL(kTopLevelDomainPlus2))); 1786868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(8U, GetAllCookies(cm.get()).size()); 17875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("dom_1=X; dom_2=X; dom_3=X; host_3=X", 1789868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetCookies(cm.get(), GURL(kTopLevelDomainPlus3))); 17905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("dom_1=X; dom_2=X; sec_dom=X", 1791868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetCookies(cm.get(), GURL(kTopLevelDomainPlus2Secure))); 1792868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ("dom_1=X; host_1=X", 1793868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetCookies(cm.get(), GURL(kTopLevelDomainPlus1))); 17945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("dom_path_2=X; dom_path_1=X; dom_1=X; dom_2=X; sec_dom=X", 1795868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetCookies(cm.get(), 1796868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GURL(kTopLevelDomainPlus2Secure + 1797868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string("/dir1/dir2/xxx")))); 17985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PopulateCmForDeleteAllForHost(cm); 1800868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(5, DeleteAllForHost(cm.get(), GURL(kTopLevelDomainPlus2Secure))); 1801868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(8U, GetAllCookies(cm.get()).size()); 18025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("dom_1=X; dom_2=X; dom_3=X; host_3=X", 1804868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetCookies(cm.get(), GURL(kTopLevelDomainPlus3))); 18055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("dom_1=X; dom_2=X; sec_dom=X", 1806868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetCookies(cm.get(), GURL(kTopLevelDomainPlus2Secure))); 1807868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ("dom_1=X; host_1=X", 1808868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetCookies(cm.get(), GURL(kTopLevelDomainPlus1))); 18095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("dom_path_2=X; dom_path_1=X; dom_1=X; dom_2=X; sec_dom=X", 1810868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetCookies(cm.get(), 1811868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GURL(kTopLevelDomainPlus2Secure + 1812868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string("/dir1/dir2/xxx")))); 18135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PopulateCmForDeleteAllForHost(cm); 1815868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(5, 1816868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DeleteAllForHost( 1817868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cm.get(), 1818868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GURL(kTopLevelDomainPlus2Secure + std::string("/dir1/xxx")))); 1819868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(8U, GetAllCookies(cm.get()).size()); 18205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("dom_1=X; dom_2=X; dom_3=X; host_3=X", 1822868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetCookies(cm.get(), GURL(kTopLevelDomainPlus3))); 18235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("dom_1=X; dom_2=X; sec_dom=X", 1824868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetCookies(cm.get(), GURL(kTopLevelDomainPlus2Secure))); 1825868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ("dom_1=X; host_1=X", 1826868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetCookies(cm.get(), GURL(kTopLevelDomainPlus1))); 18275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("dom_path_2=X; dom_path_1=X; dom_1=X; dom_2=X; sec_dom=X", 1828868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetCookies(cm.get(), 1829868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GURL(kTopLevelDomainPlus2Secure + 1830868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string("/dir1/dir2/xxx")))); 18315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieMonsterTest, UniqueCreationTime) { 18345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 18355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieOptions options; 18365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add in three cookies through every public interface to the 18385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CookieMonster and confirm that none of them have duplicate 18395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // creation times. 18405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SetCookieWithCreationTime and SetCookieWithCreationTimeAndOptions 18425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // are not included as they aren't going to be public for very much 18435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // longer. 18445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SetCookie, SetCookieWithOptions, SetCookieWithDetails 18465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1847868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetCookie(cm.get(), url_google_, "SetCookie1=A"); 1848868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetCookie(cm.get(), url_google_, "SetCookie2=A"); 1849868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetCookie(cm.get(), url_google_, "SetCookie3=A"); 1850868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1851868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetCookieWithOptions( 1852868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cm.get(), url_google_, "setCookieWithOptions1=A", options); 1853868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetCookieWithOptions( 1854868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cm.get(), url_google_, "setCookieWithOptions2=A", options); 1855868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetCookieWithOptions( 1856868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cm.get(), url_google_, "setCookieWithOptions3=A", options); 1857868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1858868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetCookieWithDetails(cm.get(), 1859868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) url_google_, 1860868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "setCookieWithDetails1", 1861868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "A", 1862868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ".google.com", 1863868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "/", 1864868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Time(), 1865868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 1866868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 1867c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) COOKIE_PRIORITY_DEFAULT); 1868868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetCookieWithDetails(cm.get(), 1869868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) url_google_, 1870868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "setCookieWithDetails2", 1871868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "A", 1872868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ".google.com", 1873868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "/", 1874868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Time(), 1875868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 1876868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 1877c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) COOKIE_PRIORITY_DEFAULT); 1878868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetCookieWithDetails(cm.get(), 1879868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) url_google_, 1880868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "setCookieWithDetails3", 1881868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "A", 1882868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ".google.com", 1883868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "/", 1884868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Time(), 1885868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 1886868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 1887c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) COOKIE_PRIORITY_DEFAULT); 18885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now we check 1890868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CookieList cookie_list(GetAllCookies(cm.get())); 18915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::map<int64, CanonicalCookie> TimeCookieMap; 18925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TimeCookieMap check_map; 18935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (CookieList::const_iterator it = cookie_list.begin(); 18945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != cookie_list.end(); it++) { 18955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int64 creation_date = it->CreationDate().ToInternalValue(); 18965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TimeCookieMap::const_iterator 18975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) existing_cookie_it(check_map.find(creation_date)); 18985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(existing_cookie_it == check_map.end()) 18995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "Cookie " << it->Name() << " has same creation date (" 19005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << it->CreationDate().ToInternalValue() 19015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << ") as previously entered cookie " 19025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << existing_cookie_it->second.Name(); 19035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (existing_cookie_it == check_map.end()) { 19055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) check_map.insert(TimeCookieMap::value_type( 19065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it->CreationDate().ToInternalValue(), *it)); 19075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Mainly a test of GetEffectiveDomain, or more specifically, of the 19125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// expected behavior of GetEffectiveDomain within the CookieMonster. 19135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieMonsterTest, GetKey) { 19145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 19155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This test is really only interesting if GetKey() actually does something. 19175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("google.com", cm->GetKey("www.google.com")); 19185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("google.izzie", cm->GetKey("www.google.izzie")); 19195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("google.izzie", cm->GetKey(".google.izzie")); 19205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("bbc.co.uk", cm->GetKey("bbc.co.uk")); 19215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("bbc.co.uk", cm->GetKey("a.b.c.d.bbc.co.uk")); 19225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("apple.com", cm->GetKey("a.b.c.d.apple.com")); 19235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("apple.izzie", cm->GetKey("a.b.c.d.apple.izzie")); 19245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cases where the effective domain is null, so we use the host 19265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // as the key. 19275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("co.uk", cm->GetKey("co.uk")); 19285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string extension_name("iehocdgbbocmkdidlbnnfbmbinnahbae"); 19295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(extension_name, cm->GetKey(extension_name)); 19305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("com", cm->GetKey("com")); 19315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("hostalias", cm->GetKey("hostalias")); 19325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("localhost", cm->GetKey("localhost")); 19335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that cookies transfer from/to the backing store correctly. 19365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieMonsterTest, BackingStoreCommunication) { 19375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Store details for cookies transforming through the backing store interface. 19385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time current(base::Time::Now()); 19405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<MockSimplePersistentCookieStore> store( 19415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new MockSimplePersistentCookieStore); 19425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time new_access_time; 19435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time expires(base::Time::Now() + base::TimeDelta::FromSeconds(100)); 19445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CookiesInputInfo input_info[] = { 1946c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) {GURL("http://a.b.google.com"), "a", "1", "", "/path/to/cookie", expires, 1947c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, false, COOKIE_PRIORITY_DEFAULT}, 1948c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) {GURL("https://www.google.com"), "b", "2", ".google.com", 1949c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "/path/from/cookie", expires + TimeDelta::FromSeconds(10), 1950c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, true, COOKIE_PRIORITY_DEFAULT}, 1951c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) {GURL("https://google.com"), "c", "3", "", "/another/path/to/cookie", 19525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time::Now() + base::TimeDelta::FromSeconds(100), 1953c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, false, COOKIE_PRIORITY_DEFAULT} 19545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 19555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int INPUT_DELETE = 1; 19565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create new cookies and flush them to the store. 19585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1959868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_refptr<CookieMonster> cmout(new CookieMonster(store.get(), NULL)); 19605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (const CookiesInputInfo* p = input_info; 1961868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) p < &input_info[ARRAYSIZE_UNSAFE(input_info)]; 1962868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) p++) { 1963868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookieWithDetails(cmout.get(), 1964868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) p->url, 1965868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) p->name, 1966868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) p->value, 1967868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) p->domain, 1968868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) p->path, 1969868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) p->expiration_time, 1970868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) p->secure, 1971868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) p->http_only, 1972868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) p->priority)); 19735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1974c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL del_url(input_info[INPUT_DELETE].url.Resolve( 1975c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) input_info[INPUT_DELETE].path).spec()); 1976868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DeleteCookie(cmout.get(), del_url, input_info[INPUT_DELETE].name); 19775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a new cookie monster and make sure that everything is correct 19805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1981868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_refptr<CookieMonster> cmin(new CookieMonster(store.get(), NULL)); 1982868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CookieList cookies(GetAllCookies(cmin.get())); 19835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, cookies.size()); 19845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ordering is path length, then creation time. So second cookie 19855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // will come first, and we need to swap them. 19865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::swap(cookies[0], cookies[1]); 19875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int output_index = 0; output_index < 2; output_index++) { 19885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int input_index = output_index * 2; 19895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CookiesInputInfo* input = &input_info[input_index]; 19905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CanonicalCookie* output = &cookies[output_index]; 19915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(input->name, output->Name()); 19935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(input->value, output->Value()); 1994c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(input->url.host(), output->Domain()); 19955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(input->path, output->Path()); 19965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LE(current.ToInternalValue(), 19975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) output->CreationDate().ToInternalValue()); 19985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(input->secure, output->IsSecure()); 19995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(input->http_only, output->IsHttpOnly()); 20005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(output->IsPersistent()); 2001c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(input->expiration_time.ToInternalValue(), 20025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) output->ExpiryDate().ToInternalValue()); 20035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieMonsterTest, CookieListOrdering) { 20085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Put a random set of cookies into a monster and make sure 20095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // they're returned in the right order. 20105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 2011868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE( 2012868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetCookie(cm.get(), GURL("http://d.c.b.a.google.com/aa/x.html"), "c=1")); 2013868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), 2014868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GURL("http://b.a.google.com/aa/bb/cc/x.html"), 20155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "d=1; domain=b.a.google.com")); 2016868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), 2017868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GURL("http://b.a.google.com/aa/bb/cc/x.html"), 20185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "a=4; domain=b.a.google.com")); 2019868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), 2020868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GURL("http://c.b.a.google.com/aa/bb/cc/x.html"), 20215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "e=1; domain=c.b.a.google.com")); 2022868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie( 2023868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cm.get(), GURL("http://d.c.b.a.google.com/aa/bb/x.html"), "b=1")); 2024868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie( 2025868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cm.get(), GURL("http://news.bbc.co.uk/midpath/x.html"), "g=10")); 20265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 20275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int i = 0; 20285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieList cookies(GetAllCookiesForURL( 2029868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cm.get(), GURL("http://d.c.b.a.google.com/aa/bb/cc/dd"))); 20305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(5u, cookies.size()); 20315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("d", cookies[i++].Name()); 20325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("a", cookies[i++].Name()); 20335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("e", cookies[i++].Name()); 20345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("b", cookies[i++].Name()); 20355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("c", cookies[i++].Name()); 20365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 20395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int i = 0; 2040868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CookieList cookies(GetAllCookies(cm.get())); 20415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(6u, cookies.size()); 20425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("d", cookies[i++].Name()); 20435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("a", cookies[i++].Name()); 20445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("e", cookies[i++].Name()); 20455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("g", cookies[i++].Name()); 20465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("b", cookies[i++].Name()); 20475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("c", cookies[i++].Name()); 20485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test and CookieMonstertest.TestGCTimes (in cookie_monster_perftest.cc) 20525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// are somewhat complementary twins. This test is probing for whether 20535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// garbage collection always happens when it should (i.e. that we actually 20545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// get rid of cookies when we should). The perftest is probing for 20555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// whether garbage collection happens when it shouldn't. See comments 20565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// before that test for more details. 20575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Disabled on Windows, see crbug.com/126095 20595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 20605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_GarbageCollectionTriggers DISABLED_GarbageCollectionTriggers 20615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 20625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_GarbageCollectionTriggers GarbageCollectionTriggers 20635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 20645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieMonsterTest, MAYBE_GarbageCollectionTriggers) { 20665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // First we check to make sure that a whole lot of recent cookies 20675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // doesn't get rid of anything after garbage collection is checked for. 20685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 20695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm( 20705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateMonsterForGC(CookieMonster::kMaxCookies * 2)); 2071868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(CookieMonster::kMaxCookies * 2, GetAllCookies(cm.get()).size()); 2072868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetCookie(cm.get(), GURL("http://newdomain.com"), "b=2"); 2073868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(CookieMonster::kMaxCookies * 2 + 1, 2074868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetAllCookies(cm.get()).size()); 20755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now we explore a series of relationships between cookie last access 20785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // time and size of store to make sure we only get rid of cookies when 20795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we really should. 20805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct TestCase { 20812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t num_cookies; 20822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t num_old_cookies; 20832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t expected_initial_cookies; 20845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Indexed by ExpiryAndKeyScheme 20852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t expected_cookies_after_set; 20865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } test_cases[] = { 20875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 20885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A whole lot of recent cookies; gc shouldn't happen. 20895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieMonster::kMaxCookies * 2, 20905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 20915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieMonster::kMaxCookies * 2, 20925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieMonster::kMaxCookies * 2 + 1 20935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, { 20945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Some old cookies, but still overflowing max. 20955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieMonster::kMaxCookies * 2, 20965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieMonster::kMaxCookies / 2, 20975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieMonster::kMaxCookies * 2, 20985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieMonster::kMaxCookies * 2 - CookieMonster::kMaxCookies / 2 + 1 20995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, { 21005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Old cookies enough to bring us right down to our purge line. 21015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieMonster::kMaxCookies * 2, 21025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieMonster::kMaxCookies + CookieMonster::kPurgeCookies + 1, 21035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieMonster::kMaxCookies * 2, 21045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieMonster::kMaxCookies - CookieMonster::kPurgeCookies 21055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, { 21065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Old cookies enough to bring below our purge line (which we 21075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // shouldn't do). 21085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieMonster::kMaxCookies * 2, 21095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieMonster::kMaxCookies * 3 / 2, 21105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieMonster::kMaxCookies * 2, 21115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieMonster::kMaxCookies - CookieMonster::kPurgeCookies 21125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 21145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int ci = 0; ci < static_cast<int>(ARRAYSIZE_UNSAFE(test_cases)); ++ci) { 21165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const TestCase *test_case = &test_cases[ci]; 21175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm( 21185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateMonsterFromStoreForGC( 21195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_case->num_cookies, test_case->num_old_cookies, 21205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieMonster::kSafeFromGlobalPurgeDays * 2)); 2121868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(test_case->expected_initial_cookies, 2122868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetAllCookies(cm.get()).size()) << "For test case " << ci; 21235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Will trigger GC 2124868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetCookie(cm.get(), GURL("http://newdomain.com"), "b=2"); 2125868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(test_case->expected_cookies_after_set, 2126868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetAllCookies(cm.get()).size()) << "For test case " << ci; 21275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test checks that keep expired cookies flag is working. 21315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieMonsterTest, KeepExpiredCookies) { 21325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 21335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm->SetKeepExpiredCookies(); 21345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieOptions options; 21355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set a persistent cookie. 21375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(SetCookieWithOptions( 2138868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cm.get(), 2139868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) url_google_, 21405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string(kValidCookieLine) + "; expires=Mon, 18-Apr-22 22:50:13 GMT", 21415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options)); 21425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the canonical cookie. 2144868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CookieList cookie_list = GetAllCookies(cm.get()); 21455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, cookie_list.size()); 21465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use a past expiry date to delete the cookie. 21485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(SetCookieWithOptions( 2149868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cm.get(), 2150868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) url_google_, 21515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string(kValidCookieLine) + "; expires=Mon, 18-Apr-1977 22:50:13 GMT", 21525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options)); 21535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the cookie with the past expiry date is still there. 21555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // GetAllCookies() also triggers garbage collection. 2156868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cookie_list = GetAllCookies(cm.get()); 21575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, cookie_list.size()); 21585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(cookie_list[0].IsExpired(Time::Now())); 21595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 21625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Mock PersistentCookieStore that keeps track of the number of Flush() calls. 21645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FlushablePersistentStore : public CookieMonster::PersistentCookieStore { 21655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 21665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FlushablePersistentStore() : flush_count_(0) {} 21675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Load(const LoadedCallback& loaded_callback) OVERRIDE { 21695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<CanonicalCookie*> out_cookies; 217090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->PostTask( 217190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) FROM_HERE, 217290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::Bind(&net::LoadedCallbackTask::Run, 217390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) new net::LoadedCallbackTask(loaded_callback, out_cookies))); 21745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void LoadCookiesForKey( 21772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& key, 21782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const LoadedCallback& loaded_callback) OVERRIDE { 21795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Load(loaded_callback); 21805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void AddCookie(const CanonicalCookie&) OVERRIDE {} 21832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void UpdateCookieAccessTime(const CanonicalCookie&) OVERRIDE {} 21842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DeleteCookie(const CanonicalCookie&) OVERRIDE {} 21852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetForceKeepSessionState() OVERRIDE {} 21865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Flush(const base::Closure& callback) OVERRIDE { 21885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++flush_count_; 21895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!callback.is_null()) 21905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback.Run(); 21915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int flush_count() { 21945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return flush_count_; 21955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 21985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~FlushablePersistentStore() {} 21995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) volatile int flush_count_; 22015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 22025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Counts the number of times Callback() has been run. 22045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CallbackCounter : public base::RefCountedThreadSafe<CallbackCounter> { 22055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 22065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CallbackCounter() : callback_count_(0) {} 22075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Callback() { 22095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++callback_count_; 22105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int callback_count() { 22135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return callback_count_; 22145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 22175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class base::RefCountedThreadSafe<CallbackCounter>; 22185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~CallbackCounter() {} 22195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) volatile int callback_count_; 22215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 22225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 22245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that FlushStore() is forwarded to the store and callbacks are posted. 22265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieMonsterTest, FlushStore) { 22275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CallbackCounter> counter(new CallbackCounter()); 22285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<FlushablePersistentStore> store(new FlushablePersistentStore()); 2229868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(store.get(), NULL)); 22305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, store->flush_count()); 22325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, counter->callback_count()); 22335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Before initialization, FlushStore() should just run the callback. 22355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm->FlushStore(base::Bind(&CallbackCounter::Callback, counter.get())); 223690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 22375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, store->flush_count()); 22395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1, counter->callback_count()); 22405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NULL callback is safe. 22425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm->FlushStore(base::Closure()); 224390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 22445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, store->flush_count()); 22465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1, counter->callback_count()); 22475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // After initialization, FlushStore() should delegate to the store. 2249868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetAllCookies(cm.get()); // Force init. 22505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm->FlushStore(base::Bind(&CallbackCounter::Callback, counter.get())); 225190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 22525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1, store->flush_count()); 22545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2, counter->callback_count()); 22555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NULL callback is still safe. 22575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm->FlushStore(base::Closure()); 225890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 22595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2, store->flush_count()); 22615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2, counter->callback_count()); 22625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If there's no backing store, FlushStore() is always a safe no-op. 22645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm = new CookieMonster(NULL, NULL); 2265868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetAllCookies(cm.get()); // Force init. 22665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm->FlushStore(base::Closure()); 226790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 22685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2, counter->callback_count()); 22705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm->FlushStore(base::Bind(&CallbackCounter::Callback, counter.get())); 227290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 22735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(3, counter->callback_count()); 22755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieMonsterTest, HistogramCheck) { 22785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 22795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should match call in InitializeHistograms, but doesn't really matter 22805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // since the histogram should have been initialized by the CM construction 22815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // above. 22822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::HistogramBase* expired_histogram = 22835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Histogram::FactoryGet( 22845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Cookie.ExpirationDurationMinutes", 1, 10 * 365 * 24 * 60, 50, 22855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Histogram::kUmaTargetedHistogramFlag); 22865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::HistogramSamples> samples1( 22885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expired_histogram->SnapshotSamples()); 2289868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ASSERT_TRUE( 2290868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetCookieWithDetails(cm.get(), 2291868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GURL("http://fake.a.url"), 2292868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "a", 2293868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "b", 2294868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "a.url", 2295868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "/", 2296868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::Time::Now() + base::TimeDelta::FromMinutes(59), 2297868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 2298868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 2299868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) COOKIE_PRIORITY_DEFAULT)); 23005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::HistogramSamples> samples2( 23025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expired_histogram->SnapshotSamples()); 23035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(samples1->TotalCount() + 1, samples2->TotalCount()); 23045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // kValidCookieLine creates a session cookie. 2306868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ASSERT_TRUE(SetCookie(cm.get(), url_google_, kValidCookieLine)); 23075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::HistogramSamples> samples3( 23095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expired_histogram->SnapshotSamples()); 23105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(samples2->TotalCount(), samples3->TotalCount()); 23115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 23145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MultiThreadedCookieMonsterTest : public CookieMonsterTest { 23165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 23175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MultiThreadedCookieMonsterTest() : other_thread_("CMTthread") {} 23185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Helper methods for calling the asynchronous CookieMonster methods 23205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // from a different thread. 23215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetAllCookiesTask(CookieMonster* cm, 23235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCookieListCallback* callback) { 23245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm->GetAllCookiesAsync( 23255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&GetCookieListCallback::Run, base::Unretained(callback))); 23265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetAllCookiesForURLTask(CookieMonster* cm, 23295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 23305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCookieListCallback* callback) { 23315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm->GetAllCookiesForURLAsync( 23325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, 23335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&GetCookieListCallback::Run, base::Unretained(callback))); 23345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetAllCookiesForURLWithOptionsTask(CookieMonster* cm, 23375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 23385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CookieOptions& options, 23395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCookieListCallback* callback) { 23405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm->GetAllCookiesForURLWithOptionsAsync( 23415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, options, 23425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&GetCookieListCallback::Run, base::Unretained(callback))); 23435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetCookieWithDetailsTask(CookieMonster* cm, const GURL& url, 2346e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ResultSavingCookieCallback<bool>* callback) { 23475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Define the parameters here instead of in the calling fucntion. 23485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The maximum number of parameters for Bind function is 6. 23495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string name = "A"; 23505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string value = "B"; 23515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string domain = std::string(); 23525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string path = "/foo"; 23535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time expiration_time = base::Time(); 23545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool secure = false; 23555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool http_only = false; 2356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CookiePriority priority = COOKIE_PRIORITY_DEFAULT; 23575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm->SetCookieWithDetailsAsync( 23585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, name, value, domain, path, expiration_time, secure, http_only, 2359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) priority, 2360e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch base::Bind( 2361e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch &ResultSavingCookieCallback<bool>::Run, 2362e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch base::Unretained(callback))); 23635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DeleteAllCreatedBetweenTask(CookieMonster* cm, 23665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& delete_begin, 23675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& delete_end, 2368e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ResultSavingCookieCallback<int>* callback) { 23695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm->DeleteAllCreatedBetweenAsync( 23705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete_begin, delete_end, 2371e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch base::Bind( 2372e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch &ResultSavingCookieCallback<int>::Run, base::Unretained(callback))); 23735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DeleteAllForHostTask(CookieMonster* cm, 23765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 2377e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ResultSavingCookieCallback<int>* callback) { 23785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm->DeleteAllForHostAsync( 23795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, 2380e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch base::Bind( 2381e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch &ResultSavingCookieCallback<int>::Run, base::Unretained(callback))); 23825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2384e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch void DeleteAllCreatedBetweenForHostTask( 2385e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch CookieMonster* cm, 2386e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const base::Time delete_begin, 2387e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const base::Time delete_end, 2388e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const GURL& url, 2389e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ResultSavingCookieCallback<int>* callback) { 23903240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch cm->DeleteAllCreatedBetweenForHostAsync( 23913240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch delete_begin, delete_end, url, 2392e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch base::Bind( 2393e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch &ResultSavingCookieCallback<int>::Run, 2394e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch base::Unretained(callback))); 23953240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 23963240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 23975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DeleteCanonicalCookieTask(CookieMonster* cm, 23985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CanonicalCookie& cookie, 2399e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ResultSavingCookieCallback<bool>* callback) { 24005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm->DeleteCanonicalCookieAsync( 24015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie, 2402e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch base::Bind( 2403e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch &ResultSavingCookieCallback<bool>::Run, 2404e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch base::Unretained(callback))); 24055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 24085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RunOnOtherThread(const base::Closure& task) { 24095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) other_thread_.Start(); 24105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) other_thread_.message_loop()->PostTask(FROM_HERE, task); 24115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunFor(kTimeout); 24125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) other_thread_.Stop(); 24135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Thread other_thread_; 24165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 24175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 24195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckGetAllCookies) { 24215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 2422868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), url_google_, "A=B")); 2423868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CookieList cookies = GetAllCookies(cm.get()); 24245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieList::const_iterator it = cookies.begin(); 24255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(it != cookies.end()); 24265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("www.google.izzle", it->Domain()); 24275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("A", it->Name()); 24285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(++it == cookies.end()); 24295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCookieListCallback callback(&other_thread_); 24305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Closure task = 24315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&net::MultiThreadedCookieMonsterTest::GetAllCookiesTask, 24325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this), 24335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm, &callback); 24345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunOnOtherThread(task); 24355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(callback.did_run()); 24365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it = callback.cookies().begin(); 24375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(it != callback.cookies().end()); 24385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("www.google.izzle", it->Domain()); 24395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("A", it->Name()); 24405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(++it == callback.cookies().end()); 24415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckGetAllCookiesForURL) { 24445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 2445868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), url_google_, "A=B")); 2446868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CookieList cookies = GetAllCookiesForURL(cm.get(), url_google_); 24475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieList::const_iterator it = cookies.begin(); 24485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(it != cookies.end()); 24495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("www.google.izzle", it->Domain()); 24505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("A", it->Name()); 24515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(++it == cookies.end()); 24525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCookieListCallback callback(&other_thread_); 24535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Closure task = 24545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&net::MultiThreadedCookieMonsterTest::GetAllCookiesForURLTask, 24555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this), 24565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm, url_google_, &callback); 24575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunOnOtherThread(task); 24585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(callback.did_run()); 24595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it = callback.cookies().begin(); 24605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(it != callback.cookies().end()); 24615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("www.google.izzle", it->Domain()); 24625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("A", it->Name()); 24635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(++it == callback.cookies().end()); 24645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckGetAllCookiesForURLWithOpt) { 24675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 2468868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), url_google_, "A=B")); 24695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieOptions options; 24705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieList cookies = 2471868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetAllCookiesForURLWithOptions(cm.get(), url_google_, options); 24725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieList::const_iterator it = cookies.begin(); 24735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(it != cookies.end()); 24745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("www.google.izzle", it->Domain()); 24755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("A", it->Name()); 24765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(++it == cookies.end()); 24775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCookieListCallback callback(&other_thread_); 24785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Closure task = base::Bind( 24795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &net::MultiThreadedCookieMonsterTest::GetAllCookiesForURLWithOptionsTask, 24805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this), 24815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm, url_google_, options, &callback); 24825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunOnOtherThread(task); 24835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(callback.did_run()); 24845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it = callback.cookies().begin(); 24855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(it != callback.cookies().end()); 24865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("www.google.izzle", it->Domain()); 24875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("A", it->Name()); 24885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(++it == callback.cookies().end()); 24895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckSetCookieWithDetails) { 24925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 2493868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookieWithDetails(cm.get(), 2494868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) url_google_foo_, 2495868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "A", 2496868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "B", 2497868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string(), 2498868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "/foo", 2499868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::Time(), 2500868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 2501868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) false, 2502868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) COOKIE_PRIORITY_DEFAULT)); 2503e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ResultSavingCookieCallback<bool> callback(&other_thread_); 25045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Closure task = base::Bind( 25055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &net::MultiThreadedCookieMonsterTest::SetCookieWithDetailsTask, 25065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this), 25075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm, url_google_foo_, &callback); 25085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunOnOtherThread(task); 25095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(callback.did_run()); 25105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(callback.result()); 25115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckDeleteAllCreatedBetween) { 25145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 25155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieOptions options; 25165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time now = Time::Now(); 2517868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookieWithOptions(cm.get(), url_google_, "A=B", options)); 2518868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ( 2519868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1, 2520868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DeleteAllCreatedBetween(cm.get(), now - TimeDelta::FromDays(99), Time())); 2521868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookieWithOptions(cm.get(), url_google_, "A=B", options)); 2522e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ResultSavingCookieCallback<int> callback(&other_thread_); 25235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Closure task = base::Bind( 25245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &net::MultiThreadedCookieMonsterTest::DeleteAllCreatedBetweenTask, 25255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this), 25265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm, now - TimeDelta::FromDays(99), 25275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time(), &callback); 25285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunOnOtherThread(task); 25295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(callback.did_run()); 253090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(1, callback.result()); 25315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckDeleteAllForHost) { 25345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 25355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieOptions options; 2536868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookieWithOptions(cm.get(), url_google_, "A=B", options)); 2537868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(1, DeleteAllForHost(cm.get(), url_google_)); 2538868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookieWithOptions(cm.get(), url_google_, "A=B", options)); 2539e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ResultSavingCookieCallback<int> callback(&other_thread_); 25405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Closure task = base::Bind( 25415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &net::MultiThreadedCookieMonsterTest::DeleteAllForHostTask, 25425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this), 25435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm, url_google_, &callback); 25445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunOnOtherThread(task); 25455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(callback.did_run()); 254690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(1, callback.result()); 25475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25493240926e260ce088908e02ac07a6cf7b0c0cbf44Ben MurdochTEST_F(MultiThreadedCookieMonsterTest, 25503240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch ThreadCheckDeleteAllCreatedBetweenForHost) { 25513240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 25523240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch GURL url_not_google("http://www.notgoogle.com"); 25533240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 25543240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch CookieOptions options; 25553240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch Time now = Time::Now(); 25563240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // ago1 < ago2 < ago3 < now. 25573240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch Time ago1 = now - TimeDelta::FromDays(101); 25583240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch Time ago2 = now - TimeDelta::FromDays(100); 25593240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch Time ago3 = now - TimeDelta::FromDays(99); 25603240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 25613240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // These 3 cookies match the first deletion. 25623240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch EXPECT_TRUE(SetCookieWithOptions(cm.get(), url_google_, "A=B", options)); 25633240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch EXPECT_TRUE(SetCookieWithOptions(cm.get(), url_google_, "C=D", options)); 25643240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch EXPECT_TRUE(SetCookieWithOptions(cm.get(), url_google_, "Y=Z", options)); 25653240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 25663240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // This cookie does not match host. 25673240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch EXPECT_TRUE(SetCookieWithOptions(cm.get(), url_not_google, "E=F", options)); 25683240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 25693240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // This cookie does not match time range: [ago3, inf], for first deletion, but 25703240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // matches for the second deletion. 25713240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch EXPECT_TRUE(cm->SetCookieWithCreationTime(url_google_, "G=H", ago2)); 25723240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 25733240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // 1. First set of deletions. 25743240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch EXPECT_EQ( 25753240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 3, // Deletes A=B, C=D, Y=Z 25763240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch DeleteAllCreatedBetweenForHost( 25773240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch cm.get(), ago3, Time::Max(), url_google_)); 25783240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 25793240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch EXPECT_TRUE(SetCookieWithOptions(cm.get(), url_google_, "A=B", options)); 2580e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ResultSavingCookieCallback<int> callback(&other_thread_); 25813240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 25823240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // 2. Second set of deletions. 25833240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch base::Closure task = base::Bind( 25843240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch &net::MultiThreadedCookieMonsterTest::DeleteAllCreatedBetweenForHostTask, 25853240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch base::Unretained(this), 25863240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch cm, ago1, Time(), url_google_, 25873240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch &callback); 25883240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch RunOnOtherThread(task); 25893240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch EXPECT_TRUE(callback.did_run()); 25903240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch EXPECT_EQ(2, callback.result()); // Deletes A=B, G=H. 25913240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch} 25923240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 25935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckDeleteCanonicalCookie) { 25945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); 25955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieOptions options; 2596868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookieWithOptions(cm.get(), url_google_, "A=B", options)); 2597868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CookieList cookies = GetAllCookies(cm.get()); 25985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieList::iterator it = cookies.begin(); 2599868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(DeleteCanonicalCookie(cm.get(), *it)); 26005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2601868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookieWithOptions(cm.get(), url_google_, "A=B", options)); 2602e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ResultSavingCookieCallback<bool> callback(&other_thread_); 2603868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cookies = GetAllCookies(cm.get()); 26045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it = cookies.begin(); 26055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Closure task = base::Bind( 26065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &net::MultiThreadedCookieMonsterTest::DeleteCanonicalCookieTask, 26075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this), 26085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm, *it, &callback); 26095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunOnOtherThread(task); 26105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(callback.did_run()); 26115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(callback.result()); 26125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 26135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieMonsterTest, InvalidExpiryTime) { 26152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string cookie_line = 26162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string(kValidCookieLine) + "; expires=Blarg arg arg"; 26172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<CanonicalCookie> cookie( 26182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CanonicalCookie::Create(url_google_, cookie_line, Time::Now(), 26192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CookieOptions())); 26205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(cookie->IsPersistent()); 26215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 26225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that CookieMonster writes session cookies into the underlying 26245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CookieStore if the "persist session cookies" option is on. 26255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieMonsterTest, PersistSessionCookies) { 26265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<MockPersistentCookieStore> store( 26275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new MockPersistentCookieStore); 2628868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(store.get(), NULL)); 26295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm->SetPersistSessionCookies(true); 26305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // All cookies set with SetCookie are session cookies. 2632868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), url_google_, "A=B")); 2633868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ("A=B", GetCookies(cm.get(), url_google_)); 26345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The cookie was written to the backing store. 26365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1u, store->commands().size()); 26375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[0].type); 26385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("A", store->commands()[0].cookie.Name()); 26395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("B", store->commands()[0].cookie.Value()); 26405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Modify the cookie. 2642868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), url_google_, "A=C")); 2643868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ("A=C", GetCookies(cm.get(), url_google_)); 26445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3u, store->commands().size()); 26455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[1].type); 26465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("A", store->commands()[1].cookie.Name()); 26475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("B", store->commands()[1].cookie.Value()); 26485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[2].type); 26495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("A", store->commands()[2].cookie.Name()); 26505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("C", store->commands()[2].cookie.Value()); 26515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Delete the cookie. 2653868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DeleteCookie(cm.get(), url_google_, "A"); 2654868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ("", GetCookies(cm.get(), url_google_)); 26555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(4u, store->commands().size()); 26565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[3].type); 26575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("A", store->commands()[3].cookie.Name()); 26585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("C", store->commands()[3].cookie.Value()); 26595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 26605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test the commands sent to the persistent cookie store. 26625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieMonsterTest, PersisentCookieStorageTest) { 26635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<MockPersistentCookieStore> store( 26645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new MockPersistentCookieStore); 2665868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(store.get(), NULL)); 26665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a cookie. 2668868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie( 2669868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cm.get(), url_google_, "A=B; expires=Mon, 18-Apr-22 22:50:13 GMT")); 2670868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) this->MatchCookieLines("A=B", GetCookies(cm.get(), url_google_)); 26715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, store->commands().size()); 26725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[0].type); 26735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove it. 2674868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), url_google_, "A=B; max-age=0")); 2675868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) this->MatchCookieLines(std::string(), GetCookies(cm.get(), url_google_)); 26765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, store->commands().size()); 26775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[1].type); 26785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a cookie. 2680868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie( 2681868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cm.get(), url_google_, "A=B; expires=Mon, 18-Apr-22 22:50:13 GMT")); 2682868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) this->MatchCookieLines("A=B", GetCookies(cm.get(), url_google_)); 26835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(3u, store->commands().size()); 26845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[2].type); 26855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overwrite it. 2686868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie( 2687868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cm.get(), url_google_, "A=Foo; expires=Mon, 18-Apr-22 22:50:14 GMT")); 2688868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) this->MatchCookieLines("A=Foo", GetCookies(cm.get(), url_google_)); 26895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(5u, store->commands().size()); 26905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CookieStoreCommand::REMOVE, store->commands()[3].type); 26915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CookieStoreCommand::ADD, store->commands()[4].type); 26925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create some non-persistent cookies and check that they don't go to the 26945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // persistent storage. 2695868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(SetCookie(cm.get(), url_google_, "B=Bar")); 2696868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) this->MatchCookieLines("A=Foo; B=Bar", GetCookies(cm.get(), url_google_)); 26975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(5u, store->commands().size()); 26985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 26995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 270068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Test to assure that cookies with control characters are purged appropriately. 270168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// See http://crbug.com/238041 for background. 270268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)TEST_F(CookieMonsterTest, ControlCharacterPurge) { 270368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const Time now1(Time::Now()); 270468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const Time now2(Time::Now() + TimeDelta::FromSeconds(1)); 270568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const Time now3(Time::Now() + TimeDelta::FromSeconds(2)); 270668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const Time later(now1 + TimeDelta::FromDays(1)); 270768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const GURL url("http://host/path"); 270868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const std::string domain("host"); 270968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const std::string path("/path"); 271068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 271168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) scoped_refptr<MockPersistentCookieStore> store( 271268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) new MockPersistentCookieStore); 271368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 271468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::vector<CanonicalCookie*> initial_cookies; 271568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 271668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) AddCookieToList(domain, 271768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) "foo=bar; path=" + path, 271868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) now1, 271968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) &initial_cookies); 272068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 272168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // We have to manually build this cookie because it contains a control 272268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // character, and our cookie line parser rejects control characters. 272368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) CanonicalCookie *cc = new CanonicalCookie(url, "baz", "\x05" "boo", domain, 272468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) path, now2, later, now2, false, 272568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) false, COOKIE_PRIORITY_DEFAULT); 272668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) initial_cookies.push_back(cc); 272768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 272868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) AddCookieToList(domain, 272968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) "hello=world; path=" + path, 273068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) now3, 273168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) &initial_cookies); 273268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 273368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Inject our initial cookies into the mock PersistentCookieStore. 273468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) store->SetLoadExpectation(true, initial_cookies); 273568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 273668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) scoped_refptr<CookieMonster> cm(new CookieMonster(store.get(), NULL)); 273768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 273868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ("foo=bar; hello=world", GetCookies(cm.get(), url)); 273968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 274068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 27415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace net 2742