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

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

Issue 1530393003: WIP: Move 'X-Frame-Options' checking to the browser. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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_handle_impl.h" 5 #include "content/browser/frame_host/navigation_handle_impl.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.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/navigator.h" 9 #include "content/browser/frame_host/navigator.h"
10 #include "content/browser/frame_host/navigator_delegate.h" 10 #include "content/browser/frame_host/navigator_delegate.h"
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 complete_callback_ = callback; 273 complete_callback_ = callback;
274 274
275 // Notify each throttle of the request. 275 // Notify each throttle of the request.
276 NavigationThrottle::ThrottleCheckResult result = CheckWillRedirectRequest(); 276 NavigationThrottle::ThrottleCheckResult result = CheckWillRedirectRequest();
277 277
278 // If the navigation is not deferred, run the callback. 278 // If the navigation is not deferred, run the callback.
279 if (result != NavigationThrottle::DEFER) 279 if (result != NavigationThrottle::DEFER)
280 RunCompleteCallback(result); 280 RunCompleteCallback(result);
281 } 281 }
282 282
283 void NavigationHandleImpl::WillProcessResponse(
284 RenderFrameHostImpl* render_frame_host,
285 scoped_refptr<net::HttpResponseHeaders> response_headers,
286 const ThrottleChecksFinishedCallback& callback) {
287 DCHECK(!render_frame_host_ || render_frame_host_ == render_frame_host);
288 render_frame_host_ = render_frame_host;
289 response_headers_ = response_headers;
290 state_ = READY_TO_COMMIT;
291
292 NavigationThrottle::ThrottleCheckResult result = CheckWillProcessResponse();
293
294 if (result != NavigationThrottle::PROCEED) {
295 DCHECK(result == NavigationThrottle::CANCEL ||
296 result == NavigationThrottle::CANCEL_AND_IGNORE);
297 complete_callback_ = callback;
298 RunCompleteCallback(result);
299 } else {
300 ReadyToCommitNavigation(render_frame_host, response_headers);
Mike West 2015/12/17 13:09:15 This feels a bit hacky. I'd appreciate suggestions
301 }
302 }
303
283 void NavigationHandleImpl::DidRedirectNavigation(const GURL& new_url) { 304 void NavigationHandleImpl::DidRedirectNavigation(const GURL& new_url) {
284 url_ = new_url; 305 url_ = new_url;
285 GetDelegate()->DidRedirectNavigation(this); 306 GetDelegate()->DidRedirectNavigation(this);
286 } 307 }
287 308
288 void NavigationHandleImpl::ReadyToCommitNavigation( 309 void NavigationHandleImpl::ReadyToCommitNavigation(
289 RenderFrameHostImpl* render_frame_host, 310 RenderFrameHostImpl* render_frame_host,
290 scoped_refptr<net::HttpResponseHeaders> response_headers) { 311 scoped_refptr<net::HttpResponseHeaders> response_headers) {
291 DCHECK(!render_frame_host_ || render_frame_host_ == render_frame_host); 312 DCHECK(!render_frame_host_ || render_frame_host_ == render_frame_host);
292 render_frame_host_ = render_frame_host; 313 render_frame_host_ = render_frame_host;
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 386
366 default: 387 default:
367 NOTREACHED(); 388 NOTREACHED();
368 } 389 }
369 } 390 }
370 next_index_ = 0; 391 next_index_ = 0;
371 state_ = WILL_REDIRECT_REQUEST; 392 state_ = WILL_REDIRECT_REQUEST;
372 return NavigationThrottle::PROCEED; 393 return NavigationThrottle::PROCEED;
373 } 394 }
374 395
396 NavigationThrottle::ThrottleCheckResult
397 NavigationHandleImpl::CheckWillProcessResponse() {
398 DCHECK(state_ == READY_TO_COMMIT);
399 for (size_t i = next_index_; i < throttles_.size(); ++i) {
400 NavigationThrottle::ThrottleCheckResult result =
401 throttles_[i]->WillProcessResponse();
402 switch (result) {
403 case NavigationThrottle::PROCEED:
404 continue;
405
406 case NavigationThrottle::CANCEL:
407 case NavigationThrottle::CANCEL_AND_IGNORE:
408 state_ = CANCELING;
409 return result;
410
411 case NavigationThrottle::DEFER:
412 default:
413 NOTREACHED();
414 }
415 }
416 next_index_ = 0;
417 state_ = READY_TO_COMMIT;
418 return NavigationThrottle::PROCEED;
419 }
420
375 void NavigationHandleImpl::RunCompleteCallback( 421 void NavigationHandleImpl::RunCompleteCallback(
376 NavigationThrottle::ThrottleCheckResult result) { 422 NavigationThrottle::ThrottleCheckResult result) {
377 DCHECK(result != NavigationThrottle::DEFER); 423 DCHECK(result != NavigationThrottle::DEFER);
378 if (!complete_callback_.is_null()) 424 if (!complete_callback_.is_null())
379 complete_callback_.Run(result); 425 complete_callback_.Run(result);
380 426
381 complete_callback_.Reset(); 427 complete_callback_.Reset();
382 } 428 }
383 429
384 } // namespace content 430 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698