Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1469)

Unified Diff: chrome/browser/renderer_host/resource_message_filter.cc

Issue 2854007: Asynchronously generate key pairs for <keygen> tag (Closed)
Patch Set: Address wtc's comments Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/renderer_host/resource_message_filter.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 9733f96b380739102df14ceadadc19f0c8de0b44..bb3bfe951eb95ba1000c62956b18f616cbf5d5cd 100755
--- a/chrome/browser/renderer_host/resource_message_filter.cc
+++ b/chrome/browser/renderer_host/resource_message_filter.cc
@@ -15,6 +15,7 @@
#include "base/process_util.h"
#include "base/thread.h"
#include "base/utf_string_conversions.h"
+#include "base/worker_pool.h"
#include "chrome/browser/appcache/appcache_dispatcher_host.h"
#include "chrome/browser/browser_about_handler.h"
#include "chrome/browser/child_process_security_policy.h"
@@ -587,7 +588,7 @@ bool ResourceMessageFilter::OnMessageReceived(const IPC::Message& msg) {
IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_GetFileModificationTime,
OnGetFileModificationTime)
IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_OpenFile, OnOpenFile)
- IPC_MESSAGE_HANDLER(ViewHostMsg_Keygen, OnKeygen)
+ IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_Keygen, OnKeygen)
IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_GetExtensionMessageBundle,
OnGetExtensionMessageBundle)
#if defined(USE_TCMALLOC)
@@ -1577,7 +1578,7 @@ void ResourceMessageFilter::OnOpenFileOnFileThread(const FilePath& path,
void ResourceMessageFilter::OnKeygen(uint32 key_size_index,
const std::string& challenge_string,
const GURL& url,
- std::string* signed_public_key) {
+ IPC::Message* reply_msg) {
// Map displayed strings indicating level of keysecurity in the <keygen>
// menu to the key size in bits. (See SSLKeyGeneratorChromium.cpp in WebCore.)
int key_size_in_bits;
@@ -1590,11 +1591,44 @@ void ResourceMessageFilter::OnKeygen(uint32 key_size_index,
break;
default:
DCHECK(false) << "Illegal key_size_index " << key_size_index;
- *signed_public_key = std::string();
+ ViewHostMsg_Keygen::WriteReplyParams(reply_msg, std::string());
+ Send(reply_msg);
return;
}
+
+ LOG(INFO) << "Dispatching keygen task to worker pool.";
+ // Dispatch to worker pool, so we do not block the IO thread.
+ if (!WorkerPool::PostTask(
+ FROM_HERE,
+ NewRunnableMethod(
+ this, &ResourceMessageFilter::OnKeygenOnWorkerThread,
+ key_size_in_bits, challenge_string, reply_msg),
+ true)) {
+ NOTREACHED() << "Failed to dispatch keygen task to worker pool";
+ ViewHostMsg_Keygen::WriteReplyParams(reply_msg, std::string());
+ Send(reply_msg);
+ return;
+ }
+}
+
+void ResourceMessageFilter::OnKeygenOnWorkerThread(
+ int key_size_in_bits,
+ const std::string& challenge_string,
+ IPC::Message* reply_msg) {
+ DCHECK(reply_msg);
+ // Verify we are on a worker thread.
+ DCHECK(!MessageLoop::current());
+
+ // Generate a signed public key and challenge, then send it back.
net::KeygenHandler keygen_handler(key_size_in_bits, challenge_string);
- *signed_public_key = keygen_handler.GenKeyAndSignChallenge();
+
+ ViewHostMsg_Keygen::WriteReplyParams(
+ reply_msg,
+ keygen_handler.GenKeyAndSignChallenge());
+
+ ChromeThread::PostTask(
+ ChromeThread::IO, FROM_HERE,
+ NewRunnableMethod(this, &ResourceMessageFilter::Send, reply_msg));
}
#if defined(USE_TCMALLOC)
« no previous file with comments | « chrome/browser/renderer_host/resource_message_filter.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698