1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be
3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file.
4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Brought to you by number 42.
6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifndef NET_BASE_COOKIE_STORE_H_
8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define NET_BASE_COOKIE_STORE_H_
93345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include <string>
123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include <vector>
13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/basictypes.h"
15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/ref_counted.h"
16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/time.h"
17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "net/base/cookie_options.h"
182557749644f9d25af9721533322db19197c49b49Kristian Monsen#include "net/base/net_export.h"
19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass GURL;
21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace net {
23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass CookieMonster;
25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// An interface for storing and retrieving cookies. Implementations need to
27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// be thread safe as its methods can be accessed from IO as well as UI threads.
282557749644f9d25af9721533322db19197c49b49Kristian Monsenclass NET_EXPORT CookieStore : public base::RefCountedThreadSafe<CookieStore> {
29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public:
30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Sets a single cookie.  Expects a cookie line, like "a=1; domain=b.com".
31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  virtual bool SetCookieWithOptions(const GURL& url,
32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                    const std::string& cookie_line,
33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                    const CookieOptions& options) = 0;
34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // TODO what if the total size of all the cookies >4k, can we have a header
36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // that big or do we need multiple Cookie: headers?
37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Simple interface, gets a cookie string "a=b; c=d" for the given URL.
38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Use options to access httponly cookies.
39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  virtual std::string GetCookiesWithOptions(const GURL& url,
40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                            const CookieOptions& options) = 0;
41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Deletes the passed in cookie for the specified URL.
43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  virtual void DeleteCookie(const GURL& url,
44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                            const std::string& cookie_name) = 0;
45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Returns the underlying CookieMonster.
47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  virtual CookieMonster* GetCookieMonster() = 0;
48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // --------------------------------------------------------------------------
51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Helpers to make the above interface simpler for some cases.
52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Sets a cookie for the given URL using default options.
54731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  bool SetCookie(const GURL& url, const std::string& cookie_line);
55c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
56c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Gets cookies for the given URL using default options.
57731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  std::string GetCookies(const GURL& url);
58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
59c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Sets a vector of response cookie values for the same URL.
60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  void SetCookiesWithOptions(const GURL& url,
61c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                             const std::vector<std::string>& cookie_lines,
62731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                             const CookieOptions& options);
63c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  void SetCookies(const GURL& url,
64731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                  const std::vector<std::string>& cookie_lines);
65c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
66c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott protected:
67c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  friend class base::RefCountedThreadSafe<CookieStore>;
68731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  CookieStore();
69731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  virtual ~CookieStore();
70c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott};
71c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
72c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}  // namespace net
73c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
74c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif  // NET_BASE_COOKIE_STORE_H_
75