| Index: chrome/browser/net/certificate_error_reporter_unittest.cc
|
| diff --git a/chrome/browser/net/certificate_error_reporter_unittest.cc b/chrome/browser/net/certificate_error_reporter_unittest.cc
|
| index cc6fee791297d84342b26bed3394b335e7666a35..f9054cd5cd054e625f6f477657b97bf6660bb88d 100644
|
| --- a/chrome/browser/net/certificate_error_reporter_unittest.cc
|
| +++ b/chrome/browser/net/certificate_error_reporter_unittest.cc
|
| @@ -19,6 +19,7 @@
|
| #include "chrome/browser/net/cert_logger.pb.h"
|
| #include "chrome/common/chrome_paths.h"
|
| #include "content/public/browser/browser_thread.h"
|
| +#include "crypto/curve25519.h"
|
| #include "net/base/load_flags.h"
|
| #include "net/base/network_delegate_impl.h"
|
| #include "net/base/test_data_directory.h"
|
| @@ -47,6 +48,7 @@ const char kHostname[] = "test.mail.google.com";
|
| const char kSecondRequestHostname[] = "test2.mail.google.com";
|
| const char kDummyFailureLog[] = "dummy failure log";
|
| const char kTestCertFilename[] = "test_mail_google_com.pem";
|
| +const uint32 kServerPublicKeyVersion = 1;
|
|
|
| SSLInfo GetTestSSLInfo() {
|
| SSLInfo info;
|
| @@ -83,7 +85,9 @@ void EnableUrlRequestMocks(bool enable) {
|
| // |GetTestSSLInfo()|). The hostname sent in the report will be erased
|
| // from |expect_hostnames|.
|
| void CheckUploadData(URLRequest* request,
|
| - std::set<std::string>* expect_hostnames) {
|
| + std::set<std::string>* expect_hostnames,
|
| + bool encrypted,
|
| + const uint8* server_private_key) {
|
| const net::UploadDataStream* upload = request->get_upload();
|
| ASSERT_TRUE(upload);
|
| ASSERT_TRUE(upload->GetElementReaders());
|
| @@ -93,9 +97,27 @@ void CheckUploadData(URLRequest* request,
|
| (*upload->GetElementReaders())[0]->AsBytesReader();
|
| ASSERT_TRUE(reader);
|
| std::string upload_data(reader->bytes(), reader->length());
|
| - chrome_browser_net::CertLoggerRequest uploaded_request;
|
|
|
| - uploaded_request.ParseFromString(upload_data);
|
| + chrome_browser_net::CertLoggerRequest uploaded_request;
|
| +#if defined(USE_OPENSSL)
|
| + if (encrypted) {
|
| + chrome_browser_net::EncryptedCertLoggerRequest encrypted_request;
|
| + encrypted_request.ParseFromString(upload_data);
|
| + EXPECT_EQ(kServerPublicKeyVersion,
|
| + encrypted_request.server_public_key_version());
|
| + EXPECT_EQ(chrome_browser_net::EncryptedCertLoggerRequest::
|
| + AEAD_ECDH_AES_128_CTR_HMAC_SHA256,
|
| + encrypted_request.algorithm());
|
| + ASSERT_TRUE(
|
| + chrome_browser_net::CertificateErrorReporter::
|
| + DecryptCertificateErrorReport(server_private_key, encrypted_request,
|
| + &uploaded_request));
|
| + } else {
|
| + ASSERT_TRUE(uploaded_request.ParseFromString(upload_data));
|
| + }
|
| +#else
|
| + ASSERT_TRUE(uploaded_request.ParseFromString(upload_data));
|
| +#endif
|
|
|
| EXPECT_EQ(1u, expect_hostnames->count(uploaded_request.hostname()));
|
| expect_hostnames->erase(uploaded_request.hostname());
|
| @@ -116,7 +138,11 @@ class TestCertificateErrorReporterNetworkDelegate : public NetworkDelegateImpl {
|
| : url_request_destroyed_callback_(base::Bind(&base::DoNothing)),
|
| all_url_requests_destroyed_callback_(base::Bind(&base::DoNothing)),
|
| num_requests_(0),
|
| - expect_cookies_(false) {}
|
| + expect_cookies_(false),
|
| + expect_request_encrypted_(false) {
|
| + memset(server_private_key_, 1, sizeof(server_private_key_));
|
| + crypto::curve25519::ScalarBaseMult(server_private_key_, server_public_key_);
|
| + }
|
|
|
| ~TestCertificateErrorReporterNetworkDelegate() override {}
|
|
|
| @@ -145,6 +171,10 @@ class TestCertificateErrorReporterNetworkDelegate : public NetworkDelegateImpl {
|
| expect_cookies_ = expect_cookies;
|
| }
|
|
|
| + void set_expect_request_encrypted(bool expect_request_encrypted) {
|
| + expect_request_encrypted_ = expect_request_encrypted;
|
| + }
|
| +
|
| // NetworkDelegateImpl implementation
|
| int OnBeforeURLRequest(URLRequest* request,
|
| const CompletionCallback& callback,
|
| @@ -162,7 +192,8 @@ class TestCertificateErrorReporterNetworkDelegate : public NetworkDelegateImpl {
|
| }
|
|
|
| std::string uploaded_request_hostname;
|
| - CheckUploadData(request, &expect_hostnames_);
|
| + CheckUploadData(request, &expect_hostnames_, expect_request_encrypted_,
|
| + server_private_key_);
|
| expect_hostnames_.erase(uploaded_request_hostname);
|
| return net::OK;
|
| }
|
| @@ -173,6 +204,8 @@ class TestCertificateErrorReporterNetworkDelegate : public NetworkDelegateImpl {
|
| all_url_requests_destroyed_callback_.Run();
|
| }
|
|
|
| + const uint8* server_public_key() { return server_public_key_; }
|
| +
|
| private:
|
| base::Closure url_request_destroyed_callback_;
|
| base::Closure all_url_requests_destroyed_callback_;
|
| @@ -180,6 +213,10 @@ class TestCertificateErrorReporterNetworkDelegate : public NetworkDelegateImpl {
|
| GURL expect_url_;
|
| std::set<std::string> expect_hostnames_;
|
| bool expect_cookies_;
|
| + bool expect_request_encrypted_;
|
| +
|
| + uint8 server_public_key_[32];
|
| + uint8 server_private_key_[32];
|
|
|
| DISALLOW_COPY_AND_ASSIGN(TestCertificateErrorReporterNetworkDelegate);
|
| };
|
| @@ -237,11 +274,24 @@ TEST_F(CertificateErrorReporterTest, PinningViolationSendReportSendsRequest) {
|
| }
|
|
|
| TEST_F(CertificateErrorReporterTest, ExtendedReportingSendReportSendsRequest) {
|
| - GURL url = net::URLRequestMockDataJob::GetMockHttpsUrl("dummy data", 1);
|
| - CertificateErrorReporter reporter(
|
| - context(), url, CertificateErrorReporter::DO_NOT_SEND_COOKIES);
|
| - SendReport(&reporter, network_delegate(), kHostname, url, 0,
|
| + // Data should not be encrypted when sent to an HTTPS URL.
|
| + GURL https_url = net::URLRequestMockDataJob::GetMockHttpsUrl("dummy data", 1);
|
| + CertificateErrorReporter https_reporter(
|
| + context(), https_url, CertificateErrorReporter::DO_NOT_SEND_COOKIES);
|
| + network_delegate()->set_expect_request_encrypted(false);
|
| + SendReport(&https_reporter, network_delegate(), kHostname, https_url, 0,
|
| CertificateErrorReporter::REPORT_TYPE_EXTENDED_REPORTING);
|
| +
|
| + // Data should be encrypted when sent to an HTTP URL.
|
| + if (CertificateErrorReporter::IsHttpUploadUrlSupported()) {
|
| + GURL http_url = net::URLRequestMockDataJob::GetMockHttpUrl("dummy data", 1);
|
| + CertificateErrorReporter http_reporter(
|
| + context(), http_url, CertificateErrorReporter::DO_NOT_SEND_COOKIES,
|
| + network_delegate()->server_public_key(), kServerPublicKeyVersion);
|
| + network_delegate()->set_expect_request_encrypted(true);
|
| + SendReport(&http_reporter, network_delegate(), kHostname, http_url, 1,
|
| + CertificateErrorReporter::REPORT_TYPE_EXTENDED_REPORTING);
|
| + }
|
| }
|
|
|
| TEST_F(CertificateErrorReporterTest, SendMultipleReportsSequentially) {
|
|
|