| Index: content/browser/loader/resource_dispatcher_host_impl.h
|
| diff --git a/content/browser/loader/resource_dispatcher_host_impl.h b/content/browser/loader/resource_dispatcher_host_impl.h
|
| index 577502e169eddf705776b3f9f1dce51fc50a14a2..ade80abf12d8cde25e51289b4e6709154f2d0505 100644
|
| --- a/content/browser/loader/resource_dispatcher_host_impl.h
|
| +++ b/content/browser/loader/resource_dispatcher_host_impl.h
|
| @@ -24,7 +24,6 @@
|
| #include "base/observer_list.h"
|
| #include "base/time/time.h"
|
| #include "base/timer/timer.h"
|
| -#include "content/browser/download/download_resource_handler.h"
|
| #include "content/browser/download/save_types.h"
|
| #include "content/browser/loader/global_routing_id.h"
|
| #include "content/browser/loader/resource_loader.h"
|
| @@ -65,12 +64,12 @@ class NavigationURLLoaderImplCore;
|
| class RenderFrameHostImpl;
|
| class ResourceContext;
|
| class ResourceDispatcherHostDelegate;
|
| +class ResourceHandler;
|
| class ResourceMessageDelegate;
|
| class ResourceMessageFilter;
|
| class ResourceRequestInfoImpl;
|
| class ServiceWorkerNavigationHandleCore;
|
| struct CommonNavigationParams;
|
| -struct DownloadSaveInfo;
|
| struct NavigationRequestInfo;
|
| struct Referrer;
|
| struct ResourceRequest;
|
| @@ -79,10 +78,19 @@ namespace mojom {
|
| class URLLoader;
|
| } // namespace mojom
|
|
|
| +using CreateDownloadHandlerIntercept =
|
| + base::Callback<std::unique_ptr<ResourceHandler>(net::URLRequest*)>;
|
| +
|
| class CONTENT_EXPORT ResourceDispatcherHostImpl
|
| : public ResourceDispatcherHost,
|
| public ResourceLoaderDelegate {
|
| public:
|
| + // This constructor should be used if we want downloads to work correctly.
|
| + // TODO(ananta)
|
| + // Work on moving creation of download handlers out of
|
| + // ResourceDispatcherHostImpl.
|
| + ResourceDispatcherHostImpl(
|
| + CreateDownloadHandlerIntercept download_handler_intercept);
|
| ResourceDispatcherHostImpl();
|
| ~ResourceDispatcherHostImpl() override;
|
|
|
| @@ -129,27 +137,6 @@ class CONTENT_EXPORT ResourceDispatcherHostImpl
|
| bool OnMessageReceived(const IPC::Message& message,
|
| ResourceMessageFilter* filter);
|
|
|
| - DownloadInterruptReason BeginDownload(
|
| - std::unique_ptr<net::URLRequest> request,
|
| - const Referrer& referrer,
|
| - bool is_content_initiated,
|
| - ResourceContext* context,
|
| - int render_process_id,
|
| - int render_view_route_id,
|
| - int render_frame_route_id,
|
| - bool do_not_prompt_for_login);
|
| -
|
| - // Initiates a save file from the browser process (as opposed to a resource
|
| - // request from the renderer or another child process).
|
| - void BeginSaveFile(const GURL& url,
|
| - const Referrer& referrer,
|
| - SaveItemId save_item_id,
|
| - SavePackageId save_package_id,
|
| - int child_id,
|
| - int render_view_route_id,
|
| - int render_frame_route_id,
|
| - ResourceContext* context);
|
| -
|
| // Cancels the given request if it still exists.
|
| void CancelRequest(int child_id, int request_id);
|
|
|
| @@ -244,6 +231,8 @@ class CONTENT_EXPORT ResourceDispatcherHostImpl
|
| // Must be called after the ResourceRequestInfo has been created
|
| // and associated with the request.
|
| // This is marked virtual so it can be overriden in testing.
|
| + // TODO(ananta)
|
| + // This method should be removed or moved outside this class.
|
| virtual std::unique_ptr<ResourceHandler> CreateResourceHandlerForDownload(
|
| net::URLRequest* request,
|
| bool is_content_initiated,
|
| @@ -309,6 +298,35 @@ class CONTENT_EXPORT ResourceDispatcherHostImpl
|
| mojom::URLLoaderClientPtr url_loader_client,
|
| ResourceMessageFilter* filter);
|
|
|
| + // Helper function for initializing the |request| passed in. By initializing
|
| + // we mean setting the |referrer| on the |request|, associating the
|
| + // ResourceRequestInfoImpl structure with the |request|, etc.
|
| + // This function should be called for invoking the BeginURLRequest() function
|
| + // to initiate a URL request.
|
| + void InitializeURLRequest(net::URLRequest* request,
|
| + const Referrer& referrer,
|
| + bool is_download,
|
| + int render_process_host_id,
|
| + int render_view_routing_id,
|
| + int render_frame_routing_id,
|
| + ResourceContext* context);
|
| +
|
| + // Helper function for initiating a URL request. The |is_download| and
|
| + // |is_content_initiated and |do_not_prompt_for_login| parameters are
|
| + // specific to download requests.
|
| + // TODO(ananta)
|
| + // Look into a better way of passing these parameters in.
|
| + // Please note that the InitializeURLRequest() function needs to be called
|
| + // called to initialize the request before calling this function.
|
| + void BeginURLRequest(std::unique_ptr<net::URLRequest> request,
|
| + std::unique_ptr<ResourceHandler> handler,
|
| + bool is_download,
|
| + bool is_content_initiated,
|
| + bool do_not_prompt_for_login,
|
| + ResourceContext* context);
|
| +
|
| + bool is_shutdown() const { return is_shutdown_; }
|
| +
|
| private:
|
| friend class ResourceDispatcherHostTest;
|
|
|
| @@ -378,7 +396,7 @@ class CONTENT_EXPORT ResourceDispatcherHostImpl
|
| // A shutdown helper that runs on the IO thread.
|
| void OnShutdown();
|
|
|
| - // Helper function for regular and download requests.
|
| + // Helper function for URL requests.
|
| void BeginRequestInternal(std::unique_ptr<net::URLRequest> request,
|
| std::unique_ptr<ResourceHandler> handler);
|
|
|
| @@ -615,6 +633,17 @@ class CONTENT_EXPORT ResourceDispatcherHostImpl
|
| ResourceMessageFilter* filter,
|
| ResourceContext* resource_context);
|
|
|
| + // Notifies the ResourceDispatcherHostDelegate about a download having
|
| + // started. The function returns the |handler| passed in, if the download
|
| + // is not throttled. If the download is to be throttled (Decided by the
|
| + // delegate) the function returns a ThrottlingResourceHandler to handle the
|
| + // download.
|
| + std::unique_ptr<ResourceHandler> HandleDownloadStarted(
|
| + net::URLRequest* request,
|
| + std::unique_ptr<ResourceHandler> handler,
|
| + bool is_content_initiated,
|
| + bool must_download);
|
| +
|
| LoaderMap pending_loaders_;
|
|
|
| // Collection of temp files downloaded for child processes via
|
| @@ -709,6 +738,9 @@ class CONTENT_EXPORT ResourceDispatcherHostImpl
|
| // Used to invoke an interceptor for the HTTP header.
|
| HeaderInterceptorMap http_header_interceptor_map_;
|
|
|
| + // Points to the registered download handler intercept.
|
| + CreateDownloadHandlerIntercept create_download_handler_intercept_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(ResourceDispatcherHostImpl);
|
| };
|
|
|
|
|