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