Index: ios/web/public/crw_navigation_item_storage.mm |
diff --git a/ios/web/public/crw_navigation_item_storage.mm b/ios/web/public/crw_navigation_item_storage.mm |
index 62a6055fc1061bd476fc2e6a35a0f8bde6befbec..f43159a53ec4f7ddf94945b14c5cb7b16ede2914 100644 |
--- a/ios/web/public/crw_navigation_item_storage.mm |
+++ b/ios/web/public/crw_navigation_item_storage.mm |
@@ -6,6 +6,7 @@ |
#include "base/strings/sys_string_conversions.h" |
#import "ios/web/navigation/nscoder_util.h" |
+#import "ios/web/public/web_client.h" |
#import "net/base/mac/url_conversions.h" |
#if !defined(__has_feature) || !__has_feature(objc_arc) |
@@ -27,7 +28,8 @@ |
NSString* const kNavigationItemStorageHTTPRequestHeadersKey = @"httpHeaders"; |
NSString* const kNavigationItemStorageSkipRepostFormConfirmationKey = |
@"skipResubmitDataConfirmation"; |
-NSString* const kNavigationItemStorageUseDesktopUserAgentKey = |
+NSString* const kNavigationItemStorageUserAgentTypeKey = @"userAgentType"; |
+NSString* const kNavigationItemStorageUseDesktopUserAgentDeprecatedKey = |
@"useDesktopUserAgent"; |
} // namespace web |
@@ -41,7 +43,7 @@ @implementation CRWNavigationItemStorage |
@synthesize displayState = _displayState; |
@synthesize shouldSkipRepostFormConfirmation = |
_shouldSkipRepostFormConfirmation; |
-@synthesize overridingUserAgent = _overridingUserAgent; |
+@synthesize userAgentType = _userAgentType; |
@synthesize POSTData = _POSTData; |
@synthesize HTTPRequestHeaders = _HTTPRequestHeaders; |
@@ -59,7 +61,8 @@ - (NSString*)description { |
[description appendFormat:@"skipRepostConfirmation : %@, ", |
@(_shouldSkipRepostFormConfirmation)]; |
[description |
- appendFormat:@"overridingUserAgent : %@, ", @(_overridingUserAgent)]; |
+ appendFormat:@"userAgentType : %s, ", |
+ web::GetUserAgentTypeDescription(_userAgentType).c_str()]; |
[description appendFormat:@"POSTData : %@, ", _POSTData]; |
[description appendFormat:@"HTTPRequestHeaders : %@", _HTTPRequestHeaders]; |
return description; |
@@ -105,6 +108,27 @@ - (instancetype)initWithCoder:(NSCoder*)aDecoder { |
_timestamp = base::Time::FromInternalValue(us); |
} |
+ if ([aDecoder |
+ containsValueForKey:web::kNavigationItemStorageUserAgentTypeKey]) { |
+ std::string userAgentDescription = web::nscoder_util::DecodeString( |
+ aDecoder, web::kNavigationItemStorageUserAgentTypeKey); |
+ _userAgentType = |
+ web::GetUserAgentTypeWithDescription(userAgentDescription); |
+ } else if (web::GetWebClient()->IsAppSpecificURL(_virtualURL)) { |
+ // Legacy CRWNavigationItemStorages didn't have the concept of a NONE |
+ // user agent for app-specific URLs, so check decoded virtual URL before |
+ // attempting to decode the deprecated key. |
+ _userAgentType = web::UserAgentType::NONE; |
+ } else { |
+ // The user agent type was previously recorded as a BOOL, where YES meant |
+ // desktop user agent, and NO meant mobile user agent. |
+ BOOL useDesktopUA = [aDecoder |
+ decodeBoolForKey: |
+ web::kNavigationItemStorageUseDesktopUserAgentDeprecatedKey]; |
+ _userAgentType = useDesktopUA ? web::UserAgentType::DESKTOP |
+ : web::UserAgentType::MOBILE; |
+ } |
+ |
NSString* title = |
[aDecoder decodeObjectForKey:web::kNavigationItemStorageTitleKey]; |
// Use a transition type of reload so that we don't incorrectly increase |
@@ -116,8 +140,6 @@ - (instancetype)initWithCoder:(NSCoder*)aDecoder { |
_shouldSkipRepostFormConfirmation = |
[aDecoder decodeBoolForKey: |
web::kNavigationItemStorageSkipRepostFormConfirmationKey]; |
- _overridingUserAgent = [aDecoder |
- decodeBoolForKey:web::kNavigationItemStorageUseDesktopUserAgentKey]; |
_POSTData = |
[aDecoder decodeObjectForKey:web::kNavigationItemStoragePOSTDataKey]; |
_HTTPRequestHeaders = [aDecoder |
@@ -144,8 +166,9 @@ - (void)encodeWithCoder:(NSCoder*)aCoder { |
forKey:web::kNavigationItemStoragePageDisplayStateKey]; |
[aCoder encodeBool:_shouldSkipRepostFormConfirmation |
forKey:web::kNavigationItemStorageSkipRepostFormConfirmationKey]; |
- [aCoder encodeBool:_overridingUserAgent |
- forKey:web::kNavigationItemStorageUseDesktopUserAgentKey]; |
+ web::nscoder_util::EncodeString( |
+ aCoder, web::kNavigationItemStorageUserAgentTypeKey, |
+ web::GetUserAgentTypeDescription(_userAgentType)); |
[aCoder encodeObject:_POSTData forKey:web::kNavigationItemStoragePOSTDataKey]; |
[aCoder encodeObject:_HTTPRequestHeaders |
forKey:web::kNavigationItemStorageHTTPRequestHeadersKey]; |