Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6089)

Unified Diff: chrome/browser/extensions/api/socket/socket.cc

Issue 10095020: Allow socket API to send binary data. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Jeremy's judgments. Antonits. Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/extensions/api/socket/socket.h ('k') | chrome/browser/extensions/api/socket/socket_api.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/extensions/api/socket/socket.cc
diff --git a/chrome/browser/extensions/api/socket/socket.cc b/chrome/browser/extensions/api/socket/socket.cc
index 9dd51ce1cf5fc827a8dfb5f4cbec967bbd3c87a7..60e57b7b1b867d9be7e4cc9f7c0c32b4b704c64b 100644
--- a/chrome/browser/extensions/api/socket/socket.cc
+++ b/chrome/browser/extensions/api/socket/socket.cc
@@ -18,8 +18,7 @@ Socket::Socket(const std::string& address, int port,
: APIResource(APIResource::SocketResource, event_notifier),
address_(address),
port_(port),
- is_connected_(false),
- read_buffer_(new net::IOBufferWithSize(kMaxRead)) {
+ is_connected_(false) {
}
Socket::~Socket() {
@@ -27,47 +26,34 @@ Socket::~Socket() {
DCHECK(!is_connected_);
}
-void Socket::OnDataRead(int result) {
- std::string message;
- if (result >= 0)
- message = std::string(read_buffer_->data(), result);
- event_notifier()->OnDataRead(result, message);
+void Socket::OnDataRead(scoped_refptr<net::IOBuffer> io_buffer, int result) {
+ // OnDataRead will take ownership of data_value.
+ ListValue* data_value = new ListValue();
+ if (result >= 0) {
+ size_t bytes_size = static_cast<size_t>(result);
+ const char* io_buffer_start = io_buffer->data();
+ for (size_t i = 0; i < bytes_size; ++i) {
+ data_value->Set(i, Value::CreateIntegerValue(io_buffer_start[i]));
+ }
+ }
+ event_notifier()->OnDataRead(result, data_value);
}
void Socket::OnWriteComplete(int result) {
event_notifier()->OnWriteComplete(result);
}
-std::string Socket::Read() {
- int result = socket()->Read(
- read_buffer_, kMaxRead,
- base::Bind(&Socket::OnDataRead, base::Unretained(this)));
- if (result == net::ERR_IO_PENDING)
- return "";
- if (result < 0)
- return "";
- return std::string(read_buffer_->data(), result);
+int Socket::Read(scoped_refptr<net::IOBuffer> io_buffer, int io_buffer_len) {
+ return socket()->Read(
+ io_buffer.get(),
+ io_buffer_len,
+ base::Bind(&Socket::OnDataRead, base::Unretained(this), io_buffer));
}
-int Socket::Write(const std::string& message) {
- int length = message.length();
- scoped_refptr<net::StringIOBuffer> io_buffer(
- new net::StringIOBuffer(message));
- scoped_refptr<net::DrainableIOBuffer> buffer(
- new net::DrainableIOBuffer(io_buffer, length));
-
- int bytes_sent = 0;
- while (buffer->BytesRemaining()) {
- int result = socket()->Write(
- buffer, buffer->BytesRemaining(),
- base::Bind(&Socket::OnWriteComplete, base::Unretained(this)));
- if (result <= 0)
- // We pass all errors, including ERROR_IO_PENDING, back to the caller.
- return bytes_sent > 0 ? bytes_sent : result;
- bytes_sent += result;
- buffer->DidConsume(result);
- }
- return bytes_sent;
+int Socket::Write(scoped_refptr<net::IOBuffer> io_buffer, int byte_count) {
+ return socket()->Write(
+ io_buffer.get(), byte_count,
+ base::Bind(&Socket::OnWriteComplete, base::Unretained(this)));
}
} // namespace extensions
« no previous file with comments | « chrome/browser/extensions/api/socket/socket.h ('k') | chrome/browser/extensions/api/socket/socket_api.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698