14105-apply-error-handling (#15309)
Co-authored-by: RachelElysia <71795832+RachelElysia@users.noreply.github.com>
This commit is contained in:
co-authored by
RachelElysia
parent
2a6e94a55e
commit
dd58fc4638
@@ -39,6 +39,8 @@ describe("os_version", () => {
|
||||
);
|
||||
|
||||
const db = await VirtualDatabase.init();
|
||||
globalThis.DB = db;
|
||||
|
||||
const res = await db.query("select * from os_version");
|
||||
expect(res).toEqual({
|
||||
data: [
|
||||
@@ -55,7 +57,7 @@ describe("os_version", () => {
|
||||
codename: "ChromeOS 13.2.1",
|
||||
},
|
||||
],
|
||||
warnings: null,
|
||||
warnings: "",
|
||||
});
|
||||
});
|
||||
|
||||
@@ -83,6 +85,7 @@ describe("os_version", () => {
|
||||
console.warn = jest.fn();
|
||||
|
||||
const db = await VirtualDatabase.init();
|
||||
globalThis.DB = db;
|
||||
const res = await db.query("select * from os_version");
|
||||
expect(res).toEqual({
|
||||
data: [
|
||||
@@ -99,7 +102,7 @@ describe("os_version", () => {
|
||||
codename: "ChromeOS 13.2.1",
|
||||
},
|
||||
],
|
||||
warnings: null,
|
||||
warnings: "",
|
||||
});
|
||||
expect(console.warn).toHaveBeenCalledWith(
|
||||
expect.stringContaining("expected 4 segments")
|
||||
@@ -111,18 +114,18 @@ describe("os_version", () => {
|
||||
global.navigator.userAgentData = {
|
||||
getHighEntropyValues: jest.fn(() =>
|
||||
Promise.resolve({
|
||||
data: {
|
||||
fullVersionList: [
|
||||
{ brand: "Not even chrome", version: "110.0.5481.177" },
|
||||
],
|
||||
},
|
||||
fullVersionList: [
|
||||
{ brand: "Not even Chrome", version: "103.0.5060.134" },
|
||||
{ brand: "Not chrome", version: "103.0.5060.134" },
|
||||
],
|
||||
})
|
||||
),
|
||||
};
|
||||
|
||||
const db = await VirtualDatabase.init();
|
||||
expect(async () => {
|
||||
await db.query("select * from os_version");
|
||||
}).rejects.toThrow();
|
||||
globalThis.DB = db;
|
||||
|
||||
const res = await db.query("select * from os_version");
|
||||
expect(res.warnings).toContain("environment does not look like Chrome");
|
||||
});
|
||||
});
|
||||
|
||||
@@ -24,49 +24,96 @@ export default class TableOSVersion extends Table {
|
||||
}
|
||||
|
||||
async generate() {
|
||||
// @ts-expect-error Typescript doesn't include the userAgentData API yet.
|
||||
const data = await navigator.userAgentData.getHighEntropyValues([
|
||||
"fullVersionList",
|
||||
"platform",
|
||||
"platformVersion",
|
||||
]);
|
||||
let warningsArray = [];
|
||||
|
||||
let version = "";
|
||||
for (let entry of data.fullVersionList) {
|
||||
if (entry.brand === "Google Chrome") {
|
||||
version = entry.version;
|
||||
break;
|
||||
let name = "";
|
||||
let codename = "";
|
||||
let major = "";
|
||||
let minor = "";
|
||||
let build = "";
|
||||
let patch = "";
|
||||
try {
|
||||
// @ts-expect-error Typescript doesn't include the userAgentData API yet.
|
||||
const data = await navigator.userAgentData.getHighEntropyValues([
|
||||
"fullVersionList",
|
||||
"platform",
|
||||
"platformVersion",
|
||||
]);
|
||||
|
||||
for (let entry of data.fullVersionList) {
|
||||
if (entry.brand === "Google Chrome") {
|
||||
version = entry.version;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (version === "") {
|
||||
throw new Error("environment does not look like Chrome");
|
||||
if (version === "") {
|
||||
throw new Error("environment does not look like Chrome");
|
||||
}
|
||||
name = this.getName(data.platform);
|
||||
codename = this.getCodename(data.platformVersion);
|
||||
|
||||
// Note MAJOR.MINOR.BUILD.PATCH (see https://www.chromium.org/developers/version-numbers/)
|
||||
const splits = version.split(".");
|
||||
if (splits.length !== 4) {
|
||||
console.warn(
|
||||
`Chrome version ${version} does not have expected 4 segments`
|
||||
);
|
||||
} else {
|
||||
[major, minor, build, patch] = splits;
|
||||
}
|
||||
} catch (err) {
|
||||
console.warn("getHighEntropyValues:", err);
|
||||
warningsArray.push({
|
||||
column: "version",
|
||||
error_message: err.message.toString(),
|
||||
});
|
||||
warningsArray.push({
|
||||
column: "major",
|
||||
error_message: err.message.toString(),
|
||||
});
|
||||
warningsArray.push({
|
||||
column: "minor",
|
||||
error_message: err.message.toString(),
|
||||
});
|
||||
warningsArray.push({
|
||||
column: "build",
|
||||
error_message: err.message.toString(),
|
||||
});
|
||||
warningsArray.push({
|
||||
column: "patch",
|
||||
error_message: err.message.toString(),
|
||||
});
|
||||
warningsArray.push({
|
||||
column: "codename",
|
||||
error_message: err.message.toString(),
|
||||
});
|
||||
warningsArray.push({
|
||||
column: "platform_like",
|
||||
error_message: err.message.toString(),
|
||||
});
|
||||
}
|
||||
|
||||
// Note MAJOR.MINOR.BUILD.PATCH (see https://www.chromium.org/developers/version-numbers/)
|
||||
const splits = version.split(".");
|
||||
let major = "",
|
||||
minor = "",
|
||||
build = "",
|
||||
patch = "";
|
||||
if (splits.length !== 4) {
|
||||
console.warn(
|
||||
`Chrome version ${version} does not have expected 4 segments`
|
||||
);
|
||||
} else {
|
||||
[major, minor, build, patch] = splits;
|
||||
let arch;
|
||||
try {
|
||||
// Note we can actually get the platform of Chrome running on non-ChromeOS devices, but instead
|
||||
// we just hardcode to "chrome" so that Fleet always sees this Chrome extension as a Chrome
|
||||
// device even when we are doing local dev on a non-ChromeOS machine.
|
||||
const platformInfo = await chrome.runtime.getPlatformInfo();
|
||||
arch = platformInfo.arch;
|
||||
} catch (err) {
|
||||
console.warn("get cpu info:", err);
|
||||
warningsArray.push({
|
||||
column: "arch",
|
||||
error_message: err.message.toString(),
|
||||
});
|
||||
}
|
||||
|
||||
// Note we can actually get the platform of Chrome running on non-ChromeOS devices, but instead
|
||||
// we just hardcode to "chrome" so that Fleet always sees this Chrome extension as a Chrome
|
||||
// device even when we are doing local dev on a non-ChromeOS machine.
|
||||
const platformInfo = await chrome.runtime.getPlatformInfo();
|
||||
const { arch } = platformInfo;
|
||||
|
||||
// Some of these values won't actually be correct on a non-chromeOS machine.
|
||||
return {
|
||||
data: [
|
||||
{
|
||||
name: this.getName(data.platform),
|
||||
name,
|
||||
platform: "chrome",
|
||||
platform_like: "chrome",
|
||||
version,
|
||||
@@ -74,11 +121,12 @@ export default class TableOSVersion extends Table {
|
||||
minor,
|
||||
build,
|
||||
patch,
|
||||
codename: this.getCodename(data.platformVersion),
|
||||
codename,
|
||||
// https://developer.chrome.com/docs/extensions/reference/runtime/#type-PlatformArch
|
||||
arch: arch,
|
||||
arch,
|
||||
},
|
||||
],
|
||||
warnings: warningsArray,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user