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

Unified Diff: content/browser/frame_host/navigation_entry_impl.cc

Issue 1889583003: Revert of OOPIF: Fix subframe back/forward after recreating FTNs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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 side-by-side diff with in-line comments
Download patch
« 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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/frame_host/navigation_entry_impl.cc
diff --git a/content/browser/frame_host/navigation_entry_impl.cc b/content/browser/frame_host/navigation_entry_impl.cc
index fc3a57c9a94290261b27f899796b93777015186d..dad94ba030d853b86ddf2e99d377b63661dc054e 100644
--- a/content/browser/frame_host/navigation_entry_impl.cc
+++ b/content/browser/frame_host/navigation_entry_impl.cc
@@ -100,19 +100,11 @@
}
bool NavigationEntryImpl::TreeNode::MatchesFrame(
- FrameTreeNode* frame_tree_node) {
+ FrameTreeNode* frame_tree_node) const {
if (frame_tree_node->frame_tree_node_id() ==
frame_entry->frame_tree_node_id())
return true;
- if (frame_tree_node->current_replication_state().unique_name ==
- frame_entry->frame_unique_name()) {
- // If we find a match by unique name but not FrameTreeNode ID, then the
- // FrameTreeNode ID on the entry is stale and should be updated.
- frame_entry->set_frame_tree_node_id(frame_tree_node->frame_tree_node_id());
- return true;
- }
-
// For now, we set the root FNE's FrameTreeNode ID to -1.
return frame_tree_node->IsMainFrame() &&
frame_entry->frame_tree_node_id() == -1;
@@ -121,7 +113,7 @@
std::unique_ptr<NavigationEntryImpl::TreeNode>
NavigationEntryImpl::TreeNode::CloneAndReplace(
FrameTreeNode* frame_tree_node,
- FrameNavigationEntry* frame_navigation_entry) {
+ FrameNavigationEntry* frame_navigation_entry) const {
if (frame_tree_node && MatchesFrame(frame_tree_node)) {
// Replace this node in the cloned tree and prune its children.
return base::WrapUnique(
@@ -695,6 +687,7 @@
void NavigationEntryImpl::AddOrUpdateFrameEntry(
FrameTreeNode* frame_tree_node,
+ const std::string& frame_unique_name,
int64_t item_sequence_number,
int64_t document_sequence_number,
SiteInstanceImpl* site_instance,
@@ -714,13 +707,10 @@
// Now check whether we have a TreeNode for the node itself.
int frame_tree_node_id = frame_tree_node->frame_tree_node_id();
- const std::string& unique_name =
- frame_tree_node->current_replication_state().unique_name;
for (TreeNode* child : parent_node->children) {
- if (child->frame_entry->frame_tree_node_id() == frame_tree_node_id ||
- child->frame_entry->frame_unique_name() == unique_name) {
+ if (child->frame_entry->frame_tree_node_id() == frame_tree_node_id) {
// Update the existing FrameNavigationEntry (e.g., for replaceState).
- child->frame_entry->UpdateEntry(unique_name, item_sequence_number,
+ child->frame_entry->UpdateEntry(frame_unique_name, item_sequence_number,
document_sequence_number, site_instance,
url, referrer, page_state);
return;
@@ -731,7 +721,7 @@
// Unordered list, since we expect to look up entries by frame sequence number
// or unique name.
FrameNavigationEntry* frame_entry = new FrameNavigationEntry(
- frame_tree_node_id, unique_name, item_sequence_number,
+ frame_tree_node_id, frame_unique_name, item_sequence_number,
document_sequence_number, site_instance, url, referrer);
frame_entry->set_page_state(page_state);
parent_node->children.push_back(
@@ -739,9 +729,27 @@
}
FrameNavigationEntry* NavigationEntryImpl::GetFrameEntry(
- FrameTreeNode* frame_tree_node) {
+ FrameTreeNode* frame_tree_node) const {
NavigationEntryImpl::TreeNode* tree_node = FindFrameEntry(frame_tree_node);
return tree_node ? tree_node->frame_entry.get() : nullptr;
+}
+
+FrameNavigationEntry* NavigationEntryImpl::GetFrameEntryByUniqueName(
+ const std::string& unique_name) const {
+ NavigationEntryImpl::TreeNode* node = nullptr;
+ std::queue<NavigationEntryImpl::TreeNode*> work_queue;
+ work_queue.push(root_node());
+ while (!work_queue.empty()) {
+ node = work_queue.front();
+ work_queue.pop();
+ if (node->frame_entry->frame_unique_name() == unique_name)
+ return node->frame_entry.get();
+
+ // Enqueue any children and keep looking.
+ for (auto& child : node->children)
+ work_queue.push(child);
+ }
+ return nullptr;
}
void NavigationEntryImpl::SetScreenshotPNGData(
@@ -756,7 +764,7 @@
}
NavigationEntryImpl::TreeNode* NavigationEntryImpl::FindFrameEntry(
- FrameTreeNode* frame_tree_node) {
+ FrameTreeNode* frame_tree_node) const {
NavigationEntryImpl::TreeNode* node = nullptr;
std::queue<NavigationEntryImpl::TreeNode*> work_queue;
work_queue.push(root_node());
« 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