Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(320)

Side by Side Diff: content/renderer/render_frame_impl.cc

Issue 1685003002: Plumb the correct owner document through DocumentInit::m_owner. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebased Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/render_frame_impl.h" 5 #include "content/renderer/render_frame_impl.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
(...skipping 796 matching lines...) Expand 10 before | Expand all | Expand 10 after
807 return NULL; 807 return NULL;
808 } 808 }
809 809
810 // static 810 // static
811 RenderFrameImpl* RenderFrameImpl::CreateMainFrame( 811 RenderFrameImpl* RenderFrameImpl::CreateMainFrame(
812 RenderViewImpl* render_view, 812 RenderViewImpl* render_view,
813 int32_t routing_id, 813 int32_t routing_id,
814 int32_t widget_routing_id, 814 int32_t widget_routing_id,
815 bool hidden, 815 bool hidden,
816 const blink::WebScreenInfo& screen_info, 816 const blink::WebScreenInfo& screen_info,
817 CompositorDependencies* compositor_deps) { 817 CompositorDependencies* compositor_deps,
818 blink::WebFrame* opener) {
818 // A main frame RenderFrame must have a RenderWidget. 819 // A main frame RenderFrame must have a RenderWidget.
819 DCHECK_NE(MSG_ROUTING_NONE, widget_routing_id); 820 DCHECK_NE(MSG_ROUTING_NONE, widget_routing_id);
820 821
821 RenderFrameImpl* render_frame = 822 RenderFrameImpl* render_frame =
822 RenderFrameImpl::Create(render_view, routing_id); 823 RenderFrameImpl::Create(render_view, routing_id);
823 WebLocalFrame* web_frame = 824 WebLocalFrame* web_frame = WebLocalFrame::create(
824 WebLocalFrame::create(blink::WebTreeScopeType::Document, render_frame); 825 blink::WebTreeScopeType::Document, render_frame, opener);
825 render_frame->BindToWebFrame(web_frame); 826 render_frame->BindToWebFrame(web_frame);
826 render_view->webview()->setMainFrame(web_frame); 827 render_view->webview()->setMainFrame(web_frame);
827 render_frame->render_widget_ = RenderWidget::CreateForFrame( 828 render_frame->render_widget_ = RenderWidget::CreateForFrame(
828 widget_routing_id, hidden, screen_info, compositor_deps, web_frame); 829 widget_routing_id, hidden, screen_info, compositor_deps, web_frame);
829 // TODO(kenrb): Observing shouldn't be necessary when we sort out 830 // TODO(kenrb): Observing shouldn't be necessary when we sort out
830 // WasShown and WasHidden, separating page-level visibility from 831 // WasShown and WasHidden, separating page-level visibility from
831 // frame-level visibility. 832 // frame-level visibility.
832 // TODO(avi): This DCHECK is to track cleanup for https://crbug.com/545684 833 // TODO(avi): This DCHECK is to track cleanup for https://crbug.com/545684
833 DCHECK_EQ(render_view, render_frame->render_widget_) 834 DCHECK_EQ(render_view, render_frame->render_widget_)
834 << "Main frame is no longer reusing the RenderView as its widget! " 835 << "Main frame is no longer reusing the RenderView as its widget! "
(...skipping 28 matching lines...) Expand all
863 if (previous_sibling_proxy) 864 if (previous_sibling_proxy)
864 previous_sibling_web_frame = previous_sibling_proxy->web_frame(); 865 previous_sibling_web_frame = previous_sibling_proxy->web_frame();
865 866
866 // Create the RenderFrame and WebLocalFrame, linking the two. 867 // Create the RenderFrame and WebLocalFrame, linking the two.
867 render_frame = 868 render_frame =
868 RenderFrameImpl::Create(parent_proxy->render_view(), routing_id); 869 RenderFrameImpl::Create(parent_proxy->render_view(), routing_id);
869 web_frame = parent_web_frame->createLocalChild( 870 web_frame = parent_web_frame->createLocalChild(
870 replicated_state.scope, WebString::fromUTF8(replicated_state.name), 871 replicated_state.scope, WebString::fromUTF8(replicated_state.name),
871 WebString::fromUTF8(replicated_state.unique_name), 872 WebString::fromUTF8(replicated_state.unique_name),
872 replicated_state.sandbox_flags, render_frame, 873 replicated_state.sandbox_flags, render_frame,
873 previous_sibling_web_frame, frame_owner_properties); 874 previous_sibling_web_frame, frame_owner_properties,
875 ResolveOpener(opener_routing_id, nullptr));
874 876
875 // The RenderFrame is created and inserted into the frame tree in the above 877 // The RenderFrame is created and inserted into the frame tree in the above
876 // call to createLocalChild. 878 // call to createLocalChild.
877 render_frame->in_frame_tree_ = true; 879 render_frame->in_frame_tree_ = true;
878 } else { 880 } else {
879 RenderFrameProxy* proxy = 881 RenderFrameProxy* proxy =
880 RenderFrameProxy::FromRoutingID(proxy_routing_id); 882 RenderFrameProxy::FromRoutingID(proxy_routing_id);
881 // The remote frame could've been detached while the remote-to-local 883 // The remote frame could've been detached while the remote-to-local
882 // navigation was being initiated in the browser process. Drop the 884 // navigation was being initiated in the browser process. Drop the
883 // navigation and don't create the frame in that case. See 885 // navigation and don't create the frame in that case. See
884 // https://crbug.com/526304. 886 // https://crbug.com/526304.
885 if (!proxy) 887 if (!proxy)
886 return; 888 return;
887 889
888 render_frame = RenderFrameImpl::Create(proxy->render_view(), routing_id); 890 render_frame = RenderFrameImpl::Create(proxy->render_view(), routing_id);
889 render_frame->proxy_routing_id_ = proxy_routing_id; 891 render_frame->proxy_routing_id_ = proxy_routing_id;
890 web_frame = blink::WebLocalFrame::createProvisional( 892 web_frame = blink::WebLocalFrame::createProvisional(
Charlie Reis 2016/02/25 01:08:08 What about this branch? Looks like we're losing t
dcheng 2016/02/25 01:13:28 When we create a provisional frame, we copy a bunc
Charlie Reis 2016/02/25 21:21:25 Acknowledged.
891 render_frame, proxy->web_frame(), replicated_state.sandbox_flags, 893 render_frame, proxy->web_frame(), replicated_state.sandbox_flags,
892 frame_owner_properties); 894 frame_owner_properties);
893 } 895 }
894 render_frame->BindToWebFrame(web_frame); 896 render_frame->BindToWebFrame(web_frame);
895 CHECK(parent_routing_id != MSG_ROUTING_NONE || !web_frame->parent()); 897 CHECK(parent_routing_id != MSG_ROUTING_NONE || !web_frame->parent());
896 898
897 WebFrame* opener = ResolveOpener(opener_routing_id, nullptr);
898 web_frame->setOpener(opener);
899
900 if (widget_params.routing_id != MSG_ROUTING_NONE) { 899 if (widget_params.routing_id != MSG_ROUTING_NONE) {
901 CHECK(!web_frame->parent() || 900 CHECK(!web_frame->parent() ||
902 SiteIsolationPolicy::AreCrossProcessFramesPossible()); 901 SiteIsolationPolicy::AreCrossProcessFramesPossible());
903 render_frame->render_widget_ = RenderWidget::CreateForFrame( 902 render_frame->render_widget_ = RenderWidget::CreateForFrame(
904 widget_params.routing_id, widget_params.hidden, 903 widget_params.routing_id, widget_params.hidden,
905 render_frame->render_view_->screen_info(), compositor_deps, web_frame); 904 render_frame->render_view_->screen_info(), compositor_deps, web_frame);
906 // TODO(avi): The main frame re-uses the RenderViewImpl as its widget, so 905 // TODO(avi): The main frame re-uses the RenderViewImpl as its widget, so
907 // avoid double-registering the frame as an observer. 906 // avoid double-registering the frame as an observer.
908 // https://crbug.com/545684 907 // https://crbug.com/545684
909 if (web_frame->parent()) { 908 if (web_frame->parent()) {
(...skipping 5212 matching lines...) Expand 10 before | Expand all | Expand 10 after
6122 int match_count, 6121 int match_count,
6123 int ordinal, 6122 int ordinal,
6124 const WebRect& selection_rect, 6123 const WebRect& selection_rect,
6125 bool final_status_update) { 6124 bool final_status_update) {
6126 Send(new FrameHostMsg_Find_Reply(routing_id_, request_id, match_count, 6125 Send(new FrameHostMsg_Find_Reply(routing_id_, request_id, match_count,
6127 selection_rect, ordinal, 6126 selection_rect, ordinal,
6128 final_status_update)); 6127 final_status_update));
6129 } 6128 }
6130 6129
6131 } // namespace content 6130 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698