| 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 5f156cd26236978174005c0c28de459ab6487a99..c7a84de7ff38c08f8db23c1c33af7a462c4c7cd5 100644
|
| --- a/content/browser/frame_host/navigation_entry_impl.cc
|
| +++ b/content/browser/frame_host/navigation_entry_impl.cc
|
| @@ -25,6 +25,22 @@ namespace content {
|
|
|
| int NavigationEntryImpl::kInvalidBindings = -1;
|
|
|
| +NavigationEntryImpl::TreeNode::TreeNode(FrameNavigationEntry* frame_entry)
|
| + : frame_entry(frame_entry) {
|
| +}
|
| +
|
| +NavigationEntryImpl::TreeNode::~TreeNode() {
|
| +}
|
| +
|
| +NavigationEntryImpl::TreeNode* NavigationEntryImpl::TreeNode::Clone() const {
|
| + // Clone the tree using a copy of the FrameNavigationEntry, without sharing.
|
| + NavigationEntryImpl::TreeNode* copy =
|
| + new NavigationEntryImpl::TreeNode(frame_entry->Clone());
|
| +
|
| + // TODO(creis): Clone children once we add them.
|
| + return copy;
|
| +}
|
| +
|
| NavigationEntry* NavigationEntry::Create() {
|
| return new NavigationEntryImpl();
|
| }
|
| @@ -46,7 +62,8 @@ NavigationEntryImpl::NavigationEntryImpl(SiteInstanceImpl* instance,
|
| const base::string16& title,
|
| ui::PageTransition transition_type,
|
| bool is_renderer_initiated)
|
| - : frame_entry_(instance, url, referrer),
|
| + : frame_tree_(
|
| + new TreeNode(new FrameNavigationEntry(instance, url, referrer))),
|
| unique_id_(GetUniqueIDInConstructor()),
|
| bindings_(kInvalidBindings),
|
| page_type_(PAGE_TYPE_NORMAL),
|
| @@ -78,12 +95,12 @@ PageType NavigationEntryImpl::GetPageType() const {
|
| }
|
|
|
| void NavigationEntryImpl::SetURL(const GURL& url) {
|
| - frame_entry_.set_url(url);
|
| + frame_tree_->frame_entry->set_url(url);
|
| cached_display_title_.clear();
|
| }
|
|
|
| const GURL& NavigationEntryImpl::GetURL() const {
|
| - return frame_entry_.url();
|
| + return frame_tree_->frame_entry->url();
|
| }
|
|
|
| void NavigationEntryImpl::SetBaseURLForDataURL(const GURL& url) {
|
| @@ -95,11 +112,11 @@ const GURL& NavigationEntryImpl::GetBaseURLForDataURL() const {
|
| }
|
|
|
| void NavigationEntryImpl::SetReferrer(const Referrer& referrer) {
|
| - frame_entry_.set_referrer(referrer);
|
| + frame_tree_->frame_entry->set_referrer(referrer);
|
| }
|
|
|
| const Referrer& NavigationEntryImpl::GetReferrer() const {
|
| - return frame_entry_.referrer();
|
| + return frame_tree_->frame_entry->referrer();
|
| }
|
|
|
| void NavigationEntryImpl::SetVirtualURL(const GURL& url) {
|
| @@ -137,7 +154,8 @@ int32 NavigationEntryImpl::GetPageID() const {
|
| }
|
|
|
| void NavigationEntryImpl::set_site_instance(SiteInstanceImpl* site_instance) {
|
| - frame_entry_.set_site_instance(site_instance);
|
| + // TODO(creis): Update all callers and remove this method.
|
| + frame_tree_->frame_entry->set_site_instance(site_instance);
|
| }
|
|
|
| void NavigationEntryImpl::set_source_site_instance(
|
| @@ -326,10 +344,9 @@ void NavigationEntryImpl::ClearExtraData(const std::string& key) {
|
| NavigationEntryImpl* NavigationEntryImpl::Clone() const {
|
| NavigationEntryImpl* copy = new NavigationEntryImpl();
|
|
|
| - // TODO(creis): Once we have a tree of FrameNavigationEntries, make a deep
|
| - // copy. Only share the same FrameNavigationEntries if cloning within the
|
| - // same tab.
|
| - copy->frame_entry_ = frame_entry_;
|
| + // TODO(creis): Only share the same FrameNavigationEntries if cloning within
|
| + // the same tab.
|
| + copy->frame_tree_.reset(frame_tree_->Clone());
|
|
|
| // Copy all state over, unless cleared in ResetForCommit.
|
| copy->unique_id_ = unique_id_;
|
|
|