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

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

Issue 281653003: DRAFT CL: Add FrameNavigationEntry and track subframe session histories. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 5 years, 9 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
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 c7a84de7ff38c08f8db23c1c33af7a462c4c7cd5..2d8b7bb062b1034c8a8d234b05ac03a96dc57594 100644
--- a/content/browser/frame_host/navigation_entry_impl.cc
+++ b/content/browser/frame_host/navigation_entry_impl.cc
@@ -25,8 +25,12 @@ namespace content {
int NavigationEntryImpl::kInvalidBindings = -1;
-NavigationEntryImpl::TreeNode::TreeNode(FrameNavigationEntry* frame_entry)
- : frame_entry(frame_entry) {
+NavigationEntryImpl::TreeNode::TreeNode(NavigationEntryImpl* entry,
+ FrameNavigationEntry* frame_entry)
+ : entry(entry),
+ frame_entry(nullptr) {
+ if (frame_entry)
+ SetFrameEntry(frame_entry);
}
NavigationEntryImpl::TreeNode::~TreeNode() {
@@ -34,13 +38,24 @@ NavigationEntryImpl::TreeNode::~TreeNode() {
NavigationEntryImpl::TreeNode* NavigationEntryImpl::TreeNode::Clone() const {
// Clone the tree using a copy of the FrameNavigationEntry, without sharing.
+ // TODO(creis): Should not have an |entry| in TreeNode. Currently sharing
+ // it, which is very wrong.
NavigationEntryImpl::TreeNode* copy =
- new NavigationEntryImpl::TreeNode(frame_entry->Clone());
+ new NavigationEntryImpl::TreeNode(entry, frame_entry->Clone());
// TODO(creis): Clone children once we add them.
return copy;
}
+void NavigationEntryImpl::TreeNode::SetFrameEntry(
+ FrameNavigationEntry* new_frame_entry) {
+ frame_entry = new_frame_entry;
+ entry->frames_to_items_[new_frame_entry->frame_tree_node_id()] = this;
+
+ // TODO(creis): Move NE::frame_to_target_ to FNE::target_.
+ //entry->unique_names_to_items_[frame_entry->target()] = this;
+}
+
NavigationEntry* NavigationEntry::Create() {
return new NavigationEntryImpl();
}
@@ -62,8 +77,8 @@ NavigationEntryImpl::NavigationEntryImpl(SiteInstanceImpl* instance,
const base::string16& title,
ui::PageTransition transition_type,
bool is_renderer_initiated)
- : frame_tree_(
- new TreeNode(new FrameNavigationEntry(instance, url, referrer))),
+ : frame_tree_(new TreeNode(
+ this, new FrameNavigationEntry(instance, url, referrer))),
unique_id_(GetUniqueIDInConstructor()),
bindings_(kInvalidBindings),
page_type_(PAGE_TYPE_NORMAL),
@@ -79,8 +94,7 @@ NavigationEntryImpl::NavigationEntryImpl(SiteInstanceImpl* instance,
is_renderer_initiated_(is_renderer_initiated),
should_replace_entry_(false),
should_clear_history_list_(false),
- can_load_local_resources_(false),
- frame_tree_node_id_(-1) {
+ can_load_local_resources_(false) {
}
NavigationEntryImpl::~NavigationEntryImpl() {
@@ -138,11 +152,12 @@ const base::string16& NavigationEntryImpl::GetTitle() const {
}
void NavigationEntryImpl::SetPageState(const PageState& state) {
- page_state_ = state;
+ CHECK(state.ToEncodedData().empty() || state.IsValid());
+ frame_tree_->frame_entry->set_page_state(state);
}
const PageState& NavigationEntryImpl::GetPageState() const {
- return page_state_;
+ return frame_tree_->frame_entry->page_state();
}
void NavigationEntryImpl::SetPageID(int page_id) {
@@ -341,6 +356,31 @@ void NavigationEntryImpl::ClearExtraData(const std::string& key) {
extra_data_.erase(key);
}
+void NavigationEntryImpl::ResetFrameTree() {
+ frame_tree_.reset(new TreeNode(this, nullptr));
+}
+
+NavigationEntryImpl::TreeNode* NavigationEntryImpl::GetTreeNodeForFrame(
+ FrameTreeNode* frame_tree_node) {
+ // Search based on FTN ID and unique name.
+ // TODO(creis): We had been using a map of routing ID to frame sequence num.
+ // Is that useful here?
+ if (TreeNode* node = frames_to_items_[frame_tree_node->frame_tree_node_id()])
+ return node;
+ // TODO(creis): Move NE::frame_to_target_ to FNE::target_.
+ //if (TreeNode* node = unique_names_to_items_[frame_tree_node->name()])
+ // return node;
+ return nullptr;
+}
+
+FrameNavigationEntry* NavigationEntryImpl::GetFrameEntryForFrame(
+ FrameTreeNode* frame_tree_node) {
+ TreeNode* node = GetTreeNodeForFrame(frame_tree_node);
+ if (node)
+ return node->frame_entry.get();
+ return nullptr;
+}
+
NavigationEntryImpl* NavigationEntryImpl::Clone() const {
NavigationEntryImpl* copy = new NavigationEntryImpl();
@@ -356,7 +396,6 @@ NavigationEntryImpl* NavigationEntryImpl::Clone() const {
copy->update_virtual_url_with_url_ = update_virtual_url_with_url_;
copy->title_ = title_;
copy->favicon_ = favicon_;
- copy->page_state_ = page_state_;
copy->page_id_ = page_id_;
copy->ssl_ = ssl_;
copy->transition_type_ = transition_type_;
@@ -399,7 +438,6 @@ void NavigationEntryImpl::ResetForCommit() {
set_should_replace_entry(false);
set_should_clear_history_list(false);
- set_frame_tree_node_id(-1);
#if defined(OS_ANDROID)
// Reset the time stamp so that the metrics are not reported if this entry is
@@ -420,6 +458,7 @@ GURL NavigationEntryImpl::GetHistoryURLForDataURL() const {
}
CommonNavigationParams NavigationEntryImpl::ConstructCommonNavigationParams(
+ const FrameNavigationEntry& frame_entry,
FrameMsg_Navigate_Type::Value navigation_type) const {
FrameMsg_UILoadMetricsReportType::Value report_type =
FrameMsg_UILoadMetricsReportType::NO_REPORT;
@@ -431,9 +470,9 @@ CommonNavigationParams NavigationEntryImpl::ConstructCommonNavigationParams(
#endif
return CommonNavigationParams(
- GetURL(), GetReferrer(), GetTransitionType(), navigation_type,
- !IsViewSourceMode(), ui_timestamp, report_type, GetBaseURLForDataURL(),
- GetHistoryURLForDataURL());
+ frame_entry.url(), frame_entry.referrer(), GetTransitionType(),
+ navigation_type, !IsViewSourceMode(), ui_timestamp, report_type,
+ GetBaseURLForDataURL(), GetHistoryURLForDataURL());
}
CommitNavigationParams NavigationEntryImpl::ConstructCommitNavigationParams(
@@ -451,6 +490,7 @@ CommitNavigationParams NavigationEntryImpl::ConstructCommitNavigationParams(
}
HistoryNavigationParams NavigationEntryImpl::ConstructHistoryNavigationParams(
+ const FrameNavigationEntry& frame_entry,
NavigationControllerImpl* controller) const {
int pending_history_list_offset = controller->GetIndexOfEntry(this);
int current_history_list_offset = controller->GetLastCommittedEntryIndex();
@@ -464,7 +504,7 @@ HistoryNavigationParams NavigationEntryImpl::ConstructHistoryNavigationParams(
current_history_list_length = 0;
}
return HistoryNavigationParams(
- GetPageState(), GetPageID(), pending_history_list_offset,
+ frame_entry.page_state(), GetPageID(), pending_history_list_offset,
current_history_list_offset, current_history_list_length,
should_clear_history_list());
}
« no previous file with comments | « content/browser/frame_host/navigation_entry_impl.h ('k') | content/browser/frame_host/navigation_request.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698