blob: 323ef0db5980faffce49a7257f4ff334ceecbe52 [file] [log] [blame]
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_EXTENSIONS_EVENT_ROUTER_FORWARDER_H_
#define CHROME_BROWSER_EXTENSIONS_EVENT_ROUTER_FORWARDER_H_
#include <string>
#include "base/memory/ref_counted.h"
#include "base/values.h"
#include "chrome/browser/profiles/profile.h"
#include "extensions/browser/extension_event_histogram_value.h"
#include "extensions/buildflags/buildflags.h"
static_assert(BUILDFLAG(ENABLE_EXTENSIONS_CORE));
namespace extensions {
// This class forwards events to EventRouters.
// The advantages of this class over direct usage of EventRouters are:
// - this class is thread-safe.
// - the class can handle if a profile is deleted between the time of sending
// the event from a different thread to the UI thread.
// - this class can send events to the set of all active profiles. This is
// useful for system-wide settings that may change.
class EventRouterForwarder
: public base::RefCountedThreadSafe<EventRouterForwarder> {
public:
EventRouterForwarder();
EventRouterForwarder(const EventRouterForwarder&) = delete;
EventRouterForwarder& operator=(const EventRouterForwarder&) = delete;
// Dispatches an event to all active on-the-record EventRouters.
// Safe to call on any thread.
void BroadcastEventToRenderers(events::HistogramValue histogram_value,
const std::string& event_name,
base::Value::List event_args,
bool dispatch_to_off_the_record_profiles);
protected:
// Protected for testing.
virtual ~EventRouterForwarder();
// Broadcasts the event to listeners associated with `profile`'s EventRouter.
// Virtual for testing.
virtual void CallEventRouter(Profile* profile,
events::HistogramValue histogram_value,
const std::string& event_name,
base::Value::List event_args);
private:
friend class base::RefCountedThreadSafe<EventRouterForwarder>;
};
} // namespace extensions
#endif // CHROME_BROWSER_EXTENSIONS_EVENT_ROUTER_FORWARDER_H_