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_request_info.h" | 9 #include "content/browser/frame_host/navigation_request_info.h" |
| 10 #include "content/browser/frame_host/navigator.h" | 10 #include "content/browser/frame_host/navigator.h" |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 43 case FrameMsg_Navigate_Type::NORMAL: | 43 case FrameMsg_Navigate_Type::NORMAL: |
| 44 default: | 44 default: |
| 45 break; | 45 break; |
| 46 } | 46 } |
| 47 return load_flags; | 47 return load_flags; |
| 48 } | 48 } |
| 49 | 49 |
| 50 } // namespace | 50 } // namespace |
| 51 | 51 |
| 52 // static | 52 // static |
| 53 bool NavigationRequest::ShouldMakeNetworkRequest(const GURL& url) { | |
| 54 // Data urls should not make network requests. | |
| 55 // TODO(clamy): same document navigations should nto make netwrok requests. | |
|
Charlie Reis
2015/02/20 22:11:50
nit: not
nit: network
clamy
2015/02/26 15:28:36
Done.
| |
| 56 return !url.SchemeIs(url::kDataScheme); | |
| 57 } | |
| 58 | |
| 59 // static | |
| 53 scoped_ptr<NavigationRequest> NavigationRequest::CreateBrowserInitiated( | 60 scoped_ptr<NavigationRequest> NavigationRequest::CreateBrowserInitiated( |
| 54 FrameTreeNode* frame_tree_node, | 61 FrameTreeNode* frame_tree_node, |
| 55 const NavigationEntryImpl& entry, | 62 const NavigationEntryImpl& entry, |
| 56 FrameMsg_Navigate_Type::Value navigation_type, | 63 FrameMsg_Navigate_Type::Value navigation_type, |
| 57 base::TimeTicks navigation_start) { | 64 base::TimeTicks navigation_start) { |
| 58 std::string method = entry.GetHasPostData() ? "POST" : "GET"; | 65 std::string method = entry.GetHasPostData() ? "POST" : "GET"; |
| 59 | 66 |
| 60 // Copy existing headers and add necessary headers that may not be present | 67 // Copy existing headers and add necessary headers that may not be present |
| 61 // in the RequestNavigationParams. | 68 // in the RequestNavigationParams. |
| 62 net::HttpRequestHeaders headers; | 69 net::HttpRequestHeaders headers; |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 78 | 85 |
| 79 FrameMsg_UILoadMetricsReportType::Value report_type = | 86 FrameMsg_UILoadMetricsReportType::Value report_type = |
| 80 FrameMsg_UILoadMetricsReportType::NO_REPORT; | 87 FrameMsg_UILoadMetricsReportType::NO_REPORT; |
| 81 base::TimeTicks ui_timestamp = base::TimeTicks(); | 88 base::TimeTicks ui_timestamp = base::TimeTicks(); |
| 82 #if defined(OS_ANDROID) | 89 #if defined(OS_ANDROID) |
| 83 if (!entry.intent_received_timestamp().is_null()) | 90 if (!entry.intent_received_timestamp().is_null()) |
| 84 report_type = FrameMsg_UILoadMetricsReportType::REPORT_INTENT; | 91 report_type = FrameMsg_UILoadMetricsReportType::REPORT_INTENT; |
| 85 ui_timestamp = entry.intent_received_timestamp(); | 92 ui_timestamp = entry.intent_received_timestamp(); |
| 86 #endif | 93 #endif |
| 87 | 94 |
| 95 const GURL history_url_for_data_url = | |
| 96 entry.GetBaseURLForDataURL().is_empty() ? GURL() : entry.GetVirtualURL(); | |
| 97 | |
| 88 scoped_ptr<NavigationRequest> navigation_request(new NavigationRequest( | 98 scoped_ptr<NavigationRequest> navigation_request(new NavigationRequest( |
| 89 frame_tree_node, | 99 frame_tree_node, |
| 90 CommonNavigationParams(entry.GetURL(), entry.GetReferrer(), | 100 CommonNavigationParams(entry.GetURL(), entry.GetReferrer(), |
| 91 entry.GetTransitionType(), navigation_type, | 101 entry.GetTransitionType(), navigation_type, |
| 92 !entry.IsViewSourceMode(),ui_timestamp, | 102 !entry.IsViewSourceMode(),ui_timestamp, |
| 93 report_type), | 103 report_type, entry.GetBaseURLForDataURL(), |
| 104 history_url_for_data_url), | |
| 94 BeginNavigationParams(method, headers.ToString(), | 105 BeginNavigationParams(method, headers.ToString(), |
| 95 LoadFlagFromNavigationType(navigation_type), | 106 LoadFlagFromNavigationType(navigation_type), |
| 96 false), | 107 false), |
| 97 CommitNavigationParams(entry.GetPageState(), | 108 CommitNavigationParams(entry.GetPageState(), |
| 98 entry.GetIsOverridingUserAgent(), | 109 entry.GetIsOverridingUserAgent(), |
| 99 navigation_start), | 110 navigation_start), |
| 100 request_body, true, &entry)); | 111 request_body, true, &entry)); |
| 101 return navigation_request.Pass(); | 112 return navigation_request.Pass(); |
| 102 } | 113 } |
| 103 | 114 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 151 bool parent_is_main_frame = !frame_tree_node->parent() ? | 162 bool parent_is_main_frame = !frame_tree_node->parent() ? |
| 152 false : frame_tree_node->parent()->IsMainFrame(); | 163 false : frame_tree_node->parent()->IsMainFrame(); |
| 153 info_.reset(new NavigationRequestInfo( | 164 info_.reset(new NavigationRequestInfo( |
| 154 common_params, begin_params, first_party_for_cookies, | 165 common_params, begin_params, first_party_for_cookies, |
| 155 frame_tree_node->IsMainFrame(), parent_is_main_frame, body)); | 166 frame_tree_node->IsMainFrame(), parent_is_main_frame, body)); |
| 156 } | 167 } |
| 157 | 168 |
| 158 NavigationRequest::~NavigationRequest() { | 169 NavigationRequest::~NavigationRequest() { |
| 159 } | 170 } |
| 160 | 171 |
| 161 void NavigationRequest::BeginNavigation() { | 172 bool NavigationRequest::BeginNavigation() { |
| 162 DCHECK(!loader_); | 173 DCHECK(!loader_); |
| 163 DCHECK(state_ == NOT_STARTED || state_ == WAITING_FOR_RENDERER_RESPONSE); | 174 DCHECK(state_ == NOT_STARTED || state_ == WAITING_FOR_RENDERER_RESPONSE); |
| 164 state_ = STARTED; | 175 state_ = STARTED; |
| 165 loader_ = NavigationURLLoader::Create( | 176 |
| 166 frame_tree_node_->navigator()->GetController()->GetBrowserContext(), | 177 if (ShouldMakeNetworkRequest(common_params_.url)) { |
| 167 frame_tree_node_->frame_tree_node_id(), info_.Pass(), this); | 178 loader_ = NavigationURLLoader::Create( |
| 179 frame_tree_node_->navigator()->GetController()->GetBrowserContext(), | |
| 180 frame_tree_node_->frame_tree_node_id(), info_.Pass(), this); | |
| 181 return true; | |
| 182 } | |
| 183 | |
| 184 state_ = RESPONSE_STARTED; | |
| 185 // There is no need to make a network request for this navigation, so commit | |
| 186 // it immediately. | |
| 187 frame_tree_node_->navigator()->CommitNavigation( | |
| 188 frame_tree_node_, nullptr, scoped_ptr<StreamHandle>()); | |
| 189 return false; | |
| 168 | 190 |
| 169 // TODO(davidben): Fire (and add as necessary) observer methods such as | 191 // TODO(davidben): Fire (and add as necessary) observer methods such as |
| 170 // DidStartProvisionalLoadForFrame for the navigation. | 192 // DidStartProvisionalLoadForFrame for the navigation. |
| 171 } | 193 } |
| 172 | 194 |
| 173 void NavigationRequest::OnRequestRedirected( | 195 void NavigationRequest::OnRequestRedirected( |
| 174 const net::RedirectInfo& redirect_info, | 196 const net::RedirectInfo& redirect_info, |
| 175 const scoped_refptr<ResourceResponse>& response) { | 197 const scoped_refptr<ResourceResponse>& response) { |
| 176 // TODO(davidben): Track other changes from redirects. These are important | 198 // TODO(davidben): Track other changes from redirects. These are important |
| 177 // for, e.g., reloads. | 199 // for, e.g., reloads. |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 197 // TODO(davidben): Network failures should display a network error page. | 219 // TODO(davidben): Network failures should display a network error page. |
| 198 NOTIMPLEMENTED() << " where net_error=" << net_error; | 220 NOTIMPLEMENTED() << " where net_error=" << net_error; |
| 199 } | 221 } |
| 200 | 222 |
| 201 void NavigationRequest::OnRequestStarted(base::TimeTicks timestamp) { | 223 void NavigationRequest::OnRequestStarted(base::TimeTicks timestamp) { |
| 202 frame_tree_node_->navigator()->LogResourceRequestTime(timestamp, | 224 frame_tree_node_->navigator()->LogResourceRequestTime(timestamp, |
| 203 common_params_.url); | 225 common_params_.url); |
| 204 } | 226 } |
| 205 | 227 |
| 206 } // namespace content | 228 } // namespace content |
| OLD | NEW |