Path: blob/main/replay/backend/models/ViewBackend.ts
1030 views
import { BrowserView } from 'electron';1import Window from './Window';2import generateContextMenu from '../menus/generateContextMenu';3import Rectangle = Electron.Rectangle;45export default abstract class ViewBackend {6public get browserView(): BrowserView {7if (!this._browserView) {8this._browserView = new BrowserView({9webPreferences: {10javascript: true,11webSecurity: true,12sandbox: false,13contextIsolation: false,14...this.webPreferences,15},16});17this._browserView.setAutoResize({18width: true,19height: true,20horizontal: false,21vertical: false,22});23this._browserView.webContents.on('context-menu', (e, params) => {24generateContextMenu(params, this._browserView?.webContents).popup();25});26this._browserView.webContents.addListener('did-start-loading', () => {27this.window.sendToRenderer('view:updated-loading', true);28});29this._browserView.webContents.addListener('did-stop-loading', () => {30this.window.sendToRenderer('view:updated-loading', false);31});32}33return this._browserView;34}3536public favicon = '';37protected isAttached = false;38protected readonly window: Window;39protected readonly webPreferences: Electron.WebPreferences;40protected bounds: Rectangle;41protected _browserView: BrowserView;4243protected constructor(window: Window, webPreferences: Electron.WebPreferences) {44this.window = window;45this.webPreferences = webPreferences;46}4748public get webContents() {49return this.browserView.webContents;50}5152public get title() {53return this.webContents.getTitle();54}5556public attach() {57if (!this.isAttached) {58this.window.browserWindow.addBrowserView(this.browserView);59this.isAttached = true;60}61}6263public detach() {64if (this._browserView) this.window.browserWindow.removeBrowserView(this._browserView);65this.isAttached = false;66}6768public destroy() {69this.detach();70this._browserView = null;71}7273public fixBounds(newBounds: { x: number; width: number; y: any; height: number }) {74this.browserView.setBounds(newBounds);75this.bounds = newBounds;76}77}787980