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"
89ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h"
95e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/stringprintf.h"
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h"
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/cookies/cookie_constants.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/cookie_util.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/parsed_cookie.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.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)  }
4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  base::MessageLoop::current()->PostTask(
4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      FROM_HERE,
4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      base::Bind(&LoadedCallbackTask::Run,
4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                 new LoadedCallbackTask(loaded_callback, out_cookies)));
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockPersistentCookieStore::LoadCookiesForKey(
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& key,
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const LoadedCallback& loaded_callback) {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!loaded_) {
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Load(loaded_callback);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    base::MessageLoop::current()->PostTask(
5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        FROM_HERE,
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::Bind(&LoadedCallbackTask::Run,
5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                   new LoadedCallbackTask(loaded_callback,
6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                          std::vector<CanonicalCookie*>())));
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockPersistentCookieStore::AddCookie(const CanonicalCookie& cookie) {
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  commands_.push_back(
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      CookieStoreCommand(CookieStoreCommand::ADD, cookie));
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockPersistentCookieStore::UpdateCookieAccessTime(
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const CanonicalCookie& cookie) {
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  commands_.push_back(CookieStoreCommand(
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      CookieStoreCommand::UPDATE_ACCESS_TIME, cookie));
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockPersistentCookieStore::DeleteCookie(const CanonicalCookie& cookie) {
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  commands_.push_back(
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      CookieStoreCommand(CookieStoreCommand::REMOVE, cookie));
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockPersistentCookieStore::Flush(const base::Closure& callback) {
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!callback.is_null())
8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    base::MessageLoop::current()->PostTask(FROM_HERE, callback);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockPersistentCookieStore::SetForceKeepSessionState() {
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockPersistentCookieStore::~MockPersistentCookieStore() {}
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockCookieMonsterDelegate::MockCookieMonsterDelegate() {}
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockCookieMonsterDelegate::OnCookieChanged(
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const CanonicalCookie& cookie,
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool removed,
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CookieMonster::Delegate::ChangeCause cause) {
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CookieNotification notification(cookie, removed);
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  changes_.push_back(notification);
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void MockCookieMonsterDelegate::OnLoaded() {}
101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockCookieMonsterDelegate::~MockCookieMonsterDelegate() {}
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CanonicalCookie BuildCanonicalCookie(const std::string& key,
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     const std::string& cookie_line,
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     const base::Time& creation_time) {
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Parse the cookie line.
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ParsedCookie pc(cookie_line);
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(pc.IsValid());
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This helper is simplistic in interpreting a parsed cookie, in order to
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // avoid duplicated CookieMonster's CanonPath() and CanonExpiration()
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // functions. Would be nice to export them, and re-use here.
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(pc.HasMaxAge());
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(pc.HasPath());
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time cookie_expires = pc.HasExpires() ?
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      cookie_util::ParseCookieTime(pc.Expires()) : base::Time();
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string cookie_path = pc.Path();
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return CanonicalCookie(
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL(), pc.Name(), pc.Value(), key, cookie_path,
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      creation_time, cookie_expires, creation_time,
124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      pc.IsSecure(), pc.IsHttpOnly(), pc.Priority());
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AddCookieToList(
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& key,
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& cookie_line,
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const base::Time& creation_time,
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::vector<CanonicalCookie*>* out_list) {
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<CanonicalCookie> cookie(
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new CanonicalCookie(
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          BuildCanonicalCookie(key, cookie_line, creation_time)));
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  out_list->push_back(cookie.release());
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockSimplePersistentCookieStore::MockSimplePersistentCookieStore()
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : loaded_(false) {
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockSimplePersistentCookieStore::Load(
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const LoadedCallback& loaded_callback) {
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<CanonicalCookie*> out_cookies;
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (CanonicalCookieMap::const_iterator it = cookies_.begin();
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       it != cookies_.end(); it++)
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    out_cookies.push_back(new CanonicalCookie(it->second));
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  base::MessageLoop::current()->PostTask(
15290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      FROM_HERE,
15390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      base::Bind(&LoadedCallbackTask::Run,
15490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                 new LoadedCallbackTask(loaded_callback, out_cookies)));
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  loaded_ = true;
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockSimplePersistentCookieStore::LoadCookiesForKey(const std::string& key,
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const LoadedCallback& loaded_callback) {
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!loaded_) {
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Load(loaded_callback);
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
16390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    base::MessageLoop::current()->PostTask(
16490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        FROM_HERE,
16590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        base::Bind(&LoadedCallbackTask::Run,
16690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                   new LoadedCallbackTask(loaded_callback,
16790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                          std::vector<CanonicalCookie*>())));
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockSimplePersistentCookieStore::AddCookie(const CanonicalCookie& cookie) {
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int64 creation_time = cookie.CreationDate().ToInternalValue();
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(cookies_.find(creation_time) == cookies_.end());
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cookies_[creation_time] = cookie;
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockSimplePersistentCookieStore::UpdateCookieAccessTime(
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const CanonicalCookie& cookie) {
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int64 creation_time = cookie.CreationDate().ToInternalValue();
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(cookies_.find(creation_time) != cookies_.end());
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cookies_[creation_time].SetLastAccessDate(base::Time::Now());
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockSimplePersistentCookieStore::DeleteCookie(
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const CanonicalCookie& cookie) {
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int64 creation_time = cookie.CreationDate().ToInternalValue();
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CanonicalCookieMap::iterator it = cookies_.find(creation_time);
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(it != cookies_.end());
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cookies_.erase(it);
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockSimplePersistentCookieStore::Flush(const base::Closure& callback) {
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!callback.is_null())
19490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    base::MessageLoop::current()->PostTask(FROM_HERE, callback);
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockSimplePersistentCookieStore::SetForceKeepSessionState() {
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CookieMonster* CreateMonsterFromStoreForGC(
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int num_cookies,
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int num_old_cookies,
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int days_old) {
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time current(base::Time::Now());
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time past_creation(base::Time::Now() - base::TimeDelta::FromDays(1000));
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<MockSimplePersistentCookieStore> store(
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new MockSimplePersistentCookieStore);
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Must expire to be persistent
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < num_cookies; i++) {
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::Time creation_time =
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        past_creation + base::TimeDelta::FromMicroseconds(i);
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::Time expiration_time = current + base::TimeDelta::FromDays(30);
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::Time last_access_time =
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        (i < num_old_cookies) ? current - base::TimeDelta::FromDays(days_old) :
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                current;
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CanonicalCookie cc(
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GURL(), "a", "1", base::StringPrintf("h%05d.izzle", i), "/path",
219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        creation_time, expiration_time, last_access_time, false, false,
220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        COOKIE_PRIORITY_DEFAULT);
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    store->AddCookie(cc);
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
224868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  return new CookieMonster(store.get(), NULL);
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockSimplePersistentCookieStore::~MockSimplePersistentCookieStore() {}
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace net
230