diff --git a/toolkit/components/passwordmgr/base/Makefile.in b/toolkit/components/passwordmgr/base/Makefile.in index 4f41a989828..0d215feef1d 100644 --- a/toolkit/components/passwordmgr/base/Makefile.in +++ b/toolkit/components/passwordmgr/base/Makefile.in @@ -63,6 +63,10 @@ REQUIRES = \ XPIDLSRCS = nsIPassword.idl -CPPSRCS = nsPasswordManager.cpp +CPPSRCS = \ + nsPasswordManager.cpp \ + nsSingleSignonPrompt.cpp \ + $(NULL) + include $(topsrcdir)/config/rules.mk diff --git a/toolkit/components/passwordmgr/base/nsPasswordManager.cpp b/toolkit/components/passwordmgr/base/nsPasswordManager.cpp index ca7cf21ec97..e7e0f2fcdb4 100644 --- a/toolkit/components/passwordmgr/base/nsPasswordManager.cpp +++ b/toolkit/components/passwordmgr/base/nsPasswordManager.cpp @@ -78,11 +78,6 @@ static nsIStringBundle* sPMBundle; static nsISecretDecoderRing* sDecoderRing; static nsPasswordManager* sPasswordManager; -static void PMLocalizedString(const nsAString& key, nsAString& aResult, - PRBool aFormatted = PR_FALSE, - const PRUnichar** aFormatArgs = nsnull, - PRUint32 aFormatArgsLength = 0); - class nsPasswordManager::SignonDataEntry { public: @@ -835,11 +830,11 @@ nsPasswordManager::Notify(nsIContent* aFormNode, } nsAutoString dialogTitle, dialogText, neverText; - PMLocalizedString(NS_LITERAL_STRING("savePasswordTitle"), dialogTitle); - PMLocalizedString(NS_LITERAL_STRING("savePasswordText"), - dialogText, - PR_TRUE); - PMLocalizedString(NS_LITERAL_STRING("neverForSite"), neverText); + GetLocalizedString(NS_LITERAL_STRING("savePasswordTitle"), dialogTitle); + GetLocalizedString(NS_LITERAL_STRING("savePasswordText"), + dialogText, + PR_TRUE); + GetLocalizedString(NS_LITERAL_STRING("neverForSite"), neverText); PRInt32 selection; prompt->ConfirmEx(dialogTitle.get(), @@ -914,8 +909,10 @@ nsPasswordManager::Notify(nsIContent* aFormNode, } nsAutoString dialogTitle, dialogText; - PMLocalizedString(NS_LITERAL_STRING("passwordChangeTitle"), dialogTitle); - PMLocalizedString(NS_LITERAL_STRING("userSelectText"), dialogText); + GetLocalizedString(NS_LITERAL_STRING("passwordChangeTitle"), + dialogTitle); + GetLocalizedString(NS_LITERAL_STRING("userSelectText"), + dialogText); PRInt32 selection; PRBool confirm; @@ -941,12 +938,13 @@ nsPasswordManager::Notify(nsIContent* aFormNode, DecryptData(entry->userValue, ptUser); const PRUnichar* formatArgs[1] = { ptUser.get() }; - PMLocalizedString(NS_LITERAL_STRING("passwordChangeTitle"), dialogTitle); - PMLocalizedString(NS_LITERAL_STRING("passwordChangeText"), - dialogText, - PR_TRUE, - formatArgs, - 1); + GetLocalizedString(NS_LITERAL_STRING("passwordChangeTitle"), + dialogTitle); + GetLocalizedString(NS_LITERAL_STRING("passwordChangeText"), + dialogText, + PR_TRUE, + formatArgs, + 1); PRBool confirm; prompt->Confirm(dialogTitle.get(), dialogText.get(), &confirm); @@ -1634,228 +1632,12 @@ nsPasswordManager::AttachToInput(nsIDOMHTMLInputElement* aElement) ////////////////////////////////////// // nsSingleSignonPrompt -NS_IMPL_ISUPPORTS2(nsSingleSignonPrompt, - nsIAuthPromptWrapper, - nsIAuthPrompt) - -// nsIAuthPrompt -NS_IMETHODIMP -nsSingleSignonPrompt::Prompt(const PRUnichar* aDialogTitle, - const PRUnichar* aText, - const PRUnichar* aPasswordRealm, - PRUint32 aSavePassword, - const PRUnichar* aDefaultText, - PRUnichar** aResult, - PRBool* aConfirm) -{ - nsAutoString checkMsg; - nsString emptyString; - PRBool checkValue = PR_FALSE; - PRBool *checkPtr = nsnull; - PRUnichar* value = nsnull; - nsCOMPtr mgrInternal; - - if (nsPasswordManager::SingleSignonEnabled() && aPasswordRealm) { - if (aSavePassword == SAVE_PASSWORD_PERMANENTLY) { - PMLocalizedString(NS_LITERAL_STRING("rememberValue"), checkMsg); - checkPtr = &checkValue; - } - - mgrInternal = do_GetService(NS_PASSWORDMANAGER_CONTRACTID); - nsCAutoString outHost; - nsAutoString outUser, outPassword; - - mgrInternal->FindPasswordEntry(NS_ConvertUCS2toUTF8(aPasswordRealm), - emptyString, - emptyString, - outHost, - outUser, - outPassword); - - value = ToNewUnicode(outUser); - } - - mPrompt->Prompt(aDialogTitle, - aText, - &value, - checkMsg.get(), - checkPtr, - aConfirm); - - if (*aConfirm) { - if (checkValue && value[0] != '\0') { - // The user requested that we save the value - // TODO: support SAVE_PASSWORD_FOR_SESSION - - nsCOMPtr manager = do_QueryInterface(mgrInternal); - - manager->AddUser(NS_ConvertUCS2toUTF8(aPasswordRealm), - nsDependentString(value), - emptyString); - } - - *aResult = value; - } else { - if (value) - nsMemory::Free(value); - *aResult = nsnull; - } - - return NS_OK; -} - -NS_IMETHODIMP -nsSingleSignonPrompt::PromptUsernameAndPassword(const PRUnichar* aDialogTitle, - const PRUnichar* aText, - const PRUnichar* aPasswordRealm, - PRUint32 aSavePassword, - PRUnichar** aUser, - PRUnichar** aPassword, - PRBool* aConfirm) -{ - nsAutoString checkMsg; - nsString emptyString; - PRBool checkValue = PR_FALSE; - PRBool *checkPtr = nsnull; - PRUnichar *user = nsnull, *password = nsnull; - nsCOMPtr mgrInternal; - - if (nsPasswordManager::SingleSignonEnabled() && aPasswordRealm) { - if (aSavePassword == SAVE_PASSWORD_PERMANENTLY) { - PMLocalizedString(NS_LITERAL_STRING("rememberPassword"), checkMsg); - checkPtr = &checkValue; - } - - mgrInternal = do_GetService(NS_PASSWORDMANAGER_CONTRACTID); - nsCAutoString outHost; - nsAutoString outUser, outPassword; - - mgrInternal->FindPasswordEntry(NS_ConvertUCS2toUTF8(aPasswordRealm), - emptyString, - emptyString, - outHost, - outUser, - outPassword); - - user = ToNewUnicode(outUser); - password = ToNewUnicode(outPassword); - } - - mPrompt->PromptUsernameAndPassword(aDialogTitle, - aText, - &user, - &password, - checkMsg.get(), - checkPtr, - aConfirm); - - if (*aConfirm) { - if (checkValue && user[0] != '\0') { - // The user requested that we save the values - // TODO: support SAVE_PASSWORD_FOR_SESSION - - nsCOMPtr manager = do_QueryInterface(mgrInternal); - - manager->AddUser(NS_ConvertUCS2toUTF8(aPasswordRealm), - nsDependentString(user), - nsDependentString(password)); - } - - *aUser = user; - *aPassword = password; - - } else { - if (user) - nsMemory::Free(user); - if (password) - nsMemory::Free(password); - - *aUser = *aPassword = nsnull; - } - - return NS_OK; -} - -NS_IMETHODIMP -nsSingleSignonPrompt::PromptPassword(const PRUnichar* aDialogTitle, - const PRUnichar* aText, - const PRUnichar* aPasswordRealm, - PRUint32 aSavePassword, - PRUnichar** aPassword, - PRBool* aConfirm) -{ - nsAutoString checkMsg; - nsString emptyString; - PRBool checkValue = PR_FALSE; - PRBool *checkPtr = nsnull; - PRUnichar* password = nsnull; - nsCOMPtr mgrInternal; - - if (nsPasswordManager::SingleSignonEnabled() && aPasswordRealm) { - if (aSavePassword == SAVE_PASSWORD_PERMANENTLY) { - PMLocalizedString(NS_LITERAL_STRING("rememberPassword"), checkMsg); - checkPtr = &checkValue; - } - - mgrInternal = do_GetService(NS_PASSWORDMANAGER_CONTRACTID); - nsCAutoString outHost; - nsAutoString outUser, outPassword; - - mgrInternal->FindPasswordEntry(NS_ConvertUCS2toUTF8(aPasswordRealm), - emptyString, - emptyString, - outHost, - outUser, - outPassword); - - password = ToNewUnicode(outPassword); - } - - mPrompt->PromptPassword(aDialogTitle, - aText, - &password, - checkMsg.get(), - checkPtr, - aConfirm); - - if (*aConfirm) { - if (checkValue && password[0] != '\0') { - // The user requested that we save the password - // TODO: support SAVE_PASSWORD_FOR_SESSION - - nsCOMPtr manager = do_QueryInterface(mgrInternal); - - manager->AddUser(NS_ConvertUCS2toUTF8(aPasswordRealm), - emptyString, - nsDependentString(password)); - } - - *aPassword = password; - - } else { - if (password) - nsMemory::Free(password); - *aPassword = nsnull; - } - - return NS_OK; -} - -// nsIAuthPromptWrapper - -NS_IMETHODIMP -nsSingleSignonPrompt::SetPromptDialogs(nsIPrompt* aDialogs) -{ - mPrompt = aDialogs; - return NS_OK; -} - -static void -PMLocalizedString(const nsAString& key, - nsAString& aResult, - PRBool aIsFormatted, - const PRUnichar** aFormatArgs, - PRUint32 aFormatArgsLength) +/* static */ void +nsPasswordManager::GetLocalizedString(const nsAString& key, + nsAString& aResult, + PRBool aIsFormatted, + const PRUnichar** aFormatArgs, + PRUint32 aFormatArgsLength) { if (!sPMBundle) { nsCOMPtr bundleService = do_GetService(NS_STRINGBUNDLE_CONTRACTID); diff --git a/toolkit/components/passwordmgr/base/nsPasswordManager.h b/toolkit/components/passwordmgr/base/nsPasswordManager.h index 311f8a4713f..56fd2cb3f8f 100644 --- a/toolkit/components/passwordmgr/base/nsPasswordManager.h +++ b/toolkit/components/passwordmgr/base/nsPasswordManager.h @@ -40,10 +40,8 @@ #include "nsClassHashtable.h" #include "nsDataHashtable.h" #include "nsCOMPtr.h" -#include "nsIAuthPromptWrapper.h" #include "nsIObserver.h" #include "nsWeakReference.h" -#include "nsIPrompt.h" #include "nsIFormSubmitObserver.h" #include "nsIWebProgressListener.h" #include "nsIDOMFocusListener.h" @@ -54,13 +52,7 @@ #define NS_PASSWORDMANAGER_CID \ {0x360565c4, 0x2ef3, 0x4f6a, {0xba, 0xb9, 0x94, 0xcc, 0xa8, 0x91, 0xb2, 0xa7}} -/* 1baf3398-f759-4a72-a21f-0abdc9cc9960 */ -#define NS_SINGLE_SIGNON_PROMPT_CID \ -{0x1baf3398, 0xf759, 0x4a72, {0xa2, 0x1f, 0x0a, 0xbd, 0xc9, 0xcc, 0x99, 0x60}} - - class nsIFile; -class nsIPrompt; class nsIStringBundle; class nsIComponentManager; class nsIContent; @@ -105,6 +97,11 @@ public: static void Shutdown(); + static void GetLocalizedString(const nsAString& key, + nsAString& aResult, + PRBool aFormatted = PR_FALSE, + const PRUnichar** aFormatArgs = nsnull, + PRUint32 aFormatArgsLength = 0); static nsresult DecryptData(const nsAString& aData, nsAString& aPlaintext); static nsresult EncryptData(const nsAString& aPlaintext, @@ -191,23 +188,3 @@ protected: nsCOMPtr mSignonFile; }; - -// Our wrapper for username/password prompts - this allows us to prefill -// the password dialog and add a "remember this password" checkbox. - -class nsSingleSignonPrompt : public nsIAuthPromptWrapper -{ -public: - NS_DECL_ISUPPORTS - NS_DECL_NSIAUTHPROMPT - NS_DECL_NSIAUTHPROMPTWRAPPER - - nsSingleSignonPrompt() { } - virtual ~nsSingleSignonPrompt() { } - -protected: - void GetLocalizedString(const nsAString& aKey, nsAString& aResult); - - nsCOMPtr mPrompt; - nsCOMPtr mBundle; -}; diff --git a/toolkit/components/passwordmgr/base/nsSingleSignonPrompt.cpp b/toolkit/components/passwordmgr/base/nsSingleSignonPrompt.cpp new file mode 100755 index 00000000000..5bae91935cf --- /dev/null +++ b/toolkit/components/passwordmgr/base/nsSingleSignonPrompt.cpp @@ -0,0 +1,260 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Mozilla Password Manager. + * + * The Initial Developer of the Original Code is + * Brian Ryner. + * Portions created by the Initial Developer are Copyright (C) 2003 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Brian Ryner + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include "nsSingleSignonPrompt.h" +#include "nsPasswordManager.h" +#include "nsIServiceManager.h" + +NS_IMPL_ISUPPORTS2(nsSingleSignonPrompt, + nsIAuthPromptWrapper, + nsIAuthPrompt) + +// nsIAuthPrompt +NS_IMETHODIMP +nsSingleSignonPrompt::Prompt(const PRUnichar* aDialogTitle, + const PRUnichar* aText, + const PRUnichar* aPasswordRealm, + PRUint32 aSavePassword, + const PRUnichar* aDefaultText, + PRUnichar** aResult, + PRBool* aConfirm) +{ + nsAutoString checkMsg; + nsString emptyString; + PRBool checkValue = PR_FALSE; + PRBool *checkPtr = nsnull; + PRUnichar* value = nsnull; + nsCOMPtr mgrInternal; + + if (nsPasswordManager::SingleSignonEnabled() && aPasswordRealm) { + if (aSavePassword == SAVE_PASSWORD_PERMANENTLY) { + nsPasswordManager::GetLocalizedString(NS_LITERAL_STRING("rememberValue"), + checkMsg); + checkPtr = &checkValue; + } + + mgrInternal = do_GetService(NS_PASSWORDMANAGER_CONTRACTID); + nsCAutoString outHost; + nsAutoString outUser, outPassword; + + mgrInternal->FindPasswordEntry(NS_ConvertUCS2toUTF8(aPasswordRealm), + emptyString, + emptyString, + outHost, + outUser, + outPassword); + + value = ToNewUnicode(outUser); + } + + mPrompt->Prompt(aDialogTitle, + aText, + &value, + checkMsg.get(), + checkPtr, + aConfirm); + + if (*aConfirm) { + if (checkValue && value[0] != '\0') { + // The user requested that we save the value + // TODO: support SAVE_PASSWORD_FOR_SESSION + + nsCOMPtr manager = do_QueryInterface(mgrInternal); + + manager->AddUser(NS_ConvertUCS2toUTF8(aPasswordRealm), + nsDependentString(value), + emptyString); + } + + *aResult = value; + } else { + if (value) + nsMemory::Free(value); + *aResult = nsnull; + } + + return NS_OK; +} + +NS_IMETHODIMP +nsSingleSignonPrompt::PromptUsernameAndPassword(const PRUnichar* aDialogTitle, + const PRUnichar* aText, + const PRUnichar* aPasswordRealm, + PRUint32 aSavePassword, + PRUnichar** aUser, + PRUnichar** aPassword, + PRBool* aConfirm) +{ + nsAutoString checkMsg; + nsString emptyString; + PRBool checkValue = PR_FALSE; + PRBool *checkPtr = nsnull; + PRUnichar *user = nsnull, *password = nsnull; + nsCOMPtr mgrInternal; + + if (nsPasswordManager::SingleSignonEnabled() && aPasswordRealm) { + if (aSavePassword == SAVE_PASSWORD_PERMANENTLY) { + nsPasswordManager::GetLocalizedString(NS_LITERAL_STRING("rememberPassword"), + checkMsg); + checkPtr = &checkValue; + } + + mgrInternal = do_GetService(NS_PASSWORDMANAGER_CONTRACTID); + nsCAutoString outHost; + nsAutoString outUser, outPassword; + + mgrInternal->FindPasswordEntry(NS_ConvertUCS2toUTF8(aPasswordRealm), + emptyString, + emptyString, + outHost, + outUser, + outPassword); + + user = ToNewUnicode(outUser); + password = ToNewUnicode(outPassword); + } + + mPrompt->PromptUsernameAndPassword(aDialogTitle, + aText, + &user, + &password, + checkMsg.get(), + checkPtr, + aConfirm); + + if (*aConfirm) { + if (checkValue && user[0] != '\0') { + // The user requested that we save the values + // TODO: support SAVE_PASSWORD_FOR_SESSION + + nsCOMPtr manager = do_QueryInterface(mgrInternal); + + manager->AddUser(NS_ConvertUCS2toUTF8(aPasswordRealm), + nsDependentString(user), + nsDependentString(password)); + } + + *aUser = user; + *aPassword = password; + + } else { + if (user) + nsMemory::Free(user); + if (password) + nsMemory::Free(password); + + *aUser = *aPassword = nsnull; + } + + return NS_OK; +} + +NS_IMETHODIMP +nsSingleSignonPrompt::PromptPassword(const PRUnichar* aDialogTitle, + const PRUnichar* aText, + const PRUnichar* aPasswordRealm, + PRUint32 aSavePassword, + PRUnichar** aPassword, + PRBool* aConfirm) +{ + nsAutoString checkMsg; + nsString emptyString; + PRBool checkValue = PR_FALSE; + PRBool *checkPtr = nsnull; + PRUnichar* password = nsnull; + nsCOMPtr mgrInternal; + + if (nsPasswordManager::SingleSignonEnabled() && aPasswordRealm) { + if (aSavePassword == SAVE_PASSWORD_PERMANENTLY) { + nsPasswordManager::GetLocalizedString(NS_LITERAL_STRING("rememberPassword"), + checkMsg); + checkPtr = &checkValue; + } + + mgrInternal = do_GetService(NS_PASSWORDMANAGER_CONTRACTID); + nsCAutoString outHost; + nsAutoString outUser, outPassword; + + mgrInternal->FindPasswordEntry(NS_ConvertUCS2toUTF8(aPasswordRealm), + emptyString, + emptyString, + outHost, + outUser, + outPassword); + + password = ToNewUnicode(outPassword); + } + + mPrompt->PromptPassword(aDialogTitle, + aText, + &password, + checkMsg.get(), + checkPtr, + aConfirm); + + if (*aConfirm) { + if (checkValue && password[0] != '\0') { + // The user requested that we save the password + // TODO: support SAVE_PASSWORD_FOR_SESSION + + nsCOMPtr manager = do_QueryInterface(mgrInternal); + + manager->AddUser(NS_ConvertUCS2toUTF8(aPasswordRealm), + emptyString, + nsDependentString(password)); + } + + *aPassword = password; + + } else { + if (password) + nsMemory::Free(password); + *aPassword = nsnull; + } + + return NS_OK; +} + +// nsIAuthPromptWrapper + +NS_IMETHODIMP +nsSingleSignonPrompt::SetPromptDialogs(nsIPrompt* aDialogs) +{ + mPrompt = aDialogs; + return NS_OK; +} diff --git a/toolkit/components/passwordmgr/base/nsSingleSignonPrompt.h b/toolkit/components/passwordmgr/base/nsSingleSignonPrompt.h new file mode 100755 index 00000000000..e253f19fc71 --- /dev/null +++ b/toolkit/components/passwordmgr/base/nsSingleSignonPrompt.h @@ -0,0 +1,64 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Mozilla Password Manager. + * + * The Initial Developer of the Original Code is + * Brian Ryner. + * Portions created by the Initial Developer are Copyright (C) 2003 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Brian Ryner + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include "nsIAuthPromptWrapper.h" +#include "nsCOMPtr.h" +#include "nsIPrompt.h" + +/* 1baf3398-f759-4a72-a21f-0abdc9cc9960 */ +#define NS_SINGLE_SIGNON_PROMPT_CID \ +{0x1baf3398, 0xf759, 0x4a72, {0xa2, 0x1f, 0x0a, 0xbd, 0xc9, 0xcc, 0x99, 0x60}} + +// Our wrapper for username/password prompts - this allows us to prefill +// the password dialog and add a "remember this password" checkbox. + +class nsSingleSignonPrompt : public nsIAuthPromptWrapper +{ +public: + NS_DECL_ISUPPORTS + NS_DECL_NSIAUTHPROMPT + NS_DECL_NSIAUTHPROMPTWRAPPER + + nsSingleSignonPrompt() { } + virtual ~nsSingleSignonPrompt() { } + +protected: + void GetLocalizedString(const nsAString& aKey, nsAString& aResult); + + nsCOMPtr mPrompt; +};