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

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

Issue 2368183004: Move redirect_chain from NavigationEntry to FrameNavigationEntry. (Closed)
Patch Set: Nit Created 4 years, 2 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_entry_impl.h" 5 #include "content/browser/frame_host/navigation_entry_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <queue> 9 #include <queue>
10 #include <utility> 10 #include <utility>
(...skipping 533 matching lines...) Expand 10 before | Expand all | Expand 10 after
544 void NavigationEntryImpl::SetHttpStatusCode(int http_status_code) { 544 void NavigationEntryImpl::SetHttpStatusCode(int http_status_code) {
545 http_status_code_ = http_status_code; 545 http_status_code_ = http_status_code;
546 } 546 }
547 547
548 int NavigationEntryImpl::GetHttpStatusCode() const { 548 int NavigationEntryImpl::GetHttpStatusCode() const {
549 return http_status_code_; 549 return http_status_code_;
550 } 550 }
551 551
552 void NavigationEntryImpl::SetRedirectChain( 552 void NavigationEntryImpl::SetRedirectChain(
553 const std::vector<GURL>& redirect_chain) { 553 const std::vector<GURL>& redirect_chain) {
554 redirect_chain_ = redirect_chain; 554 root_node()->frame_entry->set_redirect_chain(redirect_chain);
555 } 555 }
556 556
557 const std::vector<GURL>& NavigationEntryImpl::GetRedirectChain() const { 557 const std::vector<GURL>& NavigationEntryImpl::GetRedirectChain() const {
558 return redirect_chain_; 558 return root_node()->frame_entry->redirect_chain();
559 } 559 }
560 560
561 bool NavigationEntryImpl::IsRestored() const { 561 bool NavigationEntryImpl::IsRestored() const {
562 return restore_type_ != RestoreType::NONE; 562 return restore_type_ != RestoreType::NONE;
563 } 563 }
564 564
565 void NavigationEntryImpl::SetCanLoadLocalResources(bool allow) { 565 void NavigationEntryImpl::SetCanLoadLocalResources(bool allow) {
566 can_load_local_resources_ = allow; 566 can_load_local_resources_ = allow;
567 } 567 }
568 568
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
628 copy->screenshot_ = screenshot_; 628 copy->screenshot_ = screenshot_;
629 copy->extra_headers_ = extra_headers_; 629 copy->extra_headers_ = extra_headers_;
630 copy->base_url_for_data_url_ = base_url_for_data_url_; 630 copy->base_url_for_data_url_ = base_url_for_data_url_;
631 #if defined(OS_ANDROID) 631 #if defined(OS_ANDROID)
632 copy->data_url_as_string_ = data_url_as_string_; 632 copy->data_url_as_string_ = data_url_as_string_;
633 #endif 633 #endif
634 // ResetForCommit: is_renderer_initiated_ 634 // ResetForCommit: is_renderer_initiated_
635 copy->cached_display_title_ = cached_display_title_; 635 copy->cached_display_title_ = cached_display_title_;
636 // ResetForCommit: transferred_global_request_id_ 636 // ResetForCommit: transferred_global_request_id_
637 // ResetForCommit: should_replace_entry_ 637 // ResetForCommit: should_replace_entry_
638 copy->redirect_chain_ = redirect_chain_;
639 // ResetForCommit: should_clear_history_list_ 638 // ResetForCommit: should_clear_history_list_
640 // ResetForCommit: frame_tree_node_id_ 639 // ResetForCommit: frame_tree_node_id_
641 // ResetForCommit: intent_received_timestamp_ 640 // ResetForCommit: intent_received_timestamp_
642 #if defined(OS_ANDROID) 641 #if defined(OS_ANDROID)
643 copy->has_user_gesture_ = has_user_gesture_; 642 copy->has_user_gesture_ = has_user_gesture_;
644 #endif 643 #endif
645 // ResetForCommit: reload_type_ 644 // ResetForCommit: reload_type_
646 copy->extra_data_ = extra_data_; 645 copy->extra_data_ = extra_data_;
647 646
648 return copy; 647 return copy;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
695 const std::set<std::string>& subframe_unique_names, 694 const std::set<std::string>& subframe_unique_names,
696 bool has_committed_real_load, 695 bool has_committed_real_load,
697 bool intended_as_new_entry, 696 bool intended_as_new_entry,
698 int pending_history_list_offset, 697 int pending_history_list_offset,
699 int current_history_list_offset, 698 int current_history_list_offset,
700 int current_history_list_length) const { 699 int current_history_list_length) const {
701 // Set the redirect chain to the navigation's redirects, unless returning to a 700 // Set the redirect chain to the navigation's redirects, unless returning to a
702 // completed navigation (whose previous redirects don't apply). 701 // completed navigation (whose previous redirects don't apply).
703 std::vector<GURL> redirects; 702 std::vector<GURL> redirects;
704 if (ui::PageTransitionIsNewNavigation(GetTransitionType())) { 703 if (ui::PageTransitionIsNewNavigation(GetTransitionType())) {
705 redirects = GetRedirectChain(); 704 redirects = frame_entry.redirect_chain();
706 } 705 }
707 706
708 int pending_offset_to_send = pending_history_list_offset; 707 int pending_offset_to_send = pending_history_list_offset;
709 int current_offset_to_send = current_history_list_offset; 708 int current_offset_to_send = current_history_list_offset;
710 int current_length_to_send = current_history_list_length; 709 int current_length_to_send = current_history_list_length;
711 if (should_clear_history_list()) { 710 if (should_clear_history_list()) {
712 // Set the history list related parameters to the same values a 711 // Set the history list related parameters to the same values a
713 // NavigationController would return before its first navigation. This will 712 // NavigationController would return before its first navigation. This will
714 // fully clear the RenderView's view of the session history. 713 // fully clear the RenderView's view of the session history.
715 pending_offset_to_send = -1; 714 pending_offset_to_send = -1;
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
771 } 770 }
772 771
773 void NavigationEntryImpl::AddOrUpdateFrameEntry( 772 void NavigationEntryImpl::AddOrUpdateFrameEntry(
774 FrameTreeNode* frame_tree_node, 773 FrameTreeNode* frame_tree_node,
775 int64_t item_sequence_number, 774 int64_t item_sequence_number,
776 int64_t document_sequence_number, 775 int64_t document_sequence_number,
777 SiteInstanceImpl* site_instance, 776 SiteInstanceImpl* site_instance,
778 scoped_refptr<SiteInstanceImpl> source_site_instance, 777 scoped_refptr<SiteInstanceImpl> source_site_instance,
779 const GURL& url, 778 const GURL& url,
780 const Referrer& referrer, 779 const Referrer& referrer,
780 const std::vector<GURL>& redirect_chain,
781 const PageState& page_state, 781 const PageState& page_state,
782 const std::string& method, 782 const std::string& method,
783 int64_t post_id) { 783 int64_t post_id) {
784 // We should only have an empty PageState if the navigation is new, and thus 784 // We should only have an empty PageState if the navigation is new, and thus
785 // page ID is -1. 785 // page ID is -1.
786 if (!page_state.IsValid() && GetPageID() != -1) { 786 if (!page_state.IsValid() && GetPageID() != -1) {
787 // Temporarily generate a minidump to diagnose https://crbug.com/568703. 787 // Temporarily generate a minidump to diagnose https://crbug.com/568703.
788 base::debug::DumpWithoutCrashing(); 788 base::debug::DumpWithoutCrashing();
789 NOTREACHED() << "Shouldn't set an empty PageState."; 789 NOTREACHED() << "Shouldn't set an empty PageState.";
790 } 790 }
791 791
792 // If this is called for the main frame, the FrameNavigationEntry is 792 // If this is called for the main frame, the FrameNavigationEntry is
793 // guaranteed to exist, so just update it directly and return. 793 // guaranteed to exist, so just update it directly and return.
794 if (frame_tree_node->IsMainFrame()) { 794 if (frame_tree_node->IsMainFrame()) {
795 // If the document of the FrameNavigationEntry is changing, we must clear 795 // If the document of the FrameNavigationEntry is changing, we must clear
796 // any child FrameNavigationEntries. 796 // any child FrameNavigationEntries.
797 if (root_node()->frame_entry->document_sequence_number() != 797 if (root_node()->frame_entry->document_sequence_number() !=
798 document_sequence_number) 798 document_sequence_number)
799 root_node()->children.clear(); 799 root_node()->children.clear();
800 800
801 root_node()->frame_entry->UpdateEntry( 801 root_node()->frame_entry->UpdateEntry(
802 frame_tree_node->unique_name(), item_sequence_number, 802 frame_tree_node->unique_name(), item_sequence_number,
803 document_sequence_number, site_instance, 803 document_sequence_number, site_instance,
804 std::move(source_site_instance), url, referrer, page_state, method, 804 std::move(source_site_instance), url, referrer, redirect_chain,
805 post_id); 805 page_state, method, post_id);
806 return; 806 return;
807 } 807 }
808 808
809 // We should already have a TreeNode for the parent node by the time this node 809 // We should already have a TreeNode for the parent node by the time this node
810 // commits. Find it first. 810 // commits. Find it first.
811 NavigationEntryImpl::TreeNode* parent_node = 811 NavigationEntryImpl::TreeNode* parent_node =
812 FindFrameEntry(frame_tree_node->parent()); 812 FindFrameEntry(frame_tree_node->parent());
813 if (!parent_node) { 813 if (!parent_node) {
814 // The renderer should not send a commit for a subframe before its parent. 814 // The renderer should not send a commit for a subframe before its parent.
815 // TODO(creis): Kill the renderer if we get here. 815 // TODO(creis): Kill the renderer if we get here.
816 return; 816 return;
817 } 817 }
818 818
819 // Now check whether we have a TreeNode for the node itself. 819 // Now check whether we have a TreeNode for the node itself.
820 const std::string& unique_name = frame_tree_node->unique_name(); 820 const std::string& unique_name = frame_tree_node->unique_name();
821 for (TreeNode* child : parent_node->children) { 821 for (TreeNode* child : parent_node->children) {
822 if (child->frame_entry->frame_unique_name() == unique_name) { 822 if (child->frame_entry->frame_unique_name() == unique_name) {
823 // If the document of the FrameNavigationEntry is changing, we must clear 823 // If the document of the FrameNavigationEntry is changing, we must clear
824 // any child FrameNavigationEntries. 824 // any child FrameNavigationEntries.
825 if (child->frame_entry->document_sequence_number() != 825 if (child->frame_entry->document_sequence_number() !=
826 document_sequence_number) 826 document_sequence_number)
827 child->children.clear(); 827 child->children.clear();
828 828
829 // Update the existing FrameNavigationEntry (e.g., for replaceState). 829 // Update the existing FrameNavigationEntry (e.g., for replaceState).
830 child->frame_entry->UpdateEntry(unique_name, item_sequence_number, 830 child->frame_entry->UpdateEntry(
831 document_sequence_number, site_instance, 831 unique_name, item_sequence_number, document_sequence_number,
832 std::move(source_site_instance), url, 832 site_instance, std::move(source_site_instance), url, referrer,
833 referrer, page_state, method, post_id); 833 redirect_chain, page_state, method, post_id);
834 return; 834 return;
835 } 835 }
836 } 836 }
837 837
838 // No entry exists yet, so create a new one. 838 // No entry exists yet, so create a new one.
839 // Unordered list, since we expect to look up entries by frame sequence number 839 // Unordered list, since we expect to look up entries by frame sequence number
840 // or unique name. 840 // or unique name.
841 FrameNavigationEntry* frame_entry = new FrameNavigationEntry( 841 FrameNavigationEntry* frame_entry = new FrameNavigationEntry(
842 unique_name, item_sequence_number, document_sequence_number, 842 unique_name, item_sequence_number, document_sequence_number,
843 site_instance, std::move(source_site_instance), url, referrer, method, 843 site_instance, std::move(source_site_instance), url, referrer, method,
844 post_id); 844 post_id);
845 frame_entry->SetPageState(page_state); 845 frame_entry->SetPageState(page_state);
846 frame_entry->set_redirect_chain(redirect_chain);
846 parent_node->children.push_back( 847 parent_node->children.push_back(
847 new NavigationEntryImpl::TreeNode(parent_node, frame_entry)); 848 new NavigationEntryImpl::TreeNode(parent_node, frame_entry));
848 } 849 }
849 850
850 FrameNavigationEntry* NavigationEntryImpl::GetFrameEntry( 851 FrameNavigationEntry* NavigationEntryImpl::GetFrameEntry(
851 FrameTreeNode* frame_tree_node) const { 852 FrameTreeNode* frame_tree_node) const {
852 NavigationEntryImpl::TreeNode* tree_node = FindFrameEntry(frame_tree_node); 853 NavigationEntryImpl::TreeNode* tree_node = FindFrameEntry(frame_tree_node);
853 return tree_node ? tree_node->frame_entry.get() : nullptr; 854 return tree_node ? tree_node->frame_entry.get() : nullptr;
854 } 855 }
855 856
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
925 return node; 926 return node;
926 927
927 // Enqueue any children and keep looking. 928 // Enqueue any children and keep looking.
928 for (auto* child : node->children) 929 for (auto* child : node->children)
929 work_queue.push(child); 930 work_queue.push(child);
930 } 931 }
931 return nullptr; 932 return nullptr;
932 } 933 }
933 934
934 } // namespace content 935 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/frame_host/navigation_entry_impl.h ('k') | content/browser/frame_host/navigator_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698