Index: content/renderer/render_frame_proxy.cc |
diff --git a/content/renderer/render_frame_proxy.cc b/content/renderer/render_frame_proxy.cc |
index ff16e41aa71aca85ba94d49f6b36690e63f5f13a..14670716dfee75ba73d6c658a4e90db05bc3f45d 100644 |
--- a/content/renderer/render_frame_proxy.cc |
+++ b/content/renderer/render_frame_proxy.cc |
@@ -39,10 +39,16 @@ |
scoped_ptr<RenderFrameProxy> proxy( |
new RenderFrameProxy(routing_id, frame_to_replace->GetRoutingID())); |
- // When a RenderFrame is replaced by a RenderProxy, the WebRemoteFrame should |
- // always come from WebRemoteFrame::create and a call to WebFrame::swap must |
- // follow later. |
- blink::WebRemoteFrame* web_frame = blink::WebRemoteFrame::create(proxy.get()); |
+ blink::WebRemoteFrame* web_frame = NULL; |
+ if (frame_to_replace->GetWebFrame()->parent() && |
+ frame_to_replace->GetWebFrame()->parent()->isWebRemoteFrame()) { |
+ blink::WebRemoteFrame* parent_web_frame = |
+ frame_to_replace->GetWebFrame()->parent()->toWebRemoteFrame(); |
+ web_frame = parent_web_frame->createRemoteChild("", proxy.get()); |
+ } else { |
+ web_frame = blink::WebRemoteFrame::create(proxy.get()); |
+ } |
+ |
proxy->Init(web_frame, frame_to_replace->render_view()); |
return proxy.release(); |
} |