| Index: content/renderer/render_view_impl.cc
|
| diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
|
| index 489aef6e81f6accbffd4423d5b3269ff10cbb81d..584854c2f1c4724dff935a339d77194352d91e79 100644
|
| --- a/content/renderer/render_view_impl.cc
|
| +++ b/content/renderer/render_view_impl.cc
|
| @@ -644,6 +644,7 @@ RenderViewImpl::RenderViewImpl(CompositorDependencies* compositor_deps,
|
| has_focus_(false),
|
| has_scrolled_focused_editable_node_into_rect_(false),
|
| main_render_frame_(nullptr),
|
| + frame_widget_(nullptr),
|
| speech_recognition_dispatcher_(NULL),
|
| mouse_lock_dispatcher_(NULL),
|
| #if defined(OS_ANDROID)
|
| @@ -690,8 +691,9 @@ void RenderViewImpl::Initialize(const ViewMsg_New_Params& params,
|
| stats_collection_observer_.reset(new StatsCollectionObserver(this));
|
|
|
| if (params.main_frame_routing_id != MSG_ROUTING_NONE) {
|
| - main_render_frame_ =
|
| - RenderFrameImpl::CreateMainFrame(this, params.main_frame_routing_id);
|
| + main_render_frame_ = RenderFrameImpl::CreateMainFrame(
|
| + this, params.main_frame_routing_id, params.main_frame_widget_routing_id,
|
| + params.hidden, screen_info(), compositor_deps_);
|
| }
|
|
|
| if (params.proxy_routing_id != MSG_ROUTING_NONE) {
|
| @@ -822,6 +824,8 @@ void RenderViewImpl::Initialize(const ViewMsg_New_Params& params,
|
| }
|
|
|
| RenderViewImpl::~RenderViewImpl() {
|
| + DCHECK(!frame_widget_);
|
| +
|
| for (BitmapMap::iterator it = disambiguation_bitmaps_.begin();
|
| it != disambiguation_bitmaps_.end();
|
| ++it)
|
| @@ -1575,14 +1579,9 @@ WebView* RenderViewImpl::createView(WebLocalFrame* creator,
|
| for (size_t i = 0; i < features.additionalFeatures.size(); ++i)
|
| params.additional_features.push_back(features.additionalFeatures[i]);
|
|
|
| - int32 routing_id = MSG_ROUTING_NONE;
|
| - int32 main_frame_routing_id = MSG_ROUTING_NONE;
|
| - int64 cloned_session_storage_namespace_id = 0;
|
| -
|
| - RenderThread::Get()->Send(
|
| - new ViewHostMsg_CreateWindow(params, &routing_id, &main_frame_routing_id,
|
| - &cloned_session_storage_namespace_id));
|
| - if (routing_id == MSG_ROUTING_NONE)
|
| + ViewHostMsg_CreateWindow_Reply reply;
|
| + RenderThread::Get()->Send(new ViewHostMsg_CreateWindow(params, &reply));
|
| + if (reply.route_id == MSG_ROUTING_NONE)
|
| return NULL;
|
|
|
| WebUserGestureIndicator::consumeUserGesture();
|
| @@ -1610,14 +1609,14 @@ WebView* RenderViewImpl::createView(WebLocalFrame* creator,
|
| view_params.window_was_created_with_opener = true;
|
| view_params.renderer_preferences = renderer_preferences_;
|
| view_params.web_preferences = webkit_preferences_;
|
| - view_params.view_id = routing_id;
|
| - view_params.main_frame_routing_id = main_frame_routing_id;
|
| + view_params.view_id = reply.route_id;
|
| + view_params.main_frame_routing_id = reply.main_frame_route_id;
|
| + view_params.main_frame_widget_routing_id = reply.main_frame_widget_route_id;
|
| view_params.session_storage_namespace_id =
|
| - cloned_session_storage_namespace_id;
|
| + reply.cloned_session_storage_namespace_id;
|
| view_params.swapped_out = false;
|
| // WebCore will take care of setting the correct name.
|
| view_params.replicated_frame_state = FrameReplicationState();
|
| - view_params.proxy_routing_id = MSG_ROUTING_NONE;
|
| view_params.hidden = (params.disposition == NEW_BACKGROUND_TAB);
|
| view_params.never_visible = never_visible;
|
| view_params.next_page_id = 1;
|
| @@ -1696,6 +1695,12 @@ void RenderViewImpl::FrameDidStopLoading(WebFrame* frame) {
|
| }
|
| }
|
|
|
| +void RenderViewImpl::AttachWebFrameWidget(blink::WebWidget* frame_widget) {
|
| + // The previous WebFrameWidget must already be detached by CloseForFrame().
|
| + DCHECK(!frame_widget_);
|
| + frame_widget_ = frame_widget;
|
| +}
|
| +
|
| void RenderViewImpl::SetZoomLevel(double zoom_level) {
|
| webview()->setZoomLevel(zoom_level);
|
| FOR_EACH_OBSERVER(RenderViewObserver, observers_, OnZoomLevelChanged());
|
| @@ -2946,6 +2951,12 @@ void RenderViewImpl::OnPluginImeCompositionCompleted(const base::string16& text,
|
| }
|
| #endif // OS_MACOSX
|
|
|
| +void RenderViewImpl::CloseForFrame() {
|
| + DCHECK(frame_widget_);
|
| + frame_widget_->close();
|
| + frame_widget_ = nullptr;
|
| +}
|
| +
|
| void RenderViewImpl::Close() {
|
| // We need to grab a pointer to the doomed WebView before we destroy it.
|
| WebView* doomed = webview();
|
|
|