Upstream version 11.40.271.0
[platform/framework/web/crosswalk.git] / src / extensions / browser / api / copresence_socket / copresence_socket_api.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 EXTENSIONS_BROWSER_API_COPRESENCE_SOCKET_COPRESENCE_SOCKET_API_H_
6 #define EXTENSIONS_BROWSER_API_COPRESENCE_SOCKET_COPRESENCE_SOCKET_API_H_
7
8 #include <map>
9 #include <string>
10 #include <vector>
11
12 #include "base/macros.h"
13 #include "base/memory/ref_counted.h"
14 #include "base/memory/scoped_ptr.h"
15 #include "extensions/browser/api/api_resource_manager.h"
16 #include "extensions/browser/browser_context_keyed_api_factory.h"
17 #include "extensions/browser/extension_function.h"
18 #include "extensions/browser/extension_function_histogram_value.h"
19
20 namespace copresence_sockets {
21 class CopresenceSocket;
22 }
23
24 namespace net {
25 class IOBuffer;
26 }
27
28 namespace extensions {
29
30 class CopresencePeerResource;
31 class CopresenceSocketResource;
32
33 class CopresenceSocketFunction : public UIThreadExtensionFunction {
34  public:
35   CopresenceSocketFunction();
36
37   void DispatchOnConnectedEvent(
38       int peer_id,
39       scoped_ptr<copresence_sockets::CopresenceSocket> socket);
40
41  protected:
42   ~CopresenceSocketFunction() override;
43
44   // Override this and do actual work here.
45   virtual ExtensionFunction::ResponseAction Execute() = 0;
46
47   // Takes ownership of peer.
48   int AddPeer(CopresencePeerResource* peer);
49   // Takes ownership of socket.
50   int AddSocket(CopresenceSocketResource* socket);
51
52   // Takes ownership of peer.
53   void ReplacePeer(const std::string& extension_id,
54                    int peer_id,
55                    CopresencePeerResource* peer);
56
57   CopresencePeerResource* GetPeer(int peer_id);
58   CopresenceSocketResource* GetSocket(int socket_id);
59
60   void RemovePeer(int peer_id);
61   void RemoveSocket(int socket_id);
62
63   // ExtensionFunction overrides:
64   ExtensionFunction::ResponseAction Run() override;
65
66  private:
67   void Initialize();
68
69   void OnDataReceived(int socket_id,
70                       const scoped_refptr<net::IOBuffer>& buffer,
71                       int size);
72   void DispatchOnReceiveEvent(int socket_id, const std::string& data);
73
74   ApiResourceManager<CopresencePeerResource>* peers_manager_;
75   ApiResourceManager<CopresenceSocketResource>* sockets_manager_;
76 };
77
78 class CopresenceSocketCreatePeerFunction : public CopresenceSocketFunction {
79  public:
80   DECLARE_EXTENSION_FUNCTION("copresenceSocket.createPeer",
81                              COPRESENCESOCKET_CREATEPEER);
82
83  protected:
84   ~CopresenceSocketCreatePeerFunction() override {}
85   ExtensionFunction::ResponseAction Execute() override;
86
87  private:
88   void OnCreated(int peer_id, const std::string& locator);
89 };
90
91 class CopresenceSocketDestroyPeerFunction : public CopresenceSocketFunction {
92  public:
93   DECLARE_EXTENSION_FUNCTION("copresenceSocket.destroyPeer",
94                              COPRESENCESOCKET_DESTROYPEER);
95
96  protected:
97   ~CopresenceSocketDestroyPeerFunction() override {}
98   ExtensionFunction::ResponseAction Execute() override;
99 };
100
101 class CopresenceSocketSendFunction : public CopresenceSocketFunction {
102  public:
103   DECLARE_EXTENSION_FUNCTION("copresenceSocket.send", COPRESENCESOCKET_SEND);
104
105  protected:
106   ~CopresenceSocketSendFunction() override {}
107   ExtensionFunction::ResponseAction Execute() override;
108 };
109
110 class CopresenceSocketDisconnectFunction : public CopresenceSocketFunction {
111  public:
112   DECLARE_EXTENSION_FUNCTION("copresenceSocket.disconnect",
113                              COPRESENCESOCKET_DISCONNECT);
114
115  protected:
116   ~CopresenceSocketDisconnectFunction() override {}
117   ExtensionFunction::ResponseAction Execute() override;
118 };
119
120 }  // namespace extensions
121
122 #endif  // EXTENSIONS_BROWSER_API_COPRESENCE_SOCKET_COPRESENCE_SOCKET_API_H_