• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 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 REMOTING_PROTOCOL_MONITORED_VIDEO_STUB_H_
6 #define REMOTING_PROTOCOL_MONITORED_VIDEO_STUB_H_
7 
8 #include "base/callback.h"
9 #include "base/threading/thread_checker.h"
10 #include "base/timer/timer.h"
11 #include "remoting/protocol/video_stub.h"
12 
13 namespace base {
14 class ThreadChecker;
15 } // namespace base
16 
17 namespace remoting {
18 namespace protocol {
19 
20 // MonitoredVideoStub is responsible for notifying the event handler if no
21 // frames have been received within |connectivity_check_delay|.
22 // The implementation uses the decorator pattern in which the MonitoredVideoStub
23 // implements the same interface as the VideoStub. It overrides the
24 // ProcessVideoPacket function to provide notification to the client when the
25 // video channel is connected and forward the packet to the underlying
26 // VideoStub. Multiple decorators can be stacked on top of each other if more
27 // functionality is needed in the future.
28 class MonitoredVideoStub : public VideoStub {
29  public:
30   // Callback to be called when channel state changes.  The Callback should not
31   // destroy the MonitoredVideoStub object.
32   typedef base::Callback<void(bool connected)> ChannelStateCallback;
33 
34   static const int kConnectivityCheckDelaySeconds = 2;
35 
36   MonitoredVideoStub(
37       VideoStub* video_stub,
38       base::TimeDelta connectivity_check_delay,
39       const ChannelStateCallback& callback);
40   virtual ~MonitoredVideoStub();
41 
42   // VideoStub implementation.
43   virtual void ProcessVideoPacket(scoped_ptr<VideoPacket> packet,
44                                   const base::Closure& done) OVERRIDE;
45 
46  private:
47   void OnConnectivityCheckTimeout();
48   void NotifyChannelState(bool connected);
49 
50   VideoStub* video_stub_;
51   ChannelStateCallback callback_;
52   base::ThreadChecker thread_checker_;
53   bool is_connected_;
54   base::DelayTimer<MonitoredVideoStub> connectivity_check_timer_;
55 
56   DISALLOW_COPY_AND_ASSIGN(MonitoredVideoStub);
57 };
58 
59 }  // namespace protocol
60 }  // namespace remoting
61 
62 #endif  // REMOTING_PROTOCOL_MONITORED_VIDEO_STUB_H_
63