Skip to content
This repository has been archived by the owner on Aug 1, 2024. It is now read-only.

Commit

Permalink
RELNOTES: Support Amazon Silk in versionOf, and fix Silk support for …
Browse files Browse the repository at this point in the history
…newer browsers.

PiperOrigin-RevId: 408688153
Change-Id: I67994eb28ce73033add29b8d4fea98ce0774cc34
  • Loading branch information
kjin authored and copybara-github committed Nov 9, 2021
1 parent 7828ddc commit 91f1ccf
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 8 deletions.
21 changes: 17 additions & 4 deletions closure/goog/labs/useragent/browser.js
Original file line number Diff line number Diff line change
Expand Up @@ -199,8 +199,9 @@ function matchChrome() {
if (useUserAgentBrand()) {
return util.matchUserAgentDataBrand(Brand.CHROMIUM);
}
return (util.matchUserAgent('Chrome') || util.matchUserAgent('CriOS')) &&
!matchEdgeHtml();
return ((util.matchUserAgent('Chrome') || util.matchUserAgent('CriOS')) &&
!matchEdgeHtml()) ||
isSilk();
}

/** @return {boolean} Whether the user's browser is the Android browser. */
Expand Down Expand Up @@ -358,6 +359,12 @@ function getVersion() {
return lookUpValueWithKeys(['Edg']);
}

// Check Silk before Chrome since it may have Chrome in its string and be
// treated as Chrome.
if (isSilk()) {
return lookUpValueWithKeys(['Silk']);
}

