if (!msg.hasOwnProperty('remotePort')) rmp = null;
else rmp = new RemoteMessagePort(msg.remotePort, msg.remoteAppId, msg.trusted);
for (var i = 0; i < listeners.length; i++) {
- var func = listeners[i][0];
- setTimeout(function() {
- func(msg.message, rmp);
- }, 0);
+ setTimeout(
+ function(f) {
+ f(msg.message, rmp);
+ }.bind(null, listeners[i][0]),
+ 0
+ );
}
});
MessageportInstance::~MessageportInstance() {
ScopeLogger();
+ for (int port : local_ports) {
+ int ret = message_port_unregister_local_port(port);
+ if (MESSAGE_PORT_ERROR_NONE != ret) {
+ LoggerW("Failed to unregister local port listener during instance destructor.");
+ }
+ }
+ for (int port : local_trusted_ports) {
+ int ret = message_port_unregister_trusted_local_port(port);
+ if (MESSAGE_PORT_ERROR_NONE != ret) {
+ LoggerW("Failed to unregister local trusted port listener during instance destructor");
+ }
+ }
}
enum MessageportCallbacks {
break;
}
} else {
+ local_ports.push_back(portId);
ReportSuccess(picojson::value(static_cast<double>(portId)), out);
}
}
break;
}
} else {
+ local_trusted_ports.push_back(portId);
ReportSuccess(picojson::value(static_cast<double>(portId)), out);
}
}
void MessagePortManagerRequesttrustedremotemessageport(const picojson::value& args,
picojson::object& out);
void RemoteMessagePortSendmessage(const picojson::value& args, picojson::object& out);
+ std::vector<int> local_ports;
+ std::vector<int> local_trusted_ports;
};
} // namespace messageport