| Index: ios/chrome/browser/tabs/tab_model.mm
|
| diff --git a/ios/chrome/browser/tabs/tab_model.mm b/ios/chrome/browser/tabs/tab_model.mm
|
| index 0f7a935377393285ea2013e64244b5d4740a73db..2d692200cabeb2039826e71ca16febf1072f2d12 100644
|
| --- a/ios/chrome/browser/tabs/tab_model.mm
|
| +++ b/ios/chrome/browser/tabs/tab_model.mm
|
| @@ -163,9 +163,9 @@ Tab* GetOpenerForTab(id<NSFastEnumeration> tabs, Tab* tab) {
|
| // WebState owns the associated Tab.
|
| base::scoped_nsobject<NSMutableSet<Tab*>> _tabRetainer;
|
|
|
| - // WebStateListObserver bridges to react to modifications of the model (may
|
| - // send notification, translate and forward events, update metrics, ...).
|
| - std::vector<std::unique_ptr<WebStateListObserver>> _observerBridges;
|
| + // WebStateListObservers reacting to modifications of the model (may send
|
| + // notification, translate and forward events, update metrics, ...).
|
| + std::vector<std::unique_ptr<WebStateListObserver>> _webStateListObservers;
|
|
|
| // The delegate for sync.
|
| std::unique_ptr<TabModelSyncedWindowDelegate> _syncedWindowDelegate;
|
| @@ -237,10 +237,10 @@ Tab* GetOpenerForTab(id<NSFastEnumeration> tabs, Tab* tab) {
|
| // Clear weak pointer to WebStateListMetricsObserver before destroying it.
|
| _webStateListMetricsObserver = nullptr;
|
|
|
| - // Unregister all listeners before closing all the tabs.
|
| - for (const auto& observerBridge : _observerBridges)
|
| - _webStateList->RemoveObserver(observerBridge.get());
|
| - _observerBridges.clear();
|
| + // Unregister all observers before closing all the tabs.
|
| + for (const auto& webStateListObserver : _webStateListObservers)
|
| + _webStateList->RemoveObserver(webStateListObserver.get());
|
| + _webStateListObservers.clear();
|
|
|
| // Make sure the tabs do clean after themselves. It is important for
|
| // removeObserver: to be called first otherwise a lot of unecessary work will
|
| @@ -286,6 +286,10 @@ Tab* GetOpenerForTab(id<NSFastEnumeration> tabs, Tab* tab) {
|
| return static_cast<NSUInteger>(_webStateList->count());
|
| }
|
|
|
| +- (WebStateList*)webStateList {
|
| + return _webStateList.get();
|
| +}
|
| +
|
| - (instancetype)initWithSessionWindow:(SessionWindowIOS*)window
|
| sessionService:(SessionServiceIOS*)service
|
| browserState:(ios::ChromeBrowserState*)browserState {
|
| @@ -319,28 +323,31 @@ Tab* GetOpenerForTab(id<NSFastEnumeration> tabs, Tab* tab) {
|
| DCHECK(service);
|
| _sessionService.reset([service retain]);
|
|
|
| - _observerBridges.push_back(
|
| + _webStateListObservers.push_back(
|
| base::MakeUnique<SnapshotCacheWebStateListObserver>(
|
| [SnapshotCache sharedInstance]));
|
| if (_tabUsageRecorder) {
|
| - _observerBridges.push_back(
|
| + _webStateListObservers.push_back(
|
| base::MakeUnique<TabUsageRecorderWebStateListObserver>(
|
| _tabUsageRecorder.get()));
|
| }
|
| - _observerBridges.push_back(base::MakeUnique<TabParentingObserver>());
|
| - _observerBridges.push_back(base::MakeUnique<WebStateListObserverBridge>(
|
| - [[TabModelSelectedTabObserver alloc] initWithTabModel:self]));
|
| - _observerBridges.push_back(base::MakeUnique<WebStateListObserverBridge>(
|
| - [[TabModelObserversBridge alloc] initWithTabModel:self
|
| - tabModelObservers:_observers.get()]));
|
| + _webStateListObservers.push_back(base::MakeUnique<TabParentingObserver>());
|
| + _webStateListObservers.push_back(
|
| + base::MakeUnique<WebStateListObserverBridge>(
|
| + [[TabModelSelectedTabObserver alloc] initWithTabModel:self]));
|
| + _webStateListObservers.push_back(
|
| + base::MakeUnique<WebStateListObserverBridge>(
|
| + [[TabModelObserversBridge alloc]
|
| + initWithTabModel:self
|
| + tabModelObservers:_observers.get()]));
|
|
|
| auto webStateListMetricsObserver =
|
| base::MakeUnique<WebStateListMetricsObserver>();
|
| _webStateListMetricsObserver = webStateListMetricsObserver.get();
|
| - _observerBridges.push_back(std::move(webStateListMetricsObserver));
|
| + _webStateListObservers.push_back(std::move(webStateListMetricsObserver));
|
|
|
| - for (const auto& observerBridge : _observerBridges)
|
| - _webStateList->AddObserver(observerBridge.get());
|
| + for (const auto& webStateListObserver : _webStateListObservers)
|
| + _webStateList->AddObserver(webStateListObserver.get());
|
|
|
| if (window) {
|
| DCHECK([_observers empty]);
|
|
|