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.
5 #ifndef REMOTING_HOST_HOST_EXTENSION_SESSION_H_
6 #define REMOTING_HOST_HOST_EXTENSION_SESSION_H_
8 #include "base/memory/scoped_ptr.h"
11 class DesktopCapturer
;
16 class ClientSessionControl
;
20 class ExtensionMessage
;
22 } // namespace protocol
24 // Created by an |HostExtension| to store |ClientSession| specific state, and to
25 // handle extension messages.
26 class HostExtensionSession
{
28 virtual ~HostExtensionSession() {}
30 // Hook functions called when the video pipeline is being (re)constructed.
31 // Implementations will receive these calls only if they express the need to
32 // modify the pipeline (see below). They may replace or wrap |capturer| and/or
33 // |encoder|, e.g. to filter video frames in some way.
34 // If either |capturer| or |encoder| are reset then the video pipeline is not
36 virtual void OnCreateVideoCapturer(
37 scoped_ptr
<webrtc::DesktopCapturer
>* capturer
);
38 virtual void OnCreateVideoEncoder(scoped_ptr
<VideoEncoder
>* encoder
);
40 // Must return true if the HostExtensionSession needs the opportunity to
41 // modify the video pipeline.
42 virtual bool ModifiesVideoPipeline() const;
44 // Called when the host receives an |ExtensionMessage| for the |ClientSession|
45 // associated with this |HostExtensionSession|.
46 // It returns |true| if the message was handled, and |false| otherwise.
47 virtual bool OnExtensionMessage(
48 ClientSessionControl
* client_session_control
,
49 protocol::ClientStub
* client_stub
,
50 const protocol::ExtensionMessage
& message
) = 0;
53 } // namespace remoting
55 #endif // REMOTING_HOST_HOST_EXTENSION_SESSION_H_