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

Side by Side 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: Rebase and resync 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #import <Foundation/Foundation.h>
6
7 #include "base/logging.h"
8 #import "base/mac/scoped_nsobject.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "base/strings/sys_string_conversions.h"
11 #import "ios/web/navigation/crw_session_controller+private_constructors.h"
12 #import "ios/web/navigation/crw_session_controller.h"
13 #include "ios/web/navigation/crw_session_entry.h"
14 #include "ios/web/navigation/navigation_item_impl.h"
15 #include "ios/web/public/referrer.h"
16 #include "ios/web/public/test/test_browser_state.h"
17 #import "net/base/mac/url_conversions.h"
18 #include "testing/gtest/include/gtest/gtest.h"
19 #include "testing/gtest_mac.h"
20 #include "testing/platform_test.h"
21
22 @interface CRWSessionController (Testing)
23 - (const GURL&)URLForSessionAtIndex:(NSUInteger)index;
24 - (const GURL&)currentURL;
25 @end
26
27 @implementation CRWSessionController (Testing)
28 - (const GURL&)URLForSessionAtIndex:(NSUInteger)index {
29 CRWSessionEntry* entry =
30 static_cast<CRWSessionEntry*>([self.entries objectAtIndex:index]);
31 return entry.navigationItem->GetURL();
32 }
33
34 - (const GURL&)currentURL {
35 DCHECK([self currentEntry]);
36 return [self currentEntry].navigationItem->GetURL();
37 }
38 @end
39
40 namespace {
41
42 class CRWSessionControllerTest : public PlatformTest {
43 protected:
44 void SetUp() override {
45 session_controller_.reset(
46 [[CRWSessionController alloc] initWithWindowName:@"test window"
47 openerId:@"opener"
48 openedByDOM:NO
49 openerNavigationIndex:0
50 browserState:&browser_state_]);
51 }
52
53 web::Referrer MakeReferrer(std::string url) {
54 return web::Referrer(GURL(url), web::ReferrerPolicyDefault);
55 }
56
57 web::TestBrowserState browser_state_;
58 base::scoped_nsobject<CRWSessionController> session_controller_;
59 };
60
61 TEST_F(CRWSessionControllerTest, InitWithWindowName) {
62 EXPECT_NSEQ(@"test window", [session_controller_ windowName]);
63 EXPECT_NSEQ(@"opener", [session_controller_ openerId]);
64 EXPECT_FALSE([session_controller_ isOpenedByDOM]);
65 EXPECT_EQ(0U, [[session_controller_ entries] count]);
66 EXPECT_EQ(nil, [session_controller_ currentEntry]);
67 }
68
69 TEST_F(CRWSessionControllerTest, AddPendingEntry) {
70 [session_controller_
71 addPendingEntry:GURL("http://www.url.com")
72 referrer:MakeReferrer("http://www.referer.com")
73 transition:ui::PAGE_TRANSITION_TYPED
74 rendererInitiated:NO];
75
76 EXPECT_EQ(0U, [[session_controller_ entries] count]);
77 EXPECT_EQ(
78 GURL("http://www.url.com/"),
79 [session_controller_ currentURL]);
80 }
81
82 TEST_F(CRWSessionControllerTest, AddPendingEntryWithCommittedEntries) {
83 [session_controller_
84 addPendingEntry:GURL("http://www.committed.url.com")
85 referrer:MakeReferrer("http://www.referer.com")
86 transition:ui::PAGE_TRANSITION_TYPED
87 rendererInitiated:NO];
88 [session_controller_ commitPendingEntry];
89
90 [session_controller_
91 addPendingEntry:GURL("http://www.url.com")
92 referrer:MakeReferrer("http://www.referer.com")
93 transition:ui::PAGE_TRANSITION_TYPED
94 rendererInitiated:NO];
95
96 EXPECT_EQ(1U, [[session_controller_ entries] count]);
97 EXPECT_EQ(
98 GURL("http://www.committed.url.com/"),
99 [session_controller_ URLForSessionAtIndex:0U]);
100 EXPECT_EQ(
101 GURL("http://www.url.com/"),
102 [session_controller_ currentURL]);
103 }
104
105 TEST_F(CRWSessionControllerTest, AddPendingEntryOverriding) {
106 [session_controller_
107 addPendingEntry:GURL("http://www.url.com")
108 referrer:MakeReferrer("http://www.referer.com")
109 transition:ui::PAGE_TRANSITION_TYPED
110 rendererInitiated:NO];
111 [session_controller_
112 addPendingEntry:GURL("http://www.another.url.com")
113 referrer:MakeReferrer("http://www.another.referer.com")
114 transition:ui::PAGE_TRANSITION_TYPED
115 rendererInitiated:NO];
116
117 EXPECT_EQ(0U, [[session_controller_ entries] count]);
118 EXPECT_EQ(
119 GURL("http://www.another.url.com/"),
120 [session_controller_ currentURL]);
121 }
122
123 TEST_F(CRWSessionControllerTest, AddPendingEntryAndCommit) {
124 [session_controller_
125 addPendingEntry:GURL("http://www.url.com")
126 referrer:MakeReferrer("http://www.referer.com")
127 transition:ui::PAGE_TRANSITION_TYPED
128 rendererInitiated:NO];
129 [session_controller_ commitPendingEntry];
130
131 EXPECT_EQ(1U, [[session_controller_ entries] count]);
132 EXPECT_EQ(
133 GURL("http://www.url.com/"),
134 [session_controller_ URLForSessionAtIndex:0U]);
135 EXPECT_EQ(
136 [[session_controller_ entries] objectAtIndex:0U],
137 [session_controller_ currentEntry]);
138 }
139
140 TEST_F(CRWSessionControllerTest, AddPendingEntryOverridingAndCommit) {
141 [session_controller_
142 addPendingEntry:GURL("http://www.url.com")
143 referrer:MakeReferrer("http://www.referer.com")
144 transition:ui::PAGE_TRANSITION_TYPED
145 rendererInitiated:NO];
146 [session_controller_
147 addPendingEntry:GURL("http://www.another.url.com")
148 referrer:MakeReferrer("http://www.another.referer.com")
149 transition:ui::PAGE_TRANSITION_TYPED
150 rendererInitiated:NO];
151 [session_controller_ commitPendingEntry];
152
153 EXPECT_EQ(1U, [[session_controller_ entries] count]);
154 EXPECT_EQ(
155 GURL("http://www.another.url.com/"),
156 [session_controller_ URLForSessionAtIndex:0U]);
157 EXPECT_EQ(
158 [[session_controller_ entries] objectAtIndex:0U],
159 [session_controller_ currentEntry]);
160 }
161
162 TEST_F(CRWSessionControllerTest, AddPendingEntryAndCommitMultiple) {
163 [session_controller_
164 addPendingEntry:GURL("http://www.url.com")
165 referrer:MakeReferrer("http://www.referer.com")
166 transition:ui::PAGE_TRANSITION_TYPED
167 rendererInitiated:NO];
168 [session_controller_ commitPendingEntry];
169
170 [session_controller_
171 addPendingEntry:GURL("http://www.another.url.com")
172 referrer:MakeReferrer("http://www.another.referer.com")
173 transition:ui::PAGE_TRANSITION_TYPED
174 rendererInitiated:NO];
175 [session_controller_ commitPendingEntry];
176
177 EXPECT_EQ(2U, [[session_controller_ entries] count]);
178 EXPECT_EQ(
179 GURL("http://www.url.com/"),
180 [session_controller_ URLForSessionAtIndex:0U]);
181 EXPECT_EQ(
182 GURL("http://www.another.url.com/"),
183 [session_controller_ URLForSessionAtIndex:1U]);
184 EXPECT_EQ(
185 [[session_controller_ entries] objectAtIndex:1U],
186 [session_controller_ currentEntry]);
187 }
188
189 TEST_F(CRWSessionControllerTest, AddPendingEntryAndDiscard) {
190 [session_controller_
191 addPendingEntry:GURL("http://www.url.com")
192 referrer:MakeReferrer("http://www.referer.com")
193 transition:ui::PAGE_TRANSITION_TYPED
194 rendererInitiated:NO];
195 [session_controller_ discardNonCommittedEntries];
196
197 EXPECT_EQ(0U, [[session_controller_ entries] count]);
198 EXPECT_EQ(nil, [session_controller_ currentEntry]);
199 }
200
201 TEST_F(CRWSessionControllerTest, AddPendingEntryAndDiscardAndAddAndCommit) {
202 [session_controller_
203 addPendingEntry:GURL("http://www.url.com")
204 referrer:MakeReferrer("http://www.referer.com")
205 transition:ui::PAGE_TRANSITION_TYPED
206 rendererInitiated:NO];
207 [session_controller_ discardNonCommittedEntries];
208
209 [session_controller_
210 addPendingEntry:GURL("http://www.another.url.com")
211 referrer:MakeReferrer("http://www.referer.com")
212 transition:ui::PAGE_TRANSITION_TYPED
213 rendererInitiated:NO];
214 [session_controller_ commitPendingEntry];
215
216 EXPECT_EQ(1U, [[session_controller_ entries] count]);
217 EXPECT_EQ(
218 GURL("http://www.another.url.com/"),
219 [session_controller_ URLForSessionAtIndex:0U]);
220 EXPECT_EQ(
221 [[session_controller_ entries] objectAtIndex:0U],
222 [session_controller_ currentEntry]);
223 }
224
225 TEST_F(CRWSessionControllerTest, AddPendingEntryAndCommitAndAddAndDiscard) {
226 [session_controller_
227 addPendingEntry:GURL("http://www.url.com")
228 referrer:MakeReferrer("http://www.referer.com")
229 transition:ui::PAGE_TRANSITION_TYPED
230 rendererInitiated:NO];
231 [session_controller_ commitPendingEntry];
232
233 [session_controller_
234 addPendingEntry:GURL("http://www.another.url.com")
235 referrer:MakeReferrer("http://www.referer.com")
236 transition:ui::PAGE_TRANSITION_TYPED
237 rendererInitiated:NO];
238 [session_controller_ discardNonCommittedEntries];
239
240 EXPECT_EQ(1U, [[session_controller_ entries] count]);
241 EXPECT_EQ(
242 GURL("http://www.url.com/"),
243 [session_controller_ URLForSessionAtIndex:0U]);
244 EXPECT_EQ(
245 [[session_controller_ entries] objectAtIndex:0U],
246 [session_controller_ currentEntry]);
247 }
248
249 TEST_F(CRWSessionControllerTest,
250 CommitPendingEntryWithoutPendingOrCommittedEntry) {
251 [session_controller_ commitPendingEntry];
252
253 EXPECT_EQ(0U, [[session_controller_ entries] count]);
254 EXPECT_EQ(nil, [session_controller_ currentEntry]);
255 }
256
257 TEST_F(CRWSessionControllerTest,
258 CommitPendingEntryWithoutPendingEntryWithCommittedEntry) {
259 // Setup committed entry
260 [session_controller_
261 addPendingEntry:GURL("http://www.url.com")
262 referrer:MakeReferrer("http://www.referer.com")
263 transition:ui::PAGE_TRANSITION_TYPED
264 rendererInitiated:NO];
265 [session_controller_ commitPendingEntry];
266
267 // Commit pending entry when there is no such one
268 [session_controller_ commitPendingEntry];
269
270 EXPECT_EQ(1U, [[session_controller_ entries] count]);
271 EXPECT_EQ(
272 [[session_controller_ entries] objectAtIndex:0U],
273 [session_controller_ currentEntry]);
274 }
275
276 TEST_F(CRWSessionControllerTest,
277 DiscardPendingEntryWithoutPendingOrCommittedEntry) {
278 [session_controller_ discardNonCommittedEntries];
279
280 EXPECT_EQ(0U, [[session_controller_ entries] count]);
281 EXPECT_EQ(nil, [session_controller_ currentEntry]);
282 }
283
284 TEST_F(CRWSessionControllerTest,
285 DiscardPendingEntryWithoutPendingEntryWithCommittedEntry) {
286 // Setup committed entry
287 [session_controller_
288 addPendingEntry:GURL("http://www.url.com")
289 referrer:MakeReferrer("http://www.referer.com")
290 transition:ui::PAGE_TRANSITION_TYPED
291 rendererInitiated:NO];
292 [session_controller_ commitPendingEntry];
293
294 // Discard noncommitted entries when there is no such one
295 [session_controller_ discardNonCommittedEntries];
296
297 EXPECT_EQ(1U, [[session_controller_ entries] count]);
298 EXPECT_EQ(
299 [[session_controller_ entries] objectAtIndex:0U],
300 [session_controller_ currentEntry]);
301 }
302
303 TEST_F(CRWSessionControllerTest, UpdatePendingEntryWithoutPendingEntry) {
304 [session_controller_
305 updatePendingEntry:GURL("http://www.another.url.com")];
306 [session_controller_ commitPendingEntry];
307
308 EXPECT_EQ(0U, [[session_controller_ entries] count]);
309 EXPECT_EQ(nil, [session_controller_ currentEntry]);
310 }
311
312 TEST_F(CRWSessionControllerTest, UpdatePendingEntryWithPendingEntry) {
313 [session_controller_
314 addPendingEntry:GURL("http://www.url.com")
315 referrer:MakeReferrer("http://www.referer.com")
316 transition:ui::PAGE_TRANSITION_TYPED
317 rendererInitiated:NO];
318 [session_controller_
319 updatePendingEntry:GURL("http://www.another.url.com")];
320
321 EXPECT_EQ(
322 GURL("http://www.another.url.com/"),
323 [session_controller_ currentURL]);
324 }
325
326 TEST_F(CRWSessionControllerTest,
327 UpdatePendingEntryWithPendingEntryAlreadyCommited) {
328 [session_controller_
329 addPendingEntry:GURL("http://www.url.com")
330 referrer:MakeReferrer("http://www.referer.com")
331 transition:ui::PAGE_TRANSITION_TYPED
332 rendererInitiated:NO];
333 [session_controller_ commitPendingEntry];
334 [session_controller_
335 updatePendingEntry:GURL("http://www.another.url.com")];
336 [session_controller_ commitPendingEntry];
337
338 EXPECT_EQ(1U, [[session_controller_ entries] count]);
339 EXPECT_EQ(
340 GURL("http://www.url.com/"),
341 [session_controller_ URLForSessionAtIndex:0U]);
342 EXPECT_EQ(
343 [[session_controller_ entries] objectAtIndex:0U],
344 [session_controller_ currentEntry]);
345 }
346
347 TEST_F(CRWSessionControllerTest, GoBackWithoutCommitedEntry) {
348 [session_controller_ goBack];
349
350 EXPECT_EQ(0U, [[session_controller_ entries] count]);
351 EXPECT_EQ(nil, [session_controller_ currentEntry]);
352 }
353
354 TEST_F(CRWSessionControllerTest, GoBackWithSingleCommitedEntry) {
355 [session_controller_
356 addPendingEntry:GURL("http://www.url.com")
357 referrer:MakeReferrer("http://www.referer.com")
358 transition:ui::PAGE_TRANSITION_TYPED
359 rendererInitiated:NO];
360 [session_controller_ commitPendingEntry];
361
362 [session_controller_ goBack];
363
364 EXPECT_EQ(1U, [[session_controller_ entries] count]);
365 EXPECT_EQ(
366 GURL("http://www.url.com/"),
367 [session_controller_ URLForSessionAtIndex:0U]);
368 EXPECT_EQ(
369 [[session_controller_ entries] objectAtIndex:0U],
370 [session_controller_ currentEntry]);
371 }
372
373 TEST_F(CRWSessionControllerTest, GoBackFromTheEnd) {
374 [session_controller_
375 addPendingEntry:GURL("http://www.url.com")
376 referrer:MakeReferrer("http://www.referer.com")
377 transition:ui::PAGE_TRANSITION_TYPED
378 rendererInitiated:NO];
379 [session_controller_ commitPendingEntry];
380 [session_controller_
381 addPendingEntry:GURL("http://www.url2.com")
382 referrer:MakeReferrer("http://www.referer.com")
383 transition:ui::PAGE_TRANSITION_TYPED
384 rendererInitiated:NO];
385 [session_controller_ commitPendingEntry];
386
387 [session_controller_ goBack];
388
389 EXPECT_EQ(2U, [[session_controller_ entries] count]);
390 EXPECT_EQ(
391 GURL("http://www.url.com/"),
392 [session_controller_ URLForSessionAtIndex:0U]);
393 EXPECT_EQ(
394 GURL("http://www.url2.com/"),
395 [session_controller_ URLForSessionAtIndex:1U]);
396 EXPECT_EQ(
397 [[session_controller_ entries] objectAtIndex:0U],
398 [session_controller_ currentEntry]);
399 }
400
401 TEST_F(CRWSessionControllerTest, GoBackFromTheBeginning) {
402 [session_controller_
403 addPendingEntry:GURL("http://www.url.com")
404 referrer:MakeReferrer("http://www.referer.com")
405 transition:ui::PAGE_TRANSITION_TYPED
406 rendererInitiated:NO];
407 [session_controller_ commitPendingEntry];
408 [session_controller_
409 addPendingEntry:GURL("http://www.url2.com")
410 referrer:MakeReferrer("http://www.referer.com")
411 transition:ui::PAGE_TRANSITION_TYPED
412 rendererInitiated:NO];
413 [session_controller_ commitPendingEntry];
414
415 [session_controller_ goBack];
416 [session_controller_ goBack];
417
418 EXPECT_EQ(2U, [[session_controller_ entries] count]);
419 EXPECT_EQ(
420 GURL("http://www.url.com/"),
421 [session_controller_ URLForSessionAtIndex:0U]);
422 EXPECT_EQ(
423 GURL("http://www.url2.com/"),
424 [session_controller_ URLForSessionAtIndex:1U]);
425 EXPECT_EQ(
426 [[session_controller_ entries] objectAtIndex:0U],
427 [session_controller_ currentEntry]);
428 }
429
430 TEST_F(CRWSessionControllerTest, GoBackFromTheMiddle) {
431 [session_controller_
432 addPendingEntry:GURL("http://www.url.com")
433 referrer:MakeReferrer("http://www.referer.com")
434 transition:ui::PAGE_TRANSITION_TYPED
435 rendererInitiated:NO];
436 [session_controller_ commitPendingEntry];
437 [session_controller_
438 addPendingEntry:GURL("http://www.url2.com")
439 referrer:MakeReferrer("http://www.referer.com")
440 transition:ui::PAGE_TRANSITION_TYPED
441 rendererInitiated:NO];
442 [session_controller_ commitPendingEntry];
443 [session_controller_
444 addPendingEntry:GURL("http://www.url3.com")
445 referrer:MakeReferrer("http://www.referer.com")
446 transition:ui::PAGE_TRANSITION_TYPED
447 rendererInitiated:NO];
448 [session_controller_ commitPendingEntry];
449 [session_controller_
450 addPendingEntry:GURL("http://www.url4.com")
451 referrer:MakeReferrer("http://www.referer.com")
452 transition:ui::PAGE_TRANSITION_TYPED
453 rendererInitiated:NO];
454 [session_controller_ commitPendingEntry];
455
456 [session_controller_ goBack];
457 [session_controller_ goBack];
458
459 EXPECT_EQ(4U, [[session_controller_ entries] count]);
460 EXPECT_EQ(
461 GURL("http://www.url.com/"),
462 [session_controller_ URLForSessionAtIndex:0U]);
463 EXPECT_EQ(
464 GURL("http://www.url2.com/"),
465 [session_controller_ URLForSessionAtIndex:1U]);
466 EXPECT_EQ(
467 GURL("http://www.url3.com/"),
468 [session_controller_ URLForSessionAtIndex:2U]);
469 EXPECT_EQ(
470 GURL("http://www.url4.com/"),
471 [session_controller_ URLForSessionAtIndex:3U]);
472 EXPECT_EQ(
473 [[session_controller_ entries] objectAtIndex:1U],
474 [session_controller_ currentEntry]);
475 }
476
477 TEST_F(CRWSessionControllerTest, GoBackAndRemove) {
478 [session_controller_
479 addPendingEntry:GURL("http://www.url.com")
480 referrer:MakeReferrer("http://www.referer.com")
481 transition:ui::PAGE_TRANSITION_TYPED
482 rendererInitiated:NO];
483 [session_controller_ commitPendingEntry];
484 [session_controller_
485 addPendingEntry:GURL("http://www.url2.com")
486 referrer:MakeReferrer("http://www.referer.com")
487 transition:ui::PAGE_TRANSITION_TYPED
488 rendererInitiated:NO];
489 [session_controller_ commitPendingEntry];
490
491 [session_controller_ goBack];
492 [session_controller_ removeEntryAtIndex:1];
493
494 EXPECT_EQ(1U, [[session_controller_ entries] count]);
495 EXPECT_EQ(
496 GURL("http://www.url.com/"),
497 [session_controller_ URLForSessionAtIndex:0U]);
498 EXPECT_EQ(
499 [[session_controller_ entries] objectAtIndex:0U],
500 [session_controller_ currentEntry]);
501 EXPECT_EQ([session_controller_ currentEntry],
502 [session_controller_ previousEntry]);
503 }
504
505 TEST_F(CRWSessionControllerTest, GoForwardWithoutCommitedEntry) {
506 [session_controller_ goForward];
507
508 EXPECT_EQ(0U, [[session_controller_ entries] count]);
509 EXPECT_EQ(nil, [session_controller_ currentEntry]);
510 }
511
512 TEST_F(CRWSessionControllerTest, GoForwardWithSingleCommitedEntry) {
513 [session_controller_
514 addPendingEntry:GURL("http://www.url.com")
515 referrer:MakeReferrer("http://www.referer.com")
516 transition:ui::PAGE_TRANSITION_TYPED
517 rendererInitiated:NO];
518 [session_controller_ commitPendingEntry];
519
520 [session_controller_ goForward];
521
522 EXPECT_EQ(1U, [[session_controller_ entries] count]);
523 EXPECT_EQ(
524 GURL("http://www.url.com/"),
525 [session_controller_ URLForSessionAtIndex:0U]);
526 EXPECT_EQ(
527 [[session_controller_ entries] objectAtIndex:0U],
528 [session_controller_ currentEntry]);
529 }
530
531 TEST_F(CRWSessionControllerTest, GoForewardFromTheEnd) {
532 [session_controller_
533 addPendingEntry:GURL("http://www.url.com")
534 referrer:MakeReferrer("http://www.referer.com")
535 transition:ui::PAGE_TRANSITION_TYPED
536 rendererInitiated:NO];
537 [session_controller_ commitPendingEntry];
538 [session_controller_
539 addPendingEntry:GURL("http://www.url2.com")
540 referrer:MakeReferrer("http://www.referer.com")
541 transition:ui::PAGE_TRANSITION_TYPED
542 rendererInitiated:NO];
543 [session_controller_ commitPendingEntry];
544
545 [session_controller_ goForward];
546
547 EXPECT_EQ(2U, [[session_controller_ entries] count]);
548 EXPECT_EQ(
549 GURL("http://www.url.com/"),
550 [session_controller_ URLForSessionAtIndex:0U]);
551 EXPECT_EQ(
552 GURL("http://www.url2.com/"),
553 [session_controller_ URLForSessionAtIndex:1U]);
554 EXPECT_EQ(
555 [[session_controller_ entries] objectAtIndex:1U],
556 [session_controller_ currentEntry]);
557 }
558
559 TEST_F(CRWSessionControllerTest, GoForewardFromTheBeginning) {
560 [session_controller_
561 addPendingEntry:GURL("http://www.url.com")
562 referrer:MakeReferrer("http://www.referer.com")
563 transition:ui::PAGE_TRANSITION_TYPED
564 rendererInitiated:NO];
565 [session_controller_ commitPendingEntry];
566 [session_controller_
567 addPendingEntry:GURL("http://www.url2.com")
568 referrer:MakeReferrer("http://www.referer.com")
569 transition:ui::PAGE_TRANSITION_TYPED
570 rendererInitiated:NO];
571 [session_controller_ commitPendingEntry];
572
573 [session_controller_ goBack];
574 [session_controller_ goForward];
575
576 EXPECT_EQ(2U, [[session_controller_ entries] count]);
577 EXPECT_EQ(
578 GURL("http://www.url.com/"),
579 [session_controller_ URLForSessionAtIndex:0U]);
580 EXPECT_EQ(
581 GURL("http://www.url2.com/"),
582 [session_controller_ URLForSessionAtIndex:1U]);
583 EXPECT_EQ(
584 [[session_controller_ entries] objectAtIndex:1U],
585 [session_controller_ currentEntry]);
586 }
587
588 TEST_F(CRWSessionControllerTest, GoForwardFromTheMiddle) {
589 [session_controller_
590 addPendingEntry:GURL("http://www.url.com")
591 referrer:MakeReferrer("http://www.referer.com")
592 transition:ui::PAGE_TRANSITION_TYPED
593 rendererInitiated:NO];
594 [session_controller_ commitPendingEntry];
595 [session_controller_
596 addPendingEntry:GURL("http://www.url2.com")
597 referrer:MakeReferrer("http://www.referer.com")
598 transition:ui::PAGE_TRANSITION_TYPED
599 rendererInitiated:NO];
600 [session_controller_ commitPendingEntry];
601 [session_controller_
602 addPendingEntry:GURL("http://www.url3.com")
603 referrer:MakeReferrer("http://www.referer.com")
604 transition:ui::PAGE_TRANSITION_TYPED
605 rendererInitiated:NO];
606 [session_controller_ commitPendingEntry];
607 [session_controller_
608 addPendingEntry:GURL("http://www.url4.com")
609 referrer:MakeReferrer("http://www.referer.com")
610 transition:ui::PAGE_TRANSITION_TYPED
611 rendererInitiated:NO];
612 [session_controller_ commitPendingEntry];
613
614 [session_controller_ goBack];
615 [session_controller_ goBack];
616 [session_controller_ goForward];
617
618 EXPECT_EQ(4U, [[session_controller_ entries] count]);
619 EXPECT_EQ(
620 GURL("http://www.url.com/"),
621 [session_controller_ URLForSessionAtIndex:0U]);
622 EXPECT_EQ(
623 GURL("http://www.url2.com/"),
624 [session_controller_ URLForSessionAtIndex:1U]);
625 EXPECT_EQ(
626 GURL("http://www.url3.com/"),
627 [session_controller_ URLForSessionAtIndex:2U]);
628 EXPECT_EQ(
629 GURL("http://www.url4.com/"),
630 [session_controller_ URLForSessionAtIndex:3U]);
631 EXPECT_EQ(
632 [[session_controller_ entries] objectAtIndex:2U],
633 [session_controller_ currentEntry]);
634 }
635
636 TEST_F(CRWSessionControllerTest, CanGoBackWithoutCommitedEntry) {
637 EXPECT_FALSE([session_controller_ canGoBack]);
638 }
639
640 TEST_F(CRWSessionControllerTest, CanGoBackWithSingleCommitedEntry) {
641 [session_controller_
642 addPendingEntry:GURL("http://www.url.com")
643 referrer:MakeReferrer("http://www.referer.com")
644 transition:ui::PAGE_TRANSITION_TYPED
645 rendererInitiated:NO];
646 [session_controller_ commitPendingEntry];
647
648 EXPECT_FALSE([session_controller_ canGoBack]);
649 }
650
651 TEST_F(CRWSessionControllerTest, CanGoBackWithMultipleCommitedEntries) {
652 [session_controller_
653 addPendingEntry:GURL("http://www.url.com")
654 referrer:MakeReferrer("http://www.referer.com")
655 transition:ui::PAGE_TRANSITION_TYPED
656 rendererInitiated:NO];
657 [session_controller_ commitPendingEntry];
658 [session_controller_
659 addPendingEntry:GURL("http://www.url1.com")
660 referrer:MakeReferrer("http://www.referer.com")
661 transition:ui::PAGE_TRANSITION_TYPED
662 rendererInitiated:NO];
663 [session_controller_ commitPendingEntry];
664 [session_controller_
665 addPendingEntry:GURL("http://www.url2.com")
666 referrer:MakeReferrer("http://www.referer.com")
667 transition:ui::PAGE_TRANSITION_TYPED
668 rendererInitiated:NO];
669 [session_controller_ commitPendingEntry];
670
671 EXPECT_TRUE([session_controller_ canGoBack]);
672
673 [session_controller_ goBack];
674 EXPECT_TRUE([session_controller_ canGoBack]);
675
676 [session_controller_ goBack];
677 EXPECT_FALSE([session_controller_ canGoBack]);
678
679 [session_controller_ goBack];
680 EXPECT_FALSE([session_controller_ canGoBack]);
681
682 [session_controller_ goForward];
683 EXPECT_TRUE([session_controller_ canGoBack]);
684 }
685
686 TEST_F(CRWSessionControllerTest, CanGoForwardWithoutCommitedEntry) {
687 EXPECT_FALSE([session_controller_ canGoBack]);
688 }
689
690 TEST_F(CRWSessionControllerTest, CanGoForwardWithSingleCommitedEntry) {
691 [session_controller_
692 addPendingEntry:GURL("http://www.url.com")
693 referrer:MakeReferrer("http://www.referer.com")
694 transition:ui::PAGE_TRANSITION_TYPED
695 rendererInitiated:NO];
696 [session_controller_ commitPendingEntry];
697
698 EXPECT_FALSE([session_controller_ canGoBack]);
699 }
700
701 TEST_F(CRWSessionControllerTest, CanGoForwardWithMultipleCommitedEntries) {
702 [session_controller_
703 addPendingEntry:GURL("http://www.url.com")
704 referrer:MakeReferrer("http://www.referer.com")
705 transition:ui::PAGE_TRANSITION_TYPED
706 rendererInitiated:NO];
707 [session_controller_ commitPendingEntry];
708 [session_controller_
709 addPendingEntry:GURL("http://www.url1.com")
710 referrer:MakeReferrer("http://www.referer.com")
711 transition:ui::PAGE_TRANSITION_TYPED
712 rendererInitiated:NO];
713 [session_controller_ commitPendingEntry];
714 [session_controller_
715 addPendingEntry:GURL("http://www.url2.com")
716 referrer:MakeReferrer("http://www.referer.com")
717 transition:ui::PAGE_TRANSITION_TYPED
718 rendererInitiated:NO];
719 [session_controller_ commitPendingEntry];
720
721 EXPECT_FALSE([session_controller_ canGoForward]);
722
723 [session_controller_ goBack];
724 EXPECT_TRUE([session_controller_ canGoForward]);
725
726 [session_controller_ goBack];
727 EXPECT_TRUE([session_controller_ canGoForward]);
728
729 [session_controller_ goForward];
730 EXPECT_TRUE([session_controller_ canGoForward]);
731
732 [session_controller_ goForward];
733 EXPECT_FALSE([session_controller_ canGoForward]);
734 }
735
736 // Helper to create a NavigationItem. Caller is responsible for freeing
737 // the memory.
738 web::NavigationItem* CreateNavigationItem(const std::string& url,
739 const std::string& referrer,
740 NSString* title) {
741 web::Referrer referrer_object(GURL(referrer),
742 web::ReferrerPolicyDefault);
743 web::NavigationItemImpl* navigation_item = new web::NavigationItemImpl();
744 navigation_item->SetURL(GURL(url));
745 navigation_item->SetReferrer(referrer_object);
746 navigation_item->SetTitle(base::SysNSStringToUTF16(title));
747 navigation_item->SetTransitionType(ui::PAGE_TRANSITION_TYPED);
748
749 return navigation_item;
750 }
751
752 TEST_F(CRWSessionControllerTest, CreateWithEmptyNavigations) {
753 ScopedVector<web::NavigationItem> items;
754 base::scoped_nsobject<CRWSessionController> controller(
755 [[CRWSessionController alloc] initWithNavigationItems:items.Pass()
756 currentIndex:0
757 browserState:&browser_state_]);
758 EXPECT_EQ(controller.get().entries.count, 0U);
759 EXPECT_EQ(controller.get().currentNavigationIndex, -1);
760 EXPECT_EQ(controller.get().previousNavigationIndex, -1);
761 EXPECT_FALSE(controller.get().currentEntry);
762 }
763
764 TEST_F(CRWSessionControllerTest, CreateWithNavList) {
765 ScopedVector<web::NavigationItem> items;
766 items.push_back(CreateNavigationItem("http://www.google.com",
767 "http://www.referrer.com", @"Google"));
768 items.push_back(CreateNavigationItem("http://www.yahoo.com",
769 "http://www.google.com", @"Yahoo"));
770 items.push_back(CreateNavigationItem("http://www.espn.com",
771 "http://www.nothing.com", @"ESPN"));
772 base::scoped_nsobject<CRWSessionController> controller(
773 [[CRWSessionController alloc] initWithNavigationItems:items.Pass()
774 currentIndex:1
775 browserState:&browser_state_]);
776
777 EXPECT_EQ(controller.get().entries.count, 3U);
778 EXPECT_EQ(controller.get().currentNavigationIndex, 1);
779 EXPECT_EQ(controller.get().previousNavigationIndex, -1);
780 // Sanity check the current entry, the CRWSessionEntry unit test will ensure
781 // the entire object is created properly.
782 CRWSessionEntry* current_entry = controller.get().currentEntry;
783 EXPECT_EQ(current_entry.navigationItem->GetURL(),
784 GURL("http://www.yahoo.com"));
785 EXPECT_EQ([[controller openerId] length], 0UL);
786 }
787
788 TEST_F(CRWSessionControllerTest, PreviousNavigationEntry) {
789 [session_controller_
790 addPendingEntry:GURL("http://www.url.com")
791 referrer:MakeReferrer("http://www.referer.com")
792 transition:ui::PAGE_TRANSITION_TYPED
793 rendererInitiated:NO];
794 [session_controller_ commitPendingEntry];
795 [session_controller_
796 addPendingEntry:GURL("http://www.url1.com")
797 referrer:MakeReferrer("http://www.referer.com")
798 transition:ui::PAGE_TRANSITION_TYPED
799 rendererInitiated:NO];
800 [session_controller_ commitPendingEntry];
801 [session_controller_
802 addPendingEntry:GURL("http://www.url2.com")
803 referrer:MakeReferrer("http://www.referer.com")
804 transition:ui::PAGE_TRANSITION_TYPED
805 rendererInitiated:NO];
806 [session_controller_ commitPendingEntry];
807
808 EXPECT_EQ(session_controller_.get().previousNavigationIndex, 1);
809
810 [session_controller_ goBack];
811 EXPECT_EQ(session_controller_.get().previousNavigationIndex, 2);
812
813 [session_controller_ goBack];
814 EXPECT_EQ(session_controller_.get().previousNavigationIndex, 1);
815
816 [session_controller_ goForward];
817 EXPECT_EQ(session_controller_.get().previousNavigationIndex, 0);
818
819 [session_controller_ goForward];
820 EXPECT_EQ(session_controller_.get().previousNavigationIndex, 1);
821 }
822
823 TEST_F(CRWSessionControllerTest, PushNewEntry) {
824 ScopedVector<web::NavigationItem> items;
825 items.push_back(CreateNavigationItem("http://www.firstpage.com",
826 "http://www.starturl.com", @"First"));
827 items.push_back(CreateNavigationItem("http://www.secondpage.com",
828 "http://www.firstpage.com", @"Second"));
829 items.push_back(CreateNavigationItem("http://www.thirdpage.com",
830 "http://www.secondpage.com", @"Third"));
831 base::scoped_nsobject<CRWSessionController> controller(
832 [[CRWSessionController alloc] initWithNavigationItems:items.Pass()
833 currentIndex:0
834 browserState:&browser_state_]);
835
836 GURL pushPageGurl1("http://www.firstpage.com/#push1");
837 NSString* stateObject1 = @"{'foo': 1}";
838 [controller pushNewEntryWithURL:pushPageGurl1 stateObject:stateObject1];
839 CRWSessionEntry* pushedEntry = [controller currentEntry];
840 NSUInteger expectedCount = 2;
841 EXPECT_EQ(expectedCount, controller.get().entries.count);
842 EXPECT_EQ(pushPageGurl1, pushedEntry.navigationItem->GetURL());
843 EXPECT_TRUE(pushedEntry.createdFromPushState);
844 EXPECT_NSEQ(stateObject1, pushedEntry.serializedStateObject);
845 EXPECT_EQ(GURL("http://www.firstpage.com/"),
846 pushedEntry.navigationItem->GetReferrer().url);
847
848 // Add another new entry and check size and fields again.
849 GURL pushPageGurl2("http://www.firstpage.com/push2");
850 [controller pushNewEntryWithURL:pushPageGurl2 stateObject:nil];
851 pushedEntry = [controller currentEntry];
852 expectedCount = 3;
853 EXPECT_EQ(expectedCount, controller.get().entries.count);
854 EXPECT_EQ(pushPageGurl2, pushedEntry.navigationItem->GetURL());
855 EXPECT_TRUE(pushedEntry.createdFromPushState);
856 EXPECT_EQ(nil, pushedEntry.serializedStateObject);
857 EXPECT_EQ(pushPageGurl1, pushedEntry.navigationItem->GetReferrer().url);
858 }
859
860 TEST_F(CRWSessionControllerTest, IsPushStateNavigation) {
861 ScopedVector<web::NavigationItem> items;
862 items.push_back(
863 CreateNavigationItem("http://foo.com", "http://google.com", @"First"));
864 // Push state navigation.
865 items.push_back(
866 CreateNavigationItem("http://foo.com#bar", "http://foo.com", @"Second"));
867 items.push_back(CreateNavigationItem("http://google.com",
868 "http://foo.com#bar", @"Third"));
869 items.push_back(
870 CreateNavigationItem("http://foo.com", "http://google.com", @"Fourth"));
871 // Push state navigation.
872 items.push_back(
873 CreateNavigationItem("http://foo.com/bar", "http://foo.com", @"Fifth"));
874 // Push state navigation.
875 items.push_back(CreateNavigationItem("http://foo.com/bar#bar",
876 "http://foo.com/bar", @"Sixth"));
877 base::scoped_nsobject<CRWSessionController> controller(
878 [[CRWSessionController alloc] initWithNavigationItems:items.Pass()
879 currentIndex:0
880 browserState:&browser_state_]);
881 CRWSessionEntry* entry0 = [controller.get().entries objectAtIndex:0];
882 CRWSessionEntry* entry1 = [controller.get().entries objectAtIndex:1];
883 CRWSessionEntry* entry2 = [controller.get().entries objectAtIndex:2];
884 CRWSessionEntry* entry3 = [controller.get().entries objectAtIndex:3];
885 CRWSessionEntry* entry4 = [controller.get().entries objectAtIndex:4];
886 CRWSessionEntry* entry5 = [controller.get().entries objectAtIndex:5];
887 entry1.createdFromPushState = YES;
888 entry4.createdFromPushState = YES;
889 entry5.createdFromPushState = YES;
890
891 EXPECT_TRUE(
892 [controller isPushStateNavigationBetweenEntry:entry0 andEntry:entry1]);
893 EXPECT_TRUE(
894 [controller isPushStateNavigationBetweenEntry:entry5 andEntry:entry3]);
895 EXPECT_TRUE(
896 [controller isPushStateNavigationBetweenEntry:entry4 andEntry:entry3]);
897 EXPECT_FALSE(
898 [controller isPushStateNavigationBetweenEntry:entry1 andEntry:entry2]);
899 EXPECT_FALSE(
900 [controller isPushStateNavigationBetweenEntry:entry0 andEntry:entry5]);
901 EXPECT_FALSE(
902 [controller isPushStateNavigationBetweenEntry:entry2 andEntry:entry4]);
903 }
904
905 TEST_F(CRWSessionControllerTest, UpdateCurrentEntry) {
906 ScopedVector<web::NavigationItem> items;
907 items.push_back(CreateNavigationItem("http://www.firstpage.com",
908 "http://www.starturl.com", @"First"));
909 items.push_back(CreateNavigationItem("http://www.secondpage.com",
910 "http://www.firstpage.com", @"Second"));
911 items.push_back(CreateNavigationItem("http://www.thirdpage.com",
912 "http://www.secondpage.com", @"Third"));
913 base::scoped_nsobject<CRWSessionController> controller(
914 [[CRWSessionController alloc] initWithNavigationItems:items.Pass()
915 currentIndex:0
916 browserState:&browser_state_]);
917
918 GURL replacePageGurl1("http://www.firstpage.com/#replace1");
919 NSString* stateObject1 = @"{'foo': 1}";
920
921 // Replace current entry and check the size of history and fields of the
922 // modified entry.
923 [controller updateCurrentEntryWithURL:replacePageGurl1
924 stateObject:stateObject1];
925 CRWSessionEntry* replacedEntry = [controller currentEntry];
926 NSUInteger expectedCount = 3;
927 EXPECT_EQ(expectedCount, controller.get().entries.count);
928 EXPECT_EQ(replacePageGurl1, replacedEntry.navigationItem->GetURL());
929 EXPECT_FALSE(replacedEntry.createdFromPushState);
930 EXPECT_NSEQ(stateObject1, replacedEntry.serializedStateObject);
931 EXPECT_EQ(GURL("http://www.starturl.com/"),
932 replacedEntry.navigationItem->GetReferrer().url);
933
934 // Replace current entry and check size and fields again.
935 GURL replacePageGurl2("http://www.firstpage.com/#replace2");
936 [controller.get() updateCurrentEntryWithURL:replacePageGurl2 stateObject:nil];
937 replacedEntry = [controller currentEntry];
938 EXPECT_EQ(expectedCount, controller.get().entries.count);
939 EXPECT_EQ(replacePageGurl2, replacedEntry.navigationItem->GetURL());
940 EXPECT_FALSE(replacedEntry.createdFromPushState);
941 EXPECT_NSEQ(nil, replacedEntry.serializedStateObject);
942 EXPECT_EQ(GURL("http://www.starturl.com/"),
943 replacedEntry.navigationItem->GetReferrer().url);
944 }
945
946 TEST_F(CRWSessionControllerTest, TestBackwardForwardEntries) {
947 [session_controller_ addPendingEntry:GURL("http://www.example.com/0")
948 referrer:MakeReferrer("http://www.example.com/a")
949 transition:ui::PAGE_TRANSITION_LINK
950 rendererInitiated:NO];
951 [session_controller_ commitPendingEntry];
952 [session_controller_ addPendingEntry:GURL("http://www.example.com/1")
953 referrer:MakeReferrer("http://www.example.com/b")
954 transition:ui::PAGE_TRANSITION_LINK
955 rendererInitiated:NO];
956 [session_controller_ commitPendingEntry];
957 [session_controller_ addPendingEntry:GURL("http://www.example.com/redirect")
958 referrer:MakeReferrer("http://www.example.com/r")
959 transition:ui::PAGE_TRANSITION_IS_REDIRECT_MASK
960 rendererInitiated:NO];
961 [session_controller_ commitPendingEntry];
962 [session_controller_ addPendingEntry:GURL("http://www.example.com/2")
963 referrer:MakeReferrer("http://www.example.com/c")
964 transition:ui::PAGE_TRANSITION_LINK
965 rendererInitiated:NO];
966 [session_controller_ commitPendingEntry];
967
968 EXPECT_EQ(3, session_controller_.get().currentNavigationIndex);
969 NSArray* backEntries = [session_controller_ backwardEntries];
970 EXPECT_EQ(2U, [backEntries count]);
971 EXPECT_EQ(0U, [[session_controller_ forwardEntries] count]);
972 EXPECT_EQ("http://www.example.com/1",
973 [[backEntries objectAtIndex:0] navigationItem]->GetURL().spec());
974
975 [session_controller_ goBack];
976 EXPECT_EQ(1U, [[session_controller_ backwardEntries] count]);
977 EXPECT_EQ(1U, [[session_controller_ forwardEntries] count]);
978
979 [session_controller_ goBack];
980 NSArray* forwardEntries = [session_controller_ forwardEntries];
981 EXPECT_EQ(0U, [[session_controller_ backwardEntries] count]);
982 EXPECT_EQ(2U, [forwardEntries count]);
983 EXPECT_EQ("http://www.example.com/2",
984 [[forwardEntries objectAtIndex:1] navigationItem]->GetURL().spec());
985 }
986
987 TEST_F(CRWSessionControllerTest, GoToEntry) {
988 [session_controller_ addPendingEntry:GURL("http://www.example.com/0")
989 referrer:MakeReferrer("http://www.example.com/a")
990 transition:ui::PAGE_TRANSITION_LINK
991 rendererInitiated:NO];
992 [session_controller_ commitPendingEntry];
993 [session_controller_ addPendingEntry:GURL("http://www.example.com/1")
994 referrer:MakeReferrer("http://www.example.com/b")
995 transition:ui::PAGE_TRANSITION_LINK
996 rendererInitiated:NO];
997 [session_controller_ commitPendingEntry];
998 [session_controller_ addPendingEntry:GURL("http://www.example.com/redirect")
999 referrer:MakeReferrer("http://www.example.com/r")
1000 transition:ui::PAGE_TRANSITION_IS_REDIRECT_MASK
1001 rendererInitiated:NO];
1002 [session_controller_ commitPendingEntry];
1003 [session_controller_ addPendingEntry:GURL("http://www.example.com/2")
1004 referrer:MakeReferrer("http://www.example.com/c")
1005 transition:ui::PAGE_TRANSITION_LINK
1006 rendererInitiated:NO];
1007 [session_controller_ commitPendingEntry];
1008 EXPECT_EQ(3, session_controller_.get().currentNavigationIndex);
1009
1010 CRWSessionEntry* entry1 = [session_controller_.get().entries objectAtIndex:1];
1011 [session_controller_ goToEntry:entry1];
1012 EXPECT_EQ(1, session_controller_.get().currentNavigationIndex);
1013
1014 // Remove an entry and attempt to go it. Ensure it outlives the removal.
1015 base::scoped_nsobject<CRWSessionEntry> entry3(
1016 [[session_controller_.get().entries objectAtIndex:3] retain]);
1017 [session_controller_ removeEntryAtIndex:3];
1018 [session_controller_ goToEntry:entry3];
1019 EXPECT_EQ(1, session_controller_.get().currentNavigationIndex);
1020 }
1021
1022 } // anonymous namespace
OLDNEW
« no previous file with comments | « ios/web/navigation/crw_session_controller+private_constructors.h ('k') | ios/web/navigation/crw_session_entry.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698