[cr149] BrowserListObserver deleted

All classes are being migrated to BrowserCollectionObserver.

Chromium changes:
https://chromium.googlesource.com/chromium/src/+/2ebf7353bb2535b6121d1a26340d3f4e74046e42

commit 2ebf7353bb2535b6121d1a26340d3f4e74046e42
Author: Thomas Lukaszewicz <tluk@chromium.org>
Date:   Tue Apr 14 21:51:30 2026 -0700

    [bedrock] Remove BrowserListObserver

    Bug: 431671320
    Change-Id: Iff946bf520ab44049c855d91576ef53ca1916e00
    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7744448
    Reviewed-by: Qikai Zhong <qikaizhong@microsoft.com>
    Commit-Queue: Thomas Lukaszewicz <tluk@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#1614935}
This commit is contained in:
Claudio DeSouza
2026-05-22 16:24:57 -04:00
committed by Max Karolinskiy
parent d422395bce
commit efd6458b00
19 changed files with 137 additions and 108 deletions
@@ -21,7 +21,6 @@
#include "base/no_destructor.h"
#include "base/task/sequenced_task_runner.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/browser_window/public/global_browser_collection.h"
#include "ui/aura/window.h"
@@ -38,13 +37,12 @@ ApplicationStateMonitor* ApplicationStateMonitor::GetInstance() {
}
ApplicationStateMonitorLinux::ApplicationStateMonitorLinux() {
BrowserList::AddObserver(this);
OnBrowserSetLastActive(nullptr);
browser_collection_observation_.Observe(
GlobalBrowserCollection::GetInstance());
OnBrowserActivated(nullptr);
}
ApplicationStateMonitorLinux::~ApplicationStateMonitorLinux() {
BrowserList::RemoveObserver(this);
}
ApplicationStateMonitorLinux::~ApplicationStateMonitorLinux() = default;
bool ApplicationStateMonitorLinux::IsBrowserActive() const {
x11::Window x11_window = x11::Window::None;
@@ -74,8 +72,8 @@ bool ApplicationStateMonitorLinux::IsBrowserActive() const {
return found_foreground;
}
void ApplicationStateMonitorLinux::OnBrowserSetLastActive(
Browser* /*browser*/) {
void ApplicationStateMonitorLinux::OnBrowserActivated(
BrowserWindowInterface* /*browser*/) {
base::SequencedTaskRunner::GetCurrentDefault()->PostTask(
FROM_HERE,
base::BindOnce(
@@ -83,8 +81,8 @@ void ApplicationStateMonitorLinux::OnBrowserSetLastActive(
weak_ptr_factory_.GetWeakPtr()));
}
void ApplicationStateMonitorLinux::OnBrowserNoLongerActive(
Browser* /*browser*/) {
void ApplicationStateMonitorLinux::OnBrowserDeactivated(
BrowserWindowInterface* /*browser*/) {
base::SequencedTaskRunner::GetCurrentDefault()->PostTask(
FROM_HERE,
base::BindOnce(
@@ -7,13 +7,16 @@
#define BRAVE_BROWSER_BRAVE_ADS_APPLICATION_STATE_APPLICATION_STATE_MONITOR_APPLICATION_STATE_MONITOR_LINUX_H_
#include "base/memory/weak_ptr.h"
#include "base/scoped_observation.h"
#include "brave/components/brave_ads/browser/application_state/application_state_monitor.h"
#include "chrome/browser/ui/browser_list_observer.h"
#include "chrome/browser/ui/browser_window/public/browser_collection_observer.h"
class BrowserCollection;
namespace brave_ads {
class ApplicationStateMonitorLinux final : public ApplicationStateMonitor,
public BrowserListObserver {
public BrowserCollectionObserver {
public:
ApplicationStateMonitorLinux();
@@ -24,13 +27,15 @@ class ApplicationStateMonitorLinux final : public ApplicationStateMonitor,
~ApplicationStateMonitorLinux() override;
private:
// BrowserListObserver:
void OnBrowserSetLastActive(Browser* browser) override;
void OnBrowserNoLongerActive(Browser* browser) override;
// BrowserCollectionObserver:
void OnBrowserActivated(BrowserWindowInterface* browser) override;
void OnBrowserDeactivated(BrowserWindowInterface* browser) override;
// ApplicationStateMonitor:
bool IsBrowserActive() const override;
base::ScopedObservation<BrowserCollection, BrowserCollectionObserver>
browser_collection_observation_{this};
base::WeakPtrFactory<ApplicationStateMonitorLinux> weak_ptr_factory_{this};
};
+9 -13
View File
@@ -25,8 +25,7 @@
#include "ui/base/page_transition_types.h"
#if !BUILDFLAG(IS_ANDROID)
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/browser_window/public/global_browser_collection.h"
#endif
namespace brave_ads {
@@ -87,7 +86,8 @@ AdsTabHelper::AdsTabHelper(content::WebContents* const web_contents)
#if !BUILDFLAG(IS_ANDROID)
// See `application_state_monitor_android.h` for Android.
BrowserList::AddObserver(this);
browser_collection_observation_.Observe(
GlobalBrowserCollection::GetInstance());
#endif // !BUILDFLAG(IS_ANDROID)
MaybeSetBrowserIsActive();
@@ -95,11 +95,7 @@ AdsTabHelper::AdsTabHelper(content::WebContents* const web_contents)
OnVisibilityChanged(web_contents->GetVisibility());
}
AdsTabHelper::~AdsTabHelper() {
#if !BUILDFLAG(IS_ANDROID)
BrowserList::RemoveObserver(this);
#endif
}
AdsTabHelper::~AdsTabHelper() = default;
void AdsTabHelper::SetAdsServiceForTesting(AdsService* const ads_service) {
CHECK_IS_TEST();
@@ -132,7 +128,7 @@ void AdsTabHelper::MaybeSetBrowserIsActive() {
MaybeNotifyBrowserDidBecomeActive();
// Maybe notify of tab change after the browser's active state changes because
// `OnVisibilityChanged` can be called before `OnBrowserSetLastActive`.
// `OnVisibilityChanged` can be called before `OnBrowserActivated`.
MaybeNotifyTabDidChange();
}
@@ -147,7 +143,7 @@ void AdsTabHelper::MaybeSetBrowserIsNoLongerActive() {
MaybeNotifyBrowserDidResignActive();
// Maybe notify of tab change after the browser's active state changes because
// `OnVisibilityChanged` can be called before `OnBrowserNoLongerActive`.
// `OnVisibilityChanged` can be called before `OnBrowserDeactivated`.
MaybeNotifyTabDidChange();
}
@@ -440,13 +436,13 @@ void AdsTabHelper::WebContentsDestroyed() {
#if !BUILDFLAG(IS_ANDROID)
// TODO(https://github.com/brave/brave-browser/issues/24970): Decouple
// BrowserListObserver.
// BrowserCollectionObserver.
void AdsTabHelper::OnBrowserSetLastActive(Browser* /*browser*/) {
void AdsTabHelper::OnBrowserActivated(BrowserWindowInterface* /*browser*/) {
MaybeSetBrowserIsActive();
}
void AdsTabHelper::OnBrowserNoLongerActive(Browser* /*browser*/) {
void AdsTabHelper::OnBrowserDeactivated(BrowserWindowInterface* /*browser*/) {
MaybeSetBrowserIsNoLongerActive();
}
#endif
+13 -7
View File
@@ -20,12 +20,13 @@
#include "content/public/browser/web_contents_user_data.h"
#if !BUILDFLAG(IS_ANDROID)
#include "chrome/browser/ui/browser_list_observer.h"
#include "base/scoped_observation.h"
#include "chrome/browser/ui/browser_window/public/browser_collection_observer.h"
#endif
class Browser;
class GURL;
class BrowserWindowInterface;
class BrowserCollection;
namespace brave_ads {
@@ -33,7 +34,7 @@ class AdsService;
class AdsTabHelper final : public content::WebContentsObserver,
#if !BUILDFLAG(IS_ANDROID)
public BrowserListObserver,
public BrowserCollectionObserver,
#endif
public content::WebContentsUserData<AdsTabHelper> {
public:
@@ -103,9 +104,9 @@ class AdsTabHelper final : public content::WebContentsObserver,
void WebContentsDestroyed() override;
#if !BUILDFLAG(IS_ANDROID)
// BrowserListObserver:
void OnBrowserSetLastActive(Browser* browser) override;
void OnBrowserNoLongerActive(Browser* browser) override;
// BrowserCollectionObserver:
void OnBrowserActivated(BrowserWindowInterface* browser) override;
void OnBrowserDeactivated(BrowserWindowInterface* browser) override;
#endif
SessionID session_id_;
@@ -128,6 +129,11 @@ class AdsTabHelper final : public content::WebContentsObserver,
std::optional<bool> is_browser_active_;
#if !BUILDFLAG(IS_ANDROID)
base::ScopedObservation<BrowserCollection, BrowserCollectionObserver>
browser_collection_observation_{this};
#endif
base::WeakPtrFactory<AdsTabHelper> weak_factory_{this};
WEB_CONTENTS_USER_DATA_KEY_DECL();
@@ -28,7 +28,6 @@
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/browser_list_observer.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/search_test_utils.h"
@@ -7,30 +7,29 @@
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/task/sequenced_task_runner.h"
#if !BUILDFLAG(IS_ANDROID)
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/browser_window/public/browser_window_interface.h"
#include "chrome/browser/ui/browser_window/public/global_browser_collection.h"
#endif
namespace ephemeral_storage {
#if BUILDFLAG(IS_ANDROID)
ApplicationStateObserver::ApplicationStateObserver() = default;
ApplicationStateObserver::~ApplicationStateObserver() = default;
#else
ApplicationStateObserver::ApplicationStateObserver(
content::BrowserContext* context)
: context_(context) {
BrowserList::AddObserver(this);
}
ApplicationStateObserver::~ApplicationStateObserver() {
BrowserList::RemoveObserver(this);
browser_collection_observation_.Observe(
GlobalBrowserCollection::GetInstance());
}
#endif
ApplicationStateObserver::~ApplicationStateObserver() = default;
void ApplicationStateObserver::AddObserver(Observer* observer) {
observers_.push_back(observer);
}
@@ -52,8 +51,9 @@ void ApplicationStateObserver::TriggerCurrentAppStateNotification() {
#endif
#if !BUILDFLAG(IS_ANDROID)
void ApplicationStateObserver::OnBrowserAdded(Browser* browser) {
if (browser->profile() != Profile::FromBrowserContext(context_)) {
void ApplicationStateObserver::OnBrowserCreated(
BrowserWindowInterface* browser) {
if (browser->GetProfile() != Profile::FromBrowserContext(context_)) {
return;
}
@@ -61,7 +61,7 @@ void ApplicationStateObserver::OnBrowserAdded(Browser* browser) {
has_notified_active_ = true;
// No need to observe anymore.
BrowserList::RemoveObserver(this);
browser_collection_observation_.Reset();
// Trigger the callback notifications after a cycle of the main loop to
// handle all windows
@@ -15,19 +15,23 @@
#endif
#if !BUILDFLAG(IS_ANDROID)
#include "chrome/browser/ui/browser_list_observer.h"
#include "base/scoped_observation.h"
#include "chrome/browser/ui/browser_window/public/browser_collection_observer.h"
namespace content {
class BrowserContext;
}
class BrowserWindowInterface;
class BrowserCollection;
#endif
namespace ephemeral_storage {
class ApplicationStateObserver
#if !BUILDFLAG(IS_ANDROID)
: public BrowserListObserver
: public BrowserCollectionObserver
#endif
{
public:
@@ -64,8 +68,8 @@ class ApplicationStateObserver
private:
#if !BUILDFLAG(IS_ANDROID)
// BrowserListObserver:
void OnBrowserAdded(Browser* browser) override;
// BrowserCollectionObserver:
void OnBrowserCreated(BrowserWindowInterface* browser) override;
#endif
void NotifyApplicationBecameActive();
@@ -76,6 +80,8 @@ class ApplicationStateObserver
#if !BUILDFLAG(IS_ANDROID)
bool has_notified_active_ = false;
raw_ptr<content::BrowserContext> context_ = nullptr;
base::ScopedObservation<BrowserCollection, BrowserCollectionObserver>
browser_collection_observation_{this};
#endif // !BUILDFLAG(IS_ANDROID)
base::WeakPtrFactory<ApplicationStateObserver> weak_ptr_factory_{this};
@@ -16,10 +16,6 @@
#include "components/content_settings/core/browser/cookie_settings.h"
#include "content/public/browser/web_contents_delegate.h"
#if !BUILDFLAG(IS_ANDROID)
#include "chrome/browser/ui/browser_list_observer.h"
#endif
namespace content {
class BrowserContext;
}
+11 -10
View File
@@ -12,8 +12,8 @@
#include "brave/components/misc_metrics/pref_names.h"
#include "brave/components/p3a_utils/bucket.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/browser_window/public/browser_window_interface.h"
#include "chrome/browser/ui/browser_window/public/global_browser_collection.h"
#include "chrome/browser/ui/tabs/tab_group_model.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "components/prefs/pref_registry_simple.h"
@@ -120,7 +120,8 @@ VerticalTabMetrics::VerticalTabMetrics(PrefService* local_state) {
local_state, GetStoragePrefNameForCountType(count_type));
}
BrowserList::GetInstance()->AddObserver(this);
browser_collection_observation_.Observe(
GlobalBrowserCollection::GetInstance());
}
VerticalTabMetrics::~VerticalTabMetrics() = default;
@@ -151,26 +152,26 @@ void VerticalTabMetrics::UpdateMetrics() {
}
}
void VerticalTabMetrics::OnBrowserAdded(Browser* browser) {
if (!browser->is_type_normal()) {
void VerticalTabMetrics::OnBrowserCreated(BrowserWindowInterface* browser) {
if (browser->GetType() != BrowserWindowInterface::TYPE_NORMAL) {
return;
}
Profile* profile = browser->profile();
Profile* profile = browser->GetProfile();
if (!profile || profile->IsOffTheRecord() || !profile->IsRegularProfile()) {
// Do not monitor incognito windows.
return;
}
PrefService* profile_prefs = profile->GetPrefs();
CHECK(profile_prefs);
SessionID session_id = browser->session_id();
SessionID session_id = browser->GetSessionID();
browser_metrics_[session_id] = std::make_unique<VerticalTabBrowserMetrics>(
profile_prefs, base::BindRepeating(&VerticalTabMetrics::UpdateMetrics,
base::Unretained(this)));
browser->tab_strip_model()->AddObserver(browser_metrics_[session_id].get());
browser->GetTabStripModel()->AddObserver(browser_metrics_[session_id].get());
}
void VerticalTabMetrics::OnBrowserRemoved(Browser* browser) {
browser_metrics_.erase(browser->session_id());
void VerticalTabMetrics::OnBrowserClosed(BrowserWindowInterface* browser) {
browser_metrics_.erase(browser->GetSessionID());
}
} // namespace misc_metrics
+10 -6
View File
@@ -10,13 +10,15 @@
#include "base/containers/flat_map.h"
#include "base/memory/raw_ptr.h"
#include "base/scoped_observation.h"
#include "brave/components/time_period_storage/weekly_storage.h"
#include "chrome/browser/ui/browser_list_observer.h"
#include "chrome/browser/ui/browser_window/public/browser_collection_observer.h"
#include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
#include "components/prefs/pref_change_registrar.h"
#include "components/sessions/core/session_id.h"
class Browser;
class BrowserWindowInterface;
class BrowserCollection;
class PrefRegistrySimple;
class PrefService;
class TabStripModel;
@@ -67,7 +69,7 @@ class VerticalTabBrowserMetrics : public TabStripModelObserver {
base::RepeatingClosure change_callback_;
};
class VerticalTabMetrics : public BrowserListObserver {
class VerticalTabMetrics : public BrowserCollectionObserver {
public:
explicit VerticalTabMetrics(PrefService* local_state);
~VerticalTabMetrics() override;
@@ -79,15 +81,17 @@ class VerticalTabMetrics : public BrowserListObserver {
void UpdateMetrics();
// BrowserListObserver:
void OnBrowserAdded(Browser* browser) override;
void OnBrowserRemoved(Browser* browser) override;
// BrowserCollectionObserver:
void OnBrowserCreated(BrowserWindowInterface* browser) override;
void OnBrowserClosed(BrowserWindowInterface* browser) override;
private:
base::flat_map<TabCountType, std::unique_ptr<WeeklyStorage>>
global_count_storages_;
base::flat_map<SessionID, std::unique_ptr<VerticalTabBrowserMetrics>>
browser_metrics_;
base::ScopedObservation<BrowserCollection, BrowserCollectionObserver>
browser_collection_observation_{this};
};
} // namespace misc_metrics
+10 -11
View File
@@ -10,8 +10,8 @@
#include "base/metrics/histogram_macros.h"
#include "base/time/time.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/browser_window/public/browser_window_interface.h"
#include "chrome/browser/ui/browser_window/public/global_browser_collection.h"
#include "components/prefs/pref_registry_simple.h"
#include "components/prefs/pref_service.h"
@@ -57,16 +57,15 @@ BraveWindowTracker::BraveWindowTracker(PrefService* local_state)
// Can happen in tests.
return;
}
BrowserList::AddObserver(this);
browser_collection_observation_.Observe(
GlobalBrowserCollection::GetInstance());
timer_.Start(FROM_HERE, base::Minutes(kWindowUsageP3AIntervalMinutes),
base::BindRepeating(&BraveWindowTracker::UpdateP3AValues,
base::Unretained(this)));
UpdateP3AValues();
}
BraveWindowTracker::~BraveWindowTracker() {
BrowserList::RemoveObserver(this);
}
BraveWindowTracker::~BraveWindowTracker() = default;
void BraveWindowTracker::CreateInstance(PrefService* local_state) {
g_brave_windows_tracker_instance = new BraveWindowTracker(local_state);
@@ -77,19 +76,19 @@ void BraveWindowTracker::RegisterPrefs(PrefRegistrySimple* registry) {
registry->RegisterBooleanPref(kTorUsed, false);
}
void BraveWindowTracker::OnBrowserAdded(Browser* browser) {
if (browser->profile()->IsTor()) {
void BraveWindowTracker::OnBrowserCreated(BrowserWindowInterface* browser) {
if (browser->GetProfile()->IsTor()) {
local_state_->SetBoolean(kTorUsed, true);
return;
}
const char* pref = GetPrefNameForProfile(browser->profile());
const char* pref = GetPrefNameForProfile(browser->GetProfile());
if (pref) {
local_state_->SetTime(pref, base::Time::Now());
}
}
void BraveWindowTracker::OnBrowserSetLastActive(Browser* browser) {
const char* pref = GetPrefNameForProfile(browser->profile());
void BraveWindowTracker::OnBrowserActivated(BrowserWindowInterface* browser) {
const char* pref = GetPrefNameForProfile(browser->GetProfile());
if (pref) {
local_state_->SetTime(pref, base::Time::Now());
}
+13 -7
View File
@@ -7,7 +7,7 @@
#define BRAVE_BROWSER_P3A_P3A_CORE_METRICS_H_
// The class below can be used on desktop only
// because BrowserListObserver is available on desktop only
// because BrowserCollectionObserver is available on desktop only
// Brave.Core.LastTimeIncognitoUsed and
// Brave.Core.TorEverUsed don't work on Android
@@ -18,8 +18,12 @@
#endif
#include "base/memory/raw_ptr.h"
#include "base/scoped_observation.h"
#include "base/timer/timer.h"
#include "chrome/browser/ui/browser_list_observer.h"
#include "chrome/browser/ui/browser_window/public/browser_collection_observer.h"
class BrowserWindowInterface;
class BrowserCollection;
class PrefService;
class PrefRegistrySimple;
@@ -27,14 +31,14 @@ class PrefRegistrySimple;
namespace brave {
// BraveWindowTracker is under !OS_ANDROID guard because
// BrowserListObserver should only be only on desktop
// BrowserCollectionObserver should only be only on desktop
// Brave.Uptime.BrowserOpenMinutes and Brave.Core.LastTimeIncognitoUsed
// don't work on Android
#if !BUILDFLAG(IS_ANDROID)
// Periodically records P3A stats (extracted from Local State) regarding the
// time when incognito windows were used.
// Used as a leaking singletone.
class BraveWindowTracker : public BrowserListObserver {
class BraveWindowTracker : public BrowserCollectionObserver {
public:
explicit BraveWindowTracker(PrefService* local_state);
BraveWindowTracker(const BraveWindowTracker&) = delete;
@@ -46,14 +50,16 @@ class BraveWindowTracker : public BrowserListObserver {
static void RegisterPrefs(PrefRegistrySimple* registry);
private:
// BrowserListObserver:
void OnBrowserAdded(Browser* browser) override;
void OnBrowserSetLastActive(Browser* browser) override;
// BrowserCollectionObserver:
void OnBrowserCreated(BrowserWindowInterface* browser) override;
void OnBrowserActivated(BrowserWindowInterface* browser) override;
void UpdateP3AValues() const;
base::RepeatingTimer timer_;
raw_ptr<PrefService, DanglingUntriaged> local_state_ = nullptr;
base::ScopedObservation<BrowserCollection, BrowserCollectionObserver>
browser_collection_observation_{this};
};
#endif // !BUILDFLAG(IS_ANDROID)
+1 -1
View File
@@ -71,7 +71,7 @@ class TorBrowserCollectionObserver : public BrowserCollectionObserver {
}
private:
base::ScopedObservation<GlobalBrowserCollection, BrowserCollectionObserver>
base::ScopedObservation<BrowserCollection, BrowserCollectionObserver>
observation_{this};
};
@@ -32,7 +32,6 @@
#include "chrome/browser/ui/browser_command_controller.h"
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/browser_list_observer.h"
#include "chrome/browser/ui/browser_tabstrip.h"
#include "chrome/browser/ui/browser_window/public/browser_window_features.h"
#include "chrome/browser/ui/ui_features.h"
+20 -8
View File
@@ -37,8 +37,8 @@
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/browser_window/public/global_browser_collection.h"
#include "chrome/browser/ui/location_bar/location_bar.h"
#include "chrome/browser/ui/omnibox/omnibox_view.h"
@@ -126,17 +126,27 @@ void CommanderService::Shutdown() {
items_.clear();
}
void CommanderService::OnBrowserAdded(Browser* browser) {
browser_close_subscriptions_[browser] = browser->RegisterBrowserDidClose(
base::BindRepeating(&CommanderService::OnBrowserDidClose,
weak_ptr_factory_.GetWeakPtr()));
void CommanderService::EnsureBrowserDidCloseSubscription(
BrowserWindowInterface* browser_window_interface) {
if (browser_close_subscriptions_.contains(browser_window_interface)) {
return;
}
browser_close_subscriptions_[browser_window_interface] =
browser_window_interface->RegisterBrowserDidClose(
base::BindRepeating(&CommanderService::OnBrowserDidClose,
weak_ptr_factory_.GetWeakPtr()));
}
void CommanderService::OnBrowserCreated(BrowserWindowInterface* browser) {
EnsureBrowserDidCloseSubscription(browser);
}
void CommanderService::OnBrowserDidClose(BrowserWindowInterface* browser) {
browser_close_subscriptions_.erase(browser);
if (last_browser_ == browser) {
last_browser_ = nullptr;
browser_list_observation_.Reset();
browser_collection_observation_.Reset();
}
}
@@ -220,8 +230,10 @@ void CommanderService::UpdateText(const std::u16string& text, bool force) {
}
last_searched_ = trimmed_text;
last_browser_ = browser;
if (!browser_list_observation_.IsObserving()) {
browser_list_observation_.Observe(BrowserList::GetInstance());
EnsureBrowserDidCloseSubscription(browser);
if (!browser_collection_observation_.IsObserving()) {
browser_collection_observation_.Observe(
GlobalBrowserCollection::GetInstance());
}
UpdateCommands();
+10 -7
View File
@@ -17,14 +17,15 @@
#include "brave/browser/ui/commander/ranker.h"
#include "brave/components/commander/browser/commander_frontend_delegate.h"
#include "brave/components/commander/browser/commander_item_model.h"
#include "chrome/browser/ui/browser_list_observer.h"
#include "chrome/browser/ui/browser_window/public/browser_collection_observer.h"
#include "chrome/browser/ui/browser_window/public/browser_window_interface.h"
#include "components/keyed_service/core/keyed_service.h"
#include "third_party/abseil-cpp/absl/container/flat_hash_map.h"
class Browser;
class OmniboxView;
class Profile;
class BrowserList;
class BrowserCollection;
namespace commander {
@@ -33,7 +34,7 @@ bool IsEnabled();
class CommanderService : public CommanderFrontendDelegate,
public KeyedService,
public BrowserListObserver {
public BrowserCollectionObserver {
public:
using CommandSources = std::vector<std::unique_ptr<CommandSource>>;
@@ -70,9 +71,11 @@ class CommanderService : public CommanderFrontendDelegate,
void ShowCommander();
void HideCommander();
void EnsureBrowserDidCloseSubscription(
BrowserWindowInterface* browser_window_interface);
// overrides BrowserListObserver:
void OnBrowserAdded(Browser* browser) override;
// BrowserCollectionObserver:
void OnBrowserCreated(BrowserWindowInterface* browser) override;
// Callback for browser closed events.
void OnBrowserDidClose(BrowserWindowInterface* browser_window_interface);
@@ -95,14 +98,14 @@ class CommanderService : public CommanderFrontendDelegate,
Ranker ranker_;
base::ObserverList<Observer> observers_;
base::ScopedObservation<BrowserList, BrowserListObserver>
browser_list_observation_{this};
// Map to track browser close callback subscriptions.
absl::flat_hash_map<raw_ptr<BrowserWindowInterface>,
base::CallbackListSubscription>
browser_close_subscriptions_;
base::ScopedObservation<BrowserCollection, BrowserCollectionObserver>
browser_collection_observation_{this};
base::WeakPtrFactory<CommanderService> weak_ptr_factory_{this};
};
} // namespace commander
@@ -19,6 +19,7 @@
#include "components/keyed_service/core/keyed_service.h"
#include "components/prefs/pref_member.h"
class Browser;
class Profile;
class BrowserWindowInterface;
class BrowserCollection;
@@ -26,7 +26,6 @@
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_window.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/browser_list_observer.h"
#include "chrome/browser/ui/tabs/recent_tabs_sub_menu_model.h"
#include "chrome/browser/ui/views/frame/browser_view.h"
#include "chrome/browser/ui/views/toolbar/toolbar_view.h"
@@ -36,7 +36,6 @@
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/browser_list_observer.h"
#include "chrome/browser/ui/browser_tabstrip.h"
#include "chrome/browser/ui/browser_window/public/browser_window_features.h"
#include "chrome/browser/ui/side_panel/side_panel_entry.h"