/* * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. */ import * as utils from './utils'; // Browser shims. import * as chromeShim from './chrome/chrome_shim'; import * as edgeShim from './edge/edge_shim'; import * as firefoxShim from './firefox/firefox_shim'; import * as safariShim from './safari/safari_shim'; import * as commonShim from './common_shim'; // Shimming starts here. export function adapterFactory({window} = {}, options = { shimChrome: true, shimFirefox: true, shimEdge: true, shimSafari: true, }) { // Utils. const logging = utils.log; const browserDetails = utils.detectBrowser(window); const adapter = { browserDetails, commonShim, extractVersion: utils.extractVersion, disableLog: utils.disableLog, disableWarnings: utils.disableWarnings }; // Shim browser if found. switch (browserDetails.browser) { case 'chrome': if (!chromeShim || !chromeShim.shimPeerConnection || !options.shimChrome) { logging('Chrome shim is not included in this adapter release.'); return adapter; } if (browserDetails.version === null) { logging('Chrome shim can not determine version, not shimming.'); return adapter; } logging('adapter.js shimming chrome.'); // Export to the adapter global object visible in the browser. adapter.browserShim = chromeShim; chromeShim.shimGetUserMedia(window); chromeShim.shimMediaStream(window); chromeShim.shimPeerConnection(window); chromeShim.shimOnTrack(window); chromeShim.shimAddTrackRemoveTrack(window); chromeShim.shimGetSendersWithDtmf(window); chromeShim.shimGetStats(window); chromeShim.shimSenderReceiverGetStats(window); chromeShim.fixNegotiationNeeded(window); commonShim.shimRTCIceCandidate(window); commonShim.shimConnectionState(window); commonShim.shimMaxMessageSize(window); commonShim.shimSendThrowTypeError(window); commonShim.removeAllowExtmapMixed(window); break; case 'firefox': if (!firefoxShim || !firefoxShim.shimPeerConnection || !options.shimFirefox) { logging('Firefox shim is not included in this adapter release.'); return adapter; } logging('adapter.js shimming firefox.'); // Export to the adapter global object visible in the browser. adapter.browserShim = firefoxShim; firefoxShim.shimGetUserMedia(window); firefoxShim.shimPeerConnection(window); firefoxShim.shimOnTrack(window); firefoxShim.shimRemoveStream(window); firefoxShim.shimSenderGetStats(window); firefoxShim.shimReceiverGetStats(window); firefoxShim.shimRTCDataChannel(window); firefoxShim.shimAddTransceiver(window); firefoxShim.shimGetParameters(window); firefoxShim.shimCreateOffer(window); firefoxShim.shimCreateAnswer(window); commonShim.shimRTCIceCandidate(window); commonShim.shimConnectionState(window); commonShim.shimMaxMessageSize(window); commonShim.shimSendThrowTypeError(window); break; case 'edge': if (!edgeShim || !edgeShim.shimPeerConnection || !options.shimEdge) { logging('MS edge shim is not included in this adapter release.'); return adapter; } logging('adapter.js shimming edge.'); // Export to the adapter global object visible in the browser. adapter.browserShim = edgeShim; edgeShim.shimGetUserMedia(window); edgeShim.shimGetDisplayMedia(window); edgeShim.shimPeerConnection(window); edgeShim.shimReplaceTrack(window); // the edge shim implements the full RTCIceCandidate object. commonShim.shimMaxMessageSize(window); commonShim.shimSendThrowTypeError(window); break; case 'safari': if (!safariShim || !options.shimSafari) { logging('Safari shim is not included in this adapter release.'); return adapter; } logging('adapter.js shimming safari.'); // Export to the adapter global object visible in the browser. adapter.browserShim = safariShim; safariShim.shimRTCIceServerUrls(window); safariShim.shimCreateOfferLegacy(window); safariShim.shimCallbacksAPI(window); safariShim.shimLocalStreamsAPI(window); safariShim.shimRemoteStreamsAPI(window); safariShim.shimTrackEventTransceiver(window); safariShim.shimGetUserMedia(window); safariShim.shimAudioContext(window); commonShim.shimRTCIceCandidate(window); commonShim.shimMaxMessageSize(window); commonShim.shimSendThrowTypeError(window); commonShim.removeAllowExtmapMixed(window); break; default: logging('Unsupported browser!'); break; } return adapter; }