summaryrefslogtreecommitdiffstats
path: root/net/url_request
diff options
context:
space:
mode:
authorjcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-07 00:19:38 +0000
committerjcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-07 00:19:38 +0000
commit88e7d5688f95703ac9a6ddac4752098c407223e5 (patch)
tree9e10232d9348bf1e3c2f739cacfb06669dfdef64 /net/url_request
parenta5ded246b87ab09ebcf770ffc5c157fb4efaddac (diff)
downloadchromium_src-88e7d5688f95703ac9a6ddac4752098c407223e5.zip
chromium_src-88e7d5688f95703ac9a6ddac4752098c407223e5.tar.gz
chromium_src-88e7d5688f95703ac9a6ddac4752098c407223e5.tar.bz2
This CL adds a way to specify the security info when canceling a URLRequest.
This allows to tag a request on the renderer side with its security info. It is useful for the "frame info" dialog. When showing that dialog for blocked frames, the security info can be retrieved and users can see the cert details for the blocked frame. TEST=Open a page containing a frame served over bad HTTPS. The frame is blocked (replaced with a warning message). Right-click, select "Frame info". The dialog should have a "show cert" button which when pressed should show the frame's bad cert. BUG=2853 Review URL: http://codereview.chromium.org/7276 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11179 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/url_request')
-rw-r--r--net/url_request/url_request.cc18
-rw-r--r--net/url_request/url_request.h17
-rw-r--r--net/url_request/url_request_job.h3
3 files changed, 32 insertions, 6 deletions
diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc
index fefd24c..3de8439 100644
--- a/net/url_request/url_request.cc
+++ b/net/url_request/url_request.cc
@@ -260,10 +260,23 @@ void URLRequest::Start() {
}
void URLRequest::Cancel() {
- CancelWithError(net::ERR_ABORTED);
+ DoCancel(net::ERR_ABORTED, net::SSLInfo());
}
-void URLRequest::CancelWithError(int os_error) {
+void URLRequest::SimulateError(int os_error) {
+ DoCancel(os_error, net::SSLInfo());
+}
+
+void URLRequest::SimulateSSLError(int os_error, const net::SSLInfo& ssl_info) {
+ // This should only be called on a started request.
+ if (!is_pending_ || !job_ || job_->has_response_started()) {
+ NOTREACHED();
+ return;
+ }
+ DoCancel(os_error, ssl_info);
+}
+
+void URLRequest::DoCancel(int os_error, const net::SSLInfo& ssl_info) {
DCHECK(os_error < 0);
// If the URL request already has an error status, then canceling is a no-op.
@@ -271,6 +284,7 @@ void URLRequest::CancelWithError(int os_error) {
if (status_.is_success()) {
status_.set_status(URLRequestStatus::CANCELED);
status_.set_os_error(os_error);
+ response_info_.ssl_info = ssl_info;
}
// There's nothing to do if we are not waiting on a Job.
diff --git a/net/url_request/url_request.h b/net/url_request/url_request.h
index f4aee3a..4309689 100644
--- a/net/url_request/url_request.h
+++ b/net/url_request/url_request.h
@@ -354,10 +354,15 @@ class URLRequest {
// no effect once the response has completed.
void Cancel();
- // Similar to Cancel but sets the error to |os_error| (see net_error_list.h
- // for values) instead of net::ERR_ABORTED.
- // Used to attach a reason for canceling a request.
- void CancelWithError(int os_error);
+ // Cancels the request and sets the error to |os_error| (see net_error_list.h
+ // for values).
+ void SimulateError(int os_error);
+
+ // Cancels the request and sets the error to |os_error| (see net_error_list.h
+ // for values) and attaches |ssl_info| as the SSLInfo for that request. This
+ // is useful to attach a certificate and certificate error to a canceled
+ // request.
+ void SimulateSSLError(int os_error, const net::SSLInfo& ssl_info);
// Read initiates an asynchronous read from the response, and must only
// be called after the OnResponseStarted callback is received with a
@@ -435,6 +440,10 @@ class URLRequest {
// been orphaned.
void OrphanJob();
+ // Cancels the request and set the error and ssl info for this request to the
+ // passed values.
+ void DoCancel(int os_error, const net::SSLInfo& ssl_info);
+
// Discard headers which have meaning in POST (Content-Length, Content-Type,
// Origin).
static std::string StripPostSpecificHeaders(const std::string& headers);
diff --git a/net/url_request/url_request_job.h b/net/url_request/url_request_job.h
index fae5a1b..aac3768 100644
--- a/net/url_request/url_request_job.h
+++ b/net/url_request/url_request_job.h
@@ -192,6 +192,9 @@ class URLRequestJob : public base::RefCountedThreadSafe<URLRequestJob> {
expected_content_size_ = size;
}
+ // Whether we have processed the response for that request yet.
+ bool has_response_started() const { return has_handled_response_; }
+
protected:
// Notifies the job that headers have been received.
void NotifyHeadersComplete();