#ifndef EXTENSIONS_BROWSER_MOJO_KEEP_ALIVE_IMPL_H_
#define EXTENSIONS_BROWSER_MOJO_KEEP_ALIVE_IMPL_H_
#include "base/memory/raw_ptr.h"
#include "base/scoped_observation.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_registry_observer.h"
#include "extensions/browser/process_manager.h"
#include "extensions/browser/process_manager_observer.h"
#include "extensions/common/mojom/keep_alive.mojom.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/receiver.h"
namespace content {
class BrowserContext;
class RenderFrameHost;
}
namespace extensions {
class Extension;
class ProcessManager;
class KeepAliveImpl : public KeepAlive,
public ExtensionRegistryObserver,
public ProcessManagerObserver {
public:
KeepAliveImpl(const KeepAliveImpl&) = delete;
KeepAliveImpl& operator=(const KeepAliveImpl&) = delete;
static void Create(content::BrowserContext* browser_context,
const Extension* extension,
content::RenderFrameHost* render_frame_host,
mojo::PendingReceiver<KeepAlive> receiver);
private:
KeepAliveImpl(content::BrowserContext* context,
const Extension* extension,
mojo::PendingReceiver<KeepAlive> receiver);
~KeepAliveImpl() override;
void OnExtensionUnloaded(content::BrowserContext* browser_context,
const Extension* extension,
UnloadedExtensionReason reason) override;
void OnShutdown(ExtensionRegistry* registry) override;
void OnProcessManagerShutdown(ProcessManager* manager) override;
void OnDisconnected();
raw_ptr<content::BrowserContext> context_;
raw_ptr<const Extension> extension_;
base::ScopedObservation<ExtensionRegistry, ExtensionRegistryObserver>
extension_registry_observation_{this};
base::ScopedObservation<ProcessManager, ProcessManagerObserver>
process_manager_observation_{this};
mojo::Receiver<KeepAlive> receiver_;
};
}
#endif