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 884 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
895 int32_t widget_routing_id, | 895 int32_t widget_routing_id, |
896 bool hidden, | 896 bool hidden, |
897 const blink::WebScreenInfo& screen_info, | 897 const blink::WebScreenInfo& screen_info, |
898 CompositorDependencies* compositor_deps, | 898 CompositorDependencies* compositor_deps, |
899 blink::WebFrame* opener) { | 899 blink::WebFrame* opener) { |
900 // A main frame RenderFrame must have a RenderWidget. | 900 // A main frame RenderFrame must have a RenderWidget. |
901 DCHECK_NE(MSG_ROUTING_NONE, widget_routing_id); | 901 DCHECK_NE(MSG_ROUTING_NONE, widget_routing_id); |
902 | 902 |
903 RenderFrameImpl* render_frame = | 903 RenderFrameImpl* render_frame = |
904 RenderFrameImpl::Create(render_view, routing_id); | 904 RenderFrameImpl::Create(render_view, routing_id); |
905 render_frame->InitializeBlameContext(nullptr); | |
906 WebLocalFrame* web_frame = WebLocalFrame::create( | 905 WebLocalFrame* web_frame = WebLocalFrame::create( |
907 blink::WebTreeScopeType::Document, render_frame, opener); | 906 blink::WebTreeScopeType::Document, render_frame, opener); |
908 render_frame->BindToWebFrame(web_frame); | 907 render_frame->BindToWebFrame(web_frame); |
| 908 render_frame->InitializeBlameContext(nullptr); |
909 render_view->webview()->setMainFrame(web_frame); | 909 render_view->webview()->setMainFrame(web_frame); |
910 render_frame->render_widget_ = RenderWidget::CreateForFrame( | 910 render_frame->render_widget_ = RenderWidget::CreateForFrame( |
911 widget_routing_id, hidden, screen_info, compositor_deps, web_frame); | 911 widget_routing_id, hidden, screen_info, compositor_deps, web_frame); |
912 // TODO(kenrb): Observing shouldn't be necessary when we sort out | 912 // TODO(kenrb): Observing shouldn't be necessary when we sort out |
913 // WasShown and WasHidden, separating page-level visibility from | 913 // WasShown and WasHidden, separating page-level visibility from |
914 // frame-level visibility. | 914 // frame-level visibility. |
915 // TODO(avi): This DCHECK is to track cleanup for https://crbug.com/545684 | 915 // TODO(avi): This DCHECK is to track cleanup for https://crbug.com/545684 |
916 DCHECK_EQ(render_view->GetWidget(), render_frame->render_widget_) | 916 DCHECK_EQ(render_view->GetWidget(), render_frame->render_widget_) |
917 << "Main frame is no longer reusing the RenderView as its widget! " | 917 << "Main frame is no longer reusing the RenderView as its widget! " |
918 << "Does the RenderFrame need to register itself with the RenderWidget?"; | 918 << "Does the RenderFrame need to register itself with the RenderWidget?"; |
919 return render_frame; | 919 return render_frame; |
920 } | 920 } |
921 | 921 |
922 // static | 922 // static |
923 void RenderFrameImpl::CreateFrame( | 923 void RenderFrameImpl::CreateFrame( |
924 int routing_id, | 924 int routing_id, |
925 int proxy_routing_id, | 925 int proxy_routing_id, |
926 int opener_routing_id, | 926 int opener_routing_id, |
927 int parent_routing_id, | 927 int parent_routing_id, |
928 int previous_sibling_routing_id, | 928 int previous_sibling_routing_id, |
929 const FrameReplicationState& replicated_state, | 929 const FrameReplicationState& replicated_state, |
930 CompositorDependencies* compositor_deps, | 930 CompositorDependencies* compositor_deps, |
931 const FrameMsg_NewFrame_WidgetParams& widget_params, | 931 const FrameMsg_NewFrame_WidgetParams& widget_params, |
932 const blink::WebFrameOwnerProperties& frame_owner_properties) { | 932 const blink::WebFrameOwnerProperties& frame_owner_properties) { |
933 blink::WebLocalFrame* web_frame; | 933 blink::WebLocalFrame* web_frame; |
934 RenderFrameImpl* render_frame; | 934 RenderFrameImpl* render_frame; |
| 935 RenderFrameImpl* parent_frame = nullptr; |
935 if (proxy_routing_id == MSG_ROUTING_NONE) { | 936 if (proxy_routing_id == MSG_ROUTING_NONE) { |
936 RenderFrameProxy* parent_proxy = | 937 RenderFrameProxy* parent_proxy = |
937 RenderFrameProxy::FromRoutingID(parent_routing_id); | 938 RenderFrameProxy::FromRoutingID(parent_routing_id); |
938 // If the browser is sending a valid parent routing id, it should already | 939 // If the browser is sending a valid parent routing id, it should already |
939 // be created and registered. | 940 // be created and registered. |
940 CHECK(parent_proxy); | 941 CHECK(parent_proxy); |
941 blink::WebRemoteFrame* parent_web_frame = parent_proxy->web_frame(); | 942 blink::WebRemoteFrame* parent_web_frame = parent_proxy->web_frame(); |
942 | 943 |
943 blink::WebFrame* previous_sibling_web_frame = nullptr; | 944 blink::WebFrame* previous_sibling_web_frame = nullptr; |
944 RenderFrameProxy* previous_sibling_proxy = | 945 RenderFrameProxy* previous_sibling_proxy = |
945 RenderFrameProxy::FromRoutingID(previous_sibling_routing_id); | 946 RenderFrameProxy::FromRoutingID(previous_sibling_routing_id); |
946 if (previous_sibling_proxy) | 947 if (previous_sibling_proxy) |
947 previous_sibling_web_frame = previous_sibling_proxy->web_frame(); | 948 previous_sibling_web_frame = previous_sibling_proxy->web_frame(); |
948 | 949 |
949 // Create the RenderFrame and WebLocalFrame, linking the two. | 950 // Create the RenderFrame and WebLocalFrame, linking the two. |
950 render_frame = | 951 render_frame = |
951 RenderFrameImpl::Create(parent_proxy->render_view(), routing_id); | 952 RenderFrameImpl::Create(parent_proxy->render_view(), routing_id); |
952 render_frame->InitializeBlameContext(FromRoutingID(parent_routing_id)); | 953 parent_frame = FromRoutingID(parent_routing_id); |
953 web_frame = parent_web_frame->createLocalChild( | 954 web_frame = parent_web_frame->createLocalChild( |
954 replicated_state.scope, WebString::fromUTF8(replicated_state.name), | 955 replicated_state.scope, WebString::fromUTF8(replicated_state.name), |
955 WebString::fromUTF8(replicated_state.unique_name), | 956 WebString::fromUTF8(replicated_state.unique_name), |
956 replicated_state.sandbox_flags, render_frame, | 957 replicated_state.sandbox_flags, render_frame, |
957 previous_sibling_web_frame, frame_owner_properties, | 958 previous_sibling_web_frame, frame_owner_properties, |
958 ResolveOpener(opener_routing_id, nullptr)); | 959 ResolveOpener(opener_routing_id, nullptr)); |
959 | 960 |
960 // The RenderFrame is created and inserted into the frame tree in the above | 961 // The RenderFrame is created and inserted into the frame tree in the above |
961 // call to createLocalChild. | 962 // call to createLocalChild. |
962 render_frame->in_frame_tree_ = true; | 963 render_frame->in_frame_tree_ = true; |
963 } else { | 964 } else { |
964 RenderFrameProxy* proxy = | 965 RenderFrameProxy* proxy = |
965 RenderFrameProxy::FromRoutingID(proxy_routing_id); | 966 RenderFrameProxy::FromRoutingID(proxy_routing_id); |
966 // The remote frame could've been detached while the remote-to-local | 967 // The remote frame could've been detached while the remote-to-local |
967 // navigation was being initiated in the browser process. Drop the | 968 // navigation was being initiated in the browser process. Drop the |
968 // navigation and don't create the frame in that case. See | 969 // navigation and don't create the frame in that case. See |
969 // https://crbug.com/526304. | 970 // https://crbug.com/526304. |
970 if (!proxy) | 971 if (!proxy) |
971 return; | 972 return; |
972 | 973 |
973 render_frame = RenderFrameImpl::Create(proxy->render_view(), routing_id); | 974 render_frame = RenderFrameImpl::Create(proxy->render_view(), routing_id); |
974 render_frame->InitializeBlameContext(nullptr); | |
975 render_frame->proxy_routing_id_ = proxy_routing_id; | 975 render_frame->proxy_routing_id_ = proxy_routing_id; |
976 web_frame = blink::WebLocalFrame::createProvisional( | 976 web_frame = blink::WebLocalFrame::createProvisional( |
977 render_frame, proxy->web_frame(), replicated_state.sandbox_flags, | 977 render_frame, proxy->web_frame(), replicated_state.sandbox_flags, |
978 frame_owner_properties); | 978 frame_owner_properties); |
979 } | 979 } |
980 render_frame->BindToWebFrame(web_frame); | 980 render_frame->BindToWebFrame(web_frame); |
| 981 render_frame->InitializeBlameContext(parent_frame); |
981 CHECK(parent_routing_id != MSG_ROUTING_NONE || !web_frame->parent()); | 982 CHECK(parent_routing_id != MSG_ROUTING_NONE || !web_frame->parent()); |
982 | 983 |
983 if (widget_params.routing_id != MSG_ROUTING_NONE) { | 984 if (widget_params.routing_id != MSG_ROUTING_NONE) { |
984 CHECK(!web_frame->parent() || | 985 CHECK(!web_frame->parent() || |
985 SiteIsolationPolicy::AreCrossProcessFramesPossible()); | 986 SiteIsolationPolicy::AreCrossProcessFramesPossible()); |
986 render_frame->render_widget_ = RenderWidget::CreateForFrame( | 987 render_frame->render_widget_ = RenderWidget::CreateForFrame( |
987 widget_params.routing_id, widget_params.hidden, | 988 widget_params.routing_id, widget_params.hidden, |
988 render_frame->render_view_->screen_info(), compositor_deps, web_frame); | 989 render_frame->render_view_->screen_info(), compositor_deps, web_frame); |
989 // TODO(avi): The main frame re-uses the RenderViewImpl as its widget, so | 990 // TODO(avi): The main frame re-uses the RenderViewImpl as its widget, so |
990 // avoid double-registering the frame as an observer. | 991 // avoid double-registering the frame as an observer. |
(...skipping 1733 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2724 | 2725 |
2725 // Tracing analysis uses this to find main frames when this value is | 2726 // Tracing analysis uses this to find main frames when this value is |
2726 // MSG_ROUTING_NONE, and build the frame tree otherwise. | 2727 // MSG_ROUTING_NONE, and build the frame tree otherwise. |
2727 TRACE_EVENT2("navigation", "RenderFrameImpl::createChildFrame", | 2728 TRACE_EVENT2("navigation", "RenderFrameImpl::createChildFrame", |
2728 "id", routing_id_, | 2729 "id", routing_id_, |
2729 "child", child_routing_id); | 2730 "child", child_routing_id); |
2730 | 2731 |
2731 // Create the RenderFrame and WebLocalFrame, linking the two. | 2732 // Create the RenderFrame and WebLocalFrame, linking the two. |
2732 RenderFrameImpl* child_render_frame = RenderFrameImpl::Create( | 2733 RenderFrameImpl* child_render_frame = RenderFrameImpl::Create( |
2733 render_view_.get(), child_routing_id); | 2734 render_view_.get(), child_routing_id); |
2734 child_render_frame->InitializeBlameContext(this); | |
2735 blink::WebLocalFrame* web_frame = | 2735 blink::WebLocalFrame* web_frame = |
2736 WebLocalFrame::create(scope, child_render_frame); | 2736 WebLocalFrame::create(scope, child_render_frame); |
2737 child_render_frame->BindToWebFrame(web_frame); | 2737 child_render_frame->BindToWebFrame(web_frame); |
| 2738 child_render_frame->InitializeBlameContext(this); |
2738 | 2739 |
2739 // Add the frame to the frame tree and initialize it. | 2740 // Add the frame to the frame tree and initialize it. |
2740 parent->appendChild(web_frame); | 2741 parent->appendChild(web_frame); |
2741 child_render_frame->in_frame_tree_ = true; | 2742 child_render_frame->in_frame_tree_ = true; |
2742 child_render_frame->Initialize(); | 2743 child_render_frame->Initialize(); |
2743 | 2744 |
2744 return web_frame; | 2745 return web_frame; |
2745 } | 2746 } |
2746 | 2747 |
2747 void RenderFrameImpl::didChangeOpener(blink::WebFrame* opener) { | 2748 void RenderFrameImpl::didChangeOpener(blink::WebFrame* opener) { |
(...skipping 3443 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6191 // event target. Potentially a Pepper plugin will receive the event. | 6192 // event target. Potentially a Pepper plugin will receive the event. |
6192 // In order to tell whether a plugin gets the last mouse event and which it | 6193 // In order to tell whether a plugin gets the last mouse event and which it |
6193 // is, we set |pepper_last_mouse_event_target_| to null here. If a plugin gets | 6194 // is, we set |pepper_last_mouse_event_target_| to null here. If a plugin gets |
6194 // the event, it will notify us via DidReceiveMouseEvent() and set itself as | 6195 // the event, it will notify us via DidReceiveMouseEvent() and set itself as |
6195 // |pepper_last_mouse_event_target_|. | 6196 // |pepper_last_mouse_event_target_|. |
6196 pepper_last_mouse_event_target_ = nullptr; | 6197 pepper_last_mouse_event_target_ = nullptr; |
6197 #endif | 6198 #endif |
6198 } | 6199 } |
6199 | 6200 |
6200 } // namespace content | 6201 } // namespace content |
OLD | NEW |