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