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_ |