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_CONTENTS_IO_THREAD_CLIENT_H_
      6 #define ANDROID_WEBVIEW_BROWSER_AW_CONTENTS_IO_THREAD_CLIENT_H_
      7 
      8 #include <string>
      9 
     10 #include "base/memory/scoped_ptr.h"
     11 
     12 class GURL;
     13 
     14 namespace net {
     15 class URLRequest;
     16 }
     17 
     18 namespace android_webview {
     19 
     20 class AwWebResourceResponse;
     21 
     22 // This class provides a means of calling Java methods on an instance that has
     23 // a 1:1 relationship with a WebContents instance directly from the IO thread.
     24 //
     25 // Specifically this is used to associate URLRequests with the WebContents that
     26 // the URLRequest is made for.
     27 //
     28 // The native class is intended to be a short-lived handle that pins the
     29 // Java-side instance. It is preferable to use the static getter methods to
     30 // obtain a new instance of the class rather than holding on to one for
     31 // prolonged periods of time (see note for more details).
     32 //
     33 // Note: The native AwContentsIoThreadClient instance has a Global ref to
     34 // the Java object. By keeping the native AwContentsIoThreadClient
     35 // instance alive you're also prolonging the lifetime of the Java instance, so
     36 // don't keep a AwContentsIoThreadClient if you don't need to.
     37 class AwContentsIoThreadClient {
     38  public:
     39   // Corresponds to WebSettings cache mode constants.
     40   enum CacheMode {
     41     LOAD_DEFAULT = -1,
     42     LOAD_NORMAL = 0,
     43     LOAD_CACHE_ELSE_NETWORK = 1,
     44     LOAD_NO_CACHE = 2,
     45     LOAD_CACHE_ONLY = 3,
     46   };
     47 
     48   virtual ~AwContentsIoThreadClient() {}
     49 
     50   // Returns whether this is a new pop up that is still waiting for association
     51   // with the java counter part.
     52   virtual bool PendingAssociation() const = 0;
     53 
     54   // Retrieve CacheMode setting value of this AwContents.
     55   // This method is called on the IO thread only.
     56   virtual CacheMode GetCacheMode() const = 0;
     57 
     58   // This will attempt to fetch the AwContentsIoThreadClient for the given
     59   // |render_process_id|, |render_frame_id| pair.
     60   // This method can be called from any thread.
     61   // An empty scoped_ptr is a valid return value.
     62   static scoped_ptr<AwContentsIoThreadClient> FromID(int render_process_id,
     63                                                      int render_frame_id);
     64 
     65   // Called on the IO thread when a subframe is created.
     66   static void SubFrameCreated(int render_process_id,
     67                               int parent_render_frame_id,
     68                               int child_render_frame_id);
     69 
     70   // This method is called on the IO thread only.
     71   virtual scoped_ptr<AwWebResourceResponse> ShouldInterceptRequest(
     72       const GURL& location,
     73       const net::URLRequest* request) = 0;
     74 
     75   // Retrieve the AllowContentAccess setting value of this AwContents.
     76   // This method is called on the IO thread only.
     77   virtual bool ShouldBlockContentUrls() const = 0;
     78 
     79   // Retrieve the AllowFileAccess setting value of this AwContents.
     80   // This method is called on the IO thread only.
     81   virtual bool ShouldBlockFileUrls() const = 0;
     82 
     83   // Retrieve the BlockNetworkLoads setting value of this AwContents.
     84   // This method is called on the IO thread only.
     85   virtual bool ShouldBlockNetworkLoads() const = 0;
     86 
     87   // Retrieve the AcceptThirdPartyCookies setting value of this AwContents.
     88   virtual bool ShouldAcceptThirdPartyCookies() const = 0;
     89 
     90   // Called when ResourceDispathcerHost detects a download request.
     91   // The download is already cancelled when this is called, since
     92   // relevant for DownloadListener is already extracted.
     93   virtual void NewDownload(const GURL& url,
     94                            const std::string& user_agent,
     95                            const std::string& content_disposition,
     96                            const std::string& mime_type,
     97                            int64 content_length) = 0;
     98 
     99   // Called when a new login request is detected. See the documentation for
    100   // WebViewClient.onReceivedLoginRequest for arguments. Note that |account|
    101   // may be empty.
    102   virtual void NewLoginRequest(const std::string& realm,
    103                                const std::string& account,
    104                                const std::string& args) = 0;
    105 };
    106 
    107 } // namespace android_webview
    108 
    109 #endif  // ANDROID_WEBVIEW_BROWSER_AW_CONTENTS_IO_THREAD_CLIENT_H_
    110