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 <iterator> | 7 #include <iterator> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "content/browser/appcache/appcache_navigation_handle.h" | 10 #include "content/browser/appcache/appcache_navigation_handle.h" |
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
364 RunCompleteCallback(result); | 364 RunCompleteCallback(result); |
365 } | 365 } |
366 } | 366 } |
367 | 367 |
368 void NavigationHandleImpl::CancelDeferredNavigation( | 368 void NavigationHandleImpl::CancelDeferredNavigation( |
369 NavigationThrottle::ThrottleCheckResult result) { | 369 NavigationThrottle::ThrottleCheckResult result) { |
370 DCHECK(state_ == DEFERRING_START || | 370 DCHECK(state_ == DEFERRING_START || |
371 state_ == DEFERRING_REDIRECT || | 371 state_ == DEFERRING_REDIRECT || |
372 state_ == DEFERRING_RESPONSE); | 372 state_ == DEFERRING_RESPONSE); |
373 DCHECK(result == NavigationThrottle::CANCEL_AND_IGNORE || | 373 DCHECK(result == NavigationThrottle::CANCEL_AND_IGNORE || |
374 result == NavigationThrottle::CANCEL); | 374 result == NavigationThrottle::CANCEL || |
375 result == NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE); | |
376 DCHECK(result != NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE || | |
377 state_ == DEFERRING_START || | |
378 (state_ == DEFERRING_REDIRECT && IsBrowserSideNavigationEnabled())); | |
379 | |
380 if (result == NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE) | |
381 frame_tree_node_->SetCollapsed(true); | |
382 | |
375 TRACE_EVENT_ASYNC_STEP_INTO0("navigation", "NavigationHandle", this, | 383 TRACE_EVENT_ASYNC_STEP_INTO0("navigation", "NavigationHandle", this, |
376 "CancelDeferredNavigation"); | 384 "CancelDeferredNavigation"); |
377 state_ = CANCELING; | 385 state_ = CANCELING; |
378 RunCompleteCallback(result); | 386 RunCompleteCallback(result); |
379 } | 387 } |
380 | 388 |
381 void NavigationHandleImpl::RegisterThrottleForTesting( | 389 void NavigationHandleImpl::RegisterThrottleForTesting( |
382 std::unique_ptr<NavigationThrottle> navigation_throttle) { | 390 std::unique_ptr<NavigationThrottle> navigation_throttle) { |
383 throttles_.push_back(std::move(navigation_throttle)); | 391 throttles_.push_back(std::move(navigation_throttle)); |
384 } | 392 } |
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
716 // count it as an error page. | 724 // count it as an error page. |
717 if (params.base_url.spec() == kUnreachableWebDataURL || | 725 if (params.base_url.spec() == kUnreachableWebDataURL || |
718 net_error_code_ != net::OK) { | 726 net_error_code_ != net::OK) { |
719 TRACE_EVENT_ASYNC_STEP_INTO0("navigation", "NavigationHandle", this, | 727 TRACE_EVENT_ASYNC_STEP_INTO0("navigation", "NavigationHandle", this, |
720 "DidCommitNavigation: error page"); | 728 "DidCommitNavigation: error page"); |
721 state_ = DID_COMMIT_ERROR_PAGE; | 729 state_ = DID_COMMIT_ERROR_PAGE; |
722 } else { | 730 } else { |
723 TRACE_EVENT_ASYNC_STEP_INTO0("navigation", "NavigationHandle", this, | 731 TRACE_EVENT_ASYNC_STEP_INTO0("navigation", "NavigationHandle", this, |
724 "DidCommitNavigation"); | 732 "DidCommitNavigation"); |
725 state_ = DID_COMMIT; | 733 state_ = DID_COMMIT; |
734 | |
735 // Getting this far means that the navigation was not blocked, and neither | |
736 // is this the error page navigation following a blocked navigation. Ensure | |
737 // the frame owner element is no longer collapsed as a result of a prior | |
738 // navigation having been blocked with BLOCK_REQUEST_AND_COLLAPSE. | |
739 if (!frame_tree_node()->IsMainFrame()) { | |
740 // Collapsed frames show an error page with |kUnreachableWebDataURL|, so a | |
dcheng
2017/05/10 06:59:46
Nit: "show" seems like a slight misnomer, as the f
engedy
2017/05/15 13:35:51
Done.
| |
741 // same-document navigation should not be possible. | |
742 DCHECK(!is_same_page_ || !frame_tree_node()->is_collapsed()); | |
743 frame_tree_node()->SetCollapsed(false); | |
744 } | |
726 } | 745 } |
727 } | 746 } |
728 | 747 |
729 void NavigationHandleImpl::Transfer() { | 748 void NavigationHandleImpl::Transfer() { |
730 DCHECK(!IsBrowserSideNavigationEnabled()); | 749 DCHECK(!IsBrowserSideNavigationEnabled()); |
731 // This is an actual transfer. Inform the NavigationResourceThrottle. This | 750 // This is an actual transfer. Inform the NavigationResourceThrottle. This |
732 // will allow to mark the URLRequest as transferring. When it is marked as | 751 // will allow to mark the URLRequest as transferring. When it is marked as |
733 // transferring, the URLRequest can no longer be cancelled by its original | 752 // transferring, the URLRequest can no longer be cancelled by its original |
734 // RenderFrame. Instead it will persist until being picked up by the transfer | 753 // RenderFrame. Instead it will persist until being picked up by the transfer |
735 // RenderFrame, even if the original RenderFrame is destroyed. | 754 // RenderFrame, even if the original RenderFrame is destroyed. |
(...skipping 12 matching lines...) Expand all Loading... | |
748 NavigationThrottle::ThrottleCheckResult result = | 767 NavigationThrottle::ThrottleCheckResult result = |
749 throttles_[i]->WillStartRequest(); | 768 throttles_[i]->WillStartRequest(); |
750 TRACE_EVENT_ASYNC_STEP_INTO0( | 769 TRACE_EVENT_ASYNC_STEP_INTO0( |
751 "navigation", "NavigationHandle", this, | 770 "navigation", "NavigationHandle", this, |
752 base::StringPrintf("CheckWillStartRequest: %s: %d", | 771 base::StringPrintf("CheckWillStartRequest: %s: %d", |
753 throttles_[i]->GetNameForLogging(), result)); | 772 throttles_[i]->GetNameForLogging(), result)); |
754 switch (result) { | 773 switch (result) { |
755 case NavigationThrottle::PROCEED: | 774 case NavigationThrottle::PROCEED: |
756 continue; | 775 continue; |
757 | 776 |
777 case NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE: | |
778 frame_tree_node_->SetCollapsed(true); // Fall through. | |
758 case NavigationThrottle::BLOCK_REQUEST: | 779 case NavigationThrottle::BLOCK_REQUEST: |
759 case NavigationThrottle::CANCEL: | 780 case NavigationThrottle::CANCEL: |
760 case NavigationThrottle::CANCEL_AND_IGNORE: | 781 case NavigationThrottle::CANCEL_AND_IGNORE: |
761 state_ = CANCELING; | 782 state_ = CANCELING; |
762 return result; | 783 return result; |
763 | 784 |
764 case NavigationThrottle::DEFER: | 785 case NavigationThrottle::DEFER: |
765 state_ = DEFERRING_START; | 786 state_ = DEFERRING_START; |
766 next_index_ = i + 1; | 787 next_index_ = i + 1; |
767 return result; | 788 return result; |
(...skipping 18 matching lines...) Expand all Loading... | |
786 NavigationThrottle::ThrottleCheckResult result = | 807 NavigationThrottle::ThrottleCheckResult result = |
787 throttles_[i]->WillRedirectRequest(); | 808 throttles_[i]->WillRedirectRequest(); |
788 TRACE_EVENT_ASYNC_STEP_INTO0( | 809 TRACE_EVENT_ASYNC_STEP_INTO0( |
789 "navigation", "NavigationHandle", this, | 810 "navigation", "NavigationHandle", this, |
790 base::StringPrintf("CheckWillRedirectRequest: %s: %d", | 811 base::StringPrintf("CheckWillRedirectRequest: %s: %d", |
791 throttles_[i]->GetNameForLogging(), result)); | 812 throttles_[i]->GetNameForLogging(), result)); |
792 switch (result) { | 813 switch (result) { |
793 case NavigationThrottle::PROCEED: | 814 case NavigationThrottle::PROCEED: |
794 continue; | 815 continue; |
795 | 816 |
817 case NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE: | |
818 frame_tree_node_->SetCollapsed(true); // Fall through. | |
796 case NavigationThrottle::BLOCK_REQUEST: | 819 case NavigationThrottle::BLOCK_REQUEST: |
797 CHECK(IsBrowserSideNavigationEnabled()) | 820 CHECK(IsBrowserSideNavigationEnabled()) |
798 << "BLOCK_REQUEST must not be used on redirect without PlzNavigate"; | 821 << "BLOCK_REQUEST and BLOCK_REQUEST_AND_COLLAPSE must not be used " |
822 "on redirect without PlzNavigate"; | |
799 case NavigationThrottle::CANCEL: | 823 case NavigationThrottle::CANCEL: |
800 case NavigationThrottle::CANCEL_AND_IGNORE: | 824 case NavigationThrottle::CANCEL_AND_IGNORE: |
801 state_ = CANCELING; | 825 state_ = CANCELING; |
802 return result; | 826 return result; |
803 | 827 |
804 case NavigationThrottle::DEFER: | 828 case NavigationThrottle::DEFER: |
805 state_ = DEFERRING_REDIRECT; | 829 state_ = DEFERRING_REDIRECT; |
806 next_index_ = i + 1; | 830 next_index_ = i + 1; |
807 return result; | 831 return result; |
808 | 832 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
842 case NavigationThrottle::BLOCK_RESPONSE: | 866 case NavigationThrottle::BLOCK_RESPONSE: |
843 state_ = CANCELING; | 867 state_ = CANCELING; |
844 return result; | 868 return result; |
845 | 869 |
846 case NavigationThrottle::DEFER: | 870 case NavigationThrottle::DEFER: |
847 state_ = DEFERRING_RESPONSE; | 871 state_ = DEFERRING_RESPONSE; |
848 next_index_ = i + 1; | 872 next_index_ = i + 1; |
849 return result; | 873 return result; |
850 | 874 |
851 case NavigationThrottle::BLOCK_REQUEST: | 875 case NavigationThrottle::BLOCK_REQUEST: |
876 case NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE: | |
852 NOTREACHED(); | 877 NOTREACHED(); |
853 } | 878 } |
854 } | 879 } |
855 next_index_ = 0; | 880 next_index_ = 0; |
856 state_ = WILL_PROCESS_RESPONSE; | 881 state_ = WILL_PROCESS_RESPONSE; |
857 | 882 |
858 return NavigationThrottle::PROCEED; | 883 return NavigationThrottle::PROCEED; |
859 } | 884 } |
860 | 885 |
861 bool NavigationHandleImpl::MaybeTransferAndProceed() { | 886 bool NavigationHandleImpl::MaybeTransferAndProceed() { |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1047 if (node->current_url().EqualsIgnoringRef(url_)) { | 1072 if (node->current_url().EqualsIgnoringRef(url_)) { |
1048 if (found_self_reference) | 1073 if (found_self_reference) |
1049 return true; | 1074 return true; |
1050 found_self_reference = true; | 1075 found_self_reference = true; |
1051 } | 1076 } |
1052 } | 1077 } |
1053 return false; | 1078 return false; |
1054 } | 1079 } |
1055 | 1080 |
1056 } // namespace content | 1081 } // namespace content |
OLD | NEW |