Skip to content

Commit

Permalink
[PM-3783] feat: patch chrome.runtime.onMessage event listeners
Browse files Browse the repository at this point in the history
  • Loading branch information
coroiu committed Sep 5, 2023
1 parent 10c8286 commit 2ca241a
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 0 deletions.
36 changes: 36 additions & 0 deletions apps/browser/src/platform/polyfills/zone-patch-chrome-runtime.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/**

Check warning on line 1 in apps/browser/src/platform/polyfills/zone-patch-chrome-runtime.ts

View check run for this annotation

CodeScene Delta Analysis / CodeScene Cloud Delta Analysis (master)

❌ New issue: Complex Method

"ChromeRuntimeOnMessage" has a cyclomatic complexity of 10, threshold = 9. This function has many conditional statements (e.g. if, for, while), leading to lower code health. Avoid adding more conditionals and code to it without refactoring.
* 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);
}
});
});
2 changes: 2 additions & 0 deletions apps/browser/src/popup/polyfills.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import "core-js/stable";
import "date-input-polyfill";
import "zone.js";

import "../platform/polyfills/zone-patch-chrome-runtime";

0 comments on commit 2ca241a

Please sign in to comment.