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 #ifndef ANDROID_WEBVIEW_BROWSER_AW_COOKIE_ACCESS_POLICY_H_
6 #define ANDROID_WEBVIEW_BROWSER_AW_COOKIE_ACCESS_POLICY_H_
8 #include "base/basictypes.h"
9 #include "base/lazy_instance.h"
10 #include "base/synchronization/lock.h"
11 #include "net/base/static_cookie_policy.h"
12 #include "net/cookies/canonical_cookie.h"
13 #include "net/url_request/url_request.h"
16 class ResourceContext
;
25 namespace android_webview
{
27 // Manages the cookie access (both setting and getting) policy for WebView.
28 // Currently we don't distinguish between sources (i.e. network vs. JavaScript)
29 // or between reading vs. writing cookies.
30 class AwCookieAccessPolicy
{
32 static AwCookieAccessPolicy
* GetInstance();
34 // Can we read/write any cookies?
35 bool GetShouldAcceptCookies();
36 void SetShouldAcceptCookies(bool allow
);
38 // Can we read/write third party cookies?
39 bool GetShouldAcceptThirdPartyCookies(int render_process_id
,
41 bool GetShouldAcceptThirdPartyCookies(const net::URLRequest
& request
);
43 // These are the functions called when operating over cookies from the
44 // network. See NetworkDelegate for further descriptions.
45 bool OnCanGetCookies(const net::URLRequest
& request
,
46 const net::CookieList
& cookie_list
);
47 bool OnCanSetCookie(const net::URLRequest
& request
,
48 const std::string
& cookie_line
,
49 net::CookieOptions
* options
);
51 // These are the functions called when operating over cookies from the
52 // renderer. See ContentBrowserClient for further descriptions.
53 bool AllowGetCookie(const GURL
& url
,
54 const GURL
& first_party
,
55 const net::CookieList
& cookie_list
,
56 content::ResourceContext
* context
,
57 int render_process_id
,
59 bool AllowSetCookie(const GURL
& url
,
60 const GURL
& first_party
,
61 const std::string
& cookie_line
,
62 content::ResourceContext
* context
,
63 int render_process_id
,
65 net::CookieOptions
* options
);
68 friend struct base::DefaultLazyInstanceTraits
<AwCookieAccessPolicy
>;
70 AwCookieAccessPolicy();
71 ~AwCookieAccessPolicy();
75 DISALLOW_COPY_AND_ASSIGN(AwCookieAccessPolicy
);
78 class AwStaticCookiePolicy
{
80 AwStaticCookiePolicy(bool allow_global_access
,
81 bool allow_third_party_access
);
83 bool accept_cookies() const {
84 return accept_cookies_
;
87 bool accept_third_party_cookies() const {
88 return accept_third_party_cookies_
;
91 bool AllowGet(const GURL
& url
, const GURL
& first_party
) const;
92 bool AllowSet(const GURL
& url
, const GURL
& first_party
) const;
95 const bool accept_cookies_
;
96 const bool accept_third_party_cookies_
;
98 // We have two bits of state but only three different cases:
99 // If !ShouldAcceptCookies
100 // then reject all cookies.
101 // If ShouldAcceptCookies and !ShouldAcceptThirdPartyCookies
102 // then reject third party.
103 // If ShouldAcceptCookies and ShouldAcceptThirdPartyCookies
104 // then allow all cookies.
105 net::StaticCookiePolicy::Type
GetPolicy(const GURL
& url
) const;
107 DISALLOW_COPY_AND_ASSIGN(AwStaticCookiePolicy
);
110 } // namespace android_webview
112 #endif // ANDROID_WEBVIEW_BROWSER_AW_COOKIE_ACCESS_POLICY_H_