| Index: chrome/browser/extensions/api/api_resource_event_notifier.cc
|
| diff --git a/chrome/browser/extensions/api/api_resource_event_notifier.cc b/chrome/browser/extensions/api/api_resource_event_notifier.cc
|
| index 000ace5797e34814f29af6d7b06c22920b84a90c..63fc4b76898a24a848239473a0c9b6a29c8b5474 100644
|
| --- a/chrome/browser/extensions/api/api_resource_event_notifier.cc
|
| +++ b/chrome/browser/extensions/api/api_resource_event_notifier.cc
|
| @@ -14,18 +14,20 @@
|
| using content::BrowserThread;
|
|
|
| namespace events {
|
| -// TODO(miket): This should be generic, but at the moment only socket sends
|
| -// onEvent events. We'll fix this when serial becomes nonblocking.
|
| -const char kOnAPIResourceEvent[] = "experimental.socket.onEvent";
|
| +const char kExperimentalSocketOnEvent[] = "experimental.socket.onEvent";
|
| +const char kExperimentalUsbOnEvent[] = "experimental.usb.onEvent";
|
| };
|
|
|
| namespace extensions {
|
|
|
| const char kEventTypeKey[] = "type";
|
| +
|
| const char kEventTypeConnectComplete[] = "connectComplete";
|
| const char kEventTypeDataRead[] = "dataRead";
|
| const char kEventTypeWriteComplete[] = "writeComplete";
|
|
|
| +const char kEventTypeTransferComplete[] = "transferComplete";
|
| +
|
| const char kSrcIdKey[] = "srcId";
|
| const char kIsFinalEventKey[] = "isFinalEvent";
|
|
|
| @@ -49,7 +51,8 @@ APIResourceEventNotifier::APIResourceEventNotifier(
|
| APIResourceEventNotifier::~APIResourceEventNotifier() {}
|
|
|
| void APIResourceEventNotifier::OnConnectComplete(int result_code) {
|
| - SendEventWithResultCode(API_RESOURCE_EVENT_CONNECT_COMPLETE, result_code);
|
| + SendEventWithResultCode(events::kExperimentalSocketOnEvent,
|
| + API_RESOURCE_EVENT_CONNECT_COMPLETE, result_code);
|
| }
|
|
|
| void APIResourceEventNotifier::OnDataRead(int result_code,
|
| @@ -71,14 +74,30 @@ void APIResourceEventNotifier::OnDataRead(int result_code,
|
| event->Set(kDataKey, data);
|
| event->SetString(kAddressKey, address);
|
| event->SetInteger(kPortKey, port);
|
| - DispatchEvent(event);
|
| + DispatchEvent(events::kExperimentalSocketOnEvent, event);
|
| }
|
|
|
| void APIResourceEventNotifier::OnWriteComplete(int result_code) {
|
| - SendEventWithResultCode(API_RESOURCE_EVENT_WRITE_COMPLETE, result_code);
|
| + SendEventWithResultCode(events::kExperimentalSocketOnEvent,
|
| + API_RESOURCE_EVENT_WRITE_COMPLETE, result_code);
|
| +}
|
| +
|
| +void APIResourceEventNotifier::OnTransferComplete(int result_code,
|
| + base::ListValue* data) {
|
| + if (src_id_ < 0) {
|
| + delete data;
|
| + return;
|
| + }
|
| +
|
| + DictionaryValue* event = CreateAPIResourceEvent(
|
| + API_RESOURCE_EVENT_TRANSFER_COMPLETE);
|
| + event->SetInteger(kResultCodeKey, result_code);
|
| + event->Set(kDataKey, data);
|
| + DispatchEvent(events::kExperimentalUsbOnEvent, event);
|
| }
|
|
|
| void APIResourceEventNotifier::SendEventWithResultCode(
|
| + const std::string &extension,
|
| APIResourceEventType event_type,
|
| int result_code) {
|
| if (src_id_ < 0)
|
| @@ -86,18 +105,20 @@ void APIResourceEventNotifier::SendEventWithResultCode(
|
|
|
| DictionaryValue* event = CreateAPIResourceEvent(event_type);
|
| event->SetInteger(kResultCodeKey, result_code);
|
| - DispatchEvent(event);
|
| + DispatchEvent(extension, event);
|
| }
|
|
|
| -void APIResourceEventNotifier::DispatchEvent(DictionaryValue* event) {
|
| +void APIResourceEventNotifier::DispatchEvent(const std::string &extension,
|
| + DictionaryValue* event) {
|
| BrowserThread::PostTask(
|
| BrowserThread::UI, FROM_HERE,
|
| base::Bind(
|
| - &APIResourceEventNotifier::DispatchEventOnUIThread, this, event));
|
| + &APIResourceEventNotifier::DispatchEventOnUIThread, this, extension,
|
| + event));
|
| }
|
|
|
| void APIResourceEventNotifier::DispatchEventOnUIThread(
|
| - DictionaryValue* event) {
|
| + const std::string &extension, DictionaryValue* event) {
|
| ListValue args;
|
|
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| @@ -105,9 +126,8 @@ void APIResourceEventNotifier::DispatchEventOnUIThread(
|
| args.Set(0, event);
|
| std::string json_args;
|
| base::JSONWriter::Write(&args, &json_args);
|
| - router_->DispatchEventToExtension(src_extension_id_,
|
| - events::kOnAPIResourceEvent,
|
| - json_args, profile_, src_url_);
|
| + router_->DispatchEventToExtension(src_extension_id_, extension, json_args,
|
| + profile_, src_url_);
|
| }
|
|
|
| DictionaryValue* APIResourceEventNotifier::CreateAPIResourceEvent(
|
| @@ -135,6 +155,8 @@ std::string APIResourceEventNotifier::APIResourceEventTypeToString(
|
| return kEventTypeDataRead;
|
| case API_RESOURCE_EVENT_WRITE_COMPLETE:
|
| return kEventTypeWriteComplete;
|
| + case API_RESOURCE_EVENT_TRANSFER_COMPLETE:
|
| + return kEventTypeTransferComplete;
|
| }
|
|
|
| NOTREACHED();
|
|
|