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