* Sends the message to the viewer. * * @param {string} eventType * @param {?JsonObject|string|undefined} data * @param {boolean} cancelUnsent * @param {boolean} awaitResponse * @return {!Promise<(?JsonObject|string|undefined)>} the response promise
(eventType, data, cancelUnsent, awaitResponse)
| 784 | * @return {!Promise<(?JsonObject|string|undefined)>} the response promise |
| 785 | */ |
| 786 | sendMessageInternal_(eventType, data, cancelUnsent, awaitResponse) { |
| 787 | if (this.messageDeliverer_) { |
| 788 | // Certain message deliverers return fake "Promise" instances called |
| 789 | // "Thenables". Convert from these values into trusted Promise instances, |
| 790 | // assimilating with the resolved (or rejected) internal value. |
| 791 | return /** @type {!Promise<?JsonObject|string|undefined>} */ ( |
| 792 | tryResolve(() => |
| 793 | this.messageDeliverer_( |
| 794 | eventType, |
| 795 | /** @type {?JsonObject|string|undefined} */ (data), |
| 796 | awaitResponse |
| 797 | ) |
| 798 | ) |
| 799 | ); |
| 800 | } |
| 801 | |
| 802 | if (!this.messagingReadyPromise_) { |
| 803 | if (awaitResponse) { |
| 804 | return Promise.reject(getChannelError()); |
| 805 | } else { |
| 806 | return Promise.resolve(); |
| 807 | } |
| 808 | } |
| 809 | |
| 810 | if (!cancelUnsent) { |
| 811 | return this.messagingReadyPromise_.then(() => { |
| 812 | return this.messageDeliverer_(eventType, data, awaitResponse); |
| 813 | }); |
| 814 | } |
| 815 | |
| 816 | const found = findIndex( |
| 817 | this.messageQueue_, |
| 818 | (m) => m.eventType == eventType |
| 819 | ); |
| 820 | |
| 821 | let message; |
| 822 | if (found != -1) { |
| 823 | message = this.messageQueue_.splice(found, 1)[0]; |
| 824 | message.data = data; |
| 825 | message.awaitResponse = message.awaitResponse || awaitResponse; |
| 826 | } else { |
| 827 | const deferred = new Deferred(); |
| 828 | const {promise: responsePromise, resolve: responseResolver} = deferred; |
| 829 | |
| 830 | message = { |
| 831 | eventType, |
| 832 | data, |
| 833 | awaitResponse, |
| 834 | responsePromise, |
| 835 | responseResolver, |
| 836 | }; |
| 837 | } |
| 838 | this.messageQueue_.push(message); |
| 839 | return message.responsePromise; |
| 840 | } |
| 841 | |
| 842 | /** @override */ |
| 843 | broadcast(message) { |
no test coverage detected