// Copyright 2017 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 "net/cert/test_root_certs.h"

#include "base/location.h"
#include "base/logging.h"
#include "net/cert/internal/cert_errors.h"
#include "net/cert/internal/parsed_certificate.h"
#include "net/cert/x509_certificate.h"
#include "third_party/boringssl/src/include/openssl/pool.h"

namespace net {

bool TestRootCerts::Add(X509Certificate* certificate) {
  CertErrors errors;
  auto parsed =
      ParsedCertificate::Create(bssl::UpRef(certificate->cert_buffer()),
                                ParseCertificateOptions(), &errors);
  if (!parsed) {
    LOG(ERROR) << "Failed to parse DER certificate: " << errors.ToDebugString();
    return false;
  }
  test_trust_store_.AddTrustAnchor(parsed);
  empty_ = false;
  return true;
}

void TestRootCerts::Clear() {
  test_trust_store_.Clear();
  empty_ = true;
}

bool TestRootCerts::IsEmpty() const {
  return empty_;
}

TestRootCerts::~TestRootCerts() {}

void TestRootCerts::Init() {
  empty_ = true;
}

}  // namespace net
