Commit ab930690 authored by sammc@chromium.org's avatar sammc@chromium.org

Move the serial API to extensions/.

BUG=389016

Review URL: https://codereview.chromium.org/369893008

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@282441 0039d316-1c4b-4281-b951-d872f2087c98
parent 477cda31
......@@ -87,6 +87,8 @@
'<(DEPTH)/extensions/extensions.gyp:extensions_common',
'<(DEPTH)/extensions/extensions.gyp:extensions_renderer',
'<(DEPTH)/extensions/extensions_resources.gyp:extensions_resources',
'<(DEPTH)/mojo/mojo.gyp:mojo_environment_chromium',
'<(DEPTH)/mojo/mojo.gyp:mojo_system_impl',
'<(DEPTH)/skia/skia.gyp:skia',
'<(DEPTH)/third_party/WebKit/public/blink.gyp:blink',
'<(DEPTH)/ui/wm/wm.gyp:wm',
......
......@@ -40,7 +40,6 @@
#include "chrome/browser/extensions/api/processes/processes_api.h"
#include "chrome/browser/extensions/api/push_messaging/push_messaging_api.h"
#include "chrome/browser/extensions/api/screenlock_private/screenlock_private_api.h"
#include "chrome/browser/extensions/api/serial/serial_connection.h"
#include "chrome/browser/extensions/api/sessions/sessions_api.h"
#include "chrome/browser/extensions/api/settings_overrides/settings_overrides_api.h"
#include "chrome/browser/extensions/api/signed_in_devices/signed_in_devices_manager.h"
......@@ -85,8 +84,6 @@ void EnsureBrowserContextKeyedServiceFactoriesBuilt() {
extensions::ActivityLog::GetFactoryInstance();
extensions::ActivityLogAPI::GetFactoryInstance();
extensions::AlarmManager::GetFactoryInstance();
extensions::ApiResourceManager<
extensions::SerialConnection>::GetFactoryInstance();
extensions::ApiResourceManager<
extensions::UsbDeviceResource>::GetFactoryInstance();
extensions::AudioAPI::GetFactoryInstance();
......
......@@ -37,7 +37,6 @@
'../content/content.gyp:content_common',
'../crypto/crypto.gyp:crypto',
'../device/hid/hid.gyp:device_hid',
'../device/serial/serial.gyp:device_serial',
'../extensions/common/api/api.gyp:extensions_api',
'../extensions/extensions.gyp:extensions_browser',
'../extensions/extensions_strings.gyp:extensions_strings',
......@@ -825,12 +824,6 @@
'browser/extensions/api/runtime/chrome_runtime_api_delegate.h',
'browser/extensions/api/screenlock_private/screenlock_private_api.cc',
'browser/extensions/api/screenlock_private/screenlock_private_api.h',
'browser/extensions/api/serial/serial_api.cc',
'browser/extensions/api/serial/serial_api.h',
'browser/extensions/api/serial/serial_connection.cc',
'browser/extensions/api/serial/serial_connection.h',
'browser/extensions/api/serial/serial_event_dispatcher.cc',
'browser/extensions/api/serial/serial_event_dispatcher.h',
'browser/extensions/api/sessions/session_id.cc',
'browser/extensions/api/sessions/session_id.h',
'browser/extensions/api/sessions/sessions_api.cc',
......
......@@ -855,6 +855,7 @@
'../apps/app_shim/test/app_shim_host_manager_test_api_mac.cc',
'../apps/app_shim/test/app_shim_host_manager_test_api_mac.h',
'../apps/load_and_launch_browsertest.cc',
'../extensions/browser/api/serial/serial_apitest.cc',
'../extensions/browser/api/usb/usb_apitest.cc',
'../extensions/browser/api/usb/usb_manual_apitest.cc',
'../extensions/browser/test_extension_registry_observer.h',
......@@ -1129,7 +1130,6 @@
'browser/extensions/api/push_messaging/sync_setup_helper.cc',
'browser/extensions/api/reading_list_private/reading_list_private_apitest.cc',
'browser/extensions/api/screenlock_private/screenlock_private_apitest.cc',
'browser/extensions/api/serial/serial_apitest.cc',
'browser/extensions/api/sessions/sessions_apitest.cc',
'browser/extensions/api/settings_overrides/settings_overrides_browsertest.cc',
'browser/extensions/api/socket/socket_apitest.cc',
......
......@@ -43,7 +43,6 @@ generated_extensions_api("api") {
# include generated headers from these targets.
# TODO(brettw) this should be made unnecessary if possible.
"//components/metrics/proto",
"//device/serial",
"//content/public/browser",
"//skia",
......
......@@ -89,7 +89,6 @@
'push_messaging.idl',
'reading_list_private.json',
'screenlock_private.idl',
'serial.idl',
'sessions.json',
'signed_in_devices.idl',
'streams_private.idl',
......@@ -212,7 +211,6 @@
# include generated headers from these targets.
# TODO(brettw) this should be made unnecessary if possible.
'<(DEPTH)/components/components.gyp:component_metrics_proto',
'<(DEPTH)/device/serial/serial.gyp:device_serial',
'<(DEPTH)/content/content.gyp:content_browser',
'<(DEPTH)/skia/skia.gyp:skia',
......
......@@ -43,7 +43,12 @@
'dependencies': [
'../build/linux/system.gyp:udev',
],
}]
}],
['chromeos==1', {
'dependencies': [
'../chromeos/chromeos.gyp:chromeos',
],
}],
]
}],
}
......@@ -27,10 +27,10 @@ namespace extensions {
namespace api {
class BluetoothSocketApiFunction;
class BluetoothSocketEventDispatcher;
class SerialEventDispatcher;
}
namespace core_api {
class SerialEventDispatcher;
class TCPServerSocketEventDispatcher;
class TCPSocketEventDispatcher;
class UDPSocketEventDispatcher;
......@@ -157,7 +157,7 @@ class ApiResourceManager : public BrowserContextKeyedAPI,
friend class BluetoothAPI;
friend class api::BluetoothSocketApiFunction;
friend class api::BluetoothSocketEventDispatcher;
friend class api::SerialEventDispatcher;
friend class core_api::SerialEventDispatcher;
friend class core_api::TCPServerSocketEventDispatcher;
friend class core_api::TCPSocketEventDispatcher;
friend class core_api::UDPSocketEventDispatcher;
......
// Copyright 2012 The Chromium Authors. All rights reserved.
// Copyright 2014 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 "extensions/browser/api/serial/serial_api.h"
#include <algorithm>
#include <vector>
#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"
#include "extensions/browser/api/serial/serial_connection.h"
#include "extensions/browser/api/serial/serial_event_dispatcher.h"
#include "extensions/common/api/serial.h"
using content::BrowserThread;
namespace extensions {
namespace api {
namespace core_api {
namespace {
......@@ -50,11 +49,11 @@ void SetDefaultScopedPtrValue(scoped_ptr<T>& ptr, const T& value) {
} // namespace
SerialAsyncApiFunction::SerialAsyncApiFunction()
: manager_(NULL) {
SerialAsyncApiFunction::SerialAsyncApiFunction() : manager_(NULL) {
}
SerialAsyncApiFunction::~SerialAsyncApiFunction() {}
SerialAsyncApiFunction::~SerialAsyncApiFunction() {
}
bool SerialAsyncApiFunction::PrePrepare() {
manager_ = ApiResourceManager<SerialConnection>::Get(browser_context());
......@@ -75,7 +74,8 @@ void SerialAsyncApiFunction::RemoveSerialConnection(int api_resource_id) {
manager_->Remove(extension_->id(), api_resource_id);
}
SerialGetDevicesFunction::SerialGetDevicesFunction() {}
SerialGetDevicesFunction::SerialGetDevicesFunction() {
}
bool SerialGetDevicesFunction::Prepare() {
set_work_thread_id(BrowserThread::FILE);
......@@ -92,9 +92,11 @@ void SerialGetDevicesFunction::Work() {
devices.To<std::vector<linked_ptr<serial::DeviceInfo> > >());
}
SerialConnectFunction::SerialConnectFunction() {}
SerialConnectFunction::SerialConnectFunction() {
}
SerialConnectFunction::~SerialConnectFunction() {}
SerialConnectFunction::~SerialConnectFunction() {
}
bool SerialConnectFunction::Prepare() {
params_ = serial::Connect::Params::Create(*args_);
......@@ -144,9 +146,10 @@ void SerialConnectFunction::OnConnected(bool success) {
connection_ = NULL;
}
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(&SerialConnectFunction::FinishConnect,
this));
BrowserThread::PostTask(
BrowserThread::IO,
FROM_HERE,
base::Bind(&SerialConnectFunction::FinishConnect, this));
}
void SerialConnectFunction::FinishConnect() {
......@@ -169,13 +172,16 @@ void SerialConnectFunction::FinishConnect() {
}
SerialConnection* SerialConnectFunction::CreateSerialConnection(
const std::string& port, const std::string& extension_id) const {
const std::string& port,
const std::string& extension_id) const {
return new SerialConnection(port, extension_id);
}
SerialUpdateFunction::SerialUpdateFunction() {}
SerialUpdateFunction::SerialUpdateFunction() {
}
SerialUpdateFunction::~SerialUpdateFunction() {}
SerialUpdateFunction::~SerialUpdateFunction() {
}
bool SerialUpdateFunction::Prepare() {
params_ = serial::Update::Params::Create(*args_);
......@@ -194,9 +200,11 @@ void SerialUpdateFunction::Work() {
results_ = serial::Update::Results::Create(success);
}
SerialDisconnectFunction::SerialDisconnectFunction() {}
SerialDisconnectFunction::SerialDisconnectFunction() {
}
SerialDisconnectFunction::~SerialDisconnectFunction() {}
SerialDisconnectFunction::~SerialDisconnectFunction() {
}
bool SerialDisconnectFunction::Prepare() {
params_ = serial::Disconnect::Params::Create(*args_);
......@@ -215,9 +223,11 @@ void SerialDisconnectFunction::Work() {
results_ = serial::Disconnect::Results::Create(true);
}
SerialSendFunction::SerialSendFunction() {}
SerialSendFunction::SerialSendFunction() {
}
SerialSendFunction::~SerialSendFunction() {}
SerialSendFunction::~SerialSendFunction() {
}
bool SerialSendFunction::Prepare() {
params_ = serial::Send::Params::Create(*args_);
......@@ -234,9 +244,9 @@ void SerialSendFunction::AsyncWorkStart() {
return;
}
if (!connection->Send(params_->data,
base::Bind(&SerialSendFunction::OnSendComplete,
this))) {
if (!connection->Send(
params_->data,
base::Bind(&SerialSendFunction::OnSendComplete, this))) {
OnSendComplete(0, serial::SEND_ERROR_PENDING);
}
}
......@@ -250,9 +260,11 @@ void SerialSendFunction::OnSendComplete(int bytes_sent,
AsyncWorkCompleted();
}
SerialFlushFunction::SerialFlushFunction() {}
SerialFlushFunction::SerialFlushFunction() {
}
SerialFlushFunction::~SerialFlushFunction() {}
SerialFlushFunction::~SerialFlushFunction() {
}
bool SerialFlushFunction::Prepare() {
params_ = serial::Flush::Params::Create(*args_);
......@@ -271,9 +283,11 @@ void SerialFlushFunction::Work() {
results_ = serial::Flush::Results::Create(success);
}
SerialSetPausedFunction::SerialSetPausedFunction() {}
SerialSetPausedFunction::SerialSetPausedFunction() {
}
SerialSetPausedFunction::~SerialSetPausedFunction() {}
SerialSetPausedFunction::~SerialSetPausedFunction() {
}
bool SerialSetPausedFunction::Prepare() {
params_ = serial::SetPaused::Params::Create(*args_);
......@@ -302,9 +316,11 @@ void SerialSetPausedFunction::Work() {
results_ = serial::SetPaused::Results::Create();
}
SerialGetInfoFunction::SerialGetInfoFunction() {}
SerialGetInfoFunction::SerialGetInfoFunction() {
}
SerialGetInfoFunction::~SerialGetInfoFunction() {}
SerialGetInfoFunction::~SerialGetInfoFunction() {
}
bool SerialGetInfoFunction::Prepare() {
params_ = serial::GetInfo::Params::Create(*args_);
......@@ -326,9 +342,11 @@ void SerialGetInfoFunction::Work() {
results_ = serial::GetInfo::Results::Create(info);
}
SerialGetConnectionsFunction::SerialGetConnectionsFunction() {}
SerialGetConnectionsFunction::SerialGetConnectionsFunction() {
}
SerialGetConnectionsFunction::~SerialGetConnectionsFunction() {}
SerialGetConnectionsFunction::~SerialGetConnectionsFunction() {
}
bool SerialGetConnectionsFunction::Prepare() {
return true;
......@@ -336,13 +354,14 @@ bool SerialGetConnectionsFunction::Prepare() {
void SerialGetConnectionsFunction::Work() {
std::vector<linked_ptr<serial::ConnectionInfo> > infos;
const base::hash_set<int>* connection_ids = manager_->GetResourceIds(
extension_->id());
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) {
it != connection_ids->end();
++it) {
int connection_id = *it;
SerialConnection *connection = GetSerialConnection(connection_id);
SerialConnection* connection = GetSerialConnection(connection_id);
if (connection) {
linked_ptr<serial::ConnectionInfo> info(new serial::ConnectionInfo());
info->connection_id = connection_id;
......@@ -354,9 +373,11 @@ void SerialGetConnectionsFunction::Work() {
results_ = serial::GetConnections::Results::Create(infos);
}
SerialGetControlSignalsFunction::SerialGetControlSignalsFunction() {}
SerialGetControlSignalsFunction::SerialGetControlSignalsFunction() {
}
SerialGetControlSignalsFunction::~SerialGetControlSignalsFunction() {}
SerialGetControlSignalsFunction::~SerialGetControlSignalsFunction() {
}
bool SerialGetControlSignalsFunction::Prepare() {
params_ = serial::GetControlSignals::Params::Create(*args_);
......@@ -381,9 +402,11 @@ void SerialGetControlSignalsFunction::Work() {
results_ = serial::GetControlSignals::Results::Create(signals);
}
SerialSetControlSignalsFunction::SerialSetControlSignalsFunction() {}
SerialSetControlSignalsFunction::SerialSetControlSignalsFunction() {
}
SerialSetControlSignalsFunction::~SerialSetControlSignalsFunction() {}
SerialSetControlSignalsFunction::~SerialSetControlSignalsFunction() {
}
bool SerialSetControlSignalsFunction::Prepare() {
params_ = serial::SetControlSignals::Params::Create(*args_);
......@@ -403,19 +426,19 @@ void SerialSetControlSignalsFunction::Work() {
results_ = serial::SetControlSignals::Results::Create(success);
}
} // namespace api
} // namespace core_api
} // namespace extensions
namespace mojo {
// static
linked_ptr<extensions::api::serial::DeviceInfo>
linked_ptr<extensions::core_api::serial::DeviceInfo>
TypeConverter<device::serial::DeviceInfoPtr,
linked_ptr<extensions::api::serial::DeviceInfo> >::
linked_ptr<extensions::core_api::serial::DeviceInfo> >::
ConvertTo(const device::serial::DeviceInfoPtr& device) {
linked_ptr<extensions::api::serial::DeviceInfo> info(
new extensions::api::serial::DeviceInfo);
linked_ptr<extensions::core_api::serial::DeviceInfo> info(
new extensions::core_api::serial::DeviceInfo);
info->path = device->path;
if (device->has_vendor_id)
info->vendor_id.reset(new int(static_cast<int>(device->vendor_id)));
......
// Copyright 2012 The Chromium Authors. All rights reserved.
// Copyright 2014 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.
#ifndef CHROME_BROWSER_EXTENSIONS_API_SERIAL_SERIAL_API_H_
#define CHROME_BROWSER_EXTENSIONS_API_SERIAL_SERIAL_API_H_
#ifndef EXTENSIONS_BROWSER_API_SERIAL_SERIAL_API_H_
#define EXTENSIONS_BROWSER_API_SERIAL_SERIAL_API_H_
#include <string>
#include "base/memory/ref_counted.h"
#include "chrome/common/extensions/api/serial.h"
#include "device/serial/serial.mojom.h"
#include "extensions/browser/api/api_resource_manager.h"
#include "extensions/browser/api/async_api_function.h"
#include "extensions/common/api/serial.h"
namespace extensions {
class SerialConnection;
namespace api {
namespace core_api {
class SerialEventDispatcher;
......@@ -240,7 +239,7 @@ class SerialSetControlSignalsFunction : public SerialAsyncApiFunction {
scoped_ptr<serial::SetControlSignals::Params> params_;
};
} // namespace api
} // namespace core_api
} // namespace extensions
......@@ -248,12 +247,12 @@ namespace mojo {
template <>
class TypeConverter<device::serial::DeviceInfoPtr,
linked_ptr<extensions::api::serial::DeviceInfo> > {
linked_ptr<extensions::core_api::serial::DeviceInfo> > {
public:
static linked_ptr<extensions::api::serial::DeviceInfo> ConvertTo(
static linked_ptr<extensions::core_api::serial::DeviceInfo> ConvertTo(
const device::serial::DeviceInfoPtr& input);
};
} // namespace mojo
#endif // CHROME_BROWSER_EXTENSIONS_API_SERIAL_SERIAL_API_H_
#endif // EXTENSIONS_BROWSER_API_SERIAL_SERIAL_API_H_
// Copyright 2012 The Chromium Authors. All rights reserved.
// Copyright 2014 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 <deque>
#include <string>
#include <vector>
#include "base/memory/scoped_ptr.h"
#include "chrome/browser/extensions/api/serial/serial_api.h"
#include "chrome/browser/extensions/api/serial/serial_connection.h"
#include "chrome/browser/extensions/extension_apitest.h"
#include "chrome/browser/extensions/extension_function_test_utils.h"
#include "chrome/browser/extensions/extension_test_message_listener.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/common/extensions/api/serial.h"
#include "content/public/browser/browser_thread.h"
#include "extensions/browser/api/serial/serial_api.h"
#include "extensions/browser/api/serial/serial_connection.h"
#include "extensions/browser/extension_function.h"
#include "extensions/common/api/serial.h"
#include "testing/gmock/include/gmock/gmock.h"
using testing::_;
using testing::Return;
using content::BrowserThread;
namespace {
class SerialApiTest : public ExtensionApiTest {
......@@ -48,6 +39,7 @@ class FakeSerialGetDevicesFunction : public AsyncExtensionFunction {
SendResponse(true);
return true;
}
protected:
virtual ~FakeSerialGetDevicesFunction() {}
};
......@@ -126,7 +118,7 @@ class FakeEchoSerialIoHandler : public device::SerialIoHandler {
DISALLOW_COPY_AND_ASSIGN(FakeEchoSerialIoHandler);
};
class FakeSerialConnectFunction : public api::SerialConnectFunction {
class FakeSerialConnectFunction : public core_api::SerialConnectFunction {
protected:
virtual SerialConnection* CreateSerialConnection(
const std::string& port,
......
// Copyright 2012 The Chromium Authors. All rights reserved.
// Copyright 2014 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.
#ifndef CHROME_BROWSER_EXTENSIONS_API_SERIAL_SERIAL_CONNECTION_H_
#define CHROME_BROWSER_EXTENSIONS_API_SERIAL_SERIAL_CONNECTION_H_
#ifndef EXTENSIONS_BROWSER_API_SERIAL_SERIAL_CONNECTION_H_
#define EXTENSIONS_BROWSER_API_SERIAL_SERIAL_CONNECTION_H_
#include <set>
#include <string>
#include "base/callback.h"
#include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h"
#include "base/message_loop/message_loop.h"
#include "base/time/time.h"
#include "chrome/common/extensions/api/serial.h"
#include "content/public/browser/browser_thread.h"
#include "device/serial/serial_io_handler.h"
#include "extensions/browser/api/api_resource.h"
#include "extensions/browser/api/api_resource_manager.h"
#include "extensions/common/api/serial.h"
using content::BrowserThread;
......@@ -36,13 +33,14 @@ class SerialConnection : public ApiResource,
// does not necessarily imply an empty |data| string, since a receive may
// complete partially before being interrupted by an error condition.
typedef base::Callback<
void(const std::string& data, api::serial::ReceiveError error)>
void(const std::string& data, core_api::serial::ReceiveError error)>
ReceiveCompleteCallback;
// This is the callback type expected by Send. Note that an error result
// does not necessarily imply 0 bytes sent, since a send may complete
// partially before being interrupted by an error condition.
typedef base::Callback<void(int bytes_sent, api::serial::SendError error)>
typedef base::Callback<
void(int bytes_sent, core_api::serial::SendError error)>
SendCompleteCallback;
SerialConnection(const std::string& port,
......@@ -91,24 +89,24 @@ class SerialConnection : public ApiResource,
// Configures some subset of port options for this connection.
// Omitted options are unchanged. Returns |true| iff the configuration
// changes were successful.
bool Configure(const api::serial::ConnectionOptions& options);
bool Configure(const core_api::serial::ConnectionOptions& options);
// Connection configuration query. Fills values in an existing
// ConnectionInfo. Returns |true| iff the connection's information
// was successfully retrieved.
bool GetInfo(api::serial::ConnectionInfo* info) const;
bool GetInfo(core_api::serial::ConnectionInfo* info) const;
// Reads current control signals (DCD, CTS, etc.) into an existing
// DeviceControlSignals structure. Returns |true| iff the signals were
// successfully read.
bool GetControlSignals(
api::serial::DeviceControlSignals* control_signals) const;
core_api::serial::DeviceControlSignals* control_signals) const;
// Sets one or more control signals (DTR and/or RTS). Returns |true| iff
// the signals were successfully set. Unininitialized flags in the
// HostControlSignals structure are left unchanged.
bool SetControlSignals(
const api::serial::HostControlSignals& control_signals);
const core_api::serial::HostControlSignals& control_signals);
// Overrides |io_handler_| for testing.
void SetIoHandlerForTest(scoped_refptr<device::SerialIoHandler> handler);
......@@ -197,20 +195,20 @@ namespace mojo {
template <>
class TypeConverter<device::serial::HostControlSignalsPtr,
extensions::api::serial::HostControlSignals> {
extensions::core_api::serial::HostControlSignals> {
public:
static device::serial::HostControlSignalsPtr ConvertFrom(
const extensions::api::serial::HostControlSignals& input);
const extensions::core_api::serial::HostControlSignals& input);
};
template <>
class TypeConverter<device::serial::ConnectionOptionsPtr,
extensions::api::serial::ConnectionOptions> {
extensions::core_api::serial::ConnectionOptions> {
public:
static device::serial::ConnectionOptionsPtr ConvertFrom(
const extensions::api::serial::ConnectionOptions& input);
const extensions::core_api::serial::ConnectionOptions& input);
};
} // namespace mojo
#endif // CHROME_BROWSER_EXTENSIONS_API_SERIAL_SERIAL_CONNECTION_H_
#endif // EXTENSIONS_BROWSER_API_SERIAL_SERIAL_CONNECTION_H_
// Copyright 2013 The Chromium Authors. All rights reserved.
// Copyright 2014 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_event_dispatcher.h"
#include "extensions/browser/api/serial/serial_event_dispatcher.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/extensions/api/serial/serial_connection.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "extensions/browser/api/serial/serial_connection.h"
#include "extensions/browser/event_router.h"
#include "extensions/browser/extensions_browser_client.h"
namespace extensions {
namespace api {
namespace core_api {
namespace {
bool ShouldPauseOnReceiveError(serial::ReceiveError error) {
return error == serial::RECEIVE_ERROR_DEVICE_LOST ||
error == serial::RECEIVE_ERROR_SYSTEM_ERROR ||
error == serial::RECEIVE_ERROR_DISCONNECTED;
error == serial::RECEIVE_ERROR_SYSTEM_ERROR ||
error == serial::RECEIVE_ERROR_DISCONNECTED;
}
} // namespace
......@@ -40,19 +38,21 @@ SerialEventDispatcher* SerialEventDispatcher::Get(
}
SerialEventDispatcher::SerialEventDispatcher(content::BrowserContext* context)
: thread_id_(SerialConnection::kThreadId),
profile_(Profile::FromBrowserContext(context)) {
: thread_id_(SerialConnection::kThreadId), context_(context) {
ApiResourceManager<SerialConnection>* manager =
ApiResourceManager<SerialConnection>::Get(profile_);
ApiResourceManager<SerialConnection>::Get(context_);
DCHECK(manager) << "No serial connection manager.";
connections_ = manager->data_;
}
SerialEventDispatcher::~SerialEventDispatcher() {}
SerialEventDispatcher::~SerialEventDispatcher() {
}
SerialEventDispatcher::ReceiveParams::ReceiveParams() {}
SerialEventDispatcher::ReceiveParams::ReceiveParams() {
}
SerialEventDispatcher::ReceiveParams::~ReceiveParams() {}
SerialEventDispatcher::ReceiveParams::~ReceiveParams() {
}
void SerialEventDispatcher::PollConnection(const std::string& extension_id,
int connection_id) {
......@@ -60,7 +60,7 @@ void SerialEventDispatcher::PollConnection(const std::string& extension_id,
ReceiveParams params;
params.thread_id = thread_id_;
params.profile_id = profile_;
params.browser_context_id = context_;
params.extension_id = extension_id;
params.connections = connections_;
params.connection_id = connection_id;
......@@ -120,9 +120,8 @@ void SerialEventDispatcher::ReceiveCallback(const ReceiveParams& params,
}
// Queue up the next read operation.
BrowserThread::PostTask(params.thread_id,
FROM_HERE,
base::Bind(&StartReceive, params));
BrowserThread::PostTask(
params.thread_id, FROM_HERE, base::Bind(&StartReceive, params));
}
// static
......@@ -130,29 +129,30 @@ void SerialEventDispatcher::PostEvent(const ReceiveParams& params,
scoped_ptr<extensions::Event> event) {
DCHECK_CURRENTLY_ON(params.thread_id);
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
base::Bind(&DispatchEvent,
params.profile_id,
params.extension_id,
base::Passed(event.Pass())));
BrowserThread::PostTask(BrowserThread::UI,
FROM_HERE,
base::Bind(&DispatchEvent,
params.browser_context_id,
params.extension_id,
base::Passed(event.Pass())));
}
// static
void SerialEventDispatcher::DispatchEvent(void* profile_id,
void SerialEventDispatcher::DispatchEvent(void* browser_context_id,
const std::string& extension_id,
scoped_ptr<extensions::Event> event) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
Profile* profile = reinterpret_cast<Profile*>(profile_id);
if (!g_browser_process->profile_manager()->IsValidProfile(profile))
content::BrowserContext* context =
reinterpret_cast<content::BrowserContext*>(browser_context_id);
if (!extensions::ExtensionsBrowserClient::Get()->IsValidContext(context))
return;
EventRouter* router = EventRouter::Get(profile);
EventRouter* router = EventRouter::Get(context);
if (router)
router->DispatchEventToExtension(extension_id, event.Pass());
}
} // namespace api
} // namespace core_api
} // namespace extensions
// Copyright 2013 The Chromium Authors. All rights reserved.
// Copyright 2014 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.
#ifndef CHROME_BROWSER_EXTENSIONS_API_SERIAL_SERIAL_EVENT_DISPATCHER_H_
#define CHROME_BROWSER_EXTENSIONS_API_SERIAL_SERIAL_EVENT_DISPATCHER_H_
#ifndef EXTENSIONS_BROWSER_API_SERIAL_SERIAL_EVENT_DISPATCHER_H_
#define EXTENSIONS_BROWSER_API_SERIAL_SERIAL_EVENT_DISPATCHER_H_
#include <string>
#include "chrome/common/extensions/api/serial.h"
#include "extensions/browser/api/api_resource_manager.h"
#include "extensions/common/api/serial.h"
class Profile;
namespace content {
class BrowserContext;
}
namespace extensions {
struct Event;
class SerialConnection;
namespace api {
namespace core_api {
// Per-profile dispatcher for events on serial connections.
// Per-browser-context dispatcher for events on serial connections.
class SerialEventDispatcher : public BrowserContextKeyedAPI {
public:
explicit SerialEventDispatcher(content::BrowserContext* context);
......@@ -46,7 +50,7 @@ class SerialEventDispatcher : public BrowserContextKeyedAPI {
~ReceiveParams();
content::BrowserThread::ID thread_id;
void* profile_id;
void* browser_context_id;
std::string extension_id;
scoped_refptr<ConnectionData> connections;
int connection_id;
......@@ -61,17 +65,17 @@ class SerialEventDispatcher : public BrowserContextKeyedAPI {
static void PostEvent(const ReceiveParams& params,
scoped_ptr<extensions::Event> event);
static void DispatchEvent(void* profile_id,
static void DispatchEvent(void* browser_context_id,
const std::string& extension_id,
scoped_ptr<extensions::Event> event);
content::BrowserThread::ID thread_id_;
Profile* const profile_;
content::BrowserContext* const context_;
scoped_refptr<ConnectionData> connections_;
};
} // namespace api
} // namespace core_api
} // namespace extensions
#endif // CHROME_BROWSER_EXTENSIONS_API_SERIAL_SERIAL_EVENT_DISPATCHER_H_
#endif // EXTENSIONS_BROWSER_API_SERIAL_SERIAL_EVENT_DISPATCHER_H_
......@@ -6,6 +6,7 @@
#include "extensions/browser/api/api_resource_manager.h"
#include "extensions/browser/api/runtime/runtime_api.h"
#include "extensions/browser/api/serial/serial_connection.h"
#include "extensions/browser/api/socket/socket.h"
#include "extensions/browser/api/socket/tcp_socket.h"
#include "extensions/browser/api/socket/udp_socket.h"
......@@ -23,6 +24,7 @@ void EnsureBrowserContextKeyedServiceFactoriesBuilt() {
extensions::ResumableTCPServerSocket>::GetFactoryInstance();
ApiResourceManager<extensions::ResumableTCPSocket>::GetFactoryInstance();
ApiResourceManager<extensions::ResumableUDPSocket>::GetFactoryInstance();
ApiResourceManager<extensions::SerialConnection>::GetFactoryInstance();
ApiResourceManager<extensions::Socket>::GetFactoryInstance();
core_api::TCPServerSocketEventDispatcher::GetFactoryInstance();
core_api::TCPSocketEventDispatcher::GetFactoryInstance();
......
......@@ -10,6 +10,7 @@ generated_extensions_api("extensions_api") {
"dns.idl",
"extensions_manifest_types.json",
"power.idl",
"serial.idl",
"socket.idl",
"sockets_tcp.idl",
"sockets_tcp_server.idl",
......@@ -20,5 +21,8 @@ generated_extensions_api("extensions_api") {
root_namespace = "extensions::core_api"
impl_dir = "//extensions/browser/api"
bundle = true
deps = [ "//skia" ]
deps = [
"//device/serial",
"//skia",
]
}
......@@ -28,6 +28,7 @@
'extensions_manifest_types.json',
'power.idl',
'runtime.json',
'serial.idl',
'socket.idl',
'sockets_tcp.idl',
'sockets_tcp_server.idl',
......@@ -49,6 +50,7 @@
'impl_dir': 'extensions/browser/api',
},
'dependencies': [
'<(DEPTH)/device/serial/serial.gyp:device_serial',
'<(DEPTH)/skia/skia.gyp:skia',
],
},
......
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Copyright 2014 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.
......
......@@ -234,6 +234,7 @@
'../components/components.gyp:pref_registry',
'../components/components.gyp:usb_service',
'../content/content.gyp:content_browser',
'../device/serial/serial.gyp:device_serial',
'../skia/skia.gyp:skia',
'../third_party/leveldatabase/leveldatabase.gyp:leveldatabase',
'common/api/api.gyp:extensions_api',
......@@ -274,6 +275,12 @@
'browser/api/runtime/runtime_api.h',
'browser/api/runtime/runtime_api_delegate.cc',
'browser/api/runtime/runtime_api_delegate.h',
'browser/api/serial/serial_api.cc',
'browser/api/serial/serial_api.h',
'browser/api/serial/serial_connection.cc',
'browser/api/serial/serial_connection.h',
'browser/api/serial/serial_event_dispatcher.cc',
'browser/api/serial/serial_event_dispatcher.h',
'browser/api/socket/socket.cc',
'browser/api/socket/socket.h',
'browser/api/socket/socket_api.cc',
......@@ -464,6 +471,7 @@
],
'dependencies!': [
'../components/components.gyp:usb_service',
'../device/serial/serial.gyp:device_serial',
],
}],
],
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment