Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(231)

Unified Diff: chrome/browser/ui/browser_tab_strip_tracker.h

Issue 1400823003: Creates BrowserTabStripTracker to consolidate common code (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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_

Powered by Google App Engine
This is Rietveld 408576698