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

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

Issue 1028603004: Upstream ios/web/navigation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ios-testing
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698