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 content::AppCacheService* appcache_service, 36 content::ResourceType resource_type, 37 ScopedVector<content::ResourceThrottle>* throttles) OVERRIDE; 38 virtual void DownloadStarting( 39 net::URLRequest* request, 40 content::ResourceContext* resource_context, 41 int child_id, 42 int route_id, 43 int request_id, 44 bool is_content_initiated, 45 bool must_download, 46 ScopedVector<content::ResourceThrottle>* throttles) OVERRIDE; 47 virtual content::ResourceDispatcherHostLoginDelegate* CreateLoginDelegate( 48 net::AuthChallengeInfo* auth_info, 49 net::URLRequest* request) OVERRIDE; 50 virtual bool HandleExternalProtocol(const GURL& url, 51 int child_id, 52 int route_id) OVERRIDE; 53 virtual void OnResponseStarted( 54 net::URLRequest* request, 55 content::ResourceContext* resource_context, 56 content::ResourceResponse* response, 57 IPC::Sender* sender) OVERRIDE; 58 59 virtual void OnRequestRedirected( 60 const GURL& redirect_url, 61 net::URLRequest* request, 62 content::ResourceContext* resource_context, 63 content::ResourceResponse* response) OVERRIDE; 64 65 void RemovePendingThrottleOnIoThread(IoThreadClientThrottle* throttle); 66 67 static void OnIoThreadClientReady(int new_render_process_id, 68 int new_render_frame_id); 69 static void AddPendingThrottle(int render_process_id, 70 int render_frame_id, 71 IoThreadClientThrottle* pending_throttle); 72 73 private: 74 friend struct base::DefaultLazyInstanceTraits< 75 AwResourceDispatcherHostDelegate>; 76 AwResourceDispatcherHostDelegate(); 77 virtual ~AwResourceDispatcherHostDelegate(); 78 79 // These methods must be called on IO thread. 80 void OnIoThreadClientReadyInternal(int new_render_process_id, 81 int new_render_frame_id); 82 void AddPendingThrottleOnIoThread(int render_process_id, 83 int render_frame_id, 84 IoThreadClientThrottle* pending_throttle); 85 void AddExtraHeadersIfNeeded(net::URLRequest* request, 86 content::ResourceContext* resource_context); 87 88 // Pair of render_process_id and render_frame_id. 89 typedef std::pair<int, int> FrameRouteIDPair; 90 typedef std::map<FrameRouteIDPair, IoThreadClientThrottle*> 91 PendingThrottleMap; 92 93 // Only accessed on the IO thread. 94 PendingThrottleMap pending_throttles_; 95 96 DISALLOW_COPY_AND_ASSIGN(AwResourceDispatcherHostDelegate); 97 }; 98 99 } // namespace android_webview 100 101 #endif // ANDROID_WEBVIEW_LIB_RENDERER_HOST_AW_RESOURCE_DISPATCHER_HOST_H_ 102