Chromium Code Reviews| Index: content/renderer/render_view_impl.cc |
| diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc |
| index 9516ef9989038bac3b80cdd989925bdb3e61e454..52e13f12d26fbdd8e6cdab503ce298b443208e6e 100644 |
| --- a/content/renderer/render_view_impl.cc |
| +++ b/content/renderer/render_view_impl.cc |
| @@ -52,6 +52,7 @@ |
| #include "content/common/frame_replication_state.h" |
| #include "content/common/input_messages.h" |
| #include "content/common/page_messages.h" |
| +#include "content/common/render_message_filter.mojom.h" |
| #include "content/common/site_isolation_policy.h" |
| #include "content/common/view_messages.h" |
| #include "content/public/common/bindings_policy.h" |
| @@ -1503,18 +1504,18 @@ WebView* RenderViewImpl::createView(WebLocalFrame* creator, |
| const WebString& frame_name, |
| WebNavigationPolicy policy, |
| bool suppress_opener) { |
| - ViewHostMsg_CreateWindow_Params params; |
| - params.opener_id = GetRoutingID(); |
| - params.user_gesture = WebUserGestureIndicator::isProcessingUserGesture(); |
| + mojom::CreateNewWindowParamsPtr params = mojom::CreateNewWindowParams::New(); |
| + params->opener_id = GetRoutingID(); |
| + params->user_gesture = WebUserGestureIndicator::isProcessingUserGesture(); |
| if (GetContentClient()->renderer()->AllowPopup()) |
| - params.user_gesture = true; |
| - params.window_container_type = WindowFeaturesToContainerType(features); |
| - params.session_storage_namespace_id = session_storage_namespace_id_; |
| + params->user_gesture = true; |
| + params->window_container_type = WindowFeaturesToContainerType(features); |
| + params->session_storage_namespace_id = session_storage_namespace_id_; |
| if (frame_name != "_blank") |
| - params.frame_name = base::UTF16ToUTF8(base::StringPiece16(frame_name)); |
| - params.opener_render_frame_id = |
| + params->frame_name = base::UTF16ToUTF8(base::StringPiece16(frame_name)); |
| + params->opener_render_frame_id = |
| RenderFrameImpl::FromWebFrame(creator)->GetRoutingID(); |
| - params.opener_url = creator->document().url(); |
| + params->opener_url = creator->document().url(); |
| // The browser process uses the top frame's URL for a content settings check |
| // to determine whether the popup is allowed. If the top frame is remote, |
| @@ -1526,9 +1527,9 @@ WebView* RenderViewImpl::createView(WebLocalFrame* creator, |
| // path-based matching for file URLs from content settings. See |
| // https://crbug.com/466297. |
| if (creator->top()->isWebLocalFrame()) { |
| - params.opener_top_level_frame_url = creator->top()->document().url(); |
| + params->opener_top_level_frame_url = creator->top()->document().url(); |
| } else { |
| - params.opener_top_level_frame_url = |
| + params->opener_top_level_frame_url = |
| blink::WebStringToGURL(creator->top()->getSecurityOrigin().toString()); |
| } |
| @@ -1536,22 +1537,26 @@ WebView* RenderViewImpl::createView(WebLocalFrame* creator, |
| creator->document().getSecurityOrigin().toString())); |
| if (!security_url.is_valid()) |
| security_url = GURL(); |
| - params.opener_security_origin = security_url; |
| - params.opener_suppressed = suppress_opener; |
| - params.disposition = NavigationPolicyToDisposition(policy); |
| + params->opener_security_origin = security_url; |
| + params->opener_suppressed = suppress_opener; |
| + params->disposition = NavigationPolicyToDisposition(policy); |
| if (!request.isNull()) { |
| - params.target_url = request.url(); |
| - params.referrer = GetReferrerFromRequest(creator, request); |
| + params->target_url = request.url(); |
| + params->referrer = GetReferrerFromRequest(creator, request); |
| } |
| - params.features = features; |
| + params->features = features; |
| - for (size_t i = 0; i < features.additionalFeatures.size(); ++i) |
| - params.additional_features.push_back(features.additionalFeatures[i]); |
| + // We preserve this information before sending the message since |params| is |
| + // moved on send. |
| + bool is_background_tab = |
| + params->disposition == WindowOpenDisposition::NEW_BACKGROUND_TAB; |
| + bool opened_by_user_gesture = params->user_gesture; |
| - ViewHostMsg_CreateWindow_Reply reply; |
| - RenderThread::Get()->Send(new ViewHostMsg_CreateWindow(params, &reply)); |
| - if (reply.route_id == MSG_ROUTING_NONE) |
| - return NULL; |
| + mojom::CreateNewWindowReplyPtr reply; |
| + RenderThreadImpl::current_render_message_filter()->CreateNewWindow( |
|
ncarter (slow)
2016/09/27 20:32:41
Why use this global and getter? Is it just about a
Ken Rockot(use gerrit already)
2016/09/27 21:05:42
Yeah, this was a semi-painful way to avoid exposin
ncarter (slow)
2016/09/27 22:47:52
I'd prefer to keep the singleton interfaces lookin
|
| + std::move(params), &reply); |
| + if (reply->route_id == MSG_ROUTING_NONE) |
| + return nullptr; |
| WebUserGestureIndicator::consumeUserGesture(); |
| @@ -1578,16 +1583,15 @@ 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 = 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.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 = |
| - reply.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.hidden = |
| - (params.disposition == WindowOpenDisposition::NEW_BACKGROUND_TAB); |
| + view_params.hidden = is_background_tab; |
| view_params.never_visible = never_visible; |
| view_params.next_page_id = 1; |
| view_params.initial_size = initial_size; |
| @@ -1598,7 +1602,7 @@ WebView* RenderViewImpl::createView(WebLocalFrame* creator, |
| RenderViewImpl* view = |
| RenderViewImpl::Create(compositor_deps_, view_params, true); |
| - view->opened_by_user_gesture_ = params.user_gesture; |
| + view->opened_by_user_gesture_ = opened_by_user_gesture; |
| return view->webview(); |
| } |