| OLD | NEW |
| 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 <queue> | 7 #include <queue> |
| 8 | 8 |
| 9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
| 10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 95 } | 95 } |
| 96 | 96 |
| 97 NavigationEntryImpl::NavigationEntryImpl(SiteInstanceImpl* instance, | 97 NavigationEntryImpl::NavigationEntryImpl(SiteInstanceImpl* instance, |
| 98 int page_id, | 98 int page_id, |
| 99 const GURL& url, | 99 const GURL& url, |
| 100 const Referrer& referrer, | 100 const Referrer& referrer, |
| 101 const base::string16& title, | 101 const base::string16& title, |
| 102 ui::PageTransition transition_type, | 102 ui::PageTransition transition_type, |
| 103 bool is_renderer_initiated) | 103 bool is_renderer_initiated) |
| 104 : frame_tree_(new TreeNode( | 104 : frame_tree_(new TreeNode( |
| 105 new FrameNavigationEntry(-1, -1, -1, instance, url, referrer))), | 105 new FrameNavigationEntry(-1, "", -1, -1, instance, url, referrer))), |
| 106 unique_id_(GetUniqueIDInConstructor()), | 106 unique_id_(GetUniqueIDInConstructor()), |
| 107 bindings_(kInvalidBindings), | 107 bindings_(kInvalidBindings), |
| 108 page_type_(PAGE_TYPE_NORMAL), | 108 page_type_(PAGE_TYPE_NORMAL), |
| 109 update_virtual_url_with_url_(false), | 109 update_virtual_url_with_url_(false), |
| 110 title_(title), | 110 title_(title), |
| 111 page_id_(page_id), | 111 page_id_(page_id), |
| 112 transition_type_(transition_type), | 112 transition_type_(transition_type), |
| 113 has_post_data_(false), | 113 has_post_data_(false), |
| 114 post_id_(-1), | 114 post_id_(-1), |
| 115 restore_type_(RESTORE_NONE), | 115 restore_type_(RESTORE_NONE), |
| (...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 541 set_frame_tree_node_id(-1); | 541 set_frame_tree_node_id(-1); |
| 542 | 542 |
| 543 #if defined(OS_ANDROID) | 543 #if defined(OS_ANDROID) |
| 544 // Reset the time stamp so that the metrics are not reported if this entry is | 544 // Reset the time stamp so that the metrics are not reported if this entry is |
| 545 // loaded again in the future. | 545 // loaded again in the future. |
| 546 set_intent_received_timestamp(base::TimeTicks()); | 546 set_intent_received_timestamp(base::TimeTicks()); |
| 547 #endif | 547 #endif |
| 548 } | 548 } |
| 549 | 549 |
| 550 void NavigationEntryImpl::AddOrUpdateFrameEntry(FrameTreeNode* frame_tree_node, | 550 void NavigationEntryImpl::AddOrUpdateFrameEntry(FrameTreeNode* frame_tree_node, |
| 551 std::string frame_unique_name, |
| 551 int64 item_sequence_number, | 552 int64 item_sequence_number, |
| 552 int64 document_sequence_number, | 553 int64 document_sequence_number, |
| 553 SiteInstanceImpl* site_instance, | 554 SiteInstanceImpl* site_instance, |
| 554 const GURL& url, | 555 const GURL& url, |
| 555 const Referrer& referrer, | 556 const Referrer& referrer, |
| 556 const PageState& page_state) { | 557 const PageState& page_state) { |
| 557 // We should already have a TreeNode for the parent node by the time this node | 558 // We should already have a TreeNode for the parent node by the time this node |
| 558 // commits. Find it first. | 559 // commits. Find it first. |
| 559 DCHECK(frame_tree_node->parent()); | 560 DCHECK(frame_tree_node->parent()); |
| 560 NavigationEntryImpl::TreeNode* parent_node = | 561 NavigationEntryImpl::TreeNode* parent_node = |
| 561 FindFrameEntry(frame_tree_node->parent()); | 562 FindFrameEntry(frame_tree_node->parent()); |
| 562 if (!parent_node) { | 563 if (!parent_node) { |
| 563 // The renderer should not send a commit for a subframe before its parent. | 564 // The renderer should not send a commit for a subframe before its parent. |
| 564 // TODO(creis): Kill the renderer if we get here. | 565 // TODO(creis): Kill the renderer if we get here. |
| 565 return; | 566 return; |
| 566 } | 567 } |
| 567 | 568 |
| 568 // Now check whether we have a TreeNode for the node itself. | 569 // Now check whether we have a TreeNode for the node itself. |
| 569 int frame_tree_node_id = frame_tree_node->frame_tree_node_id(); | 570 int frame_tree_node_id = frame_tree_node->frame_tree_node_id(); |
| 570 for (TreeNode* child : parent_node->children) { | 571 for (TreeNode* child : parent_node->children) { |
| 571 if (child->frame_entry->frame_tree_node_id() == frame_tree_node_id) { | 572 if (child->frame_entry->frame_tree_node_id() == frame_tree_node_id) { |
| 572 // Update the existing FrameNavigationEntry (e.g., for replaceState). | 573 // Update the existing FrameNavigationEntry (e.g., for replaceState). |
| 573 child->frame_entry->UpdateEntry(item_sequence_number, | 574 child->frame_entry->UpdateEntry(frame_unique_name, item_sequence_number, |
| 574 document_sequence_number, site_instance, | 575 document_sequence_number, site_instance, |
| 575 url, referrer, page_state); | 576 url, referrer, page_state); |
| 576 return; | 577 return; |
| 577 } | 578 } |
| 578 } | 579 } |
| 579 | 580 |
| 580 // No entry exists yet, so create a new one. | 581 // No entry exists yet, so create a new one. |
| 581 // Unordered list, since we expect to look up entries by frame sequence number | 582 // Unordered list, since we expect to look up entries by frame sequence number |
| 582 // or unique name. | 583 // or unique name. |
| 583 FrameNavigationEntry* frame_entry = new FrameNavigationEntry( | 584 FrameNavigationEntry* frame_entry = new FrameNavigationEntry( |
| 584 frame_tree_node_id, item_sequence_number, document_sequence_number, | 585 frame_tree_node_id, frame_unique_name, item_sequence_number, |
| 585 site_instance, url, referrer); | 586 document_sequence_number, site_instance, url, referrer); |
| 586 frame_entry->set_page_state(page_state); | 587 frame_entry->set_page_state(page_state); |
| 587 parent_node->children.push_back( | 588 parent_node->children.push_back( |
| 588 new NavigationEntryImpl::TreeNode(frame_entry)); | 589 new NavigationEntryImpl::TreeNode(frame_entry)); |
| 589 } | 590 } |
| 590 | 591 |
| 591 FrameNavigationEntry* NavigationEntryImpl::GetFrameEntry( | 592 FrameNavigationEntry* NavigationEntryImpl::GetFrameEntry( |
| 592 FrameTreeNode* frame_tree_node) const { | 593 FrameTreeNode* frame_tree_node) const { |
| 593 NavigationEntryImpl::TreeNode* tree_node = FindFrameEntry(frame_tree_node); | 594 NavigationEntryImpl::TreeNode* tree_node = FindFrameEntry(frame_tree_node); |
| 594 return tree_node ? tree_node->frame_entry.get() : nullptr; | 595 return tree_node ? tree_node->frame_entry.get() : nullptr; |
| 595 } | 596 } |
| (...skipping 24 matching lines...) Expand all Loading... |
| 620 return node; | 621 return node; |
| 621 } | 622 } |
| 622 // Enqueue any children and keep looking. | 623 // Enqueue any children and keep looking. |
| 623 for (auto& child : node->children) | 624 for (auto& child : node->children) |
| 624 work_queue.push(child); | 625 work_queue.push(child); |
| 625 } | 626 } |
| 626 return nullptr; | 627 return nullptr; |
| 627 } | 628 } |
| 628 | 629 |
| 629 } // namespace content | 630 } // namespace content |
| OLD | NEW |