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

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

Issue 7024056: Handle extension webrequest API on the IO thread. This speeds up blocking event (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review Created 9 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
Index: chrome/browser/renderer_host/chrome_render_message_filter.cc
diff --git a/chrome/browser/renderer_host/chrome_render_message_filter.cc b/chrome/browser/renderer_host/chrome_render_message_filter.cc
index e91e8c83bdd42dbf658ddbc72fcce715a24722aa..d7393aa909bcc8e4eef5a1bca65c4a0590fefa39 100644
--- a/chrome/browser/renderer_host/chrome_render_message_filter.cc
+++ b/chrome/browser/renderer_host/chrome_render_message_filter.cc
@@ -11,6 +11,7 @@
#include "chrome/browser/content_settings/host_content_settings_map.h"
#include "chrome/browser/content_settings/tab_specific_content_settings.h"
#include "chrome/browser/extensions/extension_event_router.h"
+#include "chrome/browser/extensions/extension_function_dispatcher.h"
#include "chrome/browser/extensions/extension_message_service.h"
#include "chrome/browser/metrics/histogram_synchronizer.h"
#include "chrome/browser/nacl_host/nacl_process_host.h"
@@ -44,8 +45,10 @@ ChromeRenderMessageFilter::ChromeRenderMessageFilter(
Profile* profile,
net::URLRequestContextGetter* request_context)
: render_process_id_(render_process_id),
+ profile_id_(profile->GetRuntimeId()),
profile_(profile),
- request_context_(request_context) {
+ request_context_(request_context),
+ weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
allow_outdated_plugins_.Init(prefs::kPluginsAllowOutdated,
profile_->GetPrefs(), NULL);
allow_outdated_plugins_.MoveToThread(BrowserThread::IO);
@@ -78,6 +81,8 @@ bool ChromeRenderMessageFilter::OnMessageReceived(const IPC::Message& message,
IPC_MESSAGE_HANDLER(ExtensionHostMsg_RemoveListener,
OnExtensionRemoveListener)
IPC_MESSAGE_HANDLER(ExtensionHostMsg_CloseChannel, OnExtensionCloseChannel)
+ IPC_MESSAGE_HANDLER(ExtensionHostMsg_RequestForIOThread,
+ OnExtensionRequestForIOThread)
#if defined(USE_TCMALLOC)
IPC_MESSAGE_HANDLER(ViewHostMsg_RendererTcmalloc, OnRendererTcmalloc)
#endif
@@ -113,6 +118,11 @@ bool ChromeRenderMessageFilter::OnMessageReceived(const IPC::Message& message,
}
void ChromeRenderMessageFilter::OnDestruct() const {
+ const_cast<ChromeRenderMessageFilter*>(this)->
+ weak_ptr_factory_.DetachFromThread();
+ const_cast<ChromeRenderMessageFilter*>(this)->
+ weak_ptr_factory_.InvalidateWeakPtrs();
+
// Destroy on the UI thread because we contain a PrefMember.
BrowserThread::DeleteOnUIThread::Destruct(this);
}
@@ -331,6 +341,17 @@ void ChromeRenderMessageFilter::OnExtensionCloseChannel(int port_id) {
profile_->GetExtensionMessageService()->CloseChannel(port_id);
}
+void ChromeRenderMessageFilter::OnExtensionRequestForIOThread(
+ int routing_id,
+ const ExtensionHostMsg_Request_Params& params) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+
+ ChromeURLRequestContext* context = static_cast<ChromeURLRequestContext*>(
+ request_context_->GetURLRequestContext());
+ ExtensionFunctionDispatcher::DispatchOnIOThread(
+ context->extension_info_map(), profile_id_, render_process_id_,
+ weak_ptr_factory_.GetWeakPtr(), routing_id, params);
+}
#if defined(USE_TCMALLOC)
void ChromeRenderMessageFilter::OnRendererTcmalloc(base::ProcessId pid,

Powered by Google App Engine
This is Rietveld 408576698