Index: chrome/browser/renderer_host/resource_message_filter.cc |
diff --git a/chrome/browser/renderer_host/resource_message_filter.cc b/chrome/browser/renderer_host/resource_message_filter.cc |
index 2914388dc990dd43f47a6896d9e1daa47b07720f..eb32449a8664fb9f11c6b3745c1ea3088b31bc24 100644 |
--- a/chrome/browser/renderer_host/resource_message_filter.cc |
+++ b/chrome/browser/renderer_host/resource_message_filter.cc |
@@ -35,6 +35,9 @@ |
#include "chrome/browser/geolocation/geolocation_permission_context.h" |
#include "chrome/browser/geolocation/geolocation_dispatcher_host.h" |
#include "chrome/browser/gpu_process_host.h" |
+#if defined(USE_NSS) && defined(TOOLKIT_USES_GTK) |
+#include "chrome/browser/gtk/pk11_password_dialog.h" |
+#endif // defined(USE_NSS) && defined(TOOLKIT_USES_GTK) |
#include "chrome/browser/host_zoom_map.h" |
#include "chrome/browser/in_process_webkit/dom_storage_dispatcher_host.h" |
#include "chrome/browser/in_process_webkit/indexed_db_dispatcher_host.h" |
@@ -1612,6 +1615,13 @@ void ResourceMessageFilter::OnKeygen(uint32 key_size_index, |
Send(reply_msg); |
return; |
} |
+ |
+ // Disable the hang monitor while we generate a key. There may also |
+ // be a dialog with NSS and GTK. |
+ // |
+ // TODO(davidben): This won't work until we figure out the render |
+ // view id. |
+ CallRenderViewHost(id(), FIXME, &RenderViewHost::StopHangMonitorTimeout); |
} |
void ResourceMessageFilter::OnKeygenOnWorkerThread( |
@@ -1626,6 +1636,13 @@ void ResourceMessageFilter::OnKeygenOnWorkerThread( |
// Generate a signed public key and challenge, then send it back. |
net::KeygenHandler keygen_handler(key_size_in_bits, challenge_string, url); |
+#if defined(USE_NSS) && defined(TOOLKIT_USES_GTK) |
+ // Attach a password delegate so we can authenticate. |
+ keygen_handler.set_pk11_password_delegate( |
+ browser::NewPK11BlockingDialogDelegate(browser::kPK11PasswordKeygen, |
+ url)); |
+#endif // defined(USE_NSS) && defined(TOOLKIT_USES_GTK) |
+ |
ViewHostMsg_Keygen::WriteReplyParams( |
reply_msg, |
keygen_handler.GenKeyAndSignChallenge()); |
@@ -1633,6 +1650,12 @@ void ResourceMessageFilter::OnKeygenOnWorkerThread( |
ChromeThread::PostTask( |
ChromeThread::IO, FROM_HERE, |
NewRunnableMethod(this, &ResourceMessageFilter::Send, reply_msg)); |
+ |
+ // Okay, the hang monitor can be enabled again. |
+ // |
+ // TODO(davidben): This won't work until we figure out the render |
+ // view id. |
+ CallRenderViewHost(id(), FIXME, &RenderViewHost::RestartHangMonitorTimeout); |
} |
#if defined(USE_TCMALLOC) |