blob: 1625dea3cffa355347c8a3da9156545a2716b99c [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef EXTENSIONS_BROWSER_MOJO_KEEP_ALIVE_IMPL_H_
#define EXTENSIONS_BROWSER_MOJO_KEEP_ALIVE_IMPL_H_
#include "base/callback.h"
#include "base/macros.h"
#include "base/scoped_observer.h"
#include "extensions/browser/extension_registry_observer.h"
#include "extensions/common/mojo/keep_alive.mojom.h"
#include "mojo/public/cpp/bindings/binding.h"
namespace content {
class BrowserContext;
class RenderFrameHost;
}
namespace extensions {
class Extension;
// An RAII mojo service implementation for extension keep alives. This adds a
// keep alive on construction and removes it on destruction.
class KeepAliveImpl : public KeepAlive, public ExtensionRegistryObserver {
public:
// Create a keep alive for |extension| running in |context| and connect it to
// |request|. When the requester closes its pipe, the keep alive ends.
static void Create(content::BrowserContext* browser_context,
const Extension* extension,
KeepAliveRequest request,
content::RenderFrameHost* render_frame_host);
private:
KeepAliveImpl(content::BrowserContext* context,
const Extension* extension,
KeepAliveRequest request);
~KeepAliveImpl() override;
// ExtensionRegistryObserver overrides.
void OnExtensionUnloaded(content::BrowserContext* browser_context,
const Extension* extension,
UnloadedExtensionReason reason) override;
void OnShutdown(ExtensionRegistry* registry) override;
// Invoked when the mojo connection is disconnected.
void OnDisconnected();
content::BrowserContext* context_;
const Extension* extension_;
ScopedObserver<ExtensionRegistry, KeepAliveImpl> extension_registry_observer_;
mojo::Binding<KeepAlive> binding_;
DISALLOW_COPY_AND_ASSIGN(KeepAliveImpl);
};
} // namespace extensions
#endif // EXTENSIONS_BROWSER_MOJO_KEEP_ALIVE_IMPL_H_