if (isChrome()) {
return lookUpValueWithKeys(['Chrome', 'CriOS', 'HeadlessChrome']);
}
Expand Down Expand Up @@ -492,7 +499,8 @@ function getFullVersionFromUserAgentString(browser) {
// "Mozilla" and the engine.
if ((browser === Brand.FIREFOX && isFirefox()) ||
(browser === Brand.SAFARI && isSafari()) ||
(browser === Brand.ANDROID_BROWSER && isAndroidBrowser())) {
(browser === Brand.ANDROID_BROWSER && isAndroidBrowser()) ||
(browser === Brand.SILK && isSilk())) {
const tuple = versionTuples[2];
return tuple && tuple[1] || '';
}
Expand All @@ -513,7 +521,9 @@ function getFullVersionFromUserAgentString(browser) {
*/
function versionOf(browser) {
let versionParts;
if (useUserAgentBrand()) {
// Silk currently does not identify itself in its userAgentData.brands array,
// so if checking its version, always fall back to the user agent string.
if (useUserAgentBrand() && browser !== Brand.SILK) {
const data = util.getUserAgentData();
const matchingBrand = data.brands.find(({brand}) => brand === browser);
if (!matchingBrand || !matchingBrand.version) {
Expand Down Expand Up @@ -631,6 +641,9 @@ function fullVersionOf(browser) {
// upper bound for when fullVersionList is estimated to have been implemented.
// TODO(user): If fullVersionList is implemented in an earlier version
// of Chromium, lower this value to compare against that major version.
// Additionally, Silk currently does not identify itself in its
// userAgentData.brands array, so if checking its version, always fall back to
// the user agent string.
if (useUserAgentBrand() && !(versionOf(Brand.CHROMIUM) < 101)) {
const data = util.getUserAgentData();
// Operate under the assumption that the low-entropy and high-entropy lists
Expand Down
49 changes: 46 additions & 3 deletions closure/goog/labs/useragent/browser_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ const Browser = {
IE: userAgentBrowser.isIE,
IOS_WEBVIEW: userAgentBrowser.isIosWebview,
SAFARI: userAgentBrowser.isSafari,
SILK: userAgentBrowser.isSilk,
EDGE: userAgentBrowser.isEdge
};

Expand All @@ -40,7 +39,8 @@ const Browser = {
*/
const NonChromeChromiumBrowser = {
EDGE_CHROMIUM: userAgentBrowser.isEdgeChromium,
OPERA_CHROMIUM: userAgentBrowser.isOperaChromium
OPERA_CHROMIUM: userAgentBrowser.isOperaChromium,
SILK: userAgentBrowser.isSilk
};

/*
Expand Down Expand Up @@ -911,8 +911,13 @@ testSuite({

async testSilk() {
util.setUserAgent(testAgents.KINDLE_FIRE);
assertBrowser(Browser.SILK);
assertBrowser(Browser.CHROME);
assertNonChromeChromiumBrowser(NonChromeChromiumBrowser.SILK);
assertPreUACHVersion('2.1');

assertVersionOf([{brand: userAgentBrowser.Brand.SILK, version: 2}]);
await assertFullVersionOf(
[{brand: userAgentBrowser.Brand.SILK, version: '2.1'}], true);
},

async testFirefoxOnAndroidTablet() {
Expand Down Expand Up @@ -1005,6 +1010,44 @@ testSuite({
await assertGetVersionStringForLogging(DEFINITELY_NOT_A_BROWSER, '', '');
},

async testSilkUserAgentData() {
const userAgentDataWithVersion =
testAgentData.withHighEntropyData(testAgentData.SILK_USERAGENT_DATA, {
fullVersionList: [
{brand: 'Chromium', version: '93.0.4577.82'},
// No Silk brand yet.
]
});
util.setUserAgent(testAgents.KINDLE_FIRE_SILK_93);
util.setUserAgentData(userAgentDataWithVersion);

assertBrowser(Browser.CHROME);
assertNonChromeChromiumBrowser(NonChromeChromiumBrowser.SILK);

assertPreUACHVersion('93.2.7');
assertVersionOf([
{brand: userAgentBrowser.Brand.CHROMIUM, version: 93},
{brand: userAgentBrowser.Brand.SILK, version: 93}
]);

await assertFullVersionOf(
[
{brand: userAgentBrowser.Brand.CHROMIUM, version: '93.0.4577.82'},
{brand: userAgentBrowser.Brand.SILK, version: '93.2.7'}
],
true);
await assertFullVersionOfBetween(
userAgentBrowser.Brand.CHROMIUM, '93.0', '93.1');
await assertFullVersionOfBetween(
userAgentBrowser.Brand.SILK, '93.2.6', '93.2.8');

await assertGetVersionStringForLogging(
userAgentBrowser.Brand.CHROMIUM, '93.0.4577.82');
await assertGetVersionStringForLogging(
userAgentBrowser.Brand.SILK, '93.2.7');
await assertGetVersionStringForLogging(DEFINITELY_NOT_A_BROWSER, '', '');
},

async testChromeUserAgentData() {
// Note: The full versions listed here are fictional, made up by bumping
// a legitimate version's major version number by 10 (e.g. 91.* -> 101.*).
Expand Down
11 changes: 11 additions & 0 deletions closure/goog/labs/useragent/test_agentdata.js
Original file line number Diff line number Diff line change
Expand Up @@ -165,3 +165,14 @@ exports.EDGECHROMIUM_USERAGENT_DATA = Object.freeze({
getHighEntropyValues: getHighEntropyValuesMock,
platform: 'Windows',
});

/** @const {!NavigatorUAData} */
exports.SILK_USERAGENT_DATA = Object.freeze({
brands: deepFreeze(shuffle([
{brand: 'Not;A Brand', version: '99'},
{brand: 'Chromium', version: '93'},
])),
mobile: false,
getHighEntropyValues: getHighEntropyValuesMock,
platform: 'Android',
});
4 changes: 4 additions & 0 deletions closure/goog/labs/useragent/test_agents.js
Original file line number Diff line number Diff line change
Expand Up @@ -469,6 +469,10 @@ testAgents.KINDLE_FIRE =
' AppleWebKit/535.19 (KHTML, like Gecko) Silk/2.1 Mobile Safari/535.19' +
' Silk-Accelerated=true';

/** @const {string} */
testAgents.KINDLE_FIRE_SILK_93 =
'Mozilla/5.0 (Linux; Android 5.1.1; KFARWI) AppleWebKit/537.36' +
' (KHTML, like Gecko) Silk/93.2.7 like Chrome/93.0.4577.82 Safari/537.36';

/** @const {string} */
testAgents.FIREFOX_ANDROID_TABLET =
Expand Down
2 changes: 1 addition & 1 deletion closure/goog/labs/useragent/util.js
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ function extractVersionTuples(userAgent) {
const versionRegExp = new RegExp(
// Key. Note that a key may have a space.
// (i.e. 'Mobile Safari' in 'Mobile Safari/5.0')
'(\\w[\\w ]+)' +
'([A-Z][\\w ]+)' +

'/' + // slash
'([^\\s]+)' + // version (i.e. '5.0b')
Expand Down

0 comments on commit 91f1ccf

Please # to comment.