Index: chrome/browser/local_discovery/privet_http_impl.cc |
diff --git a/chrome/browser/local_discovery/privet_http_impl.cc b/chrome/browser/local_discovery/privet_http_impl.cc |
index 4c534cee1cfc4b62ec8927aa009b6ef7715ffc9e..b3e168a88aa31bb4d0ec0bf3cacd520bf12827be 100644 |
--- a/chrome/browser/local_discovery/privet_http_impl.cc |
+++ b/chrome/browser/local_discovery/privet_http_impl.cc |
@@ -11,19 +11,15 @@ |
#include "base/command_line.h" |
#include "base/location.h" |
#include "base/rand_util.h" |
-#include "base/single_thread_task_runner.h" |
#include "base/strings/string_number_conversions.h" |
#include "base/strings/utf_string_conversions.h" |
#include "base/thread_task_runner_handle.h" |
+#include "chrome/browser/extensions/api/gcd_private/privet_v3_context_getter.h" |
#include "chrome/browser/local_discovery/privet_constants.h" |
#include "chrome/common/chrome_content_client.h" |
#include "chrome/common/chrome_switches.h" |
#include "chrome/common/cloud_print/cloud_print_constants.h" |
#include "net/base/url_util.h" |
-#include "net/cert/cert_verifier.h" |
-#include "net/cert/cert_verify_result.h" |
-#include "net/url_request/url_request_context.h" |
-#include "net/url_request/url_request_context_builder.h" |
#include "url/gurl.h" |
#if defined(ENABLE_PRINT_PREVIEW) |
@@ -89,85 +85,6 @@ GURL CreatePrivetParamURL(const std::string& path, |
return url.ReplaceComponents(replacements); |
} |
-// Class verifies certificate by its fingerprint received using different |
-// channel. It's the only know information about device with self-signed |
-// certificate. |
-class FingerprintVerifier : public net::CertVerifier { |
- public: |
- explicit FingerprintVerifier( |
- const net::SHA256HashValue& certificate_fingerprint) |
- : certificate_fingerprint_(certificate_fingerprint) {} |
- |
- int Verify(net::X509Certificate* cert, |
- const std::string& hostname, |
- const std::string& ocsp_response, |
- int flags, |
- net::CRLSet* crl_set, |
- net::CertVerifyResult* verify_result, |
- const net::CompletionCallback& callback, |
- scoped_ptr<Request>* out_req, |
- const net::BoundNetLog& net_log) override { |
- // Mark certificate as invalid as we didn't check it. |
- verify_result->Reset(); |
- verify_result->verified_cert = cert; |
- verify_result->cert_status = net::CERT_STATUS_INVALID; |
- |
- auto fingerprint = |
- net::X509Certificate::CalculateFingerprint256(cert->os_cert_handle()); |
- |
- return certificate_fingerprint_.Equals(fingerprint) ? net::OK |
- : net::ERR_CERT_INVALID; |
- } |
- |
- private: |
- net::SHA256HashValue certificate_fingerprint_; |
- |
- DISALLOW_COPY_AND_ASSIGN(FingerprintVerifier); |
-}; |
- |
-class PrivetContextGetter : public net::URLRequestContextGetter { |
- public: |
- PrivetContextGetter( |
- const scoped_refptr<base::SingleThreadTaskRunner>& net_task_runner, |
- const net::SHA256HashValue& certificate_fingerprint) |
- : verifier_(new FingerprintVerifier(certificate_fingerprint)), |
- net_task_runner_(net_task_runner) { |
- CHECK(base::CommandLine::ForCurrentProcess()->HasSwitch( |
- switches::kEnablePrivetV3)); |
- } |
- |
- net::URLRequestContext* GetURLRequestContext() override { |
- DCHECK(net_task_runner_->BelongsToCurrentThread()); |
- if (!context_) { |
- net::URLRequestContextBuilder builder; |
- builder.set_proxy_service(net::ProxyService::CreateDirect()); |
- builder.SetSpdyAndQuicEnabled(false, false); |
- builder.DisableHttpCache(); |
- builder.SetCertVerifier(verifier_.Pass()); |
- builder.set_user_agent(::GetUserAgent()); |
- context_ = builder.Build(); |
- } |
- return context_.get(); |
- } |
- |
- scoped_refptr<base::SingleThreadTaskRunner> GetNetworkTaskRunner() |
- const override { |
- return net_task_runner_; |
- } |
- |
- protected: |
- ~PrivetContextGetter() override { |
- DCHECK(net_task_runner_->BelongsToCurrentThread()); |
- } |
- |
- private: |
- scoped_ptr<net::CertVerifier> verifier_; |
- scoped_ptr<net::URLRequestContext> context_; |
- scoped_refptr<base::SingleThreadTaskRunner> net_task_runner_; |
- |
- DISALLOW_COPY_AND_ASSIGN(PrivetContextGetter); |
-}; |
- |
} // namespace |
PrivetInfoOperationImpl::PrivetInfoOperationImpl( |
@@ -826,7 +743,7 @@ void PrivetHTTPClientImpl::SwitchToHttps( |
const net::SHA256HashValue& certificate_fingerprint) { |
use_https_ = true; |
host_port_.set_port(port); |
- context_getter_ = new PrivetContextGetter( |
+ context_getter_ = new extensions::PrivetV3ContextGetter( |
context_getter_->GetNetworkTaskRunner(), certificate_fingerprint); |
} |