Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / content / public / browser / cookie_store_factory.h
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
12 namespace base {
13 class SequencedTaskRunner;
14 }
15
16 namespace net {
17 class CookieMonsterDelegate;
18 class CookieStore;
19 }
20
21 namespace storage {
22 class SpecialStoragePolicy;
23 }
24
25 namespace content {
26 class CookieCryptoDelegate;
27
28 struct 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
92 CONTENT_EXPORT net::CookieStore* CreateCookieStore(
93     const CookieStoreConfig& config);
94
95 }  // namespace content
96
97 #endif  // CONTENT_PUBLIC_BROWSER_COOKIE_STORE_FACTORY_H_