Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: content/browser/frame_host/navigation_request.cc

Issue 906283003: PlzNavigate: Support data urls (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698