summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/extensions/api/serial/serial_api.cc29
-rw-r--r--chrome/browser/extensions/api/serial/serial_api.h8
-rw-r--r--chrome/browser/extensions/api/serial/serial_connection.cc2
-rw-r--r--chrome/browser/extensions/api/serial/serial_connection.h8
-rw-r--r--chrome/browser/extensions/api/serial/serial_connection_posix.cc7
-rw-r--r--chrome/browser/extensions/api/serial/serial_connection_win.cc5
-rw-r--r--chrome/browser/extensions/api/socket/socket_api.cc2
-rw-r--r--chrome/common/extensions/api/experimental.serial.idl7
8 files changed, 55 insertions, 13 deletions
diff --git a/chrome/browser/extensions/api/serial/serial_api.cc b/chrome/browser/extensions/api/serial/serial_api.cc
index c99c456..93c4acc 100644
--- a/chrome/browser/extensions/api/serial/serial_api.cc
+++ b/chrome/browser/extensions/api/serial/serial_api.cc
@@ -101,9 +101,31 @@ bool SerialReadFunction::Respond() {
return true;
}
+SerialWriteFunction::SerialWriteFunction()
+ : connection_id_(-1), io_buffer_(NULL) {
+}
+
+SerialWriteFunction::~SerialWriteFunction() {
+}
+
bool SerialWriteFunction::Prepare() {
EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &connection_id_));
- EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, &data_));
+ base::ListValue* data_list_value = NULL;
+ EXTENSION_FUNCTION_VALIDATE(args_->GetList(1, &data_list_value));
+ size_t size = data_list_value->GetSize();
+ if (size != 0) {
+ io_buffer_ = new net::IOBufferWithSize(size);
+ uint8* data_buffer =
+ reinterpret_cast<uint8*>(io_buffer_->data());
+ for (size_t i = 0; i < size; ++i) {
+ int int_value = -1;
+ data_list_value->GetInteger(i, &int_value);
+ DCHECK(int_value < 256);
+ DCHECK(int_value >= 0);
+ uint8 truncated_int = static_cast<uint8>(int_value);
+ *data_buffer++ = truncated_int;
+ }
+ }
return true;
}
@@ -112,7 +134,10 @@ void SerialWriteFunction::Work() {
SerialConnection* serial_connection =
controller()->GetSerialConnection(connection_id_);
if (serial_connection)
- bytes_written = serial_connection->Write(data_);
+ bytes_written = serial_connection->Write(io_buffer_, io_buffer_->size());
+ else
+ error_ = kSerialConnectionNotFoundError;
+
DictionaryValue* result = new DictionaryValue();
result->SetInteger(kBytesWrittenKey, bytes_written);
result_.reset(result);
diff --git a/chrome/browser/extensions/api/serial/serial_api.h b/chrome/browser/extensions/api/serial/serial_api.h
index f81ad90..a70527f 100644
--- a/chrome/browser/extensions/api/serial/serial_api.h
+++ b/chrome/browser/extensions/api/serial/serial_api.h
@@ -8,7 +8,9 @@
#include <string>
+#include "base/memory/ref_counted.h"
#include "chrome/browser/extensions/api/api_function.h"
+#include "net/base/io_buffer.h"
namespace extensions {
@@ -55,6 +57,10 @@ class SerialReadFunction : public AsyncIOAPIFunction {
};
class SerialWriteFunction : public AsyncIOAPIFunction {
+ public:
+ SerialWriteFunction();
+ virtual ~SerialWriteFunction();
+
protected:
virtual bool Prepare() OVERRIDE;
virtual void Work() OVERRIDE;
@@ -62,7 +68,7 @@ class SerialWriteFunction : public AsyncIOAPIFunction {
private:
int connection_id_;
- std::string data_;
+ scoped_refptr<net::IOBufferWithSize> io_buffer_;
DECLARE_EXTENSION_FUNCTION_NAME("experimental.serial.write")
};
diff --git a/chrome/browser/extensions/api/serial/serial_connection.cc b/chrome/browser/extensions/api/serial/serial_connection.cc
index 141d2a0..ed9314b 100644
--- a/chrome/browser/extensions/api/serial/serial_connection.cc
+++ b/chrome/browser/extensions/api/serial/serial_connection.cc
@@ -8,6 +8,8 @@
namespace extensions {
+const char kSerialConnectionNotFoundError[] = "Serial conenction not found";
+
// static
bool SerialConnection::DoesPortExist(const StringSet& name_set,
const std::string& port_name) {
diff --git a/chrome/browser/extensions/api/serial/serial_connection.h b/chrome/browser/extensions/api/serial/serial_connection.h
index 0f2686b..d62189d 100644
--- a/chrome/browser/extensions/api/serial/serial_connection.h
+++ b/chrome/browser/extensions/api/serial/serial_connection.h
@@ -10,13 +10,17 @@
#include <string>
#include "base/gtest_prod_util.h"
+#include "base/memory/ref_counted.h"
#include "chrome/browser/extensions/api/api_resource.h"
+#include "net/base/io_buffer.h"
FORWARD_DECLARE_TEST(SerialConnectionTest, ValidPortNamePatterns);
FORWARD_DECLARE_TEST(SerialConnectionTest, InvalidPortNamePatterns);
namespace extensions {
+extern const char kSerialConnectionNotFoundError[];
+
class APIResourceEventNotifier;
// Encapsulates an open serial port. Platform-specific implementations are in
@@ -30,8 +34,8 @@ class SerialConnection : public APIResource {
bool Open();
void Close();
- int Read(unsigned char* byte);
- int Write(const std::string& data);
+ int Read(uint8* byte);
+ int Write(scoped_refptr<net::IOBuffer> io_buffer, int byte_count);
typedef std::set<std::string> StringSet;
diff --git a/chrome/browser/extensions/api/serial/serial_connection_posix.cc b/chrome/browser/extensions/api/serial/serial_connection_posix.cc
index be06687..4e1fa5d 100644
--- a/chrome/browser/extensions/api/serial/serial_connection_posix.cc
+++ b/chrome/browser/extensions/api/serial/serial_connection_posix.cc
@@ -42,12 +42,13 @@ void SerialConnection::Close() {
}
}
-int SerialConnection::Read(unsigned char* byte) {
+int SerialConnection::Read(uint8* byte) {
return read(fd_, byte, 1);
}
-int SerialConnection::Write(const std::string& data) {
- return write(fd_, data.c_str(), data.length());
+int SerialConnection::Write(scoped_refptr<net::IOBuffer> io_buffer,
+ int byte_count) {
+ return write(fd_, io_buffer.get(), byte_count);
}
// static
diff --git a/chrome/browser/extensions/api/serial/serial_connection_win.cc b/chrome/browser/extensions/api/serial/serial_connection_win.cc
index ddee0a6..406c6aa1 100644
--- a/chrome/browser/extensions/api/serial/serial_connection_win.cc
+++ b/chrome/browser/extensions/api/serial/serial_connection_win.cc
@@ -26,12 +26,13 @@ void SerialConnection::Close() {
// TODO(miket): implement
}
-int SerialConnection::Read(unsigned char* byte) {
+int SerialConnection::Read(uint8* byte) {
// TODO(miket): implement
return -1;
}
-int SerialConnection::Write(const std::string& data) {
+int SerialConnection::Write(scoped_refptr<net::IOBuffer> io_buffer,
+ int byte_count) {
// TODO(miket): implement
return -1;
}
diff --git a/chrome/browser/extensions/api/socket/socket_api.cc b/chrome/browser/extensions/api/socket/socket_api.cc
index 08e17c9..9e741b6 100644
--- a/chrome/browser/extensions/api/socket/socket_api.cc
+++ b/chrome/browser/extensions/api/socket/socket_api.cc
@@ -165,7 +165,7 @@ SocketWriteFunction::~SocketWriteFunction() {
bool SocketWriteFunction::Prepare() {
EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &socket_id_));
- base::ListValue *data_list_value;
+ base::ListValue* data_list_value = NULL;
EXTENSION_FUNCTION_VALIDATE(args_->GetList(1, &data_list_value));
size_t size = data_list_value->GetSize();
diff --git a/chrome/common/extensions/api/experimental.serial.idl b/chrome/common/extensions/api/experimental.serial.idl
index 49c564d..ebc6c06 100644
--- a/chrome/common/extensions/api/experimental.serial.idl
+++ b/chrome/common/extensions/api/experimental.serial.idl
@@ -21,7 +21,8 @@
// The data received. Warning: will probably become a blob or other
// appropriate binary-friendly type.
- DOMString message;
+ // TODO(miket): [instanceOf=ArrayBuffer]object data;
+ long[] data;
};
callback ReadCallback = void (ReadInfo readInfo);
@@ -56,8 +57,10 @@
// |connectionId| : The id of the connection.
// |data| : The string to write.
// |callback| : Called when the string has been written.
+ //
+ // TODO(miket): [instanceOf=ArrayBuffer]object data;
static void write(long connectionId,
- DOMString data,
+ long[] data,
WriteCallback callback);
};