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