Upload upstream chromium 108.0.5359.1
[platform/framework/web/chromium-efl.git] / crypto / unexportable_key.cc
1 // Copyright 2021 The Chromium Authors
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 "crypto/unexportable_key.h"
6
7 #include "base/bind.h"
8 #include "base/check.h"
9 #include "build/build_config.h"
10
11 namespace crypto {
12
13 namespace {
14 std::unique_ptr<UnexportableKeyProvider> (*g_mock_provider)() = nullptr;
15 }  // namespace
16
17 UnexportableSigningKey::~UnexportableSigningKey() = default;
18 UnexportableKeyProvider::~UnexportableKeyProvider() = default;
19
20 #if BUILDFLAG(IS_WIN)
21 std::unique_ptr<UnexportableKeyProvider> GetUnexportableKeyProviderWin();
22 #endif
23
24 std::unique_ptr<UnexportableKeyProvider> GetUnexportableKeyProvider() {
25   if (g_mock_provider) {
26     return g_mock_provider();
27   }
28
29 #if BUILDFLAG(IS_WIN)
30   return GetUnexportableKeyProviderWin();
31 #else
32   return nullptr;
33 #endif
34 }
35
36 namespace internal {
37
38 void SetUnexportableKeyProviderForTesting(
39     std::unique_ptr<UnexportableKeyProvider> (*func)()) {
40   if (g_mock_provider) {
41     // Nesting ScopedMockUnexportableSigningKeyForTesting is not supported.
42     CHECK(!func);
43     g_mock_provider = nullptr;
44   } else {
45     g_mock_provider = func;
46   }
47 }
48
49 }  // namespace internal
50 }  // namespace crypto