| Index: net/test/url_request/url_request_mock_data_job.cc
|
| diff --git a/net/test/url_request/url_request_mock_data_job.cc b/net/test/url_request/url_request_mock_data_job.cc
|
| index b9ef385bcd2d54ba8c1f9d2f648f41a84cab5056..3b3f9d36e756efd42208fe92209f1f575cfc4014 100644
|
| --- a/net/test/url_request/url_request_mock_data_job.cc
|
| +++ b/net/test/url_request/url_request_mock_data_job.cc
|
| @@ -15,6 +15,7 @@
|
| #include "net/http/http_request_headers.h"
|
| #include "net/http/http_response_headers.h"
|
| #include "net/http/http_util.h"
|
| +#include "net/ssl/ssl_cert_request_info.h"
|
| #include "net/url_request/url_request_filter.h"
|
|
|
| namespace net {
|
| @@ -47,16 +48,25 @@ int GetRepeatCountFromRequest(const URLRequest& request) {
|
| return repeat_count;
|
| }
|
|
|
| +// Gets the requestcert flag from URL.
|
| +bool GetRequestClientCertificate(const URLRequest& request) {
|
| + std::string ignored_value;
|
| + return GetValueForKeyInQuery(request.url(), "requestcert", &ignored_value);
|
| +}
|
| +
|
| GURL GetMockUrl(const std::string& scheme,
|
| const std::string& hostname,
|
| const std::string& data,
|
| - int data_repeat_count) {
|
| + int data_repeat_count,
|
| + bool request_client_certificate) {
|
| DCHECK_GT(data_repeat_count, 0);
|
| std::string url(scheme + "://" + hostname + "/");
|
| url.append("?data=");
|
| url.append(data);
|
| url.append("&repeat=");
|
| url.append(base::IntToString(data_repeat_count));
|
| + if (request_client_certificate)
|
| + url += "&requestcert=1";
|
| return GURL(url);
|
| }
|
|
|
| @@ -71,7 +81,8 @@ class MockJobInterceptor : public URLRequestInterceptor {
|
| NetworkDelegate* network_delegate) const override {
|
| return new URLRequestMockDataJob(request, network_delegate,
|
| GetDataFromRequest(*request),
|
| - GetRepeatCountFromRequest(*request));
|
| + GetRepeatCountFromRequest(*request),
|
| + GetRequestClientCertificate(*request));
|
| }
|
|
|
| private:
|
| @@ -83,9 +94,11 @@ class MockJobInterceptor : public URLRequestInterceptor {
|
| URLRequestMockDataJob::URLRequestMockDataJob(URLRequest* request,
|
| NetworkDelegate* network_delegate,
|
| const std::string& data,
|
| - int data_repeat_count)
|
| + int data_repeat_count,
|
| + bool request_client_certificate)
|
| : URLRequestJob(request, network_delegate),
|
| data_offset_(0),
|
| + request_client_certificate_(request_client_certificate),
|
| weak_factory_(this) {
|
| DCHECK_GT(data_repeat_count, 0);
|
| for (int i = 0; i < data_repeat_count; ++i) {
|
| @@ -118,6 +131,13 @@ int URLRequestMockDataJob::GetResponseCode() const {
|
| return info.headers->response_code();
|
| }
|
|
|
| +void URLRequestMockDataJob::ContinueWithCertificate(
|
| + X509Certificate* client_cert,
|
| + SSLPrivateKey* client_private_key) {
|
| + DCHECK(request_client_certificate_);
|
| + NotifyHeadersComplete();
|
| +}
|
| +
|
| // Public virtual version.
|
| void URLRequestMockDataJob::GetResponseInfo(HttpResponseInfo* info) {
|
| // Forward to private const version.
|
| @@ -142,6 +162,11 @@ void URLRequestMockDataJob::StartAsync() {
|
| return;
|
|
|
| set_expected_content_size(data_.length());
|
| + if (request_client_certificate_) {
|
| + scoped_refptr<SSLCertRequestInfo> request_all(new SSLCertRequestInfo());
|
| + NotifyCertificateRequested(request_all.get());
|
| + return;
|
| + }
|
| NotifyHeadersComplete();
|
| }
|
|
|
| @@ -173,12 +198,16 @@ GURL URLRequestMockDataJob::GetMockHttpsUrl(const std::string& data,
|
| return GetMockHttpsUrlForHostname(kMockHostname, data, repeat_count);
|
| }
|
|
|
| +GURL URLRequestMockDataJob::GetMockUrlForClientCertificateRequest() {
|
| + return GetMockUrl("https", kMockHostname, "data", 1, true);
|
| +}
|
| +
|
| // static
|
| GURL URLRequestMockDataJob::GetMockHttpUrlForHostname(
|
| const std::string& hostname,
|
| const std::string& data,
|
| int repeat_count) {
|
| - return GetMockUrl("http", hostname, data, repeat_count);
|
| + return GetMockUrl("http", hostname, data, repeat_count, false);
|
| }
|
|
|
| // static
|
| @@ -186,7 +215,7 @@ GURL URLRequestMockDataJob::GetMockHttpsUrlForHostname(
|
| const std::string& hostname,
|
| const std::string& data,
|
| int repeat_count) {
|
| - return GetMockUrl("https", hostname, data, repeat_count);
|
| + return GetMockUrl("https", hostname, data, repeat_count, false);
|
| }
|
|
|
| } // namespace net
|
|
|