blob: 7096138df450c08753ef9724b153e69b85e151d1 [file] [log] [blame]
// Copyright 2016 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_MODEL_SNAPSHOT_H_
#define IOS_CHROME_BROWSER_UI_TAB_SWITCHER_TAB_MODEL_SNAPSHOT_H_
#import <Foundation/Foundation.h>
#include <vector>
#import "base/ios/weak_nsobject.h"
@class TabModel;
@class Tab;
// Contains an approximate snapshot of the tab model passed to the initializer.
// Used to feed the cells to UICollectionViews, and to compute the changes
// required to update UICollectionViews.
// The changes are computed based on a list of hashes of the tabs.
// One resulting limitation is that there is no differenciation between a tab
// that is partially updated (because the snapshot changed), and a completely
// new tab replacing an older tab. This limitation has little impact because
// very few navigations occur when the tab switcher is shown.
class TabModelSnapshot {
public:
// Default constructor. |tabModel| can be nil.
explicit TabModelSnapshot(TabModel* tabModel);
~TabModelSnapshot();
// Returns the list of hashes for every tabs contained in the TabModel during
// the initialization.
std::vector<size_t> const& hashes() const;
// Returns a list of weak pointers to the tabs.
std::vector<base::WeakNSObject<Tab>> const& tabs() const;
// Returns a hash of the properties of a tab that are visible in the tab
// switcher's UI.
static size_t hashOfTheVisiblePropertiesOfATab(Tab* tab);
private:
std::vector<base::WeakNSObject<Tab>> _tabs;
std::vector<size_t> _hashes;
};
#endif // IOS_CHROME_BROWSER_UI_TAB_SWITCHER_TAB_MODEL_SNAPSHOT_H_