| // Copyright 2025 The Chromium Authors | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "chrome/browser/ui/browser_list_enumerator.h" | 
 |  | 
 | #include <algorithm> | 
 |  | 
 | #include "base/check.h" | 
 | #include "base/containers/contains.h" | 
 |  | 
 | BrowserListEnumerator::BrowserListEnumerator(bool enumerate_new_browser) | 
 |     : enumerate_new_browser_(enumerate_new_browser), | 
 |       browsers_(BrowserList::GetInstance()->begin(), | 
 |                 BrowserList::GetInstance()->end()) { | 
 |   BrowserList::GetInstance()->AddObserver(this); | 
 | } | 
 |  | 
 | BrowserListEnumerator::~BrowserListEnumerator() { | 
 |   BrowserList::GetInstance()->RemoveObserver(this); | 
 | } | 
 |  | 
 | void BrowserListEnumerator::OnBrowserAdded(Browser* browser) { | 
 |   DCHECK(!base::Contains(browsers_, browser)); | 
 |   if (enumerate_new_browser_) { | 
 |     browsers_.push_back(browser); | 
 |   } | 
 | } | 
 |  | 
 | void BrowserListEnumerator::OnBrowserRemoved(Browser* browser) { | 
 |   std::erase(browsers_, browser); | 
 | } | 
 |  | 
 | Browser* BrowserListEnumerator::Next() { | 
 |   Browser* browser = browsers_.front(); | 
 |   browsers_.erase(browsers_.begin()); | 
 |   DCHECK(base::Contains(*BrowserList::GetInstance(), browser)); | 
 |   return browser; | 
 | } |