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.
5 #ifndef CHROME_BROWSER_UI_CRYPTO_MODULE_DELEGATE_NSS_H_
6 #define CHROME_BROWSER_UI_CRYPTO_MODULE_DELEGATE_NSS_H_
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"
17 class ResourceContext
;
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
{
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
);
33 ~ChromeNSSCryptoModuleDelegate() override
;
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
>)>&
45 // crypto::NSSCryptoModuleDelegate implementation.
46 crypto::ScopedPK11Slot
RequestSlot() override
;
48 // crypto::CryptoModuleBlockingPasswordDelegate implementation.
49 std::string
RequestPassword(const std::string
& slot_name
,
51 bool* cancelled
) override
;
54 void ShowDialog(const std::string
& slot_name
, bool retry
);
56 void GotPassword(const std::string
& password
);
58 // Parameters displayed in the dialog.
59 const chrome::CryptoModulePasswordReason reason_
;
60 net::HostPortPair server_
;
62 // Event to block worker thread while waiting for dialog on UI thread.
63 base::WaitableEvent event_
;
65 // Stores the results from the dialog for access on worker thread.
66 std::string password_
;
69 // The slot which will be returned by RequestSlot.
70 crypto::ScopedPK11Slot slot_
;
72 DISALLOW_COPY_AND_ASSIGN(ChromeNSSCryptoModuleDelegate
);
75 // Create a delegate which only handles unlocking slots.
76 crypto::CryptoModuleBlockingPasswordDelegate
*
77 CreateCryptoModuleBlockingPasswordDelegate(
78 chrome::CryptoModulePasswordReason reason
,
79 const net::HostPortPair
& server
);
81 #endif // CHROME_BROWSER_UI_CRYPTO_MODULE_DELEGATE_NSS_H_