| // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_DEBUGGER_DEVTOOLS_REMOTE_MESSAGE_H_ |
| #define CHROME_BROWSER_DEBUGGER_DEVTOOLS_REMOTE_MESSAGE_H_ |
| #pragma once |
| |
| #include <string> |
| |
| #include "base/basictypes.h" |
| #include "base/hash_tables.h" |
| |
| // Contains DevTools protocol message header names |
| // and the Flags header bit field constants. |
| struct DevToolsRemoteMessageHeaders { |
| // The content length in decimal. |
| static const char kContentLength[]; |
| // The tool that should handle the message. |
| static const char kTool[]; |
| // The destination (inspected) object identifier (if any), like a TabID. |
| static const char kDestination[]; |
| }; |
| |
| // Represents a Chrome remote debugging protocol message transferred |
| // over the wire between the remote debugger and a Chrome instance. |
| // Consider using DevToolsRemoteMessageBuilder (see end of this file) for easy |
| // construction of outbound (Chrome -> remote debugger) messages. |
| class DevToolsRemoteMessage { |
| public: |
| typedef base::hash_map<std::string, std::string> HeaderMap; |
| |
| // Use this as the second parameter in a |GetHeader| call to use |
| // an empty string as the default value. |
| static const char kEmptyValue[]; |
| |
| // Constructs an empty message with no content or headers. |
| DevToolsRemoteMessage(); |
| DevToolsRemoteMessage(const HeaderMap& headers, const std::string& content); |
| virtual ~DevToolsRemoteMessage(); |
| |
| const HeaderMap& headers() const { |
| return header_map_; |
| } |
| |
| const std::string& content() const { |
| return content_; |
| } |
| |
| int content_length() const { |
| return content_.size(); |
| } |
| |
| const std::string tool() const { |
| return GetHeaderWithEmptyDefault(DevToolsRemoteMessageHeaders::kTool); |
| } |
| |
| const std::string destination() const { |
| return GetHeaderWithEmptyDefault( |
| DevToolsRemoteMessageHeaders::kDestination); |
| } |
| |
| // Returns the header value providing default_value if the header is absent. |
| const std::string GetHeader(const std::string& header_name, |
| const std::string& default_value) const; |
| |
| // Returns the header value providing an empty string if the header is absent. |
| const std::string GetHeaderWithEmptyDefault( |
| const std::string& header_name) const; |
| |
| // Returns a string representation of the message useful for the transfer to |
| // the remote debugger. |
| const std::string ToString() const; |
| |
| private: |
| HeaderMap header_map_; |
| std::string content_; |
| // Cannot DISALLOW_COPY_AND_ASSIGN(DevToolsRemoteMessage) since it is passed |
| // as an IPC message argument and needs to be copied. |
| }; |
| |
| // Facilitates easy construction of outbound (Chrome -> remote debugger) |
| // DevToolsRemote messages. |
| class DevToolsRemoteMessageBuilder { |
| public: |
| // A singleton instance getter. |
| static DevToolsRemoteMessageBuilder& instance(); |
| // Creates a message given the certain header values and a payload. |
| DevToolsRemoteMessage* Create(const std::string& tool, |
| const std::string& destination, |
| const std::string& payload); |
| |
| private: |
| DevToolsRemoteMessageBuilder() {} |
| virtual ~DevToolsRemoteMessageBuilder() {} |
| DISALLOW_COPY_AND_ASSIGN(DevToolsRemoteMessageBuilder); |
| }; |
| |
| #endif // CHROME_BROWSER_DEBUGGER_DEVTOOLS_REMOTE_MESSAGE_H_ |