Home | History | Annotate | Download | only in renderer_host
      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_LIB_RENDERER_HOST_AW_RESOURCE_DISPATCHER_HOST_DELEGATE_H_
      6 #define ANDROID_WEBVIEW_LIB_RENDERER_HOST_AW_RESOURCE_DISPATCHER_HOST_DELEGATE_H_
      7 
      8 #include <map>
      9 
     10 #include "base/lazy_instance.h"
     11 #include "content/public/browser/resource_dispatcher_host_delegate.h"
     12 
     13 namespace content {
     14 class ResourceDispatcherHostLoginDelegate;
     15 struct ResourceResponse;
     16 }  // namespace content
     17 
     18 namespace IPC {
     19 class Sender;
     20 }  // namespace IPC
     21 
     22 namespace android_webview {
     23 
     24 class IoThreadClientThrottle;
     25 
     26 class AwResourceDispatcherHostDelegate
     27     : public content::ResourceDispatcherHostDelegate {
     28  public:
     29   static void ResourceDispatcherHostCreated();
     30 
     31   // Overriden methods from ResourceDispatcherHostDelegate.
     32   virtual void RequestBeginning(
     33       net::URLRequest* request,
     34       content::ResourceContext* resource_context,
     35       appcache::AppCacheService* appcache_service,
     36       ResourceType::Type resource_type,
     37       int child_id,
     38       int route_id,
     39       ScopedVector<content::ResourceThrottle>* throttles) OVERRIDE;
     40   virtual void DownloadStarting(
     41       net::URLRequest* request,
     42       content::ResourceContext* resource_context,
     43       int child_id,
     44       int route_id,
     45       int request_id,
     46       bool is_content_initiated,
     47       bool must_download,
     48       ScopedVector<content::ResourceThrottle>* throttles) OVERRIDE;
     49   virtual content::ResourceDispatcherHostLoginDelegate* CreateLoginDelegate(
     50       net::AuthChallengeInfo* auth_info,
     51       net::URLRequest* request) OVERRIDE;
     52   virtual bool HandleExternalProtocol(const GURL& url,
     53                                       int child_id,
     54                                       int route_id) OVERRIDE;
     55   virtual void OnResponseStarted(
     56       net::URLRequest* request,
     57       content::ResourceContext* resource_context,
     58       content::ResourceResponse* response,
     59       IPC::Sender* sender) OVERRIDE;
     60 
     61   virtual void OnRequestRedirected(
     62       const GURL& redirect_url,
     63       net::URLRequest* request,
     64       content::ResourceContext* resource_context,
     65       content::ResourceResponse* response) OVERRIDE;
     66 
     67   void RemovePendingThrottleOnIoThread(IoThreadClientThrottle* throttle);
     68 
     69   static void OnIoThreadClientReady(int new_render_process_id,
     70                                     int new_render_frame_id);
     71   static void AddPendingThrottle(int render_process_id,
     72                                  int render_frame_id,
     73                                  IoThreadClientThrottle* pending_throttle);
     74 
     75  private:
     76   friend struct base::DefaultLazyInstanceTraits<
     77       AwResourceDispatcherHostDelegate>;
     78   AwResourceDispatcherHostDelegate();
     79   virtual ~AwResourceDispatcherHostDelegate();
     80 
     81   // These methods must be called on IO thread.
     82   void OnIoThreadClientReadyInternal(int new_render_process_id,
     83                                      int new_render_frame_id);
     84   void AddPendingThrottleOnIoThread(int render_process_id,
     85                                     int render_frame_id,
     86                                     IoThreadClientThrottle* pending_throttle);
     87   void AddExtraHeadersIfNeeded(net::URLRequest* request,
     88                                content::ResourceContext* resource_context);
     89 
     90   // Pair of render_process_id and render_frame_id.
     91   typedef std::pair<int, int> FrameRouteIDPair;
     92   typedef std::map<FrameRouteIDPair, IoThreadClientThrottle*>
     93       PendingThrottleMap;
     94 
     95   // Only accessed on the IO thread.
     96   PendingThrottleMap pending_throttles_;
     97 
     98   DISALLOW_COPY_AND_ASSIGN(AwResourceDispatcherHostDelegate);
     99 };
    100 
    101 }  // namespace android_webview
    102 
    103 #endif  // ANDROID_WEBVIEW_LIB_RENDERER_HOST_AW_RESOURCE_DISPATCHER_HOST_H_
    104