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