blob: 99d89ea16415c31cb909932bd84b21602bb7c6cd [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.
#import "ios/chrome/browser/ui/tab_switcher/tab_model_snapshot.h"
#include "base/strings/sys_string_conversions.h"
#import "ios/chrome/browser/tabs/tab.h"
#import "ios/chrome/browser/tabs/tab_model.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
TabModelSnapshot::TabModelSnapshot(TabModel* tabModel) {
for (Tab* tab in tabModel) {
_hashes.push_back(hashOfTheVisiblePropertiesOfATab(tab));
_tabs.push_back(base::WeakNSObject<Tab>(tab));
}
}
TabModelSnapshot::~TabModelSnapshot() {}
std::vector<size_t> const& TabModelSnapshot::hashes() const {
DCHECK_EQ(_tabs.size(), _hashes.size());
return _hashes;
}
std::vector<base::WeakNSObject<Tab>> const& TabModelSnapshot::tabs() const {
DCHECK_EQ(_tabs.size(), _hashes.size());
return _tabs;
}
size_t TabModelSnapshot::hashOfTheVisiblePropertiesOfATab(Tab* tab) {
DCHECK(tab);
std::stringstream ss;
// lastVisitedTimestamp is used as an approximation for whether the tab's
// snapshot changed.
ss << base::SysNSStringToUTF8(tab.tabId) << std::endl
<< base::SysNSStringToUTF8(tab.urlDisplayString) << std::endl
<< std::hexfloat << tab.lastVisitedTimestamp << std::endl;
return std::hash<std::string>()(ss.str());
}