Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / remoting / protocol / monitored_video_stub.h
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   ~MonitoredVideoStub() override;
41
42   // VideoStub implementation.
43   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_