Index: ios/web/navigation/crw_session_controller.mm |
diff --git a/ios/web/navigation/crw_session_controller.mm b/ios/web/navigation/crw_session_controller.mm |
index 5407ec31b6afad6fcd83a2884a5ec82aa48949c1..74234ca5bec38917e70164089a0bc2b33ff8fc92 100644 |
--- a/ios/web/navigation/crw_session_controller.mm |
+++ b/ios/web/navigation/crw_session_controller.mm |
@@ -184,7 +184,7 @@ NSString* const kXCallbackParametersKey = @"xCallbackParameters"; |
for (size_t i = 0; i < items.size(); ++i) { |
scoped_ptr<web::NavigationItem> item(items[i]); |
base::scoped_nsobject<CRWSessionEntry> entry( |
- [[CRWSessionEntry alloc] initWithNavigationItem:item.Pass() index:i]); |
+ [[CRWSessionEntry alloc] initWithNavigationItem:item.Pass()]); |
[_entries addObject:entry]; |
} |
_currentNavigationIndex = currentIndex; |
@@ -326,11 +326,9 @@ NSString* const kXCallbackParametersKey = @"xCallbackParameters"; |
// (a) new (non-history), browser-initiated navigations, and |
// (b) pending unsafe navigations (while showing the interstitial) |
// in order to prevent URL spoof attacks. |
- web::NavigationItemImpl* pendingItemImpl = |
- static_cast<web::NavigationItemImpl*>([_pendingEntry navigationItem]); |
- if (_pendingEntry && |
- (!pendingItemImpl->is_renderer_initiated() || |
- pendingItemImpl->IsUnsafe())) { |
+ web::NavigationItemImpl* pendingItem = [_pendingEntry navigationItemImpl]; |
+ if (pendingItem && |
+ (!pendingItem->is_renderer_initiated() || pendingItem->IsUnsafe())) { |
return _pendingEntry.get(); |
} |
return [self lastCommittedEntry]; |
@@ -397,8 +395,10 @@ NSString* const kXCallbackParametersKey = @"xCallbackParameters"; |
} |
} |
- BOOL useDesktopUserAgent = _useDesktopUserAgentForNextPendingEntry || |
- self.currentEntry.useDesktopUserAgent; |
+ BOOL useDesktopUserAgent = |
+ _useDesktopUserAgentForNextPendingEntry || |
+ (self.currentEntry.navigationItem && |
+ self.currentEntry.navigationItem->IsOverridingUserAgent()); |
_useDesktopUserAgentForNextPendingEntry = NO; |
_pendingEntry.reset([[self sessionEntryWithURL:url |
referrer:ref |
@@ -418,18 +418,17 @@ NSString* const kXCallbackParametersKey = @"xCallbackParameters"; |
// session history. Don't modify the entry list. |
if (!_pendingEntry) |
return; |
- web::NavigationItem* item = [_pendingEntry navigationItem]; |
+ |
+ web::NavigationItemImpl* item = [_pendingEntry navigationItemImpl]; |
if (url != item->GetURL()) { |
item->SetURL(url); |
item->SetVirtualURL(url); |
// Since updates are caused by page redirects, they are renderer-initiated. |
- web::NavigationItemImpl* pendingItemImpl = |
- static_cast<web::NavigationItemImpl*>([_pendingEntry navigationItem]); |
- pendingItemImpl->set_is_renderer_initiated(true); |
+ item->set_is_renderer_initiated(true); |
// Redirects (3xx response code), or client side navigation must change |
// POST requests to GETs. |
- [_pendingEntry setPOSTData:nil]; |
- [_pendingEntry resetHTTPHeaders]; |
+ item->SetPostData(nil); |
+ item->ResetHttpRequestHeaders(); |
} |
// This should probably not be sent if the URLs matched, but that's what was |
@@ -472,9 +471,7 @@ NSString* const kXCallbackParametersKey = @"xCallbackParameters"; |
_currentNavigationIndex = [_entries count] - 1; |
// Once an entry is committed it's not renderer-initiated any more. (Matches |
// the implementation in NavigationController.) |
- web::NavigationItemImpl* pendingItemImpl = |
- static_cast<web::NavigationItemImpl*>([_pendingEntry navigationItem]); |
- pendingItemImpl->ResetForCommit(); |
+ [_pendingEntry navigationItemImpl]->ResetForCommit(); |
_pendingEntry.reset(); |
} |
@@ -526,14 +523,17 @@ NSString* const kXCallbackParametersKey = @"xCallbackParameters"; |
CHECK( |
web::history_state_util::IsHistoryStateChangeValid(item->GetURL(), url)); |
web::Referrer referrer(item->GetURL(), web::ReferrerPolicyDefault); |
+ bool overrideUserAgent = |
+ self.currentEntry.navigationItem->IsOverridingUserAgent(); |
base::scoped_nsobject<CRWSessionEntry> pushedEntry( |
[[self sessionEntryWithURL:url |
referrer:referrer |
transition:ui::PAGE_TRANSITION_LINK |
- useDesktopUserAgent:self.currentEntry.useDesktopUserAgent |
+ useDesktopUserAgent:overrideUserAgent |
rendererInitiated:NO] retain]); |
- pushedEntry.get().serializedStateObject = stateObject; |
- pushedEntry.get().createdFromPushState = YES; |
+ web::NavigationItemImpl* pushedItem = [pushedEntry navigationItemImpl]; |
+ pushedItem->SetSerializedStateObject(stateObject); |
+ pushedItem->SetIsCreatedFromPushState(true); |
web::SSLStatus& sslStatus = [self currentEntry].navigationItem->GetSSL(); |
pushedEntry.get().navigationItem->GetSSL() = sslStatus; |
@@ -551,8 +551,10 @@ NSString* const kXCallbackParametersKey = @"xCallbackParameters"; |
stateObject:(NSString*)stateObject { |
DCHECK(!_transientEntry); |
CRWSessionEntry* currentEntry = self.currentEntry; |
+ web::NavigationItemImpl* currentItem = self.currentEntry.navigationItemImpl; |
+ currentItem->SetURL(url); |
+ currentItem->SetSerializedStateObject(stateObject); |
currentEntry.navigationItem->SetURL(url); |
- currentEntry.serializedStateObject = stateObject; |
// If the change is to a committed entry, notify interested parties. |
if (currentEntry != self.pendingEntry && _navigationManager) |
_navigationManager->OnNavigationItemChanged(); |
@@ -808,15 +810,14 @@ NSString* const kXCallbackParametersKey = @"xCallbackParameters"; |
NSUInteger endIndex = firstIndex < secondIndex ? secondIndex : firstIndex; |
for (NSUInteger i = startIndex + 1; i <= endIndex; i++) { |
- CRWSessionEntry* entry = [_entries objectAtIndex:i]; |
+ web::NavigationItemImpl* item = [_entries[i] navigationItemImpl]; |
// Every entry in the sequence has to be created from a pushState() call. |
- if (!entry.createdFromPushState) |
+ if (!item->IsCreatedFromPushState()) |
return NO; |
// Every entry in the sequence has to have a URL that could have been |
// created from a pushState() call. |
if (!web::history_state_util::IsHistoryStateChangeValid( |
- firstEntry.navigationItem->GetURL(), |
- entry.navigationItem->GetURL())) |
+ firstEntry.navigationItem->GetURL(), item->GetURL())) |
return NO; |
} |
return YES; |
@@ -839,7 +840,7 @@ NSString* const kXCallbackParametersKey = @"xCallbackParameters"; |
- (void)useDesktopUserAgentForNextPendingEntry { |
if (_pendingEntry) |
- [_pendingEntry setUseDesktopUserAgent:YES]; |
+ [_pendingEntry navigationItem]->SetIsOverridingUserAgent(true); |
else |
_useDesktopUserAgentForNextPendingEntry = YES; |
} |
@@ -864,11 +865,13 @@ NSString* const kXCallbackParametersKey = @"xCallbackParameters"; |
GURL loaded_url(url); |
web::BrowserURLRewriter::GetInstance()->RewriteURLIfNecessary(&loaded_url, |
_browserState); |
- return [[[CRWSessionEntry alloc] initWithUrl:loaded_url |
- referrer:referrer |
- transition:transition |
- useDesktopUserAgent:useDesktopUserAgent |
- rendererInitiated:rendererInitiated] autorelease]; |
+ scoped_ptr<web::NavigationItemImpl> item(new web::NavigationItemImpl()); |
+ item->SetURL(loaded_url); |
+ item->SetReferrer(referrer); |
+ item->SetTransitionType(transition); |
+ item->SetIsOverridingUserAgent(useDesktopUserAgent); |
+ item->set_is_renderer_initiated(rendererInitiated); |
+ return [[CRWSessionEntry alloc] initWithNavigationItem:item.Pass()]; |
} |
@end |