12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CONTENT_BROWSER_RENDERER_HOST_MEDIA_PEER_CONNECTION_TRACKER_HOST_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CONTENT_BROWSER_RENDERER_HOST_MEDIA_PEER_CONNECTION_TRACKER_HOST_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/power_monitor/power_observer.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/browser_message_filter.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct PeerConnectionInfo;
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base {
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ListValue;
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace base
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace content {
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This class is the host for PeerConnectionTracker in the browser process
2003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// managed by RenderProcessHostImpl. It receives PeerConnection events from
2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// PeerConnectionTracker as IPC messages that it forwards to WebRTCInternals.
2203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// It also forwards browser process events to PeerConnectionTracker via IPC.
2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class PeerConnectionTrackerHost : public BrowserMessageFilter,
2403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                  public base::PowerObserver {
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PeerConnectionTrackerHost(int render_process_id);
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // content::BrowserMessageFilter override.
29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OverrideThreadForMessage(const IPC::Message& message,
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                        BrowserThread::ID* thread) OVERRIDE;
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void OnChannelConnected(int32 peer_pid) OVERRIDE;
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void OnChannelClosing() OVERRIDE;
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // base::PowerObserver override.
3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void OnSuspend() OVERRIDE;
3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~PeerConnectionTrackerHost();
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Handlers for peer connection messages coming from the renderer.
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnAddPeerConnection(const PeerConnectionInfo& info);
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnRemovePeerConnection(int lid);
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnUpdatePeerConnection(
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      int lid, const std::string& type, const std::string& value);
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnAddStats(int lid, const base::ListValue& value);
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnGetUserMedia(const std::string& origin,
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                      bool audio,
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                      bool video,
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                      const std::string& audio_constraints,
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                      const std::string& video_constraints);
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void SendOnSuspendOnUIThread();
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int render_process_id_;
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PeerConnectionTrackerHost);
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace content
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // CONTENT_BROWSER_RENDERER_HOST_MEDIA_PEER_CONNECTION_TRACKER_HOST_H_
63