mirror of
https://github.com/bitwarden/browser
synced 2025-12-11 05:43:41 +00:00
[PM-18040] Inject ipc content script dynamically (#13674)
* feat: add content script manager * feat: inject into all pages * feat: only inject if flag is enabled * fix: wrong constructor parameters
This commit is contained in:
@@ -261,6 +261,7 @@ import VaultTimeoutService from "../key-management/vault-timeout/vault-timeout.s
|
|||||||
import { BrowserApi } from "../platform/browser/browser-api";
|
import { BrowserApi } from "../platform/browser/browser-api";
|
||||||
import { flagEnabled } from "../platform/flags";
|
import { flagEnabled } from "../platform/flags";
|
||||||
import { IpcBackgroundService } from "../platform/ipc/ipc-background.service";
|
import { IpcBackgroundService } from "../platform/ipc/ipc-background.service";
|
||||||
|
import { IpcContentScriptManagerService } from "../platform/ipc/ipc-content-script-manager.service";
|
||||||
import { UpdateBadge } from "../platform/listeners/update-badge";
|
import { UpdateBadge } from "../platform/listeners/update-badge";
|
||||||
/* eslint-disable no-restricted-imports */
|
/* eslint-disable no-restricted-imports */
|
||||||
import { ChromeMessageSender } from "../platform/messaging/chrome-message.sender";
|
import { ChromeMessageSender } from "../platform/messaging/chrome-message.sender";
|
||||||
@@ -405,6 +406,7 @@ export default class MainBackground {
|
|||||||
inlineMenuFieldQualificationService: InlineMenuFieldQualificationService;
|
inlineMenuFieldQualificationService: InlineMenuFieldQualificationService;
|
||||||
taskService: TaskService;
|
taskService: TaskService;
|
||||||
|
|
||||||
|
ipcContentScriptManagerService: IpcContentScriptManagerService;
|
||||||
ipcService: IpcService;
|
ipcService: IpcService;
|
||||||
|
|
||||||
onUpdatedRan: boolean;
|
onUpdatedRan: boolean;
|
||||||
@@ -1314,6 +1316,7 @@ export default class MainBackground {
|
|||||||
|
|
||||||
this.inlineMenuFieldQualificationService = new InlineMenuFieldQualificationService();
|
this.inlineMenuFieldQualificationService = new InlineMenuFieldQualificationService();
|
||||||
|
|
||||||
|
this.ipcContentScriptManagerService = new IpcContentScriptManagerService(this.configService);
|
||||||
this.ipcService = new IpcBackgroundService(this.logService);
|
this.ipcService = new IpcBackgroundService(this.logService);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
import { mergeMap } from "rxjs";
|
||||||
|
|
||||||
|
import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
|
||||||
|
import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
|
||||||
|
|
||||||
|
import { BrowserApi } from "../browser/browser-api";
|
||||||
|
|
||||||
|
const IPC_CONTENT_SCRIPT_ID = "ipc-content-script";
|
||||||
|
|
||||||
|
export class IpcContentScriptManagerService {
|
||||||
|
constructor(configService: ConfigService) {
|
||||||
|
if (!BrowserApi.isManifestVersion(3)) {
|
||||||
|
// IPC not supported on MV2
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
configService
|
||||||
|
.getFeatureFlag$(FeatureFlag.IpcChannelFramework)
|
||||||
|
.pipe(
|
||||||
|
mergeMap(async (enabled) => {
|
||||||
|
if (!enabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
await BrowserApi.unregisterContentScriptsMv3({ ids: [IPC_CONTENT_SCRIPT_ID] });
|
||||||
|
} catch {
|
||||||
|
// Ignore errors
|
||||||
|
}
|
||||||
|
|
||||||
|
await BrowserApi.registerContentScriptsMv3([
|
||||||
|
{
|
||||||
|
id: IPC_CONTENT_SCRIPT_ID,
|
||||||
|
matches: ["https://*/*"],
|
||||||
|
js: ["content/ipc-content-script.js"],
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
.subscribe();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -55,6 +55,9 @@ export enum FeatureFlag {
|
|||||||
VaultBulkManagementAction = "vault-bulk-management-action",
|
VaultBulkManagementAction = "vault-bulk-management-action",
|
||||||
SecurityTasks = "security-tasks",
|
SecurityTasks = "security-tasks",
|
||||||
CipherKeyEncryption = "cipher-key-encryption",
|
CipherKeyEncryption = "cipher-key-encryption",
|
||||||
|
|
||||||
|
/* Platform */
|
||||||
|
IpcChannelFramework = "ipc-channel-framework",
|
||||||
}
|
}
|
||||||
|
|
||||||
export type AllowedFeatureFlagTypes = boolean | number | string;
|
export type AllowedFeatureFlagTypes = boolean | number | string;
|
||||||
@@ -118,6 +121,9 @@ export const DefaultFeatureFlagValue = {
|
|||||||
[FeatureFlag.PrivateKeyRegeneration]: FALSE,
|
[FeatureFlag.PrivateKeyRegeneration]: FALSE,
|
||||||
[FeatureFlag.UserKeyRotationV2]: FALSE,
|
[FeatureFlag.UserKeyRotationV2]: FALSE,
|
||||||
[FeatureFlag.PM4154_BulkEncryptionService]: FALSE,
|
[FeatureFlag.PM4154_BulkEncryptionService]: FALSE,
|
||||||
|
|
||||||
|
/* Platform */
|
||||||
|
[FeatureFlag.IpcChannelFramework]: FALSE,
|
||||||
} satisfies Record<FeatureFlag, AllowedFeatureFlagTypes>;
|
} satisfies Record<FeatureFlag, AllowedFeatureFlagTypes>;
|
||||||
|
|
||||||
export type DefaultFeatureFlagValueType = typeof DefaultFeatureFlagValue;
|
export type DefaultFeatureFlagValueType = typeof DefaultFeatureFlagValue;
|
||||||
|
|||||||
Reference in New Issue
Block a user