common-init.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { ipcRendererInternal } from '@electron/internal/renderer/ipc-renderer-internal';
  2. import type * as securityWarningsModule from '@electron/internal/renderer/security-warnings';
  3. import type * as webFrameInitModule from '@electron/internal/renderer/web-frame-init';
  4. import type * as webViewInitModule from '@electron/internal/renderer/web-view/web-view-init';
  5. import type * as windowSetupModule from '@electron/internal/renderer/window-setup';
  6. import { ipcRenderer } from 'electron/renderer';
  7. const { mainFrame } = process._linkedBinding('electron_renderer_web_frame');
  8. const v8Util = process._linkedBinding('electron_common_v8_util');
  9. const nodeIntegration = mainFrame.getWebPreference('nodeIntegration');
  10. const webviewTag = mainFrame.getWebPreference('webviewTag');
  11. const isHiddenPage = mainFrame.getWebPreference('hiddenPage');
  12. const isWebView = mainFrame.getWebPreference('isWebView');
  13. // ElectronApiServiceImpl will look for the "ipcNative" hidden object when
  14. // invoking the 'onMessage' callback.
  15. v8Util.setHiddenValue(global, 'ipcNative', {
  16. onMessage (internal: boolean, channel: string, ports: MessagePort[], args: any[]) {
  17. const sender = internal ? ipcRendererInternal : ipcRenderer;
  18. sender.emit(channel, { sender, ports }, ...args);
  19. }
  20. });
  21. switch (window.location.protocol) {
  22. case 'devtools:': {
  23. // Override some inspector APIs.
  24. require('@electron/internal/renderer/inspector');
  25. break;
  26. }
  27. case 'chrome-extension:': {
  28. break;
  29. }
  30. case 'chrome:': {
  31. break;
  32. }
  33. default: {
  34. // Override default web functions.
  35. const { windowSetup } = require('@electron/internal/renderer/window-setup') as typeof windowSetupModule;
  36. windowSetup(isWebView, isHiddenPage);
  37. }
  38. }
  39. // Load webview tag implementation.
  40. if (process.isMainFrame) {
  41. const { webViewInit } = require('@electron/internal/renderer/web-view/web-view-init') as typeof webViewInitModule;
  42. webViewInit(webviewTag, isWebView);
  43. }
  44. const { webFrameInit } = require('@electron/internal/renderer/web-frame-init') as typeof webFrameInitModule;
  45. webFrameInit();
  46. // Warn about security issues
  47. if (process.isMainFrame) {
  48. const { securityWarnings } = require('@electron/internal/renderer/security-warnings') as typeof securityWarningsModule;
  49. securityWarnings(nodeIntegration);
  50. }