Chromium Code Reviews| Index: chrome/browser/ui/browser_tab_strip_tracker.h |
| diff --git a/chrome/browser/ui/browser_tab_strip_tracker.h b/chrome/browser/ui/browser_tab_strip_tracker.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..5beca2c471791663faaa1e60f8ae394685d2f0b6 |
| --- /dev/null |
| +++ b/chrome/browser/ui/browser_tab_strip_tracker.h |
| @@ -0,0 +1,88 @@ |
| +// Copyright 2015 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. |
| + |
| +#ifndef CHROME_BROWSER_UI_BROWSER_TAB_STRIP_TRACKER_H_ |
| +#define CHROME_BROWSER_UI_BROWSER_TAB_STRIP_TRACKER_H_ |
| + |
| +#include <set> |
| + |
| +#include "base/basictypes.h" |
| +#include "chrome/browser/ui/browser_list_observer.h" |
| + |
| +class BrowserTabStripTrackerDelegate; |
| +class TabStripModelObserver; |
| + |
| +// BrowserTabStripTracker is useful when you want to attach a |
| +// TabStripModelObserver to a subset of the available browsers, as well as |
| +// tracking new Browsers as they are added. |
| +// |
| +// To constrain the set of Browsers to track use a |
| +// BrowserTabStripTrackerDelegate. BrowserTabStripTracker queries the delegate |
| +// for each Browser to determine if the Browser should be tracked. A null |
| +// delegate indicates all Browsers should be observed. |
| +// |
| +// If you are interested in BrowserListObserver functions specify a |
|
Peter Kasting
2015/10/10 00:34:40
Nit: Two spaces (was a comma intended?)
sky
2015/10/12 15:16:21
Done.
|
| +// BrowserListObserver in the constructor. OnBrowserAdded() and |
| +// OnBrowserRemoved() are only called if the delegate indicates the browser |
| +// should be tracked. |
| +class BrowserTabStripTracker : public chrome::BrowserListObserver { |
| + public: |
| + // See Init() for details. |
| + enum class InitWith { |
| + BROWSERS_IN_ACTIVE_DESKTOP, |
| + ALL_BROWERS, |
| + }; |
| + |
| + // See class description for details. You only need specify a |
| + // TabStripModelObserver. |delegate| and |browser_list_observer| are |
| + // optional. |
| + explicit BrowserTabStripTracker( |
|
Peter Kasting
2015/10/10 00:34:40
Nit: No explicit needed
sky
2015/10/12 15:16:21
Done.
|
| + TabStripModelObserver* tab_strip_model_observer, |
| + BrowserTabStripTrackerDelegate* delegate, |
| + BrowserListObserver* browser_list_observer); |
| + ~BrowserTabStripTracker() override; |
| + |
| + // Starts tracking BrowserList for changes and additionally observes the |
| + // existing Browsers matching |init_with|. If there is a |
| + // BrowserTabStripTrackerDelegate it is called to determine if the Browser |
| + // should be observered. If an existing Browser should be observed |
|
Peter Kasting
2015/10/10 00:34:40
Nit: observed
sky
2015/10/12 15:16:21
Done.
|
| + // TabInsertedAt() is called for any existing tabs. If a delegate needs to |
| + // differentiate between Browsers observed by way of Init() vs a Browser added |
|
Peter Kasting
2015/10/10 00:34:40
Nit: vs.
sky
2015/10/12 15:16:21
Done.
|
| + // after the fact use is_processing_initial_browsers(). |
| + void Init(InitWith init_with); |
| + |
| + // Returns true if processing an existing Browser in Init(). |
| + bool is_processing_initial_browsers() const { |
| + return is_processing_initial_browsers_; |
| + } |
| + |
| + // Stops observing the current set of observered browsers and calls |
|
Peter Kasting
2015/10/10 00:34:40
Nit: observed
sky
2015/10/12 15:16:21
Done.
|
| + // BrowserListObserver::OnBrowserRemoved(). |
| + void StopObservingAndSendOnBrowserRemoved(); |
| + |
| + private: |
| + using Browsers = std::set<Browser*>; |
| + |
| + // Returns true if a TabStripModelObserver should be added to |browser|. |
| + bool ShouldTrackBrowser(Browser* browser); |
| + |
| + // If ShouldTrackBrowser() returns true for |browser| then a |
| + // TabStripModelObserver is attached. |
| + void MaybeTrackBrowser(Browser* browser); |
| + |
| + // BrowserListObserver: |
| + void OnBrowserAdded(Browser* browser) override; |
| + void OnBrowserRemoved(Browser* browser) override; |
| + void OnBrowserSetLastActive(Browser* browser) override; |
| + |
| + TabStripModelObserver* tab_strip_model_observer_; |
| + BrowserTabStripTrackerDelegate* delegate_; |
| + BrowserListObserver* browser_list_observer_; |
| + bool is_processing_initial_browsers_; |
| + Browsers browsers_observing_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(BrowserTabStripTracker); |
| +}; |
| + |
| +#endif // CHROME_BROWSER_UI_BROWSER_TAB_STRIP_TRACKER_H_ |