crypto_module_password_dialog.h revision f2477e01787aa58f445919b809d89e252beef54f
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_CRYPTO_MODULE_PASSWORD_DIALOG_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_CRYPTO_MODULE_PASSWORD_DIALOG_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h"
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/gfx/native_widget_types.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace crypto {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CryptoModuleBlockingPasswordDelegate;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CryptoModule;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::vector<scoped_refptr<CryptoModule> > CryptoModuleList;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class X509Certificate;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chrome {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An enum to describe the reason for the password request.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum CryptoModulePasswordReason {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kCryptoModulePasswordKeygen,
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kCryptoModulePasswordCertEnrollment,
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kCryptoModulePasswordClientAuth,
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kCryptoModulePasswordListCerts,
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kCryptoModulePasswordCertImport,
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kCryptoModulePasswordCertExport,
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef base::Callback<void(const char*)> CryptoModulePasswordCallback;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Display a dialog, prompting the user to authenticate to unlock
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |module|. |reason| describes the purpose of the authentication and
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// affects the message displayed in the dialog. |server| is the name
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// of the server which requested the access.
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ShowCryptoModulePasswordDialog(
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& module_name,
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool retry,
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CryptoModulePasswordReason reason,
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& server,
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    gfx::NativeWindow parent,
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const CryptoModulePasswordCallback& callback);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns a CryptoModuleBlockingPasswordDelegate to open a dialog and block
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// until returning. Should only be used on a worker thread.
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)crypto::CryptoModuleBlockingPasswordDelegate*
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NewCryptoModuleBlockingDialogDelegate(CryptoModulePasswordReason reason,
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          const std::string& server);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Asynchronously unlock |modules|, if necessary.  |callback| is called when
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// done (regardless if any modules were successfully unlocked or not).  Should
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// only be called on UI thread.
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UnlockSlotsIfNecessary(const net::CryptoModuleList& modules,
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            CryptoModulePasswordReason reason,
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            const std::string& server,
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                            gfx::NativeWindow parent,
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            const base::Closure& callback);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Asynchronously unlock the |cert|'s module, if necessary.  |callback| is
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// called when done (regardless if module was successfully unlocked or not).
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Should only be called on UI thread.
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UnlockCertSlotIfNecessary(net::X509Certificate* cert,
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               CryptoModulePasswordReason reason,
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               const std::string& server,
72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                               gfx::NativeWindow parent,
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               const base::Closure& callback);
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chrome
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_UI_CRYPTO_MODULE_PASSWORD_DIALOG_H_
78