OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |