blob: ec2243fcb1041a13008dbdeae7baeeea5ee30c6e [file] [log] [blame]
// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_PUBLIC_BROWSER_COOKIE_STORE_FACTORY_H_
#define CONTENT_PUBLIC_BROWSER_COOKIE_STORE_FACTORY_H_
#include "base/files/file_path.h"
#include "base/memory/ref_counted.h"
#include "content/common/content_export.h"
namespace base {
class SequencedTaskRunner;
}
namespace net {
class CookieMonsterDelegate;
class CookieStore;
}
namespace quota {
class SpecialStoragePolicy;
}
namespace content {
class CookieCryptoDelegate;
struct CONTENT_EXPORT CookieStoreConfig {
// Specifies how session cookies are persisted in the backing data store.
//
// EPHEMERAL_SESSION_COOKIES specifies session cookies will not be written
// out in a manner that allows for restoration.
//
// PERSISTANT_SESSION_COOKIES specifies that session cookies are not restored
// when the cookie store is opened, however they will be written in a manner
// that allows for them to be restored if the cookie store is opened again
// using RESTORED_SESSION_COOKIES.
//
// RESTORED_SESSION_COOKIES is the: same as PERSISTANT_SESSION_COOKIES
// except when the cookie store is opened, the previously written session
// cookies are loaded first.
enum SessionCookieMode {
EPHEMERAL_SESSION_COOKIES,
PERSISTANT_SESSION_COOKIES,
RESTORED_SESSION_COOKIES
};
// Convenience constructor for an in-memory cookie store with no delegate.
CookieStoreConfig();
// If |path| is empty, then this specifies an in-memory cookie store.
// With in-memory cookie stores, |session_cookie_mode| must be
// EPHEMERAL_SESSION_COOKIES.
//
// Note: If |crypto_delegate| is non-NULL, it must outlive any CookieStores
// created using this config.
CookieStoreConfig(const base::FilePath& path,
SessionCookieMode session_cookie_mode,
quota::SpecialStoragePolicy* storage_policy,
net::CookieMonsterDelegate* cookie_delegate);
~CookieStoreConfig();
const base::FilePath path;
const SessionCookieMode session_cookie_mode;
const scoped_refptr<quota::SpecialStoragePolicy> storage_policy;
const scoped_refptr<net::CookieMonsterDelegate> cookie_delegate;
// The following are infrequently used cookie store parameters.
// Rather than clutter the constructor API, these are assigned a default
// value on CookieStoreConfig construction. Clients should then override
// them as necessary.
// Used to provide encryption hooks for the cookie store. The
// CookieCryptoDelegate must outlive any cookie store created with this
// config.
content::CookieCryptoDelegate* crypto_delegate;
// Callbacks for data load events will be performed on |client_task_runner|.
// If NULL, uses the task runner for BrowserThread::IO.
//
// Only used for persistent cookie stores.
scoped_refptr<base::SequencedTaskRunner> client_task_runner;
// All blocking database accesses will be performed on
// |background_task_runner|. If NULL, uses a SequencedTaskRunner from the
// BrowserThread blocking pool.
//
// Only used for persistent cookie stores.
scoped_refptr<base::SequencedTaskRunner> background_task_runner;
};
CONTENT_EXPORT net::CookieStore* CreateCookieStore(
const CookieStoreConfig& config);
} // namespace content
#endif // CONTENT_PUBLIC_BROWSER_COOKIE_STORE_FACTORY_H_