Bug 1069177 - B2G NFC: rename nsINFCPeerEventListener to nsINfcDOMEventTarget. r=dimi

This commit is contained in:
Yoshi Huang 2014-09-24 14:52:04 +08:00
Родитель 902a480077
Коммит 0c2106b155
4 изменённых файлов: 58 добавлений и 23 удалений

Просмотреть файл

@ -55,7 +55,7 @@ const NFC_IPC_MSG_NAMES = [
"NFC:ConnectResponse", "NFC:ConnectResponse",
"NFC:CloseResponse", "NFC:CloseResponse",
"NFC:CheckP2PRegistrationResponse", "NFC:CheckP2PRegistrationResponse",
"NFC:PeerEvent", "NFC:DOMEvent",
"NFC:NotifySendFileStatusResponse", "NFC:NotifySendFileStatusResponse",
"NFC:ConfigResponse" "NFC:ConfigResponse"
]; ];
@ -96,7 +96,7 @@ NfcContentHelper.prototype = {
}), }),
_requestMap: null, _requestMap: null,
peerEventListener: null, eventTarget: null,
encodeNDEFRecords: function encodeNDEFRecords(records) { encodeNDEFRecords: function encodeNDEFRecords(records) {
let encodedRecords = []; let encodedRecords = [];
@ -257,8 +257,9 @@ NfcContentHelper.prototype = {
}); });
}, },
registerPeerEventListener: function registerPeerEventListener(listener) { registerEventTarget: function registerEventTarget(target) {
this.peerEventListener = listener; this.eventTarget = target;
cpmm.sendAsyncMessage("NFC:AddEventTarget");
}, },
registerTargetForPeerReady: function registerTargetForPeerReady(window, appId) { registerTargetForPeerReady: function registerTargetForPeerReady(window, appId) {
@ -412,13 +413,13 @@ NfcContentHelper.prototype = {
this.fireRequestSuccess(atob(result.requestId), result); this.fireRequestSuccess(atob(result.requestId), result);
} }
break; break;
case "NFC:PeerEvent": case "NFC:DOMEvent":
switch (result.event) { switch (result.event) {
case NFC.NFC_PEER_EVENT_READY: case NFC.NFC_PEER_EVENT_READY:
this.peerEventListener.notifyPeerReady(result.sessionToken); this.eventTarget.notifyPeerReady(result.sessionToken);
break; break;
case NFC.NFC_PEER_EVENT_LOST: case NFC.NFC_PEER_EVENT_LOST:
this.peerEventListener.notifyPeerLost(result.sessionToken); this.eventTarget.notifyPeerLost(result.sessionToken);
break; break;
} }
break; break;

Просмотреть файл

@ -47,6 +47,10 @@ const NFC_CONTRACTID = "@mozilla.org/nfc;1";
const NFC_CID = const NFC_CID =
Components.ID("{2ff24790-5e74-11e1-b86c-0800200c9a66}"); Components.ID("{2ff24790-5e74-11e1-b86c-0800200c9a66}");
const NFC_IPC_ADD_EVENT_TARGET_MSG_NAMES = [
"NFC:AddEventTarget"
];
const NFC_IPC_MSG_NAMES = [ const NFC_IPC_MSG_NAMES = [
"NFC:CheckSessionToken" "NFC:CheckSessionToken"
]; ];
@ -95,6 +99,8 @@ XPCOMUtils.defineLazyGetter(this, "gMessageManager", function () {
peerTargets: {}, peerTargets: {},
currentPeer: null, currentPeer: null,
eventTargets: [],
init: function init(nfc) { init: function init(nfc) {
this.nfc = nfc; this.nfc = nfc;
@ -113,6 +119,10 @@ XPCOMUtils.defineLazyGetter(this, "gMessageManager", function () {
_registerMessageListeners: function _registerMessageListeners() { _registerMessageListeners: function _registerMessageListeners() {
ppmm.addMessageListener("child-process-shutdown", this); ppmm.addMessageListener("child-process-shutdown", this);
for (let message of NFC_IPC_ADD_EVENT_TARGET_MSG_NAMES) {
ppmm.addMessageListener(message, this);
}
for (let message of NFC_IPC_MSG_NAMES) { for (let message of NFC_IPC_MSG_NAMES) {
ppmm.addMessageListener(message, this); ppmm.addMessageListener(message, this);
} }
@ -133,6 +143,10 @@ XPCOMUtils.defineLazyGetter(this, "gMessageManager", function () {
_unregisterMessageListeners: function _unregisterMessageListeners() { _unregisterMessageListeners: function _unregisterMessageListeners() {
ppmm.removeMessageListener("child-process-shutdown", this); ppmm.removeMessageListener("child-process-shutdown", this);
for (let message of NFC_IPC_ADD_EVENT_TARGET_MSG_NAMES) {
ppmm.removeMessageListener(message, this);
}
for (let message of NFC_IPC_MSG_NAMES) { for (let message of NFC_IPC_MSG_NAMES) {
ppmm.removeMessageListener(message, this); ppmm.removeMessageListener(message, this);
} }
@ -175,16 +189,28 @@ XPCOMUtils.defineLazyGetter(this, "gMessageManager", function () {
}); });
}, },
notifyPeerEvent: function notifyPeerEvent(target, event, sessionToken) { notifyDOMEvent: function notifyDOMEvent(target, options) {
if (!target) { if (!target) {
dump("invalid target"); dump("invalid target");
return; return;
} }
target.sendAsyncMessage("NFC:PeerEvent", { target.sendAsyncMessage("NFC:DOMEvent", options);
event: event, },
sessionToken: sessionToken
}); addEventTarget: function addEventTarget(target) {
if (this.eventTargets.indexOf(target) != -1) {
return;
}
this.eventTargets.push(target);
},
removeEventTarget: function removeEventTarget(target) {
let index = this.eventTargets.indexOf(target);
if (index != -1) {
delete this.eventTargets[index];
}
}, },
checkP2PRegistration: function checkP2PRegistration(message) { checkP2PRegistration: function checkP2PRegistration(message) {
@ -210,7 +236,8 @@ XPCOMUtils.defineLazyGetter(this, "gMessageManager", function () {
// Remember the target that receives onpeerready. // Remember the target that receives onpeerready.
this.currentPeer = target; this.currentPeer = target;
this.notifyPeerEvent(target, NFC.NFC_PEER_EVENT_READY, sessionToken); this.notifyDOMEvent(target, {event: NFC.NFC_PEER_EVENT_READY,
sessionToken: sessionToken});
}, },
onPeerLost: function onPeerLost(sessionToken) { onPeerLost: function onPeerLost(sessionToken) {
@ -221,7 +248,8 @@ XPCOMUtils.defineLazyGetter(this, "gMessageManager", function () {
// For peerlost, the message is delievered to the target which // For peerlost, the message is delievered to the target which
// onpeerready has been called before. // onpeerready has been called before.
this.notifyPeerEvent(this.currentPeer, NFC.NFC_PEER_EVENT_LOST, sessionToken); this.notifyDOMEvent(this.currentPeer, {event: NFC.NFC_PEER_EVENT_LOST,
sessionToken: sessionToken});
this.currentPeer = null; this.currentPeer = null;
}, },
@ -235,10 +263,12 @@ XPCOMUtils.defineLazyGetter(this, "gMessageManager", function () {
if (message.name == "child-process-shutdown") { if (message.name == "child-process-shutdown") {
this.removePeerTarget(message.target); this.removePeerTarget(message.target);
this.nfc.removeTarget(message.target); this.nfc.removeTarget(message.target);
this.removeEventTarget(msg.target);
return null; return null;
} }
if (NFC_IPC_MSG_NAMES.indexOf(message.name) != -1) { if (NFC_IPC_MSG_NAMES.indexOf(message.name) != -1 ||
NFC_IPC_ADD_EVENT_TARGET_MSG_NAMES.indexOf(message.name) != -1 ) {
// Do nothing. // Do nothing.
} else if (NFC_IPC_READ_PERM_MSG_NAMES.indexOf(message.name) != -1) { } else if (NFC_IPC_READ_PERM_MSG_NAMES.indexOf(message.name) != -1) {
if (!message.target.assertPermission("nfc-read")) { if (!message.target.assertPermission("nfc-read")) {
@ -264,6 +294,9 @@ XPCOMUtils.defineLazyGetter(this, "gMessageManager", function () {
} }
switch (message.name) { switch (message.name) {
case "NFC:AddEventTarget":
this.addEventTarget(message.target);
return null;
case "NFC:CheckSessionToken": case "NFC:CheckSessionToken":
if (!SessionHelper.isValidToken(message.data.sessionToken)) { if (!SessionHelper.isValidToken(message.data.sessionToken)) {
debug("Received invalid Session Token: " + message.data.sessionToken); debug("Received invalid Session Token: " + message.data.sessionToken);
@ -472,6 +505,7 @@ Nfc.prototype = {
// Update the upper layers with a session token (alias) // Update the upper layers with a session token (alias)
message.sessionToken = message.sessionToken =
SessionHelper.registerSession(message.sessionId, message.techList); SessionHelper.registerSession(message.sessionId, message.techList);
// Do not expose the actual session to the content // Do not expose the actual session to the content
delete message.sessionId; delete message.sessionId;

Просмотреть файл

@ -7,8 +7,8 @@
interface nsIVariant; interface nsIVariant;
[scriptable, uuid(57fc2998-1058-4fd5-8dd9-0e303218d5fd)] [scriptable, uuid(e81cc1ac-6f0b-4581-a9fb-7ee47ed0158e)]
interface nsINfcPeerEventListener : nsISupports interface nsINfcDOMEventTarget : nsISupports
{ {
/** /**
* Callback function used to notify peerready. * Callback function used to notify peerready.
@ -27,7 +27,7 @@ interface nsINfcPeerEventListener : nsISupports
void notifyPeerLost(in DOMString sessionToken); void notifyPeerLost(in DOMString sessionToken);
}; };
[scriptable, uuid(9a41d969-3375-4933-814e-2da781c8f691)] [scriptable, uuid(7eaf4c31-e1d1-422e-aa55-181f4eb156b0)]
interface nsINfcContentHelper : nsISupports interface nsINfcContentHelper : nsISupports
{ {
const long NFC_EVENT_PEER_READY = 0x01; const long NFC_EVENT_PEER_READY = 0x01;
@ -65,11 +65,11 @@ interface nsINfcContentHelper : nsISupports
in DOMString sessionToken); in DOMString sessionToken);
/** /**
* Register the peer event listener. * Register the event target.
* *
* @param listener An instance of the nsINfcPeerEventListener. * @param target An instance of the nsINfcDOMEventTarget.
*/ */
void registerPeerEventListener(in nsINfcPeerEventListener listener); void registerEventTarget(in nsINfcDOMEventTarget target);
/** /**
* Register the given application id with Chrome process * Register the given application id with Chrome process

Просмотреть файл

@ -138,7 +138,7 @@ function mozNfc() {
debug("No NFC support.") debug("No NFC support.")
} }
this._nfcContentHelper.registerPeerEventListener(this); this._nfcContentHelper.registerEventTarget(this);
} }
mozNfc.prototype = { mozNfc.prototype = {
_nfcContentHelper: null, _nfcContentHelper: null,
@ -289,7 +289,7 @@ mozNfc.prototype = {
contractID: "@mozilla.org/navigatorNfc;1", contractID: "@mozilla.org/navigatorNfc;1",
QueryInterface: XPCOMUtils.generateQI([Ci.nsISupports, QueryInterface: XPCOMUtils.generateQI([Ci.nsISupports,
Ci.nsIDOMGlobalPropertyInitializer, Ci.nsIDOMGlobalPropertyInitializer,
Ci.nsINfcPeerEventListener]), Ci.nsINfcDOMEventTarget]),
}; };
this.NSGetFactory = XPCOMUtils.generateNSGetFactory([MozNFCTag, MozNFCPeer, mozNfc]); this.NSGetFactory = XPCOMUtils.generateNSGetFactory([MozNFCTag, MozNFCPeer, mozNfc]);