Skip to content

Commit e255881

Browse files
committed
set browser from UA if the browser was an empty
1 parent 3df12dd commit e255881

File tree

2 files changed

+117
-0
lines changed

2 files changed

+117
-0
lines changed

lib/driver.js

+34
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ const DEV_MODE_ID = 'com.palmdts.devmode';
3232
*/
3333
const CHROMEDRIVER_AUTODOWNLOAD_FEATURE = 'chromedriver_autodownload';
3434

35+
/**
36+
* To get chrome driver version in the UA
37+
*/
38+
const REGEXP_CHROME_VERSION_IN_UA = new RegExp('Chrome\\/(\\S+)');
39+
3540
// don't proxy any 'appium' routes
3641
/** @type {RouteMatcher[]} */
3742
const NO_PROXY = [
@@ -194,6 +199,32 @@ export class WebOSDriver extends BaseDriver {
194199
return [sessionId, caps];
195200
}
196201

202+
203+
/**
204+
* Use UserAgent info for "Browser" if the chrome response did not include
205+
* browser name properly.
206+
* @param {object} browserVersionInfo
207+
*/
208+
useUAForBrowserIfNotPresent(browserVersionInfo) {
209+
if (!_.isEmpty(browserVersionInfo.Browser)) {
210+
return browserVersionInfo;
211+
}
212+
213+
const ua = browserVersionInfo['User-Agent'];
214+
if (_.isEmpty(ua)) {
215+
return browserVersionInfo;
216+
}
217+
218+
const chromeVersion = ua.match(REGEXP_CHROME_VERSION_IN_UA);
219+
if (_.isEmpty(chromeVersion)) {
220+
return browserVersionInfo;
221+
}
222+
223+
log.info(`The response did not have Browser, thus set the Browser value from UA as ${browserVersionInfo}`);
224+
browserVersionInfo.Browser = chromeVersion[0];
225+
return browserVersionInfo;
226+
}
227+
197228
/**
198229
* Returns whether the session can enable autodownloadd feature.
199230
* @returns {boolean}
@@ -221,6 +252,9 @@ export class WebOSDriver extends BaseDriver {
221252
// get the result of chrome info to use auto detection.
222253
try {
223254
result = await got.get(`http://${debuggerAddress}/json/version`).json();
255+
log.info(`The response of http://${debuggerAddress}/json/version was ${JSON.stringify(result)}`);
256+
result = this.useUAForBrowserIfNotPresent(result.Browser);
257+
224258
// To respect the executableDir.
225259
executable = undefined;
226260
} catch (err) {

test/unit/driver.spec.js

+83
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,87 @@ describe('WebOSDriver', function () {
3232
it('should be importable and instantiable', function () {
3333
should.exist(new WebOSDriver());
3434
});
35+
36+
37+
describe('useUAForBrowserIfNotPresent', function () {
38+
it('should use Browser as-is if the given value had the exact value', function () {
39+
const driver = new WebOSDriver();
40+
const jsonResponse = {
41+
'Browser': 'Chrome/87.0.4280.88',
42+
'Protocol-Version': '1.3',
43+
'User-Agent': 'Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
44+
'V8-Version': '8.7.220.(29*1000 + 2)',
45+
'WebKit-Version': '537.36 (@cec52f3dd4465dd7389298b97ab723856c556bd)',
46+
'webSocketDebuggerUrl': 'ws://192.168.0.1:9998/devtools/browser/a4b3786c-2d2f-4751-9e05-aee2023bc226'
47+
};
48+
driver.useUAForBrowserIfNotPresent(jsonResponse).should.eql({
49+
'Browser': 'Chrome/87.0.4280.88',
50+
'Protocol-Version': '1.3',
51+
'User-Agent': 'Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
52+
'V8-Version': '8.7.220.(29*1000 + 2)',
53+
'WebKit-Version': '537.36 (@cec52f3dd4465dd7389298b97ab723856c556bd)',
54+
'webSocketDebuggerUrl': 'ws://192.168.0.1:9998/devtools/browser/a4b3786c-2d2f-4751-9e05-aee2023bc226'
55+
});
56+
}),
57+
58+
it('should use UA for the Browser if the Browser was an empty string', function () {
59+
const driver = new WebOSDriver();
60+
const jsonResponse = {
61+
'Browser': '',
62+
'Protocol-Version': '1.3',
63+
'User-Agent': 'Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
64+
'V8-Version': '8.7.220.(29*1000 + 2)',
65+
'WebKit-Version': '537.36 (@cec52f3dd4465dd7389298b97ab723856c556bd)',
66+
'webSocketDebuggerUrl': 'ws://192.168.0.1:9998/devtools/browser/a4b3786c-2d2f-4751-9e05-aee2023bc226'
67+
};
68+
driver.useUAForBrowserIfNotPresent(jsonResponse).should.eql({
69+
'Browser': 'Chrome/87.0.4280.88',
70+
'Protocol-Version': '1.3',
71+
'User-Agent': 'Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
72+
'V8-Version': '8.7.220.(29*1000 + 2)',
73+
'WebKit-Version': '537.36 (@cec52f3dd4465dd7389298b97ab723856c556bd)',
74+
'webSocketDebuggerUrl': 'ws://192.168.0.1:9998/devtools/browser/a4b3786c-2d2f-4751-9e05-aee2023bc226'
75+
});
76+
}),
77+
78+
it('should use Browser as-is if the Browser was an empty string AND the UA did not exist', function () {
79+
const driver = new WebOSDriver();
80+
const jsonResponse = {
81+
'Browser': '',
82+
'Protocol-Version': '1.3',
83+
'User-Agent': '',
84+
'V8-Version': '8.7.220.(29*1000 + 2)',
85+
'WebKit-Version': '537.36 (@cec52f3dd4465dd7389298b97ab723856c556bd)',
86+
'webSocketDebuggerUrl': 'ws://192.168.0.1:9998/devtools/browser/a4b3786c-2d2f-4751-9e05-aee2023bc226'
87+
};
88+
driver.useUAForBrowserIfNotPresent(jsonResponse).should.eql({
89+
'Browser': '',
90+
'Protocol-Version': '1.3',
91+
'User-Agent': '',
92+
'V8-Version': '8.7.220.(29*1000 + 2)',
93+
'WebKit-Version': '537.36 (@cec52f3dd4465dd7389298b97ab723856c556bd)',
94+
'webSocketDebuggerUrl': 'ws://192.168.0.1:9998/devtools/browser/a4b3786c-2d2f-4751-9e05-aee2023bc226'
95+
});
96+
}),
97+
98+
it('should use Browser as-is if the Browser was an empty string AND the UA did not have chrome', function () {
99+
const driver = new WebOSDriver();
100+
const jsonResponse = {
101+
'Browser': '',
102+
'Protocol-Version': '1.3',
103+
'User-Agent': 'Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Safari/537.36',
104+
'V8-Version': '8.7.220.(29*1000 + 2)',
105+
'WebKit-Version': '537.36 (@cec52f3dd4465dd7389298b97ab723856c556bd)',
106+
'webSocketDebuggerUrl': 'ws://192.168.0.1:9998/devtools/browser/a4b3786c-2d2f-4751-9e05-aee2023bc226'
107+
};
108+
driver.useUAForBrowserIfNotPresent(jsonResponse).should.eql({
109+
'Browser': '',
110+
'Protocol-Version': '1.3',
111+
'User-Agent': 'Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Safari/537.36',
112+
'V8-Version': '8.7.220.(29*1000 + 2)',
113+
'WebKit-Version': '537.36 (@cec52f3dd4465dd7389298b97ab723856c556bd)',
114+
'webSocketDebuggerUrl': 'ws://192.168.0.1:9998/devtools/browser/a4b3786c-2d2f-4751-9e05-aee2023bc226'
115+
});
116+
});
117+
});
35118
});

0 commit comments

Comments
 (0)