From 42ec956782000d4c30a56c9d063a6f2a0d7ceebc Mon Sep 17 00:00:00 2001 From: Jared Snider <116684653+JaredSnider-Bitwarden@users.noreply.github.com> Date: Thu, 18 Sep 2025 14:36:35 -0400 Subject: [PATCH] feat(PlatformUtils): [Auth/PM-25817] New PlatformUtilsService.isChromium() method (#16468) --- .../browser-platform-utils.service.spec.ts | 27 ++++++++++++++++ .../browser-platform-utils.service.ts | 4 +++ .../services/cli-platform-utils.service.ts | 4 +++ .../electron-platform-utils.service.ts | 4 +++ .../core/web-platform-utils.service.spec.ts | 31 +++++++++++++++++++ .../app/core/web-platform-utils.service.ts | 4 +++ .../abstractions/platform-utils.service.ts | 1 + 7 files changed, 75 insertions(+) diff --git a/apps/browser/src/platform/services/platform-utils/browser-platform-utils.service.spec.ts b/apps/browser/src/platform/services/platform-utils/browser-platform-utils.service.spec.ts index f9a4221b3e..81e1008eea 100644 --- a/apps/browser/src/platform/services/platform-utils/browser-platform-utils.service.spec.ts +++ b/apps/browser/src/platform/services/platform-utils/browser-platform-utils.service.spec.ts @@ -356,6 +356,33 @@ describe("Browser Utils Service", () => { expect(result).toBe(""); }); }); + + describe("isChromium", () => { + const chromiumDevices: DeviceType[] = [ + DeviceType.ChromeExtension, + DeviceType.EdgeExtension, + DeviceType.OperaExtension, + DeviceType.VivaldiExtension, + ]; + + const nonChromiumDevices: DeviceType[] = [ + DeviceType.FirefoxExtension, + DeviceType.SafariExtension, + ]; + afterEach(() => { + jest.restoreAllMocks(); + }); + + test.each(chromiumDevices)("returns true when getDevice() is %s", (deviceType) => { + jest.spyOn(browserPlatformUtilsService, "getDevice").mockReturnValue(deviceType); + expect(browserPlatformUtilsService.isChromium()).toBe(true); + }); + + test.each(nonChromiumDevices)("returns false when getDevice() is %s", (deviceType) => { + jest.spyOn(browserPlatformUtilsService, "getDevice").mockReturnValue(deviceType); + expect(browserPlatformUtilsService.isChromium()).toBe(false); + }); + }); }); describe("Safari Height Fix", () => { diff --git a/apps/browser/src/platform/services/platform-utils/browser-platform-utils.service.ts b/apps/browser/src/platform/services/platform-utils/browser-platform-utils.service.ts index 4c5869054b..5a933d9715 100644 --- a/apps/browser/src/platform/services/platform-utils/browser-platform-utils.service.ts +++ b/apps/browser/src/platform/services/platform-utils/browser-platform-utils.service.ts @@ -123,6 +123,10 @@ export abstract class BrowserPlatformUtilsService implements PlatformUtilsServic return this.getDevice() === DeviceType.SafariExtension; } + isChromium(): boolean { + return this.isChrome() || this.isEdge() || this.isOpera() || this.isVivaldi(); + } + /** * Safari previous to version 16.1 had a bug which caused artifacts on hover in large extension popups. * https://bugs.webkit.org/show_bug.cgi?id=218704 diff --git a/apps/cli/src/platform/services/cli-platform-utils.service.ts b/apps/cli/src/platform/services/cli-platform-utils.service.ts index 9e02b9dcca..27f8e5268b 100644 --- a/apps/cli/src/platform/services/cli-platform-utils.service.ts +++ b/apps/cli/src/platform/services/cli-platform-utils.service.ts @@ -71,6 +71,10 @@ export class CliPlatformUtilsService implements PlatformUtilsService { return false; } + isChromium(): boolean { + return false; + } + isMacAppStore() { return false; } diff --git a/apps/desktop/src/platform/services/electron-platform-utils.service.ts b/apps/desktop/src/platform/services/electron-platform-utils.service.ts index 23fb29e932..de63c6b28a 100644 --- a/apps/desktop/src/platform/services/electron-platform-utils.service.ts +++ b/apps/desktop/src/platform/services/electron-platform-utils.service.ts @@ -55,6 +55,10 @@ export class ElectronPlatformUtilsService implements PlatformUtilsService { return false; } + isChromium(): boolean { + return true; + } + isMacAppStore(): boolean { return ipc.platform.isMacAppStore; } diff --git a/apps/web/src/app/core/web-platform-utils.service.spec.ts b/apps/web/src/app/core/web-platform-utils.service.spec.ts index 6dba3fda78..b177bffcce 100644 --- a/apps/web/src/app/core/web-platform-utils.service.spec.ts +++ b/apps/web/src/app/core/web-platform-utils.service.spec.ts @@ -203,4 +203,35 @@ describe("Web Platform Utils Service", () => { }, ); }); + + describe("isChromium", () => { + const chromiumDevices = [ + DeviceType.ChromeBrowser, + DeviceType.EdgeBrowser, + DeviceType.OperaBrowser, + DeviceType.VivaldiBrowser, + ]; + + const nonChromiumDevices = [ + DeviceType.FirefoxBrowser, + DeviceType.SafariBrowser, + DeviceType.IEBrowser, + DeviceType.DuckDuckGoBrowser, + DeviceType.UnknownBrowser, + ]; + + afterEach(() => { + jest.restoreAllMocks(); + }); + + test.each(chromiumDevices)("returns true when getDevice() is %s", (deviceType) => { + jest.spyOn(webPlatformUtilsService, "getDevice").mockReturnValue(deviceType); + expect(webPlatformUtilsService.isChromium()).toBe(true); + }); + + test.each(nonChromiumDevices)("returns false when getDevice() is %s", (deviceType) => { + jest.spyOn(webPlatformUtilsService, "getDevice").mockReturnValue(deviceType); + expect(webPlatformUtilsService.isChromium()).toBe(false); + }); + }); }); diff --git a/apps/web/src/app/core/web-platform-utils.service.ts b/apps/web/src/app/core/web-platform-utils.service.ts index ada0b09aa1..dea4323bcc 100644 --- a/apps/web/src/app/core/web-platform-utils.service.ts +++ b/apps/web/src/app/core/web-platform-utils.service.ts @@ -90,6 +90,10 @@ export class WebPlatformUtilsService implements PlatformUtilsService { return this.getDevice() === DeviceType.SafariBrowser; } + isChromium(): boolean { + return this.isChrome() || this.isEdge() || this.isOpera() || this.isVivaldi(); + } + isWebKit(): boolean { return true; } diff --git a/libs/common/src/platform/abstractions/platform-utils.service.ts b/libs/common/src/platform/abstractions/platform-utils.service.ts index 4d3f032052..4d126aeab8 100644 --- a/libs/common/src/platform/abstractions/platform-utils.service.ts +++ b/libs/common/src/platform/abstractions/platform-utils.service.ts @@ -21,6 +21,7 @@ export abstract class PlatformUtilsService { abstract isOpera(): boolean; abstract isVivaldi(): boolean; abstract isSafari(): boolean; + abstract isChromium(): boolean; abstract isMacAppStore(): boolean; abstract isPopupOpen(): Promise; abstract launchUri(uri: string, options?: any): void;