common-init.ts 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { ipcRenderer } from 'electron/renderer';
  2. import { ipcRendererInternal } from '@electron/internal/renderer/ipc-renderer-internal';
  3. import type * as webViewInitModule from '@electron/internal/renderer/web-view/web-view-init';
  4. import type * as windowSetupModule from '@electron/internal/renderer/window-setup';
  5. import type * as webFrameInitModule from '@electron/internal/renderer/web-frame-init';
  6. import type * as securityWarningsModule from '@electron/internal/renderer/security-warnings';
  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[], senderId: number, senderIsMainFrame: boolean) {
  17. if (internal && senderId !== 0) {
  18. console.error(`Message ${channel} sent by unexpected WebContents (${senderId})`);
  19. return;
  20. }
  21. const sender = internal ? ipcRendererInternal : ipcRenderer;
  22. sender.emit(channel, { sender, senderId, ...(senderId ? { senderIsMainFrame } : {}), ports }, ...args);
  23. }
  24. });
  25. switch (window.location.protocol) {
  26. case 'devtools:': {
  27. // Override some inspector APIs.
  28. require('@electron/internal/renderer/inspector');
  29. break;
  30. }
  31. case 'chrome-extension:': {
  32. break;
  33. }
  34. case 'chrome:': {
  35. break;
  36. }
  37. default: {
  38. // Override default web functions.
  39. const { windowSetup } = require('@electron/internal/renderer/window-setup') as typeof windowSetupModule;
  40. windowSetup(isWebView, isHiddenPage);
  41. }
  42. }
  43. // Load webview tag implementation.
  44. if (process.isMainFrame) {
  45. const { webViewInit } = require('@electron/internal/renderer/web-view/web-view-init') as typeof webViewInitModule;
  46. webViewInit(webviewTag, isWebView);
  47. }
  48. const { webFrameInit } = require('@electron/internal/renderer/web-frame-init') as typeof webFrameInitModule;
  49. webFrameInit();
  50. // Warn about security issues
  51. if (process.isMainFrame) {
  52. const { securityWarnings } = require('@electron/internal/renderer/security-warnings') as typeof securityWarningsModule;
  53. securityWarnings(nodeIntegration);
  54. }