Chromium Code Reviews| Index: content/renderer/render_widget.cc |
| diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc |
| index 71831f671e0a01183537dfb26ba38e6d6ccc1731..0615f5368ee8b8929677129d2b14e8a4969ba3d9 100644 |
| --- a/content/renderer/render_widget.cc |
| +++ b/content/renderer/render_widget.cc |
| @@ -288,26 +288,36 @@ RenderWidget* RenderWidget::Create(int32_t opener_id, |
| blink::WebPopupType popup_type, |
| const ScreenInfo& screen_info) { |
| DCHECK(opener_id != MSG_ROUTING_NONE); |
| + int32_t routing_id = MSG_ROUTING_NONE; |
|
ncarter (slow)
2016/11/07 18:54:55
The code in this function is a result of inlining
|
| + |
| + // Do a synchronous IPC to obtain a routing ID. |
| + RenderThreadImpl::current_render_message_filter()->CreateNewWidget( |
| + opener_id, popup_type, &routing_id); |
|
ncarter (slow)
2016/11/07 18:54:55
This line used to be in RenderWidget::CreateWidget
|
| + |
| + if (routing_id == MSG_ROUTING_NONE) |
| + 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; |
| + compositor_deps, popup_type, screen_info, false, false, false)); |
| + |
| + widget->Init(routing_id, 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)); |
| @@ -319,18 +329,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->Init( |
| + widget_routing_id, MSG_ROUTING_NONE, |
| + RenderWidget::CreateWebFrameWidget(widget.get(), frame)); |
| + |
| + if (g_render_widget_initialized) |
| + g_render_widget_initialized(widget.get()); |
| + return widget.get(); |
| } |
| // static |
| @@ -382,30 +390,13 @@ 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; |
| -} |
| - |
| -bool RenderWidget::DoInit(int32_t opener_id, |
| - WebWidget* web_widget, |
| - CreateWidgetCallback create_widget_callback) { |
|
ncarter (slow)
2016/11/07 18:54:55
Instead of passing a callback, we just have the ca
|
| +void RenderWidget::Init(int32_t widget_routing_id, |
|
ncarter (slow)
2016/11/07 18:54:55
I eliminated the single-arg ::Init function, and t
|
| + int32_t opener_id, |
| + WebWidget* web_widget) { |
| DCHECK(!webwidget_internal_); |
| + SetRoutingID(widget_routing_id); |
| + |
| if (opener_id != MSG_ROUTING_NONE) |
| opener_id_ = opener_id; |
| @@ -414,25 +405,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(); |
| } |
| } |