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(); |
} |
} |