| 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,
|
|
|