Use global object for listener count and messaging endpoints.

This commit is contained in:
Richard Lewis 2017-12-04 17:54:00 +00:00
parent dd7358cbb4
commit df1fa80ff6

View file

@ -114,29 +114,33 @@ const SUPPORTED_WIDGET_API_VERSIONS = [
import dis from './dispatcher'; import dis from './dispatcher';
let listenerCount = 0; if (!global.mxWidgetMessagingListenerCount) {
let messageEndpoints = []; global.mxWidgetMessagingListenerCount = 0;
}
if (!global.mxWidgetMessagingMessageEndpoints) {
global.mxWidgetMessagingMessageEndpoints = [];
}
/** /**
* Register widget message event listeners * Register widget message event listeners
*/ */
function startListening() { function startListening() {
if (listenerCount === 0) { if (global.mxWidgetMessagingListenerCount === 0) {
window.addEventListener("message", onMessage, false); window.addEventListener("message", onMessage, false);
} }
listenerCount += 1; global.mxWidgetMessagingListenerCount += 1;
} }
/** /**
* De-register widget message event listeners * De-register widget message event listeners
*/ */
function stopListening() { function stopListening() {
listenerCount -= 1; global.mxWidgetMessagingListenerCount -= 1;
if (listenerCount === 0) { if (global.mxWidgetMessagingListenerCount === 0) {
window.removeEventListener("message", onMessage); window.removeEventListener("message", onMessage);
} }
if (listenerCount < 0) { if (global.mxWidgetMessagingListenerCount < 0) {
// Make an error so we get a stack trace // Make an error so we get a stack trace
const e = new Error( const e = new Error(
"WidgetMessaging: mismatched startListening / stopListening detected." + "WidgetMessaging: mismatched startListening / stopListening detected." +
@ -153,14 +157,14 @@ function stopListening() {
*/ */
function addEndpoint(widgetId, endpointUrl) { function addEndpoint(widgetId, endpointUrl) {
const endpoint = new WidgetMessageEndpoint(widgetId, endpointUrl); const endpoint = new WidgetMessageEndpoint(widgetId, endpointUrl);
if (messageEndpoints && messageEndpoints.length > 0) { if (global.mxWidgetMessagingMessageEndpoints && global.mxWidgetMessagingMessageEndpoints.length > 0) {
if (messageEndpoints.filter(function(ep) { if (global.mxWidgetMessagingMessageEndpoints.filter(function(ep) {
return (ep.widgetId === widgetId && ep.endpointUrl === endpointUrl); return (ep.widgetId === widgetId && ep.endpointUrl === endpointUrl);
}).length > 0) { }).length > 0) {
// Message endpoint already registered // Message endpoint already registered
return; return;
} }
messageEndpoints.push(endpoint); global.mxWidgetMessagingMessageEndpoints.push(endpoint);
} }
} }
@ -171,12 +175,12 @@ function addEndpoint(widgetId, endpointUrl) {
* @return {boolean} True if endpoint was successfully removed * @return {boolean} True if endpoint was successfully removed
*/ */
function removeEndpoint(widgetId, endpointUrl) { function removeEndpoint(widgetId, endpointUrl) {
if (messageEndpoints && messageEndpoints.length > 0) { if (global.mxWidgetMessagingMessageEndpoints && global.mxWidgetMessagingMessageEndpoints.length > 0) {
const length = messageEndpoints.length; const length = global.mxWidgetMessagingMessageEndpoints.length;
messageEndpoints = messageEndpoints.filter(function(endpoint) { global.mxWidgetMessagingMessageEndpoints = global.mxWidgetMessagingMessageEndpoints.filter(function(endpoint) {
return (endpoint.widgetId != widgetId || endpoint.endpointUrl != endpointUrl); return (endpoint.widgetId != widgetId || endpoint.endpointUrl != endpointUrl);
}); });
return (length > messageEndpoints.length); return (length > global.mxWidgetMessagingMessageEndpoints.length);
} }
return false; return false;
} }
@ -236,7 +240,7 @@ function trustedEndpoint(origin) {
return false; return false;
} }
return messageEndpoints.some((endpoint) => { return global.mxWidgetMessagingMessageEndpoints.some((endpoint) => {
return endpoint.endpointUrl === origin; return endpoint.endpointUrl === origin;
}); });
} }