Home | History | Annotate | Download | only in tab_model
      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