polyfill.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. global.chrome =
  2. global.browser = {
  3. storage: {
  4. local: {
  5. get() {
  6. return Promise.resolve({});
  7. },
  8. set() {
  9. return Promise.resolve();
  10. },
  11. },
  12. },
  13. extension: {
  14. isAllowedFileSchemeAccess: () => false,
  15. },
  16. runtime: {
  17. getURL: path => path,
  18. getManifest: () => ({
  19. icons: { 16: '' },
  20. options_ui: {},
  21. }),
  22. getPlatformInfo: async () => ({}),
  23. },
  24. tabs: {
  25. onRemoved: { addListener: () => {} },
  26. onReplaced: { addListener: () => {} },
  27. onUpdated: { addListener: () => {} },
  28. },
  29. windows: {
  30. getAll: () => [{}],
  31. getCurrent: () => ({}),
  32. },
  33. };
  34. if (!window.Response) window.Response = { prototype: {} };
  35. const domProps = Object.getOwnPropertyDescriptors(window);
  36. for (const k of Object.keys(domProps)) {
  37. // Skipping ***Storage and native global methods
  38. if (k.endsWith('Storage') || /^[a-z]/.test(k) && (k in global)) {
  39. delete domProps[k];
  40. }
  41. }
  42. Object.defineProperties(global, domProps);
  43. delete MessagePort.prototype.onmessage; // to avoid hanging
  44. global.PAGE_MODE_HANDSHAKE = 123;
  45. global.VAULT_ID = false;
  46. Object.assign(URL, {
  47. blobCache: {},
  48. createObjectURL(blob) {
  49. const blobUrl = `blob:${Math.random()}`;
  50. URL.blobCache[blobUrl] = blob;
  51. return blobUrl;
  52. },
  53. });
  54. Object.assign(global, require('@/common/safe-globals-shared'));
  55. Object.assign(global, require('@/common/safe-globals'));
  56. Object.assign(global, require('@/injected/safe-globals'));
  57. Object.assign(global, require('@/injected/content/safe-globals'));
  58. Object.assign(global, require('@/injected/web/safe-globals'));