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 @@
#include <vector>
#import "ios/web/navigation/navigation_item_impl_list.h"
#import "ios/web/public/navigation_manager.h"
#include "ui/base/page_transition_types.h"
#include "url/gurl.h"
......@@ -77,14 +78,17 @@ struct Referrer;
// Sets the corresponding BrowserState.
- (void)setBrowserState:(web::BrowserState*)browserState;
// Add a new item with the given url, referrer, and navigation type, making it
// the current item. If pending item is the same as current item, this does
// nothing. |referrer| may be nil if there isn't one. The item starts out as
// pending, and will be lost unless |-commitPendingItem| is called.
// Add a new item with the given url, referrer, navigation type and user agent
// override option, making it the current item. If pending item is the same as
// current item, this does nothing. |referrer| may be nil if there isn't one.
// The item starts out as pending, and will be lost unless |-commitPendingItem|
// is called.
- (void)addPendingItem:(const GURL&)url
referrer:(const web::Referrer&)referrer
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
// redirects. Does nothing if there is no pending item.
......
......@@ -80,6 +80,21 @@ initiationType:(web::NavigationInitiationType)initiationType;
// |index| in |items| has ui::PAGE_TRANSITION_IS_REDIRECT_MASK.
- (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
@implementation CRWSessionController
......@@ -270,7 +285,9 @@ initiationType:(web::NavigationInitiationType)initiationType;
- (void)addPendingItem:(const GURL&)url
referrer:(const web::Referrer&)ref
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
// of adding a new item.
DCHECK((trans & ui::PAGE_TRANSITION_SERVER_REDIRECT) == 0);
......@@ -278,27 +295,9 @@ initiationType:(web::NavigationInitiationType)initiationType;
[self discardTransientItem];
self.pendingItemIndex = -1;
// Don't create a new item if it's already the same as the current item,
// allowing this routine to be called multiple times in a row without issue.
// Note: CRWSessionController currently has the responsibility to distinguish
// between new navigations and history stack navigation, hence the inclusion
// of specific transiton type logic here, in order to make it reliable with
// real-world observed behavior.
// TODO(crbug.com/676129): Fix the way changes are detected/reported elsewhere
// in the web layer so that this hack can be removed.
// Remove the workaround code from -presentSafeBrowsingWarningForResource:.
web::NavigationItemImpl* currentItem = self.currentItem;
if (currentItem) {
BOOL hasSameURL = currentItem->GetURL() == url;
BOOL isPendingTransitionFormSubmit =
PageTransitionCoreTypeIs(trans, ui::PAGE_TRANSITION_FORM_SUBMIT);
BOOL isCurrentTransitionFormSubmit = PageTransitionCoreTypeIs(
currentItem->GetTransitionType(), ui::PAGE_TRANSITION_FORM_SUBMIT);
BOOL shouldCreatePendingItem =
!hasSameURL ||
(isPendingTransitionFormSubmit && !isCurrentTransitionFormSubmit);
if (!shouldCreatePendingItem) {
if (![self shouldCreatePendingItemWithURL:url
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
......@@ -307,7 +306,6 @@ initiationType:(web::NavigationInitiationType)initiationType;
_navigationManager->GetFacadeDelegate()->OnNavigationItemPending();
return;
}
}
_pendingItem = [self itemWithURL:url
referrer:ref
......@@ -319,6 +317,64 @@ initiationType:(web::NavigationInitiationType)initiationType;
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
// between new navigations and history stack navigation, hence the inclusion
// of specific transiton type logic here, in order to make it reliable with
// real-world observed behavior.
// TODO(crbug.com/676129): Fix the way changes are detected/reported elsewhere
// in the web layer so that this hack can be removed.
// Remove the workaround code from -presentSafeBrowsingWarningForResource:.
web::NavigationItemImpl* currentItem = self.currentItem;
if (!currentItem)
return YES;
// User agent override option should always be different from the user agent
// type of the pending item, or the last committed item if pending doesn't
// exist.
DCHECK(userAgentOverrideOption !=
web::NavigationManager::UserAgentOverrideOption::DESKTOP ||
currentItem->GetUserAgentType() != web::UserAgentType::DESKTOP);
DCHECK(userAgentOverrideOption !=
web::NavigationManager::UserAgentOverrideOption::MOBILE ||
currentItem->GetUserAgentType() != web::UserAgentType::MOBILE);
BOOL hasSameURL = self.currentItem->GetURL() == URL;
if (!hasSameURL) {
// Different url indicates that it's not a duplicate item.
return YES;
}
BOOL isPendingTransitionFormSubmit =
PageTransitionCoreTypeIs(transition, ui::PAGE_TRANSITION_FORM_SUBMIT);
BOOL isCurrentTransitionFormSubmit = PageTransitionCoreTypeIs(
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;
}
BOOL isPendingTransitionReload =
PageTransitionCoreTypeIs(transition, ui::PAGE_TRANSITION_RELOAD);
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 {
// If there is no pending item, navigation is probably happening within the
// session history. Don't modify the item list.
......
......@@ -23,6 +23,8 @@
#import "testing/gtest_mac.h"
#include "testing/platform_test.h"
using UserAgentOverrideOption = web::NavigationManager::UserAgentOverrideOption;
@interface CRWSessionController (Testing)
- (const GURL&)URLForItemAtIndex:(size_t)index;
- (const GURL&)currentURL;
......@@ -69,7 +71,8 @@ TEST_F(CRWSessionControllerTest, SetPendingIndex) {
addPendingItem:GURL("http://www.example.com")
referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
EXPECT_EQ(-1, [session_controller_ pendingItemIndex]);
......@@ -84,7 +87,8 @@ TEST_F(CRWSessionControllerTest, addPendingItem) {
addPendingItem:GURL("http://www.url.com")
referrer:MakeReferrer("http://www.referer.com")
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_EQ(
......@@ -97,14 +101,16 @@ TEST_F(CRWSessionControllerTest, addPendingItemWithCommittedItems) {
addPendingItem:GURL("http://www.committed.url.com")
referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
[session_controller_
addPendingItem:GURL("http://www.url.com")
referrer:MakeReferrer("http://www.referer.com")
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(GURL("http://www.committed.url.com/"),
......@@ -120,13 +126,15 @@ TEST_F(CRWSessionControllerTest, addPendingItemWithExistingPendingItemIndex) {
addPendingItem:GURL("http://www.example.com")
referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
[session_controller_
addPendingItem:GURL("http://www.example.com/0")
referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
// Set 0 as pending item index.
......@@ -140,7 +148,8 @@ TEST_F(CRWSessionControllerTest, addPendingItemWithExistingPendingItemIndex) {
addPendingItem:GURL("http://www.example.com/1")
referrer:web::Referrer()
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"),
[session_controller_ pendingItem]->GetURL());
EXPECT_EQ(-1, [session_controller_ pendingItemIndex]);
......@@ -151,12 +160,14 @@ TEST_F(CRWSessionControllerTest, addPendingItemOverriding) {
addPendingItem:GURL("http://www.url.com")
referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_
addPendingItem:GURL("http://www.another.url.com")
referrer:MakeReferrer("http://www.another.referer.com")
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_EQ(
......@@ -169,7 +180,8 @@ TEST_F(CRWSessionControllerTest, addPendingItemAndCommit) {
addPendingItem:GURL("http://www.url.com")
referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
EXPECT_EQ(1U, [session_controller_ items].size());
......@@ -184,12 +196,14 @@ TEST_F(CRWSessionControllerTest, addPendingItemOverridingAndCommit) {
addPendingItem:GURL("http://www.url.com")
referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_
addPendingItem:GURL("http://www.another.url.com")
referrer:MakeReferrer("http://www.another.referer.com")
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
EXPECT_EQ(1U, [session_controller_ items].size());
......@@ -204,14 +218,16 @@ TEST_F(CRWSessionControllerTest, addPendingItemAndCommitMultiple) {
addPendingItem:GURL("http://www.url.com")
referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
[session_controller_
addPendingItem:GURL("http://www.another.url.com")
referrer:MakeReferrer("http://www.another.referer.com")
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
EXPECT_EQ(2U, [session_controller_ items].size());
......@@ -228,7 +244,8 @@ TEST_F(CRWSessionControllerTest, addPendingItemAndDiscard) {
addPendingItem:GURL("http://www.url.com")
referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ discardNonCommittedItems];
EXPECT_TRUE([session_controller_ items].empty());
......@@ -241,7 +258,8 @@ TEST_F(CRWSessionControllerTest, setPendingItemIndexAndDiscard) {
addPendingItem:GURL("http://www.example.com")
referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
[session_controller_ setPendingItemIndex:0];
......@@ -258,14 +276,16 @@ TEST_F(CRWSessionControllerTest, addPendingItemAndDiscardAndAddAndCommit) {
addPendingItem:GURL("http://www.url.com")
referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ discardNonCommittedItems];
[session_controller_
addPendingItem:GURL("http://www.another.url.com")
referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
EXPECT_EQ(1U, [session_controller_ items].size());
......@@ -280,14 +300,16 @@ TEST_F(CRWSessionControllerTest, addPendingItemAndCommitAndAddAndDiscard) {
addPendingItem:GURL("http://www.url.com")
referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
[session_controller_
addPendingItem:GURL("http://www.another.url.com")
referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ discardNonCommittedItems];
EXPECT_EQ(1U, [session_controller_ items].size());
......@@ -312,7 +334,8 @@ TEST_F(CRWSessionControllerTest,
addPendingItem:GURL("http://www.url.com/")
referrer:MakeReferrer("http://www.referrer.com/")
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
// Commit pending item when there is no such one
......@@ -330,19 +353,22 @@ TEST_F(CRWSessionControllerTest, commitPendingItemWithExistingForwardItems) {
addPendingItem:GURL("http://www.example.com/0")
referrer:MakeReferrer("http://www.example.com/a")
transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::RENDERER_INITIATED];
initiationType:web::NavigationInitiationType::RENDERER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
[session_controller_
addPendingItem:GURL("http://www.example.com/1")
referrer:MakeReferrer("http://www.example.com/b")
transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::RENDERER_INITIATED];
initiationType:web::NavigationInitiationType::RENDERER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
[session_controller_
addPendingItem:GURL("http://www.example.com/2")
referrer:MakeReferrer("http://www.example.com/c")
transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::RENDERER_INITIATED];
initiationType:web::NavigationInitiationType::RENDERER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
// Go back to the first item.
......@@ -353,7 +379,8 @@ TEST_F(CRWSessionControllerTest, commitPendingItemWithExistingForwardItems) {
addPendingItem:GURL("http://www.example.com/2")
referrer:MakeReferrer("http://www.example.com/c")
transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::RENDERER_INITIATED];
initiationType:web::NavigationInitiationType::RENDERER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
// All forward items should go away.
......@@ -369,19 +396,22 @@ TEST_F(CRWSessionControllerTest, commitPendingItemIndex) {
addPendingItem:GURL("http://www.example.com/0")
referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
[session_controller_
addPendingItem:GURL("http://www.example.com/1")
referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
[session_controller_
addPendingItem:GURL("http://www.example.com/2")
referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
ASSERT_EQ(3U, [session_controller_ items].size());
......@@ -420,7 +450,8 @@ TEST_F(CRWSessionControllerTest,
addPendingItem:GURL("http://www.url.com")
referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
// Discard noncommitted items when there is no such one
......@@ -444,7 +475,8 @@ TEST_F(CRWSessionControllerTest, updatePendingItemWithPendingItem) {
addPendingItem:GURL("http://www.url.com")
referrer:MakeReferrer("http://www.referer.com")
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")];
EXPECT_EQ(
......@@ -458,7 +490,8 @@ TEST_F(CRWSessionControllerTest,
addPendingItem:GURL("http://www.url.com")
referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
[session_controller_ updatePendingItem:GURL("http://www.another.url.com")];
[session_controller_ commitPendingItem];
......@@ -477,13 +510,15 @@ TEST_F(CRWSessionControllerTest, CopyState) {
addPendingItem:GURL("http://www.url.com/2")
referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
[session_controller_
addPendingItem:GURL("http://www.url.com/3")
referrer:web::Referrer()
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.
base::scoped_nsobject<CRWSessionController> other_session_controller(
......@@ -492,13 +527,15 @@ TEST_F(CRWSessionControllerTest, CopyState) {
addPendingItem:GURL("http://www.url.com/0")
referrer:web::Referrer()
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
addPendingItem:GURL("http://www.url.com/1")
referrer:web::Referrer()
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.
EXPECT_TRUE([session_controller_ canPruneAllButLastCommittedItem]);
......@@ -525,13 +562,15 @@ TEST_F(CRWSessionControllerTest, CopyStateFromEmptySessionController) {
addPendingItem:GURL("http://www.url.com/0")
referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
[session_controller_
addPendingItem:GURL("http://www.url.com/1")
referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
// Create empty source session controller.
......@@ -565,13 +604,15 @@ TEST_F(CRWSessionControllerTest, CopyStateToEmptySessionController) {
addPendingItem:GURL("http://www.url.com/0")
referrer:web::Referrer()
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
addPendingItem:GURL("http://www.url.com/1")
referrer:web::Referrer()
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
// |session_controller_| is unchanged.
......@@ -593,13 +634,15 @@ TEST_F(CRWSessionControllerTest, CopyStateDuringPendingHistoryNavigation) {
addPendingItem:GURL("http://www.url.com/1")
referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
[session_controller_
addPendingItem:GURL("http://www.url.com/2")
referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
// Create source session controller with 1 committed item.
......@@ -609,13 +652,15 @@ TEST_F(CRWSessionControllerTest, CopyStateDuringPendingHistoryNavigation) {
addPendingItem:GURL("http://www.url.com/0")
referrer:web::Referrer()
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
addPendingItem:GURL("http://www.url.com/1")
referrer:web::Referrer()
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.
[session_controller_ setPendingItemIndex:0];
......@@ -642,14 +687,16 @@ TEST_F(CRWSessionControllerTest, CopyStateWithTransientItem) {
addPendingItem:GURL("http://www.url.com/1")
referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
GURL second_url = GURL("http://www.url.com/2");
[session_controller_
addPendingItem:second_url
referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ addTransientItemWithURL:second_url];
// Create source session controller with 1 committed item.
......@@ -659,13 +706,15 @@ TEST_F(CRWSessionControllerTest, CopyStateWithTransientItem) {
addPendingItem:GURL("http://www.url.com/0")
referrer:web::Referrer()
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
addPendingItem:GURL("http://www.url.com/1")
referrer:web::Referrer()
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
// |session_controller_| is unchanged.
......@@ -753,21 +802,24 @@ TEST_F(CRWSessionControllerTest, PreviousNavigationItem) {
addPendingItem:GURL("http://www.url.com")
referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
EXPECT_EQ(session_controller_.get().previousItemIndex, -1);
[session_controller_
addPendingItem:GURL("http://www.url1.com")
referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
EXPECT_EQ(session_controller_.get().previousItemIndex, 0);
[session_controller_
addPendingItem:GURL("http://www.url2.com")
referrer:MakeReferrer("http://www.referer.com")
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
EXPECT_EQ(session_controller_.get().previousItemIndex, 1);
......@@ -916,25 +968,29 @@ TEST_F(CRWSessionControllerTest, TestBackwardForwardItems) {
addPendingItem:GURL("http://www.example.com/0")
referrer:MakeReferrer("http://www.example.com/a")
transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
[session_controller_
addPendingItem:GURL("http://www.example.com/1")
referrer:MakeReferrer("http://www.example.com/b")
transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
[session_controller_
addPendingItem:GURL("http://www.example.com/redirect")
referrer:MakeReferrer("http://www.example.com/r")
transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
[session_controller_
addPendingItem:GURL("http://www.example.com/2")
referrer:MakeReferrer("http://www.example.com/c")
transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
EXPECT_EQ(3, session_controller_.get().lastCommittedItemIndex);
......@@ -960,31 +1016,36 @@ TEST_F(CRWSessionControllerTest, GoToItemAtIndex) {
addPendingItem:GURL("http://www.example.com/0")
referrer:MakeReferrer("http://www.example.com/a")
transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
[session_controller_
addPendingItem:GURL("http://www.example.com/1")
referrer:MakeReferrer("http://www.example.com/b")
transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
[session_controller_
addPendingItem:GURL("http://www.example.com/redirect")
referrer:MakeReferrer("http://www.example.com/r")
transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
[session_controller_
addPendingItem:GURL("http://www.example.com/2")
referrer:MakeReferrer("http://www.example.com/c")
transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
[session_controller_
addPendingItem:GURL("http://www.example.com/3")
referrer:MakeReferrer("http://www.example.com/d")
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")];
EXPECT_EQ(3, session_controller_.get().lastCommittedItemIndex);
EXPECT_EQ(2, session_controller_.get().previousItemIndex);
......@@ -1036,7 +1097,8 @@ TEST_F(CRWSessionControllerTest, VisibleItemWithCommittedAndTransientItems) {
addPendingItem:GURL("http://www.example.com/0")
referrer:MakeReferrer("http://www.example.com/a")
transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
[session_controller_ addTransientItemWithURL:GURL("http://www.example.com")];
web::NavigationItem* visible_item = [session_controller_ visibleItem];
......@@ -1051,7 +1113,8 @@ TEST_F(CRWSessionControllerTest,
addPendingItem:GURL("http://www.example.com/0")
referrer:MakeReferrer("http://www.example.com/a")
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];
ASSERT_TRUE(visible_item);
EXPECT_EQ("http://www.example.com/0", visible_item->GetURL().spec());
......@@ -1065,13 +1128,15 @@ TEST_F(CRWSessionControllerTest,
addPendingItem:GURL("http://www.example.com")
referrer:MakeReferrer("http://www.example.com/a")
transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
[session_controller_
addPendingItem:GURL("http://www.example.com/0")
referrer:MakeReferrer("http://www.example.com/b")
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];
ASSERT_TRUE(visible_item);
EXPECT_EQ("http://www.example.com/0", visible_item->GetURL().spec());
......@@ -1085,7 +1150,8 @@ TEST_F(CRWSessionControllerTest,
addPendingItem:GURL("http://www.example.com/0")
referrer:MakeReferrer("http://www.example.com/a")
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];
ASSERT_FALSE(visible_item);
}
......@@ -1098,13 +1164,15 @@ TEST_F(CRWSessionControllerTest,
addPendingItem:GURL("http://www.example.com")
referrer:MakeReferrer("http://www.example.com/a")
transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::RENDERER_INITIATED];
initiationType:web::NavigationInitiationType::RENDERER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
[session_controller_
addPendingItem:GURL("http://www.example.com/0")
referrer:MakeReferrer("http://www.example.com/b")
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];
ASSERT_TRUE(visible_item);
EXPECT_EQ("http://www.example.com/", visible_item->GetURL().spec());
......@@ -1117,13 +1185,15 @@ TEST_F(CRWSessionControllerTest, VisibleItemWithPendingNavigationIndex) {
addPendingItem:GURL("http://www.example.com")
referrer:MakeReferrer("http://www.example.com/a")
transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
[session_controller_
addPendingItem:GURL("http://www.example.com/0")
referrer:MakeReferrer("http://www.example.com/b")
transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
[session_controller_ setPendingItemIndex:0];
......@@ -1140,13 +1210,15 @@ TEST_F(CRWSessionControllerTest, BackwardItemsForAllRedirects) {
addPendingItem:GURL("http://www.example.com")
referrer:MakeReferrer("http://www.example.com/a")
transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT
initiationType:web::NavigationInitiationType::RENDERER_INITIATED];
initiationType:web::NavigationInitiationType::RENDERER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
[session_controller_
addPendingItem:GURL("http://www.example.com/0")
referrer:MakeReferrer("http://www.example.com/b")
transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT
initiationType:web::NavigationInitiationType::RENDERER_INITIATED];
initiationType:web::NavigationInitiationType::RENDERER_INITIATED
userAgentOverrideOption:UserAgentOverrideOption::INHERIT];
[session_controller_ commitPendingItem];
EXPECT_EQ(0U, [session_controller_ backwardItems].size());
}
......
......@@ -192,7 +192,8 @@ void NavigationManagerImpl::AddPendingItem(
[session_controller_ addPendingItem:url
referrer:referrer
transition:navigation_type
initiationType:initiation_type];
initiationType:initiation_type
userAgentOverrideOption:user_agent_override_option];
// Set the user agent type for web URLs.
NavigationItem* pending_item = GetPendingItem();
......
......@@ -515,17 +515,355 @@ TEST_F(NavigationManagerTest, OffsetsWithPendingTransientEntry) {
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
// when UserAgentOverrideOption is DESKTOP.
TEST_F(NavigationManagerTest, OverrideUserAgentWithDesktop) {
navigation_manager()->AddPendingItem(
GURL("http://www.1.com"), Referrer(), ui::PAGE_TRANSITION_TYPED,
web::NavigationInitiationType::USER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::INHERIT);
web::NavigationManager::UserAgentOverrideOption::MOBILE);
[session_controller() commitPendingItem];
NavigationItem* last_committed_item =
navigation_manager()->GetLastCommittedItem();
EXPECT_EQ(UserAgentType::MOBILE, last_committed_item->GetUserAgentType());
EXPECT_EQ(1, navigation_manager()->GetItemCount());
navigation_manager()->AddPendingItem(
GURL("http://www.2.com"), Referrer(), ui::PAGE_TRANSITION_TYPED,
......@@ -534,6 +872,7 @@ TEST_F(NavigationManagerTest, OverrideUserAgentWithDesktop) {
ASSERT_TRUE(navigation_manager()->GetPendingItem());
EXPECT_EQ(UserAgentType::DESKTOP,
navigation_manager()->GetPendingItem()->GetUserAgentType());
EXPECT_EQ(1, navigation_manager()->GetItemCount());
}
// Tests that mobile user agent can be enforced to use for next pending item
......
......@@ -112,7 +112,9 @@ class CRWSSLStatusUpdaterTest : public web::WebTest {
addPendingItem:GURL(item_url_spec)
referrer:Referrer()
transition:ui::PAGE_TRANSITION_LINK
initiationType:web::NavigationInitiationType::USER_INITIATED];
initiationType:web::NavigationInitiationType::USER_INITIATED
userAgentOverrideOption:NavigationManager::UserAgentOverrideOption::
INHERIT];
[session_controller commitPendingItem];
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