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 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 
     14 class DelayedResourceQueue;
     15 class DownloadRequestLimiter;
     16 class SafeBrowsingService;
     17 
     18 namespace extensions {
     19 class UserScriptListener;
     20 }
     21 
     22 namespace prerender {
     23 class 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.
     28 class 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       int child_id,
    105       int route_id,
    106       ResourceType::Type resource_type,
    107       ScopedVector<content::ResourceThrottle>* throttles);
    108 
    109   // Adds Chrome experiment and metrics state as custom headers to |request|.
    110   // This is a best-effort attempt, and does not interrupt the request if the
    111   // headers can not be appended.
    112   void AppendChromeMetricsHeaders(
    113       net::URLRequest* request,
    114       content::ResourceContext* resource_context,
    115       ResourceType::Type resource_type);
    116 
    117 #if defined(ENABLE_ONE_CLICK_SIGNIN)
    118   // Append headers required to tell Gaia whether the sync interstitial
    119   // should be shown or not.  This header is only added for valid Gaia URLs.
    120   void AppendChromeSyncGaiaHeader(
    121       net::URLRequest* request,
    122       content::ResourceContext* resource_context);
    123 #endif
    124 
    125   scoped_refptr<DownloadRequestLimiter> download_request_limiter_;
    126   scoped_refptr<SafeBrowsingService> safe_browsing_;
    127   scoped_refptr<extensions::UserScriptListener> user_script_listener_;
    128   prerender::PrerenderTracker* prerender_tracker_;
    129 
    130   DISALLOW_COPY_AND_ASSIGN(ChromeResourceDispatcherHostDelegate);
    131 };
    132 
    133 #endif  // CHROME_BROWSER_RENDERER_HOST_CHROME_RESOURCE_DISPATCHER_HOST_DELEGATE_H_
    134