// 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_PROCESS_MANAGER_OBSERVER_H_
#define EXTENSIONS_BROWSER_PROCESS_MANAGER_OBSERVER_H_

#include <string>

namespace content {
class RenderFrameHost;
}

namespace extensions {
class Extension;
class ExtensionHost;

class ProcessManagerObserver {
 public:
  // Called immediately after an extension background host is started. This
  // corresponds with the loading of background hosts immediately after profile
  // startup.
  virtual void OnBackgroundHostStartup(const Extension* extension) {}

  // Called immediately after an ExtensionHost for an extension is created.
  // This corresponds with any time ProcessManager::OnBackgroundHostCreated is
  // called.
  virtual void OnBackgroundHostCreated(ExtensionHost* host) {}

  // Called immediately after the extension background host is destroyed.
  virtual void OnBackgroundHostClose(const std::string& extension_id) {}

  // Called when a RenderFrameHost has been registered in an extension process.
  virtual void OnExtensionFrameRegistered(
      const std::string& extension_id,
      content::RenderFrameHost* render_frame_host) {}

  // Called when a RenderFrameHost is no longer part of an extension process.
  virtual void OnExtensionFrameUnregistered(
      const std::string& extension_id,
      content::RenderFrameHost* render_frame_host) {}
};

}  // namespace extensions

#endif  // EXTENSIONS_BROWSER_PROCESS_MANAGER_OBSERVER_H_
