mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 454284 - Remove EmbedPasswordMgr.cpp from mozilla-central. r=bs
This commit is contained in:
parent
cc8c1ff2e3
commit
262a2b5c00
File diff suppressed because it is too large
Load Diff
@ -1,227 +0,0 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* vim:set ts=2 sw=2 sts=2 tw=80 et cindent: */
|
||||
/* ***** 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 <bryner@brianryner.com>
|
||||
* Changes: romaxa@gmail.com (from original: mozilla/toolkit/components/passwordmgr/base/nsPasswordManager.h)
|
||||
*
|
||||
* 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 "nsCPasswordManager.h"
|
||||
#include "nsClassHashtable.h"
|
||||
#include "nsDataHashtable.h"
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsIObserver.h"
|
||||
#include "nsWeakReference.h"
|
||||
#include "nsIFormSubmitObserver.h"
|
||||
#include "nsIWebProgressListener.h"
|
||||
#include "nsIDOMFocusListener.h"
|
||||
#include "nsIDOMLoadListener.h"
|
||||
#include "nsIStringBundle.h"
|
||||
#include "nsIPrefBranch.h"
|
||||
#include "nsIPromptFactory.h"
|
||||
#include "nsIAuthPromptWrapper.h"
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsIPrompt.h"
|
||||
#include "nsIAuthPrompt2.h"
|
||||
#include "EmbedPrivate.h"
|
||||
|
||||
#define EMBED_PASSWORDMANAGER_DESCRIPTION "MicroB PSM Dialog Impl"
|
||||
/* 360565c4-2ef3-4f6a-bab9-94cca891b2a7 */
|
||||
#define EMBED_PASSWORDMANAGER_CID \
|
||||
{0x360565c4, 0x2ef3, 0x4f6a, {0xba, 0xb9, 0x94, 0xcc, 0xa8, 0x91, 0xb2, 0xa7}}
|
||||
|
||||
class nsIFile;
|
||||
class nsIStringBundle;
|
||||
class nsIComponentManager;
|
||||
class nsIContent;
|
||||
class nsIDOMWindowInternal;
|
||||
class nsIURI;
|
||||
class nsIDOMHTMLInputElement;
|
||||
class nsIDOMWindow;
|
||||
class nsIPromptService2;
|
||||
|
||||
struct nsModuleComponentInfo;
|
||||
|
||||
class EmbedPasswordMgr : public nsIPasswordManager,
|
||||
public nsIPasswordManagerInternal,
|
||||
public nsIObserver,
|
||||
public nsIFormSubmitObserver,
|
||||
public nsIWebProgressListener,
|
||||
public nsIDOMFocusListener,
|
||||
public nsIPromptFactory,
|
||||
public nsIDOMLoadListener,
|
||||
public nsSupportsWeakReference
|
||||
{
|
||||
public:
|
||||
class SignonDataEntry;
|
||||
class SignonHashEntry;
|
||||
class PasswordEntry;
|
||||
EmbedPasswordMgr();
|
||||
virtual ~EmbedPasswordMgr();
|
||||
static EmbedPasswordMgr* GetInstance();
|
||||
static EmbedPasswordMgr* GetInstance(EmbedPrivate *aOwner);
|
||||
nsresult Init();
|
||||
static PRBool SingleSignonEnabled();
|
||||
static NS_METHOD Register(nsIComponentManager* aCompMgr,
|
||||
nsIFile* aPath,
|
||||
const char* aRegistryLocation,
|
||||
const char* aComponentType,
|
||||
const nsModuleComponentInfo* aInfo);
|
||||
static NS_METHOD Unregister(nsIComponentManager* aCompMgr,
|
||||
nsIFile* aPath,
|
||||
const char* aRegistryLocation,
|
||||
const nsModuleComponentInfo* aInfo);
|
||||
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,
|
||||
nsACString& aEncrypted);
|
||||
static nsresult EncryptDataUCS2(const nsAString& aPlaintext,
|
||||
nsAString& aEncrypted);
|
||||
nsresult InsertLogin(const char* username, const char* password = nsnull);
|
||||
nsresult RemovePasswords(const char *aHostName, const char *aUserName);
|
||||
nsresult RemovePasswordsByIndex(PRUint32 aIndex);
|
||||
nsresult IsEqualToLastHostQuery(nsCString& aHost);
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_NSIPASSWORDMANAGER
|
||||
NS_DECL_NSIPASSWORDMANAGERINTERNAL
|
||||
NS_DECL_NSIOBSERVER
|
||||
NS_DECL_NSIWEBPROGRESSLISTENER
|
||||
NS_DECL_NSIPROMPTFACTORY
|
||||
// nsIFormSubmitObserver
|
||||
NS_IMETHOD Notify(nsIDOMHTMLFormElement* aDOMForm,
|
||||
nsIDOMWindowInternal* aWindow,
|
||||
nsIURI* aActionURL,
|
||||
PRBool* aCancelSubmit);
|
||||
// nsIDOMFocusListener
|
||||
NS_IMETHOD Focus(nsIDOMEvent* aEvent);
|
||||
NS_IMETHOD Blur(nsIDOMEvent* aEvent);
|
||||
// nsIDOMEventListener
|
||||
NS_IMETHOD HandleEvent(nsIDOMEvent* aEvent);
|
||||
// nsIDOMLoadListener
|
||||
NS_IMETHOD Load(nsIDOMEvent* aEvent);
|
||||
NS_IMETHOD Unload(nsIDOMEvent* aEvent);
|
||||
NS_IMETHOD BeforeUnload(nsIDOMEvent* aEvent);
|
||||
NS_IMETHOD Abort(nsIDOMEvent* aEvent);
|
||||
NS_IMETHOD Error(nsIDOMEvent* aEvent);
|
||||
protected:
|
||||
void WritePasswords(nsIFile* aPasswordFile);
|
||||
void AddSignonData(const nsACString& aRealm, SignonDataEntry* aEntry);
|
||||
nsresult FindPasswordEntryInternal(const SignonDataEntry* aEntry,
|
||||
const nsAString& aUser,
|
||||
const nsAString& aPassword,
|
||||
const nsAString& aUserField,
|
||||
SignonDataEntry** aResult);
|
||||
nsresult FillPassword(nsIDOMEvent* aEvent = nsnull);
|
||||
void AttachToInput(nsIDOMHTMLInputElement* aElement);
|
||||
PRBool GetPasswordRealm(nsIURI* aURI, nsACString& aRealm);
|
||||
static PLDHashOperator PR_CALLBACK FindEntryEnumerator(const nsACString& aKey,
|
||||
SignonHashEntry* aEntry,
|
||||
void* aUserData);
|
||||
static PLDHashOperator PR_CALLBACK WriteRejectEntryEnumerator(const nsACString& aKey,
|
||||
PRInt32 aEntry,
|
||||
void* aUserData);
|
||||
static PLDHashOperator PR_CALLBACK WriteSignonEntryEnumerator(const nsACString& aKey,
|
||||
SignonHashEntry* aEntry,
|
||||
void* aUserData);
|
||||
static PLDHashOperator PR_CALLBACK BuildArrayEnumerator(const nsACString& aKey,
|
||||
SignonHashEntry* aEntry,
|
||||
void* aUserData);
|
||||
static PLDHashOperator PR_CALLBACK BuildRejectArrayEnumerator(const nsACString& aKey,
|
||||
PRInt32 aEntry,
|
||||
void* aUserData);
|
||||
static PLDHashOperator PR_CALLBACK RemoveForDOMDocumentEnumerator(nsISupports* aKey,
|
||||
PRInt32& aEntry,
|
||||
void* aUserData);
|
||||
static void EnsureDecoderRing();
|
||||
nsClassHashtable<nsCStringHashKey,SignonHashEntry> mSignonTable;
|
||||
nsDataHashtable<nsCStringHashKey,PRInt32> mRejectTable;
|
||||
nsDataHashtable<nsISupportsHashKey,PRInt32> mAutoCompleteInputs;
|
||||
nsCOMPtr<nsIFile> mSignonFile;
|
||||
nsCOMPtr<nsIPrefBranch> mPrefBranch;
|
||||
nsIDOMHTMLInputElement* mAutoCompletingField;
|
||||
nsIDOMHTMLInputElement* mGlobalUserField;
|
||||
nsIDOMHTMLInputElement* mGlobalPassField;
|
||||
SignonHashEntry * mLastSignonHashEntry;
|
||||
int lastIndex;
|
||||
nsCAutoString mLastHostQuery;
|
||||
EmbedCommon* mCommonObject;
|
||||
public:
|
||||
PRBool mFormAttachCount;
|
||||
// nsAString mLastHostQuery;
|
||||
};
|
||||
|
||||
/* 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 EmbedSignonPrompt : public nsIAuthPromptWrapper
|
||||
{
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_NSIAUTHPROMPT
|
||||
NS_DECL_NSIAUTHPROMPTWRAPPER
|
||||
EmbedSignonPrompt() {}
|
||||
virtual ~EmbedSignonPrompt() {}
|
||||
protected:
|
||||
void GetLocalizedString(const nsAString& aKey, nsAString& aResult);
|
||||
nsCOMPtr<nsIPrompt> mPrompt;
|
||||
};
|
||||
|
||||
// A wrapper for the newer nsIAuthPrompt2 interface
|
||||
// Its purpose is the same as nsSingleSignonPrompt, but wraps an nsIDOMWindow
|
||||
// instead of an nsIPrompt.
|
||||
|
||||
class EmbedSignonPrompt2 : public nsIAuthPrompt2
|
||||
{
|
||||
public:
|
||||
EmbedSignonPrompt2(nsIPromptService2* aService, nsIDOMWindow* aParent);
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_NSIAUTHPROMPT2
|
||||
|
||||
private:
|
||||
~EmbedSignonPrompt2();
|
||||
|
||||
nsCOMPtr<nsIPromptService2> mService;
|
||||
nsCOMPtr<nsIDOMWindow> mParent;
|
||||
};
|
||||
|
@ -47,11 +47,6 @@
|
||||
#include "EmbedPrivate.h"
|
||||
#include "EmbedWindow.h"
|
||||
|
||||
#ifdef MOZ_GTKPASSWORD_INTERFACE
|
||||
#include "EmbedPasswordMgr.h"
|
||||
#include "nsIPassword.h"
|
||||
#endif
|
||||
|
||||
#include "EmbedGlobalHistory.h"
|
||||
//#include "EmbedDownloadMgr.h"
|
||||
// so we can do our get_nsIWebBrowser later...
|
||||
@ -389,72 +384,6 @@ gtk_moz_embed_common_save_prefs()
|
||||
return NS_SUCCEEDED(rv);
|
||||
}
|
||||
|
||||
gint
|
||||
gtk_moz_embed_common_get_logins(const char* uri, GList **list)
|
||||
{
|
||||
gint ret = 0;
|
||||
#ifdef MOZ_GTKPASSWORD_INTERFACE
|
||||
EmbedPasswordMgr *passwordManager = EmbedPasswordMgr::GetInstance();
|
||||
nsCOMPtr<nsISimpleEnumerator> passwordEnumerator;
|
||||
nsresult result = passwordManager->GetEnumerator(getter_AddRefs(passwordEnumerator));
|
||||
PRBool enumResult;
|
||||
for (passwordEnumerator->HasMoreElements(&enumResult) ;
|
||||
enumResult == PR_TRUE ;
|
||||
passwordEnumerator->HasMoreElements(&enumResult))
|
||||
{
|
||||
nsCOMPtr<nsIPassword> nsPassword;
|
||||
result = passwordEnumerator->GetNext(getter_AddRefs(nsPassword));
|
||||
if (NS_FAILED(result)) {
|
||||
/* this almost certainly leaks logins */
|
||||
return ret;
|
||||
}
|
||||
nsCString host;
|
||||
nsPassword->GetHost(host);
|
||||
nsCString nsCURI(uri);
|
||||
if (uri) {
|
||||
if (!StringBeginsWith(nsCURI, host)
|
||||
// && !StringBeginsWith(host, nsCURI)
|
||||
)
|
||||
continue;
|
||||
} else if (!passwordManager->IsEqualToLastHostQuery(host))
|
||||
continue;
|
||||
|
||||
if (list) {
|
||||
nsString unicodeName;
|
||||
nsString unicodePassword;
|
||||
nsPassword->GetUser(unicodeName);
|
||||
nsPassword->GetPassword(unicodePassword);
|
||||
GtkMozLogin * login = g_new0(GtkMozLogin, 1);
|
||||
UNACCEPTABLE_CRASHY_GLIB_ALLOCATION(login);
|
||||
login->user = ToNewUTF8String(unicodeName);
|
||||
ALLOC_NOT_CHECKED(login->user);
|
||||
login->pass = ToNewUTF8String(unicodePassword);
|
||||
ALLOC_NOT_CHECKED(login->pass);
|
||||
login->host = NS_strdup(host.get());
|
||||
ALLOC_NOT_CHECKED(login->host);
|
||||
login->index = ret;
|
||||
*list = g_list_append(*list, login);
|
||||
}
|
||||
ret++;
|
||||
}
|
||||
#endif
|
||||
return ret;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gtk_moz_embed_common_remove_passwords(const gchar *host, const gchar *user, gint index)
|
||||
{
|
||||
#ifdef MOZ_GTKPASSWORD_INTERFACE
|
||||
EmbedPasswordMgr *passwordManager = EmbedPasswordMgr::GetInstance();
|
||||
if (index >= 0) {
|
||||
passwordManager->RemovePasswordsByIndex(index);
|
||||
} else {
|
||||
passwordManager->RemovePasswords(host, user);
|
||||
}
|
||||
#endif
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gint
|
||||
gtk_moz_embed_common_get_history_list(GtkMozHistoryItem **GtkHI)
|
||||
{
|
||||
|
@ -182,8 +182,6 @@ GTKMOZEMBED_API(gboolean, gtk_moz_embed_common_set_pref, (GtkType typ
|
||||
GTKMOZEMBED_API(gboolean, gtk_moz_embed_common_get_pref, (GtkType type, gchar*, gpointer))
|
||||
GTKMOZEMBED_API(gboolean, gtk_moz_embed_common_save_prefs, (void))
|
||||
GTKMOZEMBED_API(gboolean, gtk_moz_embed_common_login, (GtkWidget *embed, const gchar* username))
|
||||
GTKMOZEMBED_API(gboolean, gtk_moz_embed_common_remove_passwords, (const gchar *host, const gchar *user, gint index))
|
||||
GTKMOZEMBED_API(gint, gtk_moz_embed_common_get_logins, (const char* uri, GList **list))
|
||||
GTKMOZEMBED_API(gint, gtk_moz_embed_common_get_history_list, (GtkMozHistoryItem **GtkHI))
|
||||
GTKMOZEMBED_API(gint, gtk_moz_embed_common_remove_history, (gchar *url, gint time))
|
||||
GTKMOZEMBED_API(GSList*, gtk_moz_embed_common_get_cookie_list, (void))
|
||||
|
@ -1,79 +0,0 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** 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.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications, Inc.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2001
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* 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 "nsISupports.idl"
|
||||
|
||||
[scriptable, uuid(CF39C2B0-1E4B-11d5-A549-0010A401EB10)]
|
||||
|
||||
/**
|
||||
* An optional interface for clients wishing to access a
|
||||
* password object
|
||||
*
|
||||
* @status FROZEN
|
||||
*/
|
||||
|
||||
interface nsIPassword : nsISupports {
|
||||
|
||||
/**
|
||||
* the name of the host corresponding to the login being saved
|
||||
*
|
||||
* The form of the host depends on how the nsIPassword object was created
|
||||
*
|
||||
* - if it was created as a result of submitting a form to a site, then the
|
||||
* host is the url of the site, as obtained from a call to GetSpec
|
||||
*
|
||||
* - if it was created as a result of another app (e.g., mailnews) calling a
|
||||
* prompt routine such at PromptUsernameAndPassword, then the host is whatever
|
||||
* arbitrary string the app decided to pass in.
|
||||
*
|
||||
* Whatever form it is in, it will be used by the password manager to uniquely
|
||||
* identify the login realm, so that "newsserver:119" is not the same thing as
|
||||
* "newsserver".
|
||||
*/
|
||||
readonly attribute AUTF8String host;
|
||||
|
||||
/**
|
||||
* the user name portion of the login
|
||||
*/
|
||||
readonly attribute AString user;
|
||||
|
||||
/**
|
||||
* the password portion of the login
|
||||
*/
|
||||
readonly attribute AString password;
|
||||
};
|
@ -1,57 +0,0 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* vim:set ts=2 sw=2 sts=2 et cindent: */
|
||||
/* ***** 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.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Google Inc.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2005
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Darin Fisher <darin@meer.net>
|
||||
*
|
||||
* 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 "nsIPassword.idl"
|
||||
|
||||
/**
|
||||
* This interface is supported by password manager entries to expose the
|
||||
* fieldnames passed to nsIPasswordManagerInternal's addUserFull method.
|
||||
*/
|
||||
[scriptable, uuid(2cc35c67-978f-42a9-a958-16e97ad2f4c8)]
|
||||
interface nsIPasswordInternal : nsIPassword
|
||||
{
|
||||
/**
|
||||
* The name of the field that contained the username.
|
||||
*/
|
||||
readonly attribute AString userFieldName;
|
||||
|
||||
/**
|
||||
* The name of the field that contained the password.
|
||||
*/
|
||||
readonly attribute AString passwordFieldName;
|
||||
};
|
Loading…
Reference in New Issue
Block a user