Chromium Code Reviews| Index: ios/chrome/browser/tabs/tab_model_selected_tab_observer.mm |
| diff --git a/ios/chrome/browser/tabs/tab_model_selected_tab_observer.mm b/ios/chrome/browser/tabs/tab_model_selected_tab_observer.mm |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..f8b7cd8b7f0dfdd8841042d3421f118c554226e3 |
| --- /dev/null |
| +++ b/ios/chrome/browser/tabs/tab_model_selected_tab_observer.mm |
| @@ -0,0 +1,54 @@ |
| +// Copyright 2017 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#import "ios/chrome/browser/tabs/tab_model_selected_tab_observer.h" |
| + |
| +#include "base/logging.h" |
| +#import "ios/chrome/browser/tabs/legacy_tab_helper.h" |
| +#import "ios/chrome/browser/tabs/tab.h" |
| +#import "ios/chrome/browser/tabs/tab_model.h" |
| + |
| +@implementation TabModelSelectedTabObserver { |
| + __weak TabModel* _tabModel; |
|
sdefresne
2017/02/21 17:09:49
This is an Objective-C class because I cannot use
|
| +} |
| + |
| +- (instancetype)initWithTabModel:(TabModel*)tabModel { |
| + DCHECK(tabModel); |
| + if ((self = [super init])) { |
| + _tabModel = tabModel; |
| + } |
| + return self; |
| +} |
| + |
| +#pragma mark WebStateListObserving |
| + |
| +- (void)webStateList:(WebStateList*)webStateList |
| + didChangeActiveWebState:(web::WebState*)newWebState |
| + oldWebState:(web::WebState*)oldWebState |
| + atIndex:(int)atIndex |
| + userAction:(BOOL)userAction { |
| + Tab* oldTab = nil; |
| + Tab* newTab = nil; |
| + if (oldWebState) { |
| + // Save state, such as scroll position, before switching tabs. |
|
rohitrao (ping after 24h)
2017/02/22 15:13:43
This comment is half stale, because we no longer s
sdefresne
2017/02/23 15:43:48
Fixed the comment.
|
| + oldTab = LegacyTabHelper::GetTabForWebState(oldWebState); |
| + if (userAction) |
| + [oldTab recordStateInHistory]; |
| + |
| + [[NSNotificationCenter defaultCenter] |
| + postNotificationName:kTabModelTabDeselectedNotification |
| + object:@{kTabModelTabKey : oldTab}]; |
| + } |
| + |
| + if (newWebState) { |
| + newTab = LegacyTabHelper::GetTabForWebState(newWebState); |
| + [newTab updateLastVisitedTimestamp]; |
| + |
| + // Persist the session state. |
| + if (newTab.loadFinished) |
| + [_tabModel saveSessionImmediately:NO]; |
| + } |
| +} |
| + |
| +@end |