summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/api/serial
diff options
context:
space:
mode:
authormiket@chromium.org <miket@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-08 19:41:04 +0000
committermiket@chromium.org <miket@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-08 19:41:04 +0000
commit61994eb634db1c44e55607e619a05b0676f2d269 (patch)
treeadf26407eaebeaf433629a9f8c2a9a548ada7a78 /chrome/browser/extensions/api/serial
parentcfcf49ae00c3b1777921b5edb8c46bb123d72c6e (diff)
downloadchromium_src-61994eb634db1c44e55607e619a05b0676f2d269.zip
chromium_src-61994eb634db1c44e55607e619a05b0676f2d269.tar.gz
chromium_src-61994eb634db1c44e55607e619a05b0676f2d269.tar.bz2
Let developers get a list of valid serial ports, which is the same set of ports that we'll accept on a serial.open() call.
Refactored AsyncIOAPIFunction to AsyncAPIFunction, and let inheriting classes specify which thread the Work() operation should happen on (e.g., FILE rather than IO). BUG=121466 TEST=added Review URL: https://chromiumcodereview.appspot.com/10317032 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@135895 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/api/serial')
-rw-r--r--chrome/browser/extensions/api/serial/serial_api.cc29
-rw-r--r--chrome/browser/extensions/api/serial/serial_api.h31
-rw-r--r--chrome/browser/extensions/api/serial/serial_connection.cc2
-rw-r--r--chrome/browser/extensions/api/serial/serial_connection.h4
-rw-r--r--chrome/browser/extensions/api/serial/serial_connection_posix.cc4
5 files changed, 58 insertions, 12 deletions
diff --git a/chrome/browser/extensions/api/serial/serial_api.cc b/chrome/browser/extensions/api/serial/serial_api.cc
index e25b8cf..93855f2 100644
--- a/chrome/browser/extensions/api/serial/serial_api.cc
+++ b/chrome/browser/extensions/api/serial/serial_api.cc
@@ -9,14 +9,43 @@
#include "base/values.h"
#include "chrome/browser/extensions/api/api_resource_controller.h"
#include "chrome/browser/extensions/api/serial/serial_connection.h"
+#include "content/public/browser/browser_thread.h"
+
+using content::BrowserThread;
namespace extensions {
const char kConnectionIdKey[] = "connectionId";
+const char kPortsKey[] = "ports";
const char kDataKey[] = "data";
const char kBytesReadKey[] = "bytesRead";
const char kBytesWrittenKey[] = "bytesWritten";
+SerialGetPortsFunction::SerialGetPortsFunction() {}
+
+bool SerialGetPortsFunction::Prepare() {
+ work_thread_id_ = BrowserThread::FILE;
+ return true;
+}
+
+void SerialGetPortsFunction::Work() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+
+ ListValue* ports = new ListValue();
+ SerialConnection::StringSet port_names =
+ SerialConnection::GenerateValidSerialPortNames();
+ SerialConnection::StringSet::const_iterator i = port_names.begin();
+ while (i != port_names.end()) {
+ ports->Append(Value::CreateStringValue(*i++));
+ }
+
+ result_.reset(ports);
+}
+
+bool SerialGetPortsFunction::Respond() {
+ return true;
+}
+
SerialOpenFunction::SerialOpenFunction() : src_id_(-1) {}
bool SerialOpenFunction::Prepare() {
diff --git a/chrome/browser/extensions/api/serial/serial_api.h b/chrome/browser/extensions/api/serial/serial_api.h
index 902d641..7965d87 100644
--- a/chrome/browser/extensions/api/serial/serial_api.h
+++ b/chrome/browser/extensions/api/serial/serial_api.h
@@ -16,7 +16,22 @@ namespace extensions {
extern const char kConnectionIdKey[];
-class SerialOpenFunction : public AsyncIOAPIFunction {
+class SerialGetPortsFunction : public AsyncAPIFunction {
+ public:
+ DECLARE_EXTENSION_FUNCTION_NAME("experimental.serial.getPorts")
+
+ SerialGetPortsFunction();
+
+ protected:
+ virtual ~SerialGetPortsFunction() {}
+
+ // AsyncAPIFunction:
+ virtual bool Prepare() OVERRIDE;
+ virtual void Work() OVERRIDE;
+ virtual bool Respond() OVERRIDE;
+};
+
+class SerialOpenFunction : public AsyncAPIFunction {
public:
DECLARE_EXTENSION_FUNCTION_NAME("experimental.serial.open")
@@ -25,7 +40,7 @@ class SerialOpenFunction : public AsyncIOAPIFunction {
protected:
virtual ~SerialOpenFunction() {}
- // AsyncIOAPIFunction:
+ // AsyncAPIFunction:
virtual bool Prepare() OVERRIDE;
virtual void Work() OVERRIDE;
virtual bool Respond() OVERRIDE;
@@ -35,14 +50,14 @@ class SerialOpenFunction : public AsyncIOAPIFunction {
std::string port_;
};
-class SerialCloseFunction : public AsyncIOAPIFunction {
+class SerialCloseFunction : public AsyncAPIFunction {
public:
DECLARE_EXTENSION_FUNCTION_NAME("experimental.serial.close")
protected:
virtual ~SerialCloseFunction() {}
- // AsyncIOAPIFunction:
+ // AsyncAPIFunction:
virtual bool Prepare() OVERRIDE;
virtual void Work() OVERRIDE;
virtual bool Respond() OVERRIDE;
@@ -51,14 +66,14 @@ class SerialCloseFunction : public AsyncIOAPIFunction {
int connection_id_;
};
-class SerialReadFunction : public AsyncIOAPIFunction {
+class SerialReadFunction : public AsyncAPIFunction {
public:
DECLARE_EXTENSION_FUNCTION_NAME("experimental.serial.read")
protected:
virtual ~SerialReadFunction() {}
- // AsyncIOAPIFunction:
+ // AsyncAPIFunction:
virtual bool Prepare() OVERRIDE;
virtual void Work() OVERRIDE;
virtual bool Respond() OVERRIDE;
@@ -67,7 +82,7 @@ class SerialReadFunction : public AsyncIOAPIFunction {
int connection_id_;
};
-class SerialWriteFunction : public AsyncIOAPIFunction {
+class SerialWriteFunction : public AsyncAPIFunction {
public:
DECLARE_EXTENSION_FUNCTION_NAME("experimental.serial.write")
@@ -76,7 +91,7 @@ class SerialWriteFunction : public AsyncIOAPIFunction {
protected:
virtual ~SerialWriteFunction();
- // AsyncIOAPIFunction:
+ // AsyncAPIFunction:
virtual bool Prepare() OVERRIDE;
virtual void Work() OVERRIDE;
virtual bool Respond() OVERRIDE;
diff --git a/chrome/browser/extensions/api/serial/serial_connection.cc b/chrome/browser/extensions/api/serial/serial_connection.cc
index ed9314b..d17a707 100644
--- a/chrome/browser/extensions/api/serial/serial_connection.cc
+++ b/chrome/browser/extensions/api/serial/serial_connection.cc
@@ -8,7 +8,7 @@
namespace extensions {
-const char kSerialConnectionNotFoundError[] = "Serial conenction not found";
+const char kSerialConnectionNotFoundError[] = "Serial connection not found";
// static
bool SerialConnection::DoesPortExist(const StringSet& name_set,
diff --git a/chrome/browser/extensions/api/serial/serial_connection.h b/chrome/browser/extensions/api/serial/serial_connection.h
index d62189d..7dca2aa 100644
--- a/chrome/browser/extensions/api/serial/serial_connection.h
+++ b/chrome/browser/extensions/api/serial/serial_connection.h
@@ -44,11 +44,9 @@ class SerialConnection : public APIResource {
static bool DoesPortExist(const StringSet& port_patterns,
const std::string& port_name);
- private:
- // TODO(miket): expose this functionality via API. Otherwise developers have
- // to guess at valid names.
static StringSet GenerateValidSerialPortNames();
+ private:
// Returns a StringSet of patterns to be used with MatchPattern.
static StringSet GenerateValidPatterns();
diff --git a/chrome/browser/extensions/api/serial/serial_connection_posix.cc b/chrome/browser/extensions/api/serial/serial_connection_posix.cc
index 4e1fa5d..8e6e567 100644
--- a/chrome/browser/extensions/api/serial/serial_connection_posix.cc
+++ b/chrome/browser/extensions/api/serial/serial_connection_posix.cc
@@ -14,6 +14,9 @@
#include "base/file_path.h"
#include "base/file_util.h"
#include "base/string_util.h"
+#include "content/public/browser/browser_thread.h"
+
+using content::BrowserThread;
namespace extensions {
@@ -105,6 +108,7 @@ SerialConnection::StringSet SerialConnection::GenerateValidPatterns() {
// TODO(miket): this might be refactorable into serial_connection.cc, if
// Windows serial-port enumeration also entails looking through a directory.
SerialConnection::StringSet SerialConnection::GenerateValidSerialPortNames() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
const FilePath DEV_ROOT("/dev");
const file_util::FileEnumerator::FileType FILES_AND_SYM_LINKS =
static_cast<file_util::FileEnumerator::FileType>(