Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / chrome / browser / extensions / api / cookies / cookies_helpers.h
blob86dd5d90a73649ed417ab5a74025c887df888acb
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 // Defines common functionality used by the implementation of the Chrome
6 // Extensions Cookies API implemented in
7 // chrome/browser/extensions/api/cookies/cookies_api.cc. This separate interface
8 // exposes pieces of the API implementation mainly for unit testing purposes.
10 #ifndef CHROME_BROWSER_EXTENSIONS_API_COOKIES_COOKIES_HELPERS_H_
11 #define CHROME_BROWSER_EXTENSIONS_API_COOKIES_COOKIES_HELPERS_H_
13 #include <string>
14 #include <vector>
16 #include "base/memory/linked_ptr.h"
17 #include "base/memory/scoped_ptr.h"
18 #include "chrome/common/extensions/api/cookies.h"
19 #include "net/cookies/cookie_monster.h"
20 #include "net/cookies/canonical_cookie.h"
22 class Browser;
23 class Profile;
25 namespace base {
26 class DictionaryValue;
27 class ListValue;
30 namespace net {
31 class CanonicalCookie;
34 namespace extensions {
36 class Extension;
38 namespace cookies_helpers {
40 typedef std::vector<linked_ptr<extensions::api::cookies::Cookie> >
41 LinkedCookieVec;
43 // Returns either the original profile or the incognito profile, based on the
44 // given store ID. Returns NULL if the profile doesn't exist or is not allowed
45 // (e.g. if incognito mode is not enabled for the extension).
46 Profile* ChooseProfileFromStoreId(const std::string& store_id,
47 Profile* profile,
48 bool include_incognito);
50 // Returns the store ID for a particular user profile.
51 const char* GetStoreIdFromProfile(Profile* profile);
53 // Allocates and construct a new Cookie object representing a cookie as defined
54 // by the cookies API.
55 scoped_ptr<extensions::api::cookies::Cookie> CreateCookie(
56 const net::CanonicalCookie& cookie,
57 const std::string& store_id);
59 // Allocates and constructs a new CookieStore object as defined by the cookies
60 // API.
61 scoped_ptr<extensions::api::cookies::CookieStore> CreateCookieStore(
62 Profile* profile,
63 base::ListValue* tab_ids);
65 // Retrieves all cookies from the given cookie store corresponding to the given
66 // URL. If the URL is empty, all cookies in the cookie store are retrieved.
67 // This can only be called on the IO thread.
68 void GetCookieListFromStore(
69 net::CookieStore* cookie_store, const GURL& url,
70 const net::CookieMonster::GetCookieListCallback& callback);
72 // Constructs a URL from a cookie's information for use in checking
73 // a cookie against the extension's host permissions. The Secure
74 // property of the cookie defines the URL scheme, and the cookie's
75 // domain becomes the URL host.
76 GURL GetURLFromCanonicalCookie(
77 const net::CanonicalCookie& cookie);
79 // Looks through all cookies in the given cookie store, and appends to the
80 // match vector all the cookies that both match the given URL and cookie details
81 // and are allowed by extension host permissions.
82 void AppendMatchingCookiesToVector(
83 const net::CookieList& all_cookies, const GURL& url,
84 const extensions::api::cookies::GetAll::Params::Details* details,
85 const Extension* extension, LinkedCookieVec* match_vector);
87 // Appends the IDs of all tabs belonging to the given browser to the
88 // given list.
89 void AppendToTabIdList(Browser* browser, base::ListValue* tab_ids);
91 // A class representing the cookie filter parameters passed into
92 // cookies.getAll().
93 // This class is essentially a convenience wrapper for the details dictionary
94 // passed into the cookies.getAll() API by the user. If the dictionary contains
95 // no filter parameters, the MatchFilter will always trivially
96 // match all cookies.
97 class MatchFilter {
98 public:
99 // Takes the details dictionary argument given by the user as input.
100 // This class does not take ownership of the lifetime of the Details
101 // object.
102 explicit MatchFilter(
103 const extensions::api::cookies::GetAll::Params::Details* details);
105 // Returns true if the given cookie matches the properties in the match
106 // filter.
107 bool MatchesCookie(const net::CanonicalCookie& cookie);
109 private:
110 // Returns true if the given cookie domain string matches the filter's
111 // domain. Any cookie domain which is equal to or is a subdomain of the
112 // filter's domain will be matched; leading '.' characters indicating
113 // host-only domains have no meaning in the match filter domain (for
114 // instance, a match filter domain of 'foo.bar.com' will be treated the same
115 // as '.foo.bar.com', and both will match cookies with domain values of
116 // 'foo.bar.com', '.foo.bar.com', and 'baz.foo.bar.com'.
117 bool MatchesDomain(const std::string& domain);
119 const extensions::api::cookies::GetAll::Params::Details* details_;
122 } // namespace cookies_helpers
123 } // namespace extensions
125 #endif // CHROME_BROWSER_EXTENSIONS_API_COOKIES_COOKIES_HELPERS_H_