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

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

Issue 2714943004: Move unique name generation and tracking into //content. (Closed)
Patch Set: Rebase again. Created 3 years, 9 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
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | content/renderer/render_frame_proxy.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 976 matching lines...) Expand 10 before | Expand all | Expand 10 after
987 blink::WebFrame* previous_sibling_web_frame = nullptr; 987 blink::WebFrame* previous_sibling_web_frame = nullptr;
988 RenderFrameProxy* previous_sibling_proxy = 988 RenderFrameProxy* previous_sibling_proxy =
989 RenderFrameProxy::FromRoutingID(previous_sibling_routing_id); 989 RenderFrameProxy::FromRoutingID(previous_sibling_routing_id);
990 if (previous_sibling_proxy) 990 if (previous_sibling_proxy)
991 previous_sibling_web_frame = previous_sibling_proxy->web_frame(); 991 previous_sibling_web_frame = previous_sibling_proxy->web_frame();
992 992
993 // Create the RenderFrame and WebLocalFrame, linking the two. 993 // Create the RenderFrame and WebLocalFrame, linking the two.
994 render_frame = 994 render_frame =
995 RenderFrameImpl::Create(parent_proxy->render_view(), routing_id); 995 RenderFrameImpl::Create(parent_proxy->render_view(), routing_id);
996 render_frame->InitializeBlameContext(FromRoutingID(parent_routing_id)); 996 render_frame->InitializeBlameContext(FromRoutingID(parent_routing_id));
997 render_frame->unique_name_helper_.set_propagated_name(
998 replicated_state.unique_name);
997 web_frame = parent_web_frame->createLocalChild( 999 web_frame = parent_web_frame->createLocalChild(
998 replicated_state.scope, WebString::fromUTF8(replicated_state.name), 1000 replicated_state.scope, WebString::fromUTF8(replicated_state.name),
999 WebString::fromUTF8(replicated_state.unique_name),
1000 replicated_state.sandbox_flags, render_frame, 1001 replicated_state.sandbox_flags, render_frame,
1001 render_frame->blink_interface_provider_.get(), 1002 render_frame->blink_interface_provider_.get(),
1002 render_frame->blink_interface_registry_.get(), 1003 render_frame->blink_interface_registry_.get(),
1003 previous_sibling_web_frame, 1004 previous_sibling_web_frame,
1004 ConvertFrameOwnerPropertiesToWebFrameOwnerProperties( 1005 ConvertFrameOwnerPropertiesToWebFrameOwnerProperties(
1005 frame_owner_properties), 1006 frame_owner_properties),
1006 ResolveOpener(opener_routing_id)); 1007 ResolveOpener(opener_routing_id));
1007 1008
1008 // The RenderFrame is created and inserted into the frame tree in the above 1009 // The RenderFrame is created and inserted into the frame tree in the above
1009 // call to createLocalChild. 1010 // call to createLocalChild.
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
1088 1089
1089 blink::WebURL RenderFrameImpl::overrideFlashEmbedWithHTML( 1090 blink::WebURL RenderFrameImpl::overrideFlashEmbedWithHTML(
1090 const blink::WebURL& url) { 1091 const blink::WebURL& url) {
1091 return GetContentClient()->renderer()->OverrideFlashEmbedWithHTML(url); 1092 return GetContentClient()->renderer()->OverrideFlashEmbedWithHTML(url);
1092 } 1093 }
1093 1094
1094 // RenderFrameImpl ---------------------------------------------------------- 1095 // RenderFrameImpl ----------------------------------------------------------
1095 RenderFrameImpl::RenderFrameImpl(const CreateParams& params) 1096 RenderFrameImpl::RenderFrameImpl(const CreateParams& params)
1096 : frame_(NULL), 1097 : frame_(NULL),
1097 is_main_frame_(true), 1098 is_main_frame_(true),
1099 unique_name_helper_(this),
1098 in_browser_initiated_detach_(false), 1100 in_browser_initiated_detach_(false),
1099 in_frame_tree_(false), 1101 in_frame_tree_(false),
1100 render_view_(params.render_view), 1102 render_view_(params.render_view),
1101 routing_id_(params.routing_id), 1103 routing_id_(params.routing_id),
1102 proxy_routing_id_(MSG_ROUTING_NONE), 1104 proxy_routing_id_(MSG_ROUTING_NONE),
1103 #if BUILDFLAG(ENABLE_PLUGINS) 1105 #if BUILDFLAG(ENABLE_PLUGINS)
1104 plugin_power_saver_helper_(nullptr), 1106 plugin_power_saver_helper_(nullptr),
1105 plugin_find_handler_(nullptr), 1107 plugin_find_handler_(nullptr),
1106 #endif 1108 #endif
1107 cookie_jar_(this), 1109 cookie_jar_(this),
(...skipping 1930 matching lines...) Expand 10 before | Expand all | Expand 10 after
3038 } 3040 }
3039 } 3041 }
3040 3042
3041 has_accessed_initial_document_ = true; 3043 has_accessed_initial_document_ = true;
3042 } 3044 }
3043 3045
3044 blink::WebLocalFrame* RenderFrameImpl::createChildFrame( 3046 blink::WebLocalFrame* RenderFrameImpl::createChildFrame(
3045 blink::WebLocalFrame* parent, 3047 blink::WebLocalFrame* parent,
3046 blink::WebTreeScopeType scope, 3048 blink::WebTreeScopeType scope,
3047 const blink::WebString& name, 3049 const blink::WebString& name,
3048 const blink::WebString& unique_name, 3050 const blink::WebString& fallback_name,
3049 blink::WebSandboxFlags sandbox_flags, 3051 blink::WebSandboxFlags sandbox_flags,
3050 const blink::WebFrameOwnerProperties& frame_owner_properties) { 3052 const blink::WebFrameOwnerProperties& frame_owner_properties) {
3051 // Synchronously notify the browser of a child frame creation to get the 3053 // Synchronously notify the browser of a child frame creation to get the
3052 // routing_id for the RenderFrame. 3054 // routing_id for the RenderFrame.
3053 int child_routing_id = MSG_ROUTING_NONE; 3055 int child_routing_id = MSG_ROUTING_NONE;
3054 FrameHostMsg_CreateChildFrame_Params params; 3056 FrameHostMsg_CreateChildFrame_Params params;
3055 params.parent_routing_id = routing_id_; 3057 params.parent_routing_id = routing_id_;
3056 params.scope = scope; 3058 params.scope = scope;
3057 params.frame_name = name.utf8(); 3059 params.frame_name = name.utf8();
3058 params.frame_unique_name = unique_name.utf8(); 3060 // The unique name generation logic was moved out of Blink, so for historical
3061 // reasons, unique name generation needs to take something called the
3062 // |fallback_name| into account. Normally, unique names are generated based on
3063 // the browing context name. For new frames, the initial browsing context name
3064 // comes from the name attribute of the browsing context container element.
3065 //
3066 // However, when the browsing context name is null, Blink instead uses the
3067 // "fallback name" to derive the unique name. The exact contents of the
3068 // "fallback name" are unspecified, but may contain the value of the
3069 // 'subresource attribute' of the browsing context container element.
3070 //
3071 // Note that Blink can't be changed to just pass |fallback_name| as |name| in
3072 // the case |name| is empty: |fallback_name| should never affect the actual
3073 // browsing context name, only unique name generation.
3074 params.frame_unique_name = UniqueNameHelper::GenerateNameForNewChildFrame(
3075 parent,
3076 params.frame_name.empty() ? fallback_name.utf8() : params.frame_name);
3059 params.sandbox_flags = sandbox_flags; 3077 params.sandbox_flags = sandbox_flags;
3060 params.frame_owner_properties = 3078 params.frame_owner_properties =
3061 ConvertWebFrameOwnerPropertiesToFrameOwnerProperties( 3079 ConvertWebFrameOwnerPropertiesToFrameOwnerProperties(
3062 frame_owner_properties); 3080 frame_owner_properties);
3063 Send(new FrameHostMsg_CreateChildFrame(params, &child_routing_id)); 3081 Send(new FrameHostMsg_CreateChildFrame(params, &child_routing_id));
3064 3082
3065 // Allocation of routing id failed, so we can't create a child frame. This can 3083 // Allocation of routing id failed, so we can't create a child frame. This can
3066 // happen if the synchronous IPC message above has failed. This can 3084 // happen if the synchronous IPC message above has failed. This can
3067 // legitimately happen when the browser process has already destroyed 3085 // legitimately happen when the browser process has already destroyed
3068 // RenderProcessHost, but the renderer process hasn't quit yet. 3086 // RenderProcessHost, but the renderer process hasn't quit yet.
3069 if (child_routing_id == MSG_ROUTING_NONE) 3087 if (child_routing_id == MSG_ROUTING_NONE)
3070 return nullptr; 3088 return nullptr;
3071 3089
3072 // This method is always called by local frames, never remote frames. 3090 // This method is always called by local frames, never remote frames.
3073 3091
3074 // Tracing analysis uses this to find main frames when this value is 3092 // Tracing analysis uses this to find main frames when this value is
3075 // MSG_ROUTING_NONE, and build the frame tree otherwise. 3093 // MSG_ROUTING_NONE, and build the frame tree otherwise.
3076 TRACE_EVENT2("navigation,rail", "RenderFrameImpl::createChildFrame", 3094 TRACE_EVENT2("navigation,rail", "RenderFrameImpl::createChildFrame",
3077 "id", routing_id_, 3095 "id", routing_id_,
3078 "child", child_routing_id); 3096 "child", child_routing_id);
3079 3097
3080 // Create the RenderFrame and WebLocalFrame, linking the two. 3098 // Create the RenderFrame and WebLocalFrame, linking the two.
3081 RenderFrameImpl* child_render_frame = 3099 RenderFrameImpl* child_render_frame =
3082 RenderFrameImpl::Create(render_view_, child_routing_id); 3100 RenderFrameImpl::Create(render_view_, child_routing_id);
3101 child_render_frame->unique_name_helper_.set_propagated_name(
3102 params.frame_unique_name);
3083 child_render_frame->InitializeBlameContext(this); 3103 child_render_frame->InitializeBlameContext(this);
3084 blink::WebLocalFrame* web_frame = WebLocalFrame::create( 3104 blink::WebLocalFrame* web_frame = WebLocalFrame::create(
3085 scope, child_render_frame, 3105 scope, child_render_frame,
3086 child_render_frame->blink_interface_provider_.get(), 3106 child_render_frame->blink_interface_provider_.get(),
3087 child_render_frame->blink_interface_registry_.get()); 3107 child_render_frame->blink_interface_registry_.get());
3088 child_render_frame->BindToWebFrame(web_frame); 3108 child_render_frame->BindToWebFrame(web_frame);
3089 3109
3090 // Add the frame to the frame tree and initialize it. 3110 // Add the frame to the frame tree and initialize it.
3091 parent->appendChild(web_frame); 3111 parent->appendChild(web_frame);
3092 child_render_frame->in_frame_tree_ = true; 3112 child_render_frame->in_frame_tree_ = true;
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
3181 3201
3182 void RenderFrameImpl::frameFocused() { 3202 void RenderFrameImpl::frameFocused() {
3183 Send(new FrameHostMsg_FrameFocused(routing_id_)); 3203 Send(new FrameHostMsg_FrameFocused(routing_id_));
3184 } 3204 }
3185 3205
3186 void RenderFrameImpl::willCommitProvisionalLoad() { 3206 void RenderFrameImpl::willCommitProvisionalLoad() {
3187 for (auto& observer : observers_) 3207 for (auto& observer : observers_)
3188 observer.WillCommitProvisionalLoad(); 3208 observer.WillCommitProvisionalLoad();
3189 } 3209 }
3190 3210
3191 void RenderFrameImpl::didChangeName(const blink::WebString& name, 3211 void RenderFrameImpl::didChangeName(const blink::WebString& name) {
3192 const blink::WebString& unique_name) { 3212 if (current_history_item_.isNull()) {
3193 Send(new FrameHostMsg_DidChangeName( 3213 // Once a navigation has committed, the unique name must no longer change to
3194 routing_id_, name.utf8(), unique_name.utf8())); 3214 // avoid breaking back/forward navigations: https://crbug.com/607205
3215 unique_name_helper_.UpdateName(name.utf8());
3216 }
3217 Send(new FrameHostMsg_DidChangeName(routing_id_, name.utf8(),
3218 unique_name_helper_.value()));
3195 3219
3196 if (!committed_first_load_) 3220 if (!committed_first_load_)
3197 name_changed_before_first_commit_ = true; 3221 name_changed_before_first_commit_ = true;
3198 } 3222 }
3199 3223
3200 void RenderFrameImpl::didEnforceInsecureRequestPolicy( 3224 void RenderFrameImpl::didEnforceInsecureRequestPolicy(
3201 blink::WebInsecureRequestPolicy policy) { 3225 blink::WebInsecureRequestPolicy policy) {
3202 Send(new FrameHostMsg_EnforceInsecureRequestPolicy(routing_id_, policy)); 3226 Send(new FrameHostMsg_EnforceInsecureRequestPolicy(routing_id_, policy));
3203 } 3227 }
3204 3228
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after
3619 // subsequent invocations of this callback. 3643 // subsequent invocations of this callback.
3620 // * if |committed_first_load_| is false and |current_history_item_| is 3644 // * if |committed_first_load_| is false and |current_history_item_| is
3621 // *not* null, then the initial empty document has already committed. 3645 // *not* null, then the initial empty document has already committed.
3622 // Record if window.name has changed. 3646 // Record if window.name has changed.
3623 if (!committed_first_load_ && !current_history_item_.isNull()) { 3647 if (!committed_first_load_ && !current_history_item_.isNull()) {
3624 if (!IsMainFrame()) { 3648 if (!IsMainFrame()) {
3625 UMA_HISTOGRAM_BOOLEAN( 3649 UMA_HISTOGRAM_BOOLEAN(
3626 "SessionRestore.SubFrameUniqueNameChangedBeforeFirstCommit", 3650 "SessionRestore.SubFrameUniqueNameChangedBeforeFirstCommit",
3627 name_changed_before_first_commit_); 3651 name_changed_before_first_commit_);
3628 } 3652 }
3653 // TODO(dcheng): This signal is likely calculated incorrectly, and will be
3654 // removed in a followup CL (as we've decided to try to preserve backwards
3655 // compatibility as much as possible for the time being).
3629 committed_first_load_ = true; 3656 committed_first_load_ = true;
3630 } 3657 }
3631 3658
3632 DocumentState* document_state = 3659 DocumentState* document_state =
3633 DocumentState::FromDataSource(frame->dataSource()); 3660 DocumentState::FromDataSource(frame->dataSource());
3634 NavigationStateImpl* navigation_state = 3661 NavigationStateImpl* navigation_state =
3635 static_cast<NavigationStateImpl*>(document_state->navigation_state()); 3662 static_cast<NavigationStateImpl*>(document_state->navigation_state());
3636 const WebURLResponse& web_url_response = frame->dataSource()->response(); 3663 const WebURLResponse& web_url_response = frame->dataSource()->response();
3637 WebURLResponseExtraDataImpl* extra_data = 3664 WebURLResponseExtraDataImpl* extra_data =
3638 GetExtraDataFromResponse(web_url_response); 3665 GetExtraDataFromResponse(web_url_response);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
3674 render_view_->QueueMessage( 3701 render_view_->QueueMessage(
3675 new ViewHostMsg_DidFirstPaintAfterLoad(render_view_->routing_id_), 3702 new ViewHostMsg_DidFirstPaintAfterLoad(render_view_->routing_id_),
3676 MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE); 3703 MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE);
3677 } 3704 }
3678 3705
3679 // When we perform a new navigation, we need to update the last committed 3706 // When we perform a new navigation, we need to update the last committed
3680 // session history entry with state for the page we are leaving. Do this 3707 // session history entry with state for the page we are leaving. Do this
3681 // before updating the current history item. 3708 // before updating the current history item.
3682 SendUpdateState(); 3709 SendUpdateState();
3683 3710
3684 // Update the current history item for this frame (both in default Chrome and 3711 // Update the current history item for this frame.
3685 // subframe FrameNavigationEntry modes).
3686 current_history_item_ = item; 3712 current_history_item_ = item;
3713 // Note: don't reference |item| after this point, as its value may not match
3714 // |current_history_item_|.
3715 current_history_item_.setTarget(
3716 blink::WebString::fromUTF8(unique_name_helper_.value()));
3687 3717
3688 InternalDocumentStateData* internal_data = 3718 InternalDocumentStateData* internal_data =
3689 InternalDocumentStateData::FromDocumentState(document_state); 3719 InternalDocumentStateData::FromDocumentState(document_state);
3690 3720
3691 if (internal_data->must_reset_scroll_and_scale_state()) { 3721 if (internal_data->must_reset_scroll_and_scale_state()) {
3692 render_view_->webview()->resetScrollAndScaleState(); 3722 render_view_->webview()->resetScrollAndScaleState();
3693 internal_data->set_must_reset_scroll_and_scale_state(false); 3723 internal_data->set_must_reset_scroll_and_scale_state(false);
3694 } 3724 }
3695 3725
3696 const RequestNavigationParams& request_params = 3726 const RequestNavigationParams& request_params =
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
3741 } 3771 }
3742 } 3772 }
3743 3773
3744 // Remember that we've already processed this request, so we don't update 3774 // Remember that we've already processed this request, so we don't update
3745 // the session history again. We do this regardless of whether this is 3775 // the session history again. We do this regardless of whether this is
3746 // a session history navigation, because if we attempted a session history 3776 // a session history navigation, because if we attempted a session history
3747 // navigation without valid HistoryItem state, WebCore will think it is a 3777 // navigation without valid HistoryItem state, WebCore will think it is a
3748 // new navigation. 3778 // new navigation.
3749 navigation_state->set_request_committed(true); 3779 navigation_state->set_request_committed(true);
3750 3780
3751 SendDidCommitProvisionalLoad(frame, commit_type, item); 3781 SendDidCommitProvisionalLoad(frame, commit_type);
3752 3782
3753 // Check whether we have new encoding name. 3783 // Check whether we have new encoding name.
3754 UpdateEncoding(frame, frame->view()->pageEncoding().utf8()); 3784 UpdateEncoding(frame, frame->view()->pageEncoding().utf8());
3755 } 3785 }
3756 3786
3757 void RenderFrameImpl::didCreateNewDocument(blink::WebLocalFrame* frame) { 3787 void RenderFrameImpl::didCreateNewDocument(blink::WebLocalFrame* frame) {
3758 DCHECK(!frame_ || frame_ == frame); 3788 DCHECK(!frame_ || frame_ == frame);
3759 3789
3760 for (auto& observer : observers_) 3790 for (auto& observer : observers_)
3761 observer.DidCreateNewDocument(); 3791 observer.DidCreateNewDocument();
(...skipping 1060 matching lines...) Expand 10 before | Expand all | Expand 10 after
4822 } 4852 }
4823 4853
4824 const RenderFrameImpl* RenderFrameImpl::GetLocalRoot() const { 4854 const RenderFrameImpl* RenderFrameImpl::GetLocalRoot() const {
4825 return IsLocalRoot() ? this 4855 return IsLocalRoot() ? this
4826 : RenderFrameImpl::FromWebFrame(frame_->localRoot()); 4856 : RenderFrameImpl::FromWebFrame(frame_->localRoot());
4827 } 4857 }
4828 4858
4829 // Tell the embedding application that the URL of the active page has changed. 4859 // Tell the embedding application that the URL of the active page has changed.
4830 void RenderFrameImpl::SendDidCommitProvisionalLoad( 4860 void RenderFrameImpl::SendDidCommitProvisionalLoad(
4831 blink::WebFrame* frame, 4861 blink::WebFrame* frame,
4832 blink::WebHistoryCommitType commit_type, 4862 blink::WebHistoryCommitType commit_type) {
4833 const blink::WebHistoryItem& item) {
4834 DCHECK_EQ(frame_, frame); 4863 DCHECK_EQ(frame_, frame);
4835 WebDataSource* ds = frame->dataSource(); 4864 WebDataSource* ds = frame->dataSource();
4836 DCHECK(ds); 4865 DCHECK(ds);
4837 4866
4838 const WebURLRequest& request = ds->getRequest(); 4867 const WebURLRequest& request = ds->getRequest();
4839 const WebURLResponse& response = ds->response(); 4868 const WebURLResponse& response = ds->response();
4840 4869
4841 DocumentState* document_state = DocumentState::FromDataSource(ds); 4870 DocumentState* document_state = DocumentState::FromDataSource(ds);
4842 NavigationStateImpl* navigation_state = 4871 NavigationStateImpl* navigation_state =
4843 static_cast<NavigationStateImpl*>(document_state->navigation_state()); 4872 static_cast<NavigationStateImpl*>(document_state->navigation_state());
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
4896 params.searchable_form_url = internal_data->searchable_form_url(); 4925 params.searchable_form_url = internal_data->searchable_form_url();
4897 params.searchable_form_encoding = internal_data->searchable_form_encoding(); 4926 params.searchable_form_encoding = internal_data->searchable_form_encoding();
4898 4927
4899 params.gesture = render_view_->navigation_gesture_; 4928 params.gesture = render_view_->navigation_gesture_;
4900 render_view_->navigation_gesture_ = NavigationGestureUnknown; 4929 render_view_->navigation_gesture_ = NavigationGestureUnknown;
4901 4930
4902 // Make navigation state a part of the DidCommitProvisionalLoad message so 4931 // Make navigation state a part of the DidCommitProvisionalLoad message so
4903 // that committed entry has it at all times. Send a single HistoryItem for 4932 // that committed entry has it at all times. Send a single HistoryItem for
4904 // this frame, rather than the whole tree. It will be stored in the 4933 // this frame, rather than the whole tree. It will be stored in the
4905 // corresponding FrameNavigationEntry. 4934 // corresponding FrameNavigationEntry.
4906 params.page_state = SingleHistoryItemToPageState(item); 4935 params.page_state = SingleHistoryItemToPageState(current_history_item_);
4907 4936
4908 params.content_source_id = GetRenderWidget()->GetContentSourceId(); 4937 params.content_source_id = GetRenderWidget()->GetContentSourceId();
4909 4938
4910 params.method = request.httpMethod().latin1(); 4939 params.method = request.httpMethod().latin1();
4911 if (params.method == "POST") 4940 if (params.method == "POST")
4912 params.post_id = ExtractPostId(item); 4941 params.post_id = ExtractPostId(current_history_item_);
4913 4942
4914 params.frame_unique_name = item.target().utf8(); 4943 params.frame_unique_name = current_history_item_.target().utf8();
4915 params.item_sequence_number = item.itemSequenceNumber(); 4944 params.item_sequence_number = current_history_item_.itemSequenceNumber();
4916 params.document_sequence_number = item.documentSequenceNumber(); 4945 params.document_sequence_number =
4946 current_history_item_.documentSequenceNumber();
4917 4947
4918 // If the page contained a client redirect (meta refresh, document.loc...), 4948 // If the page contained a client redirect (meta refresh, document.loc...),
4919 // set the referrer appropriately. 4949 // set the referrer appropriately.
4920 if (ds->isClientRedirect()) { 4950 if (ds->isClientRedirect()) {
4921 params.referrer = 4951 params.referrer =
4922 Referrer(params.redirects[0], ds->getRequest().getReferrerPolicy()); 4952 Referrer(params.redirects[0], ds->getRequest().getReferrerPolicy());
4923 } else { 4953 } else {
4924 params.referrer = 4954 params.referrer =
4925 RenderViewImpl::GetReferrerFromRequest(frame, ds->getRequest()); 4955 RenderViewImpl::GetReferrerFromRequest(frame, ds->getRequest());
4926 } 4956 }
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
5055 CHECK_NE(proxy_routing_id_, MSG_ROUTING_NONE); 5085 CHECK_NE(proxy_routing_id_, MSG_ROUTING_NONE);
5056 CHECK(!in_frame_tree_); 5086 CHECK(!in_frame_tree_);
5057 5087
5058 // The proxy should always exist. If it was detached while the provisional 5088 // The proxy should always exist. If it was detached while the provisional
5059 // LocalFrame was being navigated, the provisional frame would've been 5089 // LocalFrame was being navigated, the provisional frame would've been
5060 // cleaned up by RenderFrameProxy::frameDetached. See 5090 // cleaned up by RenderFrameProxy::frameDetached. See
5061 // https://crbug.com/526304 and https://crbug.com/568676 for context. 5091 // https://crbug.com/526304 and https://crbug.com/568676 for context.
5062 RenderFrameProxy* proxy = RenderFrameProxy::FromRoutingID(proxy_routing_id_); 5092 RenderFrameProxy* proxy = RenderFrameProxy::FromRoutingID(proxy_routing_id_);
5063 CHECK(proxy); 5093 CHECK(proxy);
5064 5094
5095 unique_name_helper_.set_propagated_name(proxy->unique_name());
5096
5097 // Note: Calling swap() will detach and delete |proxy|, so do not reference it
5098 // after this.
5065 int proxy_routing_id = proxy_routing_id_; 5099 int proxy_routing_id = proxy_routing_id_;
5066 if (!proxy->web_frame()->swap(frame_)) 5100 if (!proxy->web_frame()->swap(frame_))
5067 return false; 5101 return false;
5068 5102
5069 proxy_routing_id_ = MSG_ROUTING_NONE; 5103 proxy_routing_id_ = MSG_ROUTING_NONE;
5070 in_frame_tree_ = true; 5104 in_frame_tree_ = true;
5071 5105
5072 // If this is the main frame going from a remote frame to a local frame, 5106 // If this is the main frame going from a remote frame to a local frame,
5073 // it needs to set RenderViewImpl's pointer for the main frame to itself 5107 // it needs to set RenderViewImpl's pointer for the main frame to itself
5074 // and ensure RenderWidget is no longer in swapped out mode. 5108 // and ensure RenderWidget is no longer in swapped out mode.
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
5339 // staying at about:blank. If this frame isn't in the map of unique names 5373 // staying at about:blank. If this frame isn't in the map of unique names
5340 // that have history items, or if it's staying at the initial about:blank URL, 5374 // that have history items, or if it's staying at the initial about:blank URL,
5341 // fall back to loading the default url. (We remove each name as we encounter 5375 // fall back to loading the default url. (We remove each name as we encounter
5342 // it, because it will only be used once as the frame is created.) 5376 // it, because it will only be used once as the frame is created.)
5343 if (info.isHistoryNavigationInNewChildFrame && is_content_initiated && 5377 if (info.isHistoryNavigationInNewChildFrame && is_content_initiated &&
5344 frame_->parent()) { 5378 frame_->parent()) {
5345 // Check whether the browser has a history item for this frame that isn't 5379 // Check whether the browser has a history item for this frame that isn't
5346 // just staying at the initial about:blank document. 5380 // just staying at the initial about:blank document.
5347 bool should_ask_browser = false; 5381 bool should_ask_browser = false;
5348 RenderFrameImpl* parent = RenderFrameImpl::FromWebFrame(frame_->parent()); 5382 RenderFrameImpl* parent = RenderFrameImpl::FromWebFrame(frame_->parent());
5349 const auto& iter = parent->history_subframe_unique_names_.find( 5383 auto iter = parent->history_subframe_unique_names_.find(
5350 frame_->uniqueName().utf8()); 5384 unique_name_helper_.value());
5351 if (iter != parent->history_subframe_unique_names_.end()) { 5385 if (iter != parent->history_subframe_unique_names_.end()) {
5352 bool history_item_is_about_blank = iter->second; 5386 bool history_item_is_about_blank = iter->second;
5353 should_ask_browser = 5387 should_ask_browser =
5354 !history_item_is_about_blank || url != url::kAboutBlankURL; 5388 !history_item_is_about_blank || url != url::kAboutBlankURL;
5355 parent->history_subframe_unique_names_.erase(frame_->uniqueName().utf8()); 5389 parent->history_subframe_unique_names_.erase(iter);
5356 } 5390 }
5357 5391
5358 if (should_ask_browser) { 5392 if (should_ask_browser) {
5359 // Don't do this if |info| also says it is a client redirect, in which 5393 // Don't do this if |info| also says it is a client redirect, in which
5360 // case JavaScript on the page is trying to interrupt the history 5394 // case JavaScript on the page is trying to interrupt the history
5361 // navigation. 5395 // navigation.
5362 if (!info.isClientRedirect) { 5396 if (!info.isClientRedirect) {
5363 OpenURL(url, IsHttpPost(info.urlRequest), 5397 OpenURL(url, IsHttpPost(info.urlRequest),
5364 GetRequestBodyForWebURLRequest(info.urlRequest), 5398 GetRequestBodyForWebURLRequest(info.urlRequest),
5365 GetWebURLRequestHeaders(info.urlRequest), referrer, 5399 GetWebURLRequestHeaders(info.urlRequest), referrer,
(...skipping 1566 matching lines...) Expand 10 before | Expand all | Expand 10 after
6932 policy(info.defaultPolicy), 6966 policy(info.defaultPolicy),
6933 replaces_current_history_item(info.replacesCurrentHistoryItem), 6967 replaces_current_history_item(info.replacesCurrentHistoryItem),
6934 history_navigation_in_new_child_frame( 6968 history_navigation_in_new_child_frame(
6935 info.isHistoryNavigationInNewChildFrame), 6969 info.isHistoryNavigationInNewChildFrame),
6936 client_redirect(info.isClientRedirect), 6970 client_redirect(info.isClientRedirect),
6937 cache_disabled(info.isCacheDisabled), 6971 cache_disabled(info.isCacheDisabled),
6938 form(info.form), 6972 form(info.form),
6939 source_location(info.sourceLocation) {} 6973 source_location(info.sourceLocation) {}
6940 6974
6941 } // namespace content 6975 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | content/renderer/render_frame_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698