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

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

Issue 2294343002: Update FrameNavigationEntry members when setting PageState. (Closed)
Patch Set: Remove NOTREACHED, as unit tests are failing. Created 4 years, 3 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 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 // Set a single-frame PageState on the entry. 52 // Set a single-frame PageState on the entry.
53 ExplodedPageState page_state; 53 ExplodedPageState page_state;
54 page_state.top = state; 54 page_state.top = state;
55 std::string data; 55 std::string data;
56 EncodePageState(page_state, &data); 56 EncodePageState(page_state, &data);
57 if (data.empty()) { 57 if (data.empty()) {
58 // Temporarily generate a minidump to diagnose https://crbug.com/568703. 58 // Temporarily generate a minidump to diagnose https://crbug.com/568703.
59 base::debug::DumpWithoutCrashing(); 59 base::debug::DumpWithoutCrashing();
60 NOTREACHED() << "Shouldn't generate an empty PageState."; 60 NOTREACHED() << "Shouldn't generate an empty PageState.";
61 } 61 }
62 node->frame_entry->set_page_state(PageState::CreateFromEncodedData(data)); 62 node->frame_entry->SetPageState(PageState::CreateFromEncodedData(data));
63 63
64 for (const ExplodedFrameState& child_state : state.children) { 64 for (const ExplodedFrameState& child_state : state.children) {
65 NavigationEntryImpl::TreeNode* child_node = 65 NavigationEntryImpl::TreeNode* child_node =
66 new NavigationEntryImpl::TreeNode(node, nullptr); 66 new NavigationEntryImpl::TreeNode(node, nullptr);
67 node->children.push_back(child_node); 67 node->children.push_back(child_node);
68 RecursivelyGenerateFrameEntries(child_state, child_node); 68 RecursivelyGenerateFrameEntries(child_state, child_node);
69 } 69 }
70 } 70 }
71 71
72 void RecursivelyGenerateFrameState( 72 void RecursivelyGenerateFrameState(
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 title_ = title; 331 title_ = title;
332 cached_display_title_.clear(); 332 cached_display_title_.clear();
333 } 333 }
334 334
335 const base::string16& NavigationEntryImpl::GetTitle() const { 335 const base::string16& NavigationEntryImpl::GetTitle() const {
336 return title_; 336 return title_;
337 } 337 }
338 338
339 void NavigationEntryImpl::SetPageState(const PageState& state) { 339 void NavigationEntryImpl::SetPageState(const PageState& state) {
340 if (!SiteIsolationPolicy::UseSubframeNavigationEntries()) { 340 if (!SiteIsolationPolicy::UseSubframeNavigationEntries()) {
341 frame_tree_->frame_entry->set_page_state(state); 341 frame_tree_->frame_entry->SetPageState(state);
342 return; 342 return;
343 } 343 }
344 344
345 // SetPageState should only be called before the NavigationEntry has been 345 // SetPageState should only be called before the NavigationEntry has been
346 // loaded, such as for restore (when there are no subframe 346 // loaded, such as for restore (when there are no subframe
347 // FrameNavigationEntries yet). However, some callers expect to call this 347 // FrameNavigationEntries yet). However, some callers expect to call this
348 // after a Clone but before loading the page. Clone will copy over the 348 // after a Clone but before loading the page. Clone will copy over the
349 // subframe entries, and we should reset them before setting the state again. 349 // subframe entries, and we should reset them before setting the state again.
350 // 350 //
351 // TODO(creis): It would be good to verify that this NavigationEntry hasn't 351 // TODO(creis): It would be good to verify that this NavigationEntry hasn't
352 // been loaded yet in cases that SetPageState is called while subframe 352 // been loaded yet in cases that SetPageState is called while subframe
353 // entries exist, but there's currently no way to check that. 353 // entries exist, but there's currently no way to check that.
354 if (!frame_tree_->children.empty()) 354 if (!frame_tree_->children.empty())
355 frame_tree_->children.clear(); 355 frame_tree_->children.clear();
356 356
357 // If the PageState can't be parsed or has no children, just store it on the 357 // If the PageState can't be parsed or has no children, just store it on the
358 // main frame's FrameNavigationEntry without recursively creating subframe 358 // main frame's FrameNavigationEntry without recursively creating subframe
359 // entries. 359 // entries.
360 ExplodedPageState exploded_state; 360 ExplodedPageState exploded_state;
361 if (!DecodePageState(state.ToEncodedData(), &exploded_state) || 361 if (!DecodePageState(state.ToEncodedData(), &exploded_state) ||
362 exploded_state.top.children.size() == 0U) { 362 exploded_state.top.children.size() == 0U) {
363 frame_tree_->frame_entry->set_page_state(state); 363 frame_tree_->frame_entry->SetPageState(state);
364 return; 364 return;
365 } 365 }
366 366
367 RecursivelyGenerateFrameEntries(exploded_state.top, frame_tree_.get()); 367 RecursivelyGenerateFrameEntries(exploded_state.top, frame_tree_.get());
368 } 368 }
369 369
370 PageState NavigationEntryImpl::GetPageState() const { 370 PageState NavigationEntryImpl::GetPageState() const {
371 // Just return the main frame's PageState in default Chrome, or if there are 371 // Just return the main frame's PageState in default Chrome, or if there are
372 // no subframe FrameNavigationEntries. 372 // no subframe FrameNavigationEntries.
373 if (!SiteIsolationPolicy::UseSubframeNavigationEntries() || 373 if (!SiteIsolationPolicy::UseSubframeNavigationEntries() ||
(...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after
828 } 828 }
829 } 829 }
830 830
831 // No entry exists yet, so create a new one. 831 // No entry exists yet, so create a new one.
832 // Unordered list, since we expect to look up entries by frame sequence number 832 // Unordered list, since we expect to look up entries by frame sequence number
833 // or unique name. 833 // or unique name.
834 FrameNavigationEntry* frame_entry = new FrameNavigationEntry( 834 FrameNavigationEntry* frame_entry = new FrameNavigationEntry(
835 unique_name, item_sequence_number, document_sequence_number, 835 unique_name, item_sequence_number, document_sequence_number,
836 site_instance, std::move(source_site_instance), url, referrer, method, 836 site_instance, std::move(source_site_instance), url, referrer, method,
837 post_id); 837 post_id);
838 frame_entry->set_page_state(page_state); 838 frame_entry->SetPageState(page_state);
839 parent_node->children.push_back( 839 parent_node->children.push_back(
840 new NavigationEntryImpl::TreeNode(parent_node, frame_entry)); 840 new NavigationEntryImpl::TreeNode(parent_node, frame_entry));
841 } 841 }
842 842
843 FrameNavigationEntry* NavigationEntryImpl::GetFrameEntry( 843 FrameNavigationEntry* NavigationEntryImpl::GetFrameEntry(
844 FrameTreeNode* frame_tree_node) const { 844 FrameTreeNode* frame_tree_node) const {
845 NavigationEntryImpl::TreeNode* tree_node = FindFrameEntry(frame_tree_node); 845 NavigationEntryImpl::TreeNode* tree_node = FindFrameEntry(frame_tree_node);
846 return tree_node ? tree_node->frame_entry.get() : nullptr; 846 return tree_node ? tree_node->frame_entry.get() : nullptr;
847 } 847 }
848 848
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
906 return node; 906 return node;
907 907
908 // Enqueue any children and keep looking. 908 // Enqueue any children and keep looking.
909 for (auto* child : node->children) 909 for (auto* child : node->children)
910 work_queue.push(child); 910 work_queue.push(child);
911 } 911 }
912 return nullptr; 912 return nullptr;
913 } 913 }
914 914
915 } // namespace content 915 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/frame_host/navigation_controller_impl.cc ('k') | content/browser/web_contents/web_contents_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698