aw_cookie_access_policy.h revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef ANDROID_WEBVIEW_BROWSER_AW_COOKIE_ACCESS_POLICY_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ANDROID_WEBVIEW_BROWSER_AW_COOKIE_ACCESS_POLICY_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/lazy_instance.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/synchronization/lock.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/canonical_cookie.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ResourceContext;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CookieOptions;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLRequest;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace android_webview {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Manages the cookie access (both setting and getting) policy for WebView.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AwCookieAccessPolicy {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static AwCookieAccessPolicy* GetInstance();
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // These manage the global access state shared across requests regardless of
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // source (i.e. network or JavaScript).
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool GetGlobalAllowAccess();
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetGlobalAllowAccess(bool allow);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // These are the functions called when operating over cookies from the
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // network. See NetworkDelegate for further descriptions.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool OnCanGetCookies(const net::URLRequest& request,
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const net::CookieList& cookie_list);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool OnCanSetCookie(const net::URLRequest& request,
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const std::string& cookie_line,
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      net::CookieOptions* options);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // These are the functions called when operating over cookies from the
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // renderer. See ContentBrowserClient for further descriptions.
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool AllowGetCookie(const GURL& url,
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const GURL& first_party,
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const net::CookieList& cookie_list,
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      content::ResourceContext* context,
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      int render_process_id,
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                      int render_frame_id);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool AllowSetCookie(const GURL& url,
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const GURL& first_party,
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const std::string& cookie_line,
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      content::ResourceContext* context,
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      int render_process_id,
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                      int render_frame_id,
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      net::CookieOptions* options);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend struct base::DefaultLazyInstanceTraits<AwCookieAccessPolicy>;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AwCookieAccessPolicy();
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~AwCookieAccessPolicy();
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool allow_access_;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Lock lock_;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AwCookieAccessPolicy);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace android_webview
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // ANDROID_WEBVIEW_BROWSER_AW_COOKIE_ACCESS_POLICY_H_
74