Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / remoting / protocol / stream_channel_factory.h
1 // Copyright (c) 2012 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_STREAM_CHANNEL_FACTORY_H_
6 #define REMOTING_PROTOCOL_STREAM_CHANNEL_FACTORY_H_
7
8 #include <string>
9
10 #include "base/callback.h"
11 #include "base/memory/scoped_ptr.h"
12 #include "base/threading/non_thread_safe.h"
13
14 namespace net {
15 class Socket;
16 class StreamSocket;
17 }  // namespace net
18
19 namespace remoting {
20 namespace protocol {
21
22 class StreamChannelFactory : public base::NonThreadSafe {
23  public:
24   // TODO(sergeyu): Specify connection error code when channel
25   // connection fails.
26   typedef base::Callback<void(scoped_ptr<net::StreamSocket>)>
27       ChannelCreatedCallback;
28
29   StreamChannelFactory() {}
30
31   // Creates new channels and calls the |callback| when then new channel is
32   // created and connected. The |callback| is called with NULL if connection
33   // failed for any reason. Callback may be called synchronously, before the
34   // call returns. All channels must be destroyed, and CancelChannelCreation()
35   // called for any pending channels, before the factory is destroyed.
36   virtual void CreateChannel(const std::string& name,
37                              const ChannelCreatedCallback& callback) = 0;
38
39   // Cancels a pending CreateChannel() operation for the named channel. If the
40   // channel creation already completed then canceling it has no effect. When
41   // shutting down this method must be called for each channel pending creation.
42   virtual void CancelChannelCreation(const std::string& name) = 0;
43
44  protected:
45   virtual ~StreamChannelFactory() {}
46
47  private:
48   DISALLOW_COPY_AND_ASSIGN(StreamChannelFactory);
49 };
50
51 }  // namespace protocol
52 }  // namespace remoting
53
54 #endif  // REMOTING_PROTOCOL_STREAM_CHANNEL_FACTORY_H_