blob: 20dfe227cbf22375df86f530e736afffe3e3dec2 [file] [log] [blame]
skydbc6f292015-10-12 16:30:041// Copyright 2015 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#ifndef CHROME_BROWSER_UI_BROWSER_TAB_STRIP_TRACKER_H_
6#define CHROME_BROWSER_UI_BROWSER_TAB_STRIP_TRACKER_H_
7
avi655876a2015-12-25 07:18:158#include "base/macros.h"
skydbc6f292015-10-12 16:30:049#include "chrome/browser/ui/browser_list_observer.h"
10
11class BrowserTabStripTrackerDelegate;
12class TabStripModelObserver;
13
Francois Dorayc39105b2020-03-12 17:44:5614// BrowserTabStripTracker attaches a TabStripModelObserver to a subset of
15// pre-existing and future Browsers. The subset of Browsers that are tracked is
16// determined by an optional BrowserTabStripTrackerDelegate.
cm.sanchia0d6add2017-12-13 04:59:3317class BrowserTabStripTracker : public BrowserListObserver {
skydbc6f292015-10-12 16:30:0418 public:
Francois Dorayc39105b2020-03-12 17:44:5619 // |tab_strip_model_observer| is a non-nullptr TabStripModelObserver
20 // registered on tracked Browsers. |delegate| determines which Browsers are
21 // tracked. If nullptr, all Browsers are tracked.
skydbc6f292015-10-12 16:30:0422 BrowserTabStripTracker(TabStripModelObserver* tab_strip_model_observer,
Francois Dorayc39105b2020-03-12 17:44:5623 BrowserTabStripTrackerDelegate* delegate);
skydbc6f292015-10-12 16:30:0424 ~BrowserTabStripTracker() override;
25
Francois Dorayc39105b2020-03-12 17:44:5626 // Registers the TabStripModelObserver on existing tracked Browsers and starts
27 // observing Browser creation to register the TabStripModelObserver on future
28 // tracked Browsers. When the TabStripModelObserver is registered on an
29 // existing of future Browser, OnTabStripModelChanged() is invoked to indicate
30 // the initial state of the Browser. If a delegate needs to differentiate
31 // between Browsers observed by way of Init() vs. a Browser added after the
32 // fact use is_processing_initial_browsers().
xdai97132c3f02017-03-13 17:11:4533 void Init();
skydbc6f292015-10-12 16:30:0434
35 // Returns true if processing an existing Browser in Init().
36 bool is_processing_initial_browsers() const {
37 return is_processing_initial_browsers_;
38 }
39
skydbc6f292015-10-12 16:30:0440 private:
skydbc6f292015-10-12 16:30:0441 // Returns true if a TabStripModelObserver should be added to |browser|.
42 bool ShouldTrackBrowser(Browser* browser);
43
44 // If ShouldTrackBrowser() returns true for |browser| then a
45 // TabStripModelObserver is attached.
46 void MaybeTrackBrowser(Browser* browser);
47
48 // BrowserListObserver:
49 void OnBrowserAdded(Browser* browser) override;
50 void OnBrowserRemoved(Browser* browser) override;
skydbc6f292015-10-12 16:30:0451
Francois Dorayc39105b2020-03-12 17:44:5652 TabStripModelObserver* const tab_strip_model_observer_;
53 BrowserTabStripTrackerDelegate* const delegate_;
skydbc6f292015-10-12 16:30:0454 bool is_processing_initial_browsers_;
skydbc6f292015-10-12 16:30:0455
56 DISALLOW_COPY_AND_ASSIGN(BrowserTabStripTracker);
57};
58
59#endif // CHROME_BROWSER_UI_BROWSER_TAB_STRIP_TRACKER_H_