1// Copyright (c) 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_BROWSER_RENDERER_HOST_MEDIA_PEER_CONNECTION_TRACKER_HOST_H_
6#define CONTENT_BROWSER_RENDERER_HOST_MEDIA_PEER_CONNECTION_TRACKER_HOST_H_
7
8#include "base/power_monitor/power_observer.h"
9#include "content/public/browser/browser_message_filter.h"
10
11struct PeerConnectionInfo;
12
13namespace base {
14class ListValue;
15}  // namespace base
16
17namespace content {
18
19// This class is the host for PeerConnectionTracker in the browser process
20// managed by RenderProcessHostImpl. It receives PeerConnection events from
21// PeerConnectionTracker as IPC messages that it forwards to WebRTCInternals.
22// It also forwards browser process events to PeerConnectionTracker via IPC.
23class PeerConnectionTrackerHost : public BrowserMessageFilter,
24                                  public base::PowerObserver {
25 public:
26  PeerConnectionTrackerHost(int render_process_id);
27
28  // content::BrowserMessageFilter override.
29  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
30  virtual void OverrideThreadForMessage(const IPC::Message& message,
31                                        BrowserThread::ID* thread) OVERRIDE;
32  virtual void OnChannelConnected(int32 peer_pid) OVERRIDE;
33  virtual void OnChannelClosing() OVERRIDE;
34
35  // base::PowerObserver override.
36  virtual void OnSuspend() OVERRIDE;
37
38 protected:
39  virtual ~PeerConnectionTrackerHost();
40
41 private:
42  // Handlers for peer connection messages coming from the renderer.
43  void OnAddPeerConnection(const PeerConnectionInfo& info);
44  void OnRemovePeerConnection(int lid);
45  void OnUpdatePeerConnection(
46      int lid, const std::string& type, const std::string& value);
47  void OnAddStats(int lid, const base::ListValue& value);
48  void OnGetUserMedia(const std::string& origin,
49                      bool audio,
50                      bool video,
51                      const std::string& audio_constraints,
52                      const std::string& video_constraints);
53  void SendOnSuspendOnUIThread();
54
55  int render_process_id_;
56
57  DISALLOW_COPY_AND_ASSIGN(PeerConnectionTrackerHost);
58};
59
60}  // namespace content
61
62#endif  // CONTENT_BROWSER_RENDERER_HOST_MEDIA_PEER_CONNECTION_TRACKER_HOST_H_
63