1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/ui/android/tab_model/tab_model_list.h" 6 7#include "chrome/browser/android/tab_android.h" 8#include "chrome/browser/profiles/profile.h" 9#include "chrome/browser/ui/android/tab_model/tab_model.h" 10#include "chrome/browser/ui/browser_navigator.h" 11#include "content/public/browser/web_contents.h" 12 13namespace { 14 15// Maintains and gives access to a static list of TabModel instances. 16static TabModelList::TabModelVector& tab_models() { 17 CR_DEFINE_STATIC_LOCAL(TabModelList::TabModelVector, 18 tab_model_vector, ()); 19 return tab_model_vector; 20} 21 22} // namespace 23 24void TabModelList::AddTabModel(TabModel* tab_model) { 25 DCHECK(tab_model); 26 tab_models().push_back(tab_model); 27} 28 29void TabModelList::RemoveTabModel(TabModel* tab_model) { 30 DCHECK(tab_model); 31 TabModelList::iterator remove_tab_model = 32 std::find(tab_models().begin(), tab_models().end(), tab_model); 33 34 if (remove_tab_model != tab_models().end()) 35 tab_models().erase(remove_tab_model); 36} 37 38void TabModelList::HandlePopupNavigation(chrome::NavigateParams* params) { 39 TabAndroid* tab = TabAndroid::FromWebContents(params->source_contents); 40 41 // NOTE: If this fails contact dtrainor@. 42 DCHECK(tab); 43 tab->HandlePopupNavigation(params); 44} 45 46TabModel* TabModelList::GetTabModelForWebContents( 47 content::WebContents* web_contents) { 48 if (!web_contents) 49 return NULL; 50 51 for (TabModelList::const_iterator i = TabModelList::begin(); 52 i != TabModelList::end(); ++i) { 53 TabModel* model = *i; 54 for (int index = 0; index < model->GetTabCount(); index++) { 55 if (web_contents == model->GetWebContentsAt(index)) 56 return model; 57 } 58 } 59 60 return NULL; 61} 62 63TabModel* TabModelList::FindTabModelWithId( 64 SessionID::id_type desired_id) { 65 for (TabModelList::const_iterator i = TabModelList::begin(); 66 i != TabModelList::end(); i++) { 67 if ((*i)->GetSessionId() == desired_id) 68 return *i; 69 } 70 71 return NULL; 72} 73 74bool TabModelList::IsOffTheRecordSessionActive() { 75 for (TabModelList::const_iterator i = TabModelList::begin(); 76 i != TabModelList::end(); i++) { 77 if ((*i)->IsOffTheRecord() && (*i)->GetTabCount() > 0) 78 return true; 79 } 80 81 return false; 82} 83 84TabModelList::const_iterator TabModelList::begin() { 85 return tab_models().begin(); 86} 87 88TabModelList::const_iterator TabModelList::end() { 89 return tab_models().end(); 90} 91 92bool TabModelList::empty() { 93 return tab_models().empty(); 94} 95 96size_t TabModelList::size() { 97 return tab_models().size(); 98} 99 100TabModel* TabModelList::get(size_t index) { 101 DCHECK_LT(index, size()); 102 return tab_models()[index]; 103} 104