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

Unified Diff: chrome/browser/extensions/api/serial/serial_api.cc

Issue 10827123: Add serial bulk reads. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge help. Created 8 years, 5 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 | « no previous file | chrome/browser/extensions/api/serial/serial_apitest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/extensions/api/serial/serial_api.cc
diff --git a/chrome/browser/extensions/api/serial/serial_api.cc b/chrome/browser/extensions/api/serial/serial_api.cc
index 80a2646bb8d9063dc2d4cb0e437f6a17122f857d..6a5e173b861ca0f6fa48a01bb3d638e83b0f234e 100644
--- a/chrome/browser/extensions/api/serial/serial_api.cc
+++ b/chrome/browser/extensions/api/serial/serial_api.cc
@@ -18,6 +18,7 @@ const char kConnectionIdKey[] = "connectionId";
const char kPortsKey[] = "ports";
const char kDataKey[] = "data";
const char kBytesReadKey[] = "bytesRead";
+const char kBytesToReadKey[] = "bytesToRead";
const char kBytesWrittenKey[] = "bytesWritten";
const char kBitrateKey[] = "bitrate";
const char kOptionsKey[] = "options";
@@ -29,6 +30,8 @@ const char kCtsKey[] = "cts";
const char kErrorGetControlSignalsFailed[] = "Failed to get control signals.";
const char kErrorSetControlSignalsFailed[] = "Failed to set control signals.";
+const char kSerialReadInvalidBytesToRead[] = "Number of bytes to read must "
+ "be a positive number less than 1,048,576.";
SerialAsyncApiFunction::SerialAsyncApiFunction()
: manager_(NULL) {
@@ -196,16 +199,22 @@ bool SerialReadFunction::Prepare() {
params_ = api::experimental_serial::Read::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(params_.get());
+ if (params_->bytes_to_read <= 0 || params_->bytes_to_read >= 1024 * 1024) {
+ error_ = kSerialReadInvalidBytesToRead;
+ return false;
+ }
return true;
}
void SerialReadFunction::Work() {
- uint8 byte = '\0';
int bytes_read = -1;
- SerialConnection* serial_connection = manager_->Get(params_->connection_id);
+ scoped_refptr<net::IOBufferWithSize> io_buffer(
+ new net::IOBufferWithSize(params_->bytes_to_read));
+ SerialConnection* serial_connection(manager_->Get(params_->connection_id));
+
if (serial_connection)
- bytes_read = serial_connection->Read(&byte);
+ bytes_read = serial_connection->Read(io_buffer);
DictionaryValue* result = new DictionaryValue();
@@ -215,7 +224,7 @@ void SerialReadFunction::Work() {
bytes_read = 0;
result->SetInteger(kBytesReadKey, bytes_read);
result->Set(kDataKey, base::BinaryValue::CreateWithCopiedBuffer(
- reinterpret_cast<char*>(&byte), bytes_read));
+ io_buffer->data(), bytes_read));
SetResult(result);
}
« no previous file with comments | « no previous file | chrome/browser/extensions/api/serial/serial_apitest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698