| Index: chrome/browser/extensions/api/tabs/tabs_event_router.cc
|
| diff --git a/chrome/browser/extensions/api/tabs/tabs_event_router.cc b/chrome/browser/extensions/api/tabs/tabs_event_router.cc
|
| index 74a12c99fd671f29742ba823ca74fe382316d891..504acf67047ee1eea49b29a4fe51646e37e9209b 100644
|
| --- a/chrome/browser/extensions/api/tabs/tabs_event_router.cc
|
| +++ b/chrome/browser/extensions/api/tabs/tabs_event_router.cc
|
| @@ -118,47 +118,21 @@ bool TabsEventRouter::TabEntry::SetMuted(bool new_val) {
|
| }
|
|
|
| TabsEventRouter::TabsEventRouter(Profile* profile)
|
| - : profile_(profile), favicon_scoped_observer_(this) {
|
| + : profile_(profile),
|
| + favicon_scoped_observer_(this),
|
| + browser_tab_strip_tracker_(this, this, this) {
|
| DCHECK(!profile->IsOffTheRecord());
|
|
|
| - BrowserList::AddObserver(this);
|
| -
|
| - // Init() can happen after the browser is running, so catch up with any
|
| - // windows that already exist.
|
| - for (chrome::BrowserIterator it; !it.done(); it.Next()) {
|
| - RegisterForBrowserNotifications(*it);
|
| -
|
| - // Also catch up our internal bookkeeping of tab entries.
|
| - Browser* browser = *it;
|
| - if (ExtensionTabUtil::BrowserSupportsTabs(browser)) {
|
| - for (int i = 0; i < browser->tab_strip_model()->count(); ++i) {
|
| - WebContents* contents = browser->tab_strip_model()->GetWebContentsAt(i);
|
| - int tab_id = ExtensionTabUtil::GetTabId(contents);
|
| - tab_entries_[tab_id] = make_linked_ptr(new TabEntry(contents));
|
| - }
|
| - }
|
| - }
|
| + browser_tab_strip_tracker_.Init(
|
| + BrowserTabStripTracker::InitWith::ALL_BROWERS);
|
| }
|
|
|
| TabsEventRouter::~TabsEventRouter() {
|
| - BrowserList::RemoveObserver(this);
|
| -}
|
| -
|
| -void TabsEventRouter::OnBrowserAdded(Browser* browser) {
|
| - RegisterForBrowserNotifications(browser);
|
| }
|
|
|
| -void TabsEventRouter::RegisterForBrowserNotifications(Browser* browser) {
|
| - if (!profile_->IsSameProfile(browser->profile()) ||
|
| - !ExtensionTabUtil::BrowserSupportsTabs(browser))
|
| - return;
|
| - // Start listening to TabStripModel events for this browser.
|
| - TabStripModel* tab_strip = browser->tab_strip_model();
|
| - tab_strip->AddObserver(this);
|
| -
|
| - for (int i = 0; i < tab_strip->count(); ++i) {
|
| - RegisterForTabNotifications(tab_strip->GetWebContentsAt(i));
|
| - }
|
| +bool TabsEventRouter::ShouldTrackBrowser(Browser* browser) {
|
| + return profile_->IsSameProfile(browser->profile()) &&
|
| + ExtensionTabUtil::BrowserSupportsTabs(browser);
|
| }
|
|
|
| void TabsEventRouter::RegisterForTabNotifications(WebContents* contents) {
|
| @@ -190,14 +164,6 @@ void TabsEventRouter::UnregisterForTabNotifications(WebContents* contents) {
|
| ZoomController::FromWebContents(contents)->RemoveObserver(this);
|
| }
|
|
|
| -void TabsEventRouter::OnBrowserRemoved(Browser* browser) {
|
| - if (!profile_->IsSameProfile(browser->profile()))
|
| - return;
|
| -
|
| - // Stop listening to TabStripModel events for this browser.
|
| - browser->tab_strip_model()->RemoveObserver(this);
|
| -}
|
| -
|
| void TabsEventRouter::OnBrowserSetLastActive(Browser* browser) {
|
| TabsWindowsAPI* tabs_window_api = TabsWindowsAPI::Get(profile_);
|
| if (tabs_window_api) {
|
| @@ -240,12 +206,16 @@ void TabsEventRouter::TabCreatedAt(WebContents* contents,
|
| void TabsEventRouter::TabInsertedAt(WebContents* contents,
|
| int index,
|
| bool active) {
|
| - // If tab is new, send created event.
|
| int tab_id = ExtensionTabUtil::GetTabId(contents);
|
| if (GetTabEntry(contents).get() == NULL) {
|
| tab_entries_[tab_id] = make_linked_ptr(new TabEntry(contents));
|
|
|
| - TabCreatedAt(contents, index, active);
|
| + // We've never seen this tab, send create event as long as we're not in the
|
| + // constructor.
|
| + if (browser_tab_strip_tracker_.is_processing_initial_browsers())
|
| + RegisterForTabNotifications(contents);
|
| + else
|
| + TabCreatedAt(contents, index, active);
|
| return;
|
| }
|
|
|
|
|