Commit fbb84a32 authored by liaoyuke's avatar liaoyuke Committed by Commit bot

Create new pending item if UserAgentOverrideOption is not INHERIT.

The original logic in |AddPendingItem| does nothing if the URL of the
pending item is the same as the last committed item, except that the
pending item is added due to form submission.

However, this doesn't work with the new Request Desktop/Mobile Site
because the new functionality requires adding a pending item with the
same URL, but different UserAgentType.

This CL re-factors |AddPendingItem| so that a pending item with the
same URL can be added successfully as long as the
UserAgentOverrideOption is not INHEIRT.

This CL also adds corresponding unit tests to test the logic.

BUG=678047

Review-Url: https://codereview.chromium.org/2794723002
Cr-Commit-Position: refs/heads/master@{#462932}
parent e63e28f0
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <vector> #include <vector>
#import "ios/web/navigation/navigation_item_impl_list.h" #import "ios/web/navigation/navigation_item_impl_list.h"
#import "ios/web/public/navigation_manager.h"
#include "ui/base/page_transition_types.h" #include "ui/base/page_transition_types.h"
#include "url/gurl.h" #include "url/gurl.h"
...@@ -77,14 +78,17 @@ struct Referrer; ...@@ -77,14 +78,17 @@ struct Referrer;
// Sets the corresponding BrowserState. // Sets the corresponding BrowserState.
- (void)setBrowserState:(web::BrowserState*)browserState; - (void)setBrowserState:(web::BrowserState*)browserState;
// Add a new item with the given url, referrer, and navigation type, making it // Add a new item with the given url, referrer, navigation type and user agent
// the current item. If pending item is the same as current item, this does // override option, making it the current item. If pending item is the same as
// nothing. |referrer| may be nil if there isn't one. The item starts out as // current item, this does nothing. |referrer| may be nil if there isn't one.
// pending, and will be lost unless |-commitPendingItem| is called. // The item starts out as pending, and will be lost unless |-commitPendingItem|
// is called.
- (void)addPendingItem:(const GURL&)url - (void)addPendingItem:(const GURL&)url
referrer:(const web::Referrer&)referrer referrer:(const web::Referrer&)referrer
transition:(ui::PageTransition)type transition:(ui::PageTransition)type
initiationType:(web::NavigationInitiationType)initiationType; initiationType:(web::NavigationInitiationType)initiationType
userAgentOverrideOption:(web::NavigationManager::UserAgentOverrideOption)
userAgentOverrideOption;
// Updates the URL of the yet to be committed pending item. Useful for page // Updates the URL of the yet to be committed pending item. Useful for page
// redirects. Does nothing if there is no pending item. // redirects. Does nothing if there is no pending item.
......
...@@ -80,6 +80,21 @@ initiationType:(web::NavigationInitiationType)initiationType; ...@@ -80,6 +80,21 @@ initiationType:(web::NavigationInitiationType)initiationType;
// |index| in |items| has ui::PAGE_TRANSITION_IS_REDIRECT_MASK. // |index| in |items| has ui::PAGE_TRANSITION_IS_REDIRECT_MASK.
- (BOOL)isRedirectTransitionForItemAtIndex:(size_t)index; - (BOOL)isRedirectTransitionForItemAtIndex:(size_t)index;
// Should create a new pending item if the new pending item is not a duplicate
// of the last added or commited item. Returns YES if one of the following rules
// apply:
// 1. There is no last added or committed item.
// 2. The new item has different url from the last added or commited item.
// 3. Url is the same, but the new item is a form submission resulted from the
// last added or committed item.
// 4. Url is the same, but new item is a reload with different user agent type
// resulted from last added or commited item.
- (BOOL)shouldCreatePendingItemWithURL:(const GURL&)URL
transition:(ui::PageTransition)transition
userAgentOverrideOption:
(web::NavigationManager::UserAgentOverrideOption)
userAgentOverrideOption;
@end @end
@implementation CRWSessionController @implementation CRWSessionController
...@@ -268,9 +283,11 @@ initiationType:(web::NavigationInitiationType)initiationType; ...@@ -268,9 +283,11 @@ initiationType:(web::NavigationInitiationType)initiationType;
} }
- (void)addPendingItem:(const GURL&)url - (void)addPendingItem:(const GURL&)url
referrer:(const web::Referrer&)ref referrer:(const web::Referrer&)ref
transition:(ui::PageTransition)trans transition:(ui::PageTransition)trans
initiationType:(web::NavigationInitiationType)initiationType { initiationType:(web::NavigationInitiationType)initiationType
userAgentOverrideOption:(web::NavigationManager::UserAgentOverrideOption)
userAgentOverrideOption {
// Server side redirects are handled by updating existing pending item instead // Server side redirects are handled by updating existing pending item instead
// of adding a new item. // of adding a new item.
DCHECK((trans & ui::PAGE_TRANSITION_SERVER_REDIRECT) == 0); DCHECK((trans & ui::PAGE_TRANSITION_SERVER_REDIRECT) == 0);
...@@ -278,8 +295,33 @@ initiationType:(web::NavigationInitiationType)initiationType; ...@@ -278,8 +295,33 @@ initiationType:(web::NavigationInitiationType)initiationType;
[self discardTransientItem]; [self discardTransientItem];
self.pendingItemIndex = -1; self.pendingItemIndex = -1;
// Don't create a new item if it's already the same as the current item, if (![self shouldCreatePendingItemWithURL:url
// allowing this routine to be called multiple times in a row without issue. transition:trans
userAgentOverrideOption:userAgentOverrideOption]) {
// Send the notification anyway, to preserve old behavior. It's unknown
// whether anything currently relies on this, but since both this whole
// hack and the content facade will both be going away, it's not worth
// trying to unwind.
if (_navigationManager && _navigationManager->GetFacadeDelegate())
_navigationManager->GetFacadeDelegate()->OnNavigationItemPending();
return;
}
_pendingItem = [self itemWithURL:url
referrer:ref
transition:trans
initiationType:initiationType];
if (_navigationManager && _navigationManager->GetFacadeDelegate())
_navigationManager->GetFacadeDelegate()->OnNavigationItemPending();
DCHECK_EQ(-1, self.pendingItemIndex);
}
- (BOOL)shouldCreatePendingItemWithURL:(const GURL&)URL
transition:(ui::PageTransition)transition
userAgentOverrideOption:
(web::NavigationManager::UserAgentOverrideOption)
userAgentOverrideOption {
// Note: CRWSessionController currently has the responsibility to distinguish // Note: CRWSessionController currently has the responsibility to distinguish
// between new navigations and history stack navigation, hence the inclusion // between new navigations and history stack navigation, hence the inclusion
// of specific transiton type logic here, in order to make it reliable with // of specific transiton type logic here, in order to make it reliable with
...@@ -288,35 +330,49 @@ initiationType:(web::NavigationInitiationType)initiationType; ...@@ -288,35 +330,49 @@ initiationType:(web::NavigationInitiationType)initiationType;
// in the web layer so that this hack can be removed. // in the web layer so that this hack can be removed.
// Remove the workaround code from -presentSafeBrowsingWarningForResource:. // Remove the workaround code from -presentSafeBrowsingWarningForResource:.
web::NavigationItemImpl* currentItem = self.currentItem; web::NavigationItemImpl* currentItem = self.currentItem;
if (currentItem) { if (!currentItem)
BOOL hasSameURL = currentItem->GetURL() == url; return YES;
BOOL isPendingTransitionFormSubmit =
PageTransitionCoreTypeIs(trans, ui::PAGE_TRANSITION_FORM_SUBMIT); // User agent override option should always be different from the user agent
BOOL isCurrentTransitionFormSubmit = PageTransitionCoreTypeIs( // type of the pending item, or the last committed item if pending doesn't
currentItem->GetTransitionType(), ui::PAGE_TRANSITION_FORM_SUBMIT); // exist.
BOOL shouldCreatePendingItem = DCHECK(userAgentOverrideOption !=
!hasSameURL || web::NavigationManager::UserAgentOverrideOption::DESKTOP ||
(isPendingTransitionFormSubmit && !isCurrentTransitionFormSubmit); currentItem->GetUserAgentType() != web::UserAgentType::DESKTOP);
DCHECK(userAgentOverrideOption !=
if (!shouldCreatePendingItem) { web::NavigationManager::UserAgentOverrideOption::MOBILE ||
// Send the notification anyway, to preserve old behavior. It's unknown currentItem->GetUserAgentType() != web::UserAgentType::MOBILE);
// whether anything currently relies on this, but since both this whole
// hack and the content facade will both be going away, it's not worth BOOL hasSameURL = self.currentItem->GetURL() == URL;
// trying to unwind. if (!hasSameURL) {
if (_navigationManager && _navigationManager->GetFacadeDelegate()) // Different url indicates that it's not a duplicate item.
_navigationManager->GetFacadeDelegate()->OnNavigationItemPending(); return YES;
return;
}
} }
_pendingItem = [self itemWithURL:url BOOL isPendingTransitionFormSubmit =
referrer:ref PageTransitionCoreTypeIs(transition, ui::PAGE_TRANSITION_FORM_SUBMIT);
transition:trans BOOL isCurrentTransitionFormSubmit = PageTransitionCoreTypeIs(
initiationType:initiationType]; currentItem->GetTransitionType(), ui::PAGE_TRANSITION_FORM_SUBMIT);
if (isPendingTransitionFormSubmit && !isCurrentTransitionFormSubmit) {
// |isPendingTransitionFormSubmit| indicates that the new item is a form
// submission resulted from the last added or commited item, and
// |!isCurrentTransitionFormSubmit| shows that the form submission is not
// counted multiple times.
return YES;
}
if (_navigationManager && _navigationManager->GetFacadeDelegate()) BOOL isPendingTransitionReload =
_navigationManager->GetFacadeDelegate()->OnNavigationItemPending(); PageTransitionCoreTypeIs(transition, ui::PAGE_TRANSITION_RELOAD);
DCHECK_EQ(-1, self.pendingItemIndex); BOOL isInheritingUserAgentType =
userAgentOverrideOption ==
web::NavigationManager::UserAgentOverrideOption::INHERIT;
if (isPendingTransitionReload && !isInheritingUserAgentType) {
// Overriding user agent type to MOBILE or DESKTOP indicates that the new
// new item is a reload with different user agent type.
return YES;
}
return NO;
} }
- (void)updatePendingItem:(const GURL&)url { - (void)updatePendingItem:(const GURL&)url {
......
...@@ -23,6 +23,8 @@ ...@@ -23,6 +23,8 @@
#import "testing/gtest_mac.h" #import "testing/gtest_mac.h"
#include "testing/platform_test.h" #include "testing/platform_test.h"
using UserAgentOverrideOption = web::NavigationManager::UserAgentOverrideOption;
@interface CRWSessionController (Testing) @interface CRWSessionController (Testing)
- (const GURL&)URLForItemAtIndex:(size_t)index; - (const GURL&)URLForItemAtIndex:(size_t)index;
- (const GURL&)currentURL; - (const GURL&)currentURL;
...@@ -66,10 +68,11 @@ TEST_F(CRWSessionControllerTest, Init) { ...@@ -66,10 +68,11 @@ TEST_F(CRWSessionControllerTest, Init) {
// Tests session controller state after setting a pending index. // Tests session controller state after setting a pending index.
TEST_F(CRWSessionControllerTest, SetPendingIndex) { TEST_F(CRWSessionControllerTest, SetPendingIndex) {
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com") addPendingItem:GURL("http://www.example.com")
referrer:web::Referrer() referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
EXPECT_EQ(-1, [session_controller_ pendingItemIndex]); EXPECT_EQ(-1, [session_controller_ pendingItemIndex]);
...@@ -81,10 +84,11 @@ TEST_F(CRWSessionControllerTest, SetPendingIndex) { ...@@ -81,10 +84,11 @@ TEST_F(CRWSessionControllerTest, SetPendingIndex) {
TEST_F(CRWSessionControllerTest, addPendingItem) { TEST_F(CRWSessionControllerTest, addPendingItem) {
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.url.com") addPendingItem:GURL("http://www.url.com")
referrer:MakeReferrer("http://www.referer.com") referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
EXPECT_TRUE([session_controller_ items].empty()); EXPECT_TRUE([session_controller_ items].empty());
EXPECT_EQ( EXPECT_EQ(
...@@ -94,17 +98,19 @@ TEST_F(CRWSessionControllerTest, addPendingItem) { ...@@ -94,17 +98,19 @@ TEST_F(CRWSessionControllerTest, addPendingItem) {
TEST_F(CRWSessionControllerTest, addPendingItemWithCommittedItems) { TEST_F(CRWSessionControllerTest, addPendingItemWithCommittedItems) {
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.committed.url.com") addPendingItem:GURL("http://www.committed.url.com")
referrer:MakeReferrer("http://www.referer.com") referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.url.com") addPendingItem:GURL("http://www.url.com")
referrer:MakeReferrer("http://www.referer.com") referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
EXPECT_EQ(1U, [session_controller_ items].size()); EXPECT_EQ(1U, [session_controller_ items].size());
EXPECT_EQ(GURL("http://www.committed.url.com/"), EXPECT_EQ(GURL("http://www.committed.url.com/"),
...@@ -117,16 +123,18 @@ TEST_F(CRWSessionControllerTest, addPendingItemWithCommittedItems) { ...@@ -117,16 +123,18 @@ TEST_F(CRWSessionControllerTest, addPendingItemWithCommittedItems) {
// Tests that adding a pending item resets pending item index. // Tests that adding a pending item resets pending item index.
TEST_F(CRWSessionControllerTest, addPendingItemWithExistingPendingItemIndex) { TEST_F(CRWSessionControllerTest, addPendingItemWithExistingPendingItemIndex) {
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com") addPendingItem:GURL("http://www.example.com")
referrer:web::Referrer() referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com/0") addPendingItem:GURL("http://www.example.com/0")
referrer:web::Referrer() referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
// Set 0 as pending item index. // Set 0 as pending item index.
...@@ -137,10 +145,11 @@ TEST_F(CRWSessionControllerTest, addPendingItemWithExistingPendingItemIndex) { ...@@ -137,10 +145,11 @@ TEST_F(CRWSessionControllerTest, addPendingItemWithExistingPendingItemIndex) {
// Add a pending item, which should drop pending navigation index. // Add a pending item, which should drop pending navigation index.
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com/1") addPendingItem:GURL("http://www.example.com/1")
referrer:web::Referrer() referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
EXPECT_EQ(GURL("http://www.example.com/1"), EXPECT_EQ(GURL("http://www.example.com/1"),
[session_controller_ pendingItem]->GetURL()); [session_controller_ pendingItem]->GetURL());
EXPECT_EQ(-1, [session_controller_ pendingItemIndex]); EXPECT_EQ(-1, [session_controller_ pendingItemIndex]);
...@@ -148,15 +157,17 @@ TEST_F(CRWSessionControllerTest, addPendingItemWithExistingPendingItemIndex) { ...@@ -148,15 +157,17 @@ TEST_F(CRWSessionControllerTest, addPendingItemWithExistingPendingItemIndex) {
TEST_F(CRWSessionControllerTest, addPendingItemOverriding) { TEST_F(CRWSessionControllerTest, addPendingItemOverriding) {
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.url.com") addPendingItem:GURL("http://www.url.com")
referrer:MakeReferrer("http://www.referer.com") referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.another.url.com") addPendingItem:GURL("http://www.another.url.com")
referrer:MakeReferrer("http://www.another.referer.com") referrer:MakeReferrer("http://www.another.referer.com")
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
EXPECT_TRUE([session_controller_ items].empty()); EXPECT_TRUE([session_controller_ items].empty());
EXPECT_EQ( EXPECT_EQ(
...@@ -166,10 +177,11 @@ TEST_F(CRWSessionControllerTest, addPendingItemOverriding) { ...@@ -166,10 +177,11 @@ TEST_F(CRWSessionControllerTest, addPendingItemOverriding) {
TEST_F(CRWSessionControllerTest, addPendingItemAndCommit) { TEST_F(CRWSessionControllerTest, addPendingItemAndCommit) {
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.url.com") addPendingItem:GURL("http://www.url.com")
referrer:MakeReferrer("http://www.referer.com") referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
EXPECT_EQ(1U, [session_controller_ items].size()); EXPECT_EQ(1U, [session_controller_ items].size());
...@@ -181,15 +193,17 @@ TEST_F(CRWSessionControllerTest, addPendingItemAndCommit) { ...@@ -181,15 +193,17 @@ TEST_F(CRWSessionControllerTest, addPendingItemAndCommit) {
TEST_F(CRWSessionControllerTest, addPendingItemOverridingAndCommit) { TEST_F(CRWSessionControllerTest, addPendingItemOverridingAndCommit) {
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.url.com") addPendingItem:GURL("http://www.url.com")
referrer:MakeReferrer("http://www.referer.com") referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
[session_controller_ userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
addPendingItem:GURL("http://www.another.url.com") [session_controller_
referrer:MakeReferrer("http://www.another.referer.com") addPendingItem:GURL("http://www.another.url.com")
transition:ui::PAGE_TRANSITION_TYPED referrer:MakeReferrer("http://www.another.referer.com")
initiationType:web::NavigationInitiationType::USER_INITIATED]; transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
EXPECT_EQ(1U, [session_controller_ items].size()); EXPECT_EQ(1U, [session_controller_ items].size());
...@@ -201,17 +215,19 @@ TEST_F(CRWSessionControllerTest, addPendingItemOverridingAndCommit) { ...@@ -201,17 +215,19 @@ TEST_F(CRWSessionControllerTest, addPendingItemOverridingAndCommit) {
TEST_F(CRWSessionControllerTest, addPendingItemAndCommitMultiple) { TEST_F(CRWSessionControllerTest, addPendingItemAndCommitMultiple) {
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.url.com") addPendingItem:GURL("http://www.url.com")
referrer:MakeReferrer("http://www.referer.com") referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.another.url.com") addPendingItem:GURL("http://www.another.url.com")
referrer:MakeReferrer("http://www.another.referer.com") referrer:MakeReferrer("http://www.another.referer.com")
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
EXPECT_EQ(2U, [session_controller_ items].size()); EXPECT_EQ(2U, [session_controller_ items].size());
...@@ -225,10 +241,11 @@ TEST_F(CRWSessionControllerTest, addPendingItemAndCommitMultiple) { ...@@ -225,10 +241,11 @@ TEST_F(CRWSessionControllerTest, addPendingItemAndCommitMultiple) {
TEST_F(CRWSessionControllerTest, addPendingItemAndDiscard) { TEST_F(CRWSessionControllerTest, addPendingItemAndDiscard) {
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.url.com") addPendingItem:GURL("http://www.url.com")
referrer:MakeReferrer("http://www.referer.com") referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ discardNonCommittedItems]; [session_controller_ discardNonCommittedItems];
EXPECT_TRUE([session_controller_ items].empty()); EXPECT_TRUE([session_controller_ items].empty());
...@@ -238,10 +255,11 @@ TEST_F(CRWSessionControllerTest, addPendingItemAndDiscard) { ...@@ -238,10 +255,11 @@ TEST_F(CRWSessionControllerTest, addPendingItemAndDiscard) {
// Tests discarding pending item added via |setPendingItemIndex:| call. // Tests discarding pending item added via |setPendingItemIndex:| call.
TEST_F(CRWSessionControllerTest, setPendingItemIndexAndDiscard) { TEST_F(CRWSessionControllerTest, setPendingItemIndexAndDiscard) {
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com") addPendingItem:GURL("http://www.example.com")
referrer:web::Referrer() referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
[session_controller_ setPendingItemIndex:0]; [session_controller_ setPendingItemIndex:0];
...@@ -255,17 +273,19 @@ TEST_F(CRWSessionControllerTest, setPendingItemIndexAndDiscard) { ...@@ -255,17 +273,19 @@ TEST_F(CRWSessionControllerTest, setPendingItemIndexAndDiscard) {
TEST_F(CRWSessionControllerTest, addPendingItemAndDiscardAndAddAndCommit) { TEST_F(CRWSessionControllerTest, addPendingItemAndDiscardAndAddAndCommit) {
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.url.com") addPendingItem:GURL("http://www.url.com")
referrer:MakeReferrer("http://www.referer.com") referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ discardNonCommittedItems]; [session_controller_ discardNonCommittedItems];
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.another.url.com") addPendingItem:GURL("http://www.another.url.com")
referrer:MakeReferrer("http://www.referer.com") referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
EXPECT_EQ(1U, [session_controller_ items].size()); EXPECT_EQ(1U, [session_controller_ items].size());
...@@ -277,17 +297,19 @@ TEST_F(CRWSessionControllerTest, addPendingItemAndDiscardAndAddAndCommit) { ...@@ -277,17 +297,19 @@ TEST_F(CRWSessionControllerTest, addPendingItemAndDiscardAndAddAndCommit) {
TEST_F(CRWSessionControllerTest, addPendingItemAndCommitAndAddAndDiscard) { TEST_F(CRWSessionControllerTest, addPendingItemAndCommitAndAddAndDiscard) {
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.url.com") addPendingItem:GURL("http://www.url.com")
referrer:MakeReferrer("http://www.referer.com") referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.another.url.com") addPendingItem:GURL("http://www.another.url.com")
referrer:MakeReferrer("http://www.referer.com") referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ discardNonCommittedItems]; [session_controller_ discardNonCommittedItems];
EXPECT_EQ(1U, [session_controller_ items].size()); EXPECT_EQ(1U, [session_controller_ items].size());
...@@ -309,10 +331,11 @@ TEST_F(CRWSessionControllerTest, ...@@ -309,10 +331,11 @@ TEST_F(CRWSessionControllerTest,
commitPendingItemWithoutPendingItemWithCommittedItem) { commitPendingItemWithoutPendingItemWithCommittedItem) {
// Setup committed item. // Setup committed item.
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.url.com/") addPendingItem:GURL("http://www.url.com/")
referrer:MakeReferrer("http://www.referrer.com/") referrer:MakeReferrer("http://www.referrer.com/")
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
// Commit pending item when there is no such one // Commit pending item when there is no such one
...@@ -327,22 +350,25 @@ TEST_F(CRWSessionControllerTest, ...@@ -327,22 +350,25 @@ TEST_F(CRWSessionControllerTest,
TEST_F(CRWSessionControllerTest, commitPendingItemWithExistingForwardItems) { TEST_F(CRWSessionControllerTest, commitPendingItemWithExistingForwardItems) {
// Make 3 items. // Make 3 items.
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com/0") addPendingItem:GURL("http://www.example.com/0")
referrer:MakeReferrer("http://www.example.com/a") referrer:MakeReferrer("http://www.example.com/a")
transition:ui::PAGE_TRANSITION_LINK transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::RENDERER_INITIATED]; initiationType:web::NavigationInitiationType::RENDERER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com/1") addPendingItem:GURL("http://www.example.com/1")
referrer:MakeReferrer("http://www.example.com/b") referrer:MakeReferrer("http://www.example.com/b")
transition:ui::PAGE_TRANSITION_LINK transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::RENDERER_INITIATED]; initiationType:web::NavigationInitiationType::RENDERER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com/2") addPendingItem:GURL("http://www.example.com/2")
referrer:MakeReferrer("http://www.example.com/c") referrer:MakeReferrer("http://www.example.com/c")
transition:ui::PAGE_TRANSITION_LINK transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::RENDERER_INITIATED]; initiationType:web::NavigationInitiationType::RENDERER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
// Go back to the first item. // Go back to the first item.
...@@ -350,10 +376,11 @@ TEST_F(CRWSessionControllerTest, commitPendingItemWithExistingForwardItems) { ...@@ -350,10 +376,11 @@ TEST_F(CRWSessionControllerTest, commitPendingItemWithExistingForwardItems) {
// Create and commit a new pending item. // Create and commit a new pending item.
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com/2") addPendingItem:GURL("http://www.example.com/2")
referrer:MakeReferrer("http://www.example.com/c") referrer:MakeReferrer("http://www.example.com/c")
transition:ui::PAGE_TRANSITION_LINK transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::RENDERER_INITIATED]; initiationType:web::NavigationInitiationType::RENDERER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
// All forward items should go away. // All forward items should go away.
...@@ -366,22 +393,25 @@ TEST_F(CRWSessionControllerTest, commitPendingItemWithExistingForwardItems) { ...@@ -366,22 +393,25 @@ TEST_F(CRWSessionControllerTest, commitPendingItemWithExistingForwardItems) {
// Tests committing pending item index from the middle. // Tests committing pending item index from the middle.
TEST_F(CRWSessionControllerTest, commitPendingItemIndex) { TEST_F(CRWSessionControllerTest, commitPendingItemIndex) {
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com/0") addPendingItem:GURL("http://www.example.com/0")
referrer:web::Referrer() referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com/1") addPendingItem:GURL("http://www.example.com/1")
referrer:web::Referrer() referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com/2") addPendingItem:GURL("http://www.example.com/2")
referrer:web::Referrer() referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
ASSERT_EQ(3U, [session_controller_ items].size()); ASSERT_EQ(3U, [session_controller_ items].size());
...@@ -417,10 +447,11 @@ TEST_F(CRWSessionControllerTest, ...@@ -417,10 +447,11 @@ TEST_F(CRWSessionControllerTest,
DiscardPendingItemWithoutPendingItemWithCommittedItem) { DiscardPendingItemWithoutPendingItemWithCommittedItem) {
// Setup committed item // Setup committed item
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.url.com") addPendingItem:GURL("http://www.url.com")
referrer:MakeReferrer("http://www.referer.com") referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
// Discard noncommitted items when there is no such one // Discard noncommitted items when there is no such one
...@@ -441,10 +472,11 @@ TEST_F(CRWSessionControllerTest, updatePendingItemWithoutPendingItem) { ...@@ -441,10 +472,11 @@ TEST_F(CRWSessionControllerTest, updatePendingItemWithoutPendingItem) {
TEST_F(CRWSessionControllerTest, updatePendingItemWithPendingItem) { TEST_F(CRWSessionControllerTest, updatePendingItemWithPendingItem) {
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.url.com") addPendingItem:GURL("http://www.url.com")
referrer:MakeReferrer("http://www.referer.com") referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ updatePendingItem:GURL("http://www.another.url.com")]; [session_controller_ updatePendingItem:GURL("http://www.another.url.com")];
EXPECT_EQ( EXPECT_EQ(
...@@ -455,10 +487,11 @@ TEST_F(CRWSessionControllerTest, updatePendingItemWithPendingItem) { ...@@ -455,10 +487,11 @@ TEST_F(CRWSessionControllerTest, updatePendingItemWithPendingItem) {
TEST_F(CRWSessionControllerTest, TEST_F(CRWSessionControllerTest,
updatePendingItemWithPendingItemAlreadyCommited) { updatePendingItemWithPendingItemAlreadyCommited) {
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.url.com") addPendingItem:GURL("http://www.url.com")
referrer:MakeReferrer("http://www.referer.com") referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
[session_controller_ updatePendingItem:GURL("http://www.another.url.com")]; [session_controller_ updatePendingItem:GURL("http://www.another.url.com")];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
...@@ -474,31 +507,35 @@ TEST_F(CRWSessionControllerTest, ...@@ -474,31 +507,35 @@ TEST_F(CRWSessionControllerTest,
TEST_F(CRWSessionControllerTest, CopyState) { TEST_F(CRWSessionControllerTest, CopyState) {
// Add 1 committed and 1 pending item to target controller. // Add 1 committed and 1 pending item to target controller.
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.url.com/2") addPendingItem:GURL("http://www.url.com/2")
referrer:web::Referrer() referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.url.com/3") addPendingItem:GURL("http://www.url.com/3")
referrer:web::Referrer() referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
// Create source session controller with 1 committed item. // Create source session controller with 1 committed item.
base::scoped_nsobject<CRWSessionController> other_session_controller( base::scoped_nsobject<CRWSessionController> other_session_controller(
[[CRWSessionController alloc] initWithBrowserState:&browser_state_]); [[CRWSessionController alloc] initWithBrowserState:&browser_state_]);
[other_session_controller [other_session_controller
addPendingItem:GURL("http://www.url.com/0") addPendingItem:GURL("http://www.url.com/0")
referrer:web::Referrer() referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[other_session_controller commitPendingItem]; [other_session_controller commitPendingItem];
[other_session_controller [other_session_controller
addPendingItem:GURL("http://www.url.com/1") addPendingItem:GURL("http://www.url.com/1")
referrer:web::Referrer() referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
// Insert and verify the state of target session controller. // Insert and verify the state of target session controller.
EXPECT_TRUE([session_controller_ canPruneAllButLastCommittedItem]); EXPECT_TRUE([session_controller_ canPruneAllButLastCommittedItem]);
...@@ -522,16 +559,18 @@ TEST_F(CRWSessionControllerTest, CopyState) { ...@@ -522,16 +559,18 @@ TEST_F(CRWSessionControllerTest, CopyState) {
TEST_F(CRWSessionControllerTest, CopyStateFromEmptySessionController) { TEST_F(CRWSessionControllerTest, CopyStateFromEmptySessionController) {
// Add 2 committed items to target controller. // Add 2 committed items to target controller.
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.url.com/0") addPendingItem:GURL("http://www.url.com/0")
referrer:web::Referrer() referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.url.com/1") addPendingItem:GURL("http://www.url.com/1")
referrer:web::Referrer() referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
// Create empty source session controller. // Create empty source session controller.
...@@ -562,16 +601,18 @@ TEST_F(CRWSessionControllerTest, CopyStateToEmptySessionController) { ...@@ -562,16 +601,18 @@ TEST_F(CRWSessionControllerTest, CopyStateToEmptySessionController) {
base::scoped_nsobject<CRWSessionController> other_session_controller( base::scoped_nsobject<CRWSessionController> other_session_controller(
[[CRWSessionController alloc] initWithBrowserState:&browser_state_]); [[CRWSessionController alloc] initWithBrowserState:&browser_state_]);
[other_session_controller [other_session_controller
addPendingItem:GURL("http://www.url.com/0") addPendingItem:GURL("http://www.url.com/0")
referrer:web::Referrer() referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[other_session_controller commitPendingItem]; [other_session_controller commitPendingItem];
[other_session_controller [other_session_controller
addPendingItem:GURL("http://www.url.com/1") addPendingItem:GURL("http://www.url.com/1")
referrer:web::Referrer() referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
// Attempt to copy |other_session_controller|'s state and verify that // Attempt to copy |other_session_controller|'s state and verify that
// |session_controller_| is unchanged. // |session_controller_| is unchanged.
...@@ -590,32 +631,36 @@ TEST_F(CRWSessionControllerTest, CopyStateToEmptySessionController) { ...@@ -590,32 +631,36 @@ TEST_F(CRWSessionControllerTest, CopyStateToEmptySessionController) {
TEST_F(CRWSessionControllerTest, CopyStateDuringPendingHistoryNavigation) { TEST_F(CRWSessionControllerTest, CopyStateDuringPendingHistoryNavigation) {
// Add 1 committed and 1 pending item to target controller. // Add 1 committed and 1 pending item to target controller.
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.url.com/1") addPendingItem:GURL("http://www.url.com/1")
referrer:web::Referrer() referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.url.com/2") addPendingItem:GURL("http://www.url.com/2")
referrer:web::Referrer() referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
// Create source session controller with 1 committed item. // Create source session controller with 1 committed item.
base::scoped_nsobject<CRWSessionController> other_session_controller( base::scoped_nsobject<CRWSessionController> other_session_controller(
[[CRWSessionController alloc] initWithBrowserState:&browser_state_]); [[CRWSessionController alloc] initWithBrowserState:&browser_state_]);
[other_session_controller [other_session_controller
addPendingItem:GURL("http://www.url.com/0") addPendingItem:GURL("http://www.url.com/0")
referrer:web::Referrer() referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[other_session_controller commitPendingItem]; [other_session_controller commitPendingItem];
[other_session_controller [other_session_controller
addPendingItem:GURL("http://www.url.com/1") addPendingItem:GURL("http://www.url.com/1")
referrer:web::Referrer() referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
// Set the pending item index to the first item. // Set the pending item index to the first item.
[session_controller_ setPendingItemIndex:0]; [session_controller_ setPendingItemIndex:0];
...@@ -639,33 +684,37 @@ TEST_F(CRWSessionControllerTest, CopyStateDuringPendingHistoryNavigation) { ...@@ -639,33 +684,37 @@ TEST_F(CRWSessionControllerTest, CopyStateDuringPendingHistoryNavigation) {
TEST_F(CRWSessionControllerTest, CopyStateWithTransientItem) { TEST_F(CRWSessionControllerTest, CopyStateWithTransientItem) {
// Add 1 committed and 1 pending item to target controller. // Add 1 committed and 1 pending item to target controller.
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.url.com/1") addPendingItem:GURL("http://www.url.com/1")
referrer:web::Referrer() referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
GURL second_url = GURL("http://www.url.com/2"); GURL second_url = GURL("http://www.url.com/2");
[session_controller_ [session_controller_
addPendingItem:second_url addPendingItem:second_url
referrer:web::Referrer() referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ addTransientItemWithURL:second_url]; [session_controller_ addTransientItemWithURL:second_url];
// Create source session controller with 1 committed item. // Create source session controller with 1 committed item.
base::scoped_nsobject<CRWSessionController> other_session_controller( base::scoped_nsobject<CRWSessionController> other_session_controller(
[[CRWSessionController alloc] initWithBrowserState:&browser_state_]); [[CRWSessionController alloc] initWithBrowserState:&browser_state_]);
[other_session_controller [other_session_controller
addPendingItem:GURL("http://www.url.com/0") addPendingItem:GURL("http://www.url.com/0")
referrer:web::Referrer() referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[other_session_controller commitPendingItem]; [other_session_controller commitPendingItem];
[other_session_controller [other_session_controller
addPendingItem:GURL("http://www.url.com/1") addPendingItem:GURL("http://www.url.com/1")
referrer:web::Referrer() referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
// Attempt to copy |other_session_controller|'s state and verify that // Attempt to copy |other_session_controller|'s state and verify that
// |session_controller_| is unchanged. // |session_controller_| is unchanged.
...@@ -750,24 +799,27 @@ TEST_F(CRWSessionControllerTest, CreateWithNavList) { ...@@ -750,24 +799,27 @@ TEST_F(CRWSessionControllerTest, CreateWithNavList) {
TEST_F(CRWSessionControllerTest, PreviousNavigationItem) { TEST_F(CRWSessionControllerTest, PreviousNavigationItem) {
EXPECT_EQ(session_controller_.get().previousItemIndex, -1); EXPECT_EQ(session_controller_.get().previousItemIndex, -1);
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.url.com") addPendingItem:GURL("http://www.url.com")
referrer:MakeReferrer("http://www.referer.com") referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
EXPECT_EQ(session_controller_.get().previousItemIndex, -1); EXPECT_EQ(session_controller_.get().previousItemIndex, -1);
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.url1.com") addPendingItem:GURL("http://www.url1.com")
referrer:MakeReferrer("http://www.referer.com") referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
EXPECT_EQ(session_controller_.get().previousItemIndex, 0); EXPECT_EQ(session_controller_.get().previousItemIndex, 0);
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.url2.com") addPendingItem:GURL("http://www.url2.com")
referrer:MakeReferrer("http://www.referer.com") referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
EXPECT_EQ(session_controller_.get().previousItemIndex, 1); EXPECT_EQ(session_controller_.get().previousItemIndex, 1);
...@@ -913,28 +965,32 @@ TEST_F(CRWSessionControllerTest, UpdateCurrentItem) { ...@@ -913,28 +965,32 @@ TEST_F(CRWSessionControllerTest, UpdateCurrentItem) {
TEST_F(CRWSessionControllerTest, TestBackwardForwardItems) { TEST_F(CRWSessionControllerTest, TestBackwardForwardItems) {
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com/0") addPendingItem:GURL("http://www.example.com/0")
referrer:MakeReferrer("http://www.example.com/a") referrer:MakeReferrer("http://www.example.com/a")
transition:ui::PAGE_TRANSITION_LINK transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com/1") addPendingItem:GURL("http://www.example.com/1")
referrer:MakeReferrer("http://www.example.com/b") referrer:MakeReferrer("http://www.example.com/b")
transition:ui::PAGE_TRANSITION_LINK transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com/redirect") addPendingItem:GURL("http://www.example.com/redirect")
referrer:MakeReferrer("http://www.example.com/r") referrer:MakeReferrer("http://www.example.com/r")
transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com/2") addPendingItem:GURL("http://www.example.com/2")
referrer:MakeReferrer("http://www.example.com/c") referrer:MakeReferrer("http://www.example.com/c")
transition:ui::PAGE_TRANSITION_LINK transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
EXPECT_EQ(3, session_controller_.get().lastCommittedItemIndex); EXPECT_EQ(3, session_controller_.get().lastCommittedItemIndex);
...@@ -957,34 +1013,39 @@ TEST_F(CRWSessionControllerTest, TestBackwardForwardItems) { ...@@ -957,34 +1013,39 @@ TEST_F(CRWSessionControllerTest, TestBackwardForwardItems) {
// Tests going to items with existing and non-existing indices. // Tests going to items with existing and non-existing indices.
TEST_F(CRWSessionControllerTest, GoToItemAtIndex) { TEST_F(CRWSessionControllerTest, GoToItemAtIndex) {
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com/0") addPendingItem:GURL("http://www.example.com/0")
referrer:MakeReferrer("http://www.example.com/a") referrer:MakeReferrer("http://www.example.com/a")
transition:ui::PAGE_TRANSITION_LINK transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com/1") addPendingItem:GURL("http://www.example.com/1")
referrer:MakeReferrer("http://www.example.com/b") referrer:MakeReferrer("http://www.example.com/b")
transition:ui::PAGE_TRANSITION_LINK transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com/redirect") addPendingItem:GURL("http://www.example.com/redirect")
referrer:MakeReferrer("http://www.example.com/r") referrer:MakeReferrer("http://www.example.com/r")
transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com/2") addPendingItem:GURL("http://www.example.com/2")
referrer:MakeReferrer("http://www.example.com/c") referrer:MakeReferrer("http://www.example.com/c")
transition:ui::PAGE_TRANSITION_LINK transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com/3") addPendingItem:GURL("http://www.example.com/3")
referrer:MakeReferrer("http://www.example.com/d") referrer:MakeReferrer("http://www.example.com/d")
transition:ui::PAGE_TRANSITION_LINK transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ addTransientItemWithURL:GURL("http://www.example.com")]; [session_controller_ addTransientItemWithURL:GURL("http://www.example.com")];
EXPECT_EQ(3, session_controller_.get().lastCommittedItemIndex); EXPECT_EQ(3, session_controller_.get().lastCommittedItemIndex);
EXPECT_EQ(2, session_controller_.get().previousItemIndex); EXPECT_EQ(2, session_controller_.get().previousItemIndex);
...@@ -1033,10 +1094,11 @@ TEST_F(CRWSessionControllerTest, VisibleItemWithSingleTransientItem) { ...@@ -1033,10 +1094,11 @@ TEST_F(CRWSessionControllerTest, VisibleItemWithSingleTransientItem) {
// item. // item.
TEST_F(CRWSessionControllerTest, VisibleItemWithCommittedAndTransientItems) { TEST_F(CRWSessionControllerTest, VisibleItemWithCommittedAndTransientItems) {
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com/0") addPendingItem:GURL("http://www.example.com/0")
referrer:MakeReferrer("http://www.example.com/a") referrer:MakeReferrer("http://www.example.com/a")
transition:ui::PAGE_TRANSITION_LINK transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
[session_controller_ addTransientItemWithURL:GURL("http://www.example.com")]; [session_controller_ addTransientItemWithURL:GURL("http://www.example.com")];
web::NavigationItem* visible_item = [session_controller_ visibleItem]; web::NavigationItem* visible_item = [session_controller_ visibleItem];
...@@ -1048,10 +1110,11 @@ TEST_F(CRWSessionControllerTest, VisibleItemWithCommittedAndTransientItems) { ...@@ -1048,10 +1110,11 @@ TEST_F(CRWSessionControllerTest, VisibleItemWithCommittedAndTransientItems) {
TEST_F(CRWSessionControllerTest, TEST_F(CRWSessionControllerTest,
VisibleItemWithSingleUserInitiatedPendingItem) { VisibleItemWithSingleUserInitiatedPendingItem) {
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com/0") addPendingItem:GURL("http://www.example.com/0")
referrer:MakeReferrer("http://www.example.com/a") referrer:MakeReferrer("http://www.example.com/a")
transition:ui::PAGE_TRANSITION_LINK transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
web::NavigationItem* visible_item = [session_controller_ visibleItem]; web::NavigationItem* visible_item = [session_controller_ visibleItem];
ASSERT_TRUE(visible_item); ASSERT_TRUE(visible_item);
EXPECT_EQ("http://www.example.com/0", visible_item->GetURL().spec()); EXPECT_EQ("http://www.example.com/0", visible_item->GetURL().spec());
...@@ -1062,16 +1125,18 @@ TEST_F(CRWSessionControllerTest, ...@@ -1062,16 +1125,18 @@ TEST_F(CRWSessionControllerTest,
TEST_F(CRWSessionControllerTest, TEST_F(CRWSessionControllerTest,
VisibleItemWithCommittedAndUserInitiatedPendingItem) { VisibleItemWithCommittedAndUserInitiatedPendingItem) {
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com") addPendingItem:GURL("http://www.example.com")
referrer:MakeReferrer("http://www.example.com/a") referrer:MakeReferrer("http://www.example.com/a")
transition:ui::PAGE_TRANSITION_LINK transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com/0") addPendingItem:GURL("http://www.example.com/0")
referrer:MakeReferrer("http://www.example.com/b") referrer:MakeReferrer("http://www.example.com/b")
transition:ui::PAGE_TRANSITION_LINK transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
web::NavigationItem* visible_item = [session_controller_ visibleItem]; web::NavigationItem* visible_item = [session_controller_ visibleItem];
ASSERT_TRUE(visible_item); ASSERT_TRUE(visible_item);
EXPECT_EQ("http://www.example.com/0", visible_item->GetURL().spec()); EXPECT_EQ("http://www.example.com/0", visible_item->GetURL().spec());
...@@ -1082,10 +1147,11 @@ TEST_F(CRWSessionControllerTest, ...@@ -1082,10 +1147,11 @@ TEST_F(CRWSessionControllerTest,
TEST_F(CRWSessionControllerTest, TEST_F(CRWSessionControllerTest,
VisibleItemWithSingleRendererInitiatedPendingItem) { VisibleItemWithSingleRendererInitiatedPendingItem) {
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com/0") addPendingItem:GURL("http://www.example.com/0")
referrer:MakeReferrer("http://www.example.com/a") referrer:MakeReferrer("http://www.example.com/a")
transition:ui::PAGE_TRANSITION_LINK transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::RENDERER_INITIATED]; initiationType:web::NavigationInitiationType::RENDERER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
web::NavigationItem* visible_item = [session_controller_ visibleItem]; web::NavigationItem* visible_item = [session_controller_ visibleItem];
ASSERT_FALSE(visible_item); ASSERT_FALSE(visible_item);
} }
...@@ -1095,16 +1161,18 @@ TEST_F(CRWSessionControllerTest, ...@@ -1095,16 +1161,18 @@ TEST_F(CRWSessionControllerTest,
TEST_F(CRWSessionControllerTest, TEST_F(CRWSessionControllerTest,
VisibleItemWithCommittedAndRendererInitiatedPendingItem) { VisibleItemWithCommittedAndRendererInitiatedPendingItem) {
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com") addPendingItem:GURL("http://www.example.com")
referrer:MakeReferrer("http://www.example.com/a") referrer:MakeReferrer("http://www.example.com/a")
transition:ui::PAGE_TRANSITION_LINK transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::RENDERER_INITIATED]; initiationType:web::NavigationInitiationType::RENDERER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com/0") addPendingItem:GURL("http://www.example.com/0")
referrer:MakeReferrer("http://www.example.com/b") referrer:MakeReferrer("http://www.example.com/b")
transition:ui::PAGE_TRANSITION_LINK transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::RENDERER_INITIATED]; initiationType:web::NavigationInitiationType::RENDERER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
web::NavigationItem* visible_item = [session_controller_ visibleItem]; web::NavigationItem* visible_item = [session_controller_ visibleItem];
ASSERT_TRUE(visible_item); ASSERT_TRUE(visible_item);
EXPECT_EQ("http://www.example.com/", visible_item->GetURL().spec()); EXPECT_EQ("http://www.example.com/", visible_item->GetURL().spec());
...@@ -1114,16 +1182,18 @@ TEST_F(CRWSessionControllerTest, ...@@ -1114,16 +1182,18 @@ TEST_F(CRWSessionControllerTest,
// navigation index. // navigation index.
TEST_F(CRWSessionControllerTest, VisibleItemWithPendingNavigationIndex) { TEST_F(CRWSessionControllerTest, VisibleItemWithPendingNavigationIndex) {
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com") addPendingItem:GURL("http://www.example.com")
referrer:MakeReferrer("http://www.example.com/a") referrer:MakeReferrer("http://www.example.com/a")
transition:ui::PAGE_TRANSITION_LINK transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com/0") addPendingItem:GURL("http://www.example.com/0")
referrer:MakeReferrer("http://www.example.com/b") referrer:MakeReferrer("http://www.example.com/b")
transition:ui::PAGE_TRANSITION_LINK transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
[session_controller_ setPendingItemIndex:0]; [session_controller_ setPendingItemIndex:0];
...@@ -1137,16 +1207,18 @@ TEST_F(CRWSessionControllerTest, VisibleItemWithPendingNavigationIndex) { ...@@ -1137,16 +1207,18 @@ TEST_F(CRWSessionControllerTest, VisibleItemWithPendingNavigationIndex) {
// redirects. // redirects.
TEST_F(CRWSessionControllerTest, BackwardItemsForAllRedirects) { TEST_F(CRWSessionControllerTest, BackwardItemsForAllRedirects) {
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com") addPendingItem:GURL("http://www.example.com")
referrer:MakeReferrer("http://www.example.com/a") referrer:MakeReferrer("http://www.example.com/a")
transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT
initiationType:web::NavigationInitiationType::RENDERER_INITIATED]; initiationType:web::NavigationInitiationType::RENDERER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
[session_controller_ [session_controller_
addPendingItem:GURL("http://www.example.com/0") addPendingItem:GURL("http://www.example.com/0")
referrer:MakeReferrer("http://www.example.com/b") referrer:MakeReferrer("http://www.example.com/b")
transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT
initiationType:web::NavigationInitiationType::RENDERER_INITIATED]; initiationType:web::NavigationInitiationType::RENDERER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem]; [session_controller_ commitPendingItem];
EXPECT_EQ(0U, [session_controller_ backwardItems].size()); EXPECT_EQ(0U, [session_controller_ backwardItems].size());
} }
......
...@@ -192,7 +192,8 @@ void NavigationManagerImpl::AddPendingItem( ...@@ -192,7 +192,8 @@ void NavigationManagerImpl::AddPendingItem(
[session_controller_ addPendingItem:url [session_controller_ addPendingItem:url
referrer:referrer referrer:referrer
transition:navigation_type transition:navigation_type
initiationType:initiation_type]; initiationType:initiation_type
userAgentOverrideOption:user_agent_override_option];
// Set the user agent type for web URLs. // Set the user agent type for web URLs.
NavigationItem* pending_item = GetPendingItem(); NavigationItem* pending_item = GetPendingItem();
......
...@@ -515,17 +515,355 @@ TEST_F(NavigationManagerTest, OffsetsWithPendingTransientEntry) { ...@@ -515,17 +515,355 @@ TEST_F(NavigationManagerTest, OffsetsWithPendingTransientEntry) {
EXPECT_EQ(0, navigation_manager()->GetIndexForOffset(-1)); EXPECT_EQ(0, navigation_manager()->GetIndexForOffset(-1));
} }
// Tests that when given a pending item, adding a new pending item replaces the
// existing pending item if their URLs are different.
TEST_F(NavigationManagerTest, ReplacePendingItemIfDiffernetURL) {
GURL existing_url = GURL("http://www.existing.com");
navigation_manager()->AddPendingItem(
existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::INHERIT);
ASSERT_TRUE(navigation_manager()->GetPendingItem());
EXPECT_EQ(existing_url, navigation_manager()->GetPendingItem()->GetURL());
EXPECT_EQ(0, navigation_manager()->GetItemCount());
GURL new_url = GURL("http://www.new.com");
navigation_manager()->AddPendingItem(
new_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::INHERIT);
ASSERT_TRUE(navigation_manager()->GetPendingItem());
EXPECT_EQ(new_url, navigation_manager()->GetPendingItem()->GetURL());
EXPECT_EQ(0, navigation_manager()->GetItemCount());
}
// Tests that when given a pending item, adding a new pending item with the same
// URL doesn't replace the existing pending item if new pending item is not a
// form submission.
TEST_F(NavigationManagerTest, NotReplaceSameUrlPendingItemIfNotFormSubmission) {
GURL existing_url = GURL("http://www.existing.com");
navigation_manager()->AddPendingItem(
existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::INHERIT);
ASSERT_TRUE(navigation_manager()->GetPendingItem());
EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
navigation_manager()->GetPendingItem()->GetTransitionType(),
ui::PAGE_TRANSITION_TYPED));
EXPECT_EQ(0, navigation_manager()->GetItemCount());
navigation_manager()->AddPendingItem(
existing_url, Referrer(), ui::PAGE_TRANSITION_LINK,
web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::INHERIT);
ASSERT_TRUE(navigation_manager()->GetPendingItem());
EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
navigation_manager()->GetPendingItem()->GetTransitionType(),
ui::PAGE_TRANSITION_TYPED));
EXPECT_EQ(0, navigation_manager()->GetItemCount());
}
// Tests that when given a pending item, adding a new pending item with the same
// URL replaces the existing pending item if new pending item is a form
// submission while existing pending item is not.
TEST_F(NavigationManagerTest, ReplaceSameUrlPendingItemIfFormSubmission) {
GURL existing_url = GURL("http://www.existing.com");
navigation_manager()->AddPendingItem(
existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::INHERIT);
ASSERT_TRUE(navigation_manager()->GetPendingItem());
EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
navigation_manager()->GetPendingItem()->GetTransitionType(),
ui::PAGE_TRANSITION_TYPED));
EXPECT_EQ(0, navigation_manager()->GetItemCount());
navigation_manager()->AddPendingItem(
existing_url, Referrer(), ui::PAGE_TRANSITION_FORM_SUBMIT,
web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::INHERIT);
ASSERT_TRUE(navigation_manager()->GetPendingItem());
EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
navigation_manager()->GetPendingItem()->GetTransitionType(),
ui::PAGE_TRANSITION_FORM_SUBMIT));
EXPECT_EQ(0, navigation_manager()->GetItemCount());
}
// Tests that when given a pending item, adding a new pending item with the same
// URL doesn't replace the existing pending item if the user agent override
// option is INHERIT.
TEST_F(NavigationManagerTest, NotReplaceSameUrlPendingItemIfOverrideInherit) {
GURL existing_url = GURL("http://www.existing.com");
navigation_manager()->AddPendingItem(
existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::INHERIT);
ASSERT_TRUE(navigation_manager()->GetPendingItem());
EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
navigation_manager()->GetPendingItem()->GetTransitionType(),
ui::PAGE_TRANSITION_TYPED));
EXPECT_EQ(0, navigation_manager()->GetItemCount());
navigation_manager()->AddPendingItem(
existing_url, Referrer(), ui::PAGE_TRANSITION_RELOAD,
web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::INHERIT);
ASSERT_TRUE(navigation_manager()->GetPendingItem());
EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
navigation_manager()->GetPendingItem()->GetTransitionType(),
ui::PAGE_TRANSITION_TYPED));
EXPECT_EQ(0, navigation_manager()->GetItemCount());
}
// Tests that when given a pending item, adding a new pending item with the same
// URL replaces the existing pending item if the user agent override option is
// DESKTOP.
TEST_F(NavigationManagerTest, ReplaceSameUrlPendingItemIfOverrideDesktop) {
GURL existing_url = GURL("http://www.existing.com");
navigation_manager()->AddPendingItem(
existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::MOBILE);
ASSERT_TRUE(navigation_manager()->GetPendingItem());
EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
navigation_manager()->GetPendingItem()->GetTransitionType(),
ui::PAGE_TRANSITION_TYPED));
EXPECT_EQ(web::UserAgentType::MOBILE,
navigation_manager()->GetPendingItem()->GetUserAgentType());
EXPECT_EQ(0, navigation_manager()->GetItemCount());
navigation_manager()->AddPendingItem(
existing_url, Referrer(), ui::PAGE_TRANSITION_RELOAD,
web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::DESKTOP);
ASSERT_TRUE(navigation_manager()->GetPendingItem());
EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
navigation_manager()->GetPendingItem()->GetTransitionType(),
ui::PAGE_TRANSITION_RELOAD));
EXPECT_EQ(0, navigation_manager()->GetItemCount());
}
// Tests that when given a pending item, adding a new pending item with the same
// URL replaces the existing pending item if the user agent override option is
// MOBILE.
TEST_F(NavigationManagerTest, ReplaceSameUrlPendingItemIfOverrideMobile) {
GURL existing_url = GURL("http://www.existing.com");
navigation_manager()->AddPendingItem(
existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::DESKTOP);
ASSERT_TRUE(navigation_manager()->GetPendingItem());
EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
navigation_manager()->GetPendingItem()->GetTransitionType(),
ui::PAGE_TRANSITION_TYPED));
EXPECT_EQ(web::UserAgentType::DESKTOP,
navigation_manager()->GetPendingItem()->GetUserAgentType());
EXPECT_EQ(0, navigation_manager()->GetItemCount());
navigation_manager()->AddPendingItem(
existing_url, Referrer(), ui::PAGE_TRANSITION_RELOAD,
web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::MOBILE);
ASSERT_TRUE(navigation_manager()->GetPendingItem());
EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
navigation_manager()->GetPendingItem()->GetTransitionType(),
ui::PAGE_TRANSITION_RELOAD));
EXPECT_EQ(0, navigation_manager()->GetItemCount());
}
// Tests that when the last committed item exists, adding a pending item
// succeeds if the new item's URL is different from the last committed item.
TEST_F(NavigationManagerTest, AddPendingItemIfDiffernetURL) {
GURL existing_url = GURL("http://www.existing.com");
navigation_manager()->AddPendingItem(
existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::INHERIT);
[session_controller() commitPendingItem];
ASSERT_TRUE(navigation_manager()->GetLastCommittedItem());
EXPECT_EQ(existing_url,
navigation_manager()->GetLastCommittedItem()->GetURL());
EXPECT_EQ(1, navigation_manager()->GetItemCount());
GURL new_url = GURL("http://www.new.com");
navigation_manager()->AddPendingItem(
new_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::INHERIT);
ASSERT_TRUE(navigation_manager()->GetPendingItem());
EXPECT_EQ(new_url, navigation_manager()->GetPendingItem()->GetURL());
EXPECT_EQ(1, navigation_manager()->GetItemCount());
}
// Tests that when the last committed item exists, adding a pending item with
// the same URL fails if the new item is not form submission.
TEST_F(NavigationManagerTest, NotAddSameUrlPendingItemIfNotFormSubmission) {
GURL existing_url = GURL("http://www.existing.com");
navigation_manager()->AddPendingItem(
existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::INHERIT);
[session_controller() commitPendingItem];
ASSERT_TRUE(navigation_manager()->GetLastCommittedItem());
EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
navigation_manager()->GetLastCommittedItem()->GetTransitionType(),
ui::PAGE_TRANSITION_TYPED));
EXPECT_FALSE(navigation_manager()->GetPendingItem());
EXPECT_EQ(1, navigation_manager()->GetItemCount());
navigation_manager()->AddPendingItem(
existing_url, Referrer(), ui::PAGE_TRANSITION_LINK,
web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::INHERIT);
EXPECT_FALSE(navigation_manager()->GetPendingItem());
EXPECT_EQ(1, navigation_manager()->GetItemCount());
}
// Tests that when the last committed item exists, adding a pending item with
// the same URL succeeds if the new item is a form submission while the last
// committed item is not.
TEST_F(NavigationManagerTest, AddSameUrlPendingItemIfFormSubmission) {
GURL existing_url = GURL("http://www.existing.com");
navigation_manager()->AddPendingItem(
existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::INHERIT);
[session_controller() commitPendingItem];
ASSERT_TRUE(navigation_manager()->GetLastCommittedItem());
EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
navigation_manager()->GetLastCommittedItem()->GetTransitionType(),
ui::PAGE_TRANSITION_TYPED));
EXPECT_FALSE(navigation_manager()->GetPendingItem());
EXPECT_EQ(1, navigation_manager()->GetItemCount());
// Add if new transition is a form submission.
navigation_manager()->AddPendingItem(
existing_url, Referrer(), ui::PAGE_TRANSITION_FORM_SUBMIT,
web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::INHERIT);
ASSERT_TRUE(navigation_manager()->GetPendingItem());
EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
navigation_manager()->GetPendingItem()->GetTransitionType(),
ui::PAGE_TRANSITION_FORM_SUBMIT));
EXPECT_EQ(1, navigation_manager()->GetItemCount());
}
// Tests that when the last committed item exists, adding a pending item with
// the same URL fails if both the new item and the last committed item are form
// submissions.
TEST_F(NavigationManagerTest,
NotAddSameUrlPendingItemIfDuplicateFormSubmission) {
GURL existing_url = GURL("http://www.existing.com");
navigation_manager()->AddPendingItem(
existing_url, Referrer(), ui::PAGE_TRANSITION_FORM_SUBMIT,
web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::INHERIT);
[session_controller() commitPendingItem];
ASSERT_TRUE(navigation_manager()->GetLastCommittedItem());
EXPECT_FALSE(navigation_manager()->GetPendingItem());
EXPECT_EQ(1, navigation_manager()->GetItemCount());
navigation_manager()->AddPendingItem(
existing_url, Referrer(), ui::PAGE_TRANSITION_FORM_SUBMIT,
web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::INHERIT);
EXPECT_FALSE(navigation_manager()->GetPendingItem());
EXPECT_EQ(1, navigation_manager()->GetItemCount());
}
// Tests that when the last committed item exists, adding a pending item with
// the same URL fails if the user agent override option is INHERIT.
TEST_F(NavigationManagerTest, NotAddSameUrlPendingItemIfOverrideInherit) {
GURL existing_url = GURL("http://www.existing.com");
navigation_manager()->AddPendingItem(
existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::INHERIT);
[session_controller() commitPendingItem];
ASSERT_TRUE(navigation_manager()->GetLastCommittedItem());
EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
navigation_manager()->GetLastCommittedItem()->GetTransitionType(),
ui::PAGE_TRANSITION_TYPED));
EXPECT_EQ(1, navigation_manager()->GetItemCount());
navigation_manager()->AddPendingItem(
existing_url, Referrer(), ui::PAGE_TRANSITION_RELOAD,
web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::INHERIT);
EXPECT_FALSE(navigation_manager()->GetPendingItem());
EXPECT_EQ(1, navigation_manager()->GetItemCount());
}
// Tests that when the last committed item exists, adding a pending item with
// the same URL succeeds if the user agent override option is DESKTOP.
TEST_F(NavigationManagerTest, AddSameUrlPendingItemIfOverrideDesktop) {
GURL existing_url = GURL("http://www.existing.com");
navigation_manager()->AddPendingItem(
existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::MOBILE);
[session_controller() commitPendingItem];
ASSERT_TRUE(navigation_manager()->GetLastCommittedItem());
EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
navigation_manager()->GetLastCommittedItem()->GetTransitionType(),
ui::PAGE_TRANSITION_TYPED));
EXPECT_EQ(web::UserAgentType::MOBILE,
navigation_manager()->GetLastCommittedItem()->GetUserAgentType());
EXPECT_EQ(1, navigation_manager()->GetItemCount());
navigation_manager()->AddPendingItem(
existing_url, Referrer(), ui::PAGE_TRANSITION_RELOAD,
web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::DESKTOP);
ASSERT_TRUE(navigation_manager()->GetPendingItem());
EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
navigation_manager()->GetPendingItem()->GetTransitionType(),
ui::PAGE_TRANSITION_RELOAD));
EXPECT_EQ(1, navigation_manager()->GetItemCount());
}
// Tests that when the last committed item exists, adding a pending item with
// the same URL succeeds if the user agent override option is MOBILE.
TEST_F(NavigationManagerTest, AddSameUrlPendingItemIfOverrideMobile) {
GURL existing_url = GURL("http://www.existing.com");
navigation_manager()->AddPendingItem(
existing_url, Referrer(), ui::PAGE_TRANSITION_TYPED,
web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::DESKTOP);
[session_controller() commitPendingItem];
ASSERT_TRUE(navigation_manager()->GetLastCommittedItem());
EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
navigation_manager()->GetLastCommittedItem()->GetTransitionType(),
ui::PAGE_TRANSITION_TYPED));
EXPECT_EQ(web::UserAgentType::DESKTOP,
navigation_manager()->GetLastCommittedItem()->GetUserAgentType());
EXPECT_EQ(1, navigation_manager()->GetItemCount());
navigation_manager()->AddPendingItem(
existing_url, Referrer(), ui::PAGE_TRANSITION_RELOAD,
web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::MOBILE);
ASSERT_TRUE(navigation_manager()->GetPendingItem());
EXPECT_TRUE(ui::PageTransitionCoreTypeIs(
navigation_manager()->GetPendingItem()->GetTransitionType(),
ui::PAGE_TRANSITION_RELOAD));
EXPECT_EQ(1, navigation_manager()->GetItemCount());
}
// Tests that desktop user agent can be enforced to use for next pending item // Tests that desktop user agent can be enforced to use for next pending item
// when UserAgentOverrideOption is DESKTOP. // when UserAgentOverrideOption is DESKTOP.
TEST_F(NavigationManagerTest, OverrideUserAgentWithDesktop) { TEST_F(NavigationManagerTest, OverrideUserAgentWithDesktop) {
navigation_manager()->AddPendingItem( navigation_manager()->AddPendingItem(
GURL("http://www.1.com"), Referrer(), ui::PAGE_TRANSITION_TYPED, GURL("http://www.1.com"), Referrer(), ui::PAGE_TRANSITION_TYPED,
web::NavigationInitiationType::USER_INITIATED, web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::INHERIT); web::NavigationManager::UserAgentOverrideOption::MOBILE);
[session_controller() commitPendingItem]; [session_controller() commitPendingItem];
NavigationItem* last_committed_item = NavigationItem* last_committed_item =
navigation_manager()->GetLastCommittedItem(); navigation_manager()->GetLastCommittedItem();
EXPECT_EQ(UserAgentType::MOBILE, last_committed_item->GetUserAgentType()); EXPECT_EQ(UserAgentType::MOBILE, last_committed_item->GetUserAgentType());
EXPECT_EQ(1, navigation_manager()->GetItemCount());
navigation_manager()->AddPendingItem( navigation_manager()->AddPendingItem(
GURL("http://www.2.com"), Referrer(), ui::PAGE_TRANSITION_TYPED, GURL("http://www.2.com"), Referrer(), ui::PAGE_TRANSITION_TYPED,
...@@ -534,6 +872,7 @@ TEST_F(NavigationManagerTest, OverrideUserAgentWithDesktop) { ...@@ -534,6 +872,7 @@ TEST_F(NavigationManagerTest, OverrideUserAgentWithDesktop) {
ASSERT_TRUE(navigation_manager()->GetPendingItem()); ASSERT_TRUE(navigation_manager()->GetPendingItem());
EXPECT_EQ(UserAgentType::DESKTOP, EXPECT_EQ(UserAgentType::DESKTOP,
navigation_manager()->GetPendingItem()->GetUserAgentType()); navigation_manager()->GetPendingItem()->GetUserAgentType());
EXPECT_EQ(1, navigation_manager()->GetItemCount());
} }
// Tests that mobile user agent can be enforced to use for next pending item // Tests that mobile user agent can be enforced to use for next pending item
......
...@@ -109,10 +109,12 @@ class CRWSSLStatusUpdaterTest : public web::WebTest { ...@@ -109,10 +109,12 @@ class CRWSSLStatusUpdaterTest : public web::WebTest {
navigationItems:std::move(nav_items) navigationItems:std::move(nav_items)
lastCommittedItemIndex:0]); lastCommittedItemIndex:0]);
[session_controller [session_controller
addPendingItem:GURL(item_url_spec) addPendingItem:GURL(item_url_spec)
referrer:Referrer() referrer:Referrer()
transition:ui::PAGE_TRANSITION_LINK transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::USER_INITIATED]; initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:NavigationManager::UserAgentOverrideOption::
INHERIT];
[session_controller commitPendingItem]; [session_controller commitPendingItem];
return session_controller.autorelease(); return session_controller.autorelease();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment