Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(923)

Unified Diff: net/http/http_cache_transaction.cc

Issue 6804032: Add TLS-SRP (RFC 5054) support Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: remove "httpsv" scheme, minor NSS/OpenSSL changes Created 9 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/http/http_cache_transaction.h ('k') | net/http/http_cache_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/http/http_cache_transaction.cc
diff --git a/net/http/http_cache_transaction.cc b/net/http/http_cache_transaction.cc
index 32386f06a4b5be24d60e67b72abf64a1e8ee5147..4ee0af1162ff7c126717330e6f5720acfc99e3f1 100644
--- a/net/http/http_cache_transaction.cc
+++ b/net/http/http_cache_transaction.cc
@@ -18,11 +18,14 @@
#include "base/ref_counted.h"
#include "base/string_util.h"
#include "base/time.h"
+#include "base/utf_string_conversions.h"
+#include "net/base/auth.h"
#include "net/base/cert_status_flags.h"
#include "net/base/io_buffer.h"
#include "net/base/load_flags.h"
#include "net/base/net_errors.h"
#include "net/base/net_log.h"
+#include "net/base/net_util.h"
#include "net/base/ssl_cert_request_info.h"
#include "net/base/ssl_config_service.h"
#include "net/disk_cache/disk_cache.h"
@@ -105,6 +108,7 @@ HttpCache::Transaction::Transaction(HttpCache* cache)
new_entry_(NULL),
network_trans_(NULL),
callback_(NULL),
+ tls_login_auth_data_(NULL),
new_response_(NULL),
mode_(NONE),
target_state_(STATE_NONE),
@@ -293,6 +297,37 @@ int HttpCache::Transaction::RestartWithCertificate(
return rv;
}
+void HttpCache::Transaction::SetTLSLoginAuthData(AuthData* auth_data) {
+ if (network_trans_.get())
+ network_trans_->SetTLSLoginAuthData(auth_data);
+ tls_login_auth_data_ = auth_data;
+}
+
+int HttpCache::Transaction::RestartWithTLSLogin(CompletionCallback *callback) {
+ DCHECK(callback);
+
+ // Ensure that we only have one asynchronous call at a time.
+ DCHECK(!callback_);
+
+ if (!cache_)
+ return ERR_UNEXPECTED;
+
+ int rv;
+
+ if (network_trans_.get()) {
+ rv = RestartNetworkRequestWithTLSLogin();
+ } else {
+ // Start the transaction.
+ next_state_ = STATE_SEND_REQUEST;
+ rv = DoLoop(OK);
+ }
+
+ if (rv == ERR_IO_PENDING)
+ callback_ = callback;
+
+ return rv;
+}
+
int HttpCache::Transaction::RestartWithAuth(
const string16& username,
const string16& password,
@@ -382,7 +417,9 @@ const HttpResponseInfo* HttpCache::Transaction::GetResponseInfo() const {
if (auth_response_.headers)
return &auth_response_;
return (response_.headers || response_.ssl_info.cert ||
- response_.cert_request_info) ? &response_ : NULL;
+ !response_.ssl_info.tls_username.empty() ||
+ response_.cert_request_info || response_.login_request_info) ?
+ &response_ : NULL;
}
LoadState HttpCache::Transaction::GetLoadState() const {
@@ -642,6 +679,11 @@ int HttpCache::Transaction::DoSendRequest() {
if (rv != OK)
return rv;
+ if (tls_login_auth_data_ &&
+ tls_login_auth_data_->state == AUTH_STATE_HAVE_AUTH) {
+ network_trans_->SetTLSLoginAuthData(tls_login_auth_data_);
+ }
+
next_state_ = STATE_SEND_REQUEST_COMPLETE;
rv = network_trans_->Start(request_, &io_callback_, net_log_);
return rv;
@@ -666,6 +708,11 @@ int HttpCache::Transaction::DoSendRequestComplete(int result) {
const HttpResponseInfo* response = network_trans_->GetResponseInfo();
DCHECK(response);
response_.cert_request_info = response->cert_request_info;
+ } else if (result == ERR_TLS_CLIENT_LOGIN_NEEDED ||
+ result == ERR_TLS_CLIENT_LOGIN_FAILED) {
+ const HttpResponseInfo* response = network_trans_->GetResponseInfo();
+ DCHECK(response);
+ response_.login_request_info = response->login_request_info;
}
return result;
}
@@ -1571,6 +1618,18 @@ int HttpCache::Transaction::RestartNetworkRequestWithCertificate(
return rv;
}
+int HttpCache::Transaction::RestartNetworkRequestWithTLSLogin() {
+ DCHECK(mode_ & WRITE || mode_ == NONE);
+ DCHECK(network_trans_.get());
+ DCHECK_EQ(STATE_NONE, next_state_);
+
+ next_state_ = STATE_SEND_REQUEST_COMPLETE;
+ int rv = network_trans_->RestartWithTLSLogin(&io_callback_);
+ if (rv != ERR_IO_PENDING)
+ return DoLoop(rv);
+ return rv;
+}
+
int HttpCache::Transaction::RestartNetworkRequestWithAuth(
const string16& username,
const string16& password) {
« no previous file with comments | « net/http/http_cache_transaction.h ('k') | net/http/http_cache_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698