Home | History | Annotate | Download | only in browser
      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.
      4 
      5 #ifndef ANDROID_WEBVIEW_BROWSER_AW_COOKIE_ACCESS_POLICY_H_
      6 #define ANDROID_WEBVIEW_BROWSER_AW_COOKIE_ACCESS_POLICY_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "base/lazy_instance.h"
     10 #include "base/synchronization/lock.h"
     11 #include "net/cookies/canonical_cookie.h"
     12 
     13 namespace content {
     14 class ResourceContext;
     15 }
     16 
     17 namespace net {
     18 class CookieOptions;
     19 class URLRequest;
     20 }
     21 
     22 class GURL;
     23 
     24 namespace android_webview {
     25 
     26 // Manages the cookie access (both setting and getting) policy for WebView.
     27 class AwCookieAccessPolicy {
     28  public:
     29   static AwCookieAccessPolicy* GetInstance();
     30 
     31   // These manage the global access state shared across requests regardless of
     32   // source (i.e. network or JavaScript).
     33   bool GetGlobalAllowAccess();
     34   void SetGlobalAllowAccess(bool allow);
     35 
     36   // These are the functions called when operating over cookies from the
     37   // network. See NetworkDelegate for further descriptions.
     38   bool OnCanGetCookies(const net::URLRequest& request,
     39                        const net::CookieList& cookie_list);
     40   bool OnCanSetCookie(const net::URLRequest& request,
     41                       const std::string& cookie_line,
     42                       net::CookieOptions* options);
     43 
     44   // These are the functions called when operating over cookies from the
     45   // renderer. See ContentBrowserClient for further descriptions.
     46   bool AllowGetCookie(const GURL& url,
     47                       const GURL& first_party,
     48                       const net::CookieList& cookie_list,
     49                       content::ResourceContext* context,
     50                       int render_process_id,
     51                       int render_view_id);
     52   bool AllowSetCookie(const GURL& url,
     53                       const GURL& first_party,
     54                       const std::string& cookie_line,
     55                       content::ResourceContext* context,
     56                       int render_process_id,
     57                       int render_view_id,
     58                       net::CookieOptions* options);
     59 
     60  private:
     61   friend struct base::DefaultLazyInstanceTraits<AwCookieAccessPolicy>;
     62 
     63   AwCookieAccessPolicy();
     64   ~AwCookieAccessPolicy();
     65   bool allow_access_;
     66   base::Lock lock_;
     67 
     68   DISALLOW_COPY_AND_ASSIGN(AwCookieAccessPolicy);
     69 };
     70 
     71 }  // namespace android_webview
     72 
     73 #endif  // ANDROID_WEBVIEW_BROWSER_AW_COOKIE_ACCESS_POLICY_H_
     74