OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #import <objc/runtime.h> | 5 #import <objc/runtime.h> |
6 | 6 |
7 #include "base/files/file_path.h" | 7 #include "base/files/file_path.h" |
8 #include "base/mac/scoped_nsautorelease_pool.h" | 8 #include "base/mac/scoped_nsautorelease_pool.h" |
9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 didMoveTab:(Tab*)tab | 73 didMoveTab:(Tab*)tab |
74 fromIndex:(NSUInteger)fromIndex | 74 fromIndex:(NSUInteger)fromIndex |
75 toIndex:(NSUInteger)toIndex { | 75 toIndex:(NSUInteger)toIndex { |
76 tabMovedWasCalled_ = YES; | 76 tabMovedWasCalled_ = YES; |
77 } | 77 } |
78 | 78 |
79 @end | 79 @end |
80 | 80 |
81 namespace { | 81 namespace { |
82 | 82 |
83 const GURL kURL("https://www.some.url.com"); | 83 const char kURL1[] = "https://www.some.url.com"; |
84 const web::Referrer kEmptyReferrer; | 84 const char kURL2[] = "https://www.some.url2.com"; |
85 const web::Referrer kReferrer(GURL("https//www.some.referer.com"), | |
86 web::ReferrerPolicyDefault); | |
87 const web::Referrer kReferrer2(GURL("https//www.some.referer2.com"), | |
88 web::ReferrerPolicyDefault); | |
89 | 85 |
90 class TabModelTest : public PlatformTest { | 86 class TabModelTest : public PlatformTest { |
91 public: | 87 public: |
92 TabModelTest() | 88 TabModelTest() |
93 : scoped_browser_state_manager_( | 89 : scoped_browser_state_manager_( |
94 base::MakeUnique<TestChromeBrowserStateManager>(base::FilePath())), | 90 base::MakeUnique<TestChromeBrowserStateManager>(base::FilePath())), |
95 web_client_(base::MakeUnique<ChromeWebClient>()) { | 91 web_client_(base::MakeUnique<ChromeWebClient>()) { |
96 DCHECK_CURRENTLY_ON(web::WebThread::UI); | 92 DCHECK_CURRENTLY_ON(web::WebThread::UI); |
97 | 93 |
98 TestChromeBrowserState::Builder test_cbs_builder; | 94 TestChromeBrowserState::Builder test_cbs_builder; |
99 chrome_browser_state_ = test_cbs_builder.Build(); | 95 chrome_browser_state_ = test_cbs_builder.Build(); |
100 | 96 |
101 session_window_.reset([[SessionWindowIOS alloc] init]); | 97 session_window_.reset([[SessionWindowIOS alloc] init]); |
102 // Create tab model with just a dummy session service so the async state | 98 // Create tab model with just a dummy session service so the async state |
103 // saving doesn't trigger unless actually wanted. | 99 // saving doesn't trigger unless actually wanted. |
104 base::scoped_nsobject<TestSessionService> test_service( | 100 base::scoped_nsobject<TestSessionService> test_service( |
105 [[TestSessionService alloc] init]); | 101 [[TestSessionService alloc] init]); |
106 tab_model_.reset([[TabModel alloc] | 102 tab_model_.reset([[TabModel alloc] |
107 initWithSessionWindow:session_window_.get() | 103 initWithSessionWindow:session_window_.get() |
108 sessionService:test_service | 104 sessionService:test_service |
109 browserState:chrome_browser_state_.get()]); | 105 browserState:chrome_browser_state_.get()]); |
110 [tab_model_ setWebUsageEnabled:NO]; | 106 [tab_model_ setWebUsageEnabled:NO]; |
111 [tab_model_ setPrimary:YES]; | 107 [tab_model_ setPrimary:YES]; |
112 tab_model_observer_.reset([[TabModelObserverPong alloc] init]); | |
113 [tab_model_ addObserver:tab_model_observer_]; | |
114 } | 108 } |
115 | 109 |
116 ~TabModelTest() override { | 110 ~TabModelTest() override { |
117 [tab_model_ removeObserver:tab_model_observer_]; | |
118 [tab_model_ browserStateDestroyed]; | 111 [tab_model_ browserStateDestroyed]; |
119 } | 112 } |
120 | 113 |
121 protected: | 114 protected: |
122 std::unique_ptr<WebStateImpl> CreateWebState(NSString* opener, | 115 // Creates a session window with entries named "restored window 1", |
123 NSInteger index) { | 116 // "restored window 2" and "restored window 3" and the second entry |
124 auto webState = base::MakeUnique<WebStateImpl>(chrome_browser_state_.get()); | 117 // marked as selected. |
125 webState->GetNavigationManagerImpl().InitializeSession(NO); | 118 base::scoped_nsobject<SessionWindowIOS> CreateSessionWindow() { |
126 if ([opener length] != 0) { | 119 base::scoped_nsobject<SessionWindowIOS> window( |
127 // Duplicate code from Tab initializer. Will be removed once the code | 120 [[SessionWindowIOS alloc] init]); |
128 // is rewritten to remove the use of internal ios/web/ API (see issue | 121 for (int i = 0; i < 3; i++) { |
129 // http://crbug.com/620465 for progress). | |
130 web::SerializableUserDataManager* userDataManager = | |
131 web::SerializableUserDataManager::FromWebState(webState.get()); | |
132 userDataManager->AddSerializableData(opener, @"OpenerID"); | |
133 userDataManager->AddSerializableData(@(index), @"OpenerNavigationIndex"); | |
134 } | |
135 return webState; | |
136 } | |
137 | |
138 std::unique_ptr<WebStateImpl> CreateWebState() { | |
139 return CreateWebState(@"", -1); | |
140 } | |
141 | |
142 std::unique_ptr<WebStateImpl> CreateChildWebState(Tab* parent) { | |
143 return CreateWebState(parent.tabId, -1); | |
144 } | |
145 | |
146 void RestoreSession(SessionWindowIOS* window) { | |
147 [tab_model_ restoreSessionWindow:window]; | |
148 } | |
149 | |
150 // Creates a session window with |entries| entries and a |selectedIndex| of 1. | |
151 SessionWindowIOS* CreateSessionWindow(int entries) { | |
152 SessionWindowIOS* window = [[SessionWindowIOS alloc] init]; | |
153 for (int i = 0; i < entries; i++) { | |
154 CRWSessionStorage* session_storage = | 122 CRWSessionStorage* session_storage = |
155 [[[CRWSessionStorage alloc] init] autorelease]; | 123 [[[CRWSessionStorage alloc] init] autorelease]; |
156 [window addSerializedSessionStorage:session_storage]; | 124 [window addSerializedSessionStorage:session_storage]; |
157 } | 125 } |
158 if (entries) | 126 [window setSelectedIndex:1]; |
159 [window setSelectedIndex:1]; | |
160 return window; | 127 return window; |
161 } | 128 } |
162 | 129 |
163 web::TestWebThreadBundle thread_bundle_; | 130 web::TestWebThreadBundle thread_bundle_; |
164 IOSChromeScopedTestingChromeBrowserStateManager scoped_browser_state_manager_; | 131 IOSChromeScopedTestingChromeBrowserStateManager scoped_browser_state_manager_; |
165 web::ScopedTestingWebClient web_client_; | 132 web::ScopedTestingWebClient web_client_; |
166 base::scoped_nsobject<SessionWindowIOS> session_window_; | 133 base::scoped_nsobject<SessionWindowIOS> session_window_; |
167 std::unique_ptr<TestChromeBrowserState> chrome_browser_state_; | 134 std::unique_ptr<TestChromeBrowserState> chrome_browser_state_; |
168 base::mac::ScopedNSAutoreleasePool pool_; | 135 base::mac::ScopedNSAutoreleasePool pool_; |
169 base::scoped_nsobject<TabModel> tab_model_; | 136 base::scoped_nsobject<TabModel> tab_model_; |
170 base::scoped_nsobject<TabModelObserverPong> tab_model_observer_; | |
171 }; | 137 }; |
172 | 138 |
173 TEST_F(TabModelTest, IsEmpty) { | 139 TEST_F(TabModelTest, IsEmpty) { |
174 EXPECT_EQ([tab_model_ count], 0U); | 140 EXPECT_EQ([tab_model_ count], 0U); |
175 EXPECT_TRUE([tab_model_ isEmpty]); | 141 EXPECT_TRUE([tab_model_ isEmpty]); |
176 [tab_model_ insertTabWithURL:kURL | 142 [tab_model_ insertTabWithURL:GURL(kURL1) |
177 referrer:kReferrer | 143 referrer:web::Referrer() |
178 transition:ui::PAGE_TRANSITION_TYPED | 144 transition:ui::PAGE_TRANSITION_TYPED |
179 opener:nil | 145 opener:nil |
180 openedByDOM:NO | 146 openedByDOM:NO |
181 atIndex:0 | 147 atIndex:0 |
182 inBackground:YES]; | 148 inBackground:NO]; |
183 ASSERT_EQ(1U, [tab_model_ count]); | 149 ASSERT_EQ(1U, [tab_model_ count]); |
184 EXPECT_FALSE([tab_model_ isEmpty]); | 150 EXPECT_FALSE([tab_model_ isEmpty]); |
185 } | 151 } |
186 | 152 |
187 TEST_F(TabModelTest, InsertUrlSingle) { | 153 TEST_F(TabModelTest, InsertUrlSingle) { |
188 Tab* tab = [tab_model_ insertTabWithURL:kURL | 154 Tab* tab = [tab_model_ insertTabWithURL:GURL(kURL1) |
189 referrer:kReferrer | 155 referrer:web::Referrer() |
190 transition:ui::PAGE_TRANSITION_TYPED | 156 transition:ui::PAGE_TRANSITION_TYPED |
191 opener:nil | 157 opener:nil |
192 openedByDOM:NO | 158 openedByDOM:NO |
193 atIndex:0 | 159 atIndex:0 |
194 inBackground:YES]; | 160 inBackground:NO]; |
195 ASSERT_EQ(1U, [tab_model_ count]); | 161 ASSERT_EQ(1U, [tab_model_ count]); |
196 EXPECT_NSEQ(tab, [tab_model_ tabAtIndex:0]); | 162 EXPECT_NSEQ(tab, [tab_model_ tabAtIndex:0]); |
197 } | 163 } |
198 | 164 |
199 TEST_F(TabModelTest, InsertUrlMultiple) { | 165 TEST_F(TabModelTest, InsertUrlMultiple) { |
200 Tab* tab0 = [tab_model_ insertTabWithURL:kURL | 166 Tab* tab0 = [tab_model_ insertTabWithURL:GURL(kURL1) |
201 referrer:kReferrer | 167 referrer:web::Referrer() |
202 transition:ui::PAGE_TRANSITION_TYPED | 168 transition:ui::PAGE_TRANSITION_TYPED |
203 opener:nil | 169 opener:nil |
204 openedByDOM:NO | 170 openedByDOM:NO |
205 atIndex:0 | 171 atIndex:0 |
206 inBackground:YES]; | 172 inBackground:NO]; |
207 Tab* tab1 = [tab_model_ insertTabWithURL:kURL | 173 Tab* tab1 = [tab_model_ insertTabWithURL:GURL(kURL1) |
208 referrer:kReferrer | 174 referrer:web::Referrer() |
209 transition:ui::PAGE_TRANSITION_TYPED | 175 transition:ui::PAGE_TRANSITION_TYPED |
210 opener:nil | 176 opener:nil |
211 openedByDOM:NO | 177 openedByDOM:NO |
212 atIndex:0 | 178 atIndex:0 |
213 inBackground:YES]; | 179 inBackground:NO]; |
214 Tab* tab2 = [tab_model_ insertTabWithURL:kURL | 180 Tab* tab2 = [tab_model_ insertTabWithURL:GURL(kURL1) |
215 referrer:kReferrer | 181 referrer:web::Referrer() |
216 transition:ui::PAGE_TRANSITION_TYPED | 182 transition:ui::PAGE_TRANSITION_TYPED |
217 opener:nil | 183 opener:nil |
218 openedByDOM:NO | 184 openedByDOM:NO |
219 atIndex:1 | 185 atIndex:1 |
220 inBackground:YES]; | 186 inBackground:NO]; |
221 | 187 |
222 ASSERT_EQ(3U, [tab_model_ count]); | 188 ASSERT_EQ(3U, [tab_model_ count]); |
223 EXPECT_NSEQ(tab1, [tab_model_ tabAtIndex:0]); | 189 EXPECT_NSEQ(tab1, [tab_model_ tabAtIndex:0]); |
224 EXPECT_NSEQ(tab2, [tab_model_ tabAtIndex:1]); | 190 EXPECT_NSEQ(tab2, [tab_model_ tabAtIndex:1]); |
225 EXPECT_NSEQ(tab0, [tab_model_ tabAtIndex:2]); | 191 EXPECT_NSEQ(tab0, [tab_model_ tabAtIndex:2]); |
226 } | 192 } |
227 | 193 |
228 TEST_F(TabModelTest, AppendUrlSingle) { | 194 TEST_F(TabModelTest, AppendUrlSingle) { |
229 Tab* tab = [tab_model_ insertTabWithURL:kURL | 195 Tab* tab = [tab_model_ insertTabWithURL:GURL(kURL1) |
230 referrer:kReferrer | 196 referrer:web::Referrer() |
231 transition:ui::PAGE_TRANSITION_TYPED | 197 transition:ui::PAGE_TRANSITION_TYPED |
232 opener:nil | 198 opener:nil |
233 openedByDOM:NO | 199 openedByDOM:NO |
234 atIndex:[tab_model_ count] | 200 atIndex:[tab_model_ count] |
235 inBackground:YES]; | 201 inBackground:NO]; |
236 ASSERT_EQ(1U, [tab_model_ count]); | 202 ASSERT_EQ(1U, [tab_model_ count]); |
237 EXPECT_NSEQ(tab, [tab_model_ tabAtIndex:0]); | 203 EXPECT_NSEQ(tab, [tab_model_ tabAtIndex:0]); |
238 } | 204 } |
239 | 205 |
240 TEST_F(TabModelTest, AppendUrlMultiple) { | 206 TEST_F(TabModelTest, AppendUrlMultiple) { |
241 Tab* tab0 = [tab_model_ insertTabWithURL:kURL | 207 Tab* tab0 = [tab_model_ insertTabWithURL:GURL(kURL1) |
242 referrer:kReferrer | 208 referrer:web::Referrer() |
243 transition:ui::PAGE_TRANSITION_TYPED | 209 transition:ui::PAGE_TRANSITION_TYPED |
244 opener:nil | 210 opener:nil |
245 openedByDOM:NO | 211 openedByDOM:NO |
246 atIndex:[tab_model_ count] | 212 atIndex:[tab_model_ count] |
247 inBackground:YES]; | 213 inBackground:NO]; |
248 Tab* tab1 = [tab_model_ insertTabWithURL:kURL | 214 Tab* tab1 = [tab_model_ insertTabWithURL:GURL(kURL1) |
249 referrer:kReferrer | 215 referrer:web::Referrer() |
250 transition:ui::PAGE_TRANSITION_TYPED | 216 transition:ui::PAGE_TRANSITION_TYPED |
251 opener:nil | 217 opener:nil |
252 openedByDOM:NO | 218 openedByDOM:NO |
253 atIndex:[tab_model_ count] | 219 atIndex:[tab_model_ count] |
254 inBackground:YES]; | 220 inBackground:NO]; |
255 Tab* tab2 = [tab_model_ insertTabWithURL:kURL | 221 Tab* tab2 = [tab_model_ insertTabWithURL:GURL(kURL1) |
256 referrer:kReferrer | 222 referrer:web::Referrer() |
257 transition:ui::PAGE_TRANSITION_TYPED | 223 transition:ui::PAGE_TRANSITION_TYPED |
258 opener:nil | 224 opener:nil |
259 openedByDOM:NO | 225 openedByDOM:NO |
260 atIndex:[tab_model_ count] | 226 atIndex:[tab_model_ count] |
261 inBackground:YES]; | 227 inBackground:NO]; |
262 | 228 |
263 ASSERT_EQ(3U, [tab_model_ count]); | 229 ASSERT_EQ(3U, [tab_model_ count]); |
264 EXPECT_NSEQ(tab0, [tab_model_ tabAtIndex:0]); | 230 EXPECT_NSEQ(tab0, [tab_model_ tabAtIndex:0]); |
265 EXPECT_NSEQ(tab1, [tab_model_ tabAtIndex:1]); | 231 EXPECT_NSEQ(tab1, [tab_model_ tabAtIndex:1]); |
266 EXPECT_NSEQ(tab2, [tab_model_ tabAtIndex:2]); | 232 EXPECT_NSEQ(tab2, [tab_model_ tabAtIndex:2]); |
267 } | 233 } |
268 | 234 |
269 TEST_F(TabModelTest, CloseTabAtIndexBeginning) { | 235 TEST_F(TabModelTest, CloseTabAtIndexBeginning) { |
270 [tab_model_ insertTabWithURL:kURL | 236 [tab_model_ insertTabWithURL:GURL(kURL1) |
271 referrer:kReferrer | 237 referrer:web::Referrer() |
272 transition:ui::PAGE_TRANSITION_TYPED | 238 transition:ui::PAGE_TRANSITION_TYPED |
273 opener:nil | 239 opener:nil |
274 openedByDOM:NO | 240 openedByDOM:NO |
275 atIndex:[tab_model_ count] | 241 atIndex:[tab_model_ count] |
276 inBackground:YES]; | 242 inBackground:NO]; |
277 Tab* tab1 = [tab_model_ insertTabWithURL:kURL | 243 Tab* tab1 = [tab_model_ insertTabWithURL:GURL(kURL1) |
278 referrer:kReferrer | 244 referrer:web::Referrer() |
279 transition:ui::PAGE_TRANSITION_TYPED | 245 transition:ui::PAGE_TRANSITION_TYPED |
280 opener:nil | 246 opener:nil |
281 openedByDOM:NO | 247 openedByDOM:NO |
282 atIndex:[tab_model_ count] | 248 atIndex:[tab_model_ count] |
283 inBackground:YES]; | 249 inBackground:NO]; |
284 Tab* tab2 = [tab_model_ insertTabWithURL:kURL | 250 Tab* tab2 = [tab_model_ insertTabWithURL:GURL(kURL1) |
285 referrer:kReferrer | 251 referrer:web::Referrer() |
286 transition:ui::PAGE_TRANSITION_TYPED | 252 transition:ui::PAGE_TRANSITION_TYPED |
287 opener:nil | 253 opener:nil |
288 openedByDOM:NO | 254 openedByDOM:NO |
289 atIndex:[tab_model_ count] | 255 atIndex:[tab_model_ count] |
290 inBackground:YES]; | 256 inBackground:NO]; |
291 | 257 |
292 [tab_model_ closeTabAtIndex:0]; | 258 [tab_model_ closeTabAtIndex:0]; |
293 | 259 |
294 ASSERT_EQ(2U, [tab_model_ count]); | 260 ASSERT_EQ(2U, [tab_model_ count]); |
295 EXPECT_NSEQ(tab1, [tab_model_ tabAtIndex:0]); | 261 EXPECT_NSEQ(tab1, [tab_model_ tabAtIndex:0]); |
296 EXPECT_NSEQ(tab2, [tab_model_ tabAtIndex:1]); | 262 EXPECT_NSEQ(tab2, [tab_model_ tabAtIndex:1]); |
297 } | 263 } |
298 | 264 |
299 TEST_F(TabModelTest, CloseTabAtIndexMiddle) { | 265 TEST_F(TabModelTest, CloseTabAtIndexMiddle) { |
300 Tab* tab0 = [tab_model_ insertTabWithURL:kURL | 266 Tab* tab0 = [tab_model_ insertTabWithURL:GURL(kURL1) |
301 referrer:kReferrer | 267 referrer:web::Referrer() |
302 transition:ui::PAGE_TRANSITION_TYPED | 268 transition:ui::PAGE_TRANSITION_TYPED |
303 opener:nil | 269 opener:nil |
304 openedByDOM:NO | 270 openedByDOM:NO |
305 atIndex:[tab_model_ count] | 271 atIndex:[tab_model_ count] |
306 inBackground:YES]; | 272 inBackground:NO]; |
307 [tab_model_ insertTabWithURL:kURL | 273 [tab_model_ insertTabWithURL:GURL(kURL1) |
308 referrer:kReferrer | 274 referrer:web::Referrer() |
309 transition:ui::PAGE_TRANSITION_TYPED | 275 transition:ui::PAGE_TRANSITION_TYPED |
310 opener:nil | 276 opener:nil |
311 openedByDOM:NO | 277 openedByDOM:NO |
312 atIndex:[tab_model_ count] | 278 atIndex:[tab_model_ count] |
313 inBackground:YES]; | 279 inBackground:NO]; |
314 Tab* tab2 = [tab_model_ insertTabWithURL:kURL | 280 Tab* tab2 = [tab_model_ insertTabWithURL:GURL(kURL1) |
315 referrer:kReferrer | 281 referrer:web::Referrer() |
316 transition:ui::PAGE_TRANSITION_TYPED | 282 transition:ui::PAGE_TRANSITION_TYPED |
317 opener:nil | 283 opener:nil |
318 openedByDOM:NO | 284 openedByDOM:NO |
319 atIndex:[tab_model_ count] | 285 atIndex:[tab_model_ count] |
320 inBackground:YES]; | 286 inBackground:NO]; |
321 | 287 |
322 [tab_model_ closeTabAtIndex:1]; | 288 [tab_model_ closeTabAtIndex:1]; |
323 | 289 |
324 ASSERT_EQ(2U, [tab_model_ count]); | 290 ASSERT_EQ(2U, [tab_model_ count]); |
325 EXPECT_NSEQ(tab0, [tab_model_ tabAtIndex:0]); | 291 EXPECT_NSEQ(tab0, [tab_model_ tabAtIndex:0]); |
326 EXPECT_NSEQ(tab2, [tab_model_ tabAtIndex:1]); | 292 EXPECT_NSEQ(tab2, [tab_model_ tabAtIndex:1]); |
327 } | 293 } |
328 | 294 |
329 TEST_F(TabModelTest, CloseTabAtIndexLast) { | 295 TEST_F(TabModelTest, CloseTabAtIndexLast) { |
330 Tab* tab0 = [tab_model_ insertTabWithURL:kURL | 296 Tab* tab0 = [tab_model_ insertTabWithURL:GURL(kURL1) |
331 referrer:kReferrer | 297 referrer:web::Referrer() |
332 transition:ui::PAGE_TRANSITION_TYPED | 298 transition:ui::PAGE_TRANSITION_TYPED |
333 opener:nil | 299 opener:nil |
334 openedByDOM:NO | 300 openedByDOM:NO |
335 atIndex:[tab_model_ count] | 301 atIndex:[tab_model_ count] |
336 inBackground:YES]; | 302 inBackground:NO]; |
337 Tab* tab1 = [tab_model_ insertTabWithURL:kURL | 303 Tab* tab1 = [tab_model_ insertTabWithURL:GURL(kURL1) |
338 referrer:kReferrer | 304 referrer:web::Referrer() |
339 transition:ui::PAGE_TRANSITION_TYPED | 305 transition:ui::PAGE_TRANSITION_TYPED |
340 opener:nil | 306 opener:nil |
341 openedByDOM:NO | 307 openedByDOM:NO |
342 atIndex:[tab_model_ count] | 308 atIndex:[tab_model_ count] |
343 inBackground:YES]; | 309 inBackground:NO]; |
344 [tab_model_ insertTabWithURL:kURL | 310 [tab_model_ insertTabWithURL:GURL(kURL1) |
345 referrer:kReferrer | 311 referrer:web::Referrer() |
346 transition:ui::PAGE_TRANSITION_TYPED | 312 transition:ui::PAGE_TRANSITION_TYPED |
347 opener:nil | 313 opener:nil |
348 openedByDOM:NO | 314 openedByDOM:NO |
349 atIndex:[tab_model_ count] | 315 atIndex:[tab_model_ count] |
350 inBackground:YES]; | 316 inBackground:NO]; |
351 | 317 |
352 [tab_model_ closeTabAtIndex:2]; | 318 [tab_model_ closeTabAtIndex:2]; |
353 | 319 |
354 ASSERT_EQ(2U, [tab_model_ count]); | 320 ASSERT_EQ(2U, [tab_model_ count]); |
355 EXPECT_NSEQ(tab0, [tab_model_ tabAtIndex:0]); | 321 EXPECT_NSEQ(tab0, [tab_model_ tabAtIndex:0]); |
356 EXPECT_NSEQ(tab1, [tab_model_ tabAtIndex:1]); | 322 EXPECT_NSEQ(tab1, [tab_model_ tabAtIndex:1]); |
357 } | 323 } |
358 | 324 |
359 TEST_F(TabModelTest, CloseTabAtIndexOnlyOne) { | 325 TEST_F(TabModelTest, CloseTabAtIndexOnlyOne) { |
360 [tab_model_ insertTabWithURL:kURL | 326 [tab_model_ insertTabWithURL:GURL(kURL1) |
361 referrer:kReferrer | 327 referrer:web::Referrer() |
362 transition:ui::PAGE_TRANSITION_TYPED | 328 transition:ui::PAGE_TRANSITION_TYPED |
363 opener:nil | 329 opener:nil |
364 openedByDOM:NO | 330 openedByDOM:NO |
365 atIndex:[tab_model_ count] | 331 atIndex:[tab_model_ count] |
366 inBackground:YES]; | 332 inBackground:NO]; |
367 | 333 |
368 [tab_model_ closeTabAtIndex:0]; | 334 [tab_model_ closeTabAtIndex:0]; |
369 | 335 |
370 EXPECT_EQ(0U, [tab_model_ count]); | 336 EXPECT_EQ(0U, [tab_model_ count]); |
371 } | 337 } |
372 | 338 |
373 TEST_F(TabModelTest, RestoreSessionOnNTPTest) { | 339 TEST_F(TabModelTest, RestoreSessionOnNTPTest) { |
374 Tab* tab = [tab_model_ insertTabWithURL:GURL(kChromeUINewTabURL) | 340 Tab* tab = [tab_model_ insertTabWithURL:GURL(kChromeUINewTabURL) |
375 referrer:kEmptyReferrer | 341 referrer:web::Referrer() |
376 transition:ui::PAGE_TRANSITION_TYPED | 342 transition:ui::PAGE_TRANSITION_TYPED |
377 opener:nil | 343 opener:nil |
378 openedByDOM:NO | 344 openedByDOM:NO |
379 atIndex:0 | 345 atIndex:0 |
380 inBackground:YES]; | 346 inBackground:NO]; |
381 base::scoped_nsobject<SessionWindowIOS> window(CreateSessionWindow(3)); | |
382 | 347 |
383 RestoreSession(window.get()); | 348 base::scoped_nsobject<SessionWindowIOS> window(CreateSessionWindow()); |
| 349 [tab_model_ restoreSessionWindow:window.get()]; |
| 350 |
384 ASSERT_EQ(3U, [tab_model_ count]); | 351 ASSERT_EQ(3U, [tab_model_ count]); |
385 EXPECT_NSEQ([tab_model_ tabAtIndex:1], [tab_model_ currentTab]); | 352 EXPECT_NSEQ([tab_model_ tabAtIndex:1], [tab_model_ currentTab]); |
386 EXPECT_NSNE(tab, [tab_model_ tabAtIndex:0]); | 353 EXPECT_NSNE(tab, [tab_model_ tabAtIndex:0]); |
387 EXPECT_NSNE(tab, [tab_model_ tabAtIndex:1]); | 354 EXPECT_NSNE(tab, [tab_model_ tabAtIndex:1]); |
388 EXPECT_NSNE(tab, [tab_model_ tabAtIndex:2]); | 355 EXPECT_NSNE(tab, [tab_model_ tabAtIndex:2]); |
389 } | 356 } |
390 | 357 |
391 TEST_F(TabModelTest, RestoreSessionOn2NtpTest) { | 358 TEST_F(TabModelTest, RestoreSessionOn2NtpTest) { |
392 Tab* tab0 = [tab_model_ insertTabWithURL:GURL(kChromeUINewTabURL) | 359 Tab* tab0 = [tab_model_ insertTabWithURL:GURL(kChromeUINewTabURL) |
393 referrer:kEmptyReferrer | 360 referrer:web::Referrer() |
394 transition:ui::PAGE_TRANSITION_TYPED | 361 transition:ui::PAGE_TRANSITION_TYPED |
395 opener:nil | 362 opener:nil |
396 openedByDOM:NO | 363 openedByDOM:NO |
397 atIndex:0 | 364 atIndex:0 |
398 inBackground:YES]; | 365 inBackground:NO]; |
399 Tab* tab1 = [tab_model_ insertTabWithURL:GURL(kChromeUINewTabURL) | 366 Tab* tab1 = [tab_model_ insertTabWithURL:GURL(kChromeUINewTabURL) |
400 referrer:kEmptyReferrer | 367 referrer:web::Referrer() |
401 transition:ui::PAGE_TRANSITION_TYPED | 368 transition:ui::PAGE_TRANSITION_TYPED |
402 opener:nil | 369 opener:nil |
403 openedByDOM:NO | 370 openedByDOM:NO |
404 atIndex:1 | 371 atIndex:1 |
405 inBackground:YES]; | 372 inBackground:NO]; |
406 base::scoped_nsobject<SessionWindowIOS> window(CreateSessionWindow(3)); | |
407 | 373 |
408 RestoreSession(window.get()); | 374 base::scoped_nsobject<SessionWindowIOS> window(CreateSessionWindow()); |
| 375 [tab_model_ restoreSessionWindow:window.get()]; |
| 376 |
409 ASSERT_EQ(5U, [tab_model_ count]); | 377 ASSERT_EQ(5U, [tab_model_ count]); |
410 EXPECT_NSEQ([tab_model_ tabAtIndex:3], [tab_model_ currentTab]); | 378 EXPECT_NSEQ([tab_model_ tabAtIndex:3], [tab_model_ currentTab]); |
411 EXPECT_NSEQ(tab0, [tab_model_ tabAtIndex:0]); | 379 EXPECT_NSEQ(tab0, [tab_model_ tabAtIndex:0]); |
412 EXPECT_NSEQ(tab1, [tab_model_ tabAtIndex:1]); | 380 EXPECT_NSEQ(tab1, [tab_model_ tabAtIndex:1]); |
413 EXPECT_NSNE(tab0, [tab_model_ tabAtIndex:2]); | 381 EXPECT_NSNE(tab0, [tab_model_ tabAtIndex:2]); |
414 EXPECT_NSNE(tab0, [tab_model_ tabAtIndex:3]); | 382 EXPECT_NSNE(tab0, [tab_model_ tabAtIndex:3]); |
415 EXPECT_NSNE(tab0, [tab_model_ tabAtIndex:4]); | 383 EXPECT_NSNE(tab0, [tab_model_ tabAtIndex:4]); |
416 EXPECT_NSNE(tab1, [tab_model_ tabAtIndex:2]); | 384 EXPECT_NSNE(tab1, [tab_model_ tabAtIndex:2]); |
417 EXPECT_NSNE(tab1, [tab_model_ tabAtIndex:3]); | 385 EXPECT_NSNE(tab1, [tab_model_ tabAtIndex:3]); |
418 EXPECT_NSNE(tab1, [tab_model_ tabAtIndex:4]); | 386 EXPECT_NSNE(tab1, [tab_model_ tabAtIndex:4]); |
419 } | 387 } |
420 | 388 |
421 TEST_F(TabModelTest, RestoreSessionOnAnyTest) { | 389 TEST_F(TabModelTest, RestoreSessionOnAnyTest) { |
422 Tab* tab = [tab_model_ insertTabWithURL:kURL | 390 Tab* tab = [tab_model_ insertTabWithURL:GURL(kURL1) |
423 referrer:kEmptyReferrer | 391 referrer:web::Referrer() |
424 transition:ui::PAGE_TRANSITION_TYPED | 392 transition:ui::PAGE_TRANSITION_TYPED |
425 opener:nil | 393 opener:nil |
426 openedByDOM:NO | 394 openedByDOM:NO |
427 atIndex:0 | 395 atIndex:0 |
428 inBackground:YES]; | 396 inBackground:NO]; |
429 base::scoped_nsobject<SessionWindowIOS> window(CreateSessionWindow(3)); | |
430 | 397 |
431 RestoreSession(window.get()); | 398 base::scoped_nsobject<SessionWindowIOS> window(CreateSessionWindow()); |
| 399 [tab_model_ restoreSessionWindow:window.get()]; |
| 400 |
432 ASSERT_EQ(4U, [tab_model_ count]); | 401 ASSERT_EQ(4U, [tab_model_ count]); |
433 EXPECT_NSEQ([tab_model_ tabAtIndex:2], [tab_model_ currentTab]); | 402 EXPECT_NSEQ([tab_model_ tabAtIndex:2], [tab_model_ currentTab]); |
434 EXPECT_NSEQ(tab, [tab_model_ tabAtIndex:0]); | 403 EXPECT_NSEQ(tab, [tab_model_ tabAtIndex:0]); |
435 EXPECT_NSNE(tab, [tab_model_ tabAtIndex:1]); | 404 EXPECT_NSNE(tab, [tab_model_ tabAtIndex:1]); |
436 EXPECT_NSNE(tab, [tab_model_ tabAtIndex:2]); | 405 EXPECT_NSNE(tab, [tab_model_ tabAtIndex:2]); |
437 EXPECT_NSNE(tab, [tab_model_ tabAtIndex:3]); | 406 EXPECT_NSNE(tab, [tab_model_ tabAtIndex:3]); |
438 } | 407 } |
439 | 408 |
440 TEST_F(TabModelTest, CloseAllTabs) { | 409 TEST_F(TabModelTest, CloseAllTabs) { |
441 [tab_model_ insertTabWithURL:kURL | 410 [tab_model_ insertTabWithURL:GURL(kURL1) |
442 referrer:kReferrer | 411 referrer:web::Referrer() |
443 transition:ui::PAGE_TRANSITION_TYPED | 412 transition:ui::PAGE_TRANSITION_TYPED |
444 opener:nil | 413 opener:nil |
445 openedByDOM:NO | 414 openedByDOM:NO |
446 atIndex:[tab_model_ count] | 415 atIndex:[tab_model_ count] |
447 inBackground:YES]; | 416 inBackground:NO]; |
448 [tab_model_ insertTabWithURL:GURL("https://www.some.url2.com") | 417 [tab_model_ insertTabWithURL:GURL(kURL2) |
449 referrer:kReferrer2 | 418 referrer:web::Referrer() |
450 transition:ui::PAGE_TRANSITION_TYPED | 419 transition:ui::PAGE_TRANSITION_TYPED |
451 opener:nil | 420 opener:nil |
452 openedByDOM:NO | 421 openedByDOM:NO |
453 atIndex:[tab_model_ count] | 422 atIndex:[tab_model_ count] |
454 inBackground:YES]; | 423 inBackground:NO]; |
455 [tab_model_ insertTabWithURL:kURL | 424 [tab_model_ insertTabWithURL:GURL(kURL1) |
456 referrer:kReferrer | 425 referrer:web::Referrer() |
457 transition:ui::PAGE_TRANSITION_TYPED | 426 transition:ui::PAGE_TRANSITION_TYPED |
458 opener:nil | 427 opener:nil |
459 openedByDOM:NO | 428 openedByDOM:NO |
460 atIndex:[tab_model_ count] | 429 atIndex:[tab_model_ count] |
461 inBackground:YES]; | 430 inBackground:NO]; |
462 | 431 |
463 [tab_model_ closeAllTabs]; | 432 [tab_model_ closeAllTabs]; |
464 | 433 |
465 EXPECT_EQ(0U, [tab_model_ count]); | 434 EXPECT_EQ(0U, [tab_model_ count]); |
466 } | 435 } |
467 | 436 |
468 TEST_F(TabModelTest, CloseAllTabsWithNoTabs) { | 437 TEST_F(TabModelTest, CloseAllTabsWithNoTabs) { |
469 [tab_model_ closeAllTabs]; | 438 [tab_model_ closeAllTabs]; |
470 | 439 |
471 EXPECT_EQ(0U, [tab_model_ count]); | 440 EXPECT_EQ(0U, [tab_model_ count]); |
472 } | 441 } |
473 | 442 |
474 TEST_F(TabModelTest, InsertWithSessionController) { | 443 TEST_F(TabModelTest, InsertWithSessionController) { |
475 EXPECT_EQ([tab_model_ count], 0U); | 444 EXPECT_EQ([tab_model_ count], 0U); |
476 EXPECT_TRUE([tab_model_ isEmpty]); | 445 EXPECT_TRUE([tab_model_ isEmpty]); |
477 | 446 |
478 Tab* new_tab = [tab_model_ insertTabWithWebState:CreateWebState(@"opener", -1) | 447 Tab* new_tab = [tab_model_ insertTabWithURL:GURL(kURL1) |
479 atIndex:0]; | 448 referrer:web::Referrer() |
| 449 transition:ui::PAGE_TRANSITION_TYPED |
| 450 opener:nil |
| 451 openedByDOM:NO |
| 452 atIndex:[tab_model_ count] |
| 453 inBackground:NO]; |
| 454 |
480 EXPECT_EQ([tab_model_ count], 1U); | 455 EXPECT_EQ([tab_model_ count], 1U); |
481 [tab_model_ setCurrentTab:new_tab]; | 456 [tab_model_ setCurrentTab:new_tab]; |
482 Tab* current_tab = [tab_model_ currentTab]; | 457 Tab* current_tab = [tab_model_ currentTab]; |
483 EXPECT_TRUE(current_tab); | 458 EXPECT_TRUE(current_tab); |
484 } | 459 } |
485 | 460 |
486 TEST_F(TabModelTest, OpenerOfTab) { | 461 TEST_F(TabModelTest, OpenerOfTab) { |
487 // Start off with a couple tabs. | 462 // Start off with a couple tabs. |
488 [tab_model_ insertTabWithURL:kURL | 463 [tab_model_ insertTabWithURL:GURL(kURL1) |
489 referrer:kEmptyReferrer | 464 referrer:web::Referrer() |
490 transition:ui::PAGE_TRANSITION_TYPED | 465 transition:ui::PAGE_TRANSITION_TYPED |
491 opener:nil | 466 opener:nil |
492 openedByDOM:NO | 467 openedByDOM:NO |
493 atIndex:[tab_model_ count] | 468 atIndex:[tab_model_ count] |
494 inBackground:YES]; | 469 inBackground:NO]; |
495 [tab_model_ insertTabWithURL:kURL | 470 [tab_model_ insertTabWithURL:GURL(kURL1) |
496 referrer:kEmptyReferrer | 471 referrer:web::Referrer() |
497 transition:ui::PAGE_TRANSITION_TYPED | 472 transition:ui::PAGE_TRANSITION_TYPED |
498 opener:nil | 473 opener:nil |
499 openedByDOM:NO | 474 openedByDOM:NO |
500 atIndex:[tab_model_ count] | 475 atIndex:[tab_model_ count] |
501 inBackground:YES]; | 476 inBackground:NO]; |
502 [tab_model_ insertTabWithURL:kURL | 477 [tab_model_ insertTabWithURL:GURL(kURL1) |
503 referrer:kEmptyReferrer | 478 referrer:web::Referrer() |
504 transition:ui::PAGE_TRANSITION_TYPED | 479 transition:ui::PAGE_TRANSITION_TYPED |
505 opener:nil | 480 opener:nil |
506 openedByDOM:NO | 481 openedByDOM:NO |
507 atIndex:[tab_model_ count] | 482 atIndex:[tab_model_ count] |
508 inBackground:YES]; | 483 inBackground:NO]; |
509 | 484 |
510 // Create parent tab. | 485 // Create parent tab. |
511 Tab* parent_tab = [tab_model_ insertTabWithWebState:CreateWebState() | 486 Tab* parent_tab = [tab_model_ insertTabWithURL:GURL(kURL1) |
512 atIndex:[tab_model_ count]]; | 487 referrer:web::Referrer() |
| 488 transition:ui::PAGE_TRANSITION_TYPED |
| 489 opener:nil |
| 490 openedByDOM:NO |
| 491 atIndex:[tab_model_ count] |
| 492 inBackground:NO]; |
| 493 |
513 // Create child tab. | 494 // Create child tab. |
514 Tab* child_tab = | 495 Tab* child_tab = [tab_model_ insertTabWithURL:GURL(kURL1) |
515 [tab_model_ insertTabWithWebState:CreateChildWebState(parent_tab) | 496 referrer:web::Referrer() |
516 atIndex:[tab_model_ count]]; | 497 transition:ui::PAGE_TRANSITION_TYPED |
| 498 opener:parent_tab |
| 499 openedByDOM:NO |
| 500 atIndex:[tab_model_ count] |
| 501 inBackground:NO]; |
| 502 |
517 // Create another unrelated tab. | 503 // Create another unrelated tab. |
518 Tab* another_tab = [tab_model_ insertTabWithWebState:CreateWebState() | 504 Tab* another_tab = [tab_model_ insertTabWithURL:GURL(kURL1) |
519 atIndex:[tab_model_ count]]; | 505 referrer:web::Referrer() |
| 506 transition:ui::PAGE_TRANSITION_TYPED |
| 507 opener:nil |
| 508 openedByDOM:NO |
| 509 atIndex:[tab_model_ count] |
| 510 inBackground:NO]; |
520 | 511 |
521 // Create another child of the first tab. | 512 // Create another child of the first tab. |
522 Tab* child_tab2 = | 513 Tab* child_tab2 = [tab_model_ insertTabWithURL:GURL(kURL1) |
523 [tab_model_ insertTabWithWebState:CreateChildWebState(parent_tab) | 514 referrer:web::Referrer() |
524 atIndex:[tab_model_ count]]; | 515 transition:ui::PAGE_TRANSITION_TYPED |
| 516 opener:parent_tab |
| 517 openedByDOM:NO |
| 518 atIndex:[tab_model_ count] |
| 519 inBackground:NO]; |
525 | 520 |
526 EXPECT_FALSE([tab_model_ openerOfTab:parent_tab]); | 521 EXPECT_FALSE([tab_model_ openerOfTab:parent_tab]); |
527 EXPECT_FALSE([tab_model_ openerOfTab:another_tab]); | 522 EXPECT_FALSE([tab_model_ openerOfTab:another_tab]); |
528 EXPECT_EQ(parent_tab, [tab_model_ openerOfTab:child_tab]); | 523 EXPECT_EQ(parent_tab, [tab_model_ openerOfTab:child_tab]); |
529 EXPECT_EQ(parent_tab, [tab_model_ openerOfTab:child_tab2]); | 524 EXPECT_EQ(parent_tab, [tab_model_ openerOfTab:child_tab2]); |
530 } | 525 } |
531 | 526 |
532 TEST_F(TabModelTest, OpenerOfTabEmptyModel) { | 527 TEST_F(TabModelTest, OpenerOfTabEmptyModel) { |
533 EXPECT_FALSE([tab_model_ openerOfTab:nil]); | 528 EXPECT_FALSE([tab_model_ openerOfTab:nil]); |
534 } | 529 } |
535 | 530 |
536 TEST_F(TabModelTest, OpenersEmptyModel) { | 531 TEST_F(TabModelTest, OpenersEmptyModel) { |
537 // Empty model. | 532 // Empty model. |
538 EXPECT_TRUE([tab_model_ isEmpty]); | 533 EXPECT_TRUE([tab_model_ isEmpty]); |
539 EXPECT_FALSE([tab_model_ nextTabWithOpener:nil afterTab:nil]); | 534 EXPECT_FALSE([tab_model_ nextTabWithOpener:nil afterTab:nil]); |
540 EXPECT_FALSE([tab_model_ lastTabWithOpener:nil]); | 535 EXPECT_FALSE([tab_model_ lastTabWithOpener:nil]); |
541 } | 536 } |
542 | 537 |
543 TEST_F(TabModelTest, OpenersNothingOpenedGeneral) { | 538 TEST_F(TabModelTest, OpenersNothingOpenedGeneral) { |
544 // Start with a few tabs. | 539 // Start with a few tabs. |
545 [tab_model_ insertTabWithURL:kURL | 540 [tab_model_ insertTabWithURL:GURL(kURL1) |
546 referrer:kEmptyReferrer | 541 referrer:web::Referrer() |
547 transition:ui::PAGE_TRANSITION_TYPED | 542 transition:ui::PAGE_TRANSITION_TYPED |
548 opener:nil | 543 opener:nil |
549 openedByDOM:NO | 544 openedByDOM:NO |
550 atIndex:[tab_model_ count] | 545 atIndex:[tab_model_ count] |
551 inBackground:YES]; | 546 inBackground:NO]; |
552 [tab_model_ insertTabWithURL:kURL | 547 [tab_model_ insertTabWithURL:GURL(kURL1) |
553 referrer:kEmptyReferrer | 548 referrer:web::Referrer() |
554 transition:ui::PAGE_TRANSITION_TYPED | 549 transition:ui::PAGE_TRANSITION_TYPED |
555 opener:nil | 550 opener:nil |
556 openedByDOM:NO | 551 openedByDOM:NO |
557 atIndex:[tab_model_ count] | 552 atIndex:[tab_model_ count] |
558 inBackground:YES]; | 553 inBackground:NO]; |
559 | 554 |
560 Tab* tab = [tab_model_ insertTabWithWebState:CreateWebState() | 555 Tab* tab = [tab_model_ insertTabWithURL:GURL(kURL1) |
561 atIndex:[tab_model_ count]]; | 556 referrer:web::Referrer() |
| 557 transition:ui::PAGE_TRANSITION_TYPED |
| 558 opener:nil |
| 559 openedByDOM:NO |
| 560 atIndex:[tab_model_ count] |
| 561 inBackground:NO]; |
562 | 562 |
563 [tab_model_ insertTabWithURL:kURL | 563 [tab_model_ insertTabWithURL:GURL(kURL1) |
564 referrer:kEmptyReferrer | 564 referrer:web::Referrer() |
565 transition:ui::PAGE_TRANSITION_TYPED | 565 transition:ui::PAGE_TRANSITION_TYPED |
566 opener:nil | 566 opener:nil |
567 openedByDOM:NO | 567 openedByDOM:NO |
568 atIndex:[tab_model_ count] | 568 atIndex:[tab_model_ count] |
569 inBackground:YES]; | 569 inBackground:NO]; |
570 [tab_model_ insertTabWithURL:kURL | 570 [tab_model_ insertTabWithURL:GURL(kURL1) |
571 referrer:kEmptyReferrer | 571 referrer:web::Referrer() |
572 transition:ui::PAGE_TRANSITION_TYPED | 572 transition:ui::PAGE_TRANSITION_TYPED |
573 opener:nil | 573 opener:nil |
574 openedByDOM:NO | 574 openedByDOM:NO |
575 atIndex:[tab_model_ count] | 575 atIndex:[tab_model_ count] |
576 inBackground:YES]; | 576 inBackground:NO]; |
577 | 577 |
578 // All should fail since this hasn't opened anything else. | 578 // All should fail since this hasn't opened anything else. |
579 EXPECT_FALSE([tab_model_ nextTabWithOpener:tab afterTab:nil]); | 579 EXPECT_FALSE([tab_model_ nextTabWithOpener:tab afterTab:nil]); |
580 EXPECT_FALSE([tab_model_ lastTabWithOpener:tab]); | 580 EXPECT_FALSE([tab_model_ lastTabWithOpener:tab]); |
581 | 581 |
582 // Add more items to the tab, expect the same results. | 582 // Add more items to the tab, expect the same results. |
583 [tab_model_ insertTabWithURL:kURL | 583 [tab_model_ insertTabWithURL:GURL(kURL1) |
584 referrer:kEmptyReferrer | 584 referrer:web::Referrer() |
585 transition:ui::PAGE_TRANSITION_TYPED | 585 transition:ui::PAGE_TRANSITION_TYPED |
586 opener:nil | 586 opener:nil |
587 openedByDOM:NO | 587 openedByDOM:NO |
588 atIndex:[tab_model_ count] | 588 atIndex:[tab_model_ count] |
589 inBackground:YES]; | 589 inBackground:NO]; |
590 [tab_model_ insertTabWithURL:kURL | 590 [tab_model_ insertTabWithURL:GURL(kURL1) |
591 referrer:kEmptyReferrer | 591 referrer:web::Referrer() |
592 transition:ui::PAGE_TRANSITION_TYPED | 592 transition:ui::PAGE_TRANSITION_TYPED |
593 opener:nil | 593 opener:nil |
594 openedByDOM:NO | 594 openedByDOM:NO |
595 atIndex:[tab_model_ count] | 595 atIndex:[tab_model_ count] |
596 inBackground:YES]; | 596 inBackground:NO]; |
597 | |
598 EXPECT_FALSE([tab_model_ nextTabWithOpener:tab afterTab:nil]); | 597 EXPECT_FALSE([tab_model_ nextTabWithOpener:tab afterTab:nil]); |
599 EXPECT_FALSE([tab_model_ lastTabWithOpener:tab]); | 598 EXPECT_FALSE([tab_model_ lastTabWithOpener:tab]); |
600 } | 599 } |
601 | 600 |
602 TEST_F(TabModelTest, OpenersNothingOpenedFirst) { | 601 TEST_F(TabModelTest, OpenersNothingOpenedFirst) { |
603 // Our tab is first. | 602 // Our tab is first. |
604 Tab* tab = [tab_model_ insertTabWithWebState:CreateWebState() | 603 Tab* tab = [tab_model_ insertTabWithURL:GURL(kURL1) |
605 atIndex:[tab_model_ count]]; | 604 referrer:web::Referrer() |
| 605 transition:ui::PAGE_TRANSITION_TYPED |
| 606 opener:nil |
| 607 openedByDOM:NO |
| 608 atIndex:[tab_model_ count] |
| 609 inBackground:NO]; |
606 | 610 |
607 [tab_model_ insertTabWithURL:kURL | 611 [tab_model_ insertTabWithURL:GURL(kURL1) |
608 referrer:kEmptyReferrer | 612 referrer:web::Referrer() |
609 transition:ui::PAGE_TRANSITION_TYPED | 613 transition:ui::PAGE_TRANSITION_TYPED |
610 opener:nil | 614 opener:nil |
611 openedByDOM:NO | 615 openedByDOM:NO |
612 atIndex:[tab_model_ count] | 616 atIndex:[tab_model_ count] |
613 inBackground:YES]; | 617 inBackground:NO]; |
614 [tab_model_ insertTabWithURL:kURL | 618 [tab_model_ insertTabWithURL:GURL(kURL1) |
615 referrer:kEmptyReferrer | 619 referrer:web::Referrer() |
616 transition:ui::PAGE_TRANSITION_TYPED | 620 transition:ui::PAGE_TRANSITION_TYPED |
617 opener:nil | 621 opener:nil |
618 openedByDOM:NO | 622 openedByDOM:NO |
619 atIndex:[tab_model_ count] | 623 atIndex:[tab_model_ count] |
620 inBackground:YES]; | 624 inBackground:NO]; |
621 | 625 |
622 // All should fail since this hasn't opened anything else. | 626 // All should fail since this hasn't opened anything else. |
623 EXPECT_FALSE([tab_model_ nextTabWithOpener:tab afterTab:nil]); | 627 EXPECT_FALSE([tab_model_ nextTabWithOpener:tab afterTab:nil]); |
624 EXPECT_FALSE([tab_model_ lastTabWithOpener:tab]); | 628 EXPECT_FALSE([tab_model_ lastTabWithOpener:tab]); |
625 } | 629 } |
626 | 630 |
627 TEST_F(TabModelTest, OpenersNothingOpenedLast) { | 631 TEST_F(TabModelTest, OpenersNothingOpenedLast) { |
628 // Our tab is last. | 632 // Our tab is last. |
629 [tab_model_ insertTabWithURL:kURL | 633 [tab_model_ insertTabWithURL:GURL(kURL1) |
630 referrer:kEmptyReferrer | 634 referrer:web::Referrer() |
631 transition:ui::PAGE_TRANSITION_TYPED | 635 transition:ui::PAGE_TRANSITION_TYPED |
632 opener:nil | 636 opener:nil |
633 openedByDOM:NO | 637 openedByDOM:NO |
634 atIndex:[tab_model_ count] | 638 atIndex:[tab_model_ count] |
635 inBackground:YES]; | 639 inBackground:NO]; |
636 [tab_model_ insertTabWithURL:kURL | 640 [tab_model_ insertTabWithURL:GURL(kURL1) |
637 referrer:kEmptyReferrer | 641 referrer:web::Referrer() |
638 transition:ui::PAGE_TRANSITION_TYPED | 642 transition:ui::PAGE_TRANSITION_TYPED |
639 opener:nil | 643 opener:nil |
640 openedByDOM:NO | 644 openedByDOM:NO |
641 atIndex:[tab_model_ count] | 645 atIndex:[tab_model_ count] |
642 inBackground:YES]; | 646 inBackground:NO]; |
643 Tab* tab = [tab_model_ insertTabWithWebState:CreateWebState() | 647 |
644 atIndex:[tab_model_ count]]; | 648 Tab* tab = [tab_model_ insertTabWithURL:GURL(kURL1) |
| 649 referrer:web::Referrer() |
| 650 transition:ui::PAGE_TRANSITION_TYPED |
| 651 opener:nil |
| 652 openedByDOM:NO |
| 653 atIndex:[tab_model_ count] |
| 654 inBackground:NO]; |
645 | 655 |
646 // All should fail since this hasn't opened anything else. | 656 // All should fail since this hasn't opened anything else. |
647 EXPECT_FALSE([tab_model_ nextTabWithOpener:tab afterTab:nil]); | 657 EXPECT_FALSE([tab_model_ nextTabWithOpener:tab afterTab:nil]); |
648 EXPECT_FALSE([tab_model_ lastTabWithOpener:tab]); | 658 EXPECT_FALSE([tab_model_ lastTabWithOpener:tab]); |
649 } | 659 } |
650 | 660 |
651 TEST_F(TabModelTest, OpenersChildTabBeforeOpener) { | 661 TEST_F(TabModelTest, OpenersChildTabBeforeOpener) { |
652 Tab* parent_tab = [tab_model_ insertTabWithWebState:CreateWebState() | 662 Tab* parent_tab = [tab_model_ insertTabWithURL:GURL(kURL1) |
653 atIndex:[tab_model_ count]]; | 663 referrer:web::Referrer() |
| 664 transition:ui::PAGE_TRANSITION_TYPED |
| 665 opener:nil |
| 666 openedByDOM:NO |
| 667 atIndex:[tab_model_ count] |
| 668 inBackground:NO]; |
| 669 |
654 // Insert child at start | 670 // Insert child at start |
655 [tab_model_ insertTabWithWebState:CreateChildWebState(parent_tab) atIndex:0]; | 671 [tab_model_ insertTabWithURL:GURL(kURL1) |
| 672 referrer:web::Referrer() |
| 673 transition:ui::PAGE_TRANSITION_TYPED |
| 674 opener:parent_tab |
| 675 openedByDOM:NO |
| 676 atIndex:0 |
| 677 inBackground:NO]; |
656 | 678 |
657 // Insert a few more between them. | 679 // Insert a few more between them. |
658 [tab_model_ insertTabWithWebState:CreateWebState() atIndex:1]; | 680 [tab_model_ insertTabWithURL:GURL(kURL1) |
659 [tab_model_ insertTabWithWebState:CreateWebState() atIndex:1]; | 681 referrer:web::Referrer() |
| 682 transition:ui::PAGE_TRANSITION_TYPED |
| 683 opener:nil |
| 684 openedByDOM:NO |
| 685 atIndex:1 |
| 686 inBackground:NO]; |
| 687 [tab_model_ insertTabWithURL:GURL(kURL1) |
| 688 referrer:web::Referrer() |
| 689 transition:ui::PAGE_TRANSITION_TYPED |
| 690 opener:nil |
| 691 openedByDOM:NO |
| 692 atIndex:1 |
| 693 inBackground:NO]; |
660 | 694 |
661 EXPECT_FALSE([tab_model_ nextTabWithOpener:parent_tab afterTab:nil]); | 695 EXPECT_FALSE([tab_model_ nextTabWithOpener:parent_tab afterTab:nil]); |
662 EXPECT_FALSE([tab_model_ lastTabWithOpener:parent_tab]); | 696 EXPECT_FALSE([tab_model_ lastTabWithOpener:parent_tab]); |
663 } | 697 } |
664 | 698 |
665 TEST_F(TabModelTest, OpenersChildTabAfterOpener) { | 699 TEST_F(TabModelTest, OpenersChildTabAfterOpener) { |
666 Tab* parent_tab = [tab_model_ insertTabWithWebState:CreateWebState() | 700 Tab* parent_tab = [tab_model_ insertTabWithURL:GURL(kURL1) |
667 atIndex:[tab_model_ count]]; | 701 referrer:web::Referrer() |
| 702 transition:ui::PAGE_TRANSITION_TYPED |
| 703 opener:nil |
| 704 openedByDOM:NO |
| 705 atIndex:[tab_model_ count] |
| 706 inBackground:NO]; |
668 | 707 |
669 [tab_model_ insertTabWithURL:kURL | 708 [tab_model_ insertTabWithURL:GURL(kURL1) |
670 referrer:kEmptyReferrer | 709 referrer:web::Referrer() |
671 transition:ui::PAGE_TRANSITION_TYPED | 710 transition:ui::PAGE_TRANSITION_TYPED |
672 opener:nil | 711 opener:nil |
673 openedByDOM:NO | 712 openedByDOM:NO |
674 atIndex:[tab_model_ count] | 713 atIndex:[tab_model_ count] |
675 inBackground:YES]; | 714 inBackground:NO]; |
676 [tab_model_ insertTabWithURL:kURL | 715 [tab_model_ insertTabWithURL:GURL(kURL1) |
677 referrer:kEmptyReferrer | 716 referrer:web::Referrer() |
678 transition:ui::PAGE_TRANSITION_TYPED | 717 transition:ui::PAGE_TRANSITION_TYPED |
679 opener:nil | 718 opener:nil |
680 openedByDOM:NO | 719 openedByDOM:NO |
681 atIndex:[tab_model_ count] | 720 atIndex:[tab_model_ count] |
682 inBackground:YES]; | 721 inBackground:NO]; |
| 722 |
683 // Insert two children at end. | 723 // Insert two children at end. |
684 Tab* child_tab1 = | 724 Tab* child_tab1 = [tab_model_ insertTabWithURL:GURL(kURL1) |
685 [tab_model_ insertTabWithWebState:CreateChildWebState(parent_tab) | 725 referrer:web::Referrer() |
686 atIndex:[tab_model_ count]]; | 726 transition:ui::PAGE_TRANSITION_TYPED |
687 Tab* child_tab2 = | 727 opener:parent_tab |
688 [tab_model_ insertTabWithWebState:CreateChildWebState(parent_tab) | 728 openedByDOM:NO |
689 atIndex:[tab_model_ count]]; | 729 atIndex:[tab_model_ count] |
| 730 inBackground:NO]; |
| 731 Tab* child_tab2 = [tab_model_ insertTabWithURL:GURL(kURL1) |
| 732 referrer:web::Referrer() |
| 733 transition:ui::PAGE_TRANSITION_TYPED |
| 734 opener:parent_tab |
| 735 openedByDOM:NO |
| 736 atIndex:[tab_model_ count] |
| 737 inBackground:NO]; |
690 | 738 |
691 EXPECT_EQ([tab_model_ nextTabWithOpener:parent_tab afterTab:nil], child_tab1); | 739 EXPECT_EQ([tab_model_ nextTabWithOpener:parent_tab afterTab:nil], child_tab1); |
692 EXPECT_EQ([tab_model_ nextTabWithOpener:parent_tab afterTab:child_tab1], | 740 EXPECT_EQ([tab_model_ nextTabWithOpener:parent_tab afterTab:child_tab1], |
693 child_tab2); | 741 child_tab2); |
694 EXPECT_EQ([tab_model_ lastTabWithOpener:parent_tab], child_tab2); | 742 EXPECT_EQ([tab_model_ lastTabWithOpener:parent_tab], child_tab2); |
695 } | 743 } |
696 | 744 |
697 TEST_F(TabModelTest, AddWithOrderController) { | 745 TEST_F(TabModelTest, AddWithOrderController) { |
698 // Create a few tabs with the controller at the front. | 746 // Create a few tabs with the controller at the front. |
699 Tab* parent = [tab_model_ insertTabWithURL:kURL | 747 Tab* parent = [tab_model_ insertTabWithURL:GURL(kURL1) |
700 referrer:kEmptyReferrer | 748 referrer:web::Referrer() |
701 transition:ui::PAGE_TRANSITION_TYPED | 749 transition:ui::PAGE_TRANSITION_TYPED |
702 opener:nil | 750 opener:nil |
703 openedByDOM:NO | 751 openedByDOM:NO |
704 atIndex:[tab_model_ count] | 752 atIndex:[tab_model_ count] |
705 inBackground:YES]; | 753 inBackground:NO]; |
706 [tab_model_ insertTabWithURL:kURL | 754 [tab_model_ insertTabWithURL:GURL(kURL1) |
707 referrer:kEmptyReferrer | 755 referrer:web::Referrer() |
708 transition:ui::PAGE_TRANSITION_TYPED | 756 transition:ui::PAGE_TRANSITION_TYPED |
709 opener:nil | 757 opener:nil |
710 openedByDOM:NO | 758 openedByDOM:NO |
711 atIndex:[tab_model_ count] | 759 atIndex:[tab_model_ count] |
712 inBackground:YES]; | 760 inBackground:NO]; |
713 [tab_model_ insertTabWithURL:kURL | 761 [tab_model_ insertTabWithURL:GURL(kURL1) |
714 referrer:kEmptyReferrer | 762 referrer:web::Referrer() |
715 transition:ui::PAGE_TRANSITION_TYPED | 763 transition:ui::PAGE_TRANSITION_TYPED |
716 opener:nil | 764 opener:nil |
717 openedByDOM:NO | 765 openedByDOM:NO |
718 atIndex:[tab_model_ count] | 766 atIndex:[tab_model_ count] |
719 inBackground:YES]; | 767 inBackground:NO]; |
720 | 768 |
721 // Add a new tab, it should be added behind the parent. | 769 // Add a new tab, it should be added behind the parent. |
722 Tab* child = | 770 Tab* child = |
723 [tab_model_ insertTabWithURL:kURL | 771 [tab_model_ insertTabWithURL:GURL(kURL1) |
724 referrer:kEmptyReferrer | 772 referrer:web::Referrer() |
725 transition:ui::PAGE_TRANSITION_LINK | 773 transition:ui::PAGE_TRANSITION_LINK |
726 opener:parent | 774 opener:parent |
727 openedByDOM:NO | 775 openedByDOM:NO |
728 atIndex:TabModelConstants::kTabPositionAutomatically | 776 atIndex:TabModelConstants::kTabPositionAutomatically |
729 inBackground:NO]; | 777 inBackground:NO]; |
730 EXPECT_EQ([tab_model_ indexOfTab:parent], 0U); | 778 EXPECT_EQ([tab_model_ indexOfTab:parent], 0U); |
731 EXPECT_EQ([tab_model_ indexOfTab:child], 1U); | 779 EXPECT_EQ([tab_model_ indexOfTab:child], 1U); |
732 | 780 |
733 // Add another new tab without a parent, should go at the end. | 781 // Add another new tab without a parent, should go at the end. |
734 Tab* tab = | 782 Tab* tab = |
735 [tab_model_ insertTabWithURL:kURL | 783 [tab_model_ insertTabWithURL:GURL(kURL1) |
736 referrer:kEmptyReferrer | 784 referrer:web::Referrer() |
737 transition:ui::PAGE_TRANSITION_LINK | 785 transition:ui::PAGE_TRANSITION_LINK |
738 opener:nil | 786 opener:nil |
739 openedByDOM:NO | 787 openedByDOM:NO |
740 atIndex:TabModelConstants::kTabPositionAutomatically | 788 atIndex:TabModelConstants::kTabPositionAutomatically |
741 inBackground:NO]; | 789 inBackground:NO]; |
742 EXPECT_EQ([tab_model_ indexOfTab:tab], [tab_model_ count] - 1); | 790 EXPECT_EQ([tab_model_ indexOfTab:tab], [tab_model_ count] - 1); |
743 | 791 |
744 // Same for a tab that's not opened via a LINK transition. | 792 // Same for a tab that's not opened via a LINK transition. |
745 Tab* tab2 = [tab_model_ insertTabWithURL:kURL | 793 Tab* tab2 = [tab_model_ insertTabWithURL:GURL(kURL1) |
746 referrer:kEmptyReferrer | 794 referrer:web::Referrer() |
747 transition:ui::PAGE_TRANSITION_TYPED | 795 transition:ui::PAGE_TRANSITION_TYPED |
748 opener:nil | 796 opener:nil |
749 openedByDOM:NO | 797 openedByDOM:NO |
750 atIndex:[tab_model_ count] | 798 atIndex:[tab_model_ count] |
751 inBackground:NO]; | 799 inBackground:NO]; |
752 EXPECT_EQ([tab_model_ indexOfTab:tab2], [tab_model_ count] - 1); | 800 EXPECT_EQ([tab_model_ indexOfTab:tab2], [tab_model_ count] - 1); |
753 | 801 |
754 // Add a tab in the background. It should appear behind the opening tab. | 802 // Add a tab in the background. It should appear behind the opening tab. |
755 Tab* tab3 = | 803 Tab* tab3 = |
756 [tab_model_ insertTabWithURL:kURL | 804 [tab_model_ insertTabWithURL:GURL(kURL1) |
757 referrer:kEmptyReferrer | 805 referrer:web::Referrer() |
758 transition:ui::PAGE_TRANSITION_LINK | 806 transition:ui::PAGE_TRANSITION_LINK |
759 opener:tab | 807 opener:tab |
760 openedByDOM:NO | 808 openedByDOM:NO |
761 atIndex:TabModelConstants::kTabPositionAutomatically | 809 atIndex:TabModelConstants::kTabPositionAutomatically |
762 inBackground:YES]; | 810 inBackground:NO]; |
763 EXPECT_EQ([tab_model_ indexOfTab:tab3], [tab_model_ indexOfTab:tab] + 1); | 811 EXPECT_EQ([tab_model_ indexOfTab:tab3], [tab_model_ indexOfTab:tab] + 1); |
764 | 812 |
765 // Add another background tab behind the one we just opened. | 813 // Add another background tab behind the one we just opened. |
766 Tab* tab4 = | 814 Tab* tab4 = |
767 [tab_model_ insertTabWithURL:kURL | 815 [tab_model_ insertTabWithURL:GURL(kURL1) |
768 referrer:kEmptyReferrer | 816 referrer:web::Referrer() |
769 transition:ui::PAGE_TRANSITION_LINK | 817 transition:ui::PAGE_TRANSITION_LINK |
770 opener:tab3 | 818 opener:tab3 |
771 openedByDOM:NO | 819 openedByDOM:NO |
772 atIndex:TabModelConstants::kTabPositionAutomatically | 820 atIndex:TabModelConstants::kTabPositionAutomatically |
773 inBackground:YES]; | 821 inBackground:NO]; |
774 EXPECT_EQ([tab_model_ indexOfTab:tab4], [tab_model_ indexOfTab:tab3] + 1); | 822 EXPECT_EQ([tab_model_ indexOfTab:tab4], [tab_model_ indexOfTab:tab3] + 1); |
775 } | 823 } |
776 | 824 |
777 TEST_F(TabModelTest, AddWithOrderControllerAndGrouping) { | 825 TEST_F(TabModelTest, AddWithOrderControllerAndGrouping) { |
778 // Create a few tabs with the controller at the front. | 826 // Create a few tabs with the controller at the front. |
779 Tab* parent = [tab_model_ insertTabWithURL:kURL | 827 Tab* parent = [tab_model_ insertTabWithURL:GURL(kURL1) |
780 referrer:kEmptyReferrer | 828 referrer:web::Referrer() |
781 transition:ui::PAGE_TRANSITION_TYPED | 829 transition:ui::PAGE_TRANSITION_TYPED |
782 opener:nil | 830 opener:nil |
783 openedByDOM:NO | 831 openedByDOM:NO |
784 atIndex:[tab_model_ count] | 832 atIndex:[tab_model_ count] |
785 inBackground:YES]; | 833 inBackground:NO]; |
786 // Force the history to update, as it is used to determine grouping. | 834 // Force the history to update, as it is used to determine grouping. |
787 ASSERT_TRUE([parent navigationManagerImpl]); | 835 ASSERT_TRUE([parent navigationManagerImpl]); |
788 [[parent navigationManagerImpl]->GetSessionController() commitPendingItem]; | 836 [[parent navigationManagerImpl]->GetSessionController() commitPendingItem]; |
789 [tab_model_ insertTabWithURL:kURL | 837 [tab_model_ insertTabWithURL:GURL(kURL1) |
790 referrer:kEmptyReferrer | 838 referrer:web::Referrer() |
791 transition:ui::PAGE_TRANSITION_TYPED | 839 transition:ui::PAGE_TRANSITION_TYPED |
792 opener:nil | 840 opener:nil |
793 openedByDOM:NO | 841 openedByDOM:NO |
794 atIndex:[tab_model_ count] | 842 atIndex:[tab_model_ count] |
795 inBackground:YES]; | 843 inBackground:NO]; |
796 [tab_model_ insertTabWithURL:kURL | 844 [tab_model_ insertTabWithURL:GURL(kURL1) |
797 referrer:kEmptyReferrer | 845 referrer:web::Referrer() |
798 transition:ui::PAGE_TRANSITION_TYPED | 846 transition:ui::PAGE_TRANSITION_TYPED |
799 opener:nil | 847 opener:nil |
800 openedByDOM:NO | 848 openedByDOM:NO |
801 atIndex:[tab_model_ count] | 849 atIndex:[tab_model_ count] |
802 inBackground:YES]; | 850 inBackground:NO]; |
803 | 851 |
804 ASSERT_TRUE(chrome_browser_state_->CreateHistoryService(true)); | 852 ASSERT_TRUE(chrome_browser_state_->CreateHistoryService(true)); |
805 | 853 |
806 // Add a new tab, it should be added behind the parent. | 854 // Add a new tab, it should be added behind the parent. |
807 Tab* child1 = | 855 Tab* child1 = |
808 [tab_model_ insertTabWithURL:kURL | 856 [tab_model_ insertTabWithURL:GURL(kURL1) |
809 referrer:kEmptyReferrer | 857 referrer:web::Referrer() |
810 transition:ui::PAGE_TRANSITION_LINK | 858 transition:ui::PAGE_TRANSITION_LINK |
811 opener:parent | 859 opener:parent |
812 openedByDOM:NO | 860 openedByDOM:NO |
813 atIndex:TabModelConstants::kTabPositionAutomatically | 861 atIndex:TabModelConstants::kTabPositionAutomatically |
814 inBackground:NO]; | 862 inBackground:NO]; |
815 EXPECT_EQ([tab_model_ indexOfTab:parent], 0U); | 863 EXPECT_EQ([tab_model_ indexOfTab:parent], 0U); |
816 EXPECT_EQ([tab_model_ indexOfTab:child1], 1U); | 864 EXPECT_EQ([tab_model_ indexOfTab:child1], 1U); |
817 | 865 |
818 // Add a second child tab in the background. It should be added behind the | 866 // Add a second child tab in the background. It should be added behind the |
819 // first child. | 867 // first child. |
820 Tab* child2 = | 868 Tab* child2 = |
821 [tab_model_ insertTabWithURL:kURL | 869 [tab_model_ insertTabWithURL:GURL(kURL1) |
822 referrer:kEmptyReferrer | 870 referrer:web::Referrer() |
823 transition:ui::PAGE_TRANSITION_LINK | 871 transition:ui::PAGE_TRANSITION_LINK |
824 opener:parent | 872 opener:parent |
825 openedByDOM:NO | 873 openedByDOM:NO |
826 atIndex:TabModelConstants::kTabPositionAutomatically | 874 atIndex:TabModelConstants::kTabPositionAutomatically |
827 inBackground:YES]; | 875 inBackground:NO]; |
828 EXPECT_EQ([tab_model_ indexOfTab:child2], 2U); | 876 EXPECT_EQ([tab_model_ indexOfTab:child2], 2U); |
829 | 877 |
830 // Navigate the parent tab to a new URL. It should not change any ordering. | 878 // Navigate the parent tab to a new URL. It should not change any ordering. |
831 web::NavigationManager::WebLoadParams parent_params( | 879 web::NavigationManager::WebLoadParams parent_params( |
832 GURL("http://www.espn.com")); | 880 GURL("http://www.espn.com")); |
833 parent_params.transition_type = ui::PAGE_TRANSITION_TYPED; | 881 parent_params.transition_type = ui::PAGE_TRANSITION_TYPED; |
834 [[parent webController] loadWithParams:parent_params]; | 882 [[parent webController] loadWithParams:parent_params]; |
835 ASSERT_TRUE([parent navigationManagerImpl]); | 883 ASSERT_TRUE([parent navigationManagerImpl]); |
836 [[parent navigationManagerImpl]->GetSessionController() commitPendingItem]; | 884 [[parent navigationManagerImpl]->GetSessionController() commitPendingItem]; |
837 EXPECT_EQ([tab_model_ indexOfTab:parent], 0U); | 885 EXPECT_EQ([tab_model_ indexOfTab:parent], 0U); |
838 | 886 |
839 // Add a new tab. It should be added behind the parent. It should not be added | 887 // Add a new tab. It should be added behind the parent. It should not be added |
840 // after the previous two children. | 888 // after the previous two children. |
841 Tab* child3 = | 889 Tab* child3 = |
842 [tab_model_ insertTabWithURL:kURL | 890 [tab_model_ insertTabWithURL:GURL(kURL1) |
843 referrer:kEmptyReferrer | 891 referrer:web::Referrer() |
844 transition:ui::PAGE_TRANSITION_LINK | 892 transition:ui::PAGE_TRANSITION_LINK |
845 opener:parent | 893 opener:parent |
846 openedByDOM:NO | 894 openedByDOM:NO |
847 atIndex:TabModelConstants::kTabPositionAutomatically | 895 atIndex:TabModelConstants::kTabPositionAutomatically |
848 inBackground:NO]; | 896 inBackground:NO]; |
849 EXPECT_EQ([tab_model_ indexOfTab:child3], 1U); | 897 EXPECT_EQ([tab_model_ indexOfTab:child3], 1U); |
850 | 898 |
851 // Add a fourt child tab in the background. It should be added behind the | 899 // Add a fourt child tab in the background. It should be added behind the |
852 // third child. | 900 // third child. |
853 Tab* child4 = | 901 Tab* child4 = |
854 [tab_model_ insertTabWithURL:kURL | 902 [tab_model_ insertTabWithURL:GURL(kURL1) |
855 referrer:kEmptyReferrer | 903 referrer:web::Referrer() |
856 transition:ui::PAGE_TRANSITION_LINK | 904 transition:ui::PAGE_TRANSITION_LINK |
857 opener:parent | 905 opener:parent |
858 openedByDOM:NO | 906 openedByDOM:NO |
859 atIndex:TabModelConstants::kTabPositionAutomatically | 907 atIndex:TabModelConstants::kTabPositionAutomatically |
860 inBackground:YES]; | 908 inBackground:NO]; |
861 EXPECT_EQ([tab_model_ indexOfTab:child4], 2U); | 909 EXPECT_EQ([tab_model_ indexOfTab:child4], 2U); |
862 | 910 |
863 // The first two children should have been moved to the right. | 911 // The first two children should have been moved to the right. |
864 EXPECT_EQ([tab_model_ indexOfTab:child1], 3U); | 912 EXPECT_EQ([tab_model_ indexOfTab:child1], 3U); |
865 EXPECT_EQ([tab_model_ indexOfTab:child2], 4U); | 913 EXPECT_EQ([tab_model_ indexOfTab:child2], 4U); |
866 | 914 |
867 // Now add a non-owned tab and make sure it is added at the end. | 915 // Now add a non-owned tab and make sure it is added at the end. |
868 Tab* nonChild = [tab_model_ insertTabWithURL:kURL | 916 Tab* nonChild = [tab_model_ insertTabWithURL:GURL(kURL1) |
869 referrer:kEmptyReferrer | 917 referrer:web::Referrer() |
870 transition:ui::PAGE_TRANSITION_TYPED | 918 transition:ui::PAGE_TRANSITION_TYPED |
871 opener:nil | 919 opener:nil |
872 openedByDOM:NO | 920 openedByDOM:NO |
873 atIndex:[tab_model_ count] | 921 atIndex:[tab_model_ count] |
874 inBackground:YES]; | 922 inBackground:NO]; |
875 EXPECT_EQ([tab_model_ indexOfTab:nonChild], [tab_model_ count] - 1); | 923 EXPECT_EQ([tab_model_ indexOfTab:nonChild], [tab_model_ count] - 1); |
876 } | 924 } |
877 | 925 |
878 TEST_F(TabModelTest, AddWithLinkTransitionAndIndex) { | 926 TEST_F(TabModelTest, AddWithLinkTransitionAndIndex) { |
879 // Create a few tabs with the controller at the front. | 927 // Create a few tabs with the controller at the front. |
880 Tab* parent = [tab_model_ insertTabWithURL:kURL | 928 Tab* parent = [tab_model_ insertTabWithURL:GURL(kURL1) |
881 referrer:kEmptyReferrer | 929 referrer:web::Referrer() |
882 transition:ui::PAGE_TRANSITION_TYPED | 930 transition:ui::PAGE_TRANSITION_TYPED |
883 opener:nil | 931 opener:nil |
884 openedByDOM:NO | 932 openedByDOM:NO |
885 atIndex:[tab_model_ count] | 933 atIndex:[tab_model_ count] |
886 inBackground:YES]; | 934 inBackground:NO]; |
887 // Force the history to update, as it is used to determine grouping. | 935 // Force the history to update, as it is used to determine grouping. |
888 ASSERT_TRUE([parent navigationManagerImpl]); | 936 ASSERT_TRUE([parent navigationManagerImpl]); |
889 [[parent navigationManagerImpl]->GetSessionController() commitPendingItem]; | 937 [[parent navigationManagerImpl]->GetSessionController() commitPendingItem]; |
890 [tab_model_ insertTabWithURL:kURL | 938 [tab_model_ insertTabWithURL:GURL(kURL1) |
891 referrer:kEmptyReferrer | 939 referrer:web::Referrer() |
892 transition:ui::PAGE_TRANSITION_TYPED | 940 transition:ui::PAGE_TRANSITION_TYPED |
893 opener:nil | 941 opener:nil |
894 openedByDOM:NO | 942 openedByDOM:NO |
895 atIndex:[tab_model_ count] | 943 atIndex:[tab_model_ count] |
896 inBackground:YES]; | 944 inBackground:NO]; |
897 [tab_model_ insertTabWithURL:kURL | 945 [tab_model_ insertTabWithURL:GURL(kURL1) |
898 referrer:kEmptyReferrer | 946 referrer:web::Referrer() |
899 transition:ui::PAGE_TRANSITION_TYPED | 947 transition:ui::PAGE_TRANSITION_TYPED |
900 opener:nil | 948 opener:nil |
901 openedByDOM:NO | 949 openedByDOM:NO |
902 atIndex:[tab_model_ count] | 950 atIndex:[tab_model_ count] |
903 inBackground:YES]; | 951 inBackground:NO]; |
904 | 952 |
905 ASSERT_TRUE(chrome_browser_state_->CreateHistoryService(true)); | 953 ASSERT_TRUE(chrome_browser_state_->CreateHistoryService(true)); |
906 | 954 |
907 // Add a new tab, it should be added before the parent since the index | 955 // Add a new tab, it should be added before the parent since the index |
908 // parameter has been specified with a valid value. | 956 // parameter has been specified with a valid value. |
909 Tab* child1 = [tab_model_ insertTabWithURL:kURL | 957 Tab* child1 = [tab_model_ insertTabWithURL:GURL(kURL1) |
910 referrer:kEmptyReferrer | 958 referrer:web::Referrer() |
911 transition:ui::PAGE_TRANSITION_LINK | 959 transition:ui::PAGE_TRANSITION_LINK |
912 opener:parent | 960 opener:parent |
913 openedByDOM:NO | 961 openedByDOM:NO |
914 atIndex:0 | 962 atIndex:0 |
915 inBackground:NO]; | 963 inBackground:NO]; |
916 EXPECT_EQ([tab_model_ indexOfTab:parent], 1U); | 964 EXPECT_EQ([tab_model_ indexOfTab:parent], 1U); |
917 EXPECT_EQ([tab_model_ indexOfTab:child1], 0U); | 965 EXPECT_EQ([tab_model_ indexOfTab:child1], 0U); |
918 | 966 |
919 // Add a new tab, it should be added at the beginning of the stack because | 967 // Add a new tab, it should be added at the beginning of the stack because |
920 // the index parameter has been specified with a valid value. | 968 // the index parameter has been specified with a valid value. |
921 Tab* child2 = [tab_model_ insertTabWithURL:kURL | 969 Tab* child2 = [tab_model_ insertTabWithURL:GURL(kURL1) |
922 referrer:kEmptyReferrer | 970 referrer:web::Referrer() |
923 transition:ui::PAGE_TRANSITION_LINK | 971 transition:ui::PAGE_TRANSITION_LINK |
924 opener:parent | 972 opener:parent |
925 openedByDOM:NO | 973 openedByDOM:NO |
926 atIndex:0 | 974 atIndex:0 |
927 inBackground:NO]; | 975 inBackground:NO]; |
928 EXPECT_EQ([tab_model_ indexOfTab:parent], 2U); | 976 EXPECT_EQ([tab_model_ indexOfTab:parent], 2U); |
929 EXPECT_EQ([tab_model_ indexOfTab:child1], 1U); | 977 EXPECT_EQ([tab_model_ indexOfTab:child1], 1U); |
930 EXPECT_EQ([tab_model_ indexOfTab:child2], 0U); | 978 EXPECT_EQ([tab_model_ indexOfTab:child2], 0U); |
931 | 979 |
932 // Add a new tab, it should be added at position 1 because the index parameter | 980 // Add a new tab, it should be added at position 1 because the index parameter |
933 // has been specified with a valid value. | 981 // has been specified with a valid value. |
934 Tab* child3 = [tab_model_ insertTabWithURL:kURL | 982 Tab* child3 = [tab_model_ insertTabWithURL:GURL(kURL1) |
935 referrer:kEmptyReferrer | 983 referrer:web::Referrer() |
936 transition:ui::PAGE_TRANSITION_LINK | 984 transition:ui::PAGE_TRANSITION_LINK |
937 opener:parent | 985 opener:parent |
938 openedByDOM:NO | 986 openedByDOM:NO |
939 atIndex:1 | 987 atIndex:1 |
940 inBackground:NO]; | 988 inBackground:NO]; |
941 EXPECT_EQ([tab_model_ indexOfTab:parent], 3U); | 989 EXPECT_EQ([tab_model_ indexOfTab:parent], 3U); |
942 EXPECT_EQ([tab_model_ indexOfTab:child1], 2U); | 990 EXPECT_EQ([tab_model_ indexOfTab:child1], 2U); |
943 EXPECT_EQ([tab_model_ indexOfTab:child3], 1U); | 991 EXPECT_EQ([tab_model_ indexOfTab:child3], 1U); |
944 EXPECT_EQ([tab_model_ indexOfTab:child2], 0U); | 992 EXPECT_EQ([tab_model_ indexOfTab:child2], 0U); |
945 } | 993 } |
946 | 994 |
947 TEST_F(TabModelTest, MoveTabs) { | 995 TEST_F(TabModelTest, MoveTabs) { |
948 Tab* tab0 = [tab_model_ insertTabWithURL:kURL | 996 Tab* tab0 = [tab_model_ insertTabWithURL:GURL(kURL1) |
949 referrer:kReferrer | 997 referrer:web::Referrer() |
950 transition:ui::PAGE_TRANSITION_TYPED | 998 transition:ui::PAGE_TRANSITION_TYPED |
951 opener:nil | 999 opener:nil |
952 openedByDOM:NO | 1000 openedByDOM:NO |
953 atIndex:[tab_model_ count] | 1001 atIndex:[tab_model_ count] |
954 inBackground:YES]; | 1002 inBackground:NO]; |
955 Tab* tab1 = [tab_model_ insertTabWithURL:kURL | 1003 Tab* tab1 = [tab_model_ insertTabWithURL:GURL(kURL1) |
956 referrer:kReferrer | 1004 referrer:web::Referrer() |
957 transition:ui::PAGE_TRANSITION_TYPED | 1005 transition:ui::PAGE_TRANSITION_TYPED |
958 opener:nil | 1006 opener:nil |
959 openedByDOM:NO | 1007 openedByDOM:NO |
960 atIndex:[tab_model_ count] | 1008 atIndex:[tab_model_ count] |
961 inBackground:YES]; | 1009 inBackground:NO]; |
962 Tab* tab2 = [tab_model_ insertTabWithURL:kURL | 1010 Tab* tab2 = [tab_model_ insertTabWithURL:GURL(kURL1) |
963 referrer:kReferrer | 1011 referrer:web::Referrer() |
964 transition:ui::PAGE_TRANSITION_TYPED | 1012 transition:ui::PAGE_TRANSITION_TYPED |
965 opener:nil | 1013 opener:nil |
966 openedByDOM:NO | 1014 openedByDOM:NO |
967 atIndex:[tab_model_ count] | 1015 atIndex:[tab_model_ count] |
968 inBackground:YES]; | 1016 inBackground:NO]; |
969 | 1017 |
970 // Basic sanity checks before moving on. | 1018 // Basic sanity checks before moving on. |
971 ASSERT_EQ(3U, [tab_model_ count]); | 1019 ASSERT_EQ(3U, [tab_model_ count]); |
972 ASSERT_NSEQ(tab0, [tab_model_ tabAtIndex:0]); | 1020 ASSERT_NSEQ(tab0, [tab_model_ tabAtIndex:0]); |
973 ASSERT_NSEQ(tab1, [tab_model_ tabAtIndex:1]); | 1021 ASSERT_NSEQ(tab1, [tab_model_ tabAtIndex:1]); |
974 ASSERT_NSEQ(tab2, [tab_model_ tabAtIndex:2]); | 1022 ASSERT_NSEQ(tab2, [tab_model_ tabAtIndex:2]); |
975 | 1023 |
| 1024 // Check that observer methods are called. |
| 1025 base::scoped_nsobject<TabModelObserverPong> tab_model_observer; |
| 1026 tab_model_observer.reset([[TabModelObserverPong alloc] init]); |
| 1027 [tab_model_ addObserver:tab_model_observer.get()]; |
| 1028 |
976 // Move a tab from index 1 to index 0 (move tab left by one). | 1029 // Move a tab from index 1 to index 0 (move tab left by one). |
977 [tab_model_observer_ setTabMovedWasCalled:NO]; | 1030 [tab_model_observer setTabMovedWasCalled:NO]; |
978 [tab_model_ moveTab:[tab_model_ tabAtIndex:1] toIndex:0]; | 1031 [tab_model_ moveTab:[tab_model_ tabAtIndex:1] toIndex:0]; |
979 ASSERT_EQ(3U, [tab_model_ count]); | 1032 ASSERT_EQ(3U, [tab_model_ count]); |
980 EXPECT_NSEQ(tab1, [tab_model_ tabAtIndex:0]); | 1033 EXPECT_NSEQ(tab1, [tab_model_ tabAtIndex:0]); |
981 EXPECT_NSEQ(tab0, [tab_model_ tabAtIndex:1]); | 1034 EXPECT_NSEQ(tab0, [tab_model_ tabAtIndex:1]); |
982 EXPECT_NSEQ(tab2, [tab_model_ tabAtIndex:2]); | 1035 EXPECT_NSEQ(tab2, [tab_model_ tabAtIndex:2]); |
983 EXPECT_TRUE([tab_model_observer_ tabMovedWasCalled]); | 1036 EXPECT_TRUE([tab_model_observer tabMovedWasCalled]); |
984 | 1037 |
985 // Move a tab from index 1 to index 2 (move tab right by one). | 1038 // Move a tab from index 1 to index 2 (move tab right by one). |
986 [tab_model_observer_ setTabMovedWasCalled:NO]; | 1039 [tab_model_observer setTabMovedWasCalled:NO]; |
987 [tab_model_ moveTab:[tab_model_ tabAtIndex:1] toIndex:2]; | 1040 [tab_model_ moveTab:[tab_model_ tabAtIndex:1] toIndex:2]; |
988 ASSERT_EQ(3U, [tab_model_ count]); | 1041 ASSERT_EQ(3U, [tab_model_ count]); |
989 EXPECT_NSEQ(tab1, [tab_model_ tabAtIndex:0]); | 1042 EXPECT_NSEQ(tab1, [tab_model_ tabAtIndex:0]); |
990 EXPECT_NSEQ(tab2, [tab_model_ tabAtIndex:1]); | 1043 EXPECT_NSEQ(tab2, [tab_model_ tabAtIndex:1]); |
991 EXPECT_NSEQ(tab0, [tab_model_ tabAtIndex:2]); | 1044 EXPECT_NSEQ(tab0, [tab_model_ tabAtIndex:2]); |
992 EXPECT_TRUE([tab_model_observer_ tabMovedWasCalled]); | 1045 EXPECT_TRUE([tab_model_observer tabMovedWasCalled]); |
993 | 1046 |
994 // Move a tab from index 0 to index 2 (move tab right by more than one). | 1047 // Move a tab from index 0 to index 2 (move tab right by more than one). |
995 [tab_model_observer_ setTabMovedWasCalled:NO]; | 1048 [tab_model_observer setTabMovedWasCalled:NO]; |
996 [tab_model_ moveTab:[tab_model_ tabAtIndex:0] toIndex:2]; | 1049 [tab_model_ moveTab:[tab_model_ tabAtIndex:0] toIndex:2]; |
997 ASSERT_EQ(3U, [tab_model_ count]); | 1050 ASSERT_EQ(3U, [tab_model_ count]); |
998 EXPECT_NSEQ(tab2, [tab_model_ tabAtIndex:0]); | 1051 EXPECT_NSEQ(tab2, [tab_model_ tabAtIndex:0]); |
999 EXPECT_NSEQ(tab0, [tab_model_ tabAtIndex:1]); | 1052 EXPECT_NSEQ(tab0, [tab_model_ tabAtIndex:1]); |
1000 EXPECT_NSEQ(tab1, [tab_model_ tabAtIndex:2]); | 1053 EXPECT_NSEQ(tab1, [tab_model_ tabAtIndex:2]); |
1001 EXPECT_TRUE([tab_model_observer_ tabMovedWasCalled]); | 1054 EXPECT_TRUE([tab_model_observer tabMovedWasCalled]); |
1002 | 1055 |
1003 // Move a tab from index 2 to index 0 (move tab left by more than one). | 1056 // Move a tab from index 2 to index 0 (move tab left by more than one). |
1004 [tab_model_observer_ setTabMovedWasCalled:NO]; | 1057 [tab_model_observer setTabMovedWasCalled:NO]; |
1005 [tab_model_ moveTab:[tab_model_ tabAtIndex:2] toIndex:0]; | 1058 [tab_model_ moveTab:[tab_model_ tabAtIndex:2] toIndex:0]; |
1006 ASSERT_EQ(3U, [tab_model_ count]); | 1059 ASSERT_EQ(3U, [tab_model_ count]); |
1007 EXPECT_NSEQ(tab1, [tab_model_ tabAtIndex:0]); | 1060 EXPECT_NSEQ(tab1, [tab_model_ tabAtIndex:0]); |
1008 EXPECT_NSEQ(tab2, [tab_model_ tabAtIndex:1]); | 1061 EXPECT_NSEQ(tab2, [tab_model_ tabAtIndex:1]); |
1009 EXPECT_NSEQ(tab0, [tab_model_ tabAtIndex:2]); | 1062 EXPECT_NSEQ(tab0, [tab_model_ tabAtIndex:2]); |
1010 EXPECT_TRUE([tab_model_observer_ tabMovedWasCalled]); | 1063 EXPECT_TRUE([tab_model_observer tabMovedWasCalled]); |
1011 | 1064 |
1012 // Move a tab from index 2 to index 2 (move tab to the same index). | 1065 // Move a tab from index 2 to index 2 (move tab to the same index). |
1013 [tab_model_observer_ setTabMovedWasCalled:NO]; | 1066 [tab_model_observer setTabMovedWasCalled:NO]; |
1014 [tab_model_ moveTab:[tab_model_ tabAtIndex:2] toIndex:2]; | 1067 [tab_model_ moveTab:[tab_model_ tabAtIndex:2] toIndex:2]; |
1015 ASSERT_EQ(3U, [tab_model_ count]); | 1068 ASSERT_EQ(3U, [tab_model_ count]); |
1016 EXPECT_NSEQ(tab1, [tab_model_ tabAtIndex:0]); | 1069 EXPECT_NSEQ(tab1, [tab_model_ tabAtIndex:0]); |
1017 EXPECT_NSEQ(tab2, [tab_model_ tabAtIndex:1]); | 1070 EXPECT_NSEQ(tab2, [tab_model_ tabAtIndex:1]); |
1018 EXPECT_NSEQ(tab0, [tab_model_ tabAtIndex:2]); | 1071 EXPECT_NSEQ(tab0, [tab_model_ tabAtIndex:2]); |
1019 EXPECT_FALSE([tab_model_observer_ tabMovedWasCalled]); | 1072 EXPECT_FALSE([tab_model_observer tabMovedWasCalled]); |
| 1073 |
| 1074 // TabModel asserts that there are no observer when it is deallocated, |
| 1075 // so remove the observer before the end of the method. |
| 1076 [tab_model_ removeObserver:tab_model_observer.get()]; |
1020 } | 1077 } |
1021 | 1078 |
1022 TEST_F(TabModelTest, SetParentModel) { | 1079 TEST_F(TabModelTest, SetParentModel) { |
1023 // Create a tab without a parent model and make sure it doesn't crash. Then | 1080 // Create a tab without a parent model and make sure it doesn't crash. Then |
1024 // set its parent TabModel and make sure that works as well. | 1081 // set its parent TabModel and make sure that works as well. |
1025 base::scoped_nsobject<Tab> tab([[Tab alloc] | 1082 base::scoped_nsobject<Tab> tab([[Tab alloc] |
1026 initWithBrowserState:chrome_browser_state_.get() | 1083 initWithBrowserState:chrome_browser_state_.get() |
1027 opener:nil | 1084 opener:nil |
1028 openedByDOM:NO | 1085 openedByDOM:NO |
1029 model:nil]); | 1086 model:nil]); |
1030 EXPECT_TRUE([tab parentTabModel] == nil); | 1087 EXPECT_TRUE([tab parentTabModel] == nil); |
1031 [tab_model_ insertTab:tab atIndex:0]; | 1088 [tab_model_ insertTab:tab atIndex:0]; |
1032 [tab setParentTabModel:tab_model_.get()]; | 1089 [tab setParentTabModel:tab_model_.get()]; |
1033 EXPECT_FALSE([tab parentTabModel] == nil); | 1090 EXPECT_FALSE([tab parentTabModel] == nil); |
1034 [tab_model_ closeTabAtIndex:0]; | 1091 [tab_model_ closeTabAtIndex:0]; |
1035 } | 1092 } |
1036 | 1093 |
1037 TEST_F(TabModelTest, PersistSelectionChange) { | 1094 TEST_F(TabModelTest, PersistSelectionChange) { |
1038 TestChromeBrowserState::Builder test_cbs_builder; | 1095 NSString* stashPath = |
1039 auto chrome_browser_state = test_cbs_builder.Build(); | 1096 base::SysUTF8ToNSString(chrome_browser_state_->GetStatePath().value()); |
1040 | 1097 |
1041 // Tabs register some observers with the ChromeBrowserState in an ObserverList | 1098 [tab_model_ insertTabWithURL:GURL(kURL1) |
1042 // that assert it is empty in its destructor. As Tab are Objective-C object, | 1099 referrer:web::Referrer() |
1043 // it is necessary to use a local pool to ensure all autoreleased object that | 1100 transition:ui::PAGE_TRANSITION_TYPED |
1044 // may reference those Tabs are deallocated before the TestChromeBrowserState | 1101 opener:nil |
1045 // is destroyed (this cannot use the TabModelTest ScopedNSAutoreleasePool as | 1102 openedByDOM:NO |
1046 // it will be drained after the local variable chrome_browser_state). | 1103 atIndex:[tab_model_ count] |
1047 base::mac::ScopedNSAutoreleasePool pool; | 1104 inBackground:NO]; |
| 1105 [tab_model_ insertTabWithURL:GURL(kURL1) |
| 1106 referrer:web::Referrer() |
| 1107 transition:ui::PAGE_TRANSITION_TYPED |
| 1108 opener:[tab_model_ tabAtIndex:0] |
| 1109 openedByDOM:NO |
| 1110 atIndex:[tab_model_ count] |
| 1111 inBackground:NO]; |
| 1112 [tab_model_ insertTabWithURL:GURL(kURL1) |
| 1113 referrer:web::Referrer() |
| 1114 transition:ui::PAGE_TRANSITION_TYPED |
| 1115 opener:[tab_model_ tabAtIndex:1] |
| 1116 openedByDOM:NO |
| 1117 atIndex:0 |
| 1118 inBackground:NO]; |
1048 | 1119 |
1049 NSString* stashPath = | 1120 ASSERT_EQ(3U, [tab_model_ count]); |
1050 base::SysUTF8ToNSString(chrome_browser_state->GetStatePath().value()); | 1121 [tab_model_ setCurrentTab:[tab_model_ tabAtIndex:1]]; |
1051 | 1122 |
1052 base::scoped_nsobject<TabModel> model([[TabModel alloc] | 1123 EXPECT_EQ(nil, [tab_model_ openerOfTab:[tab_model_ tabAtIndex:1]]); |
1053 initWithSessionWindow:session_window_.get() | 1124 EXPECT_EQ([tab_model_ tabAtIndex:1], |
1054 sessionService:[SessionServiceIOS sharedService] | 1125 [tab_model_ openerOfTab:[tab_model_ tabAtIndex:2]]); |
1055 browserState:chrome_browser_state.get()]); | 1126 EXPECT_EQ([tab_model_ tabAtIndex:2], |
1056 | 1127 [tab_model_ openerOfTab:[tab_model_ tabAtIndex:0]]); |
1057 [model insertTabWithURL:kURL | |
1058 referrer:kReferrer | |
1059 transition:ui::PAGE_TRANSITION_TYPED | |
1060 opener:nil | |
1061 openedByDOM:NO | |
1062 atIndex:[model count] | |
1063 inBackground:YES]; | |
1064 [model insertTabWithURL:kURL | |
1065 referrer:kReferrer | |
1066 transition:ui::PAGE_TRANSITION_TYPED | |
1067 opener:[model tabAtIndex:0] | |
1068 openedByDOM:NO | |
1069 atIndex:[model count] | |
1070 inBackground:YES]; | |
1071 [model insertTabWithURL:kURL | |
1072 referrer:kReferrer | |
1073 transition:ui::PAGE_TRANSITION_TYPED | |
1074 opener:[model tabAtIndex:1] | |
1075 openedByDOM:NO | |
1076 atIndex:0 | |
1077 inBackground:YES]; | |
1078 | |
1079 ASSERT_EQ(3U, [model count]); | |
1080 [model setCurrentTab:[model tabAtIndex:1]]; | |
1081 | |
1082 EXPECT_EQ(nil, [model openerOfTab:[model tabAtIndex:1]]); | |
1083 EXPECT_EQ([model tabAtIndex:1], [model openerOfTab:[model tabAtIndex:2]]); | |
1084 EXPECT_EQ([model tabAtIndex:2], [model openerOfTab:[model tabAtIndex:0]]); | |
1085 | 1128 |
1086 // Force state to flush to disk on the main thread so it can be immediately | 1129 // Force state to flush to disk on the main thread so it can be immediately |
1087 // tested below. | 1130 // tested below. |
1088 SessionWindowIOS* window = [model windowForSavingSession]; | 1131 SessionWindowIOS* window = [tab_model_ windowForSavingSession]; |
1089 [[SessionServiceIOS sharedService] performSaveWindow:window | 1132 [[SessionServiceIOS sharedService] performSaveWindow:window |
1090 toDirectory:stashPath]; | 1133 toDirectory:stashPath]; |
1091 [model browserStateDestroyed]; | 1134 [tab_model_ browserStateDestroyed]; |
1092 model.reset(); | 1135 tab_model_.reset(); |
1093 | 1136 |
1094 // Restoring TabModel session sends asynchronous tasks to IO thread, wait | 1137 // Restoring TabModel session sends asynchronous tasks to IO thread, wait |
1095 // for them to complete after destroying the TabModel. | 1138 // for them to complete after destroying the TabModel. |
1096 base::RunLoop().RunUntilIdle(); | 1139 base::RunLoop().RunUntilIdle(); |
1097 | 1140 |
1098 SessionWindowIOS* sessionWindow = [[SessionServiceIOS sharedService] | 1141 SessionWindowIOS* sessionWindow = [[SessionServiceIOS sharedService] |
1099 loadWindowForBrowserState:chrome_browser_state.get()]; | 1142 loadWindowForBrowserState:chrome_browser_state_.get()]; |
1100 | 1143 |
1101 // Create tab model from saved session. | 1144 // Create tab model from saved session. |
1102 base::scoped_nsobject<TestSessionService> test_service( | 1145 base::scoped_nsobject<TestSessionService> test_service( |
1103 [[TestSessionService alloc] init]); | 1146 [[TestSessionService alloc] init]); |
1104 | 1147 |
1105 model.reset([[TabModel alloc] | 1148 tab_model_.reset([[TabModel alloc] |
1106 initWithSessionWindow:sessionWindow | 1149 initWithSessionWindow:sessionWindow |
1107 sessionService:test_service | 1150 sessionService:test_service |
1108 browserState:chrome_browser_state.get()]); | 1151 browserState:chrome_browser_state_.get()]); |
1109 ASSERT_EQ(3u, [model count]); | 1152 ASSERT_EQ(3u, [tab_model_ count]); |
1110 | 1153 |
1111 EXPECT_EQ([model tabAtIndex:1], [model currentTab]); | 1154 EXPECT_EQ([tab_model_ tabAtIndex:1], [tab_model_ currentTab]); |
1112 EXPECT_EQ(nil, [model openerOfTab:[model tabAtIndex:1]]); | 1155 EXPECT_EQ(nil, [tab_model_ openerOfTab:[tab_model_ tabAtIndex:1]]); |
1113 EXPECT_EQ([model tabAtIndex:1], [model openerOfTab:[model tabAtIndex:2]]); | 1156 EXPECT_EQ([tab_model_ tabAtIndex:1], |
1114 EXPECT_EQ([model tabAtIndex:2], [model openerOfTab:[model tabAtIndex:0]]); | 1157 [tab_model_ openerOfTab:[tab_model_ tabAtIndex:2]]); |
1115 | 1158 EXPECT_EQ([tab_model_ tabAtIndex:2], |
1116 [model browserStateDestroyed]; | 1159 [tab_model_ openerOfTab:[tab_model_ tabAtIndex:0]]); |
1117 model.reset(); | |
1118 | |
1119 // Restoring TabModel session sends asynchronous tasks to IO thread, wait | |
1120 // for them to complete after destroying the TabModel. | |
1121 base::RunLoop().RunUntilIdle(); | |
1122 | 1160 |
1123 // Clean up. | 1161 // Clean up. |
1124 EXPECT_TRUE([[NSFileManager defaultManager] removeItemAtPath:stashPath | 1162 EXPECT_TRUE([[NSFileManager defaultManager] removeItemAtPath:stashPath |
1125 error:nullptr]); | 1163 error:nullptr]); |
1126 } | 1164 } |
1127 | 1165 |
1128 } // anonymous namespace | 1166 } // anonymous namespace |
OLD | NEW |