From fb04e424bb0826c07090fa4cac91b6fbe7108b18 Mon Sep 17 00:00:00 2001 From: Ed Clement Date: Wed, 8 Dec 2021 16:36:25 +0200 Subject: [PATCH] test(Angular): fix `angularInit()` tests on Safari v15+ Previously, the `angularInit()` tests assumed that the Safari browser uses the `safari-extension:` protocol for browser extension URLs. This is true for versions <15. However, since v15, Safari on iOS only recognizes the `chrome-extension:` protocol, which causes the tests to fail ([example failure][1]). This commit updates the tests to use the correct protocol according to the version of Safari used. NOTE: On macOS, Safari v15+ recognizes both `safari-extension:` and `chrome-extension:`, so it is OK to always use the later with Safari v15+ (regardless of the platform). [1]: https://circleci.com/gh/angular/angular.js/3527 Co-authored-by: George Kalpakas Closes #17166 --- test/AngularSpec.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/test/AngularSpec.js b/test/AngularSpec.js index 3e270b962968..cf7e28cc5701 100644 --- a/test/AngularSpec.js +++ b/test/AngularSpec.js @@ -1793,7 +1793,12 @@ describe('angular', function() { } else if (/Chrome\//.test(userAgent)) { protocol = 'chrome-extension:'; } else if (/Safari\//.test(userAgent)) { - protocol = 'safari-extension:'; + // On iOS, Safari versions <15 recognize `safari-extension:`, while versions >=15 only + // recognize `chrome-extension:`. + // (On macOS, Safari v15 recognizes both protocols, so it is fine to use either.) + var majorVersionMatch = /Version\/(\d+)/.exec(userAgent); + var majorVersion = majorVersionMatch ? parseInt(majorVersionMatch[1], 10) : 0; + protocol = (majorVersion < 15) ? 'safari-extension:' : 'chrome-extension:'; } else { protocol = 'browserext:'; // Upcoming standard scheme. }