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 |