mirror of
https://github.com/bitwarden/browser
synced 2026-02-10 05:30:01 +00:00
* feat: add foreground ipc service * refactor: create abstract ipc service in libs * wip: remove IPC service complexity The code was making some wrong assumptions about how IPC is going to work. I'm removing everything and starting the content-script instead * feat: working message sending from page to background * refactor: move into common * feat: somewhat complete web <-> browser link * wip: ping command from web * fix: import path * fix: wip urls * wip: add console log * feat: successfull message sending (not receiving) * feat: implement IPC using new refactored framework * wip: add some console logs * wip: almost working ping/pong * feat: working ping/pong * chore: clean-up ping/pong and some console logs * chore: remove unused file * fix: override lint rule * chore: remove unused ping message * feat: add tests for message queue * fix: adapt to name changes and modifications to SDK branch * fix: missing import * fix: remove content script from manifest The feature is not ready for prodution code yet. We will add dynamic injection with feature-flag support in a follow-up PR * fix: remove fileless lp * fix: make same changes to manifest v2 * fix: initialization functions Add missing error handling, wait for the SDK to load and properly depend on the log service * feat: use named id field * chore: update sdk version to include IPC changes * fix: remove messages$ buffer * fix: forgot to commit package-lock * feat: add additional destination check * feat: only import type in ipc-message * fix: typing issues * feat: check message origin
49 lines
1.2 KiB
TypeScript
49 lines
1.2 KiB
TypeScript
import { MessageQueue } from "./message-queue";
|
|
|
|
type Message = symbol;
|
|
|
|
describe("MessageQueue", () => {
|
|
let messageQueue!: MessageQueue<Message>;
|
|
|
|
beforeEach(() => {
|
|
messageQueue = new MessageQueue<Message>();
|
|
});
|
|
|
|
it("waits for a new message when queue is empty", async () => {
|
|
const message = createMessage();
|
|
|
|
// Start a promise to dequeue a message
|
|
let dequeuedValue: Message | undefined;
|
|
void messageQueue.dequeue().then((value) => {
|
|
dequeuedValue = value;
|
|
});
|
|
|
|
// No message is enqueued yet
|
|
expect(dequeuedValue).toBeUndefined();
|
|
|
|
// Enqueue a message
|
|
await messageQueue.enqueue(message);
|
|
|
|
// Expect the message to be dequeued
|
|
await new Promise(process.nextTick);
|
|
expect(dequeuedValue).toBe(message);
|
|
});
|
|
|
|
it("returns existing message when queue is not empty", async () => {
|
|
const message = createMessage();
|
|
|
|
// Enqueue a message
|
|
await messageQueue.enqueue(message);
|
|
|
|
// Dequeue the message
|
|
const dequeuedValue = await messageQueue.dequeue();
|
|
|
|
// Expect the message to be dequeued
|
|
expect(dequeuedValue).toBe(message);
|
|
});
|
|
});
|
|
|
|
function createMessage(name?: string): symbol {
|
|
return Symbol(name);
|
|
}
|