michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #include "nsFormSigningDialog.h" michael@0: #include "nsNSSDialogHelper.h" michael@0: #include "nsCOMPtr.h" michael@0: #include "nsIDialogParamBlock.h" michael@0: #include "nsIComponentManager.h" michael@0: #include "nsIServiceManager.h" michael@0: #include "nsIInterfaceRequestor.h" michael@0: #include "nsIInterfaceRequestorUtils.h" michael@0: #include "nsLiteralString.h" michael@0: #include "nsXPIDLString.h" michael@0: michael@0: nsFormSigningDialog::nsFormSigningDialog() michael@0: { michael@0: } michael@0: michael@0: nsFormSigningDialog::~nsFormSigningDialog() michael@0: { michael@0: } michael@0: michael@0: NS_IMPL_ISUPPORTS(nsFormSigningDialog, nsIFormSigningDialog) michael@0: michael@0: NS_IMETHODIMP michael@0: nsFormSigningDialog::ConfirmSignText(nsIInterfaceRequestor *aContext, michael@0: const nsAString &aHost, michael@0: const nsAString &aSignText, michael@0: const char16_t **aCertNickList, michael@0: const char16_t **aCertDetailsList, michael@0: uint32_t aCount, int32_t *aSelectedIndex, michael@0: nsAString &aPassword, bool *aCanceled) michael@0: { michael@0: *aCanceled = true; michael@0: michael@0: // Get the parent window for the dialog michael@0: nsCOMPtr parent = do_GetInterface(aContext); michael@0: michael@0: nsresult rv; michael@0: nsCOMPtr block = michael@0: do_CreateInstance(NS_DIALOGPARAMBLOCK_CONTRACTID, &rv); michael@0: NS_ENSURE_SUCCESS(rv, rv); michael@0: michael@0: block->SetNumberStrings(3 + aCount * 2); michael@0: michael@0: rv = block->SetString(0, PromiseFlatString(aHost).get()); michael@0: NS_ENSURE_SUCCESS(rv, rv); michael@0: michael@0: rv = block->SetString(1, PromiseFlatString(aSignText).get()); michael@0: NS_ENSURE_SUCCESS(rv, rv); michael@0: michael@0: uint32_t i; michael@0: for (i = 0; i < aCount; ++i) { michael@0: rv = block->SetString(2 + 2 * i, aCertNickList[i]); michael@0: NS_ENSURE_SUCCESS(rv, rv); michael@0: michael@0: rv = block->SetString(2 + (2 * i + 1), aCertDetailsList[i]); michael@0: NS_ENSURE_SUCCESS(rv, rv); michael@0: } michael@0: michael@0: rv = block->SetInt(0, aCount); michael@0: NS_ENSURE_SUCCESS(rv, rv); michael@0: michael@0: rv = nsNSSDialogHelper::openDialog(parent, michael@0: "chrome://pippki/content/formsigning.xul", michael@0: block); michael@0: NS_ENSURE_SUCCESS(rv, rv); michael@0: michael@0: int32_t status; michael@0: rv = block->GetInt(0, &status); michael@0: NS_ENSURE_SUCCESS(rv, rv); michael@0: michael@0: if (status == 0) { michael@0: *aCanceled = true; michael@0: } michael@0: else { michael@0: *aCanceled = false; michael@0: michael@0: rv = block->GetInt(1, aSelectedIndex); michael@0: NS_ENSURE_SUCCESS(rv, rv); michael@0: michael@0: nsXPIDLString pw; michael@0: rv = block->GetString(0, getter_Copies(pw)); michael@0: NS_ENSURE_SUCCESS(rv, rv); michael@0: michael@0: aPassword = pw; michael@0: } michael@0: michael@0: return NS_OK; michael@0: }