Index: ios/chrome/browser/ui/tab_switcher/tab_switcher_model.h |
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_switcher_model.h b/ios/chrome/browser/ui/tab_switcher/tab_switcher_model.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a6847359ff07c3e717e8cfa21b865abb97acc670 |
--- /dev/null |
+++ b/ios/chrome/browser/ui/tab_switcher/tab_switcher_model.h |
@@ -0,0 +1,110 @@ |
+// Copyright 2015 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. |
+ |
+#ifndef IOS_CHROME_BROWSER_UI_TAB_SWITCHER_TAB_SWITCHER_MODEL_H_ |
+#define IOS_CHROME_BROWSER_UI_TAB_SWITCHER_TAB_SWITCHER_MODEL_H_ |
+ |
+#import <Foundation/Foundation.h> |
+ |
+#include <string> |
+#include "base/ios/block_types.h" |
+#include "base/mac/scoped_nsobject.h" |
+#import "ios/chrome/browser/tabs/tab_model_observer.h" |
+#import "ios/chrome/browser/ui/ntp/recent_tabs/synced_sessions.h" |
+#import "ios/chrome/browser/ui/ntp/recent_tabs/synced_sessions_bridge.h" |
+#import "ios/chrome/browser/ui/tab_switcher/tab_model_snapshot.h" |
+ |
+@class TabModel; |
+@class TabSwitcherCache; |
+ |
+enum class TabSwitcherSignInPanelsType { |
+ PANEL_USER_SIGNED_OUT, |
+ PANEL_USER_SIGNED_IN_SYNC_OFF, |
+ PANEL_USER_SIGNED_IN_SYNC_IN_PROGRESS, |
+ PANEL_USER_SIGNED_IN_SYNC_ON_NO_SESSIONS, |
+ NO_PANEL, |
+}; |
+ |
+namespace ios_internal { |
+ |
+enum class SessionType { |
+ OFF_THE_RECORD_SESSION, |
+ REGULAR_SESSION, |
+ DISTANT_SESSION |
+}; |
+ |
+class ChromeBrowserState; |
+ |
+// Returns true if the session type is a local session. A local session is a |
+// "regular session" or an "off the record" session. |
+bool IsLocalSession(SessionType sessionType); |
+ |
+} // namespace ios_internal |
+ |
+// Protocol to observe changes to the TabSwitcherModel. |
+@protocol TabSwitcherModelDelegate<NSObject> |
+// Called when distant sessions were removed or inserted. |removedIndexes| and |
+// |insertedIndexes| contains indexes in ascending order. |
+- (void)distantSessionsRemovedAtSortedIndexes:(NSArray*)removedIndexes |
+ insertedAtSortedIndexes:(NSArray*)insertedIndexes; |
+// Called when the distant session with the tag |tag| may need to be updated. |
+- (void)distantSessionMayNeedUpdate:(std::string const&)tag; |
+// Called when a local session of type |type| needs to be updated. |
+- (void)localSessionMayNeedUpdate:(ios_internal::SessionType)type; |
+// Called when the signed-in panel (if any) must change. |
+- (void)signInPanelChangedTo:(TabSwitcherSignInPanelsType)panelType; |
+// Called to retrieve the size of the item at the |index| in |session|. |
+- (CGSize)sizeForItemAtIndex:(NSUInteger)index |
+ inSession:(ios_internal::SessionType)session; |
+@end |
+ |
+// This class serves as a bridge between Chrome-level data (CLD), and what is |
+// presented on screen in the Tab Switcher. |
+// The CLD is: |
+// -The "distant sessions", i.e. the list of Chrome instances the user is |
+// signed-in, and the tabs each of the session contains. |
+// -The non incognito/incognito tab models. Also known as the "local sessions". |
+// |
+// The TabSwitcher observes changes in the CLD, and takes snapshots of its |
+// state. |
+// Whenever the delegate can be notified, the TabSwitcher computes a diff |
+// and notifies the delegate of the changes. |
+@interface TabSwitcherModel : NSObject<SyncedSessionsObserver, TabModelObserver> |
+ |
+@property(nonatomic, readonly) TabModel* mainTabModel; |
+@property(nonatomic, readonly) TabModel* otrTabModel; |
+ |
+// Default initializer. |browserState| must not be nullptr, |delegate| must not |
+// be nil. |
+- (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState |
+ delegate:(id<TabSwitcherModelDelegate>)delegate |
+ mainTabModel:(TabModel*)mainTabModel |
+ otrTabModel:(TabModel*)otrTabModel |
+ withCache:(TabSwitcherCache*)cache; |
+// Sets the main and incognito tab models, and notify the delegate of changes, |
+// if any. |mainTabModel| and |otrTabModel| can be nil. |
+- (void)setMainTabModel:(TabModel*)mainTabModel |
+ otrTabModel:(TabModel*)otrTabModel; |
+// Returns the browserState. |
+- (ios::ChromeBrowserState*)browserState; |
+// Returns the latest data for the local session of type |type|. |
+- (std::unique_ptr<TabModelSnapshot>)tabModelSnapshotForLocalSession: |
+ (ios_internal::SessionType)type; |
+// Returns the latest data for the distant session of tag |tag|. |
+- (std::unique_ptr<const synced_sessions::DistantSession>)distantSessionForTag: |
+ (std::string const&)tag; |
+ |
+// Returns the current count of sessions including main and incognito. |
+- (NSInteger)sessionCount; |
+// Returns the current count of distant sessions. |
+- (NSInteger)distantSessionCount; |
+// Returns the type of the sign in panel. |
+- (TabSwitcherSignInPanelsType)signInPanelType; |
+// Returns the tag of the session at index |index|. |
+- (std::string const&)tagOfDistantSessionAtIndex:(int)index; |
+// Notifies the delegate that changes occured for the distant sessions. |
+- (void)syncedSessionsChanged; |
+@end |
+ |
+#endif // IOS_CHROME_BROWSER_UI_TAB_SWITCHER_TAB_SWITCHER_MODEL_H_ |