Mercurial > projects > dwt-mac
view dwt/browser/PromptService2.d @ 0:380af2bdd8e5
Upload of whole dwt tree
author | Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com> |
---|---|
date | Sat, 09 Aug 2008 17:00:02 +0200 |
parents | |
children | 1a8b3cb347e0 |
line wrap: on
line source
/******************************************************************************* * Copyright (c) 2003, 2008 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 *******************************************************************************/ module dwt.browser.PromptService2; import dwt.dwthelper.utils; import dwt.DWT; import dwt.internal.C; import dwt.internal.Compatibility; import dwt.internal.mozilla.XPCOM; import dwt.internal.mozilla.XPCOMObject; import dwt.internal.mozilla.nsEmbedString; import dwt.internal.mozilla.nsIAuthInformation; import dwt.internal.mozilla.nsIChannel; import dwt.internal.mozilla.nsID; import dwt.internal.mozilla.nsIDOMWindow; import dwt.internal.mozilla.nsIEmbeddingSiteWindow; import dwt.internal.mozilla.nsIMemory; import dwt.internal.mozilla.nsIPromptService; import dwt.internal.mozilla.nsIPromptService2; import dwt.internal.mozilla.nsIServiceManager; import dwt.internal.mozilla.nsISupports; import dwt.internal.mozilla.nsIURI; import dwt.internal.mozilla.nsIWebBrowserChrome; import dwt.internal.mozilla.nsIWindowWatcher; import dwt.widgets.MessageBox; import dwt.widgets.Shell; class PromptService2 { XPCOMObject supports; XPCOMObject promptService; XPCOMObject promptService2; int refCount = 0; PromptService2 () { 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}) { public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);} public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();} public int /*long*/ method2 (int /*long*/[] args) {return Release ();} }; promptService = new XPCOMObject (new int[] {2, 0, 0, 3, 5, 4, 6, 10, 7, 8, 7, 7}) { public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);} public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();} public int /*long*/ method2 (int /*long*/[] args) {return Release ();} public int /*long*/ method3 (int /*long*/[] args) {return Alert (args[0], args[1], args[2]);} public int /*long*/ method4 (int /*long*/[] args) {return AlertCheck (args[0], args[1], args[2], args[3], args[4]);} public int /*long*/ method5 (int /*long*/[] args) {return Confirm (args[0], args[1], args[2], args[3]);} public int /*long*/ method6 (int /*long*/[] args) {return ConfirmCheck (args[0], args[1], args[2], args[3], args[4], args[5]);} public int /*long*/ method7 (int /*long*/[] args) {return ConfirmEx (args[0], args[1], args[2], (int)/*64*/args[3], args[4], args[5], args[6], args[7], args[8], args[9]);} public int /*long*/ method8 (int /*long*/[] args) {return Prompt (args[0], args[1], args[2], args[3], args[4], args[5], args[6]);} public int /*long*/ method9 (int /*long*/[] args) {return PromptUsernameAndPassword (args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);} public int /*long*/ method10 (int /*long*/[] args) {return PromptPassword (args[0], args[1], args[2], args[3], args[4], args[5], args[6]);} public int /*long*/ method11 (int /*long*/[] args) {return Select (args[0], args[1], args[2], (int)/*64*/args[3], args[4], args[5], args[6]);} }; promptService2 = new XPCOMObject (new int[] {2, 0, 0, 3, 5, 4, 6, 10, 7, 8, 7, 7, 7, 9}) { public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);} public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();} public int /*long*/ method2 (int /*long*/[] args) {return Release ();} public int /*long*/ method3 (int /*long*/[] args) {return Alert (args[0], args[1], args[2]);} public int /*long*/ method4 (int /*long*/[] args) {return AlertCheck (args[0], args[1], args[2], args[3], args[4]);} public int /*long*/ method5 (int /*long*/[] args) {return Confirm (args[0], args[1], args[2], args[3]);} public int /*long*/ method6 (int /*long*/[] args) {return ConfirmCheck (args[0], args[1], args[2], args[3], args[4], args[5]);} public int /*long*/ method7 (int /*long*/[] args) {return ConfirmEx (args[0], args[1], args[2], (int)/*64*/args[3], args[4], args[5], args[6], args[7], args[8], args[9]);} public int /*long*/ method8 (int /*long*/[] args) {return Prompt (args[0], args[1], args[2], args[3], args[4], args[5], args[6]);} public int /*long*/ method9 (int /*long*/[] args) {return PromptUsernameAndPassword (args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);} public int /*long*/ method10 (int /*long*/[] args) {return PromptPassword (args[0], args[1], args[2], args[3], args[4], args[5], args[6]);} public int /*long*/ method11 (int /*long*/[] args) {return Select (args[0], args[1], args[2], (int)/*64*/args[3], args[4], args[5], args[6]);} public int /*long*/ method12 (int /*long*/[] args) {return PromptAuth (args[0], args[1], (int)/*64*/args[2], args[3], args[4], args[5], args[6]);} public int /*long*/ method13 (int /*long*/[] args) {return AsyncPromptAuth (args[0], args[1], args[2], args[3], (int)/*64*/args[4], args[5], args[6], args[7], args[8]);} }; } void disposeCOMInterfaces () { if (supports !is null) { supports.dispose (); supports = null; } if (promptService !is null) { promptService.dispose (); promptService = null; } if (promptService2 !is null) { promptService2.dispose (); promptService2 = null; } } int /*long*/ getAddress () { return promptService2.getAddress (); } int QueryInterface (int /*long*/ riid, int /*long*/ ppvObject) { if (riid is 0 || ppvObject is 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 int /*long*/[] {supports.getAddress ()}, C.PTR_SIZEOF); AddRef (); return XPCOM.NS_OK; } if (guid.Equals (nsIPromptService.NS_IPROMPTSERVICE_IID)) { XPCOM.memmove (ppvObject, new int /*long*/[] {promptService.getAddress ()}, C.PTR_SIZEOF); AddRef (); return XPCOM.NS_OK; } if (guid.Equals (nsIPromptService2.NS_IPROMPTSERVICE2_IID)) { XPCOM.memmove (ppvObject, new int /*long*/[] {promptService2.getAddress ()}, C.PTR_SIZEOF); AddRef (); return XPCOM.NS_OK; } XPCOM.memmove (ppvObject, new int /*long*/[] {0}, C.PTR_SIZEOF); return XPCOM.NS_ERROR_NO_INTERFACE; } int Release () { refCount--; if (refCount is 0) disposeCOMInterfaces (); return refCount; } Browser getBrowser (int /*long*/ aDOMWindow) { if (aDOMWindow is 0) return null; int /*long*/[] result = new int /*long*/[1]; int rc = XPCOM.NS_GetServiceManager (result); if (rc !is XPCOM.NS_OK) Mozilla.error (rc); if (result[0] is 0) Mozilla.error (XPCOM.NS_NOINTERFACE); nsIServiceManager serviceManager = new nsIServiceManager (result[0]); result[0] = 0; byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_WINDOWWATCHER_CONTRACTID, true); rc = serviceManager.GetServiceByContractID (aContractID, nsIWindowWatcher.NS_IWINDOWWATCHER_IID, result); if (rc !is XPCOM.NS_OK) Mozilla.error(rc); if (result[0] is 0) Mozilla.error (XPCOM.NS_NOINTERFACE); serviceManager.Release (); nsIWindowWatcher windowWatcher = new nsIWindowWatcher (result[0]); result[0] = 0; /* the chrome will only be answered for the top-level nsIDOMWindow */ nsIDOMWindow window = new nsIDOMWindow (aDOMWindow); rc = window.GetTop (result); if (rc !is XPCOM.NS_OK) Mozilla.error (rc); if (result[0] is 0) Mozilla.error (XPCOM.NS_NOINTERFACE); aDOMWindow = result[0]; result[0] = 0; rc = windowWatcher.GetChromeForWindow (aDOMWindow, result); if (rc !is XPCOM.NS_OK) Mozilla.error (rc); if (result[0] is 0) Mozilla.error (XPCOM.NS_NOINTERFACE); windowWatcher.Release (); nsIWebBrowserChrome webBrowserChrome = new nsIWebBrowserChrome (result[0]); result[0] = 0; rc = webBrowserChrome.QueryInterface (nsIEmbeddingSiteWindow.NS_IEMBEDDINGSITEWINDOW_IID, result); if (rc !is XPCOM.NS_OK) Mozilla.error (rc); if (result[0] is 0) Mozilla.error (XPCOM.NS_NOINTERFACE); webBrowserChrome.Release (); nsIEmbeddingSiteWindow embeddingSiteWindow = new nsIEmbeddingSiteWindow (result[0]); result[0] = 0; rc = embeddingSiteWindow.GetSiteWindow (result); if (rc !is XPCOM.NS_OK) Mozilla.error (rc); if (result[0] is 0) Mozilla.error (XPCOM.NS_NOINTERFACE); embeddingSiteWindow.Release (); return Mozilla.findBrowser (result[0]); } String getLabel (int buttonFlag, int index, int /*long*/ buttonTitle) { String label = null; int flag = (buttonFlag & (0xff * index)) / index; switch (flag) { case nsIPromptService.BUTTON_TITLE_CANCEL : label = DWT.getMessage ("SWT_Cancel"); break; //$NON-NLS-1$ case nsIPromptService.BUTTON_TITLE_NO : label = DWT.getMessage ("SWT_No"); break; //$NON-NLS-1$ case nsIPromptService.BUTTON_TITLE_OK : label = DWT.getMessage ("SWT_OK"); break; //$NON-NLS-1$ case nsIPromptService.BUTTON_TITLE_SAVE : label = DWT.getMessage ("SWT_Save"); break; //$NON-NLS-1$ case nsIPromptService.BUTTON_TITLE_YES : label = DWT.getMessage ("SWT_Yes"); break; //$NON-NLS-1$ case nsIPromptService.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; } /* nsIPromptService */ int Alert (int /*long*/ aParent, int /*long*/ aDialogTitle, int /*long*/ aText) { Browser browser = getBrowser (aParent); 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 is null ? new Shell () : browser.getShell (); MessageBox messageBox = new MessageBox (shell, DWT.OK | DWT.ICON_WARNING); messageBox.setText (titleLabel); messageBox.setMessage (textLabel); messageBox.open (); return XPCOM.NS_OK; } int AlertCheck (int /*long*/ aParent, int /*long*/ aDialogTitle, int /*long*/ aText, int /*long*/ aCheckMsg, int /*long*/ aCheckState) { Browser browser = getBrowser (aParent); 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 is null ? new Shell () : browser.getShell (); PromptDialog dialog = new PromptDialog (shell); int[] check = new int[1]; if (aCheckState !is 0) XPCOM.memmove (check, aCheckState, 4); /* PRBool */ dialog.alertCheck (titleLabel, textLabel, checkLabel, check); if (aCheckState !is 0) XPCOM.memmove (aCheckState, check, 4); /* PRBool */ return XPCOM.NS_OK; } int AsyncPromptAuth(int /*long*/ aParent, int /*long*/ aChannel, int /*long*/ aCallback, int /*long*/ aContext, int level, int /*long*/ authInfo, int /*long*/ checkboxLabel, int /*long*/ checkValue, int /*long*/ _retval) { return XPCOM.NS_ERROR_NOT_IMPLEMENTED; } int Confirm (int /*long*/ aParent, int /*long*/ aDialogTitle, int /*long*/ aText, int /*long*/ _retval) { Browser browser = getBrowser (aParent); 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 is null ? new Shell () : browser.getShell (); MessageBox messageBox = new MessageBox (shell, DWT.OK | DWT.CANCEL | DWT.ICON_QUESTION); messageBox.setText (titleLabel); messageBox.setMessage (textLabel); int id = messageBox.open (); int[] result = {id is DWT.OK ? 1 : 0}; XPCOM.memmove (_retval, result, 4); return XPCOM.NS_OK; } int ConfirmCheck (int /*long*/ aParent, int /*long*/ aDialogTitle, int /*long*/ aText, int /*long*/ aCheckMsg, int /*long*/ aCheckState, int /*long*/ _retval) { return XPCOM.NS_ERROR_NOT_IMPLEMENTED; } int ConfirmEx (int /*long*/ aParent, int /*long*/ aDialogTitle, int /*long*/ aText, int aButtonFlags, int /*long*/ aButton0Title, int /*long*/ aButton1Title, int /*long*/ aButton2Title, int /*long*/ aCheckMsg, int /*long*/ aCheckState, int /*long*/ _retval) { Browser browser = getBrowser (aParent); 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 !is 0) { length = XPCOM.strlen_PRUnichar (aCheckMsg); dest = new char[length]; XPCOM.memmove (dest, aCheckMsg, length * 2); checkLabel = new String (dest); } String button0Label = getLabel (aButtonFlags, nsIPromptService.BUTTON_POS_0, aButton0Title); String button1Label = getLabel (aButtonFlags, nsIPromptService.BUTTON_POS_1, aButton1Title); String button2Label = getLabel (aButtonFlags, nsIPromptService.BUTTON_POS_2, aButton2Title); int defaultIndex = 0; if ((aButtonFlags & nsIPromptService.BUTTON_POS_1_DEFAULT) !is 0) { defaultIndex = 1; } else if ((aButtonFlags & nsIPromptService.BUTTON_POS_2_DEFAULT) !is 0) { defaultIndex = 2; } Shell shell = browser is null ? new Shell () : browser.getShell (); PromptDialog dialog = new PromptDialog (shell); int[] check = new int[1], result = new int[1]; if (aCheckState !is 0) XPCOM.memmove (check, aCheckState, 4); dialog.confirmEx (titleLabel, textLabel, checkLabel, button0Label, button1Label, button2Label, defaultIndex, check, result); if (aCheckState !is 0) XPCOM.memmove (aCheckState, check, 4); XPCOM.memmove (_retval, result, 4); return XPCOM.NS_OK; } int Prompt (int /*long*/ aParent, int /*long*/ aDialogTitle, int /*long*/ aText, int /*long*/ aValue, int /*long*/ aCheckMsg, int /*long*/ aCheckState, int /*long*/ _retval) { Browser browser = getBrowser (aParent); String titleLabel = null, textLabel, checkLabel = null; String[] valueLabel = new String[1]; char[] dest; int length; if (aDialogTitle !is 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); int /*long*/[] valueAddr = new int /*long*/[1]; XPCOM.memmove (valueAddr, aValue, C.PTR_SIZEOF); if (valueAddr[0] !is 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 !is 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 is null ? new Shell () : browser.getShell (); PromptDialog dialog = new PromptDialog (shell); int[] check = new int[1], result = new int[1]; if (aCheckState !is 0) XPCOM.memmove (check, aCheckState, 4); dialog.prompt (titleLabel, textLabel, checkLabel, valueLabel, check, result); XPCOM.memmove (_retval, result, 4); if (result[0] is 1) { /* * 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. */ int cnt, size; int /*long*/ ptr; char[] buffer; int /*long*/[] result2 = new int /*long*/[1]; if (valueLabel[0] !is null) { cnt = valueLabel[0].length (); buffer = new char[cnt + 1]; valueLabel[0].getChars (0, cnt, buffer, 0); size = buffer.length * 2; ptr = C.malloc (size); XPCOM.memmove (ptr, buffer, size); XPCOM.memmove (aValue, new int /*long*/[] {ptr}, C.PTR_SIZEOF); if (valueAddr[0] !is 0) { int rc = XPCOM.NS_GetServiceManager (result2); if (rc !is XPCOM.NS_OK) DWT.error (rc); if (result2[0] is 0) DWT.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 !is XPCOM.NS_OK) DWT.error (rc); if (result2[0] is 0) DWT.error (XPCOM.NS_NOINTERFACE); serviceManager.Release (); nsIMemory memory = new nsIMemory (result2[0]); result2[0] = 0; memory.Free (valueAddr[0]); memory.Release (); } } } if (aCheckState !is 0) XPCOM.memmove (aCheckState, check, 4); return XPCOM.NS_OK; } int PromptAuth(int /*long*/ aParent, int /*long*/ aChannel, int level, int /*long*/ authInfo, int /*long*/ checkboxLabel, int /*long*/ checkboxValue, int /*long*/ _retval) { Browser browser = getBrowser (aParent); String checkLabel = null; int[] checkValue = new int[1]; String[] userLabel = new String[1], passLabel = new String[1]; String title = DWT.getMessage ("SWT_Authentication_Required"); //$NON-NLS-1$ if (checkboxLabel !is 0 && checkboxValue !is 0) { int length = XPCOM.strlen_PRUnichar (checkboxLabel); char[] dest = new char[length]; XPCOM.memmove (dest, checkboxLabel, length * 2); checkLabel = new String (dest); XPCOM.memmove (checkValue, checkboxValue, 4); /* PRBool */ } /* get initial username and password values */ nsIAuthInformation auth = new nsIAuthInformation (authInfo); int /*long*/ ptr = XPCOM.nsEmbedString_new (); int rc = auth.GetUsername (ptr); if (rc !is XPCOM.NS_OK) DWT.error (rc); int length = XPCOM.nsEmbedString_Length (ptr); int /*long*/ 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 !is XPCOM.NS_OK) DWT.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 !is XPCOM.NS_OK) DWT.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); int /*long*/[] uri = new int /*long*/[1]; rc = channel.GetURI (uri); if (rc !is XPCOM.NS_OK) DWT.error (rc); if (uri[0] is 0) Mozilla.error (XPCOM.NS_NOINTERFACE); nsIURI nsURI = new nsIURI (uri[0]); int /*long*/ aSpec = XPCOM.nsEmbedCString_new (); rc = nsURI.GetHost (aSpec); if (rc !is XPCOM.NS_OK) DWT.error (rc); length = XPCOM.nsEmbedCString_Length (aSpec); buffer = XPCOM.nsEmbedCString_get (aSpec); byte[] bytes = new byte[length]; XPCOM.memmove (bytes, buffer, length); XPCOM.nsEmbedCString_delete (aSpec); String host = new String (bytes); nsURI.Release (); String message; if (realm.length () > 0 && host.length () > 0) { message = Compatibility.getMessage ("SWT_Enter_Username_and_Password", new String[] {realm, host}); //$NON-NLS-1$ } else { message = ""; //$NON-NLS-1$ } /* open the prompter */ Shell shell = browser is null ? new Shell () : browser.getShell (); PromptDialog dialog = new PromptDialog (shell); int[] result = new int[1]; dialog.promptUsernameAndPassword (title, message, checkLabel, userLabel, passLabel, checkValue, result); XPCOM.memmove (_retval, result, 4); /* PRBool */ if (result[0] is 1) { /* User selected OK */ nsEmbedString string = new nsEmbedString (userLabel[0]); rc = auth.SetUsername(string.getAddress ()); if (rc !is XPCOM.NS_OK) DWT.error (rc); string.dispose (); string = new nsEmbedString (passLabel[0]); rc = auth.SetPassword(string.getAddress ()); if (rc !is XPCOM.NS_OK) DWT.error (rc); string.dispose (); } if (checkboxValue !is 0) XPCOM.memmove (checkboxValue, checkValue, 4); /* PRBool */ return XPCOM.NS_OK; } int PromptUsernameAndPassword (int /*long*/ aParent, int /*long*/ aDialogTitle, int /*long*/ aText, int /*long*/ aUsername, int /*long*/ aPassword, int /*long*/ aCheckMsg, int /*long*/ aCheckState, int /*long*/ _retval) { Browser browser = getBrowser (aParent); String titleLabel, textLabel, checkLabel = null; String[] userLabel = new String[1], passLabel = new String[1]; char[] dest; int length; if (aDialogTitle !is 0) { length = XPCOM.strlen_PRUnichar (aDialogTitle); dest = new char[length]; XPCOM.memmove (dest, aDialogTitle, length * 2); titleLabel = new String (dest); } else { titleLabel = DWT.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); int /*long*/[] userAddr = new int /*long*/[1]; XPCOM.memmove (userAddr, aUsername, C.PTR_SIZEOF); if (userAddr[0] !is 0) { length = XPCOM.strlen_PRUnichar (userAddr[0]); dest = new char[length]; XPCOM.memmove (dest, userAddr[0], length * 2); userLabel[0] = new String (dest); } int /*long*/[] passAddr = new int /*long*/[1]; XPCOM.memmove (passAddr, aPassword, C.PTR_SIZEOF); if (passAddr[0] !is 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 !is 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 is null ? new Shell () : browser.getShell (); PromptDialog dialog = new PromptDialog (shell); int[] check = new int[1], result = new int[1]; if (aCheckState !is 0) XPCOM.memmove (check, aCheckState, 4); /* PRBool */ dialog.promptUsernameAndPassword (titleLabel, textLabel, checkLabel, userLabel, passLabel, check, result); XPCOM.memmove (_retval, result, 4); /* PRBool */ if (result[0] is 1) { /* * 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. */ int cnt, size; int /*long*/ ptr; char[] buffer; int /*long*/[] result2 = new int /*long*/[1]; if (userLabel[0] !is null) { cnt = userLabel[0].length (); buffer = new char[cnt + 1]; userLabel[0].getChars (0, cnt, buffer, 0); size = buffer.length * 2; ptr = C.malloc (size); XPCOM.memmove (ptr, buffer, size); XPCOM.memmove (aUsername, new int /*long*/[] {ptr}, C.PTR_SIZEOF); if (userAddr[0] !is 0) { int rc = XPCOM.NS_GetServiceManager (result2); if (rc !is XPCOM.NS_OK) DWT.error (rc); if (result2[0] is 0) DWT.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 !is XPCOM.NS_OK) DWT.error (rc); if (result[0] is 0) DWT.error (XPCOM.NS_NOINTERFACE); serviceManager.Release (); nsIMemory memory = new nsIMemory (result2[0]); result2[0] = 0; memory.Free (userAddr[0]); memory.Release (); } } if (passLabel[0] !is null) { cnt = passLabel[0].length (); buffer = new char[cnt + 1]; passLabel[0].getChars (0, cnt, buffer, 0); size = buffer.length * 2; ptr = C.malloc (size); XPCOM.memmove (ptr, buffer, size); XPCOM.memmove (aPassword, new int /*long*/[] {ptr}, C.PTR_SIZEOF); if (passAddr[0] !is 0) { int rc = XPCOM.NS_GetServiceManager (result2); if (rc !is XPCOM.NS_OK) DWT.error (rc); if (result2[0] is 0) DWT.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 !is XPCOM.NS_OK) DWT.error (rc); if (result2[0] is 0) DWT.error (XPCOM.NS_NOINTERFACE); serviceManager.Release (); nsIMemory memory = new nsIMemory (result2[0]); result2[0] = 0; memory.Free (passAddr[0]); memory.Release (); } } } if (aCheckState !is 0) XPCOM.memmove (aCheckState, check, 4); /* PRBool */ return XPCOM.NS_OK; } int PromptPassword (int /*long*/ aParent, int /*long*/ aDialogTitle, int /*long*/ aText, int /*long*/ aPassword, int /*long*/ aCheckMsg, int /*long*/ aCheckState, int /*long*/ _retval) { return XPCOM.NS_ERROR_NOT_IMPLEMENTED; } int Select (int /*long*/ aParent, int /*long*/ aDialogTitle, int /*long*/ aText, int aCount, int /*long*/ aSelectList, int /*long*/ aOutSelection, int /*long*/ _retval) { return XPCOM.NS_ERROR_NOT_IMPLEMENTED; } }