Index: content/renderer/render_widget.cc |
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc |
index c2eefbd766a8c00c252c1c06c249675af13d37fa..1f3defddb6b04046ed1a232100761272393a65f6 100644 |
--- a/content/renderer/render_widget.cc |
+++ b/content/renderer/render_widget.cc |
@@ -61,12 +61,15 @@ |
#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/WebNode.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" |
@@ -533,7 +536,32 @@ 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) { |
+ CHECK_NE(routing_id, MSG_ROUTING_NONE); |
+ 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; |
+ // DoInit increments the reference count on |widget|, keeping it alive after |
+ // this function returns. |
+ if (widget->DoInit(MSG_ROUTING_NONE, compositor_deps, |
+ RenderWidget::CreateWebFrameWidget(widget.get(), frame), |
+ nullptr)) { |
+ widget->CompleteInit(); |
+ return widget.get(); |
+ } |
+ return nullptr; |
+} |
+ |
+// static |
+blink::WebWidget* RenderWidget::CreateWebWidget(RenderWidget* render_widget) { |
switch (render_widget->popup_type_) { |
case blink::WebPopupTypeNone: // Nothing to create. |
break; |
@@ -548,6 +576,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), |
@@ -567,7 +602,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 |