Chromium Code Reviews| 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 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 138 std::unique_ptr<WebStateList> _webStateList; | 138 std::unique_ptr<WebStateList> _webStateList; |
| 139 | 139 |
| 140 // Helper providing NSFastEnumeration implementation over the WebStateList. | 140 // Helper providing NSFastEnumeration implementation over the WebStateList. |
| 141 base::scoped_nsobject<WebStateListFastEnumerationHelper> | 141 base::scoped_nsobject<WebStateListFastEnumerationHelper> |
| 142 _fastEnumerationHelper; | 142 _fastEnumerationHelper; |
| 143 | 143 |
| 144 // WebStateListObservers reacting to modifications of the model (may send | 144 // WebStateListObservers reacting to modifications of the model (may send |
| 145 // notification, translate and forward events, update metrics, ...). | 145 // notification, translate and forward events, update metrics, ...). |
| 146 std::vector<std::unique_ptr<WebStateListObserver>> _webStateListObservers; | 146 std::vector<std::unique_ptr<WebStateListObserver>> _webStateListObservers; |
| 147 | 147 |
| 148 // Strong references to id<WebStateListObserving> wrapped by non-owning | |
| 149 // WebStateListObserverBridges. | |
| 150 base::scoped_nsobject<NSArray<id<WebStateListObserving>>> | |
| 151 _retainedWebStateListObservers; | |
| 152 | |
| 148 // The delegate for sync. | 153 // The delegate for sync. |
| 149 std::unique_ptr<TabModelSyncedWindowDelegate> _syncedWindowDelegate; | 154 std::unique_ptr<TabModelSyncedWindowDelegate> _syncedWindowDelegate; |
| 150 | 155 |
| 151 // Counters for metrics. | 156 // Counters for metrics. |
| 152 WebStateListMetricsObserver* _webStateListMetricsObserver; | 157 WebStateListMetricsObserver* _webStateListMetricsObserver; |
| 153 | 158 |
| 154 // Backs up property with the same name. | 159 // Backs up property with the same name. |
| 155 std::unique_ptr<TabUsageRecorder> _tabUsageRecorder; | 160 std::unique_ptr<TabUsageRecorder> _tabUsageRecorder; |
| 156 // Backs up property with the same name. | 161 // Backs up property with the same name. |
| 157 const SessionID _sessionID; | 162 const SessionID _sessionID; |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 201 // Clear weak pointer to WebStateListMetricsObserver before destroying it. | 206 // Clear weak pointer to WebStateListMetricsObserver before destroying it. |
| 202 _webStateListMetricsObserver = nullptr; | 207 _webStateListMetricsObserver = nullptr; |
| 203 | 208 |
| 204 [self closeAllTabs]; | 209 [self closeAllTabs]; |
| 205 | 210 |
| 206 // Unregister all observers after closing all the tabs as some of them are | 211 // Unregister all observers after closing all the tabs as some of them are |
| 207 // required to properly clean up the Tabs. | 212 // required to properly clean up the Tabs. |
| 208 for (const auto& webStateListObserver : _webStateListObservers) | 213 for (const auto& webStateListObserver : _webStateListObservers) |
| 209 _webStateList->RemoveObserver(webStateListObserver.get()); | 214 _webStateList->RemoveObserver(webStateListObserver.get()); |
| 210 _webStateListObservers.clear(); | 215 _webStateListObservers.clear(); |
| 216 _retainedWebStateListObservers.reset(); | |
| 211 | 217 |
| 212 _clearPoliciesTaskTracker.TryCancelAll(); | 218 _clearPoliciesTaskTracker.TryCancelAll(); |
| 213 | 219 |
| 214 [super dealloc]; | 220 [super dealloc]; |
| 215 } | 221 } |
| 216 | 222 |
| 217 #pragma mark - Public methods | 223 #pragma mark - Public methods |
| 218 | 224 |
| 219 - (Tab*)currentTab { | 225 - (Tab*)currentTab { |
| 220 web::WebState* webState = _webStateList->GetActiveWebState(); | 226 web::WebState* webState = _webStateList->GetActiveWebState(); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 276 // Set up the usage recorder before tabs are created. | 282 // Set up the usage recorder before tabs are created. |
| 277 _tabUsageRecorder = base::MakeUnique<TabUsageRecorder>(self); | 283 _tabUsageRecorder = base::MakeUnique<TabUsageRecorder>(self); |
| 278 } | 284 } |
| 279 _syncedWindowDelegate = | 285 _syncedWindowDelegate = |
| 280 base::MakeUnique<TabModelSyncedWindowDelegate>(self); | 286 base::MakeUnique<TabModelSyncedWindowDelegate>(self); |
| 281 | 287 |
| 282 // There must be a valid session service defined to consume session windows. | 288 // There must be a valid session service defined to consume session windows. |
| 283 DCHECK(service); | 289 DCHECK(service); |
| 284 _sessionService.reset([service retain]); | 290 _sessionService.reset([service retain]); |
| 285 | 291 |
| 286 _webStateListObservers.push_back(base::MakeUnique< | 292 base::scoped_nsobject<NSMutableArray<id<WebStateListObserving>>> |
| 287 WebStateListObserverBridge>([ | 293 retainedWebStateListObservers([[NSMutableArray alloc] init]); |
| 288 [TabModelClosingWebStateObserver alloc] | 294 |
| 289 initWithTabModel:self | 295 base::scoped_nsobject<TabModelClosingWebStateObserver> |
|
rohitrao (ping after 24h)
2017/04/11 12:51:42
Should we just have individual ivars for the three
sdefresne
2017/04/12 11:19:47
They are never (and should never) be accessed as i
| |
| 290 restoreService:IOSChromeTabRestoreServiceFactory::GetForBrowserState( | 296 tabModelClosingWebStateObserver([[TabModelClosingWebStateObserver alloc] |
| 291 _browserState)])); | 297 initWithTabModel:self |
| 298 restoreService:IOSChromeTabRestoreServiceFactory:: | |
| 299 GetForBrowserState(_browserState)]); | |
| 300 [retainedWebStateListObservers addObject:tabModelClosingWebStateObserver]; | |
| 301 | |
| 302 _webStateListObservers.push_back( | |
| 303 base::MakeUnique<WebStateListObserverBridge>( | |
| 304 tabModelClosingWebStateObserver)); | |
| 305 | |
| 292 _webStateListObservers.push_back( | 306 _webStateListObservers.push_back( |
| 293 base::MakeUnique<SnapshotCacheWebStateListObserver>( | 307 base::MakeUnique<SnapshotCacheWebStateListObserver>( |
| 294 [SnapshotCache sharedInstance])); | 308 [SnapshotCache sharedInstance])); |
| 295 if (_tabUsageRecorder) { | 309 if (_tabUsageRecorder) { |
| 296 _webStateListObservers.push_back( | 310 _webStateListObservers.push_back( |
| 297 base::MakeUnique<TabUsageRecorderWebStateListObserver>( | 311 base::MakeUnique<TabUsageRecorderWebStateListObserver>( |
| 298 _tabUsageRecorder.get())); | 312 _tabUsageRecorder.get())); |
| 299 } | 313 } |
| 300 _webStateListObservers.push_back(base::MakeUnique<TabParentingObserver>()); | 314 _webStateListObservers.push_back(base::MakeUnique<TabParentingObserver>()); |
| 315 | |
| 316 base::scoped_nsobject<TabModelSelectedTabObserver> | |
| 317 tabModelSelectedTabObserver( | |
| 318 [[TabModelSelectedTabObserver alloc] initWithTabModel:self]); | |
| 319 [retainedWebStateListObservers addObject:tabModelSelectedTabObserver]; | |
| 301 _webStateListObservers.push_back( | 320 _webStateListObservers.push_back( |
| 302 base::MakeUnique<WebStateListObserverBridge>( | 321 base::MakeUnique<WebStateListObserverBridge>( |
| 303 [[TabModelSelectedTabObserver alloc] initWithTabModel:self])); | 322 tabModelSelectedTabObserver)); |
| 323 | |
| 324 base::scoped_nsobject<TabModelObserversBridge> tabModelObserversBridge( | |
| 325 [[TabModelObserversBridge alloc] initWithTabModel:self | |
| 326 tabModelObservers:_observers.get()]); | |
| 327 [retainedWebStateListObservers addObject:tabModelObserversBridge]; | |
| 304 _webStateListObservers.push_back( | 328 _webStateListObservers.push_back( |
| 305 base::MakeUnique<WebStateListObserverBridge>( | 329 base::MakeUnique<WebStateListObserverBridge>(tabModelObserversBridge)); |
| 306 [[TabModelObserversBridge alloc] | |
| 307 initWithTabModel:self | |
| 308 tabModelObservers:_observers.get()])); | |
| 309 | 330 |
| 310 auto webStateListMetricsObserver = | 331 auto webStateListMetricsObserver = |
| 311 base::MakeUnique<WebStateListMetricsObserver>(); | 332 base::MakeUnique<WebStateListMetricsObserver>(); |
| 312 _webStateListMetricsObserver = webStateListMetricsObserver.get(); | 333 _webStateListMetricsObserver = webStateListMetricsObserver.get(); |
| 313 _webStateListObservers.push_back(std::move(webStateListMetricsObserver)); | 334 _webStateListObservers.push_back(std::move(webStateListMetricsObserver)); |
| 314 | 335 |
| 315 for (const auto& webStateListObserver : _webStateListObservers) | 336 for (const auto& webStateListObserver : _webStateListObservers) |
| 316 _webStateList->AddObserver(webStateListObserver.get()); | 337 _webStateList->AddObserver(webStateListObserver.get()); |
| 338 _retainedWebStateListObservers.reset([retainedWebStateListObservers copy]); | |
| 317 | 339 |
| 318 if (window) { | 340 if (window) { |
| 319 DCHECK([_observers empty]); | 341 DCHECK([_observers empty]); |
| 320 // Restore the session and reset the session metrics (as the event have | 342 // Restore the session and reset the session metrics (as the event have |
| 321 // not been generated by the user but by a cold start cycle). | 343 // not been generated by the user but by a cold start cycle). |
| 322 [self restoreSessionWindow:window persistState:NO]; | 344 [self restoreSessionWindow:window persistState:NO]; |
| 323 [self resetSessionMetrics]; | 345 [self resetSessionMetrics]; |
| 324 } | 346 } |
| 325 | 347 |
| 326 // Register for resign active notification. | 348 // Register for resign active notification. |
| (...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 794 } | 816 } |
| 795 | 817 |
| 796 // Called when UIApplicationWillEnterForegroundNotification is received. | 818 // Called when UIApplicationWillEnterForegroundNotification is received. |
| 797 - (void)applicationWillEnterForeground:(NSNotification*)notify { | 819 - (void)applicationWillEnterForeground:(NSNotification*)notify { |
| 798 if (_tabUsageRecorder) { | 820 if (_tabUsageRecorder) { |
| 799 _tabUsageRecorder->AppWillEnterForeground(); | 821 _tabUsageRecorder->AppWillEnterForeground(); |
| 800 } | 822 } |
| 801 } | 823 } |
| 802 | 824 |
| 803 @end | 825 @end |
| OLD | NEW |