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

Unified Diff: components/sessions/serialized_navigation_entry.cc

Issue 869613006: Move referrer policy to a different field when serializing. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: updates Created 5 years, 11 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 4b041427bdca4ac042b1326acfb4094fe4e8f059..ab950595ec339e1fe4db5a5a019197bd02e68fa7 100644
--- a/components/sessions/serialized_navigation_entry.cc
+++ b/components/sessions/serialized_navigation_entry.cc
@@ -36,8 +36,19 @@ SerializedNavigationEntry SerializedNavigationEntry::FromSyncData(
SerializedNavigationEntry navigation;
navigation.index_ = index;
navigation.unique_id_ = sync_data.unique_id();
- navigation.referrer_url_ = GURL(sync_data.referrer());
- navigation.referrer_policy_ = sync_data.referrer_policy();
+ if (sync_data.has_correct_referrer_policy()) {
+ navigation.referrer_url_ = GURL(sync_data.referrer());
+ navigation.referrer_policy_ = sync_data.correct_referrer_policy();
+ } else {
+ int mapped_referrer_policy;
+ if (SerializedNavigationDriver::Get()->MapReferrerPolicyToNewValues(
+ sync_data.obsolete_referrer_policy(), &mapped_referrer_policy)) {
+ navigation.referrer_url_ = GURL(sync_data.referrer());
+ } else {
+ navigation.referrer_url_ = GURL();
+ }
+ navigation.referrer_policy_ = mapped_referrer_policy;
+ }
navigation.virtual_url_ = GURL(sync_data.virtual_url());
navigation.title_ = base::UTF8ToUTF16(sync_data.title());
navigation.encoded_page_state_ = sync_data.state();
@@ -183,12 +194,13 @@ enum TypeMask {
//
// type_mask (has_post_data_)
// referrer_url_
-// referrer_policy_
+// referrer_policy_ (broken, crbug.com/450589)
// original_request_url_
// is_overriding_user_agent_
// timestamp_
// search_terms_
// http_status_code_
+// referrer_policy_
void SerializedNavigationEntry::WriteToPickle(int max_size,
Pickle* pickle) const {
@@ -210,11 +222,15 @@ void SerializedNavigationEntry::WriteToPickle(int max_size,
const int type_mask = has_post_data_ ? HAS_POST_DATA : 0;
pickle->WriteInt(type_mask);
- WriteStringToPickle(
- pickle, &bytes_written, max_size,
- referrer_url_.is_valid() ? referrer_url_.spec() : std::string());
-
- pickle->WriteInt(referrer_policy_);
+ int mapped_referrer_policy;
+ if (SerializedNavigationDriver::Get()->MapReferrerPolicyToOldValues(
+ referrer_policy_, &mapped_referrer_policy) &&
+ referrer_url_.is_valid()) {
+ WriteStringToPickle(pickle, &bytes_written, max_size, referrer_url_.spec());
+ } else {
+ WriteStringToPickle(pickle, &bytes_written, max_size, std::string());
+ }
+ pickle->WriteInt(mapped_referrer_policy);
// Save info required to override the user agent.
WriteStringToPickle(
@@ -227,6 +243,8 @@ void SerializedNavigationEntry::WriteToPickle(int max_size,
WriteString16ToPickle(pickle, &bytes_written, max_size, search_terms_);
pickle->WriteInt(http_status_code_);
+
+ pickle->WriteInt(referrer_policy_);
}
bool SerializedNavigationEntry::ReadFromPickle(PickleIterator* iterator) {
@@ -258,9 +276,13 @@ bool SerializedNavigationEntry::ReadFromPickle(PickleIterator* iterator) {
// The "referrer policy" property was added even later, so we fall back to
// the default policy if the property is not present.
- if (!iterator->ReadInt(&referrer_policy_))
+ //
+ // Note: due to crbug.com/450589 this value might be incorrect, and a
+ // corrected version is stored later in the pickle.
+ if (!iterator->ReadInt(&referrer_policy_)) {
referrer_policy_ =
SerializedNavigationDriver::Get()->GetDefaultReferrerPolicy();
+ }
// If the original URL can't be found, leave it empty.
std::string original_request_url_spec;
@@ -285,6 +307,19 @@ bool SerializedNavigationEntry::ReadFromPickle(PickleIterator* iterator) {
if (!iterator->ReadInt(&http_status_code_))
http_status_code_ = 0;
+
+ // Correct referrer policy (if present).
+ int correct_referrer_policy;
+ if (iterator->ReadInt(&correct_referrer_policy)) {
+ referrer_policy_ = correct_referrer_policy;
+ } else {
+ int mapped_referrer_policy;
+ if (!SerializedNavigationDriver::Get()->MapReferrerPolicyToNewValues(
+ referrer_policy_, &mapped_referrer_policy)) {
+ referrer_url_ = GURL();
+ }
+ referrer_policy_ = mapped_referrer_policy;
+ }
}
SerializedNavigationDriver::Get()->Sanitize(this);
@@ -299,8 +334,15 @@ bool SerializedNavigationEntry::ReadFromPickle(PickleIterator* iterator) {
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_);
+ int mapped_referrer_policy;
+ if (SerializedNavigationDriver::Get()->MapReferrerPolicyToOldValues(
+ referrer_policy_, &mapped_referrer_policy)) {
+ sync_data.set_referrer(referrer_url_.spec());
+ } else {
+ sync_data.set_referrer(std::string());
+ }
+ sync_data.set_obsolete_referrer_policy(mapped_referrer_policy);
+ sync_data.set_correct_referrer_policy(referrer_policy_);
sync_data.set_title(base::UTF16ToUTF8(title_));
// Page transition core.

Powered by Google App Engine
This is Rietveld 408576698