/*******************************************************************************
* Copyright (c) 2012 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.swt.browser;
import org.eclipse.swt.*;
import org.eclipse.swt.internal.*;
import org.eclipse.swt.internal.mozilla.*;
import org.eclipse.swt.widgets.*;
class Prompter {
XPCOMObject supports;
XPCOMObject prompt;
int refCount = 0;
long /*int*/ parent;
Prompter () {
createCOMInterfaces ();
}
int AddRef () {
refCount++;
return refCount;
}
void createCOMInterfaces () {
/* Create each of the interfaces that this object implements */
supports = new XPCOMObject (new int[] {2, 0, 0}) {
@Override
public long /*int*/ method0 (long /*int*/[] args) {return QueryInterface (args[0], args[1]);}
@Override
public long /*int*/ method1 (long /*int*/[] args) {return AddRef ();}
@Override
public long /*int*/ method2 (long /*int*/[] args) {return Release ();}
};
prompt = new XPCOMObject (new int[] {2, 0, 0, 2, 4, 3, 5, 9, 6, 6, 7, 6}) {
@Override
public long /*int*/ method0 (long /*int*/[] args) {return QueryInterface (args[0], args[1]);}
@Override
public long /*int*/ method1 (long /*int*/[] args) {return AddRef ();}
@Override
public long /*int*/ method2 (long /*int*/[] args) {return Release ();}
@Override
public long /*int*/ method3 (long /*int*/[] args) {return Alert (args[0], args[1] );}
@Override
public long /*int*/ method4 (long /*int*/[] args) {return AlertCheck (args[0], args[1], args[2], args[3]);}
@Override
public long /*int*/ method5 (long /*int*/[] args) {return Confirm (args[0], args[1], args[2]);}
@Override
public long /*int*/ method6 (long /*int*/[] args) {return ConfirmCheck (args[0], args[1], args[2], args[3], args[4]);}
@Override
public long /*int*/ method7 (long /*int*/[] args) {return ConfirmEx (args[0], args[1], (int)/*64*/args[2], args[3], args[4], args[5], args[6], args[7], args[8]);}
@Override
public long /*int*/ method8 (long /*int*/[] args) {return Prompt (args[0], args[1], args[2], args[3], args[4], args[5]);}
@Override
public long /*int*/ method9 (long /*int*/[] args) {return PromptPassword (args[0], args[1], args[2], args[3], args[4], args[5]);}
@Override
public long /*int*/ method10 (long /*int*/[] args) {return PromptUsernameAndPassword (args[0], args[1], args[2], args[3], args[4], args[5], args[6]);}
@Override
public long /*int*/ method11 (long /*int*/[] args) {return Select (args[0], args[1], (int)/*64*/args[2], args[3], args[4], args[5]);}
};
}
void disposeCOMInterfaces () {
if (supports != null) {
supports.dispose ();
supports = null;
}
if (prompt != null) {
prompt.dispose ();
prompt = null;
}
}
long /*int*/ getAddress () {
return prompt.getAddress ();
}
int QueryInterface (long /*int*/ riid, long /*int*/ ppvObject) {
if (riid == 0 || ppvObject == 0) return XPCOM.NS_ERROR_NO_INTERFACE;
nsID guid = new nsID ();
XPCOM.memmove (guid, riid, nsID.sizeof);
if (guid.Equals (nsISupports.NS_ISUPPORTS_IID)) {
XPCOM.memmove (ppvObject, new long /*int*/[] {supports.getAddress ()}, C.PTR_SIZEOF);
AddRef ();
return XPCOM.NS_OK;
}
if (guid.Equals (nsIPrompt.NS_IPROMPT_IID)) {
XPCOM.memmove (ppvObject, new long /*int*/[] {prompt.getAddress ()}, C.PTR_SIZEOF);
AddRef ();
return XPCOM.NS_OK;
}
XPCOM.memmove (ppvObject, new long /*int*/[] {0}, C.PTR_SIZEOF);
return XPCOM.NS_ERROR_NO_INTERFACE;
}
int Release () {
refCount--;
if (refCount == 0) disposeCOMInterfaces ();
return refCount;
}
Browser getBrowser () {
if (parent == 0) return null;
return Mozilla.getBrowser (parent);
}
String getLabel (int buttonFlag, int index, long /*int*/ buttonTitle) {
String label = null;
int flag = (buttonFlag & (0xff * index)) / index;
switch (flag) {
case nsIPrompt.BUTTON_TITLE_CANCEL: label = SWT.getMessage ("SWT_Cancel"); break; //$NON-NLS-1$
case nsIPrompt.BUTTON_TITLE_NO: label = SWT.getMessage ("SWT_No"); break; //$NON-NLS-1$
case nsIPrompt.BUTTON_TITLE_OK: label = SWT.getMessage ("SWT_OK"); break; //$NON-NLS-1$
case nsIPrompt.BUTTON_TITLE_SAVE: label = SWT.getMessage ("SWT_Save"); break; //$NON-NLS-1$
case nsIPrompt.BUTTON_TITLE_YES: label = SWT.getMessage ("SWT_Yes"); break; //$NON-NLS-1$
case nsIPrompt.BUTTON_TITLE_IS_STRING: {
int length = XPCOM.strlen_PRUnichar (buttonTitle);
char[] dest = new char[length];
XPCOM.memmove (dest, buttonTitle, length * 2);
label = new String (dest);
}
}
return label;
}
void setParent(long /*int*/ aParent) {
parent = aParent;
}
/* nsIPrompt */
int Alert (long /*int*/ aDialogTitle, long /*int*/ aText) {
final Browser browser = getBrowser ();
int length = XPCOM.strlen_PRUnichar (aDialogTitle);
char[] dest = new char[length];
XPCOM.memmove (dest, aDialogTitle, length * 2);
String titleLabel = new String (dest);
length = XPCOM.strlen_PRUnichar (aText);
dest = new char[length];
XPCOM.memmove (dest, aText, length * 2);
String textLabel = new String (dest);
/*
* If mozilla is re-navigating to a page with a bad certificate in order
* to get its certificate info then do not show cert error message alerts.
*/
if (browser != null) {
Mozilla mozilla = (Mozilla)browser.webBrowser;
if (mozilla.isRetrievingBadCert) return XPCOM.NS_OK;
}
Shell shell = browser == null ? new Shell () : browser.getShell ();
MessageBox messageBox = new MessageBox (shell, SWT.OK | SWT.ICON_WARNING);
messageBox.setText (titleLabel);
messageBox.setMessage (textLabel);
messageBox.open ();
return XPCOM.NS_OK;
}
int AlertCheck (long /*int*/ aDialogTitle, long /*int*/ aText, long /*int*/ aCheckMsg, long /*int*/ aCheckState) {
Browser browser = getBrowser ();
int length = XPCOM.strlen_PRUnichar (aDialogTitle);
char[] dest = new char[length];
XPCOM.memmove (dest, aDialogTitle, length * 2);
String titleLabel = new String (dest);
length = XPCOM.strlen_PRUnichar (aText);
dest = new char[length];
XPCOM.memmove (dest, aText, length * 2);
String textLabel = new String (dest);
length = XPCOM.strlen_PRUnichar (aCheckMsg);
dest = new char[length];
XPCOM.memmove (dest, aCheckMsg, length * 2);
String checkLabel = new String (dest);
Shell shell = browser == null ? new Shell () : browser.getShell ();
PromptDialog dialog = new PromptDialog (shell);
boolean[] check = new boolean[1];
if (aCheckState != 0) XPCOM.memmove (check, aCheckState);
dialog.alertCheck (titleLabel, textLabel, checkLabel, check);
if (aCheckState != 0) XPCOM.memmove (aCheckState, check);
return XPCOM.NS_OK;
}
int Confirm (long /*int*/ aDialogTitle, long /*int*/ aText, long /*int*/ _retval) {
Browser browser = getBrowser ();
if (browser != null && ((Mozilla)browser.webBrowser).ignoreAllMessages) {
XPCOM.memmove (_retval, new boolean[] {true});
return XPCOM.NS_OK;
}
int length = XPCOM.strlen_PRUnichar (aDialogTitle);
char[] dest = new char[length];
XPCOM.memmove (dest, aDialogTitle, length * 2);
String titleLabel = new String (dest);
length = XPCOM.strlen_PRUnichar (aText);
dest = new char[length];
XPCOM.memmove (dest, aText, length * 2);
String textLabel = new String (dest);
Shell shell = browser == null ? new Shell () : browser.getShell ();
MessageBox messageBox = new MessageBox (shell, SWT.OK | SWT.CANCEL | SWT.ICON_QUESTION);
messageBox.setText (titleLabel);
messageBox.setMessage (textLabel);
int id = messageBox.open ();
boolean[] result = {id == SWT.OK};
XPCOM.memmove (_retval, result);
return XPCOM.NS_OK;
}
int ConfirmCheck (long /*int*/ aDialogTitle, long /*int*/ aText, long /*int*/ aCheckMsg, long /*int*/ aCheckState, long /*int*/ _retval) {
return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
}
int ConfirmEx (long /*int*/ aDialogTitle, long /*int*/ aText, int aButtonFlags, long /*int*/ aButton0Title, long /*int*/ aButton1Title, long /*int*/ aButton2Title, long /*int*/ aCheckMsg, long /*int*/ aCheckState, long /*int*/ _retval) {
Browser browser = getBrowser ();
int length = XPCOM.strlen_PRUnichar (aDialogTitle);
char[] dest = new char[length];
XPCOM.memmove (dest, aDialogTitle, length * 2);
String titleLabel = new String (dest);
length = XPCOM.strlen_PRUnichar (aText);
dest = new char[length];
XPCOM.memmove (dest, aText, length * 2);
String textLabel = new String (dest);
String checkLabel = null;
if (aCheckMsg != 0) {
length = XPCOM.strlen_PRUnichar (aCheckMsg);
dest = new char[length];
XPCOM.memmove (dest, aCheckMsg, length * 2);
checkLabel = new String (dest);
}
String button0Label = getLabel (aButtonFlags, nsIPrompt.BUTTON_POS_0, aButton0Title);
String button1Label = getLabel (aButtonFlags, nsIPrompt.BUTTON_POS_1, aButton1Title);
String button2Label = getLabel (aButtonFlags, nsIPrompt.BUTTON_POS_2, aButton2Title);
int defaultIndex = 0;
if ((aButtonFlags & nsIPrompt.BUTTON_POS_1_DEFAULT) != 0) {
defaultIndex = 1;
} else if ((aButtonFlags & nsIPrompt.BUTTON_POS_2_DEFAULT) != 0) {
defaultIndex = 2;
}
Shell shell = browser == null ? new Shell () : browser.getShell ();
PromptDialog dialog = new PromptDialog (shell);
boolean[] check = new boolean[1];
int[] result = new int[1];
if (aCheckState != 0) XPCOM.memmove (check, aCheckState);
dialog.confirmEx (titleLabel, textLabel, checkLabel, button0Label, button1Label, button2Label, defaultIndex, check, result);
if (aCheckState != 0) XPCOM.memmove (aCheckState, check);
XPCOM.memmove (_retval, result, 4);
return XPCOM.NS_OK;
}
int Prompt (long /*int*/ aDialogTitle, long /*int*/ aText, long /*int*/ aValue, long /*int*/ aCheckMsg, long /*int*/ aCheckState, long /*int*/ _retval) {
Browser browser = getBrowser ();
String titleLabel = null, textLabel, checkLabel = null;
String[] valueLabel = new String[1];
char[] dest;
int length;
if (aDialogTitle != 0) {
length = XPCOM.strlen_PRUnichar (aDialogTitle);
dest = new char[length];
XPCOM.memmove (dest, aDialogTitle, length * 2);
titleLabel = new String (dest);
}
length = XPCOM.strlen_PRUnichar (aText);
dest = new char[length];
XPCOM.memmove (dest, aText, length * 2);
textLabel = new String (dest);
long /*int*/[] valueAddr = new long /*int*/[1];
XPCOM.memmove (valueAddr, aValue, C.PTR_SIZEOF);
if (valueAddr[0] != 0) {
length = XPCOM.strlen_PRUnichar (valueAddr[0]);
dest = new char[length];
XPCOM.memmove (dest, valueAddr[0], length * 2);
valueLabel[0] = new String (dest);
}
if (aCheckMsg != 0) {
length = XPCOM.strlen_PRUnichar (aCheckMsg);
if (length > 0) {
dest = new char[length];
XPCOM.memmove (dest, aCheckMsg, length * 2);
checkLabel = new String (dest);
}
}
Shell shell = browser == null ? new Shell () : browser.getShell ();
PromptDialog dialog = new PromptDialog (shell);
boolean[] check = new boolean[1], result = new boolean[1];
if (aCheckState != 0) XPCOM.memmove (check, aCheckState);
dialog.prompt (titleLabel, textLabel, checkLabel, valueLabel, check, result);
XPCOM.memmove (_retval, result);
if (result[0]) {
/*
* User selected OK. User name and password are returned as PRUnichar values. Any default
* value that we override must be freed using the nsIMemory service.
*/
if (valueLabel[0] != null) {
long /*int*/[] result2 = new long /*int*/[1];
int rc = XPCOM.NS_GetServiceManager (result2);
if (rc != XPCOM.NS_OK) SWT.error (rc);
if (result2[0] == 0) SWT.error (XPCOM.NS_NOINTERFACE);
nsIServiceManager serviceManager = new nsIServiceManager (result2[0]);
result2[0] = 0;
byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_MEMORY_CONTRACTID, true);
rc = serviceManager.GetServiceByContractID (aContractID, nsIMemory.NS_IMEMORY_IID, result2);
if (rc != XPCOM.NS_OK) SWT.error (rc);
if (result2[0] == 0) SWT.error (XPCOM.NS_NOINTERFACE);
serviceManager.Release ();
nsIMemory memory = new nsIMemory (result2[0]);
result2[0] = 0;
int cnt = valueLabel[0].length ();
char[] buffer = new char[cnt + 1];
valueLabel[0].getChars (0, cnt, buffer, 0);
int size = buffer.length * 2;
long /*int*/ ptr = memory.Alloc (size);
XPCOM.memmove (ptr, buffer, size);
XPCOM.memmove (aValue, new long /*int*/[] {ptr}, C.PTR_SIZEOF);
if (valueAddr[0] != 0) {
memory.Free (valueAddr[0]);
}
memory.Release ();
}
}
if (aCheckState != 0) XPCOM.memmove (aCheckState, check);
return XPCOM.NS_OK;
}
int PromptAuth(long /*int*/ aChannel, int level, long /*int*/ authInfo, long /*int*/ _retval) {
nsIAuthInformation auth = new nsIAuthInformation (authInfo);
Browser browser = getBrowser ();
if (browser != null) {
Mozilla mozilla = (Mozilla)browser.webBrowser;
/*
* Do not invoke the listeners if this challenge has been failed too many
* times because a listener is likely giving incorrect credentials repeatedly
* and will do so indefinitely.
*/
if (mozilla.authCount++ < 3) {
for (int i = 0; i < mozilla.authenticationListeners.length; i++) {
AuthenticationEvent event = new AuthenticationEvent (browser);
event.location = mozilla.lastNavigateURL;
mozilla.authenticationListeners[i].authenticate (event);
if (!event.doit) {
XPCOM.memmove (_retval, new boolean[] {false});
return XPCOM.NS_OK;
}
if (event.user != null && event.password != null) {
nsEmbedString string = new nsEmbedString (event.user);
int rc = auth.SetUsername (string.getAddress ());
if (rc != XPCOM.NS_OK) SWT.error (rc);
string.dispose ();
string = new nsEmbedString (event.password);
rc = auth.SetPassword (string.getAddress ());
if (rc != XPCOM.NS_OK) SWT.error (rc);
string.dispose ();
XPCOM.memmove (_retval, new boolean[] {true});
return XPCOM.NS_OK;
}
}
}
}
/* no listener handled the challenge, so show an authentication dialog */
String checkLabel = null;
boolean[] checkValue = new boolean[1];
String[] userLabel = new String[1], passLabel = new String[1];
String title = SWT.getMessage ("SWT_Authentication_Required"); //$NON-NLS-1$
/* get initial username and password values */
long /*int*/ ptr = XPCOM.nsEmbedString_new ();
int rc = auth.GetUsername (ptr);
if (rc != XPCOM.NS_OK) SWT.error (rc);
int length = XPCOM.nsEmbedString_Length (ptr);
long /*int*/ buffer = XPCOM.nsEmbedString_get (ptr);
char[] chars = new char[length];
XPCOM.memmove (chars, buffer, length * 2);
userLabel[0] = new String (chars);
XPCOM.nsEmbedString_delete (ptr);
ptr = XPCOM.nsEmbedString_new ();
rc = auth.GetPassword (ptr);
if (rc != XPCOM.NS_OK) SWT.error (rc);
length = XPCOM.nsEmbedString_Length (ptr);
buffer = XPCOM.nsEmbedString_get (ptr);
chars = new char[length];
XPCOM.memmove (chars, buffer, length * 2);
passLabel[0] = new String (chars);
XPCOM.nsEmbedString_delete (ptr);
/* compute the message text */
ptr = XPCOM.nsEmbedString_new ();
rc = auth.GetRealm (ptr);
if (rc != XPCOM.NS_OK) SWT.error (rc);
length = XPCOM.nsEmbedString_Length (ptr);
buffer = XPCOM.nsEmbedString_get (ptr);
chars = new char[length];
XPCOM.memmove (chars, buffer, length * 2);
String realm = new String (chars);
XPCOM.nsEmbedString_delete (ptr);
nsIChannel channel = new nsIChannel (aChannel);
long /*int*/[] uri = new long /*int*/[1];
rc = channel.GetURI (uri);
if (rc != XPCOM.NS_OK) SWT.error (rc);
if (uri[0] == 0) Mozilla.error (XPCOM.NS_NOINTERFACE);
nsIURI nsURI = new nsIURI (uri[0]);
long /*int*/ host = XPCOM.nsEmbedCString_new ();
rc = nsURI.GetHost (host);
if (rc != XPCOM.NS_OK) SWT.error (rc);
length = XPCOM.nsEmbedCString_Length (host);
buffer = XPCOM.nsEmbedCString_get (host);
byte[] bytes = new byte[length];
XPCOM.memmove (bytes, buffer, length);
String hostString = new String (bytes);
XPCOM.nsEmbedCString_delete (host);
nsURI.Release ();
String message;
if (realm.length () > 0 && hostString.length () > 0) {
message = Compatibility.getMessage ("SWT_Enter_Username_and_Password", new String[] {realm, hostString}); //$NON-NLS-1$
} else {
message = ""; //$NON-NLS-1$
}
/* open the prompter */
Shell shell = browser == null ? new Shell () : browser.getShell ();
PromptDialog dialog = new PromptDialog (shell);
boolean[] result = new boolean[1];
dialog.promptUsernameAndPassword (title, message, checkLabel, userLabel, passLabel, checkValue, result);
XPCOM.memmove (_retval, result);
if (result[0]) { /* User selected OK */
nsEmbedString string = new nsEmbedString (userLabel[0]);
rc = auth.SetUsername(string.getAddress ());
if (rc != XPCOM.NS_OK) SWT.error (rc);
string.dispose ();
string = new nsEmbedString (passLabel[0]);
rc = auth.SetPassword(string.getAddress ());
if (rc != XPCOM.NS_OK) SWT.error (rc);
string.dispose ();
}
return XPCOM.NS_OK;
}
int PromptUsernameAndPassword (long /*int*/ aDialogTitle, long /*int*/ aText, long /*int*/ aUsername, long /*int*/ aPassword, long /*int*/ aCheckMsg, long /*int*/ aCheckState, long /*int*/ _retval) {
Browser browser = getBrowser ();
String user = null, password = null;
if (browser != null) {
Mozilla mozilla = (Mozilla)browser.webBrowser;
/*
* Do not invoke the listeners if this challenge has been failed too many
* times because a listener is likely giving incorrect credentials repeatedly
* and will do so indefinitely.
*/
if (mozilla.authCount++ < 3) {
for (int i = 0; i < mozilla.authenticationListeners.length; i++) {
AuthenticationEvent event = new AuthenticationEvent (browser);
event.location = mozilla.lastNavigateURL;
mozilla.authenticationListeners[i].authenticate (event);
if (!event.doit) {
XPCOM.memmove (_retval, new boolean[] {false});
return XPCOM.NS_OK;
}
if (event.user != null && event.password != null) {
user = event.user;
password = event.password;
XPCOM.memmove (_retval, new boolean[] {true});
break;
}
}
}
}
if (user == null) {
/* no listener handled the challenge, so show an authentication dialog */
String titleLabel, textLabel, checkLabel = null;
String[] userLabel = new String[1], passLabel = new String[1];
char[] dest;
int length;
if (aDialogTitle != 0) {
length = XPCOM.strlen_PRUnichar (aDialogTitle);
dest = new char[length];
XPCOM.memmove (dest, aDialogTitle, length * 2);
titleLabel = new String (dest);
} else {
titleLabel = SWT.getMessage ("SWT_Authentication_Required"); //$NON-NLS-1$
}
length = XPCOM.strlen_PRUnichar (aText);
dest = new char[length];
XPCOM.memmove (dest, aText, length * 2);
textLabel = new String (dest);
long /*int*/[] userAddr = new long /*int*/[1];
XPCOM.memmove (userAddr, aUsername, C.PTR_SIZEOF);
if (userAddr[0] != 0) {
length = XPCOM.strlen_PRUnichar (userAddr[0]);
dest = new char[length];
XPCOM.memmove (dest, userAddr[0], length * 2);
userLabel[0] = new String (dest);
}
long /*int*/[] passAddr = new long /*int*/[1];
XPCOM.memmove (passAddr, aPassword, C.PTR_SIZEOF);
if (passAddr[0] != 0) {
length = XPCOM.strlen_PRUnichar (passAddr[0]);
dest = new char[length];
XPCOM.memmove (dest, passAddr[0], length * 2);
passLabel[0] = new String (dest);
}
if (aCheckMsg != 0) {
length = XPCOM.strlen_PRUnichar (aCheckMsg);
if (length > 0) {
dest = new char[length];
XPCOM.memmove (dest, aCheckMsg, length * 2);
checkLabel = new String (dest);
}
}
Shell shell = browser == null ? new Shell () : browser.getShell ();
PromptDialog dialog = new PromptDialog (shell);
boolean[] check = new boolean[1], result = new boolean[1];
if (aCheckState != 0) XPCOM.memmove (check, aCheckState);
dialog.promptUsernameAndPassword (titleLabel, textLabel, checkLabel, userLabel, passLabel, check, result);
XPCOM.memmove (_retval, result);
if (result[0]) {
/* User selected OK */
user = userLabel[0];
password = passLabel[0];
}
if (aCheckState != 0) XPCOM.memmove (aCheckState, check);
}
if (user != null) {
/*
* User name and password are returned as PRUnichar values. Any default
* value that we override must be freed using the nsIMemory service.
*/
long /*int*/[] userAddr = new long /*int*/[1];
XPCOM.memmove (userAddr, aUsername, C.PTR_SIZEOF);
long /*int*/[] passAddr = new long /*int*/[1];
XPCOM.memmove (passAddr, aPassword, C.PTR_SIZEOF);
long /*int*/[] result = new long /*int*/[1];
int rc = XPCOM.NS_GetServiceManager (result);
if (rc != XPCOM.NS_OK) SWT.error (rc);
if (result[0] == 0) SWT.error (XPCOM.NS_NOINTERFACE);
nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
result[0] = 0;
byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_MEMORY_CONTRACTID, true);
rc = serviceManager.GetServiceByContractID (aContractID, nsIMemory.NS_IMEMORY_IID, result);
if (rc != XPCOM.NS_OK) SWT.error (rc);
if (result[0] == 0) SWT.error (XPCOM.NS_NOINTERFACE);
serviceManager.Release ();
nsIMemory memory = new nsIMemory (result[0]);
result[0] = 0;
if (userAddr[0] != 0) memory.Free (userAddr[0]);
if (passAddr[0] != 0) memory.Free (passAddr[0]);
memory.Release ();
/* write the name and password values */
int cnt = user.length ();
char[] buffer = new char[cnt + 1];
user.getChars (0, cnt, buffer, 0);
int size = buffer.length * 2;
long /*int*/ ptr = C.malloc (size);
XPCOM.memmove (ptr, buffer, size);
XPCOM.memmove (aUsername, new long /*int*/[] {ptr}, C.PTR_SIZEOF);
cnt = password.length ();
buffer = new char[cnt + 1];
password.getChars (0, cnt, buffer, 0);
size = buffer.length * 2;
ptr = C.malloc (size);
XPCOM.memmove (ptr, buffer, size);
XPCOM.memmove (aPassword, new long /*int*/[] {ptr}, C.PTR_SIZEOF);
}
return XPCOM.NS_OK;
}
int PromptPassword (long /*int*/ aDialogTitle, long /*int*/ aText, long /*int*/ aPassword, long /*int*/ aCheckMsg, long /*int*/ aCheckState, long /*int*/ _retval) {
return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
}
int Select (long /*int*/ aDialogTitle, long /*int*/ aText, int aCount, long /*int*/ aSelectList, long /*int*/ aOutSelection, long /*int*/ _retval) {
return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
}
}