Bug 1082440 - B2G NFC: Dispatch NFC events to foreground app. r=yoshi

This commit is contained in:
Dimi Lee 2015-01-23 11:35:03 +08:00
parent 3db04939e3
commit 991978f0a9
4 changed files with 24 additions and 16 deletions

View File

@ -134,7 +134,7 @@ NfcContentHelper.prototype = {
.getService(Ci.nsIXULRuntime)
.processType == Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT;
if (inParent) {
this._tabId = -1;
this._tabId = Ci.nsINfcBrowserAPI.SYSTEM_APP_ID;
} else {
throw Components.Exception("Can't get tab id in child process",
Cr.NS_ERROR_UNEXPECTED);

View File

@ -181,7 +181,7 @@ XPCOMUtils.defineLazyGetter(this, "gMessageManager", function () {
this.focusApp = id;
} else if (this.focusApp == id){
// Set focusApp to null means currently there is no foreground app.
this.focusApp = null;
this.focusApp = NFC.SYSTEM_APP_ID;
}
},
@ -228,27 +228,30 @@ XPCOMUtils.defineLazyGetter(this, "gMessageManager", function () {
},
onTagFound: function onTagFound(message) {
let target = this.eventListeners[this.focusApp] ||
this.eventListeners[NFC.SYSTEM_APP_ID];
message.event = NFC.TAG_EVENT_FOUND;
for (let id in this.eventListeners) {
this.notifyDOMEvent(this.eventListeners[id], message);
}
this.notifyDOMEvent(target, message);
delete message.event;
},
onTagLost: function onTagLost(sessionToken) {
for (let id in this.eventListeners) {
this.notifyDOMEvent(this.eventListeners[id],
{ event: NFC.TAG_EVENT_LOST,
sessionToken: sessionToken });
}
let target = this.eventListeners[this.focusApp] ||
this.eventListeners[NFC.SYSTEM_APP_ID];
this.notifyDOMEvent(target, { event: NFC.TAG_EVENT_LOST,
sessionToken: sessionToken });
},
onPeerEvent: function onPeerEvent(eventType, sessionToken) {
for (let id in this.eventListeners) {
this.notifyDOMEvent(this.eventListeners[id],
{ event: eventType,
sessionToken: sessionToken });
}
let target = this.eventListeners[this.focusApp] ||
this.eventListeners[NFC.SYSTEM_APP_ID];
this.notifyDOMEvent(target, { event: eventType,
sessionToken: sessionToken });
},
onRFStateChange: function onRFStateChange(rfState) {

View File

@ -46,5 +46,8 @@ this.TAG_EVENT_LOST = 0x04;
this.PEER_EVENT_FOUND = 0x05;
this.RF_EVENT_STATE_CHANGE = 0x06;
// This value should sync with |SYSTEM_APP_ID| in nsINfcContentHelper.idl
this.SYSTEM_APP_ID = -1;
// Allow this file to be imported via Components.utils.import().
this.EXPORTED_SYMBOLS = Object.keys(this);

View File

@ -102,9 +102,11 @@ interface nsINfcRequestCallback : nsISupports
void notifyError(in DOMString errorMsg);
};
[scriptable, uuid(7ae46728-bc42-44bd-8093-bc7563abf52d)]
[scriptable, uuid(7ae94107-adc9-4467-ae44-72f9a91f3ee8)]
interface nsINfcBrowserAPI : nsISupports
{
const int32_t SYSTEM_APP_ID = -1;
void setFocusApp(in uint64_t tabId,
in boolean isFocus);
};