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

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

Issue 2632633006: Implement NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE. (Closed)
Patch Set: Remove surplus semicolon. Created 3 years, 11 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 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/debug/dump_without_crashing.h" 7 #include "base/debug/dump_without_crashing.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "content/browser/appcache/appcache_navigation_handle.h" 9 #include "content/browser/appcache/appcache_navigation_handle.h"
10 #include "content/browser/appcache/appcache_service_impl.h" 10 #include "content/browser/appcache/appcache_service_impl.h"
(...skipping 540 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 transition_ = params.transition; 551 transition_ = params.transition;
552 render_frame_host_ = render_frame_host; 552 render_frame_host_ = render_frame_host;
553 553
554 // If an error page reloads, net_error_code might be 200 but we still want to 554 // If an error page reloads, net_error_code might be 200 but we still want to
555 // count it as an error page. 555 // count it as an error page.
556 if (params.base_url.spec() == kUnreachableWebDataURL || 556 if (params.base_url.spec() == kUnreachableWebDataURL ||
557 net_error_code_ != net::OK) { 557 net_error_code_ != net::OK) {
558 state_ = DID_COMMIT_ERROR_PAGE; 558 state_ = DID_COMMIT_ERROR_PAGE;
559 } else { 559 } else {
560 state_ = DID_COMMIT; 560 state_ = DID_COMMIT;
561
562 // Getting this far means that the navigation was not blocked, and neither
563 // is this the error page navigation following a blocked navigation. Ensure
564 // the frame owner element is no longer collapsed as a result of a prior
565 // navigation having been blocked with BLOCK_REQUEST_AND_COLLAPSE.
566 if (!frame_tree_node()->IsMainFrame())
567 frame_tree_node()->SetFrameOwnerCollapsedState(false);
561 } 568 }
562 } 569 }
563 570
564 void NavigationHandleImpl::Transfer() { 571 void NavigationHandleImpl::Transfer() {
565 DCHECK(!IsBrowserSideNavigationEnabled()); 572 DCHECK(!IsBrowserSideNavigationEnabled());
566 // This is an actual transfer. Inform the NavigationResourceThrottle. This 573 // This is an actual transfer. Inform the NavigationResourceThrottle. This
567 // will allow to mark the URLRequest as transferring. When it is marked as 574 // will allow to mark the URLRequest as transferring. When it is marked as
568 // transferring, the URLRequest can no longer be cancelled by its original 575 // transferring, the URLRequest can no longer be cancelled by its original
569 // RenderFrame. Instead it will persist until being picked up by the transfer 576 // RenderFrame. Instead it will persist until being picked up by the transfer
570 // RenderFrame, even if the original RenderFrame is destroyed. 577 // RenderFrame, even if the original RenderFrame is destroyed.
571 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, transfer_callback_); 578 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, transfer_callback_);
572 transfer_callback_.Reset(); 579 transfer_callback_.Reset();
573 } 580 }
574 581
575 NavigationThrottle::ThrottleCheckResult 582 NavigationThrottle::ThrottleCheckResult
576 NavigationHandleImpl::CheckWillStartRequest() { 583 NavigationHandleImpl::CheckWillStartRequest() {
577 DCHECK(state_ == WILL_SEND_REQUEST || state_ == DEFERRING_START); 584 DCHECK(state_ == WILL_SEND_REQUEST || state_ == DEFERRING_START);
578 DCHECK(state_ != WILL_SEND_REQUEST || next_index_ == 0); 585 DCHECK(state_ != WILL_SEND_REQUEST || next_index_ == 0);
579 DCHECK(state_ != DEFERRING_START || next_index_ != 0); 586 DCHECK(state_ != DEFERRING_START || next_index_ != 0);
580 for (size_t i = next_index_; i < throttles_.size(); ++i) { 587 for (size_t i = next_index_; i < throttles_.size(); ++i) {
581 NavigationThrottle::ThrottleCheckResult result = 588 NavigationThrottle::ThrottleCheckResult result =
582 throttles_[i]->WillStartRequest(); 589 throttles_[i]->WillStartRequest();
583 switch (result) { 590 switch (result) {
584 case NavigationThrottle::PROCEED: 591 case NavigationThrottle::PROCEED:
585 continue; 592 continue;
586 593
587 case NavigationThrottle::CANCEL: 594 case NavigationThrottle::CANCEL:
588 case NavigationThrottle::CANCEL_AND_IGNORE: 595 case NavigationThrottle::CANCEL_AND_IGNORE:
589 case NavigationThrottle::BLOCK_REQUEST: 596 case NavigationThrottle::BLOCK_REQUEST:
597 case NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE:
590 state_ = CANCELING; 598 state_ = CANCELING;
591 return result; 599 return result;
592 600
593 case NavigationThrottle::DEFER: 601 case NavigationThrottle::DEFER:
594 state_ = DEFERRING_START; 602 state_ = DEFERRING_START;
595 next_index_ = i + 1; 603 next_index_ = i + 1;
596 return result; 604 return result;
597 605
598 case NavigationThrottle::BLOCK_RESPONSE: 606 case NavigationThrottle::BLOCK_RESPONSE:
599 NOTREACHED(); 607 NOTREACHED();
(...skipping 11 matching lines...) Expand all
611 DCHECK(state_ != DEFERRING_REDIRECT || next_index_ != 0); 619 DCHECK(state_ != DEFERRING_REDIRECT || next_index_ != 0);
612 for (size_t i = next_index_; i < throttles_.size(); ++i) { 620 for (size_t i = next_index_; i < throttles_.size(); ++i) {
613 NavigationThrottle::ThrottleCheckResult result = 621 NavigationThrottle::ThrottleCheckResult result =
614 throttles_[i]->WillRedirectRequest(); 622 throttles_[i]->WillRedirectRequest();
615 switch (result) { 623 switch (result) {
616 case NavigationThrottle::PROCEED: 624 case NavigationThrottle::PROCEED:
617 continue; 625 continue;
618 626
619 case NavigationThrottle::CANCEL: 627 case NavigationThrottle::CANCEL:
620 case NavigationThrottle::CANCEL_AND_IGNORE: 628 case NavigationThrottle::CANCEL_AND_IGNORE:
629 case NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE:
621 state_ = CANCELING; 630 state_ = CANCELING;
622 return result; 631 return result;
623 632
624 case NavigationThrottle::DEFER: 633 case NavigationThrottle::DEFER:
625 state_ = DEFERRING_REDIRECT; 634 state_ = DEFERRING_REDIRECT;
626 next_index_ = i + 1; 635 next_index_ = i + 1;
627 return result; 636 return result;
628 637
629 case NavigationThrottle::BLOCK_REQUEST: 638 case NavigationThrottle::BLOCK_REQUEST:
630 case NavigationThrottle::BLOCK_RESPONSE: 639 case NavigationThrottle::BLOCK_RESPONSE:
(...skipping 27 matching lines...) Expand all
658 case NavigationThrottle::BLOCK_RESPONSE: 667 case NavigationThrottle::BLOCK_RESPONSE:
659 state_ = CANCELING; 668 state_ = CANCELING;
660 return result; 669 return result;
661 670
662 case NavigationThrottle::DEFER: 671 case NavigationThrottle::DEFER:
663 state_ = DEFERRING_RESPONSE; 672 state_ = DEFERRING_RESPONSE;
664 next_index_ = i + 1; 673 next_index_ = i + 1;
665 return result; 674 return result;
666 675
667 case NavigationThrottle::BLOCK_REQUEST: 676 case NavigationThrottle::BLOCK_REQUEST:
677 case NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE:
668 NOTREACHED(); 678 NOTREACHED();
669 } 679 }
670 } 680 }
671 next_index_ = 0; 681 next_index_ = 0;
672 state_ = WILL_PROCESS_RESPONSE; 682 state_ = WILL_PROCESS_RESPONSE;
673 return NavigationThrottle::PROCEED; 683 return NavigationThrottle::PROCEED;
674 } 684 }
675 685
676 bool NavigationHandleImpl::MaybeTransferAndProceed() { 686 bool NavigationHandleImpl::MaybeTransferAndProceed() {
677 DCHECK_EQ(WILL_PROCESS_RESPONSE, state_); 687 DCHECK_EQ(WILL_PROCESS_RESPONSE, state_);
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
806 throttles_.push_back(std::move(ancestor_throttle)); 816 throttles_.push_back(std::move(ancestor_throttle));
807 817
808 if (throttles_to_register.size() > 0) { 818 if (throttles_to_register.size() > 0) {
809 throttles_.insert(throttles_.begin(), throttles_to_register.begin(), 819 throttles_.insert(throttles_.begin(), throttles_to_register.begin(),
810 throttles_to_register.end()); 820 throttles_to_register.end());
811 throttles_to_register.weak_clear(); 821 throttles_to_register.weak_clear();
812 } 822 }
813 } 823 }
814 824
815 } // namespace content 825 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698