chrome_resource_dispatcher_host_delegate.h revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Use of this source code is governed by a BSD-style license that can be 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// found in the LICENSE file. 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#ifndef CHROME_BROWSER_RENDERER_HOST_CHROME_RESOURCE_DISPATCHER_HOST_DELEGATE_H_ 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define CHROME_BROWSER_RENDERER_HOST_CHROME_RESOURCE_DISPATCHER_HOST_DELEGATE_H_ 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <set> 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "base/compiler_specific.h" 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "base/memory/ref_counted.h" 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "chrome/browser/external_protocol/external_protocol_handler.h" 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "content/public/browser/resource_dispatcher_host_delegate.h" 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass DelayedResourceQueue; 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass DownloadRequestLimiter; 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass SafeBrowsingService; 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvernamespace extensions { 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass UserScriptListener; 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvernamespace prerender { 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass PrerenderTracker; 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Implements ResourceDispatcherHostDelegate. Currently used by the Prerender 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// system to abort requests and add to the load flags when a request begins. 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass ChromeResourceDispatcherHostDelegate 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : public content::ResourceDispatcherHostDelegate { 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public: 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // This class does not take ownership of the tracker but merely holds a 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // reference to it to avoid accessing g_browser_process. 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // |prerender_tracker| must outlive |this|. 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver explicit ChromeResourceDispatcherHostDelegate( 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver prerender::PrerenderTracker* prerender_tracker); 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver virtual ~ChromeResourceDispatcherHostDelegate(); 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // ResourceDispatcherHostDelegate implementation. 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver virtual bool ShouldBeginRequest( 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int child_id, 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int route_id, 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver const std::string& method, 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver const GURL& url, 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ResourceType::Type resource_type, 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver content::ResourceContext* resource_context) OVERRIDE; 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver virtual void RequestBeginning( 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver net::URLRequest* request, 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver content::ResourceContext* resource_context, 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver appcache::AppCacheService* appcache_service, 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ResourceType::Type resource_type, 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int child_id, 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int route_id, 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ScopedVector<content::ResourceThrottle>* throttles) OVERRIDE; 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver virtual void DownloadStarting( 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver net::URLRequest* request, 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver content::ResourceContext* resource_context, 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int child_id, 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int route_id, 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int request_id, 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver bool is_content_initiated, 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver bool must_download, 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ScopedVector<content::ResourceThrottle>* throttles) OVERRIDE; 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver virtual content::ResourceDispatcherHostLoginDelegate* CreateLoginDelegate( 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver net::AuthChallengeInfo* auth_info, net::URLRequest* request) OVERRIDE; 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver virtual bool HandleExternalProtocol(const GURL& url, 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int child_id, 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int route_id, 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver bool initiated_by_user_gesture) OVERRIDE; 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver virtual bool ShouldForceDownloadResource( 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver const GURL& url, const std::string& mime_type) OVERRIDE; 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver virtual bool ShouldInterceptResourceAsStream( 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver content::ResourceContext* resource_context, 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver const GURL& url, 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver const std::string& mime_type, 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GURL* origin, 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver std::string* target_id) OVERRIDE; 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver virtual void OnStreamCreated( 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver content::ResourceContext* resource_context, 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int render_process_id, 81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int render_view_id, 82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver const std::string& target_id, 83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver scoped_ptr<content::StreamHandle> stream, 84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int64 expected_content_size) OVERRIDE; 85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver virtual void OnResponseStarted( 86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver net::URLRequest* request, 87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver content::ResourceContext* resource_context, 88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver content::ResourceResponse* response, 89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IPC::Sender* sender) OVERRIDE; 90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver virtual void OnRequestRedirected( 91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver const GURL& redirect_url, 92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver net::URLRequest* request, 93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver content::ResourceContext* resource_context, 94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver content::ResourceResponse* response) OVERRIDE; 95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver virtual void RequestComplete(net::URLRequest* url_request) OVERRIDE; 96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // Called on the UI thread. Allows switching out the 98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // ExternalProtocolHandler::Delegate for testing code. 99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver static void SetExternalProtocolHandlerDelegateForTesting( 100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ExternalProtocolHandler::Delegate* delegate); 101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver private: 103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void AppendStandardResourceThrottles( 104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver net::URLRequest* request, 105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver content::ResourceContext* resource_context, 106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ResourceType::Type resource_type, 107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ScopedVector<content::ResourceThrottle>* throttles); 108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#if defined(ENABLE_ONE_CLICK_SIGNIN) 110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // Append headers required to tell Gaia whether the sync interstitial 111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // should be shown or not. This header is only added for valid Gaia URLs. 112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void AppendChromeSyncGaiaHeader( 113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver net::URLRequest* request, 114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver content::ResourceContext* resource_context); 115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#endif 116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver scoped_refptr<DownloadRequestLimiter> download_request_limiter_; 118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver scoped_refptr<SafeBrowsingService> safe_browsing_; 119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver scoped_refptr<extensions::UserScriptListener> user_script_listener_; 120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver prerender::PrerenderTracker* prerender_tracker_; 121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver DISALLOW_COPY_AND_ASSIGN(ChromeResourceDispatcherHostDelegate); 123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}; 124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#endif // CHROME_BROWSER_RENDERER_HOST_CHROME_RESOURCE_DISPATCHER_HOST_DELEGATE_H_ 126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver