mirror of
https://github.com/bitwarden/browser.git
synced 2024-12-21 16:18:28 +01:00
[PM-3783] Add zone.js support for chrome.runtime.onMessage
(#6188)
* [PM-3783] chore: remove `ngZone.run` calls No longer needed now that we have zone-patches for `chrome.runtime.onMessage` * [PM-3783] feat: patch `chrome.runtime.onMessage` event listeners
This commit is contained in:
parent
a5defbb564
commit
1f62117977
@ -0,0 +1,36 @@
|
|||||||
|
/**
|
||||||
|
* Monkey patch `chrome.runtime.onMessage` event listeners to run in the Angular zone.
|
||||||
|
*/
|
||||||
|
Zone.__load_patch("ChromeRuntimeOnMessage", (global: any, Zone: ZoneType, api: _ZonePrivate) => {
|
||||||
|
const onMessage = global.chrome.runtime.onMessage;
|
||||||
|
if (typeof global?.chrome?.runtime?.onMessage === "undefined") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
||||||
|
api.patchMethod(onMessage, "addListener", (delegate: Function) => (self: any, args: any[]) => {
|
||||||
|
const callback = args.length > 0 ? args[0] : null;
|
||||||
|
if (typeof callback === "function") {
|
||||||
|
const wrapperedCallback = Zone.current.wrap(callback, "ChromeRuntimeOnMessage");
|
||||||
|
callback[api.symbol("chromeRuntimeOnMessageCallback")] = wrapperedCallback;
|
||||||
|
return delegate.call(self, wrapperedCallback);
|
||||||
|
} else {
|
||||||
|
return delegate.apply(self, args);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
||||||
|
api.patchMethod(onMessage, "removeListener", (delegate: Function) => (self: any, args: any[]) => {
|
||||||
|
const callback = args.length > 0 ? args[0] : null;
|
||||||
|
if (typeof callback === "function") {
|
||||||
|
const wrapperedCallback = callback[api.symbol("chromeRuntimeOnMessageCallback")];
|
||||||
|
if (wrapperedCallback) {
|
||||||
|
return delegate.call(self, wrapperedCallback);
|
||||||
|
} else {
|
||||||
|
return delegate.apply(self, args);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return delegate.apply(self, args);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
@ -86,31 +86,25 @@ export class AppComponent implements OnInit, OnDestroy {
|
|||||||
sendResponse: any
|
sendResponse: any
|
||||||
) => {
|
) => {
|
||||||
if (msg.command === "doneLoggingOut") {
|
if (msg.command === "doneLoggingOut") {
|
||||||
this.ngZone.run(async () => {
|
this.authService.logOut(async () => {
|
||||||
this.authService.logOut(async () => {
|
if (msg.expired) {
|
||||||
if (msg.expired) {
|
this.showToast({
|
||||||
this.showToast({
|
type: "warning",
|
||||||
type: "warning",
|
title: this.i18nService.t("loggedOut"),
|
||||||
title: this.i18nService.t("loggedOut"),
|
text: this.i18nService.t("loginExpired"),
|
||||||
text: this.i18nService.t("loginExpired"),
|
});
|
||||||
});
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (this.activeUserId === null) {
|
if (this.activeUserId === null) {
|
||||||
this.router.navigate(["home"]);
|
this.router.navigate(["home"]);
|
||||||
}
|
}
|
||||||
});
|
|
||||||
this.changeDetectorRef.detectChanges();
|
|
||||||
});
|
});
|
||||||
|
this.changeDetectorRef.detectChanges();
|
||||||
} else if (msg.command === "authBlocked") {
|
} else if (msg.command === "authBlocked") {
|
||||||
this.ngZone.run(() => {
|
this.router.navigate(["home"]);
|
||||||
this.router.navigate(["home"]);
|
|
||||||
});
|
|
||||||
} else if (msg.command === "locked") {
|
} else if (msg.command === "locked") {
|
||||||
if (msg.userId == null || msg.userId === (await this.stateService.getUserId())) {
|
if (msg.userId == null || msg.userId === (await this.stateService.getUserId())) {
|
||||||
this.ngZone.run(() => {
|
this.router.navigate(["lock"]);
|
||||||
this.router.navigate(["lock"]);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
} else if (msg.command === "showDialog") {
|
} else if (msg.command === "showDialog") {
|
||||||
await this.ngZone.run(() => this.showDialog(msg));
|
await this.ngZone.run(() => this.showDialog(msg));
|
||||||
@ -118,9 +112,7 @@ export class AppComponent implements OnInit, OnDestroy {
|
|||||||
// TODO: Should be refactored to live in another service.
|
// TODO: Should be refactored to live in another service.
|
||||||
await this.ngZone.run(() => this.showNativeMessagingFingerprintDialog(msg));
|
await this.ngZone.run(() => this.showNativeMessagingFingerprintDialog(msg));
|
||||||
} else if (msg.command === "showToast") {
|
} else if (msg.command === "showToast") {
|
||||||
this.ngZone.run(() => {
|
this.showToast(msg);
|
||||||
this.showToast(msg);
|
|
||||||
});
|
|
||||||
} else if (msg.command === "reloadProcess") {
|
} else if (msg.command === "reloadProcess") {
|
||||||
const forceWindowReload =
|
const forceWindowReload =
|
||||||
this.platformUtilsService.isSafari() ||
|
this.platformUtilsService.isSafari() ||
|
||||||
@ -132,13 +124,9 @@ export class AppComponent implements OnInit, OnDestroy {
|
|||||||
2000
|
2000
|
||||||
);
|
);
|
||||||
} else if (msg.command === "reloadPopup") {
|
} else if (msg.command === "reloadPopup") {
|
||||||
this.ngZone.run(() => {
|
this.router.navigate(["/"]);
|
||||||
this.router.navigate(["/"]);
|
|
||||||
});
|
|
||||||
} else if (msg.command === "convertAccountToKeyConnector") {
|
} else if (msg.command === "convertAccountToKeyConnector") {
|
||||||
this.ngZone.run(async () => {
|
this.router.navigate(["/remove-password"]);
|
||||||
this.router.navigate(["/remove-password"]);
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
msg.webExtSender = sender;
|
msg.webExtSender = sender;
|
||||||
this.broadcasterService.send(msg);
|
this.broadcasterService.send(msg);
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
import "core-js/stable";
|
import "core-js/stable";
|
||||||
import "date-input-polyfill";
|
import "date-input-polyfill";
|
||||||
import "zone.js";
|
import "zone.js";
|
||||||
|
|
||||||
|
import "../platform/polyfills/zone-patch-chrome-runtime";
|
||||||
|
Loading…
Reference in New Issue
Block a user