summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authordcheng@chromium.org <dcheng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-10 02:39:19 +0000
committerdcheng@chromium.org <dcheng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-10 02:39:19 +0000
commit0a9d452de638308e08907c23edb229f886b2d5f7 (patch)
tree58742fdcfc61a3ad37e1d953743fc9e79ae03cff /content
parent8f7825b6d056e195b751df1bc85d6a4f9f72d44d (diff)
downloadchromium_src-0a9d452de638308e08907c23edb229f886b2d5f7.zip
chromium_src-0a9d452de638308e08907c23edb229f886b2d5f7.tar.gz
chromium_src-0a9d452de638308e08907c23edb229f886b2d5f7.tar.bz2
Remove custom Task implementation from RenderWidgetHelper::UpdateMsgProxy.
BUG=none TEST=none Review URL: http://codereview.chromium.org/8872038 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@113930 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r--content/browser/renderer_host/render_widget_helper.cc70
1 files changed, 40 insertions, 30 deletions
diff --git a/content/browser/renderer_host/render_widget_helper.cc b/content/browser/renderer_host/render_widget_helper.cc
index 2a791a7..4803956 100644
--- a/content/browser/renderer_host/render_widget_helper.cc
+++ b/content/browser/renderer_host/render_widget_helper.cc
@@ -5,6 +5,7 @@
#include "content/browser/renderer_host/render_widget_helper.h"
#include "base/bind.h"
+#include "base/bind_helpers.h"
#include "base/eintr_wrapper.h"
#include "base/threading/thread.h"
#include "content/browser/renderer_host/render_process_host_impl.h"
@@ -15,37 +16,46 @@
using content::BrowserThread;
-// A Task used with InvokeLater that we hold a pointer to in pending_paints_.
-// Instances are deleted by MessageLoop after it calls their Run method.
-class RenderWidgetHelper::UpdateMsgProxy : public Task {
+// A helper used with DidReceiveUpdateMsg that we hold a pointer to in
+// pending_paints_.
+class RenderWidgetHelper::UpdateMsgProxy {
public:
- UpdateMsgProxy(RenderWidgetHelper* h, const IPC::Message& m)
- : helper(h),
- message(m),
- cancelled(false) {
- }
-
- ~UpdateMsgProxy() {
- // If the paint message was never dispatched, then we need to let the
- // helper know that we are going away.
- if (!cancelled && helper)
- helper->OnDiscardUpdateMsg(this);
- }
+ UpdateMsgProxy(RenderWidgetHelper* h, const IPC::Message& m);
+ ~UpdateMsgProxy();
+ void Run();
+ void Cancel() { cancelled_ = true; }
- virtual void Run() {
- if (!cancelled) {
- helper->OnDispatchUpdateMsg(this);
- helper = NULL;
- }
- }
+ const IPC::Message& message() const { return message_; }
- scoped_refptr<RenderWidgetHelper> helper;
- IPC::Message message;
- bool cancelled; // If true, then the message will not be dispatched.
+ private:
+ scoped_refptr<RenderWidgetHelper> helper_;
+ IPC::Message message_;
+ bool cancelled_; // If true, then the message will not be dispatched.
DISALLOW_COPY_AND_ASSIGN(UpdateMsgProxy);
};
+RenderWidgetHelper::UpdateMsgProxy::UpdateMsgProxy(
+ RenderWidgetHelper* h, const IPC::Message& m)
+ : helper_(h),
+ message_(m),
+ cancelled_(false) {
+}
+
+RenderWidgetHelper::UpdateMsgProxy::~UpdateMsgProxy() {
+ // If the paint message was never dispatched, then we need to let the
+ // helper know that we are going away.
+ if (!cancelled_ && helper_)
+ helper_->OnDiscardUpdateMsg(this);
+}
+
+void RenderWidgetHelper::UpdateMsgProxy::Run() {
+ if (!cancelled_) {
+ helper_->OnDispatchUpdateMsg(this);
+ helper_ = NULL;
+ }
+}
+
RenderWidgetHelper::RenderWidgetHelper()
: render_process_id_(-1),
#if defined(OS_WIN)
@@ -115,7 +125,7 @@ bool RenderWidgetHelper::WaitForUpdateMsg(int render_widget_id,
// Flag the proxy as cancelled so that when it is run as a task it will
// do nothing.
- proxy->cancelled = true;
+ proxy->Cancel();
queue.pop_front();
if (queue.empty())
@@ -124,7 +134,7 @@ bool RenderWidgetHelper::WaitForUpdateMsg(int render_widget_id,
}
if (proxy) {
- *msg = proxy->message;
+ *msg = proxy->message();
DCHECK(msg->routing_id() == render_widget_id);
return true;
}
@@ -156,12 +166,12 @@ void RenderWidgetHelper::DidReceiveUpdateMsg(const IPC::Message& msg) {
// will just continue waiting.
event_.Signal();
- // The proxy will be deleted when it is run as a task.
- BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, proxy);
+ BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
+ base::Bind(&UpdateMsgProxy::Run, base::Owned(proxy)));
}
void RenderWidgetHelper::OnDiscardUpdateMsg(UpdateMsgProxy* proxy) {
- const IPC::Message& msg = proxy->message;
+ const IPC::Message& msg = proxy->message();
// Remove the proxy from the map now that we are going to handle it normally.
{
@@ -185,7 +195,7 @@ void RenderWidgetHelper::OnDispatchUpdateMsg(UpdateMsgProxy* proxy) {
content::RenderProcessHost* host =
content::RenderProcessHost::FromID(render_process_id_);
if (host)
- host->OnMessageReceived(proxy->message);
+ host->OnMessageReceived(proxy->message());
}
void RenderWidgetHelper::OnCancelResourceRequests(