| // Copyright (c) 2013 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 CHROME_BROWSER_UI_BROWSER_ITERATOR_H_ |
| #define CHROME_BROWSER_UI_BROWSER_ITERATOR_H_ |
| |
| #include "chrome/browser/ui/browser_list.h" |
| #include "chrome/browser/ui/host_desktop.h" |
| |
| class Browser; |
| |
| namespace chrome { |
| |
| // Iterates over all existing browsers (potentially across multiple desktops). |
| // Note: to iterate only over the browsers of a specific desktop, use the |
| // const_iterator of a given BrowserList instead. |
| // |
| // Example: |
| // for (BrowserIterator iterator; !iterator.done(); iterator.Next()) { |
| // Browser* cur = *iterator; |
| // -or- |
| // iterator->OperationOnBrowser(); |
| // ... |
| // } |
| class BrowserIterator { |
| public: |
| BrowserIterator(); |
| ~BrowserIterator(); |
| |
| // Returns true if this iterator is past the last Browser. |
| bool done() const { |
| // |current_iterator_| is never at the end of a list unless it is done (it |
| // immediately moves to the next browser list upon hitting the end of the |
| // current list unless there are no remaining empty browser lists). |
| return current_iterator_ == current_browser_list_->end(); |
| } |
| |
| // Returns the current Browser, valid as long as !done(). |
| Browser* operator->() const { |
| return *current_iterator_; |
| } |
| Browser* operator*() const { |
| return *current_iterator_; |
| } |
| |
| // Advances |current_iterator_| to the next browser. |
| void Next(); |
| |
| private: |
| // If |current_iterator_| is at |current_browser_list_->end()|, advance to the |
| // next non-empty browser list. After a call to this method: either |
| // |current_iterator_| is valid or done(). |
| void NextBrowserListIfAtEnd(); |
| |
| // The BrowserList currently being iterated over. Instances of this class do |
| // not own this pointer. |
| BrowserList* current_browser_list_; |
| |
| // The underlying iterator over browsers in |current_browser_list_|. |
| BrowserList::const_iterator current_iterator_; |
| |
| // The next HostDesktopType to iterate over when |current_iterator_| reaches |
| // |current_browser_list_->end()|. |
| HostDesktopType next_desktop_type_; |
| |
| DISALLOW_COPY_AND_ASSIGN(BrowserIterator); |
| }; |
| |
| } // namespace chrome |
| |
| #endif // CHROME_BROWSER_UI_BROWSER_ITERATOR_H_ |