diff options
Diffstat (limited to 'chrome/browser/extensions/api/serial')
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>( |