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 424 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
540 set_should_clear_history_list(false); | 540 set_should_clear_history_list(false); |
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( |
551 int64 item_sequence_number, | 551 FrameTreeNode* frame_tree_node, |
552 int64 document_sequence_number, | 552 const std::string& frame_unique_name, |
553 SiteInstanceImpl* site_instance, | 553 int64 item_sequence_number, |
554 const GURL& url, | 554 int64 document_sequence_number, |
555 const Referrer& referrer, | 555 SiteInstanceImpl* site_instance, |
556 const PageState& page_state) { | 556 const GURL& url, |
| 557 const Referrer& referrer, |
| 558 const PageState& page_state) { |
557 // We should already have a TreeNode for the parent node by the time this node | 559 // We should already have a TreeNode for the parent node by the time this node |
558 // commits. Find it first. | 560 // commits. Find it first. |
559 DCHECK(frame_tree_node->parent()); | 561 DCHECK(frame_tree_node->parent()); |
560 NavigationEntryImpl::TreeNode* parent_node = | 562 NavigationEntryImpl::TreeNode* parent_node = |
561 FindFrameEntry(frame_tree_node->parent()); | 563 FindFrameEntry(frame_tree_node->parent()); |
562 if (!parent_node) { | 564 if (!parent_node) { |
563 // The renderer should not send a commit for a subframe before its parent. | 565 // The renderer should not send a commit for a subframe before its parent. |
564 // TODO(creis): Kill the renderer if we get here. | 566 // TODO(creis): Kill the renderer if we get here. |
565 return; | 567 return; |
566 } | 568 } |
567 | 569 |
568 // Now check whether we have a TreeNode for the node itself. | 570 // Now check whether we have a TreeNode for the node itself. |
569 int frame_tree_node_id = frame_tree_node->frame_tree_node_id(); | 571 int frame_tree_node_id = frame_tree_node->frame_tree_node_id(); |
570 for (TreeNode* child : parent_node->children) { | 572 for (TreeNode* child : parent_node->children) { |
571 if (child->frame_entry->frame_tree_node_id() == frame_tree_node_id) { | 573 if (child->frame_entry->frame_tree_node_id() == frame_tree_node_id) { |
572 // Update the existing FrameNavigationEntry (e.g., for replaceState). | 574 // Update the existing FrameNavigationEntry (e.g., for replaceState). |
573 child->frame_entry->UpdateEntry(item_sequence_number, | 575 child->frame_entry->UpdateEntry(frame_unique_name, item_sequence_number, |
574 document_sequence_number, site_instance, | 576 document_sequence_number, site_instance, |
575 url, referrer, page_state); | 577 url, referrer, page_state); |
576 return; | 578 return; |
577 } | 579 } |
578 } | 580 } |
579 | 581 |
580 // No entry exists yet, so create a new one. | 582 // No entry exists yet, so create a new one. |
581 // Unordered list, since we expect to look up entries by frame sequence number | 583 // Unordered list, since we expect to look up entries by frame sequence number |
582 // or unique name. | 584 // or unique name. |
583 FrameNavigationEntry* frame_entry = new FrameNavigationEntry( | 585 FrameNavigationEntry* frame_entry = new FrameNavigationEntry( |
584 frame_tree_node_id, item_sequence_number, document_sequence_number, | 586 frame_tree_node_id, frame_unique_name, item_sequence_number, |
585 site_instance, url, referrer); | 587 document_sequence_number, site_instance, url, referrer); |
586 frame_entry->set_page_state(page_state); | 588 frame_entry->set_page_state(page_state); |
587 parent_node->children.push_back( | 589 parent_node->children.push_back( |
588 new NavigationEntryImpl::TreeNode(frame_entry)); | 590 new NavigationEntryImpl::TreeNode(frame_entry)); |
589 } | 591 } |
590 | 592 |
591 FrameNavigationEntry* NavigationEntryImpl::GetFrameEntry( | 593 FrameNavigationEntry* NavigationEntryImpl::GetFrameEntry( |
592 FrameTreeNode* frame_tree_node) const { | 594 FrameTreeNode* frame_tree_node) const { |
593 NavigationEntryImpl::TreeNode* tree_node = FindFrameEntry(frame_tree_node); | 595 NavigationEntryImpl::TreeNode* tree_node = FindFrameEntry(frame_tree_node); |
594 return tree_node ? tree_node->frame_entry.get() : nullptr; | 596 return tree_node ? tree_node->frame_entry.get() : nullptr; |
595 } | 597 } |
(...skipping 24 matching lines...) Expand all Loading... |
620 return node; | 622 return node; |
621 } | 623 } |
622 // Enqueue any children and keep looking. | 624 // Enqueue any children and keep looking. |
623 for (auto& child : node->children) | 625 for (auto& child : node->children) |
624 work_queue.push(child); | 626 work_queue.push(child); |
625 } | 627 } |
626 return nullptr; | 628 return nullptr; |
627 } | 629 } |
628 | 630 |
629 } // namespace content | 631 } // namespace content |
OLD | NEW |