1// Copyright (c) 2013 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 CHROME_BROWSER_DEVTOOLS_DEVTOOLS_PROTOCOL_H_
6#define CHROME_BROWSER_DEVTOOLS_DEVTOOLS_PROTOCOL_H_
7
8#include <string>
9
10#include "base/basictypes.h"
11#include "base/compiler_specific.h"
12#include "base/values.h"
13
14// Utility class for processing DevTools remote debugging messages.
15// This is a stripped down clone of content::DevTools which is not accessible
16// from chrome component (see content/browser/devtools/devtools_protocol.*).
17class DevToolsProtocol {
18 public:
19  class Message {
20   public:
21    virtual ~Message();
22
23    std::string method() { return method_; }
24    base::DictionaryValue* params() { return params_.get(); }
25
26   protected:
27    // Takes ownership of |params|.
28    Message(const std::string& method, base::DictionaryValue* params);
29
30    std::string method_;
31    scoped_ptr<base::DictionaryValue> params_;
32
33   private:
34    DISALLOW_COPY_AND_ASSIGN(Message);
35  };
36
37  class Command : public Message {
38   public:
39    // Takes ownership of |params|.
40    Command(int id, const std::string& method, base::DictionaryValue* params);
41    virtual ~Command();
42
43    int id() { return id_; }
44    std::string Serialize();
45
46   private:
47    int id_;
48
49    DISALLOW_COPY_AND_ASSIGN(Command);
50  };
51
52  class Response {
53   public:
54    virtual ~Response();
55
56    int id() { return id_; }
57    int error_code() { return error_code_; }
58
59   private:
60    friend class DevToolsProtocol;
61
62    Response(int id, int error_code);
63    int id_;
64    int error_code_;
65
66    DISALLOW_COPY_AND_ASSIGN(Response);
67  };
68
69  class Notification : public Message {
70   public:
71    virtual ~Notification();
72
73   private:
74    friend class DevToolsProtocol;
75
76    // Takes ownership of |params|.
77    Notification(const std::string& method,
78                 base::DictionaryValue* params);
79
80    DISALLOW_COPY_AND_ASSIGN(Notification);
81  };
82
83  // Result ownership is passed to the caller.
84  static Notification* ParseNotification(const std::string& json);
85
86  // Result ownership is passed to the caller.
87  static Response* ParseResponse(const std::string& json);
88
89 private:
90
91  DevToolsProtocol() {}
92  ~DevToolsProtocol() {}
93};
94
95#endif  // CHROME_BROWSER_DEVTOOLS_DEVTOOLS_PROTOCOL_H_
96