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.*). 17 class 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