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..9a3cb40098f7345196f6d1f6d855ae11beb017a4 100644 |
--- a/components/sessions/ios/ios_serialized_navigation_driver.cc |
+++ b/components/sessions/ios/ios_serialized_navigation_driver.cc |
@@ -32,6 +32,41 @@ int IOSSerializedNavigationDriver::GetDefaultReferrerPolicy() const { |
return web::ReferrerPolicyDefault; |
} |
+bool ContentSerializedNavigationDriver::MapReferrerPolicyToOldValues( |
marja
2015/01/29 10:54:20
Why does this code have to be in both drivers - is
jochen (gone - plz use gerrit)
2015/01/29 10:59:30
it's not!
One uses web::ReferrerPolicy*, the othe
|
+ int referrer_policy, |
+ int* mapped_referrer_policy) const { |
+ // "always" and "default" are the same value in all versions. |
+ if (referrer_policy == web::ReferrerPolicyAlways || |
+ referrer_policy == web::ReferrerPolicyDefault) { |
+ *mapped_referrer_policy = referrer_policy; |
+ return true; |
+ } |
+ |
+ // "origin" exists in the old encoding. |
+ if (referrer_policy == web::ReferrerPolicyOrigin) { |
+ *mapped_referrer_policy = 3; |
+ return true; |
+ } |
+ |
+ // Everything else is mapped to never. |
+ *mapped_referrer_policy = 2; |
+ return false; |
+} |
+ |
+bool ContentSerializedNavigationDriver::MapReferrerPolicyToNewValues( |
+ int referrer_policy, |
+ int* mapped_referrer_policy) const { |
+ // "always" and "default" are the same value in all versions. |
+ if (referrer_policy == 0 || referrer_policy == 1) { |
+ *mapped_referrer_policy = referrer_policy; |
+ return true; |
+ } |
+ |
+ // 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 +83,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 +105,9 @@ void IOSSerializedNavigationDriver::Sanitize( |
case web::ReferrerPolicyOrigin: |
referrer.url = referrer.url.GetOrigin(); |
break; |
- default: |
- NOTREACHED(); |
+ case web::ReferrerPolicyOriginWhenCrossOrigin: |
marja
2015/01/29 10:54:20
Why no default case anymore?
jochen (gone - plz use gerrit)
2015/01/29 10:59:30
so the compiler catches the case when an enum valu
|
+ if (navigation.virtual_url_.GetOrigin() != referrer.url.GetOrigin()) |
+ referrer.url = referrer.url.GetOrigin(); |
break; |
} |
} |