cookie_store_factory.h revision 03b57e008b61dfcb1fbad3aea950ae0e001748b0
1// Copyright (c) 2013 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.
4
5#ifndef CONTENT_PUBLIC_BROWSER_COOKIE_STORE_FACTORY_H_
6#define CONTENT_PUBLIC_BROWSER_COOKIE_STORE_FACTORY_H_
7
8#include "base/files/file_path.h"
9#include "base/memory/ref_counted.h"
10#include "content/common/content_export.h"
11
12namespace base {
13class SequencedTaskRunner;
14}
15
16namespace net {
17class CookieMonsterDelegate;
18class CookieStore;
19}
20
21namespace storage {
22class SpecialStoragePolicy;
23}
24
25namespace content {
26class CookieCryptoDelegate;
27
28struct CONTENT_EXPORT CookieStoreConfig {
29  // Specifies how session cookies are persisted in the backing data store.
30  //
31  // EPHEMERAL_SESSION_COOKIES specifies session cookies will not be written
32  // out in a manner that allows for restoration.
33  //
34  // PERSISTANT_SESSION_COOKIES specifies that session cookies are not restored
35  // when the cookie store is opened, however they will be written in a manner
36  // that allows for them to be restored if the cookie store is opened again
37  // using RESTORED_SESSION_COOKIES.
38  //
39  // RESTORED_SESSION_COOKIES is the: same as PERSISTANT_SESSION_COOKIES
40  // except when the cookie store is opened, the previously written session
41  // cookies are loaded first.
42  enum SessionCookieMode {
43    EPHEMERAL_SESSION_COOKIES,
44    PERSISTANT_SESSION_COOKIES,
45    RESTORED_SESSION_COOKIES
46  };
47
48  // Convenience constructor for an in-memory cookie store with no delegate.
49  CookieStoreConfig();
50
51  // If |path| is empty, then this specifies an in-memory cookie store.
52  // With in-memory cookie stores, |session_cookie_mode| must be
53  // EPHEMERAL_SESSION_COOKIES.
54  //
55  // Note: If |crypto_delegate| is non-NULL, it must outlive any CookieStores
56  // created using this config.
57  CookieStoreConfig(const base::FilePath& path,
58                    SessionCookieMode session_cookie_mode,
59                    storage::SpecialStoragePolicy* storage_policy,
60                    net::CookieMonsterDelegate* cookie_delegate);
61  ~CookieStoreConfig();
62
63  const base::FilePath path;
64  const SessionCookieMode session_cookie_mode;
65  const scoped_refptr<storage::SpecialStoragePolicy> storage_policy;
66  const scoped_refptr<net::CookieMonsterDelegate> cookie_delegate;
67
68  // The following are infrequently used cookie store parameters.
69  // Rather than clutter the constructor API, these are assigned a default
70  // value on CookieStoreConfig construction. Clients should then override
71  // them as necessary.
72
73  // Used to provide encryption hooks for the cookie store. The
74  // CookieCryptoDelegate must outlive any cookie store created with this
75  // config.
76  content::CookieCryptoDelegate* crypto_delegate;
77
78  // Callbacks for data load events will be performed on |client_task_runner|.
79  // If NULL, uses the task runner for BrowserThread::IO.
80  //
81  // Only used for persistent cookie stores.
82  scoped_refptr<base::SequencedTaskRunner> client_task_runner;
83
84  // All blocking database accesses will be performed on
85  // |background_task_runner|.  If NULL, uses a SequencedTaskRunner from the
86  // BrowserThread blocking pool.
87  //
88  // Only used for persistent cookie stores.
89  scoped_refptr<base::SequencedTaskRunner> background_task_runner;
90};
91
92CONTENT_EXPORT net::CookieStore* CreateCookieStore(
93    const CookieStoreConfig& config);
94
95}  // namespace content
96
97#endif  // CONTENT_PUBLIC_BROWSER_COOKIE_STORE_FACTORY_H_
98