Bug 1137107 - Part 1: Add NfcRequestType. r=smaug, dimi

From 2c1e87a8e1018f2c1d9f8825e36d1478a8a409bc Mon Sep 17 00:00:00 2001
---
 dom/nfc/gonk/Nfc.js                | 22 ++++++---
 dom/nfc/gonk/NfcGonkMessage.h      |  9 ----
 dom/nfc/gonk/NfcMessageHandler.cpp | 91 +++++++++++++++++++-------------------
 dom/nfc/gonk/NfcOptions.h          |  2 +-
 dom/webidl/NfcOptions.webidl       | 16 ++++++-
 5 files changed, 76 insertions(+), 64 deletions(-)
This commit is contained in:
Yoshi Huang 2015-02-26 13:49:28 +08:00
parent 0ffd109c00
commit 4cf97dac15
5 changed files with 76 additions and 64 deletions

View File

@ -81,6 +81,16 @@ const NFC_IPC_MSG_ENTRIES = [
"NFC:SetFocusApp"] }
];
// Should be consistent with NfcRequestType defined in NfcOptions.webidl.
const NfcRequestType = {
CHANGE_RF_STATE: "changeRFState",
READ_NDEF: "readNDEF",
WRITE_NDEF: "writeNDEF",
MAKE_READ_ONLY: "makeReadOnly",
FORMAT: "format",
TRANSCEIVE: "transceive"
};
XPCOMUtils.defineLazyServiceGetter(this, "ppmm",
"@mozilla.org/parentprocessmessagemanager;1",
"nsIMessageBroadcaster");
@ -617,23 +627,23 @@ Nfc.prototype = {
switch (message.name) {
case "NFC:ChangeRFState":
this.sendToNfcService("changeRFState", message.data);
this.sendToNfcService(NfcRequestType.CHANGE_RF_STATE, message.data);
break;
case "NFC:ReadNDEF":
this.sendToNfcService("readNDEF", message.data);
this.sendToNfcService(NfcRequestType.READ_NDEF, message.data);
break;
case "NFC:WriteNDEF":
message.data.isP2P = SessionHelper.isP2PSession(message.data.sessionId);
this.sendToNfcService("writeNDEF", message.data);
this.sendToNfcService(NfcRequestType.WRITE_NDEF, message.data);
break;
case "NFC:MakeReadOnly":
this.sendToNfcService("makeReadOnly", message.data);
this.sendToNfcService(NfcRequestType.MAKE_READ_ONLY, message.data);
break;
case "NFC:Format":
this.sendToNfcService("format", message.data);
this.sendToNfcService(NfcRequestType.FORMAT, message.data);
break;
case "NFC:Transceive":
this.sendToNfcService("transceive", message.data);
this.sendToNfcService(NfcRequestType.TRANSCEIVE, message.data);
break;
case "NFC:SendFile":
// Chrome process is the arbitrator / mediator between

View File

@ -10,15 +10,6 @@ namespace mozilla {
#define NFCD_MAJOR_VERSION 1
#define NFCD_MINOR_VERSION 21
enum NfcRequest {
ChangeRFStateReq,
ReadNDEFReq,
WriteNDEFReq,
MakeReadOnlyReq,
FormatReq,
TransceiveReq,
};
enum NfcResponse {
ChangeRFStateRsp,
ReadNDEFRsp,

View File

@ -17,13 +17,6 @@ using namespace android;
using namespace mozilla;
using namespace mozilla::dom;
static const char* kChangeRFStateRequest = "changeRFState";
static const char* kReadNDEFRequest = "readNDEF";
static const char* kWriteNDEFRequest = "writeNDEF";
static const char* kMakeReadOnlyRequest = "makeReadOnly";
static const char* kFormatRequest = "format";
static const char* kTransceiveRequest = "transceive";
static const char* kChangeRFStateResponse = "ChangeRFStateResponse";
static const char* kReadNDEFResponse = "ReadNDEFResponse";
static const char* kWriteNDEFResponse = "WriteNDEFResponse";
@ -41,23 +34,29 @@ bool
NfcMessageHandler::Marshall(Parcel& aParcel, const CommandOptions& aOptions)
{
bool result;
const char* type = NS_ConvertUTF16toUTF8(aOptions.mType).get();
if (!strcmp(type, kChangeRFStateRequest)) {
result = ChangeRFStateRequest(aParcel, aOptions);
} else if (!strcmp(type, kReadNDEFRequest)) {
result = ReadNDEFRequest(aParcel, aOptions);
} else if (!strcmp(type, kWriteNDEFRequest)) {
result = WriteNDEFRequest(aParcel, aOptions);
} else if (!strcmp(type, kMakeReadOnlyRequest)) {
result = MakeReadOnlyRequest(aParcel, aOptions);
} else if (!strcmp(type, kFormatRequest)) {
result = FormatRequest(aParcel, aOptions);
} else if (!strcmp(type, kTransceiveRequest)) {
result = TransceiveRequest(aParcel, aOptions);
} else {
result = false;
}
switch (aOptions.mType) {
case NfcRequestType::ChangeRFState:
result = ChangeRFStateRequest(aParcel, aOptions);
break;
case NfcRequestType::ReadNDEF:
result = ReadNDEFRequest(aParcel, aOptions);
break;
case NfcRequestType::WriteNDEF:
result = WriteNDEFRequest(aParcel, aOptions);
break;
case NfcRequestType::MakeReadOnly:
result = MakeReadOnlyRequest(aParcel, aOptions);
break;
case NfcRequestType::Format:
result = FormatRequest(aParcel, aOptions);
break;
case NfcRequestType::Transceive:
result = TransceiveRequest(aParcel, aOptions);
break;
default:
result = false;
break;
};
return result;
}
@ -157,7 +156,7 @@ NfcMessageHandler::GeneralResponse(const int32_t aResponse, const Parcel& aParce
bool
NfcMessageHandler::ChangeRFStateRequest(Parcel& aParcel, const CommandOptions& aOptions)
{
aParcel.writeInt32(NfcRequest::ChangeRFStateReq);
aParcel.writeInt32(static_cast<int32_t>(NfcRequestType::ChangeRFState));
aParcel.writeInt32(aOptions.mRfState);
mRequestIdQueue.AppendElement(aOptions.mRequestId);
return true;
@ -179,7 +178,7 @@ NfcMessageHandler::ChangeRFStateResponse(const Parcel& aParcel, EventOptions& aO
bool
NfcMessageHandler::ReadNDEFRequest(Parcel& aParcel, const CommandOptions& aOptions)
{
aParcel.writeInt32(NfcRequest::ReadNDEFReq);
aParcel.writeInt32(static_cast<int32_t>(NfcRequestType::ReadNDEF));
aParcel.writeInt32(aOptions.mSessionId);
mRequestIdQueue.AppendElement(aOptions.mRequestId);
return true;
@ -203,6 +202,23 @@ NfcMessageHandler::ReadNDEFResponse(const Parcel& aParcel, EventOptions& aOption
return true;
}
bool
NfcMessageHandler::TransceiveRequest(Parcel& aParcel, const CommandOptions& aOptions)
{
aParcel.writeInt32(static_cast<int32_t>(NfcRequestType::Transceive));
aParcel.writeInt32(aOptions.mSessionId);
aParcel.writeInt32(aOptions.mTechnology);
uint32_t length = aOptions.mCommand.Length();
aParcel.writeInt32(length);
void* data = aParcel.writeInplace(length);
memcpy(data, aOptions.mCommand.Elements(), length);
mRequestIdQueue.AppendElement(aOptions.mRequestId);
return true;
}
bool
NfcMessageHandler::TransceiveResponse(const Parcel& aParcel, EventOptions& aOptions)
{
@ -224,7 +240,7 @@ NfcMessageHandler::TransceiveResponse(const Parcel& aParcel, EventOptions& aOpti
bool
NfcMessageHandler::WriteNDEFRequest(Parcel& aParcel, const CommandOptions& aOptions)
{
aParcel.writeInt32(NfcRequest::WriteNDEFReq);
aParcel.writeInt32(static_cast<int32_t>(NfcRequestType::WriteNDEF));
aParcel.writeInt32(aOptions.mSessionId);
aParcel.writeInt32(aOptions.mIsP2P);
WriteNDEFMessage(aParcel, aOptions);
@ -235,7 +251,7 @@ NfcMessageHandler::WriteNDEFRequest(Parcel& aParcel, const CommandOptions& aOpti
bool
NfcMessageHandler::MakeReadOnlyRequest(Parcel& aParcel, const CommandOptions& aOptions)
{
aParcel.writeInt32(NfcRequest::MakeReadOnlyReq);
aParcel.writeInt32(static_cast<int32_t>(NfcRequestType::MakeReadOnly));
aParcel.writeInt32(aOptions.mSessionId);
mRequestIdQueue.AppendElement(aOptions.mRequestId);
return true;
@ -244,29 +260,12 @@ NfcMessageHandler::MakeReadOnlyRequest(Parcel& aParcel, const CommandOptions& aO
bool
NfcMessageHandler::FormatRequest(Parcel& aParcel, const CommandOptions& aOptions)
{
aParcel.writeInt32(NfcRequest::FormatReq);
aParcel.writeInt32(static_cast<int32_t>(NfcRequestType::Format));
aParcel.writeInt32(aOptions.mSessionId);
mRequestIdQueue.AppendElement(aOptions.mRequestId);
return true;
}
bool
NfcMessageHandler::TransceiveRequest(Parcel& aParcel, const CommandOptions& aOptions)
{
aParcel.writeInt32(NfcRequest::TransceiveReq);
aParcel.writeInt32(aOptions.mSessionId);
aParcel.writeInt32(aOptions.mTechnology);
uint32_t length = aOptions.mCommand.Length();
aParcel.writeInt32(length);
void* data = aParcel.writeInplace(length);
memcpy(data, aOptions.mCommand.Elements(), length);
mRequestIdQueue.AppendElement(aOptions.mRequestId);
return true;
}
bool
NfcMessageHandler::InitializeNotification(const Parcel& aParcel, EventOptions& aOptions)
{

View File

@ -83,7 +83,7 @@ struct CommandOptions
#undef COPY_OPT_FIELD
}
nsString mType;
dom::NfcRequestType mType;
int32_t mSessionId;
nsString mRequestId;
int32_t mRfState;

View File

@ -8,12 +8,24 @@ enum RFState {
"discovery"
};
/**
* Type of the Request used in NfcCommandOptions.
*/
enum NfcRequestType {
"changeRFState",
"readNDEF",
"writeNDEF",
"makeReadOnly",
"format",
"transceive"
};
dictionary NfcCommandOptions
{
DOMString type = "";
required NfcRequestType type;
long sessionId;
DOMString requestId = "";
required DOMString requestId;
RFState rfState;