Expose the requestId fully in the toWidget postMessage API

This field is flagged as required in the proposal.

Addresses part of https://github.com/vector-im/riot-web/issues/6708

Signed-off-by: Travis Ralston
This commit is contained in:
Travis Ralston 2018-05-12 13:18:43 -06:00
parent f8fd90c559
commit 0522ab8fcd

View file

@ -51,11 +51,11 @@ export default class ToWidgetPostMessageApi {
if (payload.response === undefined) { if (payload.response === undefined) {
return; return;
} }
const promise = this._requestMap[payload._id]; const promise = this._requestMap[payload.requestId];
if (!promise) { if (!promise) {
return; return;
} }
delete this._requestMap[payload._id]; delete this._requestMap[payload.requestId];
promise.resolve(payload); promise.resolve(payload);
} }
@ -64,21 +64,21 @@ export default class ToWidgetPostMessageApi {
targetWindow = targetWindow || window.parent; // default to parent window targetWindow = targetWindow || window.parent; // default to parent window
targetOrigin = targetOrigin || "*"; targetOrigin = targetOrigin || "*";
this._counter += 1; this._counter += 1;
action._id = Date.now() + "-" + Math.random().toString(36) + "-" + this._counter; action.requestId = Date.now() + "-" + Math.random().toString(36) + "-" + this._counter;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this._requestMap[action._id] = {resolve, reject}; this._requestMap[action.requestId] = {resolve, reject};
targetWindow.postMessage(action, targetOrigin); targetWindow.postMessage(action, targetOrigin);
if (this._timeoutMs > 0) { if (this._timeoutMs > 0) {
setTimeout(() => { setTimeout(() => {
if (!this._requestMap[action._id]) { if (!this._requestMap[action.requestId]) {
return; return;
} }
console.error("postMessage request timed out. Sent object: " + JSON.stringify(action), console.error("postMessage request timed out. Sent object: " + JSON.stringify(action),
this._requestMap); this._requestMap);
this._requestMap[action._id].reject(new Error("Timed out")); this._requestMap[action.requestId].reject(new Error("Timed out"));
delete this._requestMap[action._id]; delete this._requestMap[action.requestId];
}, this._timeoutMs); }, this._timeoutMs);
} }
}); });