From 1a56a2fde44cbbac5d928bfd6b6c89eb4eb244f5 Mon Sep 17 00:00:00 2001 From: "smfr%smfr.org" Date: Tue, 20 Sep 2005 16:51:14 +0000 Subject: [PATCH] Fix bug 308700: hang when generating certificates on some sites, because the "completion" PLEvent wasn't getting handled promptly. Fix is to push a new event queue while keygen is in progress. Also wired up the "Cancel" button in the nib. --- .../keyedobjects.nib | Bin 5255 -> 5377 bytes camino/src/browser/SecurityDialogs.mm | 23 +++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/camino/resources/localized/English.lproj/GenerateKeyPairDialog.nib/keyedobjects.nib b/camino/resources/localized/English.lproj/GenerateKeyPairDialog.nib/keyedobjects.nib index b445b6b577862be32c38885da49ad51ec3a0567b..830975cc1154485a9651bc0ac3509c997af25438 100644 GIT binary patch delta 2787 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 diff --git a/camino/src/browser/SecurityDialogs.mm b/camino/src/browser/SecurityDialogs.mm index 41130a4aa8fd..133a0983118d 100644 --- a/camino/src/browser/SecurityDialogs.mm +++ b/camino/src/browser/SecurityDialogs.mm @@ -55,6 +55,8 @@ #include "nsIInterfaceRequestorUtils.h" #include "nsIDOMWindowInternal.h" #include "nsIDOMLocation.h" +#include "nsIEventQueueService.h" +#include "nsIEventQueue.h" #include "nsServiceManagerUtils.h" #include "nsIX509Cert.h" @@ -864,12 +866,28 @@ SecurityDialogs::DisplayGeneratingKeypairInfo(nsIInterfaceRequestor *ctx, nsIKey if (!dialogController) return NS_ERROR_FAILURE; + // We have to push a new event queue here. This is necessary because + // we might be getting called via the handling of a PLEvent, and the observer + // call that notifies us that keygen is complete is also called via a PLEvent + // (under the hood, it's a proxied XPCOM call). If we don't spin up a new event + // queue, that proxied "Observe" wouldn't get handled until the stack unwinds + // back to the PLEvent handling code, so we'd never see the event. + nsCOMPtr eventQueueService = do_GetService(NS_EVENTQUEUESERVICE_CONTRACTID); + if (!eventQueueService) return NS_ERROR_FAILURE; + + nsCOMPtr newQueue; + eventQueueService->PushThreadEventQueue(getter_AddRefs(newQueue)); + nsCOMPtr completionObserver = new GenKeyPairCompletionObserver(dialogController); runnable->StartKeyGeneration(completionObserver); - - // does this guy have to be modal? + int result = [NSApp runModalForWindow:[dialogController window]]; + eventQueueService->PopThreadEventQueue(newQueue); + + [dialogController release]; + dialogController = nil; + if (result == NSAlertAlternateReturn) // cancelled { PRBool threadAlreadyClosedDialog; @@ -877,7 +895,6 @@ SecurityDialogs::DisplayGeneratingKeypairInfo(nsIInterfaceRequestor *ctx, nsIKey return NS_ERROR_FAILURE; } - [dialogController release]; return NS_OK; }