Chromium Code Reviews| Index: content/renderer/render_widget.cc |
| diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc |
| index 60adf974f69939528c7c8a62985bc38dbdbbcb16..ec0d1a6c5b29d9ea76d8dc79952c2ba1675e17b3 100644 |
| --- a/content/renderer/render_widget.cc |
| +++ b/content/renderer/render_widget.cc |
| @@ -60,11 +60,14 @@ |
| #include "third_party/WebKit/public/platform/WebSize.h" |
| #include "third_party/WebKit/public/platform/WebString.h" |
| #include "third_party/WebKit/public/web/WebDeviceEmulationParams.h" |
| +#include "third_party/WebKit/public/web/WebFrameWidget.h" |
| +#include "third_party/WebKit/public/web/WebLocalFrame.h" |
| #include "third_party/WebKit/public/web/WebPagePopup.h" |
| #include "third_party/WebKit/public/web/WebPopupMenu.h" |
| #include "third_party/WebKit/public/web/WebPopupMenuInfo.h" |
| #include "third_party/WebKit/public/web/WebRange.h" |
| #include "third_party/WebKit/public/web/WebRuntimeFeatures.h" |
| +#include "third_party/WebKit/public/web/WebView.h" |
| #include "third_party/skia/include/core/SkShader.h" |
| #include "ui/base/ui_base_switches.h" |
| #include "ui/gfx/frame_time.h" |
| @@ -529,7 +532,30 @@ RenderWidget* RenderWidget::Create(int32 opener_id, |
| } |
| // static |
| -WebWidget* RenderWidget::CreateWebWidget(RenderWidget* render_widget) { |
| +RenderWidget* RenderWidget::CreateForFrame( |
| + int routing_id, |
| + int surface_id, |
| + bool hidden, |
| + const blink::WebScreenInfo& screen_info, |
| + CompositorDependencies* compositor_deps, |
| + blink::WebLocalFrame* frame) { |
| + DCHECK_NE(routing_id, MSG_ROUTING_NONE); |
|
nasko
2015/01/14 20:08:05
Should we be braver and use CHECK_NE? Especially s
kenrb
2015/01/16 17:44:00
Done.
|
| + scoped_refptr<RenderWidget> widget(new RenderWidget( |
| + blink::WebPopupTypeNone, screen_info, false, hidden, false)); |
| + widget->routing_id_ = routing_id; |
| + widget->surface_id_ = surface_id; |
| + widget->compositor_deps_ = compositor_deps; |
| + if (widget->DoInit(MSG_ROUTING_NONE, compositor_deps, |
| + RenderWidget::CreateWebFrameWidget(widget.get(), frame), |
| + nullptr)) { |
| + widget->CompleteInit(); |
| + return widget.get(); |
|
nasko
2015/01/14 20:08:05
Does DoInit take a RefCount on the widget? Otherwi
kenrb
2015/01/16 17:44:00
Yes, but that is certainly worthy of a comment.
|
| + } |
| + return nullptr; |
| +} |
| + |
| +// static |
| +blink::WebWidget* RenderWidget::CreateWebWidget(RenderWidget* render_widget) { |
| switch (render_widget->popup_type_) { |
| case blink::WebPopupTypeNone: // Nothing to create. |
| break; |
| @@ -544,6 +570,13 @@ WebWidget* RenderWidget::CreateWebWidget(RenderWidget* render_widget) { |
| return NULL; |
| } |
| +// static |
| +blink::WebWidget* RenderWidget::CreateWebFrameWidget( |
| + RenderWidget* render_widget, |
| + blink::WebLocalFrame* frame) { |
| + return blink::WebFrameWidget::create(render_widget, frame); |
| +} |
| + |
| bool RenderWidget::Init(int32 opener_id, |
| CompositorDependencies* compositor_deps) { |
| return DoInit(opener_id, compositor_deps, RenderWidget::CreateWebWidget(this), |
| @@ -563,7 +596,10 @@ bool RenderWidget::DoInit(int32 opener_id, |
| compositor_deps_ = compositor_deps; |
| webwidget_ = web_widget; |
| - bool result = RenderThread::Get()->Send(create_widget_message); |
| + bool result = true; |
| + if (create_widget_message) |
| + result = RenderThread::Get()->Send(create_widget_message); |
| + |
| if (result) { |
| RenderThread::Get()->AddRoute(routing_id_, this); |
| // Take a reference on behalf of the RenderThread. This will be balanced |