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

Side by Side Diff: chrome/browser/ui/browser_tab_strip_tracker.cc

Issue 1400823003: Creates BrowserTabStripTracker to consolidate common code (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: review feedback and git cl format 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 unified diff | Download patch
OLDNEW
(Empty)
1 // 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 #include "chrome/browser/ui/browser_tab_strip_tracker.h"
6
7 #include "base/auto_reset.h"
8 #include "chrome/browser/ui/browser.h"
9 #include "chrome/browser/ui/browser_iterator.h"
10 #include "chrome/browser/ui/browser_list.h"
11 #include "chrome/browser/ui/browser_tab_strip_tracker_delegate.h"
12 #include "chrome/browser/ui/tabs/tab_strip_model.h"
13
14 BrowserTabStripTracker::BrowserTabStripTracker(
15 TabStripModelObserver* tab_strip_model_observer,
16 BrowserTabStripTrackerDelegate* delegate,
17 BrowserListObserver* browser_list_observer)
18 : tab_strip_model_observer_(tab_strip_model_observer),
19 delegate_(delegate),
20 browser_list_observer_(browser_list_observer),
21 is_processing_initial_browsers_(false) {
22 DCHECK(tab_strip_model_observer_);
23 }
24
25 BrowserTabStripTracker::~BrowserTabStripTracker() {
26 for (Browser* browser : browsers_observing_)
27 browser->tab_strip_model()->RemoveObserver(tab_strip_model_observer_);
28
29 BrowserList::RemoveObserver(this);
30 }
31
32 void BrowserTabStripTracker::Init(InitWith init_with) {
33 BrowserList::AddObserver(this);
34
35 base::AutoReset<bool> restter(&is_processing_initial_browsers_, true);
36 if (init_with == InitWith::BROWSERS_IN_ACTIVE_DESKTOP) {
37 for (Browser* browser :
38 *BrowserList::GetInstance(chrome::GetActiveDesktop()))
39 MaybeTrackBrowser(browser);
40 } else {
41 DCHECK(InitWith::ALL_BROWERS == init_with);
42 for (chrome::BrowserIterator it; !it.done(); it.Next())
43 MaybeTrackBrowser(*it);
44 }
45 }
46
47 void BrowserTabStripTracker::StopObservingAndSendOnBrowserRemoved() {
48 Browsers current_browsers;
49 current_browsers.swap(browsers_observing_);
50
51 for (Browser* browser : current_browsers) {
52 browser->tab_strip_model()->RemoveObserver(tab_strip_model_observer_);
53 if (browser_list_observer_)
54 browser_list_observer_->OnBrowserRemoved(browser);
55 }
56 }
57
58 bool BrowserTabStripTracker::ShouldTrackBrowser(Browser* browser) {
59 return !delegate_ || delegate_->ShouldTrackBrowser(browser);
60 }
61
62 void BrowserTabStripTracker::MaybeTrackBrowser(Browser* browser) {
63 if (!ShouldTrackBrowser(browser))
64 return;
65
66 browsers_observing_.insert(browser);
67
68 if (browser_list_observer_)
69 browser_list_observer_->OnBrowserAdded(browser);
70
71 TabStripModel* tab_strip_model = browser->tab_strip_model();
72 tab_strip_model->AddObserver(tab_strip_model_observer_);
73 const int active_index = tab_strip_model->active_index();
74 for (int i = 0; i < tab_strip_model->count(); ++i) {
75 tab_strip_model_observer_->TabInsertedAt(
76 tab_strip_model->GetWebContentsAt(i), i, i == active_index);
77 }
78 }
79
80 void BrowserTabStripTracker::OnBrowserAdded(Browser* browser) {
81 MaybeTrackBrowser(browser);
82 }
83
84 void BrowserTabStripTracker::OnBrowserRemoved(Browser* browser) {
85 auto it = browsers_observing_.find(browser);
86 if (it == browsers_observing_.end())
87 return;
88
89 browsers_observing_.erase(it);
90 browser->tab_strip_model()->RemoveObserver(tab_strip_model_observer_);
91
92 if (browser_list_observer_)
93 browser_list_observer_->OnBrowserRemoved(browser);
94 }
95
96 void BrowserTabStripTracker::OnBrowserSetLastActive(Browser* browser) {
97 if (browser_list_observer_)
98 browser_list_observer_->OnBrowserSetLastActive(browser);
99 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/browser_tab_strip_tracker.h ('k') | chrome/browser/ui/browser_tab_strip_tracker_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698