render_frame_observer.h revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CONTENT_PUBLIC_RENDERER_RENDER_FRAME_OBSERVER_H_
6#define CONTENT_PUBLIC_RENDERER_RENDER_FRAME_OBSERVER_H_
7
8#include "base/basictypes.h"
9#include "base/compiler_specific.h"
10#include "content/common/content_export.h"
11#include "ipc/ipc_listener.h"
12#include "ipc/ipc_sender.h"
13
14namespace content {
15
16class RendererPpapiHost;
17class RenderFrame;
18class RenderFrameImpl;
19
20// Base class for objects that want to filter incoming IPCs, and also get
21// notified of changes to the frame.
22class CONTENT_EXPORT RenderFrameObserver : public IPC::Listener,
23                                           public IPC::Sender {
24 public:
25  // By default, observers will be deleted when the RenderFrame goes away.  If
26  // they want to outlive it, they can override this function.
27  virtual void OnDestruct();
28
29  // Called when a Pepper plugin is created.
30  virtual void DidCreatePepperPlugin(RendererPpapiHost* host) {}
31
32  // IPC::Listener implementation.
33  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
34
35  // IPC::Sender implementation.
36  virtual bool Send(IPC::Message* message) OVERRIDE;
37
38  RenderFrame* render_frame() const;
39  int routing_id() const { return routing_id_; }
40
41 protected:
42  explicit RenderFrameObserver(RenderFrame* render_frame);
43  virtual ~RenderFrameObserver();
44
45 private:
46  friend class RenderFrameImpl;
47
48  // This is called by the RenderFrame when it's going away so that this object
49  // can null out its pointer.
50  void RenderFrameGone();
51
52  RenderFrame* render_frame_;
53  // The routing ID of the associated RenderFrame.
54  int routing_id_;
55
56  DISALLOW_COPY_AND_ASSIGN(RenderFrameObserver);
57};
58
59}  // namespace content
60
61#endif  // CONTENT_PUBLIC_RENDERER_RENDER_FRAME_OBSERVER_H_
62