index.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. const Overlay = require('./overlay_module.js');
  2. const isOverlayContext =
  3. (typeof window !== 'undefined' && window != null && window.__OVERLAY__) ||
  4. document.getElementById('__OVERLAY__SENTINEL__') != null ||
  5. /overlay/.test(window.location.pathname);
  6. const isElectronRenderer =
  7. typeof window !== 'undefined' && window != null && window.DiscordNative && window.DiscordNative.isRenderer;
  8. const features = isElectronRenderer ? window.DiscordNative.features : global.features;
  9. let clickZoneCallback;
  10. let interceptInput = false;
  11. let imeExclusiveFullscreenCallback;
  12. let perfInfoCallback;
  13. // [adill] indicates that the race condition between createHostProcess and connectProcess is fixed. remove ~7/2019.
  14. features.declareSupported('create_host_on_attach');
  15. function eventHandler(pid, event) {
  16. if (event.message === 'click_zone_event') {
  17. if (clickZoneCallback) {
  18. clickZoneCallback(event.name, event.x, event.y);
  19. }
  20. } else if (event.message === 'ime_exclusive_fullscreen') {
  21. if (imeExclusiveFullscreenCallback) {
  22. imeExclusiveFullscreenCallback();
  23. }
  24. } else if (event.message === 'perf_info') {
  25. if (perfInfoCallback) {
  26. perfInfoCallback(event.data);
  27. }
  28. }
  29. }
  30. Overlay._setEventHandler(eventHandler);
  31. if (isOverlayContext) {
  32. const {URL} = require('url');
  33. const url = new URL(window.location);
  34. const pid = parseInt(url.searchParams.get('pid'));
  35. Overlay.connectProcess(pid);
  36. Overlay.rendererStarted = () => {
  37. Overlay.sendCommand(pid, {message: 'notify_renderer_started'});
  38. };
  39. }
  40. Overlay.setClickZoneCallback = (callback) => {
  41. clickZoneCallback = callback;
  42. };
  43. // NOTE: deprecated. Use `sendCommand` instead.
  44. Overlay.setInputLocked = (locked) => {
  45. interceptInput = !locked;
  46. const payload = {message: 'intercept_input', intercept: interceptInput};
  47. Overlay.broadcastCommand(payload);
  48. };
  49. Overlay.setImeExclusiveFullscreenCallback = (callback) => {
  50. imeExclusiveFullscreenCallback = callback;
  51. };
  52. Overlay.setPerfInfoCallback = (callback) => {
  53. perfInfoCallback = callback;
  54. };
  55. module.exports = Overlay;