| 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 | 9 |
| 10 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" |
| (...skipping 1073 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1084 WebURLRequest::UseProtocolCachePolicy; | 1084 WebURLRequest::UseProtocolCachePolicy; |
| 1085 if (!RenderFrameImpl::PrepareRenderViewForNavigation( | 1085 if (!RenderFrameImpl::PrepareRenderViewForNavigation( |
| 1086 common_params.url, is_history_navigation, request_params, &is_reload, | 1086 common_params.url, is_history_navigation, request_params, &is_reload, |
| 1087 &cache_policy)) { | 1087 &cache_policy)) { |
| 1088 Send(new FrameHostMsg_DidDropNavigation(routing_id_)); | 1088 Send(new FrameHostMsg_DidDropNavigation(routing_id_)); |
| 1089 return; | 1089 return; |
| 1090 } | 1090 } |
| 1091 | 1091 |
| 1092 GetContentClient()->SetActiveURL(common_params.url); | 1092 GetContentClient()->SetActiveURL(common_params.url); |
| 1093 | 1093 |
| 1094 // If this frame isn't in the same process as its parent, it will naively | |
| 1095 // assume that this is the first navigation in the iframe, but this may not | |
| 1096 // actually be the case. The PageTransition differentiates between the first | |
| 1097 // navigation in a subframe and subsequent navigations, so if this is a | |
| 1098 // subsequent navigation, force the frame's state machine forward. | |
| 1099 if (ui::PageTransitionCoreTypeIs(common_params.transition, | |
| 1100 ui::PAGE_TRANSITION_MANUAL_SUBFRAME)) { | |
| 1101 CHECK(frame_->parent()); | |
| 1102 if (frame_->parent()->isWebRemoteFrame()) { | |
| 1103 frame_->setCommittedFirstRealLoad(); | |
| 1104 } | |
| 1105 } | |
| 1106 | |
| 1107 if (is_reload && !render_view_->history_controller()->GetCurrentEntry()) { | 1094 if (is_reload && !render_view_->history_controller()->GetCurrentEntry()) { |
| 1108 // We cannot reload if we do not have any history state. This happens, for | 1095 // We cannot reload if we do not have any history state. This happens, for |
| 1109 // example, when recovering from a crash. | 1096 // example, when recovering from a crash. |
| 1110 is_reload = false; | 1097 is_reload = false; |
| 1111 cache_policy = WebURLRequest::ReloadIgnoringCacheData; | 1098 cache_policy = WebURLRequest::ReloadIgnoringCacheData; |
| 1112 } | 1099 } |
| 1113 | 1100 |
| 1114 pending_navigation_params_.reset( | 1101 pending_navigation_params_.reset( |
| 1115 new NavigationParams(common_params, start_params, request_params)); | 1102 new NavigationParams(common_params, start_params, request_params)); |
| 1116 | 1103 |
| (...skipping 1434 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2551 // Update the request time if WebKit has better knowledge of it. | 2538 // Update the request time if WebKit has better knowledge of it. |
| 2552 if (document_state->request_time().is_null() && | 2539 if (document_state->request_time().is_null() && |
| 2553 triggering_event_time != 0.0) { | 2540 triggering_event_time != 0.0) { |
| 2554 document_state->set_request_time(Time::FromDoubleT(triggering_event_time)); | 2541 document_state->set_request_time(Time::FromDoubleT(triggering_event_time)); |
| 2555 } | 2542 } |
| 2556 | 2543 |
| 2557 // Start time is only set after request time. | 2544 // Start time is only set after request time. |
| 2558 document_state->set_start_load_time(Time::Now()); | 2545 document_state->set_start_load_time(Time::Now()); |
| 2559 | 2546 |
| 2560 bool is_top_most = !frame->parent(); | 2547 bool is_top_most = !frame->parent(); |
| 2561 NavigationStateImpl* navigation_state = | |
| 2562 static_cast<NavigationStateImpl*>(document_state->navigation_state()); | |
| 2563 if (is_top_most) { | 2548 if (is_top_most) { |
| 2564 render_view_->set_navigation_gesture( | 2549 render_view_->set_navigation_gesture( |
| 2565 WebUserGestureIndicator::isProcessingUserGesture() ? | 2550 WebUserGestureIndicator::isProcessingUserGesture() ? |
| 2566 NavigationGestureUser : NavigationGestureAuto); | 2551 NavigationGestureUser : NavigationGestureAuto); |
| 2567 } else if (ds->replacesCurrentHistoryItem()) { | 2552 } else if (ds->replacesCurrentHistoryItem()) { |
| 2568 // Subframe navigations that don't add session history items must be | 2553 // Subframe navigations that don't add session history items must be |
| 2569 // marked with AUTO_SUBFRAME. See also didFailProvisionalLoad for how we | 2554 // marked with AUTO_SUBFRAME. See also didFailProvisionalLoad for how we |
| 2570 // handle loading of error pages. | 2555 // handle loading of error pages. |
| 2571 navigation_state->set_transition_type(ui::PAGE_TRANSITION_AUTO_SUBFRAME); | 2556 static_cast<NavigationStateImpl*>(document_state->navigation_state()) |
| 2572 } else if (ui::PageTransitionCoreTypeIs(navigation_state->GetTransitionType(), | 2557 ->set_transition_type(ui::PAGE_TRANSITION_AUTO_SUBFRAME); |
| 2573 ui::PAGE_TRANSITION_LINK)) { | |
| 2574 // Subframe navigations that are creating a new history item should be | |
| 2575 // marked MANUAL_SUBFRAME, unless it has already been marked as a | |
| 2576 // FORM_SUBMIT. This state will be attached to a main resource request | |
| 2577 // in the process that began the request. If the request is transferred | |
| 2578 // to a different process, this state will be used in | |
| 2579 // RenderFrameImpl::OnNavigate() in the new process (as well as in the | |
| 2580 // browser process). | |
| 2581 navigation_state->set_transition_type(ui::PAGE_TRANSITION_MANUAL_SUBFRAME); | |
| 2582 } | 2558 } |
| 2583 | 2559 |
| 2584 FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(), | 2560 FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(), |
| 2585 DidStartProvisionalLoad(frame)); | 2561 DidStartProvisionalLoad(frame)); |
| 2586 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, DidStartProvisionalLoad()); | 2562 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, DidStartProvisionalLoad()); |
| 2587 | 2563 |
| 2588 Send(new FrameHostMsg_DidStartProvisionalLoadForFrame( | 2564 Send(new FrameHostMsg_DidStartProvisionalLoadForFrame( |
| 2589 routing_id_, ds->request().url(), is_transition_navigation)); | 2565 routing_id_, ds->request().url(), is_transition_navigation)); |
| 2590 } | 2566 } |
| 2591 | 2567 |
| (...skipping 563 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3155 // TODO(nasko): When the top-level frame is remote, there is no document. | 3131 // TODO(nasko): When the top-level frame is remote, there is no document. |
| 3156 // This is broken and should be fixed to propagate the first party. | 3132 // This is broken and should be fixed to propagate the first party. |
| 3157 WebFrame* top = frame->top(); | 3133 WebFrame* top = frame->top(); |
| 3158 if (top->isWebLocalFrame()) { | 3134 if (top->isWebLocalFrame()) { |
| 3159 request.setFirstPartyForCookies( | 3135 request.setFirstPartyForCookies( |
| 3160 frame->top()->document().firstPartyForCookies()); | 3136 frame->top()->document().firstPartyForCookies()); |
| 3161 } | 3137 } |
| 3162 } | 3138 } |
| 3163 } | 3139 } |
| 3164 | 3140 |
| 3165 WebDataSource* provisional_data_source = frame->provisionalDataSource(); | 3141 WebFrame* top_frame = frame->top(); |
| 3142 // TODO(nasko): Hack around asking about top-frame data source. This means |
| 3143 // for out-of-process iframes we are treating the current frame as the |
| 3144 // top-level frame, which is wrong. |
| 3145 if (!top_frame || top_frame->isWebRemoteFrame()) |
| 3146 top_frame = frame; |
| 3147 WebDataSource* provisional_data_source = top_frame->provisionalDataSource(); |
| 3148 WebDataSource* top_data_source = top_frame->dataSource(); |
| 3166 WebDataSource* data_source = | 3149 WebDataSource* data_source = |
| 3167 provisional_data_source ? provisional_data_source : frame->dataSource(); | 3150 provisional_data_source ? provisional_data_source : top_data_source; |
| 3168 | 3151 |
| 3169 DocumentState* document_state = DocumentState::FromDataSource(data_source); | 3152 DocumentState* document_state = DocumentState::FromDataSource(data_source); |
| 3170 DCHECK(document_state); | 3153 DCHECK(document_state); |
| 3171 InternalDocumentStateData* internal_data = | 3154 InternalDocumentStateData* internal_data = |
| 3172 InternalDocumentStateData::FromDocumentState(document_state); | 3155 InternalDocumentStateData::FromDocumentState(document_state); |
| 3173 NavigationStateImpl* navigation_state = | 3156 NavigationStateImpl* navigation_state = |
| 3174 static_cast<NavigationStateImpl*>(document_state->navigation_state()); | 3157 static_cast<NavigationStateImpl*>(document_state->navigation_state()); |
| 3175 ui::PageTransition transition_type = navigation_state->GetTransitionType(); | 3158 ui::PageTransition transition_type = navigation_state->GetTransitionType(); |
| 3176 WebDataSource* frame_ds = frame->provisionalDataSource(); | 3159 WebDataSource* frame_ds = frame->provisionalDataSource(); |
| 3177 if (frame_ds && frame_ds->isClientRedirect()) { | 3160 if (frame_ds && frame_ds->isClientRedirect()) { |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3296 extra_data->set_transition_type(transition_type); | 3279 extra_data->set_transition_type(transition_type); |
| 3297 extra_data->set_should_replace_current_entry(should_replace_current_entry); | 3280 extra_data->set_should_replace_current_entry(should_replace_current_entry); |
| 3298 extra_data->set_transferred_request_child_id( | 3281 extra_data->set_transferred_request_child_id( |
| 3299 navigation_state->start_params().transferred_request_child_id); | 3282 navigation_state->start_params().transferred_request_child_id); |
| 3300 extra_data->set_transferred_request_request_id( | 3283 extra_data->set_transferred_request_request_id( |
| 3301 navigation_state->start_params().transferred_request_request_id); | 3284 navigation_state->start_params().transferred_request_request_id); |
| 3302 extra_data->set_service_worker_provider_id(provider_id); | 3285 extra_data->set_service_worker_provider_id(provider_id); |
| 3303 extra_data->set_stream_override(stream_override.Pass()); | 3286 extra_data->set_stream_override(stream_override.Pass()); |
| 3304 request.setExtraData(extra_data); | 3287 request.setExtraData(extra_data); |
| 3305 | 3288 |
| 3306 WebFrame* top_frame = frame->top(); | |
| 3307 // TODO(nasko): Hack around asking about top-frame data source. This means | |
| 3308 // for out-of-process iframes we are treating the current frame as the | |
| 3309 // top-level frame, which is wrong. | |
| 3310 if (!top_frame || top_frame->isWebRemoteFrame()) | |
| 3311 top_frame = frame; | |
| 3312 DocumentState* top_document_state = | 3289 DocumentState* top_document_state = |
| 3313 DocumentState::FromDataSource(top_frame->dataSource()); | 3290 DocumentState::FromDataSource(top_data_source); |
| 3314 if (top_document_state) { | 3291 if (top_document_state) { |
| 3315 // TODO(gavinp): separate out prefetching and prerender field trials | 3292 // TODO(gavinp): separate out prefetching and prerender field trials |
| 3316 // if the rel=prerender rel type is sticking around. | 3293 // if the rel=prerender rel type is sticking around. |
| 3317 if (request.requestContext() == WebURLRequest::RequestContextPrefetch) | 3294 if (request.requestContext() == WebURLRequest::RequestContextPrefetch) |
| 3318 top_document_state->set_was_prefetcher(true); | 3295 top_document_state->set_was_prefetcher(true); |
| 3319 } | 3296 } |
| 3320 | 3297 |
| 3321 // This is an instance where we embed a copy of the routing id | 3298 // This is an instance where we embed a copy of the routing id |
| 3322 // into the data portion of the message. This can cause problems if we | 3299 // into the data portion of the message. This can cause problems if we |
| 3323 // don't register this id on the browser side, since the download manager | 3300 // don't register this id on the browser side, since the download manager |
| (...skipping 1547 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4871 #elif defined(ENABLE_BROWSER_CDMS) | 4848 #elif defined(ENABLE_BROWSER_CDMS) |
| 4872 cdm_manager_, | 4849 cdm_manager_, |
| 4873 #endif | 4850 #endif |
| 4874 this); | 4851 this); |
| 4875 } | 4852 } |
| 4876 | 4853 |
| 4877 return cdm_factory_; | 4854 return cdm_factory_; |
| 4878 } | 4855 } |
| 4879 | 4856 |
| 4880 } // namespace content | 4857 } // namespace content |
| OLD | NEW |