Index: content/renderer/render_widget.cc |
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc |
index 4cd7315e2ade000bba6091586185d14bd33d3b50..8ad1bf00b87049842180065cfd40d56ee0e23836 100644 |
--- a/content/renderer/render_widget.cc |
+++ b/content/renderer/render_widget.cc |
@@ -287,26 +287,34 @@ RenderWidget* RenderWidget::Create(int32_t opener_id, |
blink::WebPopupType popup_type, |
const ScreenInfo& screen_info) { |
DCHECK(opener_id != MSG_ROUTING_NONE); |
+ |
+ // Do a synchronous IPC to obtain a routing ID. |
+ int32_t routing_id = MSG_ROUTING_NONE; |
+ if (!RenderThreadImpl::current_render_message_filter()->CreateNewWidget( |
+ opener_id, popup_type, &routing_id)) { |
+ return nullptr; |
+ } |
+ |
scoped_refptr<RenderWidget> widget(new RenderWidget( |
compositor_deps, popup_type, screen_info, false, false, false)); |
- if (widget->Init(opener_id)) { // adds reference on success. |
- return widget.get(); |
- } |
- return NULL; |
+ widget->InitRoutingID(routing_id); |
+ widget->Init(opener_id, RenderWidget::CreateWebWidget(widget.get())); |
+ DCHECK(!widget->HasOneRef()); // RenderWidget::Init() adds a reference. |
+ return widget.get(); |
} |
// static |
RenderWidget* RenderWidget::CreateForFrame( |
- int routing_id, |
+ int widget_routing_id, |
bool hidden, |
const ScreenInfo& screen_info, |
CompositorDependencies* compositor_deps, |
blink::WebLocalFrame* frame) { |
- CHECK_NE(routing_id, MSG_ROUTING_NONE); |
+ CHECK_NE(widget_routing_id, MSG_ROUTING_NONE); |
// TODO(avi): Before RenderViewImpl has-a RenderWidget, the browser passes the |
// same routing ID for both the view routing ID and the main frame widget |
// routing ID. https://crbug.com/545684 |
- RenderViewImpl* view = RenderViewImpl::FromRoutingID(routing_id); |
+ RenderViewImpl* view = RenderViewImpl::FromRoutingID(widget_routing_id); |
if (view) { |
view->AttachWebFrameWidget( |
RenderWidget::CreateWebFrameWidget(view->GetWidget(), frame)); |
@@ -318,18 +326,16 @@ RenderWidget* RenderWidget::CreateForFrame( |
screen_info, false, hidden, false) |
: new RenderWidget(compositor_deps, blink::WebPopupTypeNone, |
screen_info, false, hidden, false)); |
- widget->SetRoutingID(routing_id); |
widget->for_oopif_ = true; |
- // DoInit increments the reference count on |widget|, keeping it alive after |
+ // Init increments the reference count on |widget|, keeping it alive after |
// this function returns. |
- if (widget->DoInit(MSG_ROUTING_NONE, |
- RenderWidget::CreateWebFrameWidget(widget.get(), frame), |
- CreateWidgetCallback())) { |
- if (g_render_widget_initialized) |
- g_render_widget_initialized(widget.get()); |
- return widget.get(); |
- } |
- return nullptr; |
+ widget->InitRoutingID(widget_routing_id); |
+ widget->Init(MSG_ROUTING_NONE, |
+ RenderWidget::CreateWebFrameWidget(widget.get(), frame)); |
+ |
+ if (g_render_widget_initialized) |
+ g_render_widget_initialized(widget.get()); |
+ return widget.get(); |
} |
// static |
@@ -361,12 +367,6 @@ void RenderWidget::CloseForFrame() { |
OnClose(); |
} |
-void RenderWidget::SetRoutingID(int32_t routing_id) { |
- routing_id_ = routing_id; |
- input_handler_.reset(new RenderWidgetInputHandler( |
- GetRenderWidgetInputHandlerDelegate(this), this)); |
-} |
- |
void RenderWidget::SetSwappedOut(bool is_swapped_out) { |
// We should only toggle between states. |
DCHECK(is_swapped_out_ != is_swapped_out); |
@@ -381,29 +381,16 @@ void RenderWidget::SetSwappedOut(bool is_swapped_out) { |
RenderProcess::current()->AddRefProcess(); |
} |
-bool RenderWidget::CreateWidget(int32_t opener_id, |
- blink::WebPopupType popup_type, |
- int32_t* routing_id) { |
- RenderThreadImpl::current_render_message_filter()->CreateNewWidget( |
- opener_id, popup_type, routing_id); |
- return true; |
-} |
- |
-bool RenderWidget::Init(int32_t opener_id) { |
- bool success = DoInit(opener_id, RenderWidget::CreateWebWidget(this), |
- base::Bind(&RenderWidget::CreateWidget, base::Unretained(this), |
- opener_id, popup_type_, &routing_id_)); |
- if (success) { |
- SetRoutingID(routing_id_); |
- return true; |
- } |
- return false; |
+void RenderWidget::InitRoutingID(int32_t routing_id) { |
+ DCHECK_EQ(routing_id_, MSG_ROUTING_NONE); |
+ routing_id_ = routing_id; |
+ input_handler_.reset(new RenderWidgetInputHandler( |
+ GetRenderWidgetInputHandlerDelegate(this), this)); |
} |
-bool RenderWidget::DoInit(int32_t opener_id, |
- WebWidget* web_widget, |
- CreateWidgetCallback create_widget_callback) { |
+void RenderWidget::Init(int32_t opener_id, WebWidget* web_widget) { |
DCHECK(!webwidget_internal_); |
+ DCHECK_NE(routing_id_, MSG_ROUTING_NONE); |
if (opener_id != MSG_ROUTING_NONE) |
opener_id_ = opener_id; |
@@ -413,25 +400,14 @@ bool RenderWidget::DoInit(int32_t opener_id, |
new WebWidgetLockTarget(webwidget_internal_)); |
mouse_lock_dispatcher_.reset(new RenderWidgetMouseLockDispatcher(this)); |
- bool result = true; |
- if (!create_widget_callback.is_null()) |
- result = std::move(create_widget_callback).Run(); |
- |
- if (result) { |
- RenderThread::Get()->AddRoute(routing_id_, this); |
- // Take a reference on behalf of the RenderThread. This will be balanced |
- // when we receive ViewMsg_Close. |
- AddRef(); |
- if (RenderThreadImpl::current()) { |
- RenderThreadImpl::current()->WidgetCreated(); |
- if (is_hidden_) |
- RenderThreadImpl::current()->WidgetHidden(); |
- } |
- |
- return true; |
- } else { |
- // The above Send can fail when the tab is closing. |
- return false; |
+ RenderThread::Get()->AddRoute(routing_id_, this); |
+ // Take a reference on behalf of the RenderThread. This will be balanced |
+ // when we receive ViewMsg_Close. |
+ AddRef(); |
+ if (RenderThreadImpl::current()) { |
+ RenderThreadImpl::current()->WidgetCreated(); |
+ if (is_hidden_) |
+ RenderThreadImpl::current()->WidgetHidden(); |
} |
} |