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)// A sqlite implementation of a cookie monster persistent store.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#ifndef CONTENT_BROWSER_NET_SQLITE_PERSISTENT_COOKIE_STORE_H_
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define CONTENT_BROWSER_NET_SQLITE_PERSISTENT_COOKIE_STORE_H_
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback_forward.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h"
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/common/content_export.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/cookie_monster.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Task;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base {
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FilePath;
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SequencedTaskRunner;
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CanonicalCookie;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace storage {
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class SpecialStoragePolicy;
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace content {
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class CookieCryptoDelegate;
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Implements the PersistentCookieStore interface in terms of a SQLite database.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// For documentation about the actual member functions consult the documentation
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// of the parent class |net::CookieMonster::PersistentCookieStore|.
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// If provided, a |SpecialStoragePolicy| is consulted when the SQLite database
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// is closed to decide which cookies to keep.
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class CONTENT_EXPORT SQLitePersistentCookieStore
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public net::CookieMonster::PersistentCookieStore {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // All blocking database accesses will be performed on
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |background_task_runner|, while |client_task_runner| is used to invoke
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // callbacks.
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SQLitePersistentCookieStore(
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const base::FilePath& path,
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const scoped_refptr<base::SequencedTaskRunner>& client_task_runner,
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const scoped_refptr<base::SequencedTaskRunner>& background_task_runner,
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      bool restore_old_session_cookies,
5303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      storage::SpecialStoragePolicy* special_storage_policy,
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      CookieCryptoDelegate* crypto_delegate);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // net::CookieMonster::PersistentCookieStore:
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Load(const LoadedCallback& loaded_callback) OVERRIDE;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void LoadCookiesForKey(const std::string& key,
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const LoadedCallback& callback) OVERRIDE;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void AddCookie(const net::CanonicalCookie& cc) OVERRIDE;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdateCookieAccessTime(const net::CanonicalCookie& cc) OVERRIDE;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DeleteCookie(const net::CanonicalCookie& cc) OVERRIDE;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetForceKeepSessionState() OVERRIDE;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Flush(const base::Closure& callback) OVERRIDE;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   virtual ~SQLitePersistentCookieStore();
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  class Backend;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<Backend> backend_;
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(SQLitePersistentCookieStore);
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace content
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif  // CONTENT_BROWSER_NET_SQLITE_PERSISTENT_COOKIE_STORE_H_
80