chrome_resource_dispatcher_host_delegate.h revision 58537e28ecd584eab876aee8be7156509866d23a
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 CHROME_BROWSER_RENDERER_HOST_CHROME_RESOURCE_DISPATCHER_HOST_DELEGATE_H_ 6#define CHROME_BROWSER_RENDERER_HOST_CHROME_RESOURCE_DISPATCHER_HOST_DELEGATE_H_ 7 8#include <set> 9 10#include "base/compiler_specific.h" 11#include "base/memory/ref_counted.h" 12#include "content/public/browser/resource_dispatcher_host_delegate.h" 13 14class DelayedResourceQueue; 15class DownloadRequestLimiter; 16class SafeBrowsingService; 17 18namespace extensions { 19class UserScriptListener; 20} 21 22namespace prerender { 23class PrerenderTracker; 24} 25 26// Implements ResourceDispatcherHostDelegate. Currently used by the Prerender 27// system to abort requests and add to the load flags when a request begins. 28class ChromeResourceDispatcherHostDelegate 29 : public content::ResourceDispatcherHostDelegate { 30 public: 31 // This class does not take ownership of the tracker but merely holds a 32 // reference to it to avoid accessing g_browser_process. 33 // |prerender_tracker| must outlive |this|. 34 explicit ChromeResourceDispatcherHostDelegate( 35 prerender::PrerenderTracker* prerender_tracker); 36 virtual ~ChromeResourceDispatcherHostDelegate(); 37 38 // ResourceDispatcherHostDelegate implementation. 39 virtual bool ShouldBeginRequest( 40 int child_id, 41 int route_id, 42 const std::string& method, 43 const GURL& url, 44 ResourceType::Type resource_type, 45 content::ResourceContext* resource_context) OVERRIDE; 46 virtual void RequestBeginning( 47 net::URLRequest* request, 48 content::ResourceContext* resource_context, 49 appcache::AppCacheService* appcache_service, 50 ResourceType::Type resource_type, 51 int child_id, 52 int route_id, 53 bool is_continuation_of_transferred_request, 54 ScopedVector<content::ResourceThrottle>* throttles) OVERRIDE; 55 virtual void DownloadStarting( 56 net::URLRequest* request, 57 content::ResourceContext* resource_context, 58 int child_id, 59 int route_id, 60 int request_id, 61 bool is_content_initiated, 62 bool must_download, 63 ScopedVector<content::ResourceThrottle>* throttles) OVERRIDE; 64 virtual bool AcceptSSLClientCertificateRequest( 65 net::URLRequest* request, 66 net::SSLCertRequestInfo* cert_request_info) OVERRIDE; 67 virtual bool AcceptAuthRequest(net::URLRequest* request, 68 net::AuthChallengeInfo* auth_info) OVERRIDE; 69 virtual content::ResourceDispatcherHostLoginDelegate* CreateLoginDelegate( 70 net::AuthChallengeInfo* auth_info, net::URLRequest* request) OVERRIDE; 71 virtual bool HandleExternalProtocol(const GURL& url, 72 int child_id, 73 int route_id) OVERRIDE; 74 virtual bool ShouldForceDownloadResource( 75 const GURL& url, const std::string& mime_type) OVERRIDE; 76 virtual bool ShouldInterceptResourceAsStream( 77 content::ResourceContext* resource_context, 78 const GURL& url, 79 const std::string& mime_type, 80 GURL* origin, 81 std::string* target_id) OVERRIDE; 82 virtual void OnStreamCreated( 83 content::ResourceContext* resource_context, 84 int render_process_id, 85 int render_view_id, 86 const std::string& target_id, 87 scoped_ptr<content::StreamHandle> stream, 88 int64 expected_content_size) OVERRIDE; 89 virtual void OnResponseStarted( 90 net::URLRequest* request, 91 content::ResourceContext* resource_context, 92 content::ResourceResponse* response, 93 IPC::Sender* sender) OVERRIDE; 94 virtual void OnRequestRedirected( 95 const GURL& redirect_url, 96 net::URLRequest* request, 97 content::ResourceContext* resource_context, 98 content::ResourceResponse* response) OVERRIDE; 99 100 private: 101 void AppendStandardResourceThrottles( 102 net::URLRequest* request, 103 content::ResourceContext* resource_context, 104 ResourceType::Type resource_type, 105 ScopedVector<content::ResourceThrottle>* throttles); 106 107 // Adds Chrome experiment and metrics state as custom headers to |request|. 108 // This is a best-effort attempt, and does not interrupt the request if the 109 // headers can not be appended. 110 void AppendChromeMetricsHeaders( 111 net::URLRequest* request, 112 content::ResourceContext* resource_context, 113 ResourceType::Type resource_type); 114 115#if defined(ENABLE_ONE_CLICK_SIGNIN) 116 // Append headers required to tell Gaia whether the sync interstitial 117 // should be shown or not. This header is only added for valid Gaia URLs. 118 void AppendChromeSyncGaiaHeader( 119 net::URLRequest* request, 120 content::ResourceContext* resource_context); 121#endif 122 123 scoped_refptr<DownloadRequestLimiter> download_request_limiter_; 124 scoped_refptr<SafeBrowsingService> safe_browsing_; 125 scoped_refptr<extensions::UserScriptListener> user_script_listener_; 126 prerender::PrerenderTracker* prerender_tracker_; 127 128 DISALLOW_COPY_AND_ASSIGN(ChromeResourceDispatcherHostDelegate); 129}; 130 131#endif // CHROME_BROWSER_RENDERER_HOST_CHROME_RESOURCE_DISPATCHER_HOST_DELEGATE_H_ 132