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 |
deleted file mode 100644 |
index 128c03cba2d4d98aed5baf66cf4761943f816b46..0000000000000000000000000000000000000000 |
--- a/chrome/browser/extensions/api/serial/serial_api.cc |
+++ /dev/null |
@@ -1,429 +0,0 @@ |
-// Copyright 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/extensions/api/serial/serial_api.h" |
- |
-#include <algorithm> |
- |
-#include "base/values.h" |
-#include "chrome/browser/extensions/api/serial/serial_connection.h" |
-#include "chrome/browser/extensions/api/serial/serial_event_dispatcher.h" |
-#include "chrome/browser/profiles/profile.h" |
-#include "chrome/common/extensions/api/serial.h" |
-#include "content/public/browser/browser_thread.h" |
-#include "device/serial/serial_device_enumerator.h" |
-#include "extensions/browser/extension_system.h" |
- |
-using content::BrowserThread; |
- |
-namespace extensions { |
- |
-namespace api { |
- |
-namespace { |
- |
-// It's a fool's errand to come up with a default bitrate, because we don't get |
-// to control both sides of the communication. Unless the other side has |
-// implemented auto-bitrate detection (rare), if we pick the wrong rate, then |
-// you're gonna have a bad time. Close doesn't count. |
-// |
-// But we'd like to pick something that has a chance of working, and 9600 is a |
-// good balance between popularity and speed. So 9600 it is. |
-const int kDefaultBufferSize = 4096; |
-const int kDefaultBitrate = 9600; |
-const serial::DataBits kDefaultDataBits = serial::DATA_BITS_EIGHT; |
-const serial::ParityBit kDefaultParityBit = serial::PARITY_BIT_NO; |
-const serial::StopBits kDefaultStopBits = serial::STOP_BITS_ONE; |
-const int kDefaultReceiveTimeout = 0; |
-const int kDefaultSendTimeout = 0; |
- |
-const char kErrorConnectFailed[] = "Failed to connect to the port."; |
-const char kErrorSerialConnectionNotFound[] = "Serial connection not found."; |
-const char kErrorGetControlSignalsFailed[] = "Failed to get control signals."; |
- |
-template <class T> |
-void SetDefaultScopedPtrValue(scoped_ptr<T>& ptr, const T& value) { |
- if (!ptr.get()) |
- ptr.reset(new T(value)); |
-} |
- |
-} // namespace |
- |
-SerialAsyncApiFunction::SerialAsyncApiFunction() |
- : manager_(NULL) { |
-} |
- |
-SerialAsyncApiFunction::~SerialAsyncApiFunction() {} |
- |
-bool SerialAsyncApiFunction::PrePrepare() { |
- manager_ = ApiResourceManager<SerialConnection>::Get(browser_context()); |
- DCHECK(manager_); |
- return true; |
-} |
- |
-bool SerialAsyncApiFunction::Respond() { |
- return error_.empty(); |
-} |
- |
-SerialConnection* SerialAsyncApiFunction::GetSerialConnection( |
- int api_resource_id) { |
- return manager_->Get(extension_->id(), api_resource_id); |
-} |
- |
-void SerialAsyncApiFunction::RemoveSerialConnection(int api_resource_id) { |
- manager_->Remove(extension_->id(), api_resource_id); |
-} |
- |
-SerialGetDevicesFunction::SerialGetDevicesFunction() {} |
- |
-bool SerialGetDevicesFunction::Prepare() { |
- set_work_thread_id(BrowserThread::FILE); |
- return true; |
-} |
- |
-void SerialGetDevicesFunction::Work() { |
- DCHECK_CURRENTLY_ON(BrowserThread::FILE); |
- |
- scoped_ptr<device::SerialDeviceEnumerator> enumerator = |
- device::SerialDeviceEnumerator::Create(); |
- mojo::Array<device::serial::DeviceInfoPtr> devices = enumerator->GetDevices(); |
- results_ = serial::GetDevices::Results::Create( |
- devices.To<std::vector<linked_ptr<serial::DeviceInfo> > >()); |
-} |
- |
-SerialConnectFunction::SerialConnectFunction() {} |
- |
-SerialConnectFunction::~SerialConnectFunction() {} |
- |
-bool SerialConnectFunction::Prepare() { |
- params_ = serial::Connect::Params::Create(*args_); |
- EXTENSION_FUNCTION_VALIDATE(params_.get()); |
- |
- // Fill in any omitted options to ensure a known initial configuration. |
- if (!params_->options.get()) |
- params_->options.reset(new serial::ConnectionOptions()); |
- serial::ConnectionOptions* options = params_->options.get(); |
- |
- SetDefaultScopedPtrValue(options->persistent, false); |
- SetDefaultScopedPtrValue(options->buffer_size, kDefaultBufferSize); |
- SetDefaultScopedPtrValue(options->bitrate, kDefaultBitrate); |
- SetDefaultScopedPtrValue(options->cts_flow_control, false); |
- SetDefaultScopedPtrValue(options->receive_timeout, kDefaultReceiveTimeout); |
- SetDefaultScopedPtrValue(options->send_timeout, kDefaultSendTimeout); |
- |
- if (options->data_bits == serial::DATA_BITS_NONE) |
- options->data_bits = kDefaultDataBits; |
- if (options->parity_bit == serial::PARITY_BIT_NONE) |
- options->parity_bit = kDefaultParityBit; |
- if (options->stop_bits == serial::STOP_BITS_NONE) |
- options->stop_bits = kDefaultStopBits; |
- |
- serial_event_dispatcher_ = SerialEventDispatcher::Get(browser_context()); |
- DCHECK(serial_event_dispatcher_); |
- |
- return true; |
-} |
- |
-void SerialConnectFunction::AsyncWorkStart() { |
- DCHECK_CURRENTLY_ON(BrowserThread::IO); |
- connection_ = CreateSerialConnection(params_->path, extension_->id()); |
- connection_->Open(base::Bind(&SerialConnectFunction::OnConnected, this)); |
-} |
- |
-void SerialConnectFunction::OnConnected(bool success) { |
- DCHECK(connection_); |
- |
- if (success) { |
- if (!connection_->Configure(*params_->options.get())) { |
- delete connection_; |
- connection_ = NULL; |
- } |
- } else { |
- delete connection_; |
- connection_ = NULL; |
- } |
- |
- BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
- base::Bind(&SerialConnectFunction::FinishConnect, |
- this)); |
-} |
- |
-void SerialConnectFunction::FinishConnect() { |
- DCHECK_CURRENTLY_ON(BrowserThread::IO); |
- if (!connection_) { |
- error_ = kErrorConnectFailed; |
- } else { |
- int id = manager_->Add(connection_); |
- serial::ConnectionInfo info; |
- info.connection_id = id; |
- if (connection_->GetInfo(&info)) { |
- serial_event_dispatcher_->PollConnection(extension_->id(), id); |
- results_ = serial::Connect::Results::Create(info); |
- } else { |
- RemoveSerialConnection(id); |
- error_ = kErrorConnectFailed; |
- } |
- } |
- AsyncWorkCompleted(); |
-} |
- |
-SerialConnection* SerialConnectFunction::CreateSerialConnection( |
- const std::string& port, const std::string& extension_id) const { |
- return new SerialConnection(port, extension_id); |
-} |
- |
-SerialUpdateFunction::SerialUpdateFunction() {} |
- |
-SerialUpdateFunction::~SerialUpdateFunction() {} |
- |
-bool SerialUpdateFunction::Prepare() { |
- params_ = serial::Update::Params::Create(*args_); |
- EXTENSION_FUNCTION_VALIDATE(params_.get()); |
- |
- return true; |
-} |
- |
-void SerialUpdateFunction::Work() { |
- SerialConnection* connection = GetSerialConnection(params_->connection_id); |
- if (!connection) { |
- error_ = kErrorSerialConnectionNotFound; |
- return; |
- } |
- bool success = connection->Configure(params_->options); |
- results_ = serial::Update::Results::Create(success); |
-} |
- |
-SerialDisconnectFunction::SerialDisconnectFunction() {} |
- |
-SerialDisconnectFunction::~SerialDisconnectFunction() {} |
- |
-bool SerialDisconnectFunction::Prepare() { |
- params_ = serial::Disconnect::Params::Create(*args_); |
- EXTENSION_FUNCTION_VALIDATE(params_.get()); |
- |
- return true; |
-} |
- |
-void SerialDisconnectFunction::Work() { |
- SerialConnection* connection = GetSerialConnection(params_->connection_id); |
- if (!connection) { |
- error_ = kErrorSerialConnectionNotFound; |
- return; |
- } |
- RemoveSerialConnection(params_->connection_id); |
- results_ = serial::Disconnect::Results::Create(true); |
-} |
- |
-SerialSendFunction::SerialSendFunction() {} |
- |
-SerialSendFunction::~SerialSendFunction() {} |
- |
-bool SerialSendFunction::Prepare() { |
- params_ = serial::Send::Params::Create(*args_); |
- EXTENSION_FUNCTION_VALIDATE(params_.get()); |
- |
- return true; |
-} |
- |
-void SerialSendFunction::AsyncWorkStart() { |
- SerialConnection* connection = GetSerialConnection(params_->connection_id); |
- if (!connection) { |
- error_ = kErrorSerialConnectionNotFound; |
- AsyncWorkCompleted(); |
- return; |
- } |
- |
- if (!connection->Send(params_->data, |
- base::Bind(&SerialSendFunction::OnSendComplete, |
- this))) { |
- OnSendComplete(0, serial::SEND_ERROR_PENDING); |
- } |
-} |
- |
-void SerialSendFunction::OnSendComplete(int bytes_sent, |
- serial::SendError error) { |
- serial::SendInfo send_info; |
- send_info.bytes_sent = bytes_sent; |
- send_info.error = error; |
- results_ = serial::Send::Results::Create(send_info); |
- AsyncWorkCompleted(); |
-} |
- |
-SerialFlushFunction::SerialFlushFunction() {} |
- |
-SerialFlushFunction::~SerialFlushFunction() {} |
- |
-bool SerialFlushFunction::Prepare() { |
- params_ = serial::Flush::Params::Create(*args_); |
- EXTENSION_FUNCTION_VALIDATE(params_.get()); |
- return true; |
-} |
- |
-void SerialFlushFunction::Work() { |
- SerialConnection* connection = GetSerialConnection(params_->connection_id); |
- if (!connection) { |
- error_ = kErrorSerialConnectionNotFound; |
- return; |
- } |
- |
- bool success = connection->Flush(); |
- results_ = serial::Flush::Results::Create(success); |
-} |
- |
-SerialSetPausedFunction::SerialSetPausedFunction() {} |
- |
-SerialSetPausedFunction::~SerialSetPausedFunction() {} |
- |
-bool SerialSetPausedFunction::Prepare() { |
- params_ = serial::SetPaused::Params::Create(*args_); |
- EXTENSION_FUNCTION_VALIDATE(params_.get()); |
- |
- serial_event_dispatcher_ = SerialEventDispatcher::Get(browser_context()); |
- DCHECK(serial_event_dispatcher_); |
- return true; |
-} |
- |
-void SerialSetPausedFunction::Work() { |
- SerialConnection* connection = GetSerialConnection(params_->connection_id); |
- if (!connection) { |
- error_ = kErrorSerialConnectionNotFound; |
- return; |
- } |
- |
- if (params_->paused != connection->paused()) { |
- connection->set_paused(params_->paused); |
- if (!params_->paused) { |
- serial_event_dispatcher_->PollConnection(extension_->id(), |
- params_->connection_id); |
- } |
- } |
- |
- results_ = serial::SetPaused::Results::Create(); |
-} |
- |
-SerialGetInfoFunction::SerialGetInfoFunction() {} |
- |
-SerialGetInfoFunction::~SerialGetInfoFunction() {} |
- |
-bool SerialGetInfoFunction::Prepare() { |
- params_ = serial::GetInfo::Params::Create(*args_); |
- EXTENSION_FUNCTION_VALIDATE(params_.get()); |
- |
- return true; |
-} |
- |
-void SerialGetInfoFunction::Work() { |
- SerialConnection* connection = GetSerialConnection(params_->connection_id); |
- if (!connection) { |
- error_ = kErrorSerialConnectionNotFound; |
- return; |
- } |
- |
- serial::ConnectionInfo info; |
- info.connection_id = params_->connection_id; |
- connection->GetInfo(&info); |
- results_ = serial::GetInfo::Results::Create(info); |
-} |
- |
-SerialGetConnectionsFunction::SerialGetConnectionsFunction() {} |
- |
-SerialGetConnectionsFunction::~SerialGetConnectionsFunction() {} |
- |
-bool SerialGetConnectionsFunction::Prepare() { |
- return true; |
-} |
- |
-void SerialGetConnectionsFunction::Work() { |
- std::vector<linked_ptr<serial::ConnectionInfo> > infos; |
- const base::hash_set<int>* connection_ids = manager_->GetResourceIds( |
- extension_->id()); |
- if (connection_ids) { |
- for (base::hash_set<int>::const_iterator it = connection_ids->begin(); |
- it != connection_ids->end(); ++it) { |
- int connection_id = *it; |
- SerialConnection *connection = GetSerialConnection(connection_id); |
- if (connection) { |
- linked_ptr<serial::ConnectionInfo> info(new serial::ConnectionInfo()); |
- info->connection_id = connection_id; |
- connection->GetInfo(info.get()); |
- infos.push_back(info); |
- } |
- } |
- } |
- results_ = serial::GetConnections::Results::Create(infos); |
-} |
- |
-SerialGetControlSignalsFunction::SerialGetControlSignalsFunction() {} |
- |
-SerialGetControlSignalsFunction::~SerialGetControlSignalsFunction() {} |
- |
-bool SerialGetControlSignalsFunction::Prepare() { |
- params_ = serial::GetControlSignals::Params::Create(*args_); |
- EXTENSION_FUNCTION_VALIDATE(params_.get()); |
- |
- return true; |
-} |
- |
-void SerialGetControlSignalsFunction::Work() { |
- SerialConnection* connection = GetSerialConnection(params_->connection_id); |
- if (!connection) { |
- error_ = kErrorSerialConnectionNotFound; |
- return; |
- } |
- |
- serial::DeviceControlSignals signals; |
- if (!connection->GetControlSignals(&signals)) { |
- error_ = kErrorGetControlSignalsFailed; |
- return; |
- } |
- |
- results_ = serial::GetControlSignals::Results::Create(signals); |
-} |
- |
-SerialSetControlSignalsFunction::SerialSetControlSignalsFunction() {} |
- |
-SerialSetControlSignalsFunction::~SerialSetControlSignalsFunction() {} |
- |
-bool SerialSetControlSignalsFunction::Prepare() { |
- params_ = serial::SetControlSignals::Params::Create(*args_); |
- EXTENSION_FUNCTION_VALIDATE(params_.get()); |
- |
- return true; |
-} |
- |
-void SerialSetControlSignalsFunction::Work() { |
- SerialConnection* connection = GetSerialConnection(params_->connection_id); |
- if (!connection) { |
- error_ = kErrorSerialConnectionNotFound; |
- return; |
- } |
- |
- bool success = connection->SetControlSignals(params_->signals); |
- results_ = serial::SetControlSignals::Results::Create(success); |
-} |
- |
-} // namespace api |
- |
-} // namespace extensions |
- |
-namespace mojo { |
- |
-// static |
-linked_ptr<extensions::api::serial::DeviceInfo> |
-TypeConverter<device::serial::DeviceInfoPtr, |
- linked_ptr<extensions::api::serial::DeviceInfo> >:: |
- ConvertTo(const device::serial::DeviceInfoPtr& device) { |
- linked_ptr<extensions::api::serial::DeviceInfo> info( |
- new extensions::api::serial::DeviceInfo); |
- info->path = device->path; |
- if (device->has_vendor_id) |
- info->vendor_id.reset(new int(static_cast<int>(device->vendor_id))); |
- if (device->has_product_id) |
- info->product_id.reset(new int(static_cast<int>(device->product_id))); |
- if (device->display_name) |
- info->display_name.reset(new std::string(device->display_name)); |
- return info; |
-} |
- |
-} // namespace mojo |