blob: e410be55fd5db9017f3c8489c78bc20ef7d57e3c [file] [log] [blame]
// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/chrome/browser/metrics/model/incognito_web_state_observer.h"
#import <vector>
#import "ios/chrome/browser/shared/model/application_context/application_context.h"
#import "ios/chrome/browser/shared/model/browser/all_web_state_list_observation_registrar.h"
#import "ios/chrome/browser/shared/model/browser/browser_list_factory.h"
#import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state.h"
#import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state_manager.h"
IncognitoWebStateObserver::IncognitoWebStateObserver() {
std::vector<ChromeBrowserState*> browser_states =
GetApplicationContext()
->GetChromeBrowserStateManager()
->GetLoadedBrowserStates();
// Observer all incognito browsers' web state lists.
for (ChromeBrowserState* browser_state : browser_states) {
DCHECK(!browser_state->IsOffTheRecord());
registrars_.insert(std::make_unique<AllWebStateListObservationRegistrar>(
BrowserListFactory::GetForBrowserState(browser_state),
std::make_unique<Observer>(this),
AllWebStateListObservationRegistrar::Mode::INCOGNITO));
}
}
IncognitoWebStateObserver::~IncognitoWebStateObserver() {}
IncognitoWebStateObserver::Observer::Observer(
IncognitoWebStateObserver* incognito_tracker)
: incognito_tracker_(incognito_tracker) {}
IncognitoWebStateObserver::Observer::~Observer() {}
#pragma mark - WebStateListObserver
void IncognitoWebStateObserver::Observer::WebStateListDidChange(
WebStateList* web_state_list,
const WebStateListChange& change,
const WebStateListStatus& status) {
switch (change.type()) {
case WebStateListChange::Type::kStatusOnly:
// Do nothing when a WebState is selected and its status is updated.
break;
case WebStateListChange::Type::kDetach:
incognito_tracker_->OnIncognitoWebStateRemoved();
break;
case WebStateListChange::Type::kMove:
// Do nothing when a WebState is moved.
break;
case WebStateListChange::Type::kReplace:
// This is invoked when a Tab is replaced by another Tab without any
// visible UI change. There is nothing to do since the number of Tabs
// haven't changed.
break;
case WebStateListChange::Type::kInsert:
incognito_tracker_->OnIncognitoWebStateAdded();
break;
case WebStateListChange::Type::kGroupCreate:
// Do nothing when a group is created.
break;
case WebStateListChange::Type::kGroupVisualDataUpdate:
// Do nothing when a tab group's visual data are updated.
break;
case WebStateListChange::Type::kGroupMove:
// Do nothing when a tab group is moved.
break;
case WebStateListChange::Type::kGroupDelete:
// Do nothing when a group is deleted.
break;
}
}