blob: 2391f566014155da5e483447230ad367e0c66adc [file] [log] [blame]
// Copyright 2025 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/tabs/tab_strip_api/event_broadcaster.h"
#include "chrome/browser/ui/tabs/tab_strip_api/observation/tab_strip_api_batched_observer.h"
namespace tabs_api {
// A decoder which takes the incoming event type and directs them to the proper
// callback.
class EventVisitor {
public:
EventVisitor() = default;
mojom::TabsEventPtr operator()(const mojom::OnTabsCreatedEventPtr& event) {
return mojom::TabsEvent::NewTabsCreatedEvent(event.Clone());
}
mojom::TabsEventPtr operator()(const mojom::OnTabsClosedEventPtr& event) {
return mojom::TabsEvent::NewTabsClosedEvent(event.Clone());
}
mojom::TabsEventPtr operator()(const mojom::OnNodeMovedEventPtr& event) {
return mojom::TabsEvent::NewNodeMovedEvent(event.Clone());
}
mojom::TabsEventPtr operator()(const mojom::OnDataChangedEventPtr& event) {
return mojom::TabsEvent::NewDataChangedEvent(event.Clone());
}
mojom::TabsEventPtr operator()(
const mojom::OnCollectionCreatedEventPtr& event) {
return mojom::TabsEvent::NewCollectionCreatedEvent(event.Clone());
}
};
std::vector<mojom::TabsEventPtr> Transform(
const std::vector<events::Event>& events) {
std::vector<mojom::TabsEventPtr> transformed;
EventVisitor transformer;
for (auto& event : events) {
transformed.push_back(std::visit(transformer, event));
}
return transformed;
}
void EventBroadcaster::Broadcast(
const base::ObserverList<observation::TabStripApiBatchedObserver>&
observers,
const std::vector<events::Event>& events) {
for (auto& observer : observers) {
observer.OnTabEvents(Transform(events));
}
}
} // namespace tabs_api