blob: 07bb366ef8599926787f2f0f760820b9979d7f58 [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.
#ifndef CHROME_BROWSER_EXTENSIONS_API_PERMISSIONS_PERMISSIONS_EVENT_ROUTER_H_
#define CHROME_BROWSER_EXTENSIONS_API_PERMISSIONS_PERMISSIONS_EVENT_ROUTER_H_
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/scoped_observation.h"
#include "components/keyed_service/core/keyed_service.h"
#include "extensions/browser/permissions_manager.h"
#include "extensions/buildflags/buildflags.h"
static_assert(BUILDFLAG(ENABLE_EXTENSIONS_CORE));
namespace content {
class BrowserContext;
}
namespace extensions {
class EventRouter;
// The PermissionsEventRouter listens to permission change events and routes
// them to extensions. PermissionsEventRouter will only route events to
// extension processes in the same profile as this object.
class PermissionsEventRouter : public KeyedService,
public PermissionsManager::Observer {
public:
explicit PermissionsEventRouter(content::BrowserContext* context);
PermissionsEventRouter(const PermissionsEventRouter&) = delete;
PermissionsEventRouter& operator=(const PermissionsEventRouter&) = delete;
~PermissionsEventRouter() override;
// KeyedService:
void Shutdown() override;
// PermissionsManager::Observer:
void OnExtensionPermissionsUpdated(
const Extension& extension,
const PermissionSet& permissions,
PermissionsManager::UpdateReason reason) override;
private:
raw_ptr<content::BrowserContext> browser_context_;
raw_ptr<PermissionsManager> permissions_manager_;
raw_ptr<EventRouter> event_router_;
base::ScopedObservation<PermissionsManager, PermissionsManager::Observer>
permissions_manager_observer_{this};
base::WeakPtrFactory<PermissionsEventRouter> weak_factory_{this};
};
} // namespace extensions
#endif // CHROME_BROWSER_EXTENSIONS_API_PERMISSIONS_PERMISSIONS_EVENT_ROUTER_H_