Skip to content

Commit 5682df5

Browse files
committed
extract safari version for internal usage
so nobody has to worry about bugs in very old safari versions Fixes #1082 with inspiration from #1127
1 parent b5e5f71 commit 5682df5

File tree

5 files changed

+24
-11
lines changed

5 files changed

+24
-11
lines changed

src/js/common_shim.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,8 @@ export function removeExtmapAllowMixed(window, browserDetails) {
353353
if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) {
354354
return;
355355
}
356-
if (browserDetails.browser === 'safari' && browserDetails.version >= 605) {
356+
if (browserDetails.browser === 'safari' &&
357+
browserDetails._safariVersion >= 13.1) {
357358
return;
358359
}
359360
const nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription;

src/js/utils.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ let deprecationWarnings_ = true;
2121
*/
2222
export function extractVersion(uastring, expr, pos) {
2323
const match = uastring.match(expr);
24-
return match && match.length >= pos && parseInt(match[pos], 10);
24+
return match && match.length >= pos && parseFloat(match[pos], 10);
2525
}
2626

2727
// Wraps the peerconnection event eventNameToWrap in a function
@@ -187,10 +187,13 @@ export function detectBrowser(window) {
187187
} else if (window.RTCPeerConnection &&
188188
navigator.userAgent.match(/AppleWebKit\/(\d+)\./)) { // Safari.
189189
result.browser = 'safari';
190-
result.version = extractVersion(navigator.userAgent,
191-
/AppleWebKit\/(\d+)\./, 1);
190+
result.version = parseInt(extractVersion(navigator.userAgent,
191+
/AppleWebKit\/(\d+)\./, 1));
192192
result.supportsUnifiedPlan = window.RTCRtpTransceiver &&
193193
'currentDirection' in window.RTCRtpTransceiver.prototype;
194+
// Only for internal usage.
195+
result._safariVersion = extractVersion(navigator.userAgent,
196+
/Version\/(\d+(\.?\d+))/);
194197
} else { // Default fallthrough: not supported.
195198
result.browser = 'Not a supported browser.';
196199
return result;

test/unit/detectBrowser.test.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,5 +69,6 @@ describe('detectBrowser', () => {
6969
const browserDetails = detectBrowser(window);
7070
expect(browserDetails.browser).toEqual('safari');
7171
expect(browserDetails.version).toEqual(604);
72+
// expect(browserDetails._safariVersion).toEqual(10.2);
7273
});
7374
});

test/unit/extmap-allow-mixed.test.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ describe('removal of extmap-allow-mixed', () => {
3333
window.RTCPeerConnection.prototype.setRemoteDescription = function() {
3434
return origSetRemoteDescription.apply(this, arguments);
3535
};
36-
browserDetails = {browser: 'chrome', version: '88'};
36+
browserDetails = {browser: 'chrome', version: 88};
3737
});
3838

3939
it('does not remove the extmap-allow-mixed line after Chrome 71', () => {
@@ -66,11 +66,11 @@ describe('removal of extmap-allow-mixed', () => {
6666
window.RTCPeerConnection.prototype.setRemoteDescription = function() {
6767
return origSetRemoteDescription.apply(this, arguments);
6868
};
69-
browserDetails = {browser: 'safari', version: '605'};
69+
browserDetails = {browser: 'safari', version: 605};
7070
});
7171

72-
it('does not remove the extmap-allow-mixed line after 605', () => {
73-
browserDetails.version = 605;
72+
it('does not remove the extmap-allow-mixed line after 13.1', () => {
73+
browserDetails._safariVersion = 13.1;
7474
shim.removeExtmapAllowMixed(window, browserDetails);
7575

7676
const pc = new window.RTCPeerConnection();
@@ -80,8 +80,8 @@ describe('removal of extmap-allow-mixed', () => {
8080
.toEqual('\n' + sdp);
8181
});
8282

83-
it('does remove the extmap-allow-mixed line before 605', () => {
84-
browserDetails.version = 604;
83+
it('does remove the extmap-allow-mixed line before 13.1', () => {
84+
browserDetails._safariVersion = 13.0;
8585
shim.removeExtmapAllowMixed(window, browserDetails);
8686

8787
const pc = new window.RTCPeerConnection();

test/unit/extractVersion.test.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ describe('extractVersion', () => {
111111
});
112112
});
113113

114-
describe('Safari regular expression', () => {
114+
describe('Webkit regular expression', () => {
115115
const expr = /AppleWebKit\/(\d+)/;
116116
it('matches the webkit version', () => {
117117
ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) ' +
@@ -144,5 +144,13 @@ describe('extractVersion', () => {
144144
expect(extractVersion(ua, expr, 1)).toBe(null);
145145
});
146146
});
147+
describe('Safari regular expression', () => {
148+
const expr = /Version\/(\d+(\.?\d+))/;
149+
it('extracts the Safari version', () => {
150+
ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) ' +
151+
'AppleWebKit/604.1.6 (KHTML, like Gecko) Version/10.2 Safari/604.1.6';
152+
expect(extractVersion(ua, expr, 1)).toBe(10.2);
153+
});
154+
});
147155
});
148156

0 commit comments

Comments
 (0)