| 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());
|
|
|