mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 933093 - Part 2: Add 'sendFile' implementation to Chrome process. r=yoshi
The chrome process is the arbitrator / mediator between the content process that issued the nfc 'sendFile' operation and the system-process (content) that is responsible for performing handover to an alternate carrier(AC). The chrome process notifies the system process through a 'nfc-manager-send-file' system-message to initiate the handover process. The system-process subsequently handovers the data to alternate carrier's (AC's : BT / WiFi) 'sendFile' interface.
This commit is contained in:
parent
08f0a3df68
commit
73c0d4b415
@ -51,7 +51,8 @@ const NFC_IPC_MSG_NAMES = [
|
|||||||
"NFC:GetDetailsNDEF",
|
"NFC:GetDetailsNDEF",
|
||||||
"NFC:MakeReadOnlyNDEF",
|
"NFC:MakeReadOnlyNDEF",
|
||||||
"NFC:Connect",
|
"NFC:Connect",
|
||||||
"NFC:Close"
|
"NFC:Close",
|
||||||
|
"NFC:SendFile"
|
||||||
];
|
];
|
||||||
|
|
||||||
const NFC_IPC_PEER_MSG_NAMES = [
|
const NFC_IPC_PEER_MSG_NAMES = [
|
||||||
@ -296,11 +297,11 @@ XPCOMUtils.defineLazyGetter(this, "gMessageManager", function () {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add extra permission check for two IPC Peer events:
|
// Add extra permission check for below IPC Peer events:
|
||||||
// 'NFC:CheckP2PRegistration' , 'NFC:NotifyUserAcceptedP2P'
|
// 'NFC:CheckP2PRegistration' , 'NFC:NotifyUserAcceptedP2P'
|
||||||
if ((msg.name == "NFC:CheckP2PRegistration") ||
|
if ((msg.name == "NFC:CheckP2PRegistration") ||
|
||||||
(msg.name == "NFC:NotifyUserAcceptedP2P")) {
|
(msg.name == "NFC:NotifyUserAcceptedP2P")) {
|
||||||
// ONLY privileged Content can send these two events
|
// ONLY privileged Content can send these events
|
||||||
if (!msg.target.assertPermission("nfc-manager")) {
|
if (!msg.target.assertPermission("nfc-manager")) {
|
||||||
debug("NFC message " + message.name +
|
debug("NFC message " + message.name +
|
||||||
" from a content process with no 'nfc-manager' privileges.");
|
" from a content process with no 'nfc-manager' privileges.");
|
||||||
@ -532,6 +533,7 @@ Nfc.prototype = {
|
|||||||
break;
|
break;
|
||||||
case "NFC:WriteNDEF": // Fall through
|
case "NFC:WriteNDEF": // Fall through
|
||||||
case "NFC:MakeReadOnlyNDEF":
|
case "NFC:MakeReadOnlyNDEF":
|
||||||
|
case "NFC:SendFile":
|
||||||
if (!message.target.assertPermission("nfc-write")) {
|
if (!message.target.assertPermission("nfc-write")) {
|
||||||
debug("NFC message " + message.name +
|
debug("NFC message " + message.name +
|
||||||
" from a content process with no 'nfc-write' privileges.");
|
" from a content process with no 'nfc-write' privileges.");
|
||||||
@ -574,6 +576,17 @@ Nfc.prototype = {
|
|||||||
case "NFC:Close":
|
case "NFC:Close":
|
||||||
this.sendToWorker("close", message.json);
|
this.sendToWorker("close", message.json);
|
||||||
break;
|
break;
|
||||||
|
case "NFC:SendFile":
|
||||||
|
// Chrome process is the arbitrator / mediator between
|
||||||
|
// system app (content process) that issued nfc 'sendFile' operation
|
||||||
|
// and system app that handles the system message :
|
||||||
|
// 'nfc-manager-send-file'. System app subsequently handover's
|
||||||
|
// the data to alternate carrier's (BT / WiFi) 'sendFile' interface.
|
||||||
|
|
||||||
|
// Notify system app to initiate BT send file operation
|
||||||
|
gSystemMessenger.broadcastMessage("nfc-manager-send-file",
|
||||||
|
message.json);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
debug("UnSupported : Message Name " + message.name);
|
debug("UnSupported : Message Name " + message.name);
|
||||||
return null;
|
return null;
|
||||||
|
@ -218,6 +218,23 @@ NfcContentHelper.prototype = {
|
|||||||
return request;
|
return request;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
sendFile: function sendFile(window, data, sessionToken) {
|
||||||
|
if (window == null) {
|
||||||
|
throw Components.Exception("Can't get window object",
|
||||||
|
Cr.NS_ERROR_UNEXPECTED);
|
||||||
|
}
|
||||||
|
let request = Services.DOMRequest.createRequest(window);
|
||||||
|
let requestId = btoa(this.getRequestId(request));
|
||||||
|
this._requestMap[requestId] = window;
|
||||||
|
|
||||||
|
cpmm.sendAsyncMessage("NFC:SendFile", {
|
||||||
|
requestId: requestId,
|
||||||
|
sessionToken: sessionToken,
|
||||||
|
blob: data.blob
|
||||||
|
});
|
||||||
|
return request;
|
||||||
|
},
|
||||||
|
|
||||||
registerTargetForPeerEvent: function registerTargetForPeerEvent(window,
|
registerTargetForPeerEvent: function registerTargetForPeerEvent(window,
|
||||||
appId, event, callback) {
|
appId, event, callback) {
|
||||||
if (window == null) {
|
if (window == null) {
|
||||||
@ -276,7 +293,6 @@ NfcContentHelper.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
// nsIObserver
|
// nsIObserver
|
||||||
|
|
||||||
observe: function observe(subject, topic, data) {
|
observe: function observe(subject, topic, data) {
|
||||||
if (topic == "xpcom-shutdown") {
|
if (topic == "xpcom-shutdown") {
|
||||||
this.removeMessageListener();
|
this.removeMessageListener();
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
interface nsIVariant;
|
interface nsIVariant;
|
||||||
|
|
||||||
[scriptable, function, uuid(271f48b0-c884-4f0b-a348-e29824c95168)]
|
[scriptable, function, uuid(26673d1a-4af4-470a-ba96-f1f54b1f2052)]
|
||||||
interface nsINfcPeerCallback : nsISupports
|
interface nsINfcPeerCallback : nsISupports
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
@ -40,6 +40,27 @@ interface nsINfcContentHelper : nsISupports
|
|||||||
nsIDOMDOMRequest connect(in nsIDOMWindow window, in unsigned long techType, in DOMString sessionToken);
|
nsIDOMDOMRequest connect(in nsIDOMWindow window, in unsigned long techType, in DOMString sessionToken);
|
||||||
nsIDOMDOMRequest close(in nsIDOMWindow window, in DOMString sessionToken);
|
nsIDOMDOMRequest close(in nsIDOMWindow window, in DOMString sessionToken);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initiate Send file operation
|
||||||
|
*
|
||||||
|
* @param window
|
||||||
|
* Current window
|
||||||
|
*
|
||||||
|
* @param blob
|
||||||
|
* Raw data of the file to be sent. This object represents a file-like
|
||||||
|
* (nsIDOMFile) object of immutable, raw data. The blob data needs
|
||||||
|
* to be 'object wrapped' before calling this interface.
|
||||||
|
*
|
||||||
|
* @param sessionToken
|
||||||
|
* Current token
|
||||||
|
*
|
||||||
|
* Returns DOMRequest, if initiation of send file operation is successful
|
||||||
|
* then 'onsuccess' is called else 'onerror'
|
||||||
|
*/
|
||||||
|
nsIDOMDOMRequest sendFile(in nsIDOMWindow window,
|
||||||
|
in jsval blob,
|
||||||
|
in DOMString sessionToken);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register the given application id with Chrome process
|
* Register the given application id with Chrome process
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user