Index: chrome/renderer/render_widget.cc |
diff --git a/chrome/renderer/render_widget.cc b/chrome/renderer/render_widget.cc |
index e91efe10554f544cb08e61563a1be8134a06f851..7b14ccdcb09af928193f17f2b63babe149755a44 100644 |
--- a/chrome/renderer/render_widget.cc |
+++ b/chrome/renderer/render_widget.cc |
@@ -17,6 +17,7 @@ |
#include "chrome/renderer/render_thread.h" |
#include "gfx/point.h" |
#include "gfx/size.h" |
+#include "ipc/ipc_sync_message.h" |
#include "skia/ext/platform_canvas.h" |
#include "third_party/skia/include/core/SkShader.h" |
#include "third_party/WebKit/WebKit/chromium/public/WebCursorInfo.h" |
@@ -42,12 +43,14 @@ using WebKit::WebInputEvent; |
using WebKit::WebNavigationPolicy; |
using WebKit::WebPopupMenu; |
using WebKit::WebPopupMenuInfo; |
+using WebKit::WebPopupType; |
using WebKit::WebRect; |
using WebKit::WebScreenInfo; |
using WebKit::WebSize; |
using WebKit::WebTextDirection; |
using WebKit::WebTextInputType; |
using WebKit::WebVector; |
+using WebKit::WebWidget; |
RenderWidget::RenderWidget(RenderThreadBase* render_thread, |
WebKit::WebPopupType popup_type) |
@@ -84,7 +87,7 @@ RenderWidget::~RenderWidget() { |
RenderProcess::current()->ReleaseProcess(); |
} |
-/*static*/ |
+// static |
RenderWidget* RenderWidget::Create(int32 opener_id, |
RenderThreadBase* render_thread, |
WebKit::WebPopupType popup_type) { |
@@ -95,6 +98,20 @@ RenderWidget* RenderWidget::Create(int32 opener_id, |
return widget; |
} |
+// static |
+WebWidget* RenderWidget::CreateWebWidget(RenderWidget* render_widget) { |
+ switch (render_widget->popup_type_) { |
+ case WebKit::WebPopupTypeNone: // Nothing to create. |
+ break; |
+ case WebKit::WebPopupTypeSelect: |
+ case WebKit::WebPopupTypeSuggestion: |
+ return WebPopupMenu::create(render_widget); |
+ default: |
+ NOTREACHED(); |
+ } |
+ return NULL; |
+} |
+ |
void RenderWidget::ConfigureAsExternalPopupMenu(const WebPopupMenuInfo& info) { |
popup_params_.reset(new ViewHostMsg_ShowPopup_Params); |
popup_params_->item_height = info.itemHeight; |
@@ -106,15 +123,23 @@ void RenderWidget::ConfigureAsExternalPopupMenu(const WebPopupMenuInfo& info) { |
} |
void RenderWidget::Init(int32 opener_id) { |
+ DoInit(opener_id, |
+ RenderWidget::CreateWebWidget(this), |
+ new ViewHostMsg_CreateWidget(opener_id, popup_type_, &routing_id_)); |
+} |
+ |
+ |
+void RenderWidget::DoInit(int32 opener_id, |
+ WebKit::WebWidget* web_widget, |
+ IPC::SyncMessage* create_widget_message) { |
DCHECK(!webwidget_); |
if (opener_id != MSG_ROUTING_NONE) |
opener_id_ = opener_id; |
- webwidget_ = WebPopupMenu::create(this); |
+ webwidget_ = web_widget; |
- bool result = render_thread_->Send( |
- new ViewHostMsg_CreateWidget(opener_id, popup_type_, &routing_id_)); |
+ bool result = render_thread_->Send(create_widget_message); |
if (result) { |
render_thread_->AddRoute(routing_id_, this); |
// Take a reference on behalf of the RenderThread. This will be balanced |