blob: 37b1f0ae602d67757d66b68ba64d7b86532a21e1 [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/ash/boca/chrome_tab_strip_delegate.h"
#include "ash/public/cpp/tab_strip_delegate.h"
#include "chrome/browser/ash/browser_delegate/browser_controller.h"
#include "chrome/browser/ash/browser_delegate/browser_delegate.h"
#include "components/app_restore/full_restore_utils.h"
#include "components/sessions/content/session_tab_helper.h"
#include "content/public/browser/favicon_status.h"
#include "content/public/browser/navigation_controller.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_contents_user_data.h"
ChromeTabStripDelegate::ChromeTabStripDelegate() = default;
ChromeTabStripDelegate::~ChromeTabStripDelegate() = default;
std::vector<ash::TabInfo> ChromeTabStripDelegate::GetTabsListForWindow(
aura::Window* window) const {
if (!window) {
return {};
}
// If the given `window` contains a browser frame
ash::BrowserDelegate* browser =
ash::BrowserController::GetInstance()->GetBrowserForWindow(window);
// Not fetching incognito window.
if (!browser || browser->IsOffTheRecord()) {
return {};
}
std::vector<ash::TabInfo> tabs;
for (size_t i = 0; i < browser->GetWebContentsCount(); i++) {
ash::TabInfo tab;
auto* web_contents = browser->GetWebContentsAt(i);
tab.last_access_timetick = web_contents->GetLastActiveTimeTicks();
// Not reading from web_contents->GetFaviconURLs() which is not reliable and
// could be empty depends on the timing of the retrieval.
content::NavigationEntry* entry =
web_contents->GetController().GetLastCommittedEntry();
tab.favicon = entry->GetFavicon().url;
tab.title = web_contents->GetTitle();
tab.url = web_contents->GetVisibleURL();
tab.id = sessions::SessionTabHelper::IdForTab(web_contents).id();
tabs.push_back(tab);
}
return tabs;
}