#ifndef EXTENSIONS_SHELL_BROWSER_SHELL_KEEP_ALIVE_REQUESTER_H_
#define EXTENSIONS_SHELL_BROWSER_SHELL_KEEP_ALIVE_REQUESTER_H_
#include "apps/app_lifetime_monitor.h"
#include "base/containers/flat_map.h"
#include "base/scoped_observation.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_registry_observer.h"
#include "extensions/common/extension_id.h"
class ScopedKeepAlive;
namespace content {
class BrowserContext;
}
namespace extensions {
class ShellKeepAliveRequester : public ExtensionRegistryObserver,
public apps::AppLifetimeMonitor::Observer {
public:
explicit ShellKeepAliveRequester(content::BrowserContext* browser_context);
ShellKeepAliveRequester(const ShellKeepAliveRequester&) = delete;
ShellKeepAliveRequester& operator=(const ShellKeepAliveRequester&) = delete;
~ShellKeepAliveRequester() override;
void StartTrackingReload(const Extension* extension);
void StopTrackingReload(const ExtensionId& old_extension_id);
void OnExtensionLoaded(content::BrowserContext* browser_context,
const Extension* extension) override;
void OnExtensionUnloaded(content::BrowserContext* browser_context,
const Extension* extension,
UnloadedExtensionReason reason) override;
void OnAppActivated(content::BrowserContext* context,
const std::string& app_id) override;
void OnAppStop(content::BrowserContext* context,
const std::string& app_id) override;
private:
base::flat_map<ExtensionId, std::unique_ptr<ScopedKeepAlive>>
app_launching_keep_alives_;
base::flat_map<ExtensionId, std::unique_ptr<ScopedKeepAlive>>
app_reloading_keep_alives_;
base::ScopedObservation<ExtensionRegistry, ExtensionRegistryObserver>
extension_registry_observation_{this};
base::ScopedObservation<apps::AppLifetimeMonitor,
apps::AppLifetimeMonitor::Observer>
app_lifetime_monitor_observation_{this};
};
}
#endif