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

Unified Diff: components/sessions/ios/ios_serialized_navigation_driver.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/ios/ios_serialized_navigation_driver.cc
diff --git a/components/sessions/ios/ios_serialized_navigation_driver.cc b/components/sessions/ios/ios_serialized_navigation_driver.cc
index f6324ab35fb00a1e3413c2ea6a0362798f418380..86b1554384bc20f4402fce0544658b1e359442b7 100644
--- a/components/sessions/ios/ios_serialized_navigation_driver.cc
+++ b/components/sessions/ios/ios_serialized_navigation_driver.cc
@@ -10,6 +10,13 @@
namespace sessions {
+namespace {
+const int kObsoleteReferrerPolicyAlways = 0;
+const int kObsoleteReferrerPolicyDefault = 1;
+const int kObsoleteReferrerPolicyNever = 2;
+const int kObsoleteReferrerPolicyOrigin = 3;
+} // namespace
+
// static
SerializedNavigationDriver* SerializedNavigationDriver::Get() {
return IOSSerializedNavigationDriver::GetInstance();
@@ -32,6 +39,45 @@ int IOSSerializedNavigationDriver::GetDefaultReferrerPolicy() const {
return web::ReferrerPolicyDefault;
}
+bool IOSSerializedNavigationDriver::MapReferrerPolicyToOldValues(
+ int referrer_policy,
+ int* mapped_referrer_policy) const {
+ switch (referrer_policy) {
+ case web::ReferrerPolicyAlways:
+ case web::ReferrerPolicyDefault:
+ // "always" and "default" are the same value in all versions.
+ *mapped_referrer_policy = referrer_policy;
+ return true;
+
+ case web::ReferrerPolicyOrigin:
+ // "origin" exists in the old encoding.
+ *mapped_referrer_policy = kObsoleteReferrerPolicyOrigin;
+ return true;
+
+ default:
+ // Everything else is mapped to never.
+ *mapped_referrer_policy = kObsoleteReferrerPolicyNever;
+ return false;
+ }
+}
+
+bool IOSSerializedNavigationDriver::MapReferrerPolicyToNewValues(
+ int referrer_policy,
+ int* mapped_referrer_policy) const {
+ switch (referrer_policy) {
+ case kObsoleteReferrerPolicyAlways:
+ case kObsoleteReferrerPolicyDefault:
+ // "always" and "default" are the same value in all versions.
+ *mapped_referrer_policy = referrer_policy;
+ return true;
+
+ default:
+ // Since we don't know what encoding was used, we map the rest to "never".
+ *mapped_referrer_policy = web::ReferrerPolicyNever;
+ return false;
+ }
+}
+
std::string
IOSSerializedNavigationDriver::GetSanitizedPageStateForPickle(
const SerializedNavigationEntry* navigation) const {
@@ -48,13 +94,20 @@ void IOSSerializedNavigationDriver::Sanitize(
!referrer.url.SchemeIsHTTPOrHTTPS()) {
referrer.url = GURL();
} else {
+ if (referrer.policy < 0 || referrer.policy > web::ReferrerPolicyLast) {
+ NOTREACHED();
+ referrer.policy = web::ReferrerPolicyNever;
+ }
+ bool is_downgrade = referrer.url.SchemeIsSecure() &&
+ !navigation->virtual_url_.SchemeIsSecure();
switch (referrer.policy) {
case web::ReferrerPolicyDefault:
- if (referrer.url.SchemeIsSecure() &&
- !navigation->virtual_url_.SchemeIsSecure()) {
+ if (is_downgrade)
referrer.url = GURL();
- }
break;
+ case web::ReferrerPolicyNoReferrerWhenDowngrade:
+ if (is_downgrade)
+ referrer.url = GURL();
case web::ReferrerPolicyAlways:
break;
case web::ReferrerPolicyNever:
@@ -63,8 +116,9 @@ void IOSSerializedNavigationDriver::Sanitize(
case web::ReferrerPolicyOrigin:
referrer.url = referrer.url.GetOrigin();
break;
- default:
- NOTREACHED();
+ case web::ReferrerPolicyOriginWhenCrossOrigin:
+ if (navigation->virtual_url_.GetOrigin() != referrer.url.GetOrigin())
+ referrer.url = referrer.url.GetOrigin();
break;
}
}
« no previous file with comments | « components/sessions/ios/ios_serialized_navigation_driver.h ('k') | components/sessions/serialized_navigation_entry.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698