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 13 namespace { 14 15 // Maintains and gives access to a static list of TabModel instances. 16 static 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 24 void TabModelList::AddTabModel(TabModel* tab_model) { 25 DCHECK(tab_model); 26 tab_models().push_back(tab_model); 27 } 28 29 void 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 38 void 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 46 TabModel* 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 TabAndroid* tab = model->GetTabAt(index); 56 if (web_contents == tab->web_contents()) 57 return model; 58 } 59 } 60 61 return NULL; 62 } 63 64 TabModel* TabModelList::FindTabModelWithId( 65 SessionID::id_type desired_id) { 66 for (TabModelList::const_iterator i = TabModelList::begin(); 67 i != TabModelList::end(); i++) { 68 if ((*i)->GetSessionId() == desired_id) 69 return *i; 70 } 71 72 return NULL; 73 } 74 75 bool TabModelList::IsOffTheRecordSessionActive() { 76 for (TabModelList::const_iterator i = TabModelList::begin(); 77 i != TabModelList::end(); i++) { 78 if ((*i)->IsOffTheRecord() && (*i)->GetTabCount() > 0) 79 return true; 80 } 81 82 return false; 83 } 84 85 TabModelList::const_iterator TabModelList::begin() { 86 return tab_models().begin(); 87 } 88 89 TabModelList::const_iterator TabModelList::end() { 90 return tab_models().end(); 91 } 92 93 bool TabModelList::empty() { 94 return tab_models().empty(); 95 } 96 97 size_t TabModelList::size() { 98 return tab_models().size(); 99 } 100 101 TabModel* TabModelList::get(size_t index) { 102 DCHECK_LT(index, size()); 103 return tab_models()[index]; 104 } 105