Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ulixee
GitHub Repository: ulixee/secret-agent
Path: blob/main/plugins/default-browser-emulator/injected-scripts/navigator.ts
1029 views
1
if (args.userAgentString && self.navigator?.userAgent !== args.userAgentString) {
2
proxyGetter(self.navigator, 'userAgent', () => args.userAgentString, true);
3
proxyGetter(
4
self.navigator,
5
'appVersion',
6
() => args.userAgentString.replace('Mozilla/', ''),
7
true,
8
);
9
}
10
11
// always override
12
proxyGetter(self.navigator, 'platform', () => args.platform, true);
13
14
if ('setAppBadge' in self.navigator) {
15
proxyFunction(self.navigator, 'setAppBadge', (target, thisArg, argArray) => {
16
let error: TypeError;
17
if (Object.getPrototypeOf(thisArg) !== Navigator.prototype) {
18
error = new TypeError("Failed to execute 'setAppBadge' on 'Navigator': Illegal invocation");
19
} else if (argArray.length) {
20
const arg = argArray[0];
21
if (typeof arg === 'number') {
22
if (arg < 0 || arg > Number.MAX_SAFE_INTEGER) {
23
error = new TypeError(
24
`Failed to execute 'setAppBadge' on 'Navigator': Value is outside the 'unsigned long long' value range.`,
25
);
26
}
27
} else {
28
error = new TypeError(
29
`Failed to execute 'setAppBadge' on 'Navigator': Value is not of type 'unsigned long long'.`,
30
);
31
}
32
}
33
if (error) return Promise.reject(cleanErrorStack(error));
34
return Promise.resolve(undefined);
35
});
36
}
37
38
if ('clearAppBadge' in self.navigator) {
39
proxyFunction(self.navigator, 'clearAppBadge', (target, thisArg, argArray) => {
40
let error: TypeError;
41
if (Object.getPrototypeOf(thisArg) !== Navigator.prototype) {
42
error = new TypeError("Failed to execute 'clearAppBadge' on 'Navigator': Illegal invocation");
43
}
44
if (error) return Promise.reject(cleanErrorStack(error));
45
return Promise.resolve(undefined);
46
});
47
}
48
49
if (args.headless === true && 'requestMediaKeySystemAccess' in self.navigator) {
50
proxyFunction(self.navigator, 'requestMediaKeySystemAccess', (target, thisArg, argArray) => {
51
if (argArray.length < 2) {
52
return ProxyOverride.callOriginal;
53
}
54
const [keySystem, configs] = argArray;
55
if (keySystem !== 'com.widevine.alpha' || [...configs].length < 1) {
56
return ProxyOverride.callOriginal;
57
}
58
return target
59
.call(thisArg, 'org.w3.clearkey', configs)
60
.then(x => {
61
proxyGetter(x, 'keySystem', () => keySystem);
62
return x;
63
})
64
.catch(err => cleanErrorStack(err));
65
});
66
}
67
68