Commit 4f22b80a authored by Pavel Feldman's avatar Pavel Feldman Committed by Commit Bot

DevTools: add the missing binary implementation for the browser protocol layer.

Change-Id: I5aaebd553669d9b6594105edd4ba18f6b4701d20
Reviewed-on: https://chromium-review.googlesource.com/c/1331037
Commit-Queue: Pavel Feldman <pfeldman@chromium.org>
Reviewed-by: default avatarDmitry Gozman <dgozman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#607357}
parent 531370c7
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
#include "chrome/browser/devtools/protocol_string.h" #include "chrome/browser/devtools/protocol_string.h"
#include <utility>
#include "base/base64.h"
#include "base/json/json_reader.h" #include "base/json/json_reader.h"
#include "base/memory/ptr_util.h" #include "base/memory/ptr_util.h"
#include "base/strings/string16.h" #include "base/strings/string16.h"
...@@ -162,4 +164,42 @@ void StringBuilder::reserveCapacity(size_t capacity) { ...@@ -162,4 +164,42 @@ void StringBuilder::reserveCapacity(size_t capacity) {
string_.reserve(capacity); string_.reserve(capacity);
} }
Binary::Binary() : bytes_(new base::RefCountedBytes) {}
Binary::Binary(const Binary& binary) : bytes_(binary.bytes_) {}
Binary::Binary(scoped_refptr<base::RefCountedMemory> bytes) : bytes_(bytes) {}
Binary::~Binary() {}
String Binary::toBase64() const {
std::string encoded;
base::Base64Encode(
base::StringPiece(reinterpret_cast<const char*>(bytes_->front()),
bytes_->size()),
&encoded);
return encoded;
}
// static
Binary Binary::fromBase64(const String& base64, bool* success) {
std::string decoded;
*success = base::Base64Decode(base::StringPiece(base64), &decoded);
if (*success) {
return Binary::fromString(std::move(decoded));
}
return Binary();
}
// static
Binary Binary::fromRefCounted(scoped_refptr<base::RefCountedMemory> memory) {
return Binary(memory);
}
// static
Binary Binary::fromVector(std::vector<uint8_t> data) {
return Binary(base::RefCountedBytes::TakeVector(&data));
}
// static
Binary Binary::fromString(std::string data) {
return Binary(base::RefCountedString::TakeString(&data));
}
} // namespace protocol } // namespace protocol
...@@ -7,8 +7,11 @@ ...@@ -7,8 +7,11 @@
#include <memory> #include <memory>
#include <string> #include <string>
#include <vector>
#include "base/logging.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/ref_counted_memory.h"
#include "base/strings/string_number_conversions.h" #include "base/strings/string_number_conversions.h"
namespace base { namespace base {
...@@ -76,21 +79,31 @@ class StringUtil { ...@@ -76,21 +79,31 @@ class StringUtil {
static String builderToString(StringBuilder& builder) { static String builderToString(StringBuilder& builder) {
return builder.toString(); return builder.toString();
} }
static std::unique_ptr<protocol::Value> parseJSON(const String&); static std::unique_ptr<protocol::Value> parseJSON(const String&);
}; };
// A read-only sequence of uninterpreted bytes with reference-counted storage. // A read-only sequence of uninterpreted bytes with reference-counted storage.
// Though the templates for generating the protocol bindings reference
// this type, thus far it's not used in the Chrome layer, so we provide no
// implementation here and rely on the linker optimizing it away. If this
// changes, look to content/browser/devtools/protocol_string{.h,.cc} for
// inspiration.
class Binary { class Binary {
public: public:
const uint8_t* data() const; Binary(const Binary&);
size_t size() const; Binary();
~Binary();
const uint8_t* data() const { return bytes_->front(); }
size_t size() const { return bytes_->size(); }
scoped_refptr<base::RefCountedMemory> bytes() const { return bytes_; }
String toBase64() const; String toBase64() const;
static Binary fromBase64(const String& base64, bool* success); static Binary fromBase64(const String& base64, bool* success);
static Binary fromRefCounted(scoped_refptr<base::RefCountedMemory> memory);
static Binary fromVector(std::vector<uint8_t> data);
static Binary fromString(std::string data);
private:
explicit Binary(scoped_refptr<base::RefCountedMemory> bytes);
scoped_refptr<base::RefCountedMemory> bytes_;
}; };
std::unique_ptr<protocol::Value> toProtocolValue(const base::Value* value, std::unique_ptr<protocol::Value> toProtocolValue(const base::Value* value,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment