1// Copyright (c) 2010 The Chromium Authors. All rights reserved. 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/base/test_root_certs.h" 6 7#include <string> 8 9#include "base/file_path.h" 10#include "base/file_util.h" 11#include "base/logging.h" 12#include "net/base/x509_certificate.h" 13 14namespace net { 15 16namespace { 17 18bool g_has_instance = false; 19 20base::LazyInstance<TestRootCerts, 21 base::LeakyLazyInstanceTraits<TestRootCerts> > 22 g_test_root_certs(base::LINKER_INITIALIZED); 23 24CertificateList LoadCertificates(const FilePath& filename) { 25 std::string raw_cert; 26 if (!file_util::ReadFileToString(filename, &raw_cert)) { 27 LOG(ERROR) << "Can't load certificate " << filename.value(); 28 return CertificateList(); 29 } 30 31 return X509Certificate::CreateCertificateListFromBytes( 32 raw_cert.data(), raw_cert.length(), X509Certificate::FORMAT_AUTO); 33} 34 35} // namespace 36 37// static 38TestRootCerts* TestRootCerts::GetInstance() { 39 return g_test_root_certs.Pointer(); 40} 41 42bool TestRootCerts::HasInstance() { 43 return g_has_instance; 44} 45 46bool TestRootCerts::AddFromFile(const FilePath& file) { 47 CertificateList root_certs = LoadCertificates(file); 48 if (root_certs.empty() || root_certs.size() > 1) 49 return false; 50 51 return Add(root_certs.front()); 52} 53 54TestRootCerts::TestRootCerts() { 55 Init(); 56 g_has_instance = true; 57} 58 59} // namespace net 60