summaryrefslogtreecommitdiffstats
path: root/content/browser/net/quota_policy_cookie_store.h
blob: 4790cc81102a6d7d2fd982779c91cfa445802ed3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
// Copyright 2015 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_BROWSER_NET_QUOTA_POLICY_COOKIE_STORE_H_
#define CONTENT_BROWSER_NET_QUOTA_POLICY_COOKIE_STORE_H_

#include <string>
#include <vector>

#include "base/callback_forward.h"
#include "base/compiler_specific.h"
#include "base/memory/ref_counted.h"
#include "content/common/content_export.h"
#include "net/cookies/cookie_monster.h"
#include "net/extras/sqlite/sqlite_persistent_cookie_store.h"

class Task;

namespace base {
class FilePath;
class SequencedTaskRunner;
}  // namespace base

namespace net {
class CanonicalCookie;
class CookieCryptoDelegate;
}  // namespace net

namespace storage {
class SpecialStoragePolicy;
}  // namespace storage

namespace content {

// Implements a PersistentCookieStore that deletes session cookies on
// shutdown. For documentation about the actual member functions consult the
// parent class |net::CookieMonster::PersistentCookieStore|. If provided, a
// |SpecialStoragePolicy| is consulted when the SQLite database is closed to
// decide which cookies to keep.
class CONTENT_EXPORT QuotaPolicyCookieStore
    : public net::CookieMonster::PersistentCookieStore {
 public:
  // Wraps the passed-in |cookie_store|.
  QuotaPolicyCookieStore(
      const scoped_refptr<net::SQLitePersistentCookieStore>& cookie_store,
      storage::SpecialStoragePolicy* special_storage_policy);

  // net::CookieMonster::PersistentCookieStore:
  void Load(const LoadedCallback& loaded_callback) override;
  void LoadCookiesForKey(const std::string& key,
                         const LoadedCallback& callback) override;
  void AddCookie(const net::CanonicalCookie& cc) override;
  void UpdateCookieAccessTime(const net::CanonicalCookie& cc) override;
  void DeleteCookie(const net::CanonicalCookie& cc) override;
  void SetForceKeepSessionState() override;
  void Flush(const base::Closure& callback) override;

 private:
  typedef std::map<net::SQLitePersistentCookieStore::CookieOrigin, size_t>
      CookiesPerOriginMap;

  ~QuotaPolicyCookieStore() override;

  // Called after cookies are loaded from the database.  Calls |loaded_callback|
  // when done.
  void OnLoad(const LoadedCallback& loaded_callback,
              const std::vector<net::CanonicalCookie*>& cookies);

  // Map of (domain keys(eTLD+1), is secure cookie) to number of cookies in the
  // database.
  CookiesPerOriginMap cookies_per_origin_;

  scoped_refptr<storage::SpecialStoragePolicy> special_storage_policy_;
  scoped_refptr<net::SQLitePersistentCookieStore> persistent_store_;

  DISALLOW_COPY_AND_ASSIGN(QuotaPolicyCookieStore);
};

}  // namespace content

#endif  // CONTENT_BROWSER_NET_QUOTA_POLICY_COOKIE_STORE_H_