summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ssl
diff options
context:
space:
mode:
authorjcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-08 07:41:31 +0000
committerjcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-08 07:41:31 +0000
commitc4891b363f7d9ca534880d25524adeb810ff3ff0 (patch)
tree8af2885644966f047a688b66cd2d16f9db1afd9c /chrome/browser/ssl
parentb0c819facfd2222853b1fe69a2e0891e17db6791 (diff)
downloadchromium_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.cc9
-rw-r--r--chrome/browser/ssl/ssl_manager.h13
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