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

Side by Side Diff: content/browser/frame_host/navigation_entry_impl.cc

Issue 1006693002: Add NavigationEntryImpl::TreeNode for tracking FrameNavigationEntries. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Initial patch 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 unified diff | Download patch
OLDNEW
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 "base/metrics/histogram.h" 7 #include "base/metrics/histogram.h"
8 #include "base/strings/string_util.h" 8 #include "base/strings/string_util.h"
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "content/browser/frame_host/navigation_controller_impl.h" 10 #include "content/browser/frame_host/navigation_controller_impl.h"
11 #include "content/common/navigation_params.h" 11 #include "content/common/navigation_params.h"
12 #include "content/public/common/content_constants.h" 12 #include "content/public/common/content_constants.h"
13 #include "content/public/common/url_constants.h" 13 #include "content/public/common/url_constants.h"
14 #include "net/base/net_util.h" 14 #include "net/base/net_util.h"
15 #include "ui/gfx/text_elider.h" 15 #include "ui/gfx/text_elider.h"
16 16
17 // Use this to get a new unique ID for a NavigationEntry during construction. 17 // Use this to get a new unique ID for a NavigationEntry during construction.
18 // The returned ID is guaranteed to be nonzero (which is the "no ID" indicator). 18 // The returned ID is guaranteed to be nonzero (which is the "no ID" indicator).
19 static int GetUniqueIDInConstructor() { 19 static int GetUniqueIDInConstructor() {
20 static int unique_id_counter = 0; 20 static int unique_id_counter = 0;
21 return ++unique_id_counter; 21 return ++unique_id_counter;
22 } 22 }
23 23
24 namespace content { 24 namespace content {
25 25
26 int NavigationEntryImpl::kInvalidBindings = -1; 26 int NavigationEntryImpl::kInvalidBindings = -1;
27 27
28 NavigationEntryImpl::TreeNode::TreeNode(FrameNavigationEntry* frame_entry)
29 : frame_entry(frame_entry) {
30 }
31
32 NavigationEntryImpl::TreeNode::~TreeNode() {
33 }
34
35 NavigationEntryImpl::TreeNode* NavigationEntryImpl::TreeNode::Clone() const {
36 // Clone the tree using a copy of the FrameNavigationEntry, without sharing.
37 NavigationEntryImpl::TreeNode* copy =
38 new NavigationEntryImpl::TreeNode(frame_entry->Clone());
39
40 // TODO(creis): Clone children once we add them.
41 return copy;
42 }
43
28 NavigationEntry* NavigationEntry::Create() { 44 NavigationEntry* NavigationEntry::Create() {
29 return new NavigationEntryImpl(); 45 return new NavigationEntryImpl();
30 } 46 }
31 47
32 NavigationEntryImpl* NavigationEntryImpl::FromNavigationEntry( 48 NavigationEntryImpl* NavigationEntryImpl::FromNavigationEntry(
33 NavigationEntry* entry) { 49 NavigationEntry* entry) {
34 return static_cast<NavigationEntryImpl*>(entry); 50 return static_cast<NavigationEntryImpl*>(entry);
35 } 51 }
36 52
37 NavigationEntryImpl::NavigationEntryImpl() 53 NavigationEntryImpl::NavigationEntryImpl()
38 : NavigationEntryImpl(nullptr, -1, GURL(), Referrer(), base::string16(), 54 : NavigationEntryImpl(nullptr, -1, GURL(), Referrer(), base::string16(),
39 ui::PAGE_TRANSITION_LINK, false) { 55 ui::PAGE_TRANSITION_LINK, false) {
40 } 56 }
41 57
42 NavigationEntryImpl::NavigationEntryImpl(SiteInstanceImpl* instance, 58 NavigationEntryImpl::NavigationEntryImpl(SiteInstanceImpl* instance,
43 int page_id, 59 int page_id,
44 const GURL& url, 60 const GURL& url,
45 const Referrer& referrer, 61 const Referrer& referrer,
46 const base::string16& title, 62 const base::string16& title,
47 ui::PageTransition transition_type, 63 ui::PageTransition transition_type,
48 bool is_renderer_initiated) 64 bool is_renderer_initiated)
49 : frame_entry_(instance, url, referrer), 65 : frame_tree_(
66 new TreeNode(new FrameNavigationEntry(instance, url, referrer))),
50 unique_id_(GetUniqueIDInConstructor()), 67 unique_id_(GetUniqueIDInConstructor()),
51 bindings_(kInvalidBindings), 68 bindings_(kInvalidBindings),
52 page_type_(PAGE_TYPE_NORMAL), 69 page_type_(PAGE_TYPE_NORMAL),
53 update_virtual_url_with_url_(false), 70 update_virtual_url_with_url_(false),
54 title_(title), 71 title_(title),
55 page_id_(page_id), 72 page_id_(page_id),
56 transition_type_(transition_type), 73 transition_type_(transition_type),
57 has_post_data_(false), 74 has_post_data_(false),
58 post_id_(-1), 75 post_id_(-1),
59 restore_type_(RESTORE_NONE), 76 restore_type_(RESTORE_NONE),
(...skipping 11 matching lines...) Expand all
71 88
72 int NavigationEntryImpl::GetUniqueID() const { 89 int NavigationEntryImpl::GetUniqueID() const {
73 return unique_id_; 90 return unique_id_;
74 } 91 }
75 92
76 PageType NavigationEntryImpl::GetPageType() const { 93 PageType NavigationEntryImpl::GetPageType() const {
77 return page_type_; 94 return page_type_;
78 } 95 }
79 96
80 void NavigationEntryImpl::SetURL(const GURL& url) { 97 void NavigationEntryImpl::SetURL(const GURL& url) {
81 frame_entry_.set_url(url); 98 frame_tree_->frame_entry->set_url(url);
82 cached_display_title_.clear(); 99 cached_display_title_.clear();
83 } 100 }
84 101
85 const GURL& NavigationEntryImpl::GetURL() const { 102 const GURL& NavigationEntryImpl::GetURL() const {
86 return frame_entry_.url(); 103 return frame_tree_->frame_entry->url();
87 } 104 }
88 105
89 void NavigationEntryImpl::SetBaseURLForDataURL(const GURL& url) { 106 void NavigationEntryImpl::SetBaseURLForDataURL(const GURL& url) {
90 base_url_for_data_url_ = url; 107 base_url_for_data_url_ = url;
91 } 108 }
92 109
93 const GURL& NavigationEntryImpl::GetBaseURLForDataURL() const { 110 const GURL& NavigationEntryImpl::GetBaseURLForDataURL() const {
94 return base_url_for_data_url_; 111 return base_url_for_data_url_;
95 } 112 }
96 113
97 void NavigationEntryImpl::SetReferrer(const Referrer& referrer) { 114 void NavigationEntryImpl::SetReferrer(const Referrer& referrer) {
98 frame_entry_.set_referrer(referrer); 115 frame_tree_->frame_entry->set_referrer(referrer);
99 } 116 }
100 117
101 const Referrer& NavigationEntryImpl::GetReferrer() const { 118 const Referrer& NavigationEntryImpl::GetReferrer() const {
102 return frame_entry_.referrer(); 119 return frame_tree_->frame_entry->referrer();
103 } 120 }
104 121
105 void NavigationEntryImpl::SetVirtualURL(const GURL& url) { 122 void NavigationEntryImpl::SetVirtualURL(const GURL& url) {
106 virtual_url_ = (url == GetURL()) ? GURL() : url; 123 virtual_url_ = (url == GetURL()) ? GURL() : url;
107 cached_display_title_.clear(); 124 cached_display_title_.clear();
108 } 125 }
109 126
110 const GURL& NavigationEntryImpl::GetVirtualURL() const { 127 const GURL& NavigationEntryImpl::GetVirtualURL() const {
111 return virtual_url_.is_empty() ? GetURL() : virtual_url_; 128 return virtual_url_.is_empty() ? GetURL() : virtual_url_;
112 } 129 }
(...skipping 17 matching lines...) Expand all
130 147
131 void NavigationEntryImpl::SetPageID(int page_id) { 148 void NavigationEntryImpl::SetPageID(int page_id) {
132 page_id_ = page_id; 149 page_id_ = page_id;
133 } 150 }
134 151
135 int32 NavigationEntryImpl::GetPageID() const { 152 int32 NavigationEntryImpl::GetPageID() const {
136 return page_id_; 153 return page_id_;
137 } 154 }
138 155
139 void NavigationEntryImpl::set_site_instance(SiteInstanceImpl* site_instance) { 156 void NavigationEntryImpl::set_site_instance(SiteInstanceImpl* site_instance) {
140 frame_entry_.set_site_instance(site_instance); 157 // TODO(creis): Update all callers and remove this method.
158 frame_tree_->frame_entry->set_site_instance(site_instance);
141 } 159 }
142 160
143 void NavigationEntryImpl::set_source_site_instance( 161 void NavigationEntryImpl::set_source_site_instance(
144 SiteInstanceImpl* source_site_instance) { 162 SiteInstanceImpl* source_site_instance) {
145 source_site_instance_ = source_site_instance; 163 source_site_instance_ = source_site_instance;
146 } 164 }
147 165
148 void NavigationEntryImpl::SetBindings(int bindings) { 166 void NavigationEntryImpl::SetBindings(int bindings) {
149 // Ensure this is set to a valid value, and that it stays the same once set. 167 // Ensure this is set to a valid value, and that it stays the same once set.
150 CHECK_NE(bindings, kInvalidBindings); 168 CHECK_NE(bindings, kInvalidBindings);
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 return true; 337 return true;
320 } 338 }
321 339
322 void NavigationEntryImpl::ClearExtraData(const std::string& key) { 340 void NavigationEntryImpl::ClearExtraData(const std::string& key) {
323 extra_data_.erase(key); 341 extra_data_.erase(key);
324 } 342 }
325 343
326 NavigationEntryImpl* NavigationEntryImpl::Clone() const { 344 NavigationEntryImpl* NavigationEntryImpl::Clone() const {
327 NavigationEntryImpl* copy = new NavigationEntryImpl(); 345 NavigationEntryImpl* copy = new NavigationEntryImpl();
328 346
329 // TODO(creis): Once we have a tree of FrameNavigationEntries, make a deep 347 // TODO(creis): Only share the same FrameNavigationEntries if cloning within
330 // copy. Only share the same FrameNavigationEntries if cloning within the 348 // the same tab.
331 // same tab. 349 copy->frame_tree_.reset(frame_tree_->Clone());
332 copy->frame_entry_ = frame_entry_;
333 350
334 // Copy all state over, unless cleared in ResetForCommit. 351 // Copy all state over, unless cleared in ResetForCommit.
335 copy->unique_id_ = unique_id_; 352 copy->unique_id_ = unique_id_;
336 copy->bindings_ = bindings_; 353 copy->bindings_ = bindings_;
337 copy->page_type_ = page_type_; 354 copy->page_type_ = page_type_;
338 copy->virtual_url_ = virtual_url_; 355 copy->virtual_url_ = virtual_url_;
339 copy->update_virtual_url_with_url_ = update_virtual_url_with_url_; 356 copy->update_virtual_url_with_url_ = update_virtual_url_with_url_;
340 copy->title_ = title_; 357 copy->title_ = title_;
341 copy->favicon_ = favicon_; 358 copy->favicon_ = favicon_;
342 copy->page_state_ = page_state_; 359 copy->page_state_ = page_state_;
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 GetBrowserInitiatedPostData()->size()); 479 GetBrowserInitiatedPostData()->size());
463 } 480 }
464 481
465 return StartNavigationParams( 482 return StartNavigationParams(
466 GetHasPostData(), extra_headers(), browser_initiated_post_data, 483 GetHasPostData(), extra_headers(), browser_initiated_post_data,
467 should_replace_entry(), transferred_global_request_id().child_id, 484 should_replace_entry(), transferred_global_request_id().child_id,
468 transferred_global_request_id().request_id); 485 transferred_global_request_id().request_id);
469 } 486 }
470 487
471 } // namespace content 488 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698