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 "ios/chrome/browser/tabs/tab_model.h" | 5 #import "ios/chrome/browser/tabs/tab_model.h" |
6 | 6 |
7 #include <cstdint> | 7 #include <cstdint> |
8 #include <utility> | 8 #include <utility> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
324 sessionService:(SessionServiceIOS*)service | 324 sessionService:(SessionServiceIOS*)service |
325 browserState:(ios::ChromeBrowserState*)browserState { | 325 browserState:(ios::ChromeBrowserState*)browserState { |
326 if ((self = [super init])) { | 326 if ((self = [super init])) { |
327 _tabRetainer.reset([[NSMutableSet alloc] init]); | 327 _tabRetainer.reset([[NSMutableSet alloc] init]); |
328 _observers.reset([[TabModelObservers observers] retain]); | 328 _observers.reset([[TabModelObservers observers] retain]); |
329 | 329 |
330 _fastEnumerationHelper.reset([[WebStateListFastEnumerationHelper alloc] | 330 _fastEnumerationHelper.reset([[WebStateListFastEnumerationHelper alloc] |
331 initWithWebStateList:&_webStateList | 331 initWithWebStateList:&_webStateList |
332 proxyFactory:[[TabModelWebStateProxyFactory alloc] init]]); | 332 proxyFactory:[[TabModelWebStateProxyFactory alloc] init]]); |
333 | 333 |
| 334 _browserState = browserState; |
| 335 DCHECK(_browserState); |
| 336 |
| 337 // Normal browser states are the only ones to get tab restore. Tab sync |
| 338 // handles incognito browser states by filtering on profile, so it's |
| 339 // important to the backend code to always have a sync window delegate. |
| 340 if (!_browserState->IsOffTheRecord()) { |
| 341 // Set up the usage recorder before tabs are created. |
| 342 _tabUsageRecorder = base::MakeUnique<TabUsageRecorder>(self); |
| 343 } |
| 344 _syncedWindowDelegate = |
| 345 base::MakeUnique<TabModelSyncedWindowDelegate>(self); |
| 346 |
| 347 // There must be a valid session service defined to consume session windows. |
| 348 DCHECK(service); |
| 349 _sessionService.reset([service retain]); |
| 350 |
334 _observerBridges.push_back(base::MakeUnique<TabParentingObserver>()); | 351 _observerBridges.push_back(base::MakeUnique<TabParentingObserver>()); |
335 _observerBridges.push_back(base::MakeUnique<WebStateListObserverBridge>( | 352 _observerBridges.push_back(base::MakeUnique<WebStateListObserverBridge>( |
336 [[TabModelObserversBridge alloc] initWithTabModel:self | 353 [[TabModelObserversBridge alloc] initWithTabModel:self |
337 tabModelObservers:_observers.get()])); | 354 tabModelObservers:_observers.get()])); |
338 _observerBridges.push_back(base::MakeUnique<WebStateListMetricsObserver>()); | 355 _observerBridges.push_back(base::MakeUnique<WebStateListMetricsObserver>()); |
| 356 |
339 for (const auto& observerBridge : _observerBridges) | 357 for (const auto& observerBridge : _observerBridges) |
340 _webStateList.AddObserver(observerBridge.get()); | 358 _webStateList.AddObserver(observerBridge.get()); |
341 | 359 |
342 _browserState = browserState; | |
343 DCHECK(_browserState); | |
344 | |
345 // There must be a valid session service defined to consume session windows. | |
346 DCHECK(service); | |
347 _sessionService.reset([service retain]); | |
348 | |
349 // Normal browser states are the only ones to get tab restore. Tab sync | |
350 // handles incognito browser states by filtering on profile, so it's | |
351 // important to the backend code to always have a sync window delegate. | |
352 if (!_browserState->IsOffTheRecord()) { | |
353 // Set up the usage recorder before tabs are created. | |
354 _tabUsageRecorder.reset(new TabUsageRecorder(self)); | |
355 } | |
356 _syncedWindowDelegate.reset(new TabModelSyncedWindowDelegate(self)); | |
357 | |
358 if (window) { | 360 if (window) { |
359 DCHECK([_observers empty]); | 361 DCHECK([_observers empty]); |
360 // Restore the session and reset the session metrics (as the event have | 362 // Restore the session and reset the session metrics (as the event have |
361 // not been generated by the user but by a cold start cycle). | 363 // not been generated by the user but by a cold start cycle). |
362 [self restoreSessionWindow:window persistState:NO]; | 364 [self restoreSessionWindow:window persistState:NO]; |
363 [self resetSessionMetrics]; | 365 [self resetSessionMetrics]; |
364 } | 366 } |
365 | 367 |
366 _orderController.reset( | 368 _orderController.reset( |
367 [[TabModelOrderController alloc] initWithTabModel:self]); | 369 [[TabModelOrderController alloc] initWithTabModel:self]); |
(...skipping 765 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1133 web::NavigationManager::WebLoadParams params(URL); | 1135 web::NavigationManager::WebLoadParams params(URL); |
1134 params.referrer = referrer; | 1136 params.referrer = referrer; |
1135 params.transition_type = ui::PAGE_TRANSITION_TYPED; | 1137 params.transition_type = ui::PAGE_TRANSITION_TYPED; |
1136 [[tab webController] loadWithParams:params]; | 1138 [[tab webController] loadWithParams:params]; |
1137 [tab webController].webUsageEnabled = webUsageEnabled_; | 1139 [tab webController].webUsageEnabled = webUsageEnabled_; |
1138 [self insertTab:tab atIndex:index opener:parentTab]; | 1140 [self insertTab:tab atIndex:index opener:parentTab]; |
1139 return tab; | 1141 return tab; |
1140 } | 1142 } |
1141 | 1143 |
1142 @end | 1144 @end |
OLD | NEW |