// 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_PROCESS_OBSERVER_H_
#define CONTENT_PUBLIC_RENDERER_RENDER_PROCESS_OBSERVER_H_

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

namespace IPC {
class Message;
}

namespace content {

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

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

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

  // Called right after the WebKit API is initialized.
  virtual void WebKitInitialized() {}

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

  virtual void IdleNotification() {}

 private:
  DISALLOW_COPY_AND_ASSIGN(RenderProcessObserver);
};

}  // namespace content

#endif  // CONTENT_PUBLIC_RENDERER_RENDER_PROCESS_OBSERVER_H_
