OLD | NEW |
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 <utility> | 7 #include <utility> |
8 | 8 |
9 #include "content/browser/frame_host/frame_tree_node.h" | 9 #include "content/browser/frame_host/frame_tree_node.h" |
10 #include "content/browser/frame_host/navigator.h" | 10 #include "content/browser/frame_host/navigator.h" |
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
409 DCHECK(state_ != DEFERRING_START || next_index_ != 0); | 409 DCHECK(state_ != DEFERRING_START || next_index_ != 0); |
410 for (size_t i = next_index_; i < throttles_.size(); ++i) { | 410 for (size_t i = next_index_; i < throttles_.size(); ++i) { |
411 NavigationThrottle::ThrottleCheckResult result = | 411 NavigationThrottle::ThrottleCheckResult result = |
412 throttles_[i]->WillStartRequest(); | 412 throttles_[i]->WillStartRequest(); |
413 switch (result) { | 413 switch (result) { |
414 case NavigationThrottle::PROCEED: | 414 case NavigationThrottle::PROCEED: |
415 continue; | 415 continue; |
416 | 416 |
417 case NavigationThrottle::CANCEL: | 417 case NavigationThrottle::CANCEL: |
418 case NavigationThrottle::CANCEL_AND_IGNORE: | 418 case NavigationThrottle::CANCEL_AND_IGNORE: |
| 419 case NavigationThrottle::BLOCK_REQUEST: |
419 state_ = CANCELING; | 420 state_ = CANCELING; |
420 return result; | 421 return result; |
421 | 422 |
422 case NavigationThrottle::DEFER: | 423 case NavigationThrottle::DEFER: |
423 state_ = DEFERRING_START; | 424 state_ = DEFERRING_START; |
424 next_index_ = i + 1; | 425 next_index_ = i + 1; |
425 return result; | 426 return result; |
426 | |
427 default: | |
428 NOTREACHED(); | |
429 } | 427 } |
430 } | 428 } |
431 next_index_ = 0; | 429 next_index_ = 0; |
432 state_ = WILL_SEND_REQUEST; | 430 state_ = WILL_SEND_REQUEST; |
433 return NavigationThrottle::PROCEED; | 431 return NavigationThrottle::PROCEED; |
434 } | 432 } |
435 | 433 |
436 NavigationThrottle::ThrottleCheckResult | 434 NavigationThrottle::ThrottleCheckResult |
437 NavigationHandleImpl::CheckWillRedirectRequest() { | 435 NavigationHandleImpl::CheckWillRedirectRequest() { |
438 DCHECK(state_ == WILL_REDIRECT_REQUEST || state_ == DEFERRING_REDIRECT); | 436 DCHECK(state_ == WILL_REDIRECT_REQUEST || state_ == DEFERRING_REDIRECT); |
439 DCHECK(state_ != WILL_REDIRECT_REQUEST || next_index_ == 0); | 437 DCHECK(state_ != WILL_REDIRECT_REQUEST || next_index_ == 0); |
440 DCHECK(state_ != DEFERRING_REDIRECT || next_index_ != 0); | 438 DCHECK(state_ != DEFERRING_REDIRECT || next_index_ != 0); |
441 for (size_t i = next_index_; i < throttles_.size(); ++i) { | 439 for (size_t i = next_index_; i < throttles_.size(); ++i) { |
442 NavigationThrottle::ThrottleCheckResult result = | 440 NavigationThrottle::ThrottleCheckResult result = |
443 throttles_[i]->WillRedirectRequest(); | 441 throttles_[i]->WillRedirectRequest(); |
444 switch (result) { | 442 switch (result) { |
445 case NavigationThrottle::PROCEED: | 443 case NavigationThrottle::PROCEED: |
446 continue; | 444 continue; |
447 | 445 |
448 case NavigationThrottle::CANCEL: | 446 case NavigationThrottle::CANCEL: |
449 case NavigationThrottle::CANCEL_AND_IGNORE: | 447 case NavigationThrottle::CANCEL_AND_IGNORE: |
450 state_ = CANCELING; | 448 state_ = CANCELING; |
451 return result; | 449 return result; |
452 | 450 |
453 case NavigationThrottle::DEFER: | 451 case NavigationThrottle::DEFER: |
454 state_ = DEFERRING_REDIRECT; | 452 state_ = DEFERRING_REDIRECT; |
455 next_index_ = i + 1; | 453 next_index_ = i + 1; |
456 return result; | 454 return result; |
457 | 455 |
458 default: | 456 case NavigationThrottle::BLOCK_REQUEST: |
459 NOTREACHED(); | 457 NOTREACHED(); |
460 } | 458 } |
461 } | 459 } |
462 next_index_ = 0; | 460 next_index_ = 0; |
463 state_ = WILL_REDIRECT_REQUEST; | 461 state_ = WILL_REDIRECT_REQUEST; |
464 | 462 |
465 // Notify the delegate that a redirect was encountered and will be followed. | 463 // Notify the delegate that a redirect was encountered and will be followed. |
466 if (GetDelegate()) | 464 if (GetDelegate()) |
467 GetDelegate()->DidRedirectNavigation(this); | 465 GetDelegate()->DidRedirectNavigation(this); |
468 | 466 |
(...skipping 14 matching lines...) Expand all Loading... |
483 | 481 |
484 case NavigationThrottle::CANCEL: | 482 case NavigationThrottle::CANCEL: |
485 case NavigationThrottle::CANCEL_AND_IGNORE: | 483 case NavigationThrottle::CANCEL_AND_IGNORE: |
486 state_ = CANCELING; | 484 state_ = CANCELING; |
487 return result; | 485 return result; |
488 | 486 |
489 case NavigationThrottle::DEFER: | 487 case NavigationThrottle::DEFER: |
490 state_ = DEFERRING_RESPONSE; | 488 state_ = DEFERRING_RESPONSE; |
491 next_index_ = i + 1; | 489 next_index_ = i + 1; |
492 return result; | 490 return result; |
| 491 |
| 492 case NavigationThrottle::BLOCK_REQUEST: |
| 493 NOTREACHED(); |
493 } | 494 } |
494 } | 495 } |
495 next_index_ = 0; | 496 next_index_ = 0; |
496 state_ = WILL_PROCESS_RESPONSE; | 497 state_ = WILL_PROCESS_RESPONSE; |
497 return NavigationThrottle::PROCEED; | 498 return NavigationThrottle::PROCEED; |
498 } | 499 } |
499 | 500 |
500 void NavigationHandleImpl::RunCompleteCallback( | 501 void NavigationHandleImpl::RunCompleteCallback( |
501 NavigationThrottle::ThrottleCheckResult result) { | 502 NavigationThrottle::ThrottleCheckResult result) { |
502 DCHECK(result != NavigationThrottle::DEFER); | 503 DCHECK(result != NavigationThrottle::DEFER); |
503 | 504 |
504 ThrottleChecksFinishedCallback callback = complete_callback_; | 505 ThrottleChecksFinishedCallback callback = complete_callback_; |
505 complete_callback_.Reset(); | 506 complete_callback_.Reset(); |
506 | 507 |
507 if (!callback.is_null()) | 508 if (!callback.is_null()) |
508 callback.Run(result); | 509 callback.Run(result); |
509 | 510 |
510 // No code after running the callback, as it might have resulted in our | 511 // No code after running the callback, as it might have resulted in our |
511 // destruction. | 512 // destruction. |
512 } | 513 } |
513 | 514 |
514 } // namespace content | 515 } // namespace content |
OLD | NEW |