diff options
Diffstat (limited to 'chromium/content/browser/download/download_response_handler.cc')
-rw-r--r-- | chromium/content/browser/download/download_response_handler.cc | 102 |
1 files changed, 55 insertions, 47 deletions
diff --git a/chromium/content/browser/download/download_response_handler.cc b/chromium/content/browser/download/download_response_handler.cc index d2d198a7cc3..5ab73c4e1fc 100644 --- a/chromium/content/browser/download/download_response_handler.cc +++ b/chromium/content/browser/download/download_response_handler.cc @@ -6,9 +6,9 @@ #include <memory> -#include "content/browser/download/download_stats.h" +#include "components/download/public/common/download_stats.h" +#include "components/download/public/common/download_url_parameters.h" #include "content/browser/download/download_utils.h" -#include "content/public/browser/download_url_parameters.h" #include "net/http/http_status_code.h" #include "net/log/net_log_with_source.h" @@ -16,32 +16,34 @@ namespace content { namespace { -mojom::NetworkRequestStatus ConvertInterruptReasonToMojoNetworkRequestStatus( - DownloadInterruptReason reason) { +download::mojom::NetworkRequestStatus +ConvertInterruptReasonToMojoNetworkRequestStatus( + download::DownloadInterruptReason reason) { switch (reason) { - case DOWNLOAD_INTERRUPT_REASON_NONE: - return mojom::NetworkRequestStatus::OK; - case DOWNLOAD_INTERRUPT_REASON_NETWORK_TIMEOUT: - return mojom::NetworkRequestStatus::NETWORK_TIMEOUT; - case DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED: - return mojom::NetworkRequestStatus::NETWORK_DISCONNECTED; - case DOWNLOAD_INTERRUPT_REASON_NETWORK_SERVER_DOWN: - return mojom::NetworkRequestStatus::NETWORK_SERVER_DOWN; - case DOWNLOAD_INTERRUPT_REASON_SERVER_NO_RANGE: - return mojom::NetworkRequestStatus::SERVER_NO_RANGE; - case DOWNLOAD_INTERRUPT_REASON_SERVER_CONTENT_LENGTH_MISMATCH: - return mojom::NetworkRequestStatus::SERVER_CONTENT_LENGTH_MISMATCH; - case DOWNLOAD_INTERRUPT_REASON_SERVER_UNREACHABLE: - return mojom::NetworkRequestStatus::SERVER_UNREACHABLE; - case DOWNLOAD_INTERRUPT_REASON_SERVER_CERT_PROBLEM: - return mojom::NetworkRequestStatus::SERVER_CERT_PROBLEM; - case DOWNLOAD_INTERRUPT_REASON_USER_CANCELED: - return mojom::NetworkRequestStatus::USER_CANCELED; - case DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED: - return mojom::NetworkRequestStatus::NETWORK_FAILED; + case download::DOWNLOAD_INTERRUPT_REASON_NONE: + return download::mojom::NetworkRequestStatus::OK; + case download::DOWNLOAD_INTERRUPT_REASON_NETWORK_TIMEOUT: + return download::mojom::NetworkRequestStatus::NETWORK_TIMEOUT; + case download::DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED: + return download::mojom::NetworkRequestStatus::NETWORK_DISCONNECTED; + case download::DOWNLOAD_INTERRUPT_REASON_NETWORK_SERVER_DOWN: + return download::mojom::NetworkRequestStatus::NETWORK_SERVER_DOWN; + case download::DOWNLOAD_INTERRUPT_REASON_SERVER_NO_RANGE: + return download::mojom::NetworkRequestStatus::SERVER_NO_RANGE; + case download::DOWNLOAD_INTERRUPT_REASON_SERVER_CONTENT_LENGTH_MISMATCH: + return download::mojom::NetworkRequestStatus:: + SERVER_CONTENT_LENGTH_MISMATCH; + case download::DOWNLOAD_INTERRUPT_REASON_SERVER_UNREACHABLE: + return download::mojom::NetworkRequestStatus::SERVER_UNREACHABLE; + case download::DOWNLOAD_INTERRUPT_REASON_SERVER_CERT_PROBLEM: + return download::mojom::NetworkRequestStatus::SERVER_CERT_PROBLEM; + case download::DOWNLOAD_INTERRUPT_REASON_USER_CANCELED: + return download::mojom::NetworkRequestStatus::USER_CANCELED; + case download::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED: + return download::mojom::NetworkRequestStatus::NETWORK_FAILED; default: NOTREACHED(); - return mojom::NetworkRequestStatus::NETWORK_FAILED; + return download::mojom::NetworkRequestStatus::NETWORK_FAILED; } } @@ -50,11 +52,12 @@ mojom::NetworkRequestStatus ConvertInterruptReasonToMojoNetworkRequestStatus( DownloadResponseHandler::DownloadResponseHandler( network::ResourceRequest* resource_request, Delegate* delegate, - std::unique_ptr<DownloadSaveInfo> save_info, + std::unique_ptr<download::DownloadSaveInfo> save_info, bool is_parallel_request, bool is_transient, bool fetch_error_body, - DownloadSource download_source, + const std::string& request_origin, + download::DownloadSource download_source, std::vector<GURL> url_chain) : delegate_(delegate), started_(false), @@ -64,12 +67,15 @@ DownloadResponseHandler::DownloadResponseHandler( referrer_(resource_request->referrer), is_transient_(is_transient), fetch_error_body_(fetch_error_body), + request_origin_(request_origin), download_source_(download_source), has_strong_validators_(false), is_partial_request_(save_info_->offset > 0), - abort_reason_(DOWNLOAD_INTERRUPT_REASON_NONE) { - if (!is_parallel_request) - RecordDownloadCountWithSource(UNTHROTTLED_COUNT, download_source); + abort_reason_(download::DOWNLOAD_INTERRUPT_REASON_NONE) { + if (!is_parallel_request) { + download::RecordDownloadCountWithSource(download::UNTHROTTLED_COUNT, + download_source); + } if (resource_request->request_initiator.has_value()) origin_ = resource_request->request_initiator.value().GetURL(); } @@ -90,8 +96,9 @@ void DownloadResponseHandler::OnReceiveResponse( // |RecordDownloadSourcePageTransitionType| here. if (head.headers) { has_strong_validators_ = head.headers->HasStrongValidators(); - RecordDownloadHttpResponseCode(head.headers->response_code()); - RecordDownloadContentDisposition(create_info_->content_disposition); + download::RecordDownloadHttpResponseCode(head.headers->response_code()); + download::RecordDownloadContentDisposition( + create_info_->content_disposition); } // Blink verifies that the requester of this download is allowed to set a @@ -105,27 +112,27 @@ void DownloadResponseHandler::OnReceiveResponse( create_info_->save_info->suggested_name.clear(); } - if (create_info_->result != DOWNLOAD_INTERRUPT_REASON_NONE) - OnResponseStarted(mojom::DownloadStreamHandlePtr()); + if (create_info_->result != download::DOWNLOAD_INTERRUPT_REASON_NONE) + OnResponseStarted(download::mojom::DownloadStreamHandlePtr()); } -std::unique_ptr<DownloadCreateInfo> +std::unique_ptr<download::DownloadCreateInfo> DownloadResponseHandler::CreateDownloadCreateInfo( const network::ResourceResponseHead& head) { // TODO(qinmin): instead of using NetLogWithSource, introduce new logging // class for download. - auto create_info = std::make_unique<DownloadCreateInfo>( + auto create_info = std::make_unique<download::DownloadCreateInfo>( base::Time::Now(), std::move(save_info_)); - DownloadInterruptReason result = + download::DownloadInterruptReason result = head.headers ? HandleSuccessfulServerResponse( *head.headers, create_info->save_info.get(), fetch_error_body_) - : DOWNLOAD_INTERRUPT_REASON_NONE; + : download::DOWNLOAD_INTERRUPT_REASON_NONE; create_info->total_bytes = head.content_length > 0 ? head.content_length : 0; create_info->result = result; - if (result == DOWNLOAD_INTERRUPT_REASON_NONE) + if (result == download::DOWNLOAD_INTERRUPT_REASON_NONE) create_info->remote_address = head.socket_address.host(); create_info->method = method_; create_info->connection_info = head.connection_info; @@ -136,6 +143,7 @@ DownloadResponseHandler::CreateDownloadCreateInfo( create_info->offset = create_info->save_info->offset; create_info->mime_type = head.mime_type; create_info->fetch_error_body = fetch_error_body_; + create_info->request_origin = request_origin_; create_info->download_source = download_source_; HandleResponseHeaders(head.headers.get(), create_info.get()); @@ -147,9 +155,9 @@ void DownloadResponseHandler::OnReceiveRedirect( const network::ResourceResponseHead& head) { if (is_partial_request_) { // A redirect while attempting a partial resumption indicates a potential - // middle box. Trigger another interruption so that the DownloadItem can - // retry. - abort_reason_ = DOWNLOAD_INTERRUPT_REASON_SERVER_UNREACHABLE; + // middle box. Trigger another interruption so that the + // download::DownloadItem can retry. + abort_reason_ = download::DOWNLOAD_INTERRUPT_REASON_SERVER_UNREACHABLE; OnComplete(network::URLLoaderCompletionStatus(net::OK)); return; } @@ -178,8 +186,8 @@ void DownloadResponseHandler::OnStartLoadingResponseBody( if (started_) return; - mojom::DownloadStreamHandlePtr stream_handle = - mojom::DownloadStreamHandle::New(); + download::mojom::DownloadStreamHandlePtr stream_handle = + download::mojom::DownloadStreamHandle::New(); stream_handle->stream = std::move(body); stream_handle->client_request = mojo::MakeRequest(&client_ptr_); OnResponseStarted(std::move(stream_handle)); @@ -187,7 +195,7 @@ void DownloadResponseHandler::OnStartLoadingResponseBody( void DownloadResponseHandler::OnComplete( const network::URLLoaderCompletionStatus& status) { - DownloadInterruptReason reason = HandleRequestCompletionStatus( + download::DownloadInterruptReason reason = HandleRequestCompletionStatus( static_cast<net::Error>(status.error_code), has_strong_validators_, cert_status_, abort_reason_); @@ -204,11 +212,11 @@ void DownloadResponseHandler::OnComplete( create_info_ = CreateDownloadCreateInfo(network::ResourceResponseHead()); create_info_->result = reason; - OnResponseStarted(mojom::DownloadStreamHandlePtr()); + OnResponseStarted(download::mojom::DownloadStreamHandlePtr()); } void DownloadResponseHandler::OnResponseStarted( - mojom::DownloadStreamHandlePtr stream_handle) { + download::mojom::DownloadStreamHandlePtr stream_handle) { started_ = true; delegate_->OnResponseStarted(std::move(create_info_), std::move(stream_handle)); |