| Index: ios/web/navigation/crw_session_controller_unittest.mm
|
| diff --git a/ios/web/navigation/crw_session_controller_unittest.mm b/ios/web/navigation/crw_session_controller_unittest.mm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..79a6dff1d8cba54c161ac517cf102f995849a071
|
| --- /dev/null
|
| +++ b/ios/web/navigation/crw_session_controller_unittest.mm
|
| @@ -0,0 +1,1022 @@
|
| +// Copyright 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#import <Foundation/Foundation.h>
|
| +
|
| +#include "base/logging.h"
|
| +#import "base/mac/scoped_nsobject.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/strings/sys_string_conversions.h"
|
| +#import "ios/web/navigation/crw_session_controller+private_constructors.h"
|
| +#import "ios/web/navigation/crw_session_controller.h"
|
| +#include "ios/web/navigation/crw_session_entry.h"
|
| +#include "ios/web/navigation/navigation_item_impl.h"
|
| +#include "ios/web/public/referrer.h"
|
| +#include "ios/web/public/test/test_browser_state.h"
|
| +#import "net/base/mac/url_conversions.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +#include "testing/gtest_mac.h"
|
| +#include "testing/platform_test.h"
|
| +
|
| +@interface CRWSessionController (Testing)
|
| +- (const GURL&)URLForSessionAtIndex:(NSUInteger)index;
|
| +- (const GURL&)currentURL;
|
| +@end
|
| +
|
| +@implementation CRWSessionController (Testing)
|
| +- (const GURL&)URLForSessionAtIndex:(NSUInteger)index {
|
| + CRWSessionEntry* entry =
|
| + static_cast<CRWSessionEntry*>([self.entries objectAtIndex:index]);
|
| + return entry.navigationItem->GetURL();
|
| +}
|
| +
|
| +- (const GURL&)currentURL {
|
| + DCHECK([self currentEntry]);
|
| + return [self currentEntry].navigationItem->GetURL();
|
| +}
|
| +@end
|
| +
|
| +namespace {
|
| +
|
| +class CRWSessionControllerTest : public PlatformTest {
|
| + protected:
|
| + void SetUp() override {
|
| + session_controller_.reset(
|
| + [[CRWSessionController alloc] initWithWindowName:@"test window"
|
| + openerId:@"opener"
|
| + openedByDOM:NO
|
| + openerNavigationIndex:0
|
| + browserState:&browser_state_]);
|
| + }
|
| +
|
| + web::Referrer MakeReferrer(std::string url) {
|
| + return web::Referrer(GURL(url), web::ReferrerPolicyDefault);
|
| + }
|
| +
|
| + web::TestBrowserState browser_state_;
|
| + base::scoped_nsobject<CRWSessionController> session_controller_;
|
| +};
|
| +
|
| +TEST_F(CRWSessionControllerTest, InitWithWindowName) {
|
| + EXPECT_NSEQ(@"test window", [session_controller_ windowName]);
|
| + EXPECT_NSEQ(@"opener", [session_controller_ openerId]);
|
| + EXPECT_FALSE([session_controller_ isOpenedByDOM]);
|
| + EXPECT_EQ(0U, [[session_controller_ entries] count]);
|
| + EXPECT_EQ(nil, [session_controller_ currentEntry]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, AddPendingEntry) {
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| +
|
| + EXPECT_EQ(0U, [[session_controller_ entries] count]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.url.com/"),
|
| + [session_controller_ currentURL]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, AddPendingEntryWithCommittedEntries) {
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.committed.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| +
|
| + EXPECT_EQ(1U, [[session_controller_ entries] count]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.committed.url.com/"),
|
| + [session_controller_ URLForSessionAtIndex:0U]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.url.com/"),
|
| + [session_controller_ currentURL]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, AddPendingEntryOverriding) {
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.another.url.com")
|
| + referrer:MakeReferrer("http://www.another.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| +
|
| + EXPECT_EQ(0U, [[session_controller_ entries] count]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.another.url.com/"),
|
| + [session_controller_ currentURL]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, AddPendingEntryAndCommit) {
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + EXPECT_EQ(1U, [[session_controller_ entries] count]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.url.com/"),
|
| + [session_controller_ URLForSessionAtIndex:0U]);
|
| + EXPECT_EQ(
|
| + [[session_controller_ entries] objectAtIndex:0U],
|
| + [session_controller_ currentEntry]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, AddPendingEntryOverridingAndCommit) {
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.another.url.com")
|
| + referrer:MakeReferrer("http://www.another.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + EXPECT_EQ(1U, [[session_controller_ entries] count]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.another.url.com/"),
|
| + [session_controller_ URLForSessionAtIndex:0U]);
|
| + EXPECT_EQ(
|
| + [[session_controller_ entries] objectAtIndex:0U],
|
| + [session_controller_ currentEntry]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, AddPendingEntryAndCommitMultiple) {
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.another.url.com")
|
| + referrer:MakeReferrer("http://www.another.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + EXPECT_EQ(2U, [[session_controller_ entries] count]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.url.com/"),
|
| + [session_controller_ URLForSessionAtIndex:0U]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.another.url.com/"),
|
| + [session_controller_ URLForSessionAtIndex:1U]);
|
| + EXPECT_EQ(
|
| + [[session_controller_ entries] objectAtIndex:1U],
|
| + [session_controller_ currentEntry]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, AddPendingEntryAndDiscard) {
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ discardNonCommittedEntries];
|
| +
|
| + EXPECT_EQ(0U, [[session_controller_ entries] count]);
|
| + EXPECT_EQ(nil, [session_controller_ currentEntry]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, AddPendingEntryAndDiscardAndAddAndCommit) {
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ discardNonCommittedEntries];
|
| +
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.another.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + EXPECT_EQ(1U, [[session_controller_ entries] count]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.another.url.com/"),
|
| + [session_controller_ URLForSessionAtIndex:0U]);
|
| + EXPECT_EQ(
|
| + [[session_controller_ entries] objectAtIndex:0U],
|
| + [session_controller_ currentEntry]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, AddPendingEntryAndCommitAndAddAndDiscard) {
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.another.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ discardNonCommittedEntries];
|
| +
|
| + EXPECT_EQ(1U, [[session_controller_ entries] count]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.url.com/"),
|
| + [session_controller_ URLForSessionAtIndex:0U]);
|
| + EXPECT_EQ(
|
| + [[session_controller_ entries] objectAtIndex:0U],
|
| + [session_controller_ currentEntry]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest,
|
| + CommitPendingEntryWithoutPendingOrCommittedEntry) {
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + EXPECT_EQ(0U, [[session_controller_ entries] count]);
|
| + EXPECT_EQ(nil, [session_controller_ currentEntry]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest,
|
| + CommitPendingEntryWithoutPendingEntryWithCommittedEntry) {
|
| + // Setup committed entry
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + // Commit pending entry when there is no such one
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + EXPECT_EQ(1U, [[session_controller_ entries] count]);
|
| + EXPECT_EQ(
|
| + [[session_controller_ entries] objectAtIndex:0U],
|
| + [session_controller_ currentEntry]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest,
|
| + DiscardPendingEntryWithoutPendingOrCommittedEntry) {
|
| + [session_controller_ discardNonCommittedEntries];
|
| +
|
| + EXPECT_EQ(0U, [[session_controller_ entries] count]);
|
| + EXPECT_EQ(nil, [session_controller_ currentEntry]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest,
|
| + DiscardPendingEntryWithoutPendingEntryWithCommittedEntry) {
|
| + // Setup committed entry
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + // Discard noncommitted entries when there is no such one
|
| + [session_controller_ discardNonCommittedEntries];
|
| +
|
| + EXPECT_EQ(1U, [[session_controller_ entries] count]);
|
| + EXPECT_EQ(
|
| + [[session_controller_ entries] objectAtIndex:0U],
|
| + [session_controller_ currentEntry]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, UpdatePendingEntryWithoutPendingEntry) {
|
| + [session_controller_
|
| + updatePendingEntry:GURL("http://www.another.url.com")];
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + EXPECT_EQ(0U, [[session_controller_ entries] count]);
|
| + EXPECT_EQ(nil, [session_controller_ currentEntry]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, UpdatePendingEntryWithPendingEntry) {
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_
|
| + updatePendingEntry:GURL("http://www.another.url.com")];
|
| +
|
| + EXPECT_EQ(
|
| + GURL("http://www.another.url.com/"),
|
| + [session_controller_ currentURL]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest,
|
| + UpdatePendingEntryWithPendingEntryAlreadyCommited) {
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| + [session_controller_
|
| + updatePendingEntry:GURL("http://www.another.url.com")];
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + EXPECT_EQ(1U, [[session_controller_ entries] count]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.url.com/"),
|
| + [session_controller_ URLForSessionAtIndex:0U]);
|
| + EXPECT_EQ(
|
| + [[session_controller_ entries] objectAtIndex:0U],
|
| + [session_controller_ currentEntry]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, GoBackWithoutCommitedEntry) {
|
| + [session_controller_ goBack];
|
| +
|
| + EXPECT_EQ(0U, [[session_controller_ entries] count]);
|
| + EXPECT_EQ(nil, [session_controller_ currentEntry]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, GoBackWithSingleCommitedEntry) {
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + [session_controller_ goBack];
|
| +
|
| + EXPECT_EQ(1U, [[session_controller_ entries] count]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.url.com/"),
|
| + [session_controller_ URLForSessionAtIndex:0U]);
|
| + EXPECT_EQ(
|
| + [[session_controller_ entries] objectAtIndex:0U],
|
| + [session_controller_ currentEntry]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, GoBackFromTheEnd) {
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url2.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + [session_controller_ goBack];
|
| +
|
| + EXPECT_EQ(2U, [[session_controller_ entries] count]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.url.com/"),
|
| + [session_controller_ URLForSessionAtIndex:0U]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.url2.com/"),
|
| + [session_controller_ URLForSessionAtIndex:1U]);
|
| + EXPECT_EQ(
|
| + [[session_controller_ entries] objectAtIndex:0U],
|
| + [session_controller_ currentEntry]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, GoBackFromTheBeginning) {
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url2.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + [session_controller_ goBack];
|
| + [session_controller_ goBack];
|
| +
|
| + EXPECT_EQ(2U, [[session_controller_ entries] count]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.url.com/"),
|
| + [session_controller_ URLForSessionAtIndex:0U]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.url2.com/"),
|
| + [session_controller_ URLForSessionAtIndex:1U]);
|
| + EXPECT_EQ(
|
| + [[session_controller_ entries] objectAtIndex:0U],
|
| + [session_controller_ currentEntry]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, GoBackFromTheMiddle) {
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url2.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url3.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url4.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + [session_controller_ goBack];
|
| + [session_controller_ goBack];
|
| +
|
| + EXPECT_EQ(4U, [[session_controller_ entries] count]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.url.com/"),
|
| + [session_controller_ URLForSessionAtIndex:0U]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.url2.com/"),
|
| + [session_controller_ URLForSessionAtIndex:1U]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.url3.com/"),
|
| + [session_controller_ URLForSessionAtIndex:2U]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.url4.com/"),
|
| + [session_controller_ URLForSessionAtIndex:3U]);
|
| + EXPECT_EQ(
|
| + [[session_controller_ entries] objectAtIndex:1U],
|
| + [session_controller_ currentEntry]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, GoBackAndRemove) {
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url2.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + [session_controller_ goBack];
|
| + [session_controller_ removeEntryAtIndex:1];
|
| +
|
| + EXPECT_EQ(1U, [[session_controller_ entries] count]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.url.com/"),
|
| + [session_controller_ URLForSessionAtIndex:0U]);
|
| + EXPECT_EQ(
|
| + [[session_controller_ entries] objectAtIndex:0U],
|
| + [session_controller_ currentEntry]);
|
| + EXPECT_EQ([session_controller_ currentEntry],
|
| + [session_controller_ previousEntry]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, GoForwardWithoutCommitedEntry) {
|
| + [session_controller_ goForward];
|
| +
|
| + EXPECT_EQ(0U, [[session_controller_ entries] count]);
|
| + EXPECT_EQ(nil, [session_controller_ currentEntry]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, GoForwardWithSingleCommitedEntry) {
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + [session_controller_ goForward];
|
| +
|
| + EXPECT_EQ(1U, [[session_controller_ entries] count]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.url.com/"),
|
| + [session_controller_ URLForSessionAtIndex:0U]);
|
| + EXPECT_EQ(
|
| + [[session_controller_ entries] objectAtIndex:0U],
|
| + [session_controller_ currentEntry]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, GoForewardFromTheEnd) {
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url2.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + [session_controller_ goForward];
|
| +
|
| + EXPECT_EQ(2U, [[session_controller_ entries] count]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.url.com/"),
|
| + [session_controller_ URLForSessionAtIndex:0U]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.url2.com/"),
|
| + [session_controller_ URLForSessionAtIndex:1U]);
|
| + EXPECT_EQ(
|
| + [[session_controller_ entries] objectAtIndex:1U],
|
| + [session_controller_ currentEntry]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, GoForewardFromTheBeginning) {
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url2.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + [session_controller_ goBack];
|
| + [session_controller_ goForward];
|
| +
|
| + EXPECT_EQ(2U, [[session_controller_ entries] count]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.url.com/"),
|
| + [session_controller_ URLForSessionAtIndex:0U]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.url2.com/"),
|
| + [session_controller_ URLForSessionAtIndex:1U]);
|
| + EXPECT_EQ(
|
| + [[session_controller_ entries] objectAtIndex:1U],
|
| + [session_controller_ currentEntry]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, GoForwardFromTheMiddle) {
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url2.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url3.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url4.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + [session_controller_ goBack];
|
| + [session_controller_ goBack];
|
| + [session_controller_ goForward];
|
| +
|
| + EXPECT_EQ(4U, [[session_controller_ entries] count]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.url.com/"),
|
| + [session_controller_ URLForSessionAtIndex:0U]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.url2.com/"),
|
| + [session_controller_ URLForSessionAtIndex:1U]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.url3.com/"),
|
| + [session_controller_ URLForSessionAtIndex:2U]);
|
| + EXPECT_EQ(
|
| + GURL("http://www.url4.com/"),
|
| + [session_controller_ URLForSessionAtIndex:3U]);
|
| + EXPECT_EQ(
|
| + [[session_controller_ entries] objectAtIndex:2U],
|
| + [session_controller_ currentEntry]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, CanGoBackWithoutCommitedEntry) {
|
| + EXPECT_FALSE([session_controller_ canGoBack]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, CanGoBackWithSingleCommitedEntry) {
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + EXPECT_FALSE([session_controller_ canGoBack]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, CanGoBackWithMultipleCommitedEntries) {
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url1.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url2.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + EXPECT_TRUE([session_controller_ canGoBack]);
|
| +
|
| + [session_controller_ goBack];
|
| + EXPECT_TRUE([session_controller_ canGoBack]);
|
| +
|
| + [session_controller_ goBack];
|
| + EXPECT_FALSE([session_controller_ canGoBack]);
|
| +
|
| + [session_controller_ goBack];
|
| + EXPECT_FALSE([session_controller_ canGoBack]);
|
| +
|
| + [session_controller_ goForward];
|
| + EXPECT_TRUE([session_controller_ canGoBack]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, CanGoForwardWithoutCommitedEntry) {
|
| + EXPECT_FALSE([session_controller_ canGoBack]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, CanGoForwardWithSingleCommitedEntry) {
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + EXPECT_FALSE([session_controller_ canGoBack]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, CanGoForwardWithMultipleCommitedEntries) {
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url1.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url2.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + EXPECT_FALSE([session_controller_ canGoForward]);
|
| +
|
| + [session_controller_ goBack];
|
| + EXPECT_TRUE([session_controller_ canGoForward]);
|
| +
|
| + [session_controller_ goBack];
|
| + EXPECT_TRUE([session_controller_ canGoForward]);
|
| +
|
| + [session_controller_ goForward];
|
| + EXPECT_TRUE([session_controller_ canGoForward]);
|
| +
|
| + [session_controller_ goForward];
|
| + EXPECT_FALSE([session_controller_ canGoForward]);
|
| +}
|
| +
|
| +// Helper to create a NavigationItem. Caller is responsible for freeing
|
| +// the memory.
|
| +web::NavigationItem* CreateNavigationItem(const std::string& url,
|
| + const std::string& referrer,
|
| + NSString* title) {
|
| + web::Referrer referrer_object(GURL(referrer),
|
| + web::ReferrerPolicyDefault);
|
| + web::NavigationItemImpl* navigation_item = new web::NavigationItemImpl();
|
| + navigation_item->SetURL(GURL(url));
|
| + navigation_item->SetReferrer(referrer_object);
|
| + navigation_item->SetTitle(base::SysNSStringToUTF16(title));
|
| + navigation_item->SetTransitionType(ui::PAGE_TRANSITION_TYPED);
|
| +
|
| + return navigation_item;
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, CreateWithEmptyNavigations) {
|
| + ScopedVector<web::NavigationItem> items;
|
| + base::scoped_nsobject<CRWSessionController> controller(
|
| + [[CRWSessionController alloc] initWithNavigationItems:items.Pass()
|
| + currentIndex:0
|
| + browserState:&browser_state_]);
|
| + EXPECT_EQ(controller.get().entries.count, 0U);
|
| + EXPECT_EQ(controller.get().currentNavigationIndex, -1);
|
| + EXPECT_EQ(controller.get().previousNavigationIndex, -1);
|
| + EXPECT_FALSE(controller.get().currentEntry);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, CreateWithNavList) {
|
| + ScopedVector<web::NavigationItem> items;
|
| + items.push_back(CreateNavigationItem("http://www.google.com",
|
| + "http://www.referrer.com", @"Google"));
|
| + items.push_back(CreateNavigationItem("http://www.yahoo.com",
|
| + "http://www.google.com", @"Yahoo"));
|
| + items.push_back(CreateNavigationItem("http://www.espn.com",
|
| + "http://www.nothing.com", @"ESPN"));
|
| + base::scoped_nsobject<CRWSessionController> controller(
|
| + [[CRWSessionController alloc] initWithNavigationItems:items.Pass()
|
| + currentIndex:1
|
| + browserState:&browser_state_]);
|
| +
|
| + EXPECT_EQ(controller.get().entries.count, 3U);
|
| + EXPECT_EQ(controller.get().currentNavigationIndex, 1);
|
| + EXPECT_EQ(controller.get().previousNavigationIndex, -1);
|
| + // Sanity check the current entry, the CRWSessionEntry unit test will ensure
|
| + // the entire object is created properly.
|
| + CRWSessionEntry* current_entry = controller.get().currentEntry;
|
| + EXPECT_EQ(current_entry.navigationItem->GetURL(),
|
| + GURL("http://www.yahoo.com"));
|
| + EXPECT_EQ([[controller openerId] length], 0UL);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, PreviousNavigationEntry) {
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url1.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| + [session_controller_
|
| + addPendingEntry:GURL("http://www.url2.com")
|
| + referrer:MakeReferrer("http://www.referer.com")
|
| + transition:ui::PAGE_TRANSITION_TYPED
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + EXPECT_EQ(session_controller_.get().previousNavigationIndex, 1);
|
| +
|
| + [session_controller_ goBack];
|
| + EXPECT_EQ(session_controller_.get().previousNavigationIndex, 2);
|
| +
|
| + [session_controller_ goBack];
|
| + EXPECT_EQ(session_controller_.get().previousNavigationIndex, 1);
|
| +
|
| + [session_controller_ goForward];
|
| + EXPECT_EQ(session_controller_.get().previousNavigationIndex, 0);
|
| +
|
| + [session_controller_ goForward];
|
| + EXPECT_EQ(session_controller_.get().previousNavigationIndex, 1);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, PushNewEntry) {
|
| + ScopedVector<web::NavigationItem> items;
|
| + items.push_back(CreateNavigationItem("http://www.firstpage.com",
|
| + "http://www.starturl.com", @"First"));
|
| + items.push_back(CreateNavigationItem("http://www.secondpage.com",
|
| + "http://www.firstpage.com", @"Second"));
|
| + items.push_back(CreateNavigationItem("http://www.thirdpage.com",
|
| + "http://www.secondpage.com", @"Third"));
|
| + base::scoped_nsobject<CRWSessionController> controller(
|
| + [[CRWSessionController alloc] initWithNavigationItems:items.Pass()
|
| + currentIndex:0
|
| + browserState:&browser_state_]);
|
| +
|
| + GURL pushPageGurl1("http://www.firstpage.com/#push1");
|
| + NSString* stateObject1 = @"{'foo': 1}";
|
| + [controller pushNewEntryWithURL:pushPageGurl1 stateObject:stateObject1];
|
| + CRWSessionEntry* pushedEntry = [controller currentEntry];
|
| + NSUInteger expectedCount = 2;
|
| + EXPECT_EQ(expectedCount, controller.get().entries.count);
|
| + EXPECT_EQ(pushPageGurl1, pushedEntry.navigationItem->GetURL());
|
| + EXPECT_TRUE(pushedEntry.createdFromPushState);
|
| + EXPECT_NSEQ(stateObject1, pushedEntry.serializedStateObject);
|
| + EXPECT_EQ(GURL("http://www.firstpage.com/"),
|
| + pushedEntry.navigationItem->GetReferrer().url);
|
| +
|
| + // Add another new entry and check size and fields again.
|
| + GURL pushPageGurl2("http://www.firstpage.com/push2");
|
| + [controller pushNewEntryWithURL:pushPageGurl2 stateObject:nil];
|
| + pushedEntry = [controller currentEntry];
|
| + expectedCount = 3;
|
| + EXPECT_EQ(expectedCount, controller.get().entries.count);
|
| + EXPECT_EQ(pushPageGurl2, pushedEntry.navigationItem->GetURL());
|
| + EXPECT_TRUE(pushedEntry.createdFromPushState);
|
| + EXPECT_EQ(nil, pushedEntry.serializedStateObject);
|
| + EXPECT_EQ(pushPageGurl1, pushedEntry.navigationItem->GetReferrer().url);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, IsPushStateNavigation) {
|
| + ScopedVector<web::NavigationItem> items;
|
| + items.push_back(
|
| + CreateNavigationItem("http://foo.com", "http://google.com", @"First"));
|
| + // Push state navigation.
|
| + items.push_back(
|
| + CreateNavigationItem("http://foo.com#bar", "http://foo.com", @"Second"));
|
| + items.push_back(CreateNavigationItem("http://google.com",
|
| + "http://foo.com#bar", @"Third"));
|
| + items.push_back(
|
| + CreateNavigationItem("http://foo.com", "http://google.com", @"Fourth"));
|
| + // Push state navigation.
|
| + items.push_back(
|
| + CreateNavigationItem("http://foo.com/bar", "http://foo.com", @"Fifth"));
|
| + // Push state navigation.
|
| + items.push_back(CreateNavigationItem("http://foo.com/bar#bar",
|
| + "http://foo.com/bar", @"Sixth"));
|
| + base::scoped_nsobject<CRWSessionController> controller(
|
| + [[CRWSessionController alloc] initWithNavigationItems:items.Pass()
|
| + currentIndex:0
|
| + browserState:&browser_state_]);
|
| + CRWSessionEntry* entry0 = [controller.get().entries objectAtIndex:0];
|
| + CRWSessionEntry* entry1 = [controller.get().entries objectAtIndex:1];
|
| + CRWSessionEntry* entry2 = [controller.get().entries objectAtIndex:2];
|
| + CRWSessionEntry* entry3 = [controller.get().entries objectAtIndex:3];
|
| + CRWSessionEntry* entry4 = [controller.get().entries objectAtIndex:4];
|
| + CRWSessionEntry* entry5 = [controller.get().entries objectAtIndex:5];
|
| + entry1.createdFromPushState = YES;
|
| + entry4.createdFromPushState = YES;
|
| + entry5.createdFromPushState = YES;
|
| +
|
| + EXPECT_TRUE(
|
| + [controller isPushStateNavigationBetweenEntry:entry0 andEntry:entry1]);
|
| + EXPECT_TRUE(
|
| + [controller isPushStateNavigationBetweenEntry:entry5 andEntry:entry3]);
|
| + EXPECT_TRUE(
|
| + [controller isPushStateNavigationBetweenEntry:entry4 andEntry:entry3]);
|
| + EXPECT_FALSE(
|
| + [controller isPushStateNavigationBetweenEntry:entry1 andEntry:entry2]);
|
| + EXPECT_FALSE(
|
| + [controller isPushStateNavigationBetweenEntry:entry0 andEntry:entry5]);
|
| + EXPECT_FALSE(
|
| + [controller isPushStateNavigationBetweenEntry:entry2 andEntry:entry4]);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, UpdateCurrentEntry) {
|
| + ScopedVector<web::NavigationItem> items;
|
| + items.push_back(CreateNavigationItem("http://www.firstpage.com",
|
| + "http://www.starturl.com", @"First"));
|
| + items.push_back(CreateNavigationItem("http://www.secondpage.com",
|
| + "http://www.firstpage.com", @"Second"));
|
| + items.push_back(CreateNavigationItem("http://www.thirdpage.com",
|
| + "http://www.secondpage.com", @"Third"));
|
| + base::scoped_nsobject<CRWSessionController> controller(
|
| + [[CRWSessionController alloc] initWithNavigationItems:items.Pass()
|
| + currentIndex:0
|
| + browserState:&browser_state_]);
|
| +
|
| + GURL replacePageGurl1("http://www.firstpage.com/#replace1");
|
| + NSString* stateObject1 = @"{'foo': 1}";
|
| +
|
| + // Replace current entry and check the size of history and fields of the
|
| + // modified entry.
|
| + [controller updateCurrentEntryWithURL:replacePageGurl1
|
| + stateObject:stateObject1];
|
| + CRWSessionEntry* replacedEntry = [controller currentEntry];
|
| + NSUInteger expectedCount = 3;
|
| + EXPECT_EQ(expectedCount, controller.get().entries.count);
|
| + EXPECT_EQ(replacePageGurl1, replacedEntry.navigationItem->GetURL());
|
| + EXPECT_FALSE(replacedEntry.createdFromPushState);
|
| + EXPECT_NSEQ(stateObject1, replacedEntry.serializedStateObject);
|
| + EXPECT_EQ(GURL("http://www.starturl.com/"),
|
| + replacedEntry.navigationItem->GetReferrer().url);
|
| +
|
| + // Replace current entry and check size and fields again.
|
| + GURL replacePageGurl2("http://www.firstpage.com/#replace2");
|
| + [controller.get() updateCurrentEntryWithURL:replacePageGurl2 stateObject:nil];
|
| + replacedEntry = [controller currentEntry];
|
| + EXPECT_EQ(expectedCount, controller.get().entries.count);
|
| + EXPECT_EQ(replacePageGurl2, replacedEntry.navigationItem->GetURL());
|
| + EXPECT_FALSE(replacedEntry.createdFromPushState);
|
| + EXPECT_NSEQ(nil, replacedEntry.serializedStateObject);
|
| + EXPECT_EQ(GURL("http://www.starturl.com/"),
|
| + replacedEntry.navigationItem->GetReferrer().url);
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, TestBackwardForwardEntries) {
|
| + [session_controller_ addPendingEntry:GURL("http://www.example.com/0")
|
| + referrer:MakeReferrer("http://www.example.com/a")
|
| + transition:ui::PAGE_TRANSITION_LINK
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| + [session_controller_ addPendingEntry:GURL("http://www.example.com/1")
|
| + referrer:MakeReferrer("http://www.example.com/b")
|
| + transition:ui::PAGE_TRANSITION_LINK
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| + [session_controller_ addPendingEntry:GURL("http://www.example.com/redirect")
|
| + referrer:MakeReferrer("http://www.example.com/r")
|
| + transition:ui::PAGE_TRANSITION_IS_REDIRECT_MASK
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| + [session_controller_ addPendingEntry:GURL("http://www.example.com/2")
|
| + referrer:MakeReferrer("http://www.example.com/c")
|
| + transition:ui::PAGE_TRANSITION_LINK
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| +
|
| + EXPECT_EQ(3, session_controller_.get().currentNavigationIndex);
|
| + NSArray* backEntries = [session_controller_ backwardEntries];
|
| + EXPECT_EQ(2U, [backEntries count]);
|
| + EXPECT_EQ(0U, [[session_controller_ forwardEntries] count]);
|
| + EXPECT_EQ("http://www.example.com/1",
|
| + [[backEntries objectAtIndex:0] navigationItem]->GetURL().spec());
|
| +
|
| + [session_controller_ goBack];
|
| + EXPECT_EQ(1U, [[session_controller_ backwardEntries] count]);
|
| + EXPECT_EQ(1U, [[session_controller_ forwardEntries] count]);
|
| +
|
| + [session_controller_ goBack];
|
| + NSArray* forwardEntries = [session_controller_ forwardEntries];
|
| + EXPECT_EQ(0U, [[session_controller_ backwardEntries] count]);
|
| + EXPECT_EQ(2U, [forwardEntries count]);
|
| + EXPECT_EQ("http://www.example.com/2",
|
| + [[forwardEntries objectAtIndex:1] navigationItem]->GetURL().spec());
|
| +}
|
| +
|
| +TEST_F(CRWSessionControllerTest, GoToEntry) {
|
| + [session_controller_ addPendingEntry:GURL("http://www.example.com/0")
|
| + referrer:MakeReferrer("http://www.example.com/a")
|
| + transition:ui::PAGE_TRANSITION_LINK
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| + [session_controller_ addPendingEntry:GURL("http://www.example.com/1")
|
| + referrer:MakeReferrer("http://www.example.com/b")
|
| + transition:ui::PAGE_TRANSITION_LINK
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| + [session_controller_ addPendingEntry:GURL("http://www.example.com/redirect")
|
| + referrer:MakeReferrer("http://www.example.com/r")
|
| + transition:ui::PAGE_TRANSITION_IS_REDIRECT_MASK
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| + [session_controller_ addPendingEntry:GURL("http://www.example.com/2")
|
| + referrer:MakeReferrer("http://www.example.com/c")
|
| + transition:ui::PAGE_TRANSITION_LINK
|
| + rendererInitiated:NO];
|
| + [session_controller_ commitPendingEntry];
|
| + EXPECT_EQ(3, session_controller_.get().currentNavigationIndex);
|
| +
|
| + CRWSessionEntry* entry1 = [session_controller_.get().entries objectAtIndex:1];
|
| + [session_controller_ goToEntry:entry1];
|
| + EXPECT_EQ(1, session_controller_.get().currentNavigationIndex);
|
| +
|
| + // Remove an entry and attempt to go it. Ensure it outlives the removal.
|
| + base::scoped_nsobject<CRWSessionEntry> entry3(
|
| + [[session_controller_.get().entries objectAtIndex:3] retain]);
|
| + [session_controller_ removeEntryAtIndex:3];
|
| + [session_controller_ goToEntry:entry3];
|
| + EXPECT_EQ(1, session_controller_.get().currentNavigationIndex);
|
| +}
|
| +
|
| +} // anonymous namespace
|
|
|