diff options
author | jcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-08 07:41:31 +0000 |
---|---|---|
committer | jcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-08 07:41:31 +0000 |
commit | c4891b363f7d9ca534880d25524adeb810ff3ff0 (patch) | |
tree | 8af2885644966f047a688b66cd2d16f9db1afd9c /chrome/browser/ssl | |
parent | b0c819facfd2222853b1fe69a2e0891e17db6791 (diff) | |
download | chromium_src-c4891b363f7d9ca534880d25524adeb810ff3ff0.zip chromium_src-c4891b363f7d9ca534880d25524adeb810ff3ff0.tar.gz chromium_src-c4891b363f7d9ca534880d25524adeb810ff3ff0.tar.bz2 |
Landing again the CL that adds security info to canceled requests (last time it was causing sync XMLHttpRequests to hang, breaking many layout tests).
TBR=darin
Review URL: http://codereview.chromium.org/39321
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11221 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/ssl')
-rw-r--r-- | chrome/browser/ssl/ssl_manager.cc | 9 | ||||
-rw-r--r-- | chrome/browser/ssl/ssl_manager.h | 13 |
2 files changed, 17 insertions, 5 deletions
diff --git a/chrome/browser/ssl/ssl_manager.cc b/chrome/browser/ssl/ssl_manager.cc index bc95a53..58d7acb 100644 --- a/chrome/browser/ssl/ssl_manager.cc +++ b/chrome/browser/ssl/ssl_manager.cc @@ -338,7 +338,11 @@ void SSLManager::ErrorHandler::CompleteCancelRequest(int error) { // The request can be NULL if it was cancelled by the renderer (as the // result of the user navigating to a new page from the location bar). DLOG(INFO) << "CompleteCancelRequest() url: " << request->url().spec(); - request->CancelWithError(error); + SSLManager::CertError* cert_error = AsCertError(); + if (cert_error) + request->SimulateSSLError(error, cert_error->ssl_info()); + else + request->SimulateError(error); } request_has_been_notified_ = true; @@ -591,7 +595,8 @@ void SSLManager::DidCommitProvisionalLoad( // An HTTPS response may not have a certificate for some reason. When that // happens, use the unauthenticated (HTTP) rather than the authentication // broken security style so that we can detect this error condition. - if (net::IsCertStatusError(ssl_cert_status)) { + if (net::IsCertStatusError(ssl_cert_status) && + !details->is_content_filtered) { changed |= SetMaxSecurityStyle(SECURITY_STYLE_AUTHENTICATION_BROKEN); if (!details->is_main_frame && !details->entry->ssl().has_unsafe_content()) { diff --git a/chrome/browser/ssl/ssl_manager.h b/chrome/browser/ssl/ssl_manager.h index 0b1842e..63cfce4 100644 --- a/chrome/browser/ssl/ssl_manager.h +++ b/chrome/browser/ssl/ssl_manager.h @@ -49,6 +49,8 @@ class WebContents; class SSLManager : public NotificationObserver { public: + class CertError; + // An ErrorHandler carries information from the IO thread to the UI thread // and is dispatched to the appropriate SSLManager when it arrives on the // UI thread. Subclasses should override the OnDispatched/OnDispatchFailed @@ -63,6 +65,8 @@ class SSLManager : public NotificationObserver { public: virtual ~ErrorHandler() { } + virtual CertError* AsCertError() { return NULL; } + // Find the appropriate SSLManager for the URLRequest and begin handling // this error. // @@ -167,7 +171,7 @@ class SSLManager : public NotificationObserver { bool request_has_been_notified_; // A flag to make sure we notify the // URLRequest exactly once. - DISALLOW_EVIL_CONSTRUCTORS(ErrorHandler); + DISALLOW_COPY_AND_ASSIGN(ErrorHandler); }; // A CertError represents an error that occurred with the certificate in an @@ -175,6 +179,9 @@ class SSLManager : public NotificationObserver { // thread and allows us to cancel/continue a request it is associated with. class CertError : public ErrorHandler { public: + + virtual CertError* AsCertError() { return this; } + // These accessors are available on either thread const net::SSLInfo& ssl_info() const { return ssl_info_; } int cert_error() const { return cert_error_; } @@ -206,7 +213,7 @@ class SSLManager : public NotificationObserver { // that error. ResourceType::Type resource_type_; - DISALLOW_EVIL_CONSTRUCTORS(CertError); + DISALLOW_COPY_AND_ASSIGN(CertError); }; // The MixedContentHandler class is used to query what to do with @@ -224,7 +231,7 @@ class SSLManager : public NotificationObserver { virtual void OnDispatched() { manager()->OnMixedContent(this); } private: - DISALLOW_EVIL_CONSTRUCTORS(MixedContentHandler); + DISALLOW_COPY_AND_ASSIGN(MixedContentHandler); }; // The SSLManager will ask its delegate to decide how to handle events |