| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2011 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_DEBUGGER_DEVTOOLS_REMOTE_MESSAGE_H_ | |
| 6 #define CHROME_BROWSER_DEBUGGER_DEVTOOLS_REMOTE_MESSAGE_H_ | |
| 7 #pragma once | |
| 8 | |
| 9 #include <string> | |
| 10 | |
| 11 #include "base/basictypes.h" | |
| 12 #include "base/hash_tables.h" | |
| 13 | |
| 14 // Contains DevTools protocol message header names | |
| 15 // and the Flags header bit field constants. | |
| 16 struct DevToolsRemoteMessageHeaders { | |
| 17 // The content length in decimal. | |
| 18 static const char kContentLength[]; | |
| 19 // The tool that should handle the message. | |
| 20 static const char kTool[]; | |
| 21 // The destination (inspected) object identifier (if any), like a TabID. | |
| 22 static const char kDestination[]; | |
| 23 }; | |
| 24 | |
| 25 // Represents a Chrome remote debugging protocol message transferred | |
| 26 // over the wire between the remote debugger and a Chrome instance. | |
| 27 // Consider using DevToolsRemoteMessageBuilder (see end of this file) for easy | |
| 28 // construction of outbound (Chrome -> remote debugger) messages. | |
| 29 class DevToolsRemoteMessage { | |
| 30 public: | |
| 31 typedef base::hash_map<std::string, std::string> HeaderMap; | |
| 32 | |
| 33 // Use this as the second parameter in a |GetHeader| call to use | |
| 34 // an empty string as the default value. | |
| 35 static const char kEmptyValue[]; | |
| 36 | |
| 37 // Constructs an empty message with no content or headers. | |
| 38 DevToolsRemoteMessage(); | |
| 39 DevToolsRemoteMessage(const HeaderMap& headers, const std::string& content); | |
| 40 virtual ~DevToolsRemoteMessage(); | |
| 41 | |
| 42 const HeaderMap& headers() const { | |
| 43 return header_map_; | |
| 44 } | |
| 45 | |
| 46 const std::string& content() const { | |
| 47 return content_; | |
| 48 } | |
| 49 | |
| 50 int content_length() const { | |
| 51 return content_.size(); | |
| 52 } | |
| 53 | |
| 54 const std::string tool() const { | |
| 55 return GetHeaderWithEmptyDefault(DevToolsRemoteMessageHeaders::kTool); | |
| 56 } | |
| 57 | |
| 58 const std::string destination() const { | |
| 59 return GetHeaderWithEmptyDefault( | |
| 60 DevToolsRemoteMessageHeaders::kDestination); | |
| 61 } | |
| 62 | |
| 63 // Returns the header value providing default_value if the header is absent. | |
| 64 const std::string GetHeader(const std::string& header_name, | |
| 65 const std::string& default_value) const; | |
| 66 | |
| 67 // Returns the header value providing an empty string if the header is absent. | |
| 68 const std::string GetHeaderWithEmptyDefault( | |
| 69 const std::string& header_name) const; | |
| 70 | |
| 71 // Returns a string representation of the message useful for the transfer to | |
| 72 // the remote debugger. | |
| 73 const std::string ToString() const; | |
| 74 | |
| 75 private: | |
| 76 HeaderMap header_map_; | |
| 77 std::string content_; | |
| 78 // Cannot DISALLOW_COPY_AND_ASSIGN(DevToolsRemoteMessage) since it is passed | |
| 79 // as an IPC message argument and needs to be copied. | |
| 80 }; | |
| 81 | |
| 82 // Facilitates easy construction of outbound (Chrome -> remote debugger) | |
| 83 // DevToolsRemote messages. | |
| 84 class DevToolsRemoteMessageBuilder { | |
| 85 public: | |
| 86 // A singleton instance getter. | |
| 87 static DevToolsRemoteMessageBuilder& instance(); | |
| 88 // Creates a message given the certain header values and a payload. | |
| 89 DevToolsRemoteMessage* Create(const std::string& tool, | |
| 90 const std::string& destination, | |
| 91 const std::string& payload); | |
| 92 | |
| 93 private: | |
| 94 DevToolsRemoteMessageBuilder() {} | |
| 95 virtual ~DevToolsRemoteMessageBuilder() {} | |
| 96 DISALLOW_COPY_AND_ASSIGN(DevToolsRemoteMessageBuilder); | |
| 97 }; | |
| 98 | |
| 99 #endif // CHROME_BROWSER_DEBUGGER_DEVTOOLS_REMOTE_MESSAGE_H_ | |
| OLD | NEW |