summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authorbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-01-26 20:52:26 +0000
committerbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-01-26 20:52:26 +0000
commitcaea7cada9bdb9b025173d662ec6b1a85a0a1ce2 (patch)
tree19684bafa16e0163e1ec78a8ec1bbddfe785d428 /chrome/browser
parente1f934b58c6dc45ffd426f71346795f835d7013c (diff)
downloadchromium_src-caea7cada9bdb9b025173d662ec6b1a85a0a1ce2.zip
chromium_src-caea7cada9bdb9b025173d662ec6b1a85a0a1ce2.tar.gz
chromium_src-caea7cada9bdb9b025173d662ec6b1a85a0a1ce2.tar.bz2
Make RenderWidgetHelper portable.
Review URL: http://codereview.chromium.org/18802 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8660 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r--chrome/browser/renderer_host/render_widget_helper.cc47
-rw-r--r--chrome/browser/renderer_host/render_widget_helper.h14
-rw-r--r--chrome/browser/resource_message_filter.cc7
3 files changed, 43 insertions, 25 deletions
diff --git a/chrome/browser/renderer_host/render_widget_helper.cc b/chrome/browser/renderer_host/render_widget_helper.cc
index 8d85d92..d92ff301 100644
--- a/chrome/browser/renderer_host/render_widget_helper.cc
+++ b/chrome/browser/renderer_host/render_widget_helper.cc
@@ -9,14 +9,11 @@
#include "chrome/browser/renderer_host/render_process_host.h"
#include "chrome/browser/renderer_host/resource_dispatcher_host.h"
-using base::TimeDelta;
-using base::TimeTicks;
-
// 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::PaintMsgProxy : public Task {
public:
- explicit PaintMsgProxy(RenderWidgetHelper* h, const IPC::Message& m)
+ PaintMsgProxy(RenderWidgetHelper* h, const IPC::Message& m)
: helper(h),
message(m),
cancelled(false) {
@@ -40,7 +37,7 @@ class RenderWidgetHelper::PaintMsgProxy : public Task {
IPC::Message message;
bool cancelled; // If true, then the message will not be dispatched.
- DISALLOW_EVIL_CONSTRUCTORS(PaintMsgProxy);
+ DISALLOW_COPY_AND_ASSIGN(PaintMsgProxy);
};
RenderWidgetHelper::RenderWidgetHelper(int render_process_id)
@@ -54,8 +51,6 @@ RenderWidgetHelper::~RenderWidgetHelper() {
// The elements of pending_paints_ each hold an owning reference back to this
// object, so we should not be destroyed unless pending_paints_ is empty!
DCHECK(pending_paints_.empty());
-
- CloseHandle(event_);
}
int RenderWidgetHelper::GetNextRoutingID() {
@@ -63,29 +58,31 @@ int RenderWidgetHelper::GetNextRoutingID() {
}
void RenderWidgetHelper::CancelResourceRequests(int render_widget_id) {
- if (g_browser_process->io_thread())
+ if (g_browser_process->io_thread()) {
g_browser_process->io_thread()->message_loop()->PostTask(FROM_HERE,
NewRunnableMethod(this,
&RenderWidgetHelper::OnCancelResourceRequests,
g_browser_process->resource_dispatcher_host(),
render_widget_id));
+ }
}
void RenderWidgetHelper::CrossSiteClosePageACK(int new_render_process_host_id,
int new_request_id) {
- if (g_browser_process->io_thread())
+ if (g_browser_process->io_thread()) {
g_browser_process->io_thread()->message_loop()->PostTask(FROM_HERE,
NewRunnableMethod(this,
&RenderWidgetHelper::OnCrossSiteClosePageACK,
g_browser_process->resource_dispatcher_host(),
new_render_process_host_id,
new_request_id));
+ }
}
bool RenderWidgetHelper::WaitForPaintMsg(int render_widget_id,
- const TimeDelta& max_delay,
+ const base::TimeDelta& max_delay,
IPC::Message* msg) {
- TimeTicks time_start = TimeTicks::Now();
+ base::TimeTicks time_start = base::TimeTicks::Now();
for (;;) {
PaintMsgProxy* proxy = NULL;
@@ -111,13 +108,12 @@ bool RenderWidgetHelper::WaitForPaintMsg(int render_widget_id,
}
// Calculate the maximum amount of time that we are willing to sleep.
- TimeDelta max_sleep_time =
- max_delay - (TimeTicks::Now() - time_start);
- if (max_sleep_time <= TimeDelta::FromMilliseconds(0))
+ base::TimeDelta max_sleep_time =
+ max_delay - (base::TimeTicks::Now() - time_start);
+ if (max_sleep_time <= base::TimeDelta::FromMilliseconds(0))
break;
- WaitForSingleObject(event_,
- static_cast<DWORD>(max_sleep_time.InMilliseconds()));
+ event_.TimedWait(max_sleep_time);
}
return false;
@@ -147,7 +143,7 @@ void RenderWidgetHelper::DidReceivePaintMsg(const IPC::Message& msg) {
// Notify anyone waiting on the UI thread that there is a new entry in the
// proxy map. If they don't find the entry they are looking for, then they
// will just continue waiting.
- SetEvent(event_);
+ event_.Signal();
// The proxy will be deleted when it is run as a task.
ui_loop_->PostTask(FROM_HERE, proxy);
@@ -192,9 +188,13 @@ void RenderWidgetHelper::OnCrossSiteClosePageACK(
void RenderWidgetHelper::CreateNewWindow(int opener_id,
bool user_gesture,
- int* route_id,
- HANDLE* modal_dialog_event,
- HANDLE render_process) {
+ base::ProcessHandle render_process,
+ int* route_id
+#if defined(OS_WIN)
+ , HANDLE* modal_dialog_event) {
+#else
+ ) {
+#endif
if (!user_gesture && block_popups_) {
*route_id = MSG_ROUTING_NONE;
*modal_dialog_event = NULL;
@@ -202,6 +202,8 @@ void RenderWidgetHelper::CreateNewWindow(int opener_id,
}
*route_id = GetNextRoutingID();
+
+#if defined(OS_WIN)
HANDLE event = CreateEvent(NULL, TRUE, FALSE, NULL);
BOOL result = DuplicateHandle(GetCurrentProcess(),
event,
@@ -214,6 +216,11 @@ void RenderWidgetHelper::CreateNewWindow(int opener_id,
// The easiest way to reach RenderViewHost is just to send a routed message.
ViewHostMsg_CreateWindowWithRoute msg(opener_id, *route_id, event);
+#else
+ // TODO(port) figure out how the modal dialog event should work.
+ ViewHostMsg_CreateWindowWithRoute msg(opener_id, *route_id);
+#endif
+
ui_loop_->PostTask(FROM_HERE, NewRunnableMethod(
this, &RenderWidgetHelper::OnSimulateReceivedMessage, msg));
}
diff --git a/chrome/browser/renderer_host/render_widget_helper.h b/chrome/browser/renderer_host/render_widget_helper.h
index aca3644..b73ce03 100644
--- a/chrome/browser/renderer_host/render_widget_helper.h
+++ b/chrome/browser/renderer_host/render_widget_helper.h
@@ -8,8 +8,10 @@
#include "base/atomic_sequence_num.h"
#include "base/hash_tables.h"
+#include "base/process.h"
#include "base/ref_counted.h"
#include "base/lock.h"
+#include "base/waitable_event.h"
namespace IPC {
class Message;
@@ -104,8 +106,14 @@ class RenderWidgetHelper :
MessageLoop* ui_loop() { return ui_loop_; }
- void CreateNewWindow(int opener_id, bool user_gesture, int* route_id,
- HANDLE* modal_dialog_event, HANDLE render_process);
+ void CreateNewWindow(int opener_id,
+ bool user_gesture,
+ base::ProcessHandle render_process,
+ int* route_id
+#if defined(OS_WIN)
+ , HANDLE* modal_dialog_event
+#endif
+ );
void CreateNewWidget(int opener_id, bool activatable, int* route_id);
private:
@@ -145,7 +153,7 @@ class RenderWidgetHelper :
MessageLoop* ui_loop_;
// Event used to implement WaitForPaintMsg.
- HANDLE event_;
+ base::WaitableEvent event_;
// The next routing id to use.
base::AtomicSequenceNumber next_routing_id_;
diff --git a/chrome/browser/resource_message_filter.cc b/chrome/browser/resource_message_filter.cc
index 8dfb47a..e97c46c 100644
--- a/chrome/browser/resource_message_filter.cc
+++ b/chrome/browser/resource_message_filter.cc
@@ -248,8 +248,11 @@ void ResourceMessageFilter::OnMsgCreateWindow(int opener_id,
bool user_gesture,
int* route_id,
HANDLE* modal_dialog_event) {
- render_widget_helper_->CreateNewWindow(opener_id, user_gesture, route_id,
- modal_dialog_event, render_handle_);
+ render_widget_helper_->CreateNewWindow(opener_id,
+ user_gesture,
+ render_handle_,
+ route_id,
+ modal_dialog_event);
}
void ResourceMessageFilter::OnMsgCreateWidget(int opener_id,