MCPcopy Index your code
hub / github.com/ampproject/amphtml / sendMessageInternal_

Method sendMessageInternal_

src/service/viewer-impl.js:786–840  ·  view source on GitHub ↗

* 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)

Source from the content-addressed store, hash-verified

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) {

Callers 3

sendMessageMethod · 0.95
broadcastMethod · 0.95

Calls 6

tryResolveFunction · 0.90
findIndexFunction · 0.90
getChannelErrorFunction · 0.85
resolveMethod · 0.80
thenMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected