13345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/debugger/devtools_remote_message.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/string_number_conversions.h"
83345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char DevToolsRemoteMessageHeaders::kContentLength[] = "Content-Length";
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char DevToolsRemoteMessageHeaders::kTool[] = "Tool";
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char DevToolsRemoteMessageHeaders::kDestination[] = "Destination";
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char DevToolsRemoteMessage::kEmptyValue[] = "";
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochDevToolsRemoteMessageBuilder& DevToolsRemoteMessageBuilder::instance() {
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static DevToolsRemoteMessageBuilder instance_;
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return instance_;
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
20731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickDevToolsRemoteMessage::DevToolsRemoteMessage() {}
21731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
22731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickDevToolsRemoteMessage::DevToolsRemoteMessage(const HeaderMap& headers,
23731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                                             const std::string& content)
24731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    : header_map_(headers),
25731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      content_(content) {
26731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}
27731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
28731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickDevToolsRemoteMessage::~DevToolsRemoteMessage() {}
29731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst std::string DevToolsRemoteMessage::GetHeader(
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const std::string& header_name,
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const std::string& default_value) const {
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  HeaderMap::const_iterator it = header_map_.find(header_name);
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (it == header_map_.end()) {
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return default_value;
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return it->second;
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst std::string DevToolsRemoteMessage::GetHeaderWithEmptyDefault(
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const std::string& header_name) const {
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return GetHeader(header_name, DevToolsRemoteMessage::kEmptyValue);
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst std::string DevToolsRemoteMessage::ToString() const {
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string result;
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  for (HeaderMap::const_iterator it = header_map_.begin(),
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      end = header_map_.end(); it != end; ++it) {
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    result.append(it->first).append(":").append(it->second).append("\r\n");
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  result.append("\r\n").append(content_);
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return result;
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochDevToolsRemoteMessage* DevToolsRemoteMessageBuilder::Create(
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const std::string& tool,
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const std::string& destination,
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const std::string& content) {
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DevToolsRemoteMessage::HeaderMap headers;
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  headers[DevToolsRemoteMessageHeaders::kContentLength] =
613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      base::IntToString(content.size());
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  headers[DevToolsRemoteMessageHeaders::kTool] = tool;
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  headers[DevToolsRemoteMessageHeaders::kDestination] = destination;
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return new DevToolsRemoteMessage(headers, content);
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
66