| // 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/browsing_data/counters/tabs_counter.h" |
| |
| #include "base/memory/raw_ptr.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/ui/android/tab_model/tab_model.h" |
| #include "chrome/browser/ui/android/tab_model/tab_model_list.h" |
| #include "components/browsing_data/core/pref_names.h" |
| |
| TabsCounter::TabsCounter(Profile* profile) : profile_(profile) {} |
| |
| TabsCounter::~TabsCounter() = default; |
| |
| const char* TabsCounter::GetPrefName() const { |
| return browsing_data::prefs::kCloseTabs; |
| } |
| |
| void TabsCounter::Count() { |
| base::Time begin_time = GetPeriodStart(); |
| base::Time end_time = GetPeriodEnd(); |
| |
| int total_tab_count = 0; |
| int total_window_count = 0; |
| |
| for (TabModel* tab_model : TabModelList::models()) { |
| if (tab_model->GetProfile() != profile_ || tab_model->IsOffTheRecord()) { |
| continue; |
| } |
| |
| int tab_count = |
| tab_model->GetTabCountNavigatedInTimeWindow(begin_time, end_time); |
| |
| if (tab_count > 0) { |
| total_window_count++; |
| total_tab_count += tab_count; |
| } |
| } |
| |
| TabModel* archived_tab_model = TabModelList::GetArchivedTabModel(); |
| if (archived_tab_model) { |
| total_tab_count += archived_tab_model->GetTabCountNavigatedInTimeWindow( |
| begin_time, end_time); |
| } |
| |
| auto result = |
| std::make_unique<TabsResult>(this, total_tab_count, total_window_count); |
| ReportResult(std::move(result)); |
| } |
| |
| // TabsCounter::TabsResult ----------------------------------------- |
| |
| TabsCounter::TabsResult::TabsResult(const TabsCounter* source, |
| ResultInt tab_count, |
| ResultInt window_count) |
| : FinishedResult(source, tab_count), window_count_(window_count) {} |
| |
| TabsCounter::TabsResult::~TabsResult() = default; |