diff --git a/apps/browser/src/background/main.background.ts b/apps/browser/src/background/main.background.ts index cc973a8c826..3917ce02eb1 100644 --- a/apps/browser/src/background/main.background.ts +++ b/apps/browser/src/background/main.background.ts @@ -64,7 +64,6 @@ import { NotificationsService } from "@bitwarden/common/services/notifications.s import { OrganizationService } from "@bitwarden/common/services/organization/organization.service"; import { PasswordGenerationService } from "@bitwarden/common/services/passwordGeneration.service"; import { PolicyApiService } from "@bitwarden/common/services/policy/policy-api.service"; -import { PolicyService } from "@bitwarden/common/services/policy/policy.service"; import { ProviderService } from "@bitwarden/common/services/provider.service"; import { SearchService } from "@bitwarden/common/services/search.service"; import { SendService } from "@bitwarden/common/services/send.service"; @@ -92,6 +91,7 @@ import { AutofillService as AutofillServiceAbstraction } from "../services/abstr import { StateService as StateServiceAbstraction } from "../services/abstractions/state.service"; import AutofillService from "../services/autofill.service"; import { BrowserEnvironmentService } from "../services/browser-environment.service"; +import { BrowserPolicyService } from "../services/browser-policy.service"; import { BrowserCryptoService } from "../services/browserCrypto.service"; import BrowserLocalStorageService from "../services/browserLocalStorage.service"; import BrowserMessagingService from "../services/browserMessaging.service"; @@ -318,7 +318,7 @@ export default class MainBackground { ); this.syncNotifierService = new SyncNotifierService(); this.organizationService = new OrganizationService(this.stateService, this.syncNotifierService); - this.policyService = new PolicyService(this.stateService, this.organizationService); + this.policyService = new BrowserPolicyService(this.stateService, this.organizationService); this.policyApiService = new PolicyApiService( this.policyService, this.apiService, diff --git a/apps/browser/src/background/service_factories/policy-service.factory.ts b/apps/browser/src/background/service_factories/policy-service.factory.ts index d4940bef259..d20bca3c62e 100644 --- a/apps/browser/src/background/service_factories/policy-service.factory.ts +++ b/apps/browser/src/background/service_factories/policy-service.factory.ts @@ -1,5 +1,6 @@ import { PolicyService as AbstractPolicyService } from "@bitwarden/common/abstractions/policy/policy.service.abstraction"; -import { PolicyService } from "@bitwarden/common/services/policy/policy.service"; + +import { BrowserPolicyService } from "../../services/browser-policy.service"; import { CachedServices, factory, FactoryOptions } from "./factory-options"; import { @@ -26,7 +27,7 @@ export function policyServiceFactory( "policyService", opts, async () => - new PolicyService( + new BrowserPolicyService( await stateServiceFactory(cache, opts), await organizationServiceFactory(cache, opts) ) diff --git a/apps/browser/src/popup/services/services.module.ts b/apps/browser/src/popup/services/services.module.ts index 236ff4e5b18..7c9485de66a 100644 --- a/apps/browser/src/popup/services/services.module.ts +++ b/apps/browser/src/popup/services/services.module.ts @@ -57,6 +57,7 @@ import { BrowserApi } from "../../browser/browserApi"; import { AutofillService } from "../../services/abstractions/autofill.service"; import { StateService as StateServiceAbstraction } from "../../services/abstractions/state.service"; import { BrowserEnvironmentService } from "../../services/browser-environment.service"; +import { BrowserPolicyService } from "../../services/browser-policy.service"; import { BrowserFileDownloadService } from "../../services/browserFileDownloadService"; import BrowserMessagingService from "../../services/browserMessaging.service"; import BrowserMessagingPrivateModePopupService from "../../services/browserMessagingPrivateModePopup.service"; @@ -190,8 +191,13 @@ function getBgService(service: keyof MainBackground) { { provide: EventService, useFactory: getBgService("eventService"), deps: [] }, { provide: PolicyService, - useFactory: getBgService("policyService"), - deps: [], + useFactory: ( + stateService: StateServiceAbstraction, + organizationService: OrganizationService + ) => { + return new BrowserPolicyService(stateService, organizationService); + }, + deps: [StateServiceAbstraction, OrganizationService], }, { provide: PolicyApiServiceAbstraction, diff --git a/apps/browser/src/services/browser-policy.service.ts b/apps/browser/src/services/browser-policy.service.ts new file mode 100644 index 00000000000..cc8d073f238 --- /dev/null +++ b/apps/browser/src/services/browser-policy.service.ts @@ -0,0 +1,19 @@ +import { BehaviorSubject } from "rxjs"; + +import { OrganizationService } from "@bitwarden/common/abstractions/organization/organization.service.abstraction"; +import { Policy } from "@bitwarden/common/models/domain/policy"; +import { PolicyService } from "@bitwarden/common/services/policy/policy.service"; + +import { browserSession, sessionSync } from "../decorators/session-sync-observable"; + +import { StateService } from "./abstractions/state.service"; + +@browserSession +export class BrowserPolicyService extends PolicyService { + @sessionSync({ ctor: Policy, initializeAsArray: true }) + protected _policies: BehaviorSubject; + + constructor(stateService: StateService, organizationService: OrganizationService) { + super(stateService, organizationService); + } +} diff --git a/libs/common/src/services/policy/policy.service.ts b/libs/common/src/services/policy/policy.service.ts index 757c3b3e05f..c20682184bc 100644 --- a/libs/common/src/services/policy/policy.service.ts +++ b/libs/common/src/services/policy/policy.service.ts @@ -16,7 +16,7 @@ import { ListResponse } from "../../models/response/list.response"; import { PolicyResponse } from "../../models/response/policy.response"; export class PolicyService implements InternalPolicyServiceAbstraction { - private _policies: BehaviorSubject = new BehaviorSubject([]); + protected _policies: BehaviorSubject = new BehaviorSubject([]); policies$ = this._policies.asObservable();