mirror of
https://github.com/bitwarden/browser
synced 2025-12-18 17:23:37 +00:00
[PM-5189] Reworking project structure to ensure we can better differentiate the inline menu feature from other features
This commit is contained in:
@@ -10,7 +10,7 @@ export class AutofillInlineMenuContainer {
|
|||||||
private extensionOriginsSet: Set<string>;
|
private extensionOriginsSet: Set<string>;
|
||||||
private port: chrome.runtime.Port | null = null;
|
private port: chrome.runtime.Port | null = null;
|
||||||
private portName: string;
|
private portName: string;
|
||||||
private overlayPageIframe: HTMLIFrameElement;
|
private inlineMenuPageIframe: HTMLIFrameElement;
|
||||||
private iframeStyles: Partial<CSSStyleDeclaration> = {
|
private iframeStyles: Partial<CSSStyleDeclaration> = {
|
||||||
all: "initial",
|
all: "initial",
|
||||||
position: "fixed",
|
position: "fixed",
|
||||||
@@ -55,31 +55,31 @@ export class AutofillInlineMenuContainer {
|
|||||||
this.defaultIframeAttributes.title = message.pageTitle;
|
this.defaultIframeAttributes.title = message.pageTitle;
|
||||||
this.portName = message.portName;
|
this.portName = message.portName;
|
||||||
|
|
||||||
this.overlayPageIframe = globalThis.document.createElement("iframe");
|
this.inlineMenuPageIframe = globalThis.document.createElement("iframe");
|
||||||
setElementStyles(this.overlayPageIframe, this.iframeStyles, true);
|
setElementStyles(this.inlineMenuPageIframe, this.iframeStyles, true);
|
||||||
for (const [attribute, value] of Object.entries(this.defaultIframeAttributes)) {
|
for (const [attribute, value] of Object.entries(this.defaultIframeAttributes)) {
|
||||||
this.overlayPageIframe.setAttribute(attribute, value);
|
this.inlineMenuPageIframe.setAttribute(attribute, value);
|
||||||
}
|
}
|
||||||
this.overlayPageIframe.addEventListener(EVENTS.LOAD, () =>
|
this.inlineMenuPageIframe.addEventListener(EVENTS.LOAD, () =>
|
||||||
this.setupPortMessageListener(message),
|
this.setupPortMessageListener(message),
|
||||||
);
|
);
|
||||||
|
|
||||||
globalThis.document.body.appendChild(this.overlayPageIframe);
|
globalThis.document.body.appendChild(this.inlineMenuPageIframe);
|
||||||
}
|
}
|
||||||
|
|
||||||
private setupPortMessageListener = (message: InitInlineMenuElementMessage) => {
|
private setupPortMessageListener = (message: InitInlineMenuElementMessage) => {
|
||||||
this.port = chrome.runtime.connect({ name: this.portName });
|
this.port = chrome.runtime.connect({ name: this.portName });
|
||||||
this.port.onMessage.addListener(this.handlePortMessage);
|
this.port.onMessage.addListener(this.handlePortMessage);
|
||||||
|
|
||||||
this.postMessageToOverlayPage(message);
|
this.postMessageToInlineMenuPage(message);
|
||||||
};
|
};
|
||||||
|
|
||||||
private postMessageToOverlayPage(message: any) {
|
private postMessageToInlineMenuPage(message: any) {
|
||||||
if (!this.overlayPageIframe?.contentWindow) {
|
if (!this.inlineMenuPageIframe?.contentWindow) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.overlayPageIframe.contentWindow.postMessage(message, "*");
|
this.inlineMenuPageIframe.contentWindow.postMessage(message, "*");
|
||||||
}
|
}
|
||||||
|
|
||||||
private postMessageToBackground(message: any) {
|
private postMessageToBackground(message: any) {
|
||||||
@@ -95,7 +95,7 @@ export class AutofillInlineMenuContainer {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.postMessageToOverlayPage(message);
|
this.postMessageToInlineMenuPage(message);
|
||||||
};
|
};
|
||||||
|
|
||||||
private handleWindowMessage = (event: MessageEvent) => {
|
private handleWindowMessage = (event: MessageEvent) => {
|
||||||
@@ -110,7 +110,7 @@ export class AutofillInlineMenuContainer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (this.isMessageFromParentWindow(event)) {
|
if (this.isMessageFromParentWindow(event)) {
|
||||||
this.postMessageToOverlayPage(message);
|
this.postMessageToInlineMenuPage(message);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,20 +126,20 @@ export class AutofillInlineMenuContainer {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return !this.isMessageFromOverlayPageIframe(event);
|
return !this.isMessageFromInlineMenuPageIframe(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
private isMessageFromParentWindow(event: MessageEvent): boolean {
|
private isMessageFromParentWindow(event: MessageEvent): boolean {
|
||||||
return globalThis.parent === event.source;
|
return globalThis.parent === event.source;
|
||||||
}
|
}
|
||||||
|
|
||||||
private isMessageFromOverlayPageIframe(event: MessageEvent): boolean {
|
private isMessageFromInlineMenuPageIframe(event: MessageEvent): boolean {
|
||||||
if (!this.overlayPageIframe) {
|
if (!this.inlineMenuPageIframe) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
this.overlayPageIframe.contentWindow === event.source &&
|
this.inlineMenuPageIframe.contentWindow === event.source &&
|
||||||
this.extensionOriginsSet.has(event.origin.toLowerCase())
|
this.extensionOriginsSet.has(event.origin.toLowerCase())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -117,7 +117,7 @@ const plugins = [
|
|||||||
chunks: ["overlay/list"],
|
chunks: ["overlay/list"],
|
||||||
}),
|
}),
|
||||||
new HtmlWebpackPlugin({
|
new HtmlWebpackPlugin({
|
||||||
template: "./src/autofill/overlay/inline-menu/pages/menu/menu.html",
|
template: "./src/autofill/overlay/inline-menu/pages/container/menu.html",
|
||||||
filename: "overlay/menu.html",
|
filename: "overlay/menu.html",
|
||||||
chunks: ["overlay/menu"],
|
chunks: ["overlay/menu"],
|
||||||
}),
|
}),
|
||||||
@@ -179,7 +179,7 @@ const mainConfig = {
|
|||||||
"overlay/list":
|
"overlay/list":
|
||||||
"./src/autofill/overlay/inline-menu/pages/list/bootstrap-autofill-inline-menu-list.ts",
|
"./src/autofill/overlay/inline-menu/pages/list/bootstrap-autofill-inline-menu-list.ts",
|
||||||
"overlay/menu":
|
"overlay/menu":
|
||||||
"./src/autofill/overlay/inline-menu/pages/menu/bootstrap-autofill-inline-menu-container.ts",
|
"./src/autofill/overlay/inline-menu/pages/container/bootstrap-autofill-inline-menu-container.ts",
|
||||||
"encrypt-worker": "../../libs/common/src/platform/services/cryptography/encrypt.worker.ts",
|
"encrypt-worker": "../../libs/common/src/platform/services/cryptography/encrypt.worker.ts",
|
||||||
"content/lp-fileless-importer": "./src/tools/content/lp-fileless-importer.ts",
|
"content/lp-fileless-importer": "./src/tools/content/lp-fileless-importer.ts",
|
||||||
"content/send-on-installed-message": "./src/vault/content/send-on-installed-message.ts",
|
"content/send-on-installed-message": "./src/vault/content/send-on-installed-message.ts",
|
||||||
|
|||||||
Reference in New Issue
Block a user