| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/browser/frame_host/navigation_request.h" | 5 #include "content/browser/frame_host/navigation_request.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "content/browser/appcache/appcache_navigation_handle.h" | 9 #include "content/browser/appcache/appcache_navigation_handle.h" |
| 10 #include "content/browser/appcache/chrome_appcache_service.h" | 10 #include "content/browser/appcache/chrome_appcache_service.h" |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 194 bool is_same_document_history_load, | 194 bool is_same_document_history_load, |
| 195 bool is_history_navigation_in_new_child, | 195 bool is_history_navigation_in_new_child, |
| 196 const base::TimeTicks& navigation_start, | 196 const base::TimeTicks& navigation_start, |
| 197 NavigationControllerImpl* controller) { | 197 NavigationControllerImpl* controller) { |
| 198 // Fill POST data in the request body. | 198 // Fill POST data in the request body. |
| 199 scoped_refptr<ResourceRequestBodyImpl> request_body; | 199 scoped_refptr<ResourceRequestBodyImpl> request_body; |
| 200 if (frame_entry.method() == "POST") | 200 if (frame_entry.method() == "POST") |
| 201 request_body = frame_entry.GetPostData(); | 201 request_body = frame_entry.GetPostData(); |
| 202 | 202 |
| 203 std::unique_ptr<NavigationRequest> navigation_request(new NavigationRequest( | 203 std::unique_ptr<NavigationRequest> navigation_request(new NavigationRequest( |
| 204 frame_tree_node, entry.ConstructCommonNavigationParams( | 204 frame_tree_node, |
| 205 frame_entry, request_body, dest_url, dest_referrer, | 205 entry.ConstructCommonNavigationParams(frame_entry, request_body, dest_url, |
| 206 navigation_type, lofi_state, navigation_start), | 206 dest_referrer, navigation_type, |
| 207 lofi_state, navigation_start), |
| 207 BeginNavigationParams(entry.extra_headers(), net::LOAD_NORMAL, | 208 BeginNavigationParams(entry.extra_headers(), net::LOAD_NORMAL, |
| 208 false, // has_user_gestures | 209 false, // has_user_gestures |
| 209 false, // skip_service_worker | 210 false, // skip_service_worker |
| 210 REQUEST_CONTEXT_TYPE_LOCATION), | 211 REQUEST_CONTEXT_TYPE_LOCATION), |
| 211 entry.ConstructRequestNavigationParams( | 212 entry.ConstructRequestNavigationParams( |
| 212 frame_entry, is_same_document_history_load, | 213 frame_entry, net::AreURLsInPageNavigation( |
| 213 is_history_navigation_in_new_child, | 214 frame_tree_node->current_url(), dest_url), |
| 215 is_same_document_history_load, is_history_navigation_in_new_child, |
| 214 entry.GetSubframeUniqueNames(frame_tree_node), | 216 entry.GetSubframeUniqueNames(frame_tree_node), |
| 215 frame_tree_node->has_committed_real_load(), | 217 frame_tree_node->has_committed_real_load(), |
| 216 controller->GetPendingEntryIndex() == -1, | 218 controller->GetPendingEntryIndex() == -1, |
| 217 controller->GetIndexOfEntry(&entry), | 219 controller->GetIndexOfEntry(&entry), |
| 218 controller->GetLastCommittedEntryIndex(), | 220 controller->GetLastCommittedEntryIndex(), |
| 219 controller->GetEntryCount()), | 221 controller->GetEntryCount()), |
| 220 true, &frame_entry, &entry)); | 222 true, &frame_entry, &entry)); |
| 221 return navigation_request; | 223 return navigation_request; |
| 222 } | 224 } |
| 223 | 225 |
| 224 // static | 226 // static |
| 225 std::unique_ptr<NavigationRequest> NavigationRequest::CreateRendererInitiated( | 227 std::unique_ptr<NavigationRequest> NavigationRequest::CreateRendererInitiated( |
| 226 FrameTreeNode* frame_tree_node, | 228 FrameTreeNode* frame_tree_node, |
| 227 const CommonNavigationParams& common_params, | 229 const CommonNavigationParams& common_params, |
| 228 const BeginNavigationParams& begin_params, | 230 const BeginNavigationParams& begin_params, |
| 229 int current_history_list_offset, | 231 int current_history_list_offset, |
| 230 int current_history_list_length) { | 232 int current_history_list_length) { |
| 231 // TODO(clamy): Check if some PageState should be provided here. | 233 // TODO(clamy): Check if some PageState should be provided here. |
| 232 // TODO(clamy): See how we should handle override of the user agent when the | 234 // TODO(clamy): See how we should handle override of the user agent when the |
| 233 // navigation may start in a renderer and commit in another one. | 235 // navigation may start in a renderer and commit in another one. |
| 234 // TODO(clamy): See if the navigation start time should be measured in the | 236 // TODO(clamy): See if the navigation start time should be measured in the |
| 235 // renderer and sent to the browser instead of being measured here. | 237 // renderer and sent to the browser instead of being measured here. |
| 236 // TODO(clamy): The pending history list offset should be properly set. | 238 // TODO(clamy): The pending history list offset should be properly set. |
| 237 RequestNavigationParams request_params( | 239 RequestNavigationParams request_params( |
| 238 false, // is_overriding_user_agent | 240 false, // is_overriding_user_agent |
| 239 std::vector<GURL>(), // redirects | 241 std::vector<GURL>(), // redirects |
| 240 false, // can_load_local_resources | 242 false, // can_load_local_resources |
| 241 PageState(), // page_state | 243 PageState(), // page_state |
| 242 0, // nav_entry_id | 244 0, // nav_entry_id |
| 245 false, // is_same_document_navigation |
| 243 false, // is_same_document_history_load | 246 false, // is_same_document_history_load |
| 244 false, // is_history_navigation_in_new_child | 247 false, // is_history_navigation_in_new_child |
| 245 std::map<std::string, bool>(), // subframe_unique_names | 248 std::map<std::string, bool>(), // subframe_unique_names |
| 246 frame_tree_node->has_committed_real_load(), | 249 frame_tree_node->has_committed_real_load(), |
| 247 false, // intended_as_new_entry | 250 false, // intended_as_new_entry |
| 248 -1, // pending_history_list_offset | 251 -1, // pending_history_list_offset |
| 249 current_history_list_offset, current_history_list_length, | 252 current_history_list_offset, current_history_list_length, |
| 250 false, // is_view_source | 253 false, // is_view_source |
| 251 false, // should_clear_history_list | 254 false, // should_clear_history_list |
| 252 begin_params.has_user_gesture); | 255 begin_params.has_user_gesture); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 309 | 312 |
| 310 NavigationRequest::~NavigationRequest() { | 313 NavigationRequest::~NavigationRequest() { |
| 311 } | 314 } |
| 312 | 315 |
| 313 void NavigationRequest::BeginNavigation() { | 316 void NavigationRequest::BeginNavigation() { |
| 314 DCHECK(!loader_); | 317 DCHECK(!loader_); |
| 315 DCHECK(state_ == NOT_STARTED || state_ == WAITING_FOR_RENDERER_RESPONSE); | 318 DCHECK(state_ == NOT_STARTED || state_ == WAITING_FOR_RENDERER_RESPONSE); |
| 316 state_ = STARTED; | 319 state_ = STARTED; |
| 317 RenderFrameDevToolsAgentHost::OnBeforeNavigation(navigation_handle_.get()); | 320 RenderFrameDevToolsAgentHost::OnBeforeNavigation(navigation_handle_.get()); |
| 318 | 321 |
| 319 if (ShouldMakeNetworkRequestForURL(common_params_.url)) { | 322 if (ShouldMakeNetworkRequestForURL(common_params_.url) && |
| 323 !request_params_.is_same_document_navigation) { |
| 320 // It's safe to use base::Unretained because this NavigationRequest owns | 324 // It's safe to use base::Unretained because this NavigationRequest owns |
| 321 // the NavigationHandle where the callback will be stored. | 325 // the NavigationHandle where the callback will be stored. |
| 322 // TODO(clamy): pass the real value for |is_external_protocol| if needed. | 326 // TODO(clamy): pass the real value for |is_external_protocol| if needed. |
| 323 // TODO(clamy): pass the method to the NavigationHandle instead of a | 327 // TODO(clamy): pass the method to the NavigationHandle instead of a |
| 324 // boolean. | 328 // boolean. |
| 325 navigation_handle_->WillStartRequest( | 329 navigation_handle_->WillStartRequest( |
| 326 common_params_.method, common_params_.post_data, | 330 common_params_.method, common_params_.post_data, |
| 327 Referrer::SanitizeForRequest(common_params_.url, | 331 Referrer::SanitizeForRequest(common_params_.url, |
| 328 common_params_.referrer), | 332 common_params_.referrer), |
| 329 begin_params_.has_user_gesture, common_params_.transition, false, | 333 begin_params_.has_user_gesture, common_params_.transition, false, |
| (...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 636 // Have the processing of the response resume in the network stack. | 640 // Have the processing of the response resume in the network stack. |
| 637 loader_->ProceedWithResponse(); | 641 loader_->ProceedWithResponse(); |
| 638 | 642 |
| 639 CommitNavigation(); | 643 CommitNavigation(); |
| 640 | 644 |
| 641 // DO NOT ADD CODE after this. The previous call to CommitNavigation caused | 645 // DO NOT ADD CODE after this. The previous call to CommitNavigation caused |
| 642 // the destruction of the NavigationRequest. | 646 // the destruction of the NavigationRequest. |
| 643 } | 647 } |
| 644 | 648 |
| 645 void NavigationRequest::CommitNavigation() { | 649 void NavigationRequest::CommitNavigation() { |
| 646 DCHECK(response_ || !ShouldMakeNetworkRequestForURL(common_params_.url)); | 650 DCHECK(response_ || !ShouldMakeNetworkRequestForURL(common_params_.url) || |
| 651 request_params_.is_same_document_navigation); |
| 647 DCHECK(!common_params_.url.SchemeIs(url::kJavaScriptScheme)); | 652 DCHECK(!common_params_.url.SchemeIs(url::kJavaScriptScheme)); |
| 648 | 653 |
| 649 // Retrieve the RenderFrameHost that needs to commit the navigation. | 654 // Retrieve the RenderFrameHost that needs to commit the navigation. |
| 650 RenderFrameHostImpl* render_frame_host = | 655 RenderFrameHostImpl* render_frame_host = |
| 651 navigation_handle_->GetRenderFrameHost(); | 656 navigation_handle_->GetRenderFrameHost(); |
| 652 DCHECK(render_frame_host == | 657 DCHECK(render_frame_host == |
| 653 frame_tree_node_->render_manager()->current_frame_host() || | 658 frame_tree_node_->render_manager()->current_frame_host() || |
| 654 render_frame_host == | 659 render_frame_host == |
| 655 frame_tree_node_->render_manager()->speculative_frame_host()); | 660 frame_tree_node_->render_manager()->speculative_frame_host()); |
| 656 | 661 |
| 657 TransferNavigationHandleOwnership(render_frame_host); | 662 TransferNavigationHandleOwnership(render_frame_host); |
| 658 | 663 |
| 659 DCHECK_EQ(request_params_.has_user_gesture, begin_params_.has_user_gesture); | 664 DCHECK_EQ(request_params_.has_user_gesture, begin_params_.has_user_gesture); |
| 660 | 665 |
| 661 render_frame_host->CommitNavigation(response_.get(), std::move(body_), | 666 render_frame_host->CommitNavigation(response_.get(), std::move(body_), |
| 662 common_params_, request_params_, | 667 common_params_, request_params_, |
| 663 is_view_source_); | 668 is_view_source_); |
| 664 | 669 |
| 665 frame_tree_node_->ResetNavigationRequest(true); | 670 frame_tree_node_->ResetNavigationRequest(true); |
| 666 } | 671 } |
| 667 | 672 |
| 668 } // namespace content | 673 } // namespace content |
| OLD | NEW |