1// Copyright (c) 2011 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#ifndef NET_BASE_CRYPTO_MODULE_H_
6#define NET_BASE_CRYPTO_MODULE_H_
7
8#include <string>
9#include <vector>
10
11#include "base/memory/ref_counted.h"
12#include "net/base/net_export.h"
13
14#if defined(USE_NSS)
15typedef struct PK11SlotInfoStr PK11SlotInfo;
16#endif
17
18namespace net {
19
20class CryptoModule;
21
22typedef std::vector<scoped_refptr<CryptoModule> > CryptoModuleList;
23
24class NET_EXPORT CryptoModule
25    : public base::RefCountedThreadSafe<CryptoModule> {
26 public:
27#if defined(USE_NSS)
28  typedef PK11SlotInfo* OSModuleHandle;
29#else
30  typedef void* OSModuleHandle;
31#endif
32
33  OSModuleHandle os_module_handle() const { return module_handle_; }
34
35  std::string GetTokenName() const;
36
37  static CryptoModule* CreateFromHandle(OSModuleHandle handle);
38
39 private:
40  friend class base::RefCountedThreadSafe<CryptoModule>;
41
42  explicit CryptoModule(OSModuleHandle handle);
43  ~CryptoModule();
44
45  OSModuleHandle module_handle_;
46
47  DISALLOW_COPY_AND_ASSIGN(CryptoModule);
48};
49
50}  // namespace net
51
52#endif  // NET_BASE_CRYPTO_MODULE_H_
53