14105-apply-error-handling (#15309)

Co-authored-by: RachelElysia <71795832+RachelElysia@users.noreply.github.com>
This commit is contained in:
Sharon Katz
2024-02-23 10:13:02 -05:00
committed by GitHub
co-authored by RachelElysia
parent 2a6e94a55e
commit dd58fc4638
2 changed files with 95 additions and 44 deletions
+13 -10
View File
@@ -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");
});
});
+82 -34
View File
@@ -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,
};
}
}