Merge branch 'master' of https://github.com/MaxWhere/electron into MaxWhere-master
[platform/framework/web/crosswalk-tizen.git] / atom / browser / node_debugger.h
1 // Copyright (c) 2014 GitHub, Inc.
2 // Use of this source code is governed by the MIT license that can be
3 // found in the LICENSE file.
4
5 #ifndef ATOM_BROWSER_NODE_DEBUGGER_H_
6 #define ATOM_BROWSER_NODE_DEBUGGER_H_
7
8 #include <string>
9
10 #include "base/memory/scoped_ptr.h"
11 #include "base/memory/weak_ptr.h"
12 #include "base/threading/thread.h"
13 #include "net/test/embedded_test_server/stream_listen_socket.h"
14 #include "v8/include/v8-debug.h"
15 #include "vendor/node/deps/uv/include/uv.h"
16
17 namespace atom {
18
19 // Add support for node's "--debug" switch.
20 class NodeDebugger : public net::test_server::StreamListenSocket::Delegate {
21  public:
22   explicit NodeDebugger(v8::Isolate* isolate);
23   virtual ~NodeDebugger();
24
25   bool IsRunning() const;
26
27  private:
28   void StartServer(int port);
29   void CloseSession();
30   void OnMessage(const std::string& message);
31   void SendMessage(const std::string& message);
32   void SendConnectMessage();
33
34   static void ProcessMessageInUI(uv_async_t* handle);
35
36   static void DebugMessageHandler(const v8::Debug::Message& message);
37
38   // net::test_server::StreamListenSocket::Delegate:
39   void DidAccept(
40       net::test_server::StreamListenSocket* server,
41       scoped_ptr<net::test_server::StreamListenSocket> socket) override;
42   void DidRead(net::test_server::StreamListenSocket* socket,
43                const char* data,
44                int len) override;
45   void DidClose(net::test_server::StreamListenSocket* socket) override;
46
47   v8::Isolate* isolate_;
48
49   uv_async_t weak_up_ui_handle_;
50
51   base::Thread thread_;
52   scoped_ptr<net::test_server::StreamListenSocket> server_;
53   scoped_ptr<net::test_server::StreamListenSocket> accepted_socket_;
54
55   std::string buffer_;
56   int content_length_;
57
58   base::WeakPtrFactory<NodeDebugger> weak_factory_;
59
60   DISALLOW_COPY_AND_ASSIGN(NodeDebugger);
61 };
62
63 }  // namespace atom
64
65 #endif  // ATOM_BROWSER_NODE_DEBUGGER_H_