in src/core.js [367:430]
function setupEventListenersForMultiTabUseInFirefox(softphoneParamsIn) {
var softphoneParams = connect.merge(params.softphone || {}, softphoneParamsIn);
// keep the softphone params for external use
connect.core.softphoneParams = softphoneParams;
if (connect.isFirefoxBrowser()) {
// In Firefox, when a tab takes over another tab's softphone primary,
// the previous primary tab should delete sofphone manager and stop microphone
connect.core.getUpstream().onUpstream(connect.EventType.MASTER_RESPONSE, function (res) {
if (res.data && res.data.topic === connect.MasterTopics.SOFTPHONE && res.data.takeOver && (res.data.masterId !== connect.core.portStreamId)) {
if (connect.core.softphoneManager) {
connect.core.softphoneManager.onInitContactSub.unsubscribe();
delete connect.core.softphoneManager;
}
var userMediaStream = connect.core.getSoftphoneUserMediaStream();
if (userMediaStream) {
userMediaStream.getTracks().forEach(function(track) { track.stop(); });
connect.core.setSoftphoneUserMediaStream(null);
}
}
});
// In Firefox, when multiple tabs are open,
// webrtc session is not started until READY_TO_START_SESSION event is triggered
connect.core.getEventBus().subscribe(connect.ConnectionEvents.READY_TO_START_SESSION, function () {
connect.ifMaster(connect.MasterTopics.SOFTPHONE, function () {
if (connect.core.softphoneManager) {
connect.core.softphoneManager.startSession();
}
}, function () {
connect.becomeMaster(connect.MasterTopics.SOFTPHONE, function () {
connect.agent(function (agent) {
if (!connect.core.softphoneManager && agent.isSoftphoneEnabled()) {
connect.becomeMaster(connect.MasterTopics.SEND_LOGS);
connect.core.softphoneManager = new connect.SoftphoneManager(softphoneParams);
connect.core.softphoneManager.startSession();
}
});
});
});
});
// handling outbound-call and auto-accept cases for pending session
connect.contact(function (c) {
connect.agent(function (agent) {
c.onRefresh(function (contact) {
if (
connect.hasOtherConnectedCCPs() &&
document.visibilityState === 'visible' &&
(contact.getStatus().type === connect.ContactStatusType.CONNECTING || contact.getStatus().type === connect.ContactStatusType.INCOMING)
) {
var isOutBoundCall = contact.isSoftphoneCall() && !contact.isInbound();
var isAutoAcceptEnabled = contact.isSoftphoneCall() && agent.getConfiguration().softphoneAutoAccept;
var isQueuedCallback = contact.getType() === connect.ContactType.QUEUE_CALLBACK;
if (isOutBoundCall || isAutoAcceptEnabled || isQueuedCallback) {
connect.core.triggerReadyToStartSessionEvent();
}
}
});
});
});
}
}