1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 // This file contains test infrastructure for multiple files
6 // (current cookie_monster_unittest.cc and cookie_monster_perftest.cc)
7 // that need to test out CookieMonster interactions with the backing store.
8 // It should only be included by test code.
10 #ifndef NET_COOKIES_COOKIE_MONSTER_STORE_TEST_H_
11 #define NET_COOKIES_COOKIE_MONSTER_STORE_TEST_H_
17 #include "net/cookies/canonical_cookie.h"
18 #include "net/cookies/cookie_monster.h"
26 // Wrapper class for posting a loaded callback. Since the Callback class is not
27 // reference counted, we cannot post a callback to the message loop directly,
28 // instead we post a LoadedCallbackTask.
29 class LoadedCallbackTask
30 : public base::RefCountedThreadSafe
<LoadedCallbackTask
> {
32 typedef CookieMonster::PersistentCookieStore::LoadedCallback LoadedCallback
;
34 LoadedCallbackTask(LoadedCallback loaded_callback
,
35 std::vector
<CanonicalCookie
*> cookies
);
38 loaded_callback_
.Run(cookies_
);
42 friend class base::RefCountedThreadSafe
<LoadedCallbackTask
>;
43 ~LoadedCallbackTask();
45 LoadedCallback loaded_callback_
;
46 std::vector
<CanonicalCookie
*> cookies_
;
48 DISALLOW_COPY_AND_ASSIGN(LoadedCallbackTask
);
49 }; // Wrapper class LoadedCallbackTask
51 // Describes a call to one of the 3 functions of PersistentCookieStore.
52 struct CookieStoreCommand
{
59 CookieStoreCommand(Type type
, const CanonicalCookie
& cookie
)
64 CanonicalCookie cookie
;
67 // Implementation of PersistentCookieStore that captures the
68 // received commands and saves them to a list.
69 // The result of calls to Load() can be configured using SetLoadExpectation().
70 class MockPersistentCookieStore
71 : public CookieMonster::PersistentCookieStore
{
73 typedef std::vector
<CookieStoreCommand
> CommandList
;
75 MockPersistentCookieStore();
77 void SetLoadExpectation(
79 const std::vector
<CanonicalCookie
*>& result
);
81 const CommandList
& commands() const {
85 virtual void Load(const LoadedCallback
& loaded_callback
) OVERRIDE
;
87 virtual void LoadCookiesForKey(const std::string
& key
,
88 const LoadedCallback
& loaded_callback
) OVERRIDE
;
90 virtual void AddCookie(const CanonicalCookie
& cookie
) OVERRIDE
;
92 virtual void UpdateCookieAccessTime(
93 const CanonicalCookie
& cookie
) OVERRIDE
;
95 virtual void DeleteCookie(
96 const CanonicalCookie
& cookie
) OVERRIDE
;
98 virtual void Flush(const base::Closure
& callback
) OVERRIDE
;
100 virtual void SetForceKeepSessionState() OVERRIDE
;
103 virtual ~MockPersistentCookieStore();
106 CommandList commands_
;
108 // Deferred result to use when Load() is called.
109 bool load_return_value_
;
110 std::vector
<CanonicalCookie
*> load_result_
;
111 // Indicates if the store has been fully loaded to avoid returning duplicate
115 DISALLOW_COPY_AND_ASSIGN(MockPersistentCookieStore
);
118 // Mock for CookieMonsterDelegate
119 class MockCookieMonsterDelegate
: public CookieMonsterDelegate
{
121 typedef std::pair
<CanonicalCookie
, bool>
124 MockCookieMonsterDelegate();
126 const std::vector
<CookieNotification
>& changes() const { return changes_
; }
128 void reset() { changes_
.clear(); }
130 virtual void OnCookieChanged(
131 const CanonicalCookie
& cookie
,
133 CookieMonsterDelegate::ChangeCause cause
) OVERRIDE
;
135 virtual void OnLoaded() OVERRIDE
;
138 virtual ~MockCookieMonsterDelegate();
140 std::vector
<CookieNotification
> changes_
;
142 DISALLOW_COPY_AND_ASSIGN(MockCookieMonsterDelegate
);
145 // Helper to build a single CanonicalCookie.
146 CanonicalCookie
BuildCanonicalCookie(const std::string
& key
,
147 const std::string
& cookie_line
,
148 const base::Time
& creation_time
);
150 // Helper to build a list of CanonicalCookie*s.
151 void AddCookieToList(
152 const std::string
& key
,
153 const std::string
& cookie_line
,
154 const base::Time
& creation_time
,
155 std::vector
<CanonicalCookie
*>* out_list
);
157 // Just act like a backing database. Keep cookie information from
158 // Add/Update/Delete and regurgitate it when Load is called.
159 class MockSimplePersistentCookieStore
160 : public CookieMonster::PersistentCookieStore
{
162 MockSimplePersistentCookieStore();
164 virtual void Load(const LoadedCallback
& loaded_callback
) OVERRIDE
;
166 virtual void LoadCookiesForKey(const std::string
& key
,
167 const LoadedCallback
& loaded_callback
) OVERRIDE
;
169 virtual void AddCookie(const CanonicalCookie
& cookie
) OVERRIDE
;
171 virtual void UpdateCookieAccessTime(const CanonicalCookie
& cookie
) OVERRIDE
;
173 virtual void DeleteCookie(const CanonicalCookie
& cookie
) OVERRIDE
;
175 virtual void Flush(const base::Closure
& callback
) OVERRIDE
;
177 virtual void SetForceKeepSessionState() OVERRIDE
;
180 virtual ~MockSimplePersistentCookieStore();
183 typedef std::map
<int64
, CanonicalCookie
> CanonicalCookieMap
;
185 CanonicalCookieMap cookies_
;
187 // Indicates if the store has been fully loaded to avoid return duplicate
188 // cookies in subsequent load requests
192 // Helper function for creating a CookieMonster backed by a
193 // MockSimplePersistentCookieStore for garbage collection testing.
195 // Fill the store through import with |num_cookies| cookies, |num_old_cookies|
196 // with access time Now()-days_old, the rest with access time Now().
197 // Do two SetCookies(). Return whether each of the two SetCookies() took
198 // longer than |gc_perf_micros| to complete, and how many cookie were
199 // left in the store afterwards.
200 CookieMonster
* CreateMonsterFromStoreForGC(
207 #endif // NET_COOKIES_COOKIE_MONSTER_STORE_TEST_H_