Chromium Code Reviews| Index: chrome/browser/ui/tab_webcontents_tracker.cc |
| diff --git a/chrome/browser/ui/tab_webcontents_tracker.cc b/chrome/browser/ui/tab_webcontents_tracker.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..e7415f28eda8a8600214b812ac7ee2dda67b4a7a |
| --- /dev/null |
| +++ b/chrome/browser/ui/tab_webcontents_tracker.cc |
| @@ -0,0 +1,90 @@ |
| +// 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. |
| + |
| +#include "chrome/browser/ui/tab_webcontents_tracker.h" |
| + |
| +#include "chrome/browser/ui/browser.h" |
| +#include "chrome/browser/ui/browser_list.h" |
| +#include "chrome/browser/ui/tabs/tab_strip_model.h" |
| +#include "content/public/browser/web_contents.h" |
| + |
| +// static |
| +TabWebContentsTracker* TabWebContentsTracker::GetInstance() { |
| + return Singleton<TabWebContentsTracker, |
| + DefaultSingletonTraits<TabWebContentsTracker> >::get(); |
|
Bernhard Bauer
2013/04/26 16:30:10
I think DefaultSingletonTraits is the default, so
|
| +} |
| + |
| +TabWebContentsTracker::TabWebContentsTracker() { |
| + BrowserList::AddObserver(this); |
| + // Add as observer of all tab strip models currently available. |
| + BrowserList* browser_list = |
| + BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_NATIVE); |
| + BrowserList::const_iterator it = browser_list->begin(); |
|
Bernhard Bauer
2013/04/26 16:30:10
Could you put this into a for loop? That's slightl
|
| + while (it != browser_list->end()) { |
| + (*it)->tab_strip_model()->AddObserver(this); |
| + ++it; |
| + } |
| +} |
| + |
| +TabWebContentsTracker::~TabWebContentsTracker() { |
| + BrowserList::RemoveObserver(this); |
| +} |
| + |
| +void TabWebContentsTracker::OnBrowserAdded(Browser* browser) { |
| + browser->tab_strip_model()->AddObserver(this); |
| +} |
| + |
| +void TabWebContentsTracker::OnBrowserRemoved(Browser* browser) { |
| + browser->tab_strip_model()->RemoveObserver(this); |
| +} |
| + |
| +void TabWebContentsTracker::ActiveTabChanged(content::WebContents* old_contents, |
| + content::WebContents* new_contents, |
| + int index, |
| + int reason) { |
| + FOR_EACH_OBSERVER( |
|
Bernhard Bauer
2013/04/26 16:30:10
Hmm... Instead of forwarding all these methods fro
|
| + Observer, |
| + observer_list_, |
| + OnActiveTabChanged(old_contents, new_contents, index, reason)); |
| +} |
| + |
| +void TabWebContentsTracker::TabInsertedAt(content::WebContents* contents, |
| + int index, |
| + bool foreground) { |
| + FOR_EACH_OBSERVER( |
| + Observer, observer_list_, OnTabInsertedAt(contents, index, foreground)); |
| +} |
| + |
| +void TabWebContentsTracker::TabClosingAt(TabStripModel* tab_strip_model, |
| + content::WebContents* contents, |
| + int index) { |
| + FOR_EACH_OBSERVER(Observer, |
| + observer_list_, |
| + OnTabClosingAt(tab_strip_model, contents, index)); |
| +} |
| + |
| +void TabWebContentsTracker::TabDetachedAt(content::WebContents* contents, |
| + int index) { |
| + FOR_EACH_OBSERVER(Observer, observer_list_, OnTabDetachedAt(contents, index)); |
| +} |
| + |
| +void TabWebContentsTracker::TabReplacedAt(TabStripModel* tab_strip_model, |
| + content::WebContents* old_contents, |
| + content::WebContents* new_contents, |
| + int index) { |
| + FOR_EACH_OBSERVER( |
| + Observer, |
| + observer_list_, |
| + OnTabReplacedAt(tab_strip_model, old_contents, new_contents, index)); |
| +} |
| + |
| +// static |
| +void TabWebContentsTracker::AddObserver(Observer* observer) { |
| + GetInstance()->observer_list_.AddObserver(observer); |
| +} |
| + |
| +// static |
| +void TabWebContentsTracker::RemoveObserver(Observer* observer) { |
| + GetInstance()->observer_list_.RemoveObserver(observer); |
| +} |