| // Copyright (c) 2012 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. |
| |
| #include "chrome/browser/ui/tab_contents/tab_contents_iterator.h" |
| |
| #include "base/logging.h" |
| #include "chrome/browser/browser_process.h" |
| #include "chrome/browser/ui/browser.h" |
| #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| |
| TabContentsIterator::TabContentsIterator() |
| : web_view_index_(-1), |
| cur_(NULL) { |
| // Load the first WebContents into |cur_|. |
| Next(); |
| } |
| |
| void TabContentsIterator::Next() { |
| // The current WebContents should be valid unless we are at the beginning. |
| DCHECK(cur_ || web_view_index_ == -1) << "Trying to advance past the end"; |
| |
| // Update |cur_| to the next WebContents in the list. |
| while (!browser_iterator_.done()) { |
| if (++web_view_index_ >= browser_iterator_->tab_strip_model()->count()) { |
| // Advance to the next Browser in the list. |
| browser_iterator_.Next(); |
| web_view_index_ = -1; |
| continue; |
| } |
| |
| content::WebContents* next_tab = browser_iterator_->tab_strip_model() |
| ->GetWebContentsAt(web_view_index_); |
| if (next_tab) { |
| cur_ = next_tab; |
| return; |
| } |
| } |
| // Reached the end. |
| cur_ = NULL; |
| } |