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

Unified Diff: ios/web/navigation/crw_session_entry.mm

Issue 2664113003: Moved serialization out of CRWSessionEntry. (Closed)
Patch Set: Eugene's comments Created 3 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
« no previous file with comments | « ios/web/navigation/crw_session_entry.h ('k') | ios/web/navigation/crw_session_entry_unittest.mm » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ios/web/navigation/crw_session_entry.mm
diff --git a/ios/web/navigation/crw_session_entry.mm b/ios/web/navigation/crw_session_entry.mm
index c5bd035b0f852eff8350db39c3eaaab7293b9f96..2462bfc6cc481a509c70041ab2a52f07f8df2bb2 100644
--- a/ios/web/navigation/crw_session_entry.mm
+++ b/ios/web/navigation/crw_session_entry.mm
@@ -13,52 +13,19 @@
#import "ios/web/navigation/navigation_item_impl.h"
#import "ios/web/navigation/nscoder_util.h"
#import "ios/web/public/navigation_item.h"
-#include "ios/web/public/web_state/page_display_state.h"
+#import "ios/web/public/web_state/page_display_state.h"
#import "net/base/mac/url_conversions.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
-namespace web {
-// Keys used to serialize web::PageScrollState properties.
-NSString* const kSessionEntryPageScrollStateKey = @"state";
-NSString* const kSessionEntryScrollOffsetXKey = @"scrollX";
-NSString* const kSessionEntryScrollOffsetYKey = @"scrollY";
-NSString* const kSessionEntryMinimumZoomScaleKey = @"minZoom";
-NSString* const kSessionEntryMaximumZoomScaleKey = @"maxZoom";
-NSString* const kSessionEntryZoomScaleKey = @"zoom";
-
-// Keys used to serialize navigation properties.
-NSString* const kSessionEntryURLKey = @"virtualUrlString";
-NSString* const kSessionEntryURLDeperecatedKey = @"virtualUrl";
-NSString* const kSessionEntryReferrerURLKey = @"referrerUrlString";
-NSString* const kSessionEntryReferrerURLDeprecatedKey = @"referrer";
-NSString* const kSessionEntryReferrerPolicyKey = @"referrerPolicy";
-NSString* const kSessionEntryTimestampKey = @"timestamp";
-NSString* const kSessionEntryTitleKey = @"title";
-NSString* const kSessionEntryPOSTDataKey = @"POSTData";
-NSString* const kSessionEntryHTTPRequestHeadersKey = @"httpHeaders";
-NSString* const kSessionEntrySkipRepostFormConfirmationKey =
- @"skipResubmitDataConfirmation";
-NSString* const kSessionEntryUseDesktopUserAgentKey = @"useDesktopUserAgent";
-}
-
@interface CRWSessionEntry () {
// The NavigationItemImpl corresponding to this CRWSessionEntry.
// TODO(stuartmorgan): Move ownership to NavigationManagerImpl.
std::unique_ptr<web::NavigationItemImpl> _navigationItem;
}
-// Converts a serialized NSDictionary to a web::PageDisplayState.
-+ (web::PageDisplayState)pageDisplayStateFromDictionary:
- (NSDictionary*)dictionary;
-// Serializes a web::PageDisplayState to an NSDictionary.
-+ (NSDictionary*)dictionaryFromPageDisplayState:
- (const web::PageDisplayState&)displayState;
-// Returns a readable description of |displayState|.
-+ (NSString*)descriptionForPageDisplayState:
- (const web::PageDisplayState&)displayState;
@end
@implementation CRWSessionEntry
@@ -73,93 +40,6 @@ - (instancetype)initWithNavigationItem:
return self;
}
-- (instancetype)initWithCoder:(NSCoder*)aDecoder {
- self = [super init];
- if (self) {
- _navigationItem.reset(new web::NavigationItemImpl());
-
- // Desktop chrome only persists virtualUrl_ and uses it to feed the url
- // when creating a NavigationEntry.
- GURL url;
- if ([aDecoder containsValueForKey:web::kSessionEntryURLKey]) {
- url = GURL(
- web::nscoder_util::DecodeString(aDecoder, web::kSessionEntryURLKey));
- } else {
- // Backward compatibility.
- url = net::GURLWithNSURL(
- [aDecoder decodeObjectForKey:web::kSessionEntryURLDeperecatedKey]);
- }
- _navigationItem->SetOriginalRequestURL(url);
- _navigationItem->SetURL(url);
-
- if ([aDecoder containsValueForKey:web::kSessionEntryReferrerURLKey]) {
- const std::string referrerString(web::nscoder_util::DecodeString(
- aDecoder, web::kSessionEntryReferrerURLKey));
- web::ReferrerPolicy referrerPolicy = static_cast<web::ReferrerPolicy>(
- [aDecoder decodeIntForKey:web::kSessionEntryReferrerPolicyKey]);
- _navigationItem->SetReferrer(
- web::Referrer(GURL(referrerString), referrerPolicy));
- } else {
- // Backward compatibility.
- NSURL* referrer = [aDecoder
- decodeObjectForKey:web::kSessionEntryReferrerURLDeprecatedKey];
- _navigationItem->SetReferrer(web::Referrer(
- net::GURLWithNSURL(referrer), web::ReferrerPolicyDefault));
- }
-
- if ([aDecoder containsValueForKey:web::kSessionEntryTimestampKey]) {
- int64_t us = [aDecoder decodeInt64ForKey:web::kSessionEntryTimestampKey];
- _navigationItem->SetTimestamp(base::Time::FromInternalValue(us));
- }
-
- NSString* title = [aDecoder decodeObjectForKey:web::kSessionEntryTitleKey];
- // Use a transition type of reload so that we don't incorrectly increase
- // the typed count. This is what desktop chrome does.
- _navigationItem->SetTitle(base::SysNSStringToUTF16(title));
- _navigationItem->SetTransitionType(ui::PAGE_TRANSITION_RELOAD);
- _navigationItem->SetPageDisplayState([[self class]
- pageDisplayStateFromDictionary:
- [aDecoder
- decodeObjectForKey:web::kSessionEntryPageScrollStateKey]]);
- _navigationItem->SetShouldSkipRepostFormConfirmation([aDecoder
- decodeBoolForKey:web::kSessionEntrySkipRepostFormConfirmationKey]);
- _navigationItem->SetIsOverridingUserAgent(
- [aDecoder decodeBoolForKey:web::kSessionEntryUseDesktopUserAgentKey]);
- _navigationItem->SetPostData(
- [aDecoder decodeObjectForKey:web::kSessionEntryPOSTDataKey]);
- _navigationItem->AddHttpRequestHeaders(
- [aDecoder decodeObjectForKey:web::kSessionEntryHTTPRequestHeadersKey]);
- }
- return self;
-}
-
-- (void)encodeWithCoder:(NSCoder*)aCoder {
- // Desktop Chrome doesn't persist |url_| or |originalUrl_|, only
- // |virtualUrl_|.
- web::nscoder_util::EncodeString(aCoder, web::kSessionEntryURLKey,
- _navigationItem->GetVirtualURL().spec());
- web::nscoder_util::EncodeString(aCoder, web::kSessionEntryReferrerURLKey,
- _navigationItem->GetReferrer().url.spec());
- [aCoder encodeInt:_navigationItem->GetReferrer().policy
- forKey:web::kSessionEntryReferrerPolicyKey];
- [aCoder encodeInt64:_navigationItem->GetTimestamp().ToInternalValue()
- forKey:web::kSessionEntryTimestampKey];
-
- [aCoder encodeObject:base::SysUTF16ToNSString(_navigationItem->GetTitle())
- forKey:web::kSessionEntryTitleKey];
- [aCoder encodeObject:[[self class] dictionaryFromPageDisplayState:
- _navigationItem->GetPageDisplayState()]
- forKey:web::kSessionEntryPageScrollStateKey];
- [aCoder encodeBool:_navigationItem->ShouldSkipRepostFormConfirmation()
- forKey:web::kSessionEntrySkipRepostFormConfirmationKey];
- [aCoder encodeBool:_navigationItem->IsOverridingUserAgent()
- forKey:web::kSessionEntryUseDesktopUserAgentKey];
- [aCoder encodeObject:_navigationItem->GetPostData()
- forKey:web::kSessionEntryPOSTDataKey];
- [aCoder encodeObject:_navigationItem->GetHttpRequestHeaders()
- forKey:web::kSessionEntryHTTPRequestHeadersKey];
-}
-
// TODO(ios): Shall we overwrite EqualTo:?
- (instancetype)copyWithZone:(NSZone*)zone {
@@ -179,9 +59,7 @@ - (NSString*)description {
_navigationItem->GetOriginalRequestURL().spec()),
base::SysUTF16ToNSString(_navigationItem->GetTitle()),
_navigationItem->GetTransitionType(),
- [[self class]
- descriptionForPageDisplayState:_navigationItem
- ->GetPageDisplayState()],
+ _navigationItem->GetPageDisplayState().GetDescription(),
_navigationItem->IsOverridingUserAgent()];
}
@@ -193,54 +71,4 @@ - (NSString*)description {
return _navigationItem.get();
}
-#pragma mark - Serialization helpers
-
-+ (web::PageDisplayState)pageDisplayStateFromDictionary:
- (NSDictionary*)dictionary {
- NSNumber* serializedValue = nil;
- web::PageScrollState scrollState;
- if ((serializedValue = dictionary[web::kSessionEntryScrollOffsetXKey]))
- scrollState.set_offset_x([serializedValue doubleValue]);
- if ((serializedValue = dictionary[web::kSessionEntryScrollOffsetYKey]))
- scrollState.set_offset_y([serializedValue doubleValue]);
- web::PageZoomState zoomState;
- if ((serializedValue = dictionary[web::kSessionEntryMinimumZoomScaleKey]))
- zoomState.set_minimum_zoom_scale([serializedValue doubleValue]);
- if ((serializedValue = dictionary[web::kSessionEntryMaximumZoomScaleKey]))
- zoomState.set_maximum_zoom_scale([serializedValue doubleValue]);
- if ((serializedValue = dictionary[web::kSessionEntryZoomScaleKey]))
- zoomState.set_zoom_scale([serializedValue doubleValue]);
- return web::PageDisplayState(scrollState, zoomState);
-}
-
-+ (NSDictionary*)dictionaryFromPageDisplayState:
- (const web::PageDisplayState&)displayState {
- return @{
- web::kSessionEntryScrollOffsetXKey :
- @(displayState.scroll_state().offset_x()),
- web::kSessionEntryScrollOffsetYKey :
- @(displayState.scroll_state().offset_y()),
- web::kSessionEntryMinimumZoomScaleKey :
- @(displayState.zoom_state().minimum_zoom_scale()),
- web::kSessionEntryMaximumZoomScaleKey :
- @(displayState.zoom_state().maximum_zoom_scale()),
- web::kSessionEntryZoomScaleKey :
- @(displayState.zoom_state().zoom_scale())
- };
-}
-
-+ (NSString*)descriptionForPageDisplayState:
- (const web::PageDisplayState&)displayState {
- NSString* const kPageScrollStateDescriptionFormat =
- @"{ scrollOffset:(%0.2f, %0.2f), zoomScaleRange:(%0.2f, %0.2f), "
- @"zoomScale:%0.2f }";
- return
- [NSString stringWithFormat:kPageScrollStateDescriptionFormat,
- displayState.scroll_state().offset_x(),
- displayState.scroll_state().offset_y(),
- displayState.zoom_state().minimum_zoom_scale(),
- displayState.zoom_state().maximum_zoom_scale(),
- displayState.zoom_state().zoom_scale()];
-}
-
@end
« no previous file with comments | « ios/web/navigation/crw_session_entry.h ('k') | ios/web/navigation/crw_session_entry_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698