1 // Copyright 2015 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "net/test/url_request/ssl_certificate_error_job.h" 6 7 #include <string> 8 9 #include "base/functional/bind.h" 10 #include "base/strings/stringprintf.h" 11 #include "base/task/single_thread_task_runner.h" 12 #include "net/ssl/ssl_info.h" 13 #include "net/url_request/url_request.h" 14 #include "net/url_request/url_request_filter.h" 15 #include "net/url_request/url_request_interceptor.h" 16 17 namespace net { 18 19 namespace { 20 21 const char kMockHostname[] = "mock.ssl.cert.error.request"; 22 23 class MockJobInterceptor : public URLRequestInterceptor { 24 public: 25 MockJobInterceptor() = default; 26 27 MockJobInterceptor(const MockJobInterceptor&) = delete; 28 MockJobInterceptor& operator=(const MockJobInterceptor&) = delete; 29 30 ~MockJobInterceptor() override = default; 31 32 // URLRequestJobFactory::ProtocolHandler implementation: MaybeInterceptRequest(URLRequest * request) const33 std::unique_ptr<URLRequestJob> MaybeInterceptRequest( 34 URLRequest* request) const override { 35 return std::make_unique<SSLCertificateErrorJob>(request); 36 } 37 }; 38 39 } // namespace 40 SSLCertificateErrorJob(URLRequest * request)41SSLCertificateErrorJob::SSLCertificateErrorJob(URLRequest* request) 42 : URLRequestJob(request) {} 43 44 SSLCertificateErrorJob::~SSLCertificateErrorJob() = default; 45 Start()46void SSLCertificateErrorJob::Start() { 47 base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask( 48 FROM_HERE, base::BindOnce(&SSLCertificateErrorJob::NotifyError, 49 weak_factory_.GetWeakPtr())); 50 } 51 AddUrlHandler()52void SSLCertificateErrorJob::AddUrlHandler() { 53 URLRequestFilter* filter = URLRequestFilter::GetInstance(); 54 filter->AddHostnameInterceptor("https", kMockHostname, 55 std::make_unique<MockJobInterceptor>()); 56 } 57 GetMockUrl()58GURL SSLCertificateErrorJob::GetMockUrl() { 59 return GURL(base::StringPrintf("https://%s", kMockHostname)); 60 } 61 NotifyError()62void SSLCertificateErrorJob::NotifyError() { 63 SSLInfo info; 64 info.cert_status = CERT_STATUS_DATE_INVALID; 65 NotifySSLCertificateError(net::ERR_CERT_DATE_INVALID, info, true); 66 } 67 68 } // namespace net 69