cookie_monster_store_test.cc revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
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_monster_store_test.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/message_loop.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/stringprintf.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/time.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "googleurl/src/gurl.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/cookies/cookie_constants.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/cookie_util.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/parsed_cookie.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)LoadedCallbackTask::LoadedCallbackTask(LoadedCallback loaded_callback, 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<CanonicalCookie*> cookies) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : loaded_callback_(loaded_callback), 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookies_(cookies) { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)LoadedCallbackTask::~LoadedCallbackTask() {} 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockPersistentCookieStore::MockPersistentCookieStore() 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : load_return_value_(true), 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loaded_(false) { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockPersistentCookieStore::SetLoadExpectation( 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool return_value, 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<CanonicalCookie*>& result) { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_return_value_ = return_value; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_result_ = result; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockPersistentCookieStore::Load(const LoadedCallback& loaded_callback) { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<CanonicalCookie*> out_cookies; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (load_return_value_) { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) out_cookies = load_result_; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loaded_ = true; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageLoop::current()->PostTask(FROM_HERE, 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&LoadedCallbackTask::Run, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new LoadedCallbackTask(loaded_callback, out_cookies))); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockPersistentCookieStore::LoadCookiesForKey( 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& key, 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const LoadedCallback& loaded_callback) { 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!loaded_) { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Load(loaded_callback); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageLoop::current()->PostTask(FROM_HERE, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&LoadedCallbackTask::Run, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new LoadedCallbackTask(loaded_callback, 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<CanonicalCookie*>()))); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockPersistentCookieStore::AddCookie(const CanonicalCookie& cookie) { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) commands_.push_back( 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieStoreCommand(CookieStoreCommand::ADD, cookie)); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockPersistentCookieStore::UpdateCookieAccessTime( 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CanonicalCookie& cookie) { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) commands_.push_back(CookieStoreCommand( 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieStoreCommand::UPDATE_ACCESS_TIME, cookie)); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockPersistentCookieStore::DeleteCookie(const CanonicalCookie& cookie) { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) commands_.push_back( 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieStoreCommand(CookieStoreCommand::REMOVE, cookie)); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockPersistentCookieStore::Flush(const base::Closure& callback) { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!callback.is_null()) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageLoop::current()->PostTask(FROM_HERE, callback); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockPersistentCookieStore::SetForceKeepSessionState() { 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockPersistentCookieStore::~MockPersistentCookieStore() {} 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockCookieMonsterDelegate::MockCookieMonsterDelegate() {} 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockCookieMonsterDelegate::OnCookieChanged( 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CanonicalCookie& cookie, 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool removed, 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieMonster::Delegate::ChangeCause cause) { 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieNotification notification(cookie, removed); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes_.push_back(notification); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockCookieMonsterDelegate::~MockCookieMonsterDelegate() {} 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CanonicalCookie BuildCanonicalCookie(const std::string& key, 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& cookie_line, 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& creation_time) { 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Parse the cookie line. 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParsedCookie pc(cookie_line); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pc.IsValid()); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This helper is simplistic in interpreting a parsed cookie, in order to 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // avoid duplicated CookieMonster's CanonPath() and CanonExpiration() 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // functions. Would be nice to export them, and re-use here. 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(pc.HasMaxAge()); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pc.HasPath()); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time cookie_expires = pc.HasExpires() ? 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_util::ParseCookieTime(pc.Expires()) : base::Time(); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string cookie_path = pc.Path(); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return CanonicalCookie( 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(), pc.Name(), pc.Value(), key, cookie_path, 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) creation_time, cookie_expires, creation_time, 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pc.IsSecure(), pc.IsHttpOnly(), pc.Priority()); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AddCookieToList( 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& key, 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& cookie_line, 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& creation_time, 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<CanonicalCookie*>* out_list) { 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<CanonicalCookie> cookie( 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new CanonicalCookie( 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BuildCanonicalCookie(key, cookie_line, creation_time))); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) out_list->push_back(cookie.release()); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockSimplePersistentCookieStore::MockSimplePersistentCookieStore() 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : loaded_(false) { 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockSimplePersistentCookieStore::Load( 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const LoadedCallback& loaded_callback) { 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<CanonicalCookie*> out_cookies; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (CanonicalCookieMap::const_iterator it = cookies_.begin(); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != cookies_.end(); it++) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) out_cookies.push_back(new CanonicalCookie(it->second)); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageLoop::current()->PostTask(FROM_HERE, 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&LoadedCallbackTask::Run, 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new LoadedCallbackTask(loaded_callback, out_cookies))); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loaded_ = true; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockSimplePersistentCookieStore::LoadCookiesForKey(const std::string& key, 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const LoadedCallback& loaded_callback) { 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!loaded_) { 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Load(loaded_callback); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageLoop::current()->PostTask(FROM_HERE, 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&LoadedCallbackTask::Run, 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new LoadedCallbackTask(loaded_callback, 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<CanonicalCookie*>()))); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockSimplePersistentCookieStore::AddCookie(const CanonicalCookie& cookie) { 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 creation_time = cookie.CreationDate().ToInternalValue(); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookies_.find(creation_time) == cookies_.end()); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookies_[creation_time] = cookie; 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockSimplePersistentCookieStore::UpdateCookieAccessTime( 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CanonicalCookie& cookie) { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 creation_time = cookie.CreationDate().ToInternalValue(); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(cookies_.find(creation_time) != cookies_.end()); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookies_[creation_time].SetLastAccessDate(base::Time::Now()); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockSimplePersistentCookieStore::DeleteCookie( 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CanonicalCookie& cookie) { 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 creation_time = cookie.CreationDate().ToInternalValue(); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CanonicalCookieMap::iterator it = cookies_.find(creation_time); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(it != cookies_.end()); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookies_.erase(it); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockSimplePersistentCookieStore::Flush(const base::Closure& callback) { 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!callback.is_null()) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageLoop::current()->PostTask(FROM_HERE, callback); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockSimplePersistentCookieStore::SetForceKeepSessionState() { 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CookieMonster* CreateMonsterFromStoreForGC( 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int num_cookies, 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int num_old_cookies, 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int days_old) { 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time current(base::Time::Now()); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time past_creation(base::Time::Now() - base::TimeDelta::FromDays(1000)); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<MockSimplePersistentCookieStore> store( 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new MockSimplePersistentCookieStore); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Must expire to be persistent 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < num_cookies; i++) { 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time creation_time = 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) past_creation + base::TimeDelta::FromMicroseconds(i); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time expiration_time = current + base::TimeDelta::FromDays(30); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time last_access_time = 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (i < num_old_cookies) ? current - base::TimeDelta::FromDays(days_old) : 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) current; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CanonicalCookie cc( 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(), "a", "1", base::StringPrintf("h%05d.izzle", i), "/path", 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) creation_time, expiration_time, last_access_time, false, false, 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) COOKIE_PRIORITY_DEFAULT); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) store->AddCookie(cc); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new CookieMonster(store, NULL); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockSimplePersistentCookieStore::~MockSimplePersistentCookieStore() {} 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace net 224