Index: android_webview/browser/aw_cookie_access_policy.cc |
diff --git a/android_webview/browser/aw_cookie_access_policy.cc b/android_webview/browser/aw_cookie_access_policy.cc |
index 15158b919e39a133f0d3569863ae272e21d02708..06e3060530223bde6d564a1df509139363fa248f 100644 |
--- a/android_webview/browser/aw_cookie_access_policy.cc |
+++ b/android_webview/browser/aw_cookie_access_policy.cc |
@@ -7,9 +7,11 @@ |
#include "base/logging.h" |
#include "base/memory/scoped_ptr.h" |
#include "content/public/browser/browser_thread.h" |
+#include "net/base/net_errors.h" |
using base::AutoLock; |
using content::BrowserThread; |
+using net::StaticCookiePolicy; |
namespace android_webview { |
@@ -21,7 +23,8 @@ AwCookieAccessPolicy::~AwCookieAccessPolicy() { |
} |
AwCookieAccessPolicy::AwCookieAccessPolicy() |
- : allow_access_(true) { |
+ : allow_access_(true), |
+ allow_third_party_access_(true) { |
} |
AwCookieAccessPolicy* AwCookieAccessPolicy::GetInstance() { |
@@ -38,15 +41,25 @@ void AwCookieAccessPolicy::SetGlobalAllowAccess(bool allow) { |
allow_access_ = allow; |
} |
+bool AwCookieAccessPolicy::GetThirdPartyAllowAccess() { |
+ AutoLock lock(lock_); |
+ return allow_third_party_access_; |
+} |
+ |
+void AwCookieAccessPolicy::SetThirdPartyAllowAccess(bool allow) { |
+ AutoLock lock(lock_); |
+ allow_third_party_access_ = allow; |
+} |
+ |
bool AwCookieAccessPolicy::OnCanGetCookies(const net::URLRequest& request, |
const net::CookieList& cookie_list) { |
- return GetGlobalAllowAccess(); |
+ return AllowGet(request.url(), request.first_party_for_cookies()); |
} |
bool AwCookieAccessPolicy::OnCanSetCookie(const net::URLRequest& request, |
const std::string& cookie_line, |
net::CookieOptions* options) { |
- return GetGlobalAllowAccess(); |
+ return AllowSet(request.url(), request.first_party_for_cookies()); |
} |
bool AwCookieAccessPolicy::AllowGetCookie(const GURL& url, |
@@ -55,7 +68,7 @@ bool AwCookieAccessPolicy::AllowGetCookie(const GURL& url, |
content::ResourceContext* context, |
int render_process_id, |
int render_frame_id) { |
- return GetGlobalAllowAccess(); |
+ return AllowGet(url, first_party); |
} |
bool AwCookieAccessPolicy::AllowSetCookie(const GURL& url, |
@@ -65,7 +78,26 @@ bool AwCookieAccessPolicy::AllowSetCookie(const GURL& url, |
int render_process_id, |
int render_frame_id, |
net::CookieOptions* options) { |
- return GetGlobalAllowAccess(); |
+ return AllowSet(url, first_party); |
+} |
+ |
+StaticCookiePolicy::Type AwCookieAccessPolicy::GetPolicy() { |
+ if (!GetGlobalAllowAccess()) { |
+ return StaticCookiePolicy::BLOCK_ALL_COOKIES; |
+ } else if (!GetThirdPartyAllowAccess()) { |
+ return StaticCookiePolicy::BLOCK_ALL_THIRD_PARTY_COOKIES; |
+ } |
+ return StaticCookiePolicy::ALLOW_ALL_COOKIES; |
+} |
+ |
+bool AwCookieAccessPolicy::AllowSet(const GURL& url, const GURL& first_party) { |
+ return StaticCookiePolicy(GetPolicy()).CanSetCookie(url, first_party) |
+ == net::OK; |
+} |
+ |
+bool AwCookieAccessPolicy::AllowGet(const GURL& url, const GURL& first_party) { |
+ return StaticCookiePolicy(GetPolicy()).CanGetCookies(url, first_party) |
+ == net::OK; |
} |
} // namespace android_webview |