Chromium Code Reviews| 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 "content/browser/frame_host/frame_tree.h" | 7 #include "content/browser/frame_host/frame_tree.h" |
| 8 #include "content/browser/frame_host/frame_tree_node.h" | 8 #include "content/browser/frame_host/frame_tree_node.h" |
| 9 #include "content/browser/frame_host/navigation_controller_impl.h" | 9 #include "content/browser/frame_host/navigation_controller_impl.h" |
| 10 #include "content/browser/frame_host/navigation_handle_impl.h" | 10 #include "content/browser/frame_host/navigation_handle_impl.h" |
| 11 #include "content/browser/frame_host/navigation_request_info.h" | 11 #include "content/browser/frame_host/navigation_request_info.h" |
| 12 #include "content/browser/frame_host/navigator.h" | 12 #include "content/browser/frame_host/navigator.h" |
| 13 #include "content/browser/loader/navigation_url_loader.h" | 13 #include "content/browser/loader/navigation_url_loader.h" |
| 14 #include "content/browser/service_worker/service_worker_provider_host.h" | |
| 14 #include "content/browser/site_instance_impl.h" | 15 #include "content/browser/site_instance_impl.h" |
| 15 #include "content/common/resource_request_body.h" | 16 #include "content/common/resource_request_body.h" |
| 16 #include "content/public/browser/navigation_controller.h" | 17 #include "content/public/browser/navigation_controller.h" |
| 17 #include "content/public/browser/navigation_throttle.h" | 18 #include "content/public/browser/navigation_throttle.h" |
| 18 #include "content/public/browser/stream_handle.h" | 19 #include "content/public/browser/stream_handle.h" |
| 19 #include "content/public/common/content_client.h" | 20 #include "content/public/common/content_client.h" |
| 20 #include "net/base/load_flags.h" | 21 #include "net/base/load_flags.h" |
| 21 #include "net/http/http_request_headers.h" | 22 #include "net/http/http_request_headers.h" |
| 22 #include "net/url_request/redirect_info.h" | 23 #include "net/url_request/redirect_info.h" |
| 23 | 24 |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 79 if (entry.GetHasPostData()) { | 80 if (entry.GetHasPostData()) { |
| 80 request_body = new ResourceRequestBody(); | 81 request_body = new ResourceRequestBody(); |
| 81 request_body->AppendBytes( | 82 request_body->AppendBytes( |
| 82 reinterpret_cast<const char *>( | 83 reinterpret_cast<const char *>( |
| 83 entry.GetBrowserInitiatedPostData()->front()), | 84 entry.GetBrowserInitiatedPostData()->front()), |
| 84 entry.GetBrowserInitiatedPostData()->size()); | 85 entry.GetBrowserInitiatedPostData()->size()); |
| 85 } | 86 } |
| 86 | 87 |
| 87 scoped_ptr<NavigationRequest> navigation_request(new NavigationRequest( | 88 scoped_ptr<NavigationRequest> navigation_request(new NavigationRequest( |
| 88 frame_tree_node, | 89 frame_tree_node, |
| 89 entry.ConstructCommonNavigationParams(dest_url, dest_referrer, | 90 entry.ConstructCommonNavigationParams( |
| 90 frame_entry, navigation_type), | 91 dest_url, dest_referrer, frame_entry, navigation_type), |
| 91 BeginNavigationParams(method, headers.ToString(), | 92 BeginNavigationParams(method, |
| 92 LoadFlagFromNavigationType(navigation_type), false), | 93 headers.ToString(), |
| 94 LoadFlagFromNavigationType(navigation_type), | |
| 95 false, // has_user_gestures | |
| 96 false, // skip_service_worker | |
| 97 REQUEST_CONTEXT_TYPE_HYPERLINK), | |
| 93 entry.ConstructRequestNavigationParams( | 98 entry.ConstructRequestNavigationParams( |
| 94 frame_entry, navigation_start, is_same_document_history_load, | 99 frame_entry, navigation_start, is_same_document_history_load, |
| 95 frame_tree_node->has_committed_real_load(), | 100 frame_tree_node->has_committed_real_load(), |
| 96 controller->GetPendingEntryIndex() == -1, | 101 controller->GetPendingEntryIndex() == -1, |
| 97 controller->GetIndexOfEntry(&entry), | 102 controller->GetIndexOfEntry(&entry), |
| 98 controller->GetLastCommittedEntryIndex(), | 103 controller->GetLastCommittedEntryIndex(), |
| 99 controller->GetEntryCount()), | 104 controller->GetEntryCount(), |
| 105 ServiceWorkerProviderHost::GetNextNavigationProviderId()), | |
| 100 request_body, true, &frame_entry, &entry)); | 106 request_body, true, &frame_entry, &entry)); |
| 101 return navigation_request.Pass(); | 107 return navigation_request.Pass(); |
| 102 } | 108 } |
| 103 | 109 |
| 104 // static | 110 // static |
| 105 scoped_ptr<NavigationRequest> NavigationRequest::CreateRendererInitiated( | 111 scoped_ptr<NavigationRequest> NavigationRequest::CreateRendererInitiated( |
| 106 FrameTreeNode* frame_tree_node, | 112 FrameTreeNode* frame_tree_node, |
| 107 const CommonNavigationParams& common_params, | 113 const CommonNavigationParams& common_params, |
| 108 const BeginNavigationParams& begin_params, | 114 const BeginNavigationParams& begin_params, |
| 109 scoped_refptr<ResourceRequestBody> body, | 115 scoped_refptr<ResourceRequestBody> body, |
| 110 int current_history_list_offset, | 116 int current_history_list_offset, |
| 111 int current_history_list_length) { | 117 int current_history_list_length) { |
| 112 // TODO(clamy): Check if some PageState should be provided here. | 118 // TODO(clamy): Check if some PageState should be provided here. |
| 113 // TODO(clamy): See how we should handle override of the user agent when the | 119 // TODO(clamy): See how we should handle override of the user agent when the |
| 114 // navigation may start in a renderer and commit in another one. | 120 // navigation may start in a renderer and commit in another one. |
| 115 // TODO(clamy): See if the navigation start time should be measured in the | 121 // TODO(clamy): See if the navigation start time should be measured in the |
| 116 // renderer and sent to the browser instead of being measured here. | 122 // renderer and sent to the browser instead of being measured here. |
| 117 // TODO(clamy): The pending history list offset should be properly set. | 123 // TODO(clamy): The pending history list offset should be properly set. |
| 118 // TODO(clamy): Set has_committed_real_load. | 124 // TODO(clamy): Set has_committed_real_load. |
| 119 RequestNavigationParams request_params; | 125 RequestNavigationParams request_params; |
|
clamy
2015/10/01 12:41:27
We should switch to instantiating the RequestParam
Fabrice (no longer in Chrome)
2015/10/01 18:29:55
Done.
| |
| 120 request_params.current_history_list_offset = current_history_list_offset; | 126 request_params.current_history_list_offset = current_history_list_offset; |
| 121 request_params.current_history_list_length = current_history_list_length; | 127 request_params.current_history_list_length = current_history_list_length; |
| 128 request_params.service_worker_provider_id = | |
| 129 ServiceWorkerProviderHost::GetNextNavigationProviderId(); | |
|
clamy
2015/10/01 12:41:27
It seems very weird to me that we should be using
Fabrice (no longer in Chrome)
2015/10/01 18:29:55
Since it is only called here, I moved it in the an
| |
| 122 scoped_ptr<NavigationRequest> navigation_request( | 130 scoped_ptr<NavigationRequest> navigation_request( |
| 123 new NavigationRequest(frame_tree_node, common_params, begin_params, | 131 new NavigationRequest(frame_tree_node, common_params, begin_params, |
| 124 request_params, body, false, nullptr, nullptr)); | 132 request_params, body, false, nullptr, nullptr)); |
| 125 return navigation_request.Pass(); | 133 return navigation_request.Pass(); |
| 126 } | 134 } |
| 127 | 135 |
| 128 NavigationRequest::NavigationRequest( | 136 NavigationRequest::NavigationRequest( |
| 129 FrameTreeNode* frame_tree_node, | 137 FrameTreeNode* frame_tree_node, |
| 130 const CommonNavigationParams& common_params, | 138 const CommonNavigationParams& common_params, |
| 131 const BeginNavigationParams& begin_params, | 139 const BeginNavigationParams& begin_params, |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 159 frame_tree_node->current_frame_host()->GetSiteInstance(); | 167 frame_tree_node->current_frame_host()->GetSiteInstance(); |
| 160 } | 168 } |
| 161 | 169 |
| 162 const GURL& first_party_for_cookies = | 170 const GURL& first_party_for_cookies = |
| 163 frame_tree_node->IsMainFrame() | 171 frame_tree_node->IsMainFrame() |
| 164 ? common_params.url | 172 ? common_params.url |
| 165 : frame_tree_node->frame_tree()->root()->current_url(); | 173 : frame_tree_node->frame_tree()->root()->current_url(); |
| 166 bool parent_is_main_frame = !frame_tree_node->parent() ? | 174 bool parent_is_main_frame = !frame_tree_node->parent() ? |
| 167 false : frame_tree_node->parent()->IsMainFrame(); | 175 false : frame_tree_node->parent()->IsMainFrame(); |
| 168 info_.reset(new NavigationRequestInfo( | 176 info_.reset(new NavigationRequestInfo( |
| 169 common_params, begin_params, first_party_for_cookies, | 177 common_params, begin_params, request_params, first_party_for_cookies, |
| 170 frame_tree_node->IsMainFrame(), parent_is_main_frame, | 178 frame_tree_node->IsMainFrame(), parent_is_main_frame, |
| 171 frame_tree_node->frame_tree_node_id(), body)); | 179 frame_tree_node->frame_tree_node_id(), body)); |
| 172 } | 180 } |
| 173 | 181 |
| 174 NavigationRequest::~NavigationRequest() { | 182 NavigationRequest::~NavigationRequest() { |
| 175 } | 183 } |
| 176 | 184 |
| 177 bool NavigationRequest::BeginNavigation() { | 185 bool NavigationRequest::BeginNavigation() { |
| 178 DCHECK(!loader_); | 186 DCHECK(!loader_); |
| 179 DCHECK(state_ == NOT_STARTED || state_ == WAITING_FOR_RENDERER_RESPONSE); | 187 DCHECK(state_ == NOT_STARTED || state_ == WAITING_FOR_RENDERER_RESPONSE); |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 206 frame_tree_node_->navigator()->CommitNavigation( | 214 frame_tree_node_->navigator()->CommitNavigation( |
| 207 frame_tree_node_, nullptr, scoped_ptr<StreamHandle>()); | 215 frame_tree_node_, nullptr, scoped_ptr<StreamHandle>()); |
| 208 return false; | 216 return false; |
| 209 | 217 |
| 210 // TODO(davidben): Fire (and add as necessary) observer methods such as | 218 // TODO(davidben): Fire (and add as necessary) observer methods such as |
| 211 // DidStartProvisionalLoadForFrame for the navigation. | 219 // DidStartProvisionalLoadForFrame for the navigation. |
| 212 } | 220 } |
| 213 | 221 |
| 214 void NavigationRequest::CreateNavigationHandle(NavigatorDelegate* delegate) { | 222 void NavigationRequest::CreateNavigationHandle(NavigatorDelegate* delegate) { |
| 215 navigation_handle_ = NavigationHandleImpl::Create( | 223 navigation_handle_ = NavigationHandleImpl::Create( |
| 216 common_params_.url, frame_tree_node_->IsMainFrame(), delegate); | 224 common_params_.url, frame_tree_node_->IsMainFrame(), delegate, |
| 225 request_params_.service_worker_provider_id); | |
| 217 } | 226 } |
| 218 | 227 |
| 219 void NavigationRequest::TransferNavigationHandleOwnership( | 228 void NavigationRequest::TransferNavigationHandleOwnership( |
| 220 RenderFrameHostImpl* render_frame_host) { | 229 RenderFrameHostImpl* render_frame_host) { |
| 221 render_frame_host->SetNavigationHandle(navigation_handle_.Pass()); | 230 render_frame_host->SetNavigationHandle(navigation_handle_.Pass()); |
| 222 render_frame_host->navigation_handle()->ReadyToCommitNavigation( | 231 render_frame_host->navigation_handle()->ReadyToCommitNavigation( |
| 223 render_frame_host); | 232 render_frame_host); |
| 224 } | 233 } |
| 225 | 234 |
| 226 void NavigationRequest::OnRequestRedirected( | 235 void NavigationRequest::OnRequestRedirected( |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 266 frame_tree_node_->navigator()->FailedNavigation( | 275 frame_tree_node_->navigator()->FailedNavigation( |
| 267 frame_tree_node_, has_stale_copy_in_cache, net_error); | 276 frame_tree_node_, has_stale_copy_in_cache, net_error); |
| 268 } | 277 } |
| 269 | 278 |
| 270 void NavigationRequest::OnRequestStarted(base::TimeTicks timestamp) { | 279 void NavigationRequest::OnRequestStarted(base::TimeTicks timestamp) { |
| 271 frame_tree_node_->navigator()->LogResourceRequestTime(timestamp, | 280 frame_tree_node_->navigator()->LogResourceRequestTime(timestamp, |
| 272 common_params_.url); | 281 common_params_.url); |
| 273 } | 282 } |
| 274 | 283 |
| 275 } // namespace content | 284 } // namespace content |
| OLD | NEW |