• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
14 namespace net {
15 
16 namespace {
17 
18 bool g_has_instance = false;
19 
20 base::LazyInstance<TestRootCerts,
21                    base::LeakyLazyInstanceTraits<TestRootCerts> >
22     g_test_root_certs(base::LINKER_INITIALIZED);
23 
LoadCertificates(const FilePath & filename)24 CertificateList 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
GetInstance()38 TestRootCerts* TestRootCerts::GetInstance() {
39   return g_test_root_certs.Pointer();
40 }
41 
HasInstance()42 bool TestRootCerts::HasInstance() {
43   return g_has_instance;
44 }
45 
AddFromFile(const FilePath & file)46 bool 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 
TestRootCerts()54 TestRootCerts::TestRootCerts() {
55   Init();
56   g_has_instance = true;
57 }
58 
59 }  // namespace net
60