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