1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Use of this source code is governed by a BSD-style license that can be
3dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// found in the LICENSE file.
4dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
5dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#ifndef NET_BASE_CRYPTO_MODULE_H_
6dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#define NET_BASE_CRYPTO_MODULE_H_
7dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#pragma once
8dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
9dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include <string>
10dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include <vector>
11dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/ref_counted.h"
13dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
14dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#if defined(USE_NSS)
15dc0f95d653279beabeb9817299e2902918ba123eKristian Monsentypedef struct PK11SlotInfoStr PK11SlotInfo;
16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#endif
17dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
18dc0f95d653279beabeb9817299e2902918ba123eKristian Monsennamespace net {
19dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
20dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass CryptoModule;
21dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
22dc0f95d653279beabeb9817299e2902918ba123eKristian Monsentypedef std::vector<scoped_refptr<CryptoModule> > CryptoModuleList;
23dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
24dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass CryptoModule : public base::RefCountedThreadSafe<CryptoModule> {
25dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen public:
26dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#if defined(USE_NSS)
27dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  typedef PK11SlotInfo* OSModuleHandle;
28dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#else
29dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  typedef void* OSModuleHandle;
30dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#endif
31dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
32dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  OSModuleHandle os_module_handle() const { return module_handle_; }
33dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
34dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  std::string GetTokenName() const;
35dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
36dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  static CryptoModule* CreateFromHandle(OSModuleHandle handle);
37dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
38dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen private:
39dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  friend class base::RefCountedThreadSafe<CryptoModule>;
40dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
41dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  explicit CryptoModule(OSModuleHandle handle);
42dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  ~CryptoModule();
43dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
44dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  OSModuleHandle module_handle_;
45dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
46dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  DISALLOW_COPY_AND_ASSIGN(CryptoModule);
47dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen};
48dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
49dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}  // namespace net
50dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
51dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#endif  // NET_BASE_CRYPTO_MODULE_H_
52