blob: 4ee5246801df1a6c9c03458b5f14551b95f66326 [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/web_applications/test/ssl_test_utils.h"
#include "base/atomic_sequence_num.h"
#include "base/time/time.h"
#include "chrome/browser/ssl/ssl_browsertest_util.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "components/security_state/core/features.h"
#include "components/security_state/core/security_state.h"
#include "crypto/rsa_private_key.h"
#include "net/cert/x509_certificate.h"
#include "net/cert/x509_util.h"
#include "net/ssl/ssl_info.h"
namespace {
// NSS requires that serial numbers be unique even for the same issuer;
// as all fake certificates will contain the same issuer name, it's
// necessary to ensure the serial number is unique, as otherwise
// NSS will fail to parse.
base::AtomicSequenceNumber g_serial_number;
scoped_refptr<net::X509Certificate> CreateFakeCert() {
std::unique_ptr<crypto::RSAPrivateKey> unused_key;
std::string cert_der;
if (!net::x509_util::CreateKeyAndSelfSignedCert(
"CN=Error", static_cast<uint32_t>(g_serial_number.GetNext()),
base::Time::Now() - base::Minutes(5),
base::Time::Now() + base::Minutes(5), &unused_key, &cert_der)) {
return nullptr;
}
return net::X509Certificate::CreateFromBytes(
base::as_bytes(base::make_span(cert_der)));
}
} // namespace
namespace web_app {
void CheckMixedContentLoaded(Browser* browser) {
DCHECK(browser);
ssl_test_util::CheckSecurityState(
browser->tab_strip_model()->GetActiveWebContents(),
ssl_test_util::CertError::NONE, security_state::WARNING,
ssl_test_util::AuthState::DISPLAYED_INSECURE_CONTENT);
}
void CheckMixedContentFailedToLoad(Browser* browser) {
DCHECK(browser);
ssl_test_util::CheckSecurityState(
browser->tab_strip_model()->GetActiveWebContents(),
ssl_test_util::CertError::NONE, security_state::SECURE,
ssl_test_util::AuthState::NONE);
}
void CreateFakeSslInfoCertificate(net::SSLInfo* ssl_info) {
ssl_info->cert = ssl_info->unverified_cert = CreateFakeCert();
}
} // namespace web_app