Index: content/browser/web_contents/web_contents_impl.cc |
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc |
index e0d64d07eab267edf2e559e905078c3dfda9145c..d9457e901da9b898287983bb45339ade34e68e63 100644 |
--- a/content/browser/web_contents/web_contents_impl.cc |
+++ b/content/browser/web_contents/web_contents_impl.cc |
@@ -2044,7 +2044,7 @@ void WebContentsImpl::OnRenderFrameProxyVisibilityChanged(bool visible) { |
} |
void WebContentsImpl::CreateNewWindow( |
- SiteInstance* source_site_instance, |
+ RenderFrameHost* opener, |
int32_t render_view_route_id, |
int32_t main_frame_route_id, |
int32_t main_frame_widget_route_id, |
@@ -2055,10 +2055,13 @@ void WebContentsImpl::CreateNewWindow( |
(main_frame_route_id == MSG_ROUTING_NONE)); |
DCHECK_EQ((render_view_route_id == MSG_ROUTING_NONE), |
(main_frame_widget_route_id == MSG_ROUTING_NONE)); |
+ DCHECK(opener); |
- int render_process_id = source_site_instance->GetProcess()->GetID(); |
- // The route IDs passed into this function can be trusted not to already be in |
- // use; they were allocated by the RenderWidgetHelper on the IO thread. |
+ int render_process_id = opener->GetProcess()->GetID(); |
+ SiteInstance* source_site_instance = opener->GetSiteInstance(); |
+ |
+ // The route IDs passed into this function can be trusted not to already |
+ // be in use; they were allocated by the RenderWidgetHelper by the caller. |
DCHECK(!RenderFrameHostImpl::FromID(render_process_id, main_frame_route_id)); |
// We usually create the new window in the same BrowsingInstance (group of |
@@ -2120,7 +2123,7 @@ void WebContentsImpl::CreateNewWindow( |
create_params.main_frame_widget_routing_id = main_frame_widget_route_id; |
create_params.main_frame_name = params.frame_name; |
create_params.opener_render_process_id = render_process_id; |
- create_params.opener_render_frame_id = params.opener_render_frame_id; |
+ create_params.opener_render_frame_id = opener->GetRoutingID(); |
create_params.opener_suppressed = params.opener_suppressed; |
if (params.disposition == WindowOpenDisposition::NEW_BACKGROUND_TAB) |
create_params.initially_hidden = true; |
@@ -2167,19 +2170,16 @@ void WebContentsImpl::CreateNewWindow( |
} |
if (delegate_) { |
- delegate_->WebContentsCreated( |
- this, render_process_id, params.opener_render_frame_id, |
- params.frame_name, params.target_url, new_contents); |
+ delegate_->WebContentsCreated(this, render_process_id, |
+ opener->GetRoutingID(), params.frame_name, |
+ params.target_url, new_contents); |
} |
- RenderFrameHost* source_render_frame_host = |
- RenderFrameHost::FromID(render_process_id, params.opener_render_frame_id); |
- |
- if (source_render_frame_host) { |
+ if (opener) { |
for (auto& observer : observers_) { |
- observer.DidOpenRequestedURL(new_contents, source_render_frame_host, |
- params.target_url, params.referrer, |
- params.disposition, ui::PAGE_TRANSITION_LINK, |
+ observer.DidOpenRequestedURL(new_contents, opener, params.target_url, |
+ params.referrer, params.disposition, |
+ ui::PAGE_TRANSITION_LINK, |
false, // started_from_context_menu |
true); // renderer_initiated |
} |