Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / crypto_module_delegate_nss.h
1 // Copyright 2013 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 CHROME_BROWSER_UI_CRYPTO_MODULE_DELEGATE_NSS_H_
6 #define CHROME_BROWSER_UI_CRYPTO_MODULE_DELEGATE_NSS_H_
7
8 #include <string>
9
10 #include "base/compiler_specific.h"
11 #include "base/synchronization/waitable_event.h"
12 #include "chrome/browser/ui/crypto_module_password_dialog.h"
13 #include "crypto/nss_crypto_module_delegate.h"
14 #include "net/base/host_port_pair.h"
15
16 namespace content {
17 class ResourceContext;
18 }
19
20 // Delegate to handle unlocking a slot or indicating which slot to store a key
21 // in. When passing to NSS functions which take a wincx argument, use the value
22 // returned from the wincx() method.
23 class ChromeNSSCryptoModuleDelegate
24     : public crypto::NSSCryptoModuleDelegate {
25  public:
26   // Create a ChromeNSSCryptoModuleDelegate. |reason| is used to select what
27   // string to show the user, |server| is displayed to indicate which connection
28   // is causing the dialog to appear. |slot| can be NULL.
29   ChromeNSSCryptoModuleDelegate(chrome::CryptoModulePasswordReason reason,
30                                 const net::HostPortPair& server,
31                                 crypto::ScopedPK11Slot slot);
32
33   ~ChromeNSSCryptoModuleDelegate() override;
34
35   // Must be called on IO thread. Creates a delegate and returns it
36   // synchronously or asynchronously to |callback|. If the delegate could not be
37   // created, |callback| is called with NULL.
38   static void CreateForResourceContext(
39       chrome::CryptoModulePasswordReason reason,
40       const net::HostPortPair& server,
41       content::ResourceContext* context,
42       const base::Callback<void(scoped_ptr<ChromeNSSCryptoModuleDelegate>)>&
43           callback);
44
45   // crypto::NSSCryptoModuleDelegate implementation.
46   crypto::ScopedPK11Slot RequestSlot() override;
47
48   // crypto::CryptoModuleBlockingPasswordDelegate implementation.
49   std::string RequestPassword(const std::string& slot_name,
50                               bool retry,
51                               bool* cancelled) override;
52
53  private:
54   void ShowDialog(const std::string& slot_name, bool retry);
55
56   void GotPassword(const std::string& password);
57
58   // Parameters displayed in the dialog.
59   const chrome::CryptoModulePasswordReason reason_;
60   net::HostPortPair server_;
61
62   // Event to block worker thread while waiting for dialog on UI thread.
63   base::WaitableEvent event_;
64
65   // Stores the results from the dialog for access on worker thread.
66   std::string password_;
67   bool cancelled_;
68
69   // The slot which will be returned by RequestSlot.
70   crypto::ScopedPK11Slot slot_;
71
72   DISALLOW_COPY_AND_ASSIGN(ChromeNSSCryptoModuleDelegate);
73 };
74
75 // Create a delegate which only handles unlocking slots.
76 crypto::CryptoModuleBlockingPasswordDelegate*
77     CreateCryptoModuleBlockingPasswordDelegate(
78         chrome::CryptoModulePasswordReason reason,
79         const net::HostPortPair& server);
80
81 #endif  // CHROME_BROWSER_UI_CRYPTO_MODULE_DELEGATE_NSS_H_