Index: chrome/browser/renderer_host/buffered_resource_handler.cc |
=================================================================== |
--- chrome/browser/renderer_host/buffered_resource_handler.cc (revision 30863) |
+++ chrome/browser/renderer_host/buffered_resource_handler.cc (working copy) |
@@ -9,7 +9,6 @@ |
#include "base/histogram.h" |
#include "base/logging.h" |
#include "base/string_util.h" |
-#include "chrome/browser/browser_process.h" |
#include "chrome/browser/chrome_thread.h" |
#include "chrome/browser/renderer_host/download_throttling_resource_handler.h" |
#include "chrome/browser/renderer_host/resource_dispatcher_host.h" |
@@ -396,15 +395,9 @@ |
host_->PauseRequest(info->child_id(), info->request_id(), true); |
// Schedule plugin loading on the file thread. |
- // Note: it's possible that the only reference to this object is the task. If |
- // If the task executes on the file thread, and before it returns, the task it |
- // posts to the IO thread runs, then this object will get destructed on the |
- // file thread. This breaks assumptions in other message handlers (i.e. when |
- // unregistering with NotificationService in the destructor). |
- AddRef(); |
ChromeThread::PostTask( |
ChromeThread::FILE, FROM_HERE, |
- NewRunnableFunction(&BufferedResourceHandler::LoadPlugins, this)); |
+ NewRunnableMethod(this, &BufferedResourceHandler::LoadPlugins)); |
return true; |
} |
@@ -468,26 +461,23 @@ |
GURL(), type, allow_wildcard, &info, NULL); |
} |
-void BufferedResourceHandler::LoadPlugins(BufferedResourceHandler* handler) { |
+void BufferedResourceHandler::LoadPlugins() { |
std::vector<WebPluginInfo> plugins; |
NPAPI::PluginList::Singleton()->GetPlugins(false, &plugins); |
ChromeThread::PostTask( |
ChromeThread::IO, FROM_HERE, |
- NewRunnableFunction(&BufferedResourceHandler::OnPluginsLoaded, |
- handler)); |
+ NewRunnableMethod(this, &BufferedResourceHandler::OnPluginsLoaded)); |
} |
-void BufferedResourceHandler::OnPluginsLoaded( |
- BufferedResourceHandler* handler) { |
- handler->wait_for_plugins_ = false; |
- if (handler->request_) { |
- ResourceDispatcherHostRequestInfo* info = |
- ResourceDispatcherHost::InfoForRequest(handler->request_); |
- handler->host_->PauseRequest(info->child_id(), info->request_id(), false); |
- if (!handler->CompleteResponseStarted(info->request_id(), false)) |
- handler->host_->CancelRequest( |
- info->child_id(), info->request_id(), false); |
- } |
- handler->Release(); |
+void BufferedResourceHandler::OnPluginsLoaded() { |
+ wait_for_plugins_ = false; |
+ if (!request_) |
+ return; |
+ |
+ ResourceDispatcherHostRequestInfo* info = |
+ ResourceDispatcherHost::InfoForRequest(request_); |
+ host_->PauseRequest(info->child_id(), info->request_id(), false); |
+ if (!CompleteResponseStarted(info->request_id(), false)) |
+ host_->CancelRequest(info->child_id(), info->request_id(), false); |
} |