Index: content/browser/download/download_resource_handler.cc |
diff --git a/content/browser/download/download_resource_handler.cc b/content/browser/download/download_resource_handler.cc |
index 0a19163c9c3f8ae40a9532e13780c89acac15fab..e24914043d268632599fea825caa20483bc552dc 100644 |
--- a/content/browser/download/download_resource_handler.cc |
+++ b/content/browser/download/download_resource_handler.cc |
@@ -20,6 +20,7 @@ |
#include "content/browser/download/download_stats.h" |
#include "content/browser/loader/resource_dispatcher_host_impl.h" |
#include "content/browser/loader/resource_request_info_impl.h" |
+#include "content/common/ssl_status_serialization.h" |
#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/download_interrupt_reasons.h" |
#include "content/public/browser/download_item.h" |
@@ -97,6 +98,22 @@ void InitializeDownloadTabInfoOnUIThread( |
} |
} |
+bool IsSSLCertificateError(const std::string& security_info) { |
+ int ssl_cert_id; |
+ net::CertStatus ssl_cert_status; |
+ int ssl_security_bits; |
+ int ssl_connection_status; |
+ SignedCertificateTimestampIDStatusList ssl_signed_certificate_timestamp_ids; |
+ if (!DeserializeSecurityInfo(security_info, |
+ &ssl_cert_id, |
+ &ssl_cert_status, |
+ &ssl_security_bits, |
+ &ssl_connection_status, |
+ &ssl_signed_certificate_timestamp_ids)) |
asanka
2014/07/11 18:13:53
Nit: Formatting seems off. "git cl format" ?
Note
|
+ return false; |
+ return net::IsCertStatusError(ssl_cert_status); |
+} |
+ |
} // namespace |
const int DownloadResourceHandler::kDownloadByteStreamSize = 100 * 1024; |
@@ -383,7 +400,10 @@ void DownloadResourceHandler::OnResponseCompleted( |
// to a user action. |
// TODO(ahendrickson) -- Find a better set of codes to use here, as |
// CANCELED/ERR_ABORTED can occur for reasons other than user cancel. |
- reason = DOWNLOAD_INTERRUPT_REASON_USER_CANCELED; |
+ if (IsSSLCertificateError(security_info)) |
asanka
2014/07/11 18:13:53
if (net::IsCertStatusError(request()->ssl_info().c
|
+ reason = DOWNLOAD_INTERRUPT_REASON_SERVER_CERT_PROBLEM; |
+ else |
+ reason = DOWNLOAD_INTERRUPT_REASON_USER_CANCELED; |
} |
if (status.is_success() && |
@@ -414,6 +434,10 @@ void DownloadResourceHandler::OnResponseCompleted( |
// If we haven't received data when we get this error, we won't. |
reason = DOWNLOAD_INTERRUPT_REASON_SERVER_NO_RANGE; |
break; |
+ case net::HTTP_UNAUTHORIZED: |
+ // Server didn't authorize this request. |
+ reason = DOWNLOAD_INTERRUPT_REASON_SERVER_UNAUTHORIZED; |
+ break; |
default: // All other errors. |
// Redirection and informational codes should have been handled earlier |
// in the stack. |