Index: content/public/browser/browser_message_filter.cc |
=================================================================== |
--- content/public/browser/browser_message_filter.cc (revision 126267) |
+++ content/public/browser/browser_message_filter.cc (working copy) |
@@ -9,6 +9,7 @@ |
#include "base/logging.h" |
#include "base/process.h" |
#include "base/process_util.h" |
+#include "base/task_runner.h" |
#include "content/public/browser/user_metrics.h" |
#include "content/public/common/result_codes.h" |
#include "ipc/ipc_sync_message.h" |
@@ -69,11 +70,26 @@ |
BrowserThread::ID* thread) { |
} |
+base::TaskRunner* BrowserMessageFilter::OverrideTaskRunnerForMessage( |
+ const IPC::Message& message) { |
+ return NULL; |
+} |
+ |
bool BrowserMessageFilter::OnMessageReceived(const IPC::Message& message) { |
BrowserThread::ID thread = BrowserThread::IO; |
OverrideThreadForMessage(message, &thread); |
- if (thread == BrowserThread::IO) |
+ |
+ if (thread == BrowserThread::IO) { |
+ scoped_refptr<base::TaskRunner> runner = |
+ OverrideTaskRunnerForMessage(message); |
+ if (runner) { |
+ runner->PostTask(FROM_HERE, |
+ base::Bind(base::IgnoreResult(&BrowserMessageFilter::DispatchMessage), |
+ this, message)); |
+ return true; |
+ } |
return DispatchMessage(message); |
+ } |
if (thread == BrowserThread::UI && !CheckCanDispatchOnUI(message, this)) |
return true; |