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

Unified Diff: components/sessions/serialized_navigation_entry.cc

Issue 658073004: Rewrites SerializedNavigationEntry to not have any //content member variables. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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: components/sessions/serialized_navigation_entry.cc
diff --git a/components/sessions/serialized_navigation_entry.cc b/components/sessions/serialized_navigation_entry.cc
index b45ffd7ffc65e931e4e07f8f9275cdf241638c12..a05c585b713df10708bf526e751463c0d058d79e 100644
--- a/components/sessions/serialized_navigation_entry.cc
+++ b/components/sessions/serialized_navigation_entry.cc
@@ -28,7 +28,9 @@ SerializedNavigationEntry::SerializedNavigationEntry()
is_overriding_user_agent_(false),
http_status_code_(0),
is_restored_(false),
- blocked_state_(STATE_INVALID) {}
+ blocked_state_(STATE_INVALID) {
+ referrer_policy_ = GetDefaultReferrerPolicy();
+}
SerializedNavigationEntry::~SerializedNavigationEntry() {}
@@ -39,10 +41,11 @@ SerializedNavigationEntry SerializedNavigationEntry::FromNavigationEntry(
SerializedNavigationEntry navigation;
navigation.index_ = index;
navigation.unique_id_ = entry.GetUniqueID();
- navigation.referrer_ = entry.GetReferrer();
+ navigation.referrer_url_ = entry.GetReferrer().url;
+ navigation.referrer_policy_ = entry.GetReferrer().policy;
navigation.virtual_url_ = entry.GetVirtualURL();
navigation.title_ = entry.GetTitle();
- navigation.page_state_ = entry.GetPageState();
+ navigation.encoded_page_state_ = entry.GetPageState().ToEncodedData();
navigation.transition_type_ = entry.GetTransitionType();
navigation.has_post_data_ = entry.GetHasPostData();
navigation.post_id_ = entry.GetPostID();
@@ -68,13 +71,11 @@ SerializedNavigationEntry SerializedNavigationEntry::FromSyncData(
SerializedNavigationEntry navigation;
navigation.index_ = index;
navigation.unique_id_ = sync_data.unique_id();
- navigation.referrer_ = content::Referrer(
- GURL(sync_data.referrer()),
- static_cast<blink::WebReferrerPolicy>(sync_data.referrer_policy()));
+ navigation.referrer_url_ = GURL(sync_data.referrer());
+ navigation.referrer_policy_ = sync_data.referrer_policy();
navigation.virtual_url_ = GURL(sync_data.virtual_url());
navigation.title_ = base::UTF8ToUTF16(sync_data.title());
- navigation.page_state_ =
- content::PageState::CreateFromEncodedData(sync_data.state());
+ navigation.encoded_page_state_ = sync_data.state();
uint32 transition = 0;
if (sync_data.has_page_transition()) {
@@ -210,13 +211,14 @@ enum TypeMask {
// index_
// virtual_url_
// title_
-// page_state_
+// encoded_page_state_
rohitrao (ping after 24h) 2014/10/17 15:15:54 The PageState was always written to the pickle as
// transition_type_
//
// Added on later:
//
// type_mask (has_post_data_)
-// referrer_
+// referrer_url_
+// referrer_policy_
rohitrao (ping after 24h) 2014/10/17 15:15:53 I've added referrer_policy_ here to be explicit, b
// original_request_url_
// is_overriding_user_agent_
// timestamp_
@@ -234,12 +236,8 @@ void SerializedNavigationEntry::WriteToPickle(int max_size,
WriteString16ToPickle(pickle, &bytes_written, max_size, title_);
- content::PageState page_state = page_state_;
- if (has_post_data_)
- page_state = page_state.RemovePasswordData();
-
- WriteStringToPickle(pickle, &bytes_written, max_size,
- page_state.ToEncodedData());
+ const std::string encoded_page_state = GetSanitizedPageStateForPickle();
+ WriteStringToPickle(pickle, &bytes_written, max_size, encoded_page_state);
pickle->WriteInt(transition_type_);
@@ -248,9 +246,9 @@ void SerializedNavigationEntry::WriteToPickle(int max_size,
WriteStringToPickle(
pickle, &bytes_written, max_size,
- referrer_.url.is_valid() ? referrer_.url.spec() : std::string());
+ referrer_url_.is_valid() ? referrer_url_.spec() : std::string());
- pickle->WriteInt(referrer_.policy);
+ pickle->WriteInt(referrer_policy_);
// Save info required to override the user agent.
WriteStringToPickle(
@@ -267,16 +265,15 @@ void SerializedNavigationEntry::WriteToPickle(int max_size,
bool SerializedNavigationEntry::ReadFromPickle(PickleIterator* iterator) {
*this = SerializedNavigationEntry();
- std::string virtual_url_spec, page_state_data;
+ std::string virtual_url_spec;
int transition_type_int = 0;
if (!iterator->ReadInt(&index_) ||
!iterator->ReadString(&virtual_url_spec) ||
!iterator->ReadString16(&title_) ||
- !iterator->ReadString(&page_state_data) ||
+ !iterator->ReadString(&encoded_page_state_) ||
!iterator->ReadInt(&transition_type_int))
return false;
virtual_url_ = GURL(virtual_url_spec);
- page_state_ = content::PageState::CreateFromEncodedData(page_state_data);
transition_type_ = ui::PageTransitionFromInt(transition_type_int);
// type_mask did not always exist in the written stream. As such, we
@@ -291,15 +288,12 @@ bool SerializedNavigationEntry::ReadFromPickle(PickleIterator* iterator) {
std::string referrer_spec;
if (!iterator->ReadString(&referrer_spec))
referrer_spec = std::string();
+ referrer_url_ = GURL(referrer_spec);
+
// The "referrer policy" property was added even later, so we fall back to
// the default policy if the property is not present.
- int policy_int;
- blink::WebReferrerPolicy policy;
- if (iterator->ReadInt(&policy_int))
- policy = static_cast<blink::WebReferrerPolicy>(policy_int);
- else
- policy = blink::WebReferrerPolicyDefault;
- referrer_ = content::Referrer(GURL(referrer_spec), policy);
+ if (!iterator->ReadInt(&referrer_policy_))
+ referrer_policy_ = GetDefaultReferrerPolicy();
// If the original URL can't be found, leave it empty.
std::string original_request_url_spec;
@@ -339,7 +333,9 @@ scoped_ptr<NavigationEntry> SerializedNavigationEntry::ToNavigationEntry(
scoped_ptr<NavigationEntry> entry(
content::NavigationController::CreateNavigationEntry(
virtual_url_,
- referrer_,
+ content::Referrer(
+ referrer_url_,
+ static_cast<blink::WebReferrerPolicy>(referrer_policy_)),
// Use a transition type of reload so that we don't incorrectly
// increase the typed count.
ui::PAGE_TRANSITION_RELOAD,
@@ -349,7 +345,8 @@ scoped_ptr<NavigationEntry> SerializedNavigationEntry::ToNavigationEntry(
browser_context));
entry->SetTitle(title_);
- entry->SetPageState(page_state_);
+ entry->SetPageState(
+ content::PageState::CreateFromEncodedData(encoded_page_state_));
entry->SetPageID(page_id);
entry->SetHasPostData(has_post_data_);
entry->SetPostID(post_id_);
@@ -372,8 +369,8 @@ scoped_ptr<NavigationEntry> SerializedNavigationEntry::ToNavigationEntry(
sync_pb::TabNavigation SerializedNavigationEntry::ToSyncData() const {
sync_pb::TabNavigation sync_data;
sync_data.set_virtual_url(virtual_url_.spec());
- sync_data.set_referrer(referrer_.url.spec());
- sync_data.set_referrer_policy(referrer_.policy);
+ sync_data.set_referrer(referrer_url_.spec());
+ sync_data.set_referrer_policy(referrer_policy_);
sync_data.set_title(base::UTF16ToUTF8(title_));
// Page transition core.
@@ -509,16 +506,40 @@ std::vector<NavigationEntry*> SerializedNavigationEntry::ToNavigationEntries(
return entries;
}
+// TODO(rohitrao): Move this content-specific code into a
+// SerializedNavigationEntryHelper class.
+int SerializedNavigationEntry::GetDefaultReferrerPolicy() const {
rohitrao (ping after 24h) 2014/10/17 15:15:53 I've tried to move the remaining content-specific
+ return blink::WebReferrerPolicyDefault;
+}
+
+std::string SerializedNavigationEntry::GetSanitizedPageStateForPickle() const {
blundell 2014/10/17 15:19:28 nit: Add a TODO here like you have in the other tw
rohitrao (ping after 24h) 2014/10/20 13:24:49 Done.
+ content::PageState page_state =
+ content::PageState::CreateFromEncodedData(encoded_page_state_);
rohitrao (ping after 24h) 2014/10/17 15:15:53 There will be some places where we now do an addit
+ if (has_post_data_)
+ page_state = page_state.RemovePasswordData();
+
+ return page_state.ToEncodedData();
+}
+
+// TODO(rohitrao): Move this content-specific code into a
+// SerializedNavigationEntryHelper class.
void SerializedNavigationEntry::Sanitize() {
+ content::Referrer old_referrer(
+ referrer_url_,
+ static_cast<blink::WebReferrerPolicy>(referrer_policy_));
content::Referrer new_referrer =
- content::Referrer::SanitizeForRequest(virtual_url_, referrer_);
+ content::Referrer::SanitizeForRequest(virtual_url_, old_referrer);
// No need to compare the policy, as it doesn't change during
// sanitization. If there has been a change, the referrer needs to be
// stripped from the page state as well.
- if (referrer_.url != new_referrer.url) {
- referrer_ = content::Referrer();
- page_state_ = page_state_.RemoveReferrer();
+ if (referrer_url_ != new_referrer.url) {
+ referrer_url_ = GURL();
+ referrer_policy_ = GetDefaultReferrerPolicy();
+ encoded_page_state_ =
+ content::PageState::CreateFromEncodedData(encoded_page_state_)
+ .RemoveReferrer()
+ .ToEncodedData();
}
}

Powered by Google App Engine
This is Rietveld 408576698