blob: 4e58a0ac97e671576c3756cc7e2091e9d62a79de [file] [log] [blame]
// Copyright 2019 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/snapshots/snapshot_cache_tab_model_list_observer.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
#include "ios/chrome/browser/browser_state/chrome_browser_state.h"
#import "ios/chrome/browser/tabs/tab_model.h"
#import "ios/chrome/browser/tabs/tab_model_list.h"
#import "ios/chrome/browser/tabs/tab_model_list_observer.h"
#include "ios/chrome/browser/web_state_list/web_state_list.h"
#include "ios/chrome/browser/web_state_list/web_state_list_observer.h"
SnapshotCacheTabModelListObserver::SnapshotCacheTabModelListObserver(
ios::ChromeBrowserState* browser_state,
std::unique_ptr<WebStateListObserver> web_state_list_observer)
: browser_state_(browser_state),
web_state_list_observer_(std::move(web_state_list_observer)),
scoped_observer_(
std::make_unique<ScopedObserver<WebStateList, WebStateListObserver>>(
web_state_list_observer_.get())) {
TabModelList::AddObserver(this);
// Register as an observer for all TabModels for both the normal and otr
// browser states.
DCHECK(!browser_state_->IsOffTheRecord());
for (TabModel* model :
TabModelList::GetTabModelsForChromeBrowserState(browser_state_)) {
scoped_observer_->Add(model.webStateList);
}
if (browser_state_->HasOffTheRecordChromeBrowserState()) {
ios::ChromeBrowserState* otr_state =
browser_state->GetOffTheRecordChromeBrowserState();
for (TabModel* model :
TabModelList::GetTabModelsForChromeBrowserState(otr_state)) {
scoped_observer_->Add(model.webStateList);
}
}
}
SnapshotCacheTabModelListObserver::~SnapshotCacheTabModelListObserver() {
TabModelList::RemoveObserver(this);
}
void SnapshotCacheTabModelListObserver::TabModelRegisteredWithBrowserState(
TabModel* tab_model,
ios::ChromeBrowserState* browser_state) {
// Normal and Incognito browser states share a SnapshotCache.
if (browser_state_ == browser_state->GetOriginalChromeBrowserState()) {
scoped_observer_->Add(tab_model.webStateList);
}
}
void SnapshotCacheTabModelListObserver::TabModelUnregisteredFromBrowserState(
TabModel* tab_model,
ios::ChromeBrowserState* browser_state) {
// Normal and Incognito browser states share a SnapshotCache.
if (browser_state_ == browser_state->GetOriginalChromeBrowserState()) {
scoped_observer_->Remove(tab_model.webStateList);
}
}