// Copyright (c) 2012 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 CONTENT_PUBLIC_RENDERER_RENDER_THREAD_OBSERVER_H_
#define CONTENT_PUBLIC_RENDERER_RENDER_THREAD_OBSERVER_H_

#include "base/macros.h"
#include "content/common/content_export.h"

namespace IPC {
class Message;
}

namespace content {
class AssociatedInterfaceRegistry;

// Base class for objects that want to filter control IPC messages and get
// notified of events.
class CONTENT_EXPORT RenderThreadObserver {
 public:
  RenderThreadObserver() {}
  virtual ~RenderThreadObserver() {}

  // Allows handling incoming Mojo requests.
  virtual void RegisterMojoInterfaces(
      AssociatedInterfaceRegistry* associated_interfaces) {}
  virtual void UnregisterMojoInterfaces(
      AssociatedInterfaceRegistry* associated_interfaces) {}

  // Allows filtering of control messages.
  virtual bool OnControlMessageReceived(const IPC::Message& message);

  // Notification that the render process is shutting down.
  virtual void OnRenderProcessShutdown() {}

  // Called when the renderer cache of the plugin list has changed.
  virtual void PluginListChanged() {}

  virtual void IdleNotification() {}

  // Called when the network state changes.
  virtual void NetworkStateChanged(bool online) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(RenderThreadObserver);
};

}  // namespace content

#endif  // CONTENT_PUBLIC_RENDERER_RENDER_THREAD_OBSERVER_H_
