happy-dom 15.0.0 → 15.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of happy-dom might be problematic. Click here for more details.

Files changed (804) hide show
  1. package/cjs/ClassMethodBinder.cjs +8 -6
  2. package/cjs/ClassMethodBinder.cjs.map +1 -1
  3. package/cjs/ClassMethodBinder.d.ts +4 -2
  4. package/cjs/ClassMethodBinder.d.ts.map +1 -1
  5. package/cjs/PropertySymbol.cjs +20 -9
  6. package/cjs/PropertySymbol.cjs.map +1 -1
  7. package/cjs/PropertySymbol.d.ts +15 -4
  8. package/cjs/PropertySymbol.d.ts.map +1 -1
  9. package/cjs/async-task-manager/AsyncTaskManager.cjs +64 -35
  10. package/cjs/async-task-manager/AsyncTaskManager.cjs.map +1 -1
  11. package/cjs/async-task-manager/AsyncTaskManager.d.ts +11 -1
  12. package/cjs/async-task-manager/AsyncTaskManager.d.ts.map +1 -1
  13. package/cjs/browser/Browser.cjs +30 -0
  14. package/cjs/browser/Browser.cjs.map +1 -1
  15. package/cjs/browser/Browser.d.ts +3 -0
  16. package/cjs/browser/Browser.d.ts.map +1 -1
  17. package/cjs/browser/BrowserFrame.cjs +3 -7
  18. package/cjs/browser/BrowserFrame.cjs.map +1 -1
  19. package/cjs/browser/BrowserFrame.d.ts +1 -4
  20. package/cjs/browser/BrowserFrame.d.ts.map +1 -1
  21. package/cjs/browser/DefaultBrowserSettings.cjs +2 -1
  22. package/cjs/browser/DefaultBrowserSettings.cjs.map +1 -1
  23. package/cjs/browser/DefaultBrowserSettings.d.ts.map +1 -1
  24. package/cjs/browser/detached-browser/DetachedBrowser.cjs +30 -0
  25. package/cjs/browser/detached-browser/DetachedBrowser.cjs.map +1 -1
  26. package/cjs/browser/detached-browser/DetachedBrowser.d.ts +3 -0
  27. package/cjs/browser/detached-browser/DetachedBrowser.d.ts.map +1 -1
  28. package/cjs/browser/detached-browser/DetachedBrowserFrame.cjs +3 -7
  29. package/cjs/browser/detached-browser/DetachedBrowserFrame.cjs.map +1 -1
  30. package/cjs/browser/detached-browser/DetachedBrowserFrame.d.ts +1 -4
  31. package/cjs/browser/detached-browser/DetachedBrowserFrame.d.ts.map +1 -1
  32. package/cjs/browser/types/IBrowser.cjs +24 -0
  33. package/cjs/browser/types/IBrowser.cjs.map +1 -1
  34. package/cjs/browser/types/IBrowser.d.ts +3 -0
  35. package/cjs/browser/types/IBrowser.d.ts.map +1 -1
  36. package/cjs/browser/types/IBrowserFrame.d.ts +0 -3
  37. package/cjs/browser/types/IBrowserFrame.d.ts.map +1 -1
  38. package/cjs/browser/types/IBrowserSettings.d.ts +1 -0
  39. package/cjs/browser/types/IBrowserSettings.d.ts.map +1 -1
  40. package/cjs/browser/utilities/BrowserExceptionObserver.cjs +100 -0
  41. package/cjs/browser/utilities/BrowserExceptionObserver.cjs.map +1 -0
  42. package/{lib/browser/utilities/BrowserFrameExceptionObserver.d.ts → cjs/browser/utilities/BrowserExceptionObserver.d.ts} +9 -7
  43. package/cjs/browser/utilities/BrowserExceptionObserver.d.ts.map +1 -0
  44. package/cjs/browser/utilities/BrowserFrameFactory.cjs +27 -35
  45. package/cjs/browser/utilities/BrowserFrameFactory.cjs.map +1 -1
  46. package/cjs/browser/utilities/BrowserFrameFactory.d.ts.map +1 -1
  47. package/cjs/browser/utilities/BrowserFrameNavigator.cjs +52 -29
  48. package/cjs/browser/utilities/BrowserFrameNavigator.cjs.map +1 -1
  49. package/cjs/browser/utilities/BrowserFrameNavigator.d.ts.map +1 -1
  50. package/cjs/clipboard/Clipboard.cjs +18 -15
  51. package/cjs/clipboard/Clipboard.cjs.map +1 -1
  52. package/cjs/clipboard/Clipboard.d.ts +2 -2
  53. package/cjs/clipboard/Clipboard.d.ts.map +1 -1
  54. package/cjs/css/declaration/AbstractCSSStyleDeclaration.cjs +27 -4
  55. package/cjs/css/declaration/AbstractCSSStyleDeclaration.cjs.map +1 -1
  56. package/cjs/css/declaration/element-style/CSSStyleDeclarationElementStyle.cjs +6 -5
  57. package/cjs/css/declaration/element-style/CSSStyleDeclarationElementStyle.cjs.map +1 -1
  58. package/cjs/css/declaration/element-style/CSSStyleDeclarationElementStyle.d.ts.map +1 -1
  59. package/cjs/css/declaration/measurement-converter/CSSMeasurementConverter.cjs +5 -5
  60. package/cjs/css/declaration/measurement-converter/CSSMeasurementConverter.cjs.map +1 -1
  61. package/cjs/css/declaration/measurement-converter/CSSMeasurementConverter.d.ts +2 -2
  62. package/cjs/css/declaration/measurement-converter/CSSMeasurementConverter.d.ts.map +1 -1
  63. package/cjs/custom-element/CustomElementRegistry.cjs +37 -17
  64. package/cjs/custom-element/CustomElementRegistry.cjs.map +1 -1
  65. package/cjs/custom-element/CustomElementRegistry.d.ts +2 -3
  66. package/cjs/custom-element/CustomElementRegistry.d.ts.map +1 -1
  67. package/cjs/dom-implementation/DOMImplementation.cjs +12 -7
  68. package/cjs/dom-implementation/DOMImplementation.cjs.map +1 -1
  69. package/cjs/dom-implementation/DOMImplementation.d.ts +7 -3
  70. package/cjs/dom-implementation/DOMImplementation.d.ts.map +1 -1
  71. package/cjs/dom-parser/DOMParser.cjs +6 -15
  72. package/cjs/dom-parser/DOMParser.cjs.map +1 -1
  73. package/cjs/dom-parser/DOMParser.d.ts +2 -6
  74. package/cjs/dom-parser/DOMParser.d.ts.map +1 -1
  75. package/cjs/event/Event.cjs +76 -18
  76. package/cjs/event/Event.cjs.map +1 -1
  77. package/cjs/event/Event.d.ts +49 -7
  78. package/cjs/event/Event.d.ts.map +1 -1
  79. package/cjs/event/EventTarget.cjs +153 -141
  80. package/cjs/event/EventTarget.cjs.map +1 -1
  81. package/cjs/event/EventTarget.d.ts +12 -8
  82. package/cjs/event/EventTarget.d.ts.map +1 -1
  83. package/cjs/event/MessagePort.cjs.map +1 -1
  84. package/cjs/event/MessagePort.d.ts +1 -2
  85. package/cjs/event/MessagePort.d.ts.map +1 -1
  86. package/cjs/event/{IEventListener.cjs → TEventListener.cjs} +1 -1
  87. package/cjs/event/TEventListener.cjs.map +1 -0
  88. package/cjs/event/TEventListener.d.ts +5 -0
  89. package/cjs/event/TEventListener.d.ts.map +1 -0
  90. package/cjs/event/TEventListenerFunction.cjs +3 -0
  91. package/cjs/event/TEventListenerFunction.cjs.map +1 -0
  92. package/cjs/event/TEventListenerFunction.d.ts +4 -0
  93. package/cjs/event/TEventListenerFunction.d.ts.map +1 -0
  94. package/cjs/event/{IMessagePort.cjs → TEventListenerObject.cjs} +1 -1
  95. package/cjs/event/TEventListenerObject.cjs.map +1 -0
  96. package/cjs/event/TEventListenerObject.d.ts +6 -0
  97. package/cjs/event/TEventListenerObject.d.ts.map +1 -0
  98. package/cjs/event/events/CustomEvent.cjs +38 -6
  99. package/cjs/event/events/CustomEvent.cjs.map +1 -1
  100. package/cjs/event/events/CustomEvent.d.ts +8 -1
  101. package/cjs/event/events/CustomEvent.d.ts.map +1 -1
  102. package/cjs/event/events/IErrorEventInit.d.ts.map +1 -1
  103. package/cjs/event/events/IMessageEventInit.d.ts +2 -2
  104. package/cjs/event/events/IMessageEventInit.d.ts.map +1 -1
  105. package/cjs/event/events/MessageEvent.cjs.map +1 -1
  106. package/cjs/event/events/MessageEvent.d.ts +2 -2
  107. package/cjs/event/events/MessageEvent.d.ts.map +1 -1
  108. package/cjs/fetch/AbortController.cjs +2 -11
  109. package/cjs/fetch/AbortController.cjs.map +1 -1
  110. package/cjs/fetch/AbortController.d.ts +3 -4
  111. package/cjs/fetch/AbortController.d.ts.map +1 -1
  112. package/cjs/fetch/AbortSignal.cjs +14 -4
  113. package/cjs/fetch/AbortSignal.cjs.map +1 -1
  114. package/cjs/fetch/AbortSignal.d.ts +7 -0
  115. package/cjs/fetch/AbortSignal.d.ts.map +1 -1
  116. package/cjs/fetch/Fetch.cjs +24 -14
  117. package/cjs/fetch/Fetch.cjs.map +1 -1
  118. package/cjs/fetch/Fetch.d.ts.map +1 -1
  119. package/cjs/fetch/Request.cjs +62 -45
  120. package/cjs/fetch/Request.cjs.map +1 -1
  121. package/cjs/fetch/Request.d.ts +3 -14
  122. package/cjs/fetch/Request.d.ts.map +1 -1
  123. package/cjs/fetch/ResourceFetch.cjs +2 -3
  124. package/cjs/fetch/ResourceFetch.cjs.map +1 -1
  125. package/cjs/fetch/ResourceFetch.d.ts.map +1 -1
  126. package/cjs/fetch/Response.cjs +63 -40
  127. package/cjs/fetch/Response.cjs.map +1 -1
  128. package/cjs/fetch/Response.d.ts +3 -10
  129. package/cjs/fetch/Response.d.ts.map +1 -1
  130. package/cjs/fetch/SyncFetch.cjs +12 -13
  131. package/cjs/fetch/SyncFetch.cjs.map +1 -1
  132. package/cjs/fetch/SyncFetch.d.ts.map +1 -1
  133. package/cjs/fetch/multipart/MultipartFormDataParser.cjs +12 -6
  134. package/cjs/fetch/multipart/MultipartFormDataParser.cjs.map +1 -1
  135. package/cjs/fetch/multipart/MultipartFormDataParser.d.ts +3 -1
  136. package/cjs/fetch/multipart/MultipartFormDataParser.d.ts.map +1 -1
  137. package/cjs/fetch/multipart/MultipartReader.cjs +5 -3
  138. package/cjs/fetch/multipart/MultipartReader.cjs.map +1 -1
  139. package/cjs/fetch/multipart/MultipartReader.d.ts +4 -1
  140. package/cjs/fetch/multipart/MultipartReader.d.ts.map +1 -1
  141. package/cjs/fetch/utilities/FetchBodyUtility.cjs +10 -5
  142. package/cjs/fetch/utilities/FetchBodyUtility.cjs.map +1 -1
  143. package/cjs/fetch/utilities/FetchBodyUtility.d.ts +5 -2
  144. package/cjs/fetch/utilities/FetchBodyUtility.d.ts.map +1 -1
  145. package/cjs/file/FileReader.cjs +11 -11
  146. package/cjs/file/FileReader.cjs.map +1 -1
  147. package/cjs/file/FileReader.d.ts +1 -4
  148. package/cjs/file/FileReader.d.ts.map +1 -1
  149. package/cjs/history/History.cjs +28 -14
  150. package/cjs/history/History.cjs.map +1 -1
  151. package/cjs/history/History.d.ts +2 -2
  152. package/cjs/history/History.d.ts.map +1 -1
  153. package/cjs/index.d.ts +2 -2
  154. package/cjs/location/Location.cjs +43 -22
  155. package/cjs/location/Location.cjs.map +1 -1
  156. package/cjs/location/Location.d.ts +4 -0
  157. package/cjs/location/Location.d.ts.map +1 -1
  158. package/cjs/match-media/MediaQueryItem.cjs +26 -26
  159. package/cjs/match-media/MediaQueryItem.cjs.map +1 -1
  160. package/cjs/match-media/MediaQueryItem.d.ts +3 -3
  161. package/cjs/match-media/MediaQueryItem.d.ts.map +1 -1
  162. package/cjs/match-media/MediaQueryList.cjs +7 -7
  163. package/cjs/match-media/MediaQueryList.cjs.map +1 -1
  164. package/cjs/match-media/MediaQueryList.d.ts +5 -5
  165. package/cjs/match-media/MediaQueryList.d.ts.map +1 -1
  166. package/cjs/match-media/MediaQueryParser.cjs +4 -4
  167. package/cjs/match-media/MediaQueryParser.cjs.map +1 -1
  168. package/cjs/match-media/MediaQueryParser.d.ts +2 -2
  169. package/cjs/match-media/MediaQueryParser.d.ts.map +1 -1
  170. package/cjs/mutation-observer/MutationObserver.cjs +17 -15
  171. package/cjs/mutation-observer/MutationObserver.cjs.map +1 -1
  172. package/cjs/mutation-observer/MutationObserver.d.ts +3 -0
  173. package/cjs/mutation-observer/MutationObserver.d.ts.map +1 -1
  174. package/cjs/navigator/Navigator.cjs +13 -10
  175. package/cjs/navigator/Navigator.cjs.map +1 -1
  176. package/cjs/navigator/Navigator.d.ts +2 -2
  177. package/cjs/navigator/Navigator.d.ts.map +1 -1
  178. package/cjs/nodes/NodeFactory.cjs +1 -1
  179. package/cjs/nodes/NodeFactory.cjs.map +1 -1
  180. package/cjs/nodes/document/Document.cjs +69 -51
  181. package/cjs/nodes/document/Document.cjs.map +1 -1
  182. package/cjs/nodes/document/Document.d.ts +9 -16
  183. package/cjs/nodes/document/Document.d.ts.map +1 -1
  184. package/cjs/nodes/document/DocumentReadyStateManager.cjs +12 -10
  185. package/cjs/nodes/document/DocumentReadyStateManager.cjs.map +1 -1
  186. package/cjs/nodes/document/DocumentReadyStateManager.d.ts.map +1 -1
  187. package/cjs/nodes/element/Element.cjs +33 -20
  188. package/cjs/nodes/element/Element.cjs.map +1 -1
  189. package/cjs/nodes/element/Element.d.ts +7 -3
  190. package/cjs/nodes/element/Element.d.ts.map +1 -1
  191. package/cjs/nodes/element/HTMLCollection.cjs +1 -4
  192. package/cjs/nodes/element/HTMLCollection.cjs.map +1 -1
  193. package/cjs/nodes/element/HTMLCollection.d.ts.map +1 -1
  194. package/cjs/nodes/element/NamedNodeMap.cjs +4 -0
  195. package/cjs/nodes/element/NamedNodeMap.cjs.map +1 -1
  196. package/cjs/nodes/element/NamedNodeMap.d.ts.map +1 -1
  197. package/cjs/nodes/element/NamedNodeMapProxyFactory.cjs +0 -9
  198. package/cjs/nodes/element/NamedNodeMapProxyFactory.cjs.map +1 -1
  199. package/cjs/nodes/element/NamedNodeMapProxyFactory.d.ts.map +1 -1
  200. package/cjs/nodes/html-anchor-element/HTMLAnchorElement.cjs +5 -5
  201. package/cjs/nodes/html-anchor-element/HTMLAnchorElement.cjs.map +1 -1
  202. package/cjs/nodes/html-anchor-element/HTMLAnchorElement.d.ts.map +1 -1
  203. package/cjs/nodes/html-area-element/HTMLAreaElement.cjs +7 -8
  204. package/cjs/nodes/html-area-element/HTMLAreaElement.cjs.map +1 -1
  205. package/cjs/nodes/html-area-element/HTMLAreaElement.d.ts.map +1 -1
  206. package/cjs/nodes/html-audio-element/Audio.cjs +28 -0
  207. package/cjs/nodes/html-audio-element/Audio.cjs.map +1 -1
  208. package/cjs/nodes/html-audio-element/Audio.d.ts +4 -0
  209. package/cjs/nodes/html-audio-element/Audio.d.ts.map +1 -1
  210. package/cjs/nodes/html-button-element/HTMLButtonElement.cjs +63 -35
  211. package/cjs/nodes/html-button-element/HTMLButtonElement.cjs.map +1 -1
  212. package/cjs/nodes/html-button-element/HTMLButtonElement.d.ts +27 -3
  213. package/cjs/nodes/html-button-element/HTMLButtonElement.d.ts.map +1 -1
  214. package/cjs/nodes/html-canvas-element/HTMLCanvasElement.cjs +2 -4
  215. package/cjs/nodes/html-canvas-element/HTMLCanvasElement.cjs.map +1 -1
  216. package/cjs/nodes/html-canvas-element/HTMLCanvasElement.d.ts.map +1 -1
  217. package/cjs/nodes/html-document/HTMLDocument.cjs +2 -6
  218. package/cjs/nodes/html-document/HTMLDocument.cjs.map +1 -1
  219. package/cjs/nodes/html-document/HTMLDocument.d.ts +1 -10
  220. package/cjs/nodes/html-document/HTMLDocument.d.ts.map +1 -1
  221. package/cjs/nodes/html-element/HTMLElement.cjs +130 -89
  222. package/cjs/nodes/html-element/HTMLElement.cjs.map +1 -1
  223. package/cjs/nodes/html-element/HTMLElement.d.ts +14 -2
  224. package/cjs/nodes/html-element/HTMLElement.d.ts.map +1 -1
  225. package/cjs/nodes/html-form-element/HTMLFormElement.cjs +6 -7
  226. package/cjs/nodes/html-form-element/HTMLFormElement.cjs.map +1 -1
  227. package/cjs/nodes/html-form-element/HTMLFormElement.d.ts +1 -3
  228. package/cjs/nodes/html-form-element/HTMLFormElement.d.ts.map +1 -1
  229. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs +30 -38
  230. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs.map +1 -1
  231. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.d.ts +0 -6
  232. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.d.ts.map +1 -1
  233. package/cjs/nodes/html-image-element/Image.cjs +28 -0
  234. package/cjs/nodes/html-image-element/Image.cjs.map +1 -1
  235. package/cjs/nodes/html-image-element/Image.d.ts +4 -0
  236. package/cjs/nodes/html-image-element/Image.d.ts.map +1 -1
  237. package/cjs/nodes/html-input-element/HTMLInputElement.cjs +88 -56
  238. package/cjs/nodes/html-input-element/HTMLInputElement.cjs.map +1 -1
  239. package/cjs/nodes/html-input-element/HTMLInputElement.d.ts +25 -0
  240. package/cjs/nodes/html-input-element/HTMLInputElement.d.ts.map +1 -1
  241. package/cjs/nodes/html-label-element/HTMLLabelElement.cjs +4 -3
  242. package/cjs/nodes/html-label-element/HTMLLabelElement.cjs.map +1 -1
  243. package/cjs/nodes/html-label-element/HTMLLabelElement.d.ts +8 -1
  244. package/cjs/nodes/html-label-element/HTMLLabelElement.d.ts.map +1 -1
  245. package/cjs/nodes/html-link-element/HTMLLinkElement.cjs +10 -16
  246. package/cjs/nodes/html-link-element/HTMLLinkElement.cjs.map +1 -1
  247. package/cjs/nodes/html-link-element/HTMLLinkElement.d.ts +0 -6
  248. package/cjs/nodes/html-link-element/HTMLLinkElement.d.ts.map +1 -1
  249. package/cjs/nodes/html-media-element/HTMLMediaElement.cjs +12 -16
  250. package/cjs/nodes/html-media-element/HTMLMediaElement.cjs.map +1 -1
  251. package/cjs/nodes/html-media-element/HTMLMediaElement.d.ts.map +1 -1
  252. package/cjs/nodes/html-media-element/MediaStream.cjs +3 -0
  253. package/cjs/nodes/html-media-element/MediaStream.cjs.map +1 -1
  254. package/cjs/nodes/html-media-element/MediaStream.d.ts.map +1 -1
  255. package/cjs/nodes/html-media-element/MediaStreamTrack.cjs +3 -0
  256. package/cjs/nodes/html-media-element/MediaStreamTrack.cjs.map +1 -1
  257. package/cjs/nodes/html-media-element/MediaStreamTrack.d.ts.map +1 -1
  258. package/cjs/nodes/html-media-element/TextTrack.cjs +3 -0
  259. package/cjs/nodes/html-media-element/TextTrack.cjs.map +1 -1
  260. package/cjs/nodes/html-media-element/TextTrack.d.ts.map +1 -1
  261. package/cjs/nodes/html-media-element/TextTrackCue.cjs +3 -0
  262. package/cjs/nodes/html-media-element/TextTrackCue.cjs.map +1 -1
  263. package/cjs/nodes/html-media-element/TextTrackCue.d.ts.map +1 -1
  264. package/cjs/nodes/html-media-element/VTTCue.cjs +7 -8
  265. package/cjs/nodes/html-media-element/VTTCue.cjs.map +1 -1
  266. package/cjs/nodes/html-media-element/VTTCue.d.ts +1 -4
  267. package/cjs/nodes/html-media-element/VTTCue.d.ts.map +1 -1
  268. package/cjs/nodes/html-meter-element/HTMLMeterElement.cjs +30 -6
  269. package/cjs/nodes/html-meter-element/HTMLMeterElement.cjs.map +1 -1
  270. package/cjs/nodes/html-meter-element/HTMLMeterElement.d.ts.map +1 -1
  271. package/cjs/nodes/html-progress-element/HTMLProgressElement.cjs +26 -2
  272. package/cjs/nodes/html-progress-element/HTMLProgressElement.cjs.map +1 -1
  273. package/cjs/nodes/html-progress-element/HTMLProgressElement.d.ts.map +1 -1
  274. package/cjs/nodes/html-script-element/HTMLScriptElement.cjs +21 -27
  275. package/cjs/nodes/html-script-element/HTMLScriptElement.cjs.map +1 -1
  276. package/cjs/nodes/html-script-element/HTMLScriptElement.d.ts +0 -6
  277. package/cjs/nodes/html-script-element/HTMLScriptElement.d.ts.map +1 -1
  278. package/cjs/nodes/html-select-element/HTMLSelectElement.cjs +5 -5
  279. package/cjs/nodes/html-select-element/HTMLSelectElement.cjs.map +1 -1
  280. package/cjs/nodes/html-select-element/HTMLSelectElement.d.ts.map +1 -1
  281. package/cjs/nodes/html-table-element/HTMLTableElement.cjs +8 -9
  282. package/cjs/nodes/html-table-element/HTMLTableElement.cjs.map +1 -1
  283. package/cjs/nodes/html-table-element/HTMLTableElement.d.ts.map +1 -1
  284. package/cjs/nodes/html-table-row-element/HTMLTableRowElement.cjs +5 -6
  285. package/cjs/nodes/html-table-row-element/HTMLTableRowElement.cjs.map +1 -1
  286. package/cjs/nodes/html-table-row-element/HTMLTableRowElement.d.ts.map +1 -1
  287. package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.cjs +1 -2
  288. package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.cjs.map +1 -1
  289. package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.d.ts.map +1 -1
  290. package/cjs/nodes/html-track-element/HTMLTrackElement.cjs +1 -2
  291. package/cjs/nodes/html-track-element/HTMLTrackElement.cjs.map +1 -1
  292. package/cjs/nodes/node/Node.cjs +23 -22
  293. package/cjs/nodes/node/Node.cjs.map +1 -1
  294. package/cjs/nodes/node/Node.d.ts +1 -2
  295. package/cjs/nodes/node/Node.d.ts.map +1 -1
  296. package/cjs/nodes/node/NodeList.cjs +4 -6
  297. package/cjs/nodes/node/NodeList.cjs.map +1 -1
  298. package/cjs/nodes/node/NodeList.d.ts.map +1 -1
  299. package/cjs/nodes/text/Text.cjs +1 -2
  300. package/cjs/nodes/text/Text.cjs.map +1 -1
  301. package/cjs/nodes/text/Text.d.ts.map +1 -1
  302. package/cjs/permissions/Permissions.cjs +13 -2
  303. package/cjs/permissions/Permissions.cjs.map +1 -1
  304. package/cjs/permissions/Permissions.d.ts +7 -0
  305. package/cjs/permissions/Permissions.d.ts.map +1 -1
  306. package/cjs/query-selector/QuerySelector.cjs +12 -10
  307. package/cjs/query-selector/QuerySelector.cjs.map +1 -1
  308. package/cjs/query-selector/QuerySelector.d.ts.map +1 -1
  309. package/cjs/range/Range.cjs +26 -23
  310. package/cjs/range/Range.cjs.map +1 -1
  311. package/cjs/range/Range.d.ts +2 -2
  312. package/cjs/range/Range.d.ts.map +1 -1
  313. package/cjs/selection/Selection.cjs +16 -17
  314. package/cjs/selection/Selection.cjs.map +1 -1
  315. package/cjs/selection/Selection.d.ts.map +1 -1
  316. package/cjs/window/BrowserWindow.cjs +136 -266
  317. package/cjs/window/BrowserWindow.cjs.map +1 -1
  318. package/cjs/window/BrowserWindow.d.ts +115 -117
  319. package/cjs/window/BrowserWindow.d.ts.map +1 -1
  320. package/cjs/window/VMGlobalPropertyScript.cjs +0 -1
  321. package/cjs/window/VMGlobalPropertyScript.cjs.map +1 -1
  322. package/cjs/window/VMGlobalPropertyScript.d.ts.map +1 -1
  323. package/cjs/window/WindowBrowserContext.cjs +117 -0
  324. package/cjs/window/WindowBrowserContext.cjs.map +1 -0
  325. package/cjs/window/WindowBrowserContext.d.ts +75 -0
  326. package/cjs/window/WindowBrowserContext.d.ts.map +1 -0
  327. package/cjs/window/WindowClassExtender.cjs +332 -0
  328. package/cjs/window/WindowClassExtender.cjs.map +1 -0
  329. package/cjs/window/WindowClassExtender.d.ts +15 -0
  330. package/cjs/window/WindowClassExtender.d.ts.map +1 -0
  331. package/cjs/window/WindowPageOpenUtility.cjs +11 -1
  332. package/cjs/window/WindowPageOpenUtility.cjs.map +1 -1
  333. package/cjs/window/WindowPageOpenUtility.d.ts.map +1 -1
  334. package/cjs/xml-http-request/XMLHttpRequest.cjs +33 -33
  335. package/cjs/xml-http-request/XMLHttpRequest.cjs.map +1 -1
  336. package/cjs/xml-http-request/XMLHttpRequest.d.ts +2 -11
  337. package/cjs/xml-http-request/XMLHttpRequest.d.ts.map +1 -1
  338. package/lib/ClassMethodBinder.d.ts +4 -2
  339. package/lib/ClassMethodBinder.d.ts.map +1 -1
  340. package/lib/ClassMethodBinder.js +8 -6
  341. package/lib/ClassMethodBinder.js.map +1 -1
  342. package/lib/PropertySymbol.d.ts +15 -4
  343. package/lib/PropertySymbol.d.ts.map +1 -1
  344. package/lib/PropertySymbol.js +15 -4
  345. package/lib/PropertySymbol.js.map +1 -1
  346. package/lib/async-task-manager/AsyncTaskManager.d.ts +11 -1
  347. package/lib/async-task-manager/AsyncTaskManager.d.ts.map +1 -1
  348. package/lib/async-task-manager/AsyncTaskManager.js +64 -35
  349. package/lib/async-task-manager/AsyncTaskManager.js.map +1 -1
  350. package/lib/browser/Browser.d.ts +3 -0
  351. package/lib/browser/Browser.d.ts.map +1 -1
  352. package/lib/browser/Browser.js +7 -0
  353. package/lib/browser/Browser.js.map +1 -1
  354. package/lib/browser/BrowserFrame.d.ts +1 -4
  355. package/lib/browser/BrowserFrame.d.ts.map +1 -1
  356. package/lib/browser/BrowserFrame.js +3 -7
  357. package/lib/browser/BrowserFrame.js.map +1 -1
  358. package/lib/browser/DefaultBrowserSettings.d.ts.map +1 -1
  359. package/lib/browser/DefaultBrowserSettings.js +2 -1
  360. package/lib/browser/DefaultBrowserSettings.js.map +1 -1
  361. package/lib/browser/detached-browser/DetachedBrowser.d.ts +3 -0
  362. package/lib/browser/detached-browser/DetachedBrowser.d.ts.map +1 -1
  363. package/lib/browser/detached-browser/DetachedBrowser.js +7 -0
  364. package/lib/browser/detached-browser/DetachedBrowser.js.map +1 -1
  365. package/lib/browser/detached-browser/DetachedBrowserFrame.d.ts +1 -4
  366. package/lib/browser/detached-browser/DetachedBrowserFrame.d.ts.map +1 -1
  367. package/lib/browser/detached-browser/DetachedBrowserFrame.js +3 -7
  368. package/lib/browser/detached-browser/DetachedBrowserFrame.js.map +1 -1
  369. package/lib/browser/types/IBrowser.d.ts +3 -0
  370. package/lib/browser/types/IBrowser.d.ts.map +1 -1
  371. package/lib/browser/types/IBrowser.js +1 -1
  372. package/lib/browser/types/IBrowser.js.map +1 -1
  373. package/lib/browser/types/IBrowserFrame.d.ts +0 -3
  374. package/lib/browser/types/IBrowserFrame.d.ts.map +1 -1
  375. package/lib/browser/types/IBrowserSettings.d.ts +1 -0
  376. package/lib/browser/types/IBrowserSettings.d.ts.map +1 -1
  377. package/{cjs/browser/utilities/BrowserFrameExceptionObserver.d.ts → lib/browser/utilities/BrowserExceptionObserver.d.ts} +9 -7
  378. package/lib/browser/utilities/BrowserExceptionObserver.d.ts.map +1 -0
  379. package/lib/browser/utilities/BrowserExceptionObserver.js +97 -0
  380. package/lib/browser/utilities/BrowserExceptionObserver.js.map +1 -0
  381. package/lib/browser/utilities/BrowserFrameFactory.d.ts.map +1 -1
  382. package/lib/browser/utilities/BrowserFrameFactory.js +27 -35
  383. package/lib/browser/utilities/BrowserFrameFactory.js.map +1 -1
  384. package/lib/browser/utilities/BrowserFrameNavigator.d.ts.map +1 -1
  385. package/lib/browser/utilities/BrowserFrameNavigator.js +52 -29
  386. package/lib/browser/utilities/BrowserFrameNavigator.js.map +1 -1
  387. package/lib/clipboard/Clipboard.d.ts +2 -2
  388. package/lib/clipboard/Clipboard.d.ts.map +1 -1
  389. package/lib/clipboard/Clipboard.js +18 -15
  390. package/lib/clipboard/Clipboard.js.map +1 -1
  391. package/lib/css/declaration/AbstractCSSStyleDeclaration.js +4 -4
  392. package/lib/css/declaration/AbstractCSSStyleDeclaration.js.map +1 -1
  393. package/lib/css/declaration/element-style/CSSStyleDeclarationElementStyle.d.ts.map +1 -1
  394. package/lib/css/declaration/element-style/CSSStyleDeclarationElementStyle.js +6 -5
  395. package/lib/css/declaration/element-style/CSSStyleDeclarationElementStyle.js.map +1 -1
  396. package/lib/css/declaration/measurement-converter/CSSMeasurementConverter.d.ts +2 -2
  397. package/lib/css/declaration/measurement-converter/CSSMeasurementConverter.d.ts.map +1 -1
  398. package/lib/css/declaration/measurement-converter/CSSMeasurementConverter.js +5 -5
  399. package/lib/css/declaration/measurement-converter/CSSMeasurementConverter.js.map +1 -1
  400. package/lib/custom-element/CustomElementRegistry.d.ts +2 -3
  401. package/lib/custom-element/CustomElementRegistry.d.ts.map +1 -1
  402. package/lib/custom-element/CustomElementRegistry.js +37 -17
  403. package/lib/custom-element/CustomElementRegistry.js.map +1 -1
  404. package/lib/dom-implementation/DOMImplementation.d.ts +7 -3
  405. package/lib/dom-implementation/DOMImplementation.d.ts.map +1 -1
  406. package/lib/dom-implementation/DOMImplementation.js +12 -7
  407. package/lib/dom-implementation/DOMImplementation.js.map +1 -1
  408. package/lib/dom-parser/DOMParser.d.ts +2 -6
  409. package/lib/dom-parser/DOMParser.d.ts.map +1 -1
  410. package/lib/dom-parser/DOMParser.js +6 -15
  411. package/lib/dom-parser/DOMParser.js.map +1 -1
  412. package/lib/event/Event.d.ts +49 -7
  413. package/lib/event/Event.d.ts.map +1 -1
  414. package/lib/event/Event.js +76 -18
  415. package/lib/event/Event.js.map +1 -1
  416. package/lib/event/EventTarget.d.ts +12 -8
  417. package/lib/event/EventTarget.d.ts.map +1 -1
  418. package/lib/event/EventTarget.js +153 -141
  419. package/lib/event/EventTarget.js.map +1 -1
  420. package/lib/event/MessagePort.d.ts +1 -2
  421. package/lib/event/MessagePort.d.ts.map +1 -1
  422. package/lib/event/MessagePort.js.map +1 -1
  423. package/lib/event/TEventListener.d.ts +5 -0
  424. package/lib/event/TEventListener.d.ts.map +1 -0
  425. package/lib/event/TEventListener.js +2 -0
  426. package/lib/event/TEventListener.js.map +1 -0
  427. package/lib/event/TEventListenerFunction.d.ts +4 -0
  428. package/lib/event/TEventListenerFunction.d.ts.map +1 -0
  429. package/lib/event/TEventListenerFunction.js +2 -0
  430. package/lib/event/TEventListenerFunction.js.map +1 -0
  431. package/lib/event/TEventListenerObject.d.ts +6 -0
  432. package/lib/event/TEventListenerObject.d.ts.map +1 -0
  433. package/lib/event/TEventListenerObject.js +2 -0
  434. package/lib/event/TEventListenerObject.js.map +1 -0
  435. package/lib/event/events/CustomEvent.d.ts +8 -1
  436. package/lib/event/events/CustomEvent.d.ts.map +1 -1
  437. package/lib/event/events/CustomEvent.js +15 -6
  438. package/lib/event/events/CustomEvent.js.map +1 -1
  439. package/lib/event/events/IErrorEventInit.d.ts.map +1 -1
  440. package/lib/event/events/IMessageEventInit.d.ts +2 -2
  441. package/lib/event/events/IMessageEventInit.d.ts.map +1 -1
  442. package/lib/event/events/MessageEvent.d.ts +2 -2
  443. package/lib/event/events/MessageEvent.d.ts.map +1 -1
  444. package/lib/event/events/MessageEvent.js.map +1 -1
  445. package/lib/fetch/AbortController.d.ts +3 -4
  446. package/lib/fetch/AbortController.d.ts.map +1 -1
  447. package/lib/fetch/AbortController.js +2 -8
  448. package/lib/fetch/AbortController.js.map +1 -1
  449. package/lib/fetch/AbortSignal.d.ts +7 -0
  450. package/lib/fetch/AbortSignal.d.ts.map +1 -1
  451. package/lib/fetch/AbortSignal.js +14 -4
  452. package/lib/fetch/AbortSignal.js.map +1 -1
  453. package/lib/fetch/Fetch.d.ts.map +1 -1
  454. package/lib/fetch/Fetch.js +24 -14
  455. package/lib/fetch/Fetch.js.map +1 -1
  456. package/lib/fetch/Request.d.ts +3 -14
  457. package/lib/fetch/Request.d.ts.map +1 -1
  458. package/lib/fetch/Request.js +62 -45
  459. package/lib/fetch/Request.js.map +1 -1
  460. package/lib/fetch/ResourceFetch.d.ts.map +1 -1
  461. package/lib/fetch/ResourceFetch.js +2 -3
  462. package/lib/fetch/ResourceFetch.js.map +1 -1
  463. package/lib/fetch/Response.d.ts +3 -10
  464. package/lib/fetch/Response.d.ts.map +1 -1
  465. package/lib/fetch/Response.js +63 -40
  466. package/lib/fetch/Response.js.map +1 -1
  467. package/lib/fetch/SyncFetch.d.ts.map +1 -1
  468. package/lib/fetch/SyncFetch.js +12 -13
  469. package/lib/fetch/SyncFetch.js.map +1 -1
  470. package/lib/fetch/multipart/MultipartFormDataParser.d.ts +3 -1
  471. package/lib/fetch/multipart/MultipartFormDataParser.d.ts.map +1 -1
  472. package/lib/fetch/multipart/MultipartFormDataParser.js +12 -6
  473. package/lib/fetch/multipart/MultipartFormDataParser.js.map +1 -1
  474. package/lib/fetch/multipart/MultipartReader.d.ts +4 -1
  475. package/lib/fetch/multipart/MultipartReader.d.ts.map +1 -1
  476. package/lib/fetch/multipart/MultipartReader.js +5 -3
  477. package/lib/fetch/multipart/MultipartReader.js.map +1 -1
  478. package/lib/fetch/utilities/FetchBodyUtility.d.ts +5 -2
  479. package/lib/fetch/utilities/FetchBodyUtility.d.ts.map +1 -1
  480. package/lib/fetch/utilities/FetchBodyUtility.js +10 -5
  481. package/lib/fetch/utilities/FetchBodyUtility.js.map +1 -1
  482. package/lib/file/FileReader.d.ts +1 -4
  483. package/lib/file/FileReader.d.ts.map +1 -1
  484. package/lib/file/FileReader.js +11 -11
  485. package/lib/file/FileReader.js.map +1 -1
  486. package/lib/history/History.d.ts +2 -2
  487. package/lib/history/History.d.ts.map +1 -1
  488. package/lib/history/History.js +28 -14
  489. package/lib/history/History.js.map +1 -1
  490. package/lib/index.d.ts +2 -2
  491. package/lib/location/Location.d.ts +4 -0
  492. package/lib/location/Location.d.ts.map +1 -1
  493. package/lib/location/Location.js +43 -22
  494. package/lib/location/Location.js.map +1 -1
  495. package/lib/match-media/MediaQueryItem.d.ts +3 -3
  496. package/lib/match-media/MediaQueryItem.d.ts.map +1 -1
  497. package/lib/match-media/MediaQueryItem.js +26 -26
  498. package/lib/match-media/MediaQueryItem.js.map +1 -1
  499. package/lib/match-media/MediaQueryList.d.ts +5 -5
  500. package/lib/match-media/MediaQueryList.d.ts.map +1 -1
  501. package/lib/match-media/MediaQueryList.js +7 -7
  502. package/lib/match-media/MediaQueryList.js.map +1 -1
  503. package/lib/match-media/MediaQueryParser.d.ts +2 -2
  504. package/lib/match-media/MediaQueryParser.d.ts.map +1 -1
  505. package/lib/match-media/MediaQueryParser.js +4 -4
  506. package/lib/match-media/MediaQueryParser.js.map +1 -1
  507. package/lib/mutation-observer/MutationObserver.d.ts +3 -0
  508. package/lib/mutation-observer/MutationObserver.d.ts.map +1 -1
  509. package/lib/mutation-observer/MutationObserver.js +17 -15
  510. package/lib/mutation-observer/MutationObserver.js.map +1 -1
  511. package/lib/navigator/Navigator.d.ts +2 -2
  512. package/lib/navigator/Navigator.d.ts.map +1 -1
  513. package/lib/navigator/Navigator.js +13 -10
  514. package/lib/navigator/Navigator.js.map +1 -1
  515. package/lib/nodes/NodeFactory.js +1 -1
  516. package/lib/nodes/NodeFactory.js.map +1 -1
  517. package/lib/nodes/document/Document.d.ts +9 -16
  518. package/lib/nodes/document/Document.d.ts.map +1 -1
  519. package/lib/nodes/document/Document.js +69 -51
  520. package/lib/nodes/document/Document.js.map +1 -1
  521. package/lib/nodes/document/DocumentReadyStateManager.d.ts.map +1 -1
  522. package/lib/nodes/document/DocumentReadyStateManager.js +12 -10
  523. package/lib/nodes/document/DocumentReadyStateManager.js.map +1 -1
  524. package/lib/nodes/element/Element.d.ts +7 -3
  525. package/lib/nodes/element/Element.d.ts.map +1 -1
  526. package/lib/nodes/element/Element.js +33 -20
  527. package/lib/nodes/element/Element.js.map +1 -1
  528. package/lib/nodes/element/HTMLCollection.d.ts.map +1 -1
  529. package/lib/nodes/element/HTMLCollection.js +1 -4
  530. package/lib/nodes/element/HTMLCollection.js.map +1 -1
  531. package/lib/nodes/element/NamedNodeMap.d.ts.map +1 -1
  532. package/lib/nodes/element/NamedNodeMap.js +4 -0
  533. package/lib/nodes/element/NamedNodeMap.js.map +1 -1
  534. package/lib/nodes/element/NamedNodeMapProxyFactory.d.ts.map +1 -1
  535. package/lib/nodes/element/NamedNodeMapProxyFactory.js +0 -6
  536. package/lib/nodes/element/NamedNodeMapProxyFactory.js.map +1 -1
  537. package/lib/nodes/html-anchor-element/HTMLAnchorElement.d.ts.map +1 -1
  538. package/lib/nodes/html-anchor-element/HTMLAnchorElement.js +5 -5
  539. package/lib/nodes/html-anchor-element/HTMLAnchorElement.js.map +1 -1
  540. package/lib/nodes/html-area-element/HTMLAreaElement.d.ts.map +1 -1
  541. package/lib/nodes/html-area-element/HTMLAreaElement.js +7 -8
  542. package/lib/nodes/html-area-element/HTMLAreaElement.js.map +1 -1
  543. package/lib/nodes/html-audio-element/Audio.d.ts +4 -0
  544. package/lib/nodes/html-audio-element/Audio.d.ts.map +1 -1
  545. package/lib/nodes/html-audio-element/Audio.js +5 -0
  546. package/lib/nodes/html-audio-element/Audio.js.map +1 -1
  547. package/lib/nodes/html-button-element/HTMLButtonElement.d.ts +27 -3
  548. package/lib/nodes/html-button-element/HTMLButtonElement.d.ts.map +1 -1
  549. package/lib/nodes/html-button-element/HTMLButtonElement.js +63 -35
  550. package/lib/nodes/html-button-element/HTMLButtonElement.js.map +1 -1
  551. package/lib/nodes/html-canvas-element/HTMLCanvasElement.d.ts.map +1 -1
  552. package/lib/nodes/html-canvas-element/HTMLCanvasElement.js +2 -4
  553. package/lib/nodes/html-canvas-element/HTMLCanvasElement.js.map +1 -1
  554. package/lib/nodes/html-document/HTMLDocument.d.ts +1 -10
  555. package/lib/nodes/html-document/HTMLDocument.d.ts.map +1 -1
  556. package/lib/nodes/html-document/HTMLDocument.js +2 -6
  557. package/lib/nodes/html-document/HTMLDocument.js.map +1 -1
  558. package/lib/nodes/html-element/HTMLElement.d.ts +14 -2
  559. package/lib/nodes/html-element/HTMLElement.d.ts.map +1 -1
  560. package/lib/nodes/html-element/HTMLElement.js +130 -89
  561. package/lib/nodes/html-element/HTMLElement.js.map +1 -1
  562. package/lib/nodes/html-form-element/HTMLFormElement.d.ts +1 -3
  563. package/lib/nodes/html-form-element/HTMLFormElement.d.ts.map +1 -1
  564. package/lib/nodes/html-form-element/HTMLFormElement.js +6 -7
  565. package/lib/nodes/html-form-element/HTMLFormElement.js.map +1 -1
  566. package/lib/nodes/html-iframe-element/HTMLIFrameElement.d.ts +0 -6
  567. package/lib/nodes/html-iframe-element/HTMLIFrameElement.d.ts.map +1 -1
  568. package/lib/nodes/html-iframe-element/HTMLIFrameElement.js +30 -38
  569. package/lib/nodes/html-iframe-element/HTMLIFrameElement.js.map +1 -1
  570. package/lib/nodes/html-image-element/Image.d.ts +4 -0
  571. package/lib/nodes/html-image-element/Image.d.ts.map +1 -1
  572. package/lib/nodes/html-image-element/Image.js +5 -0
  573. package/lib/nodes/html-image-element/Image.js.map +1 -1
  574. package/lib/nodes/html-input-element/HTMLInputElement.d.ts +25 -0
  575. package/lib/nodes/html-input-element/HTMLInputElement.d.ts.map +1 -1
  576. package/lib/nodes/html-input-element/HTMLInputElement.js +88 -56
  577. package/lib/nodes/html-input-element/HTMLInputElement.js.map +1 -1
  578. package/lib/nodes/html-label-element/HTMLLabelElement.d.ts +8 -1
  579. package/lib/nodes/html-label-element/HTMLLabelElement.d.ts.map +1 -1
  580. package/lib/nodes/html-label-element/HTMLLabelElement.js +4 -3
  581. package/lib/nodes/html-label-element/HTMLLabelElement.js.map +1 -1
  582. package/lib/nodes/html-link-element/HTMLLinkElement.d.ts +0 -6
  583. package/lib/nodes/html-link-element/HTMLLinkElement.d.ts.map +1 -1
  584. package/lib/nodes/html-link-element/HTMLLinkElement.js +10 -16
  585. package/lib/nodes/html-link-element/HTMLLinkElement.js.map +1 -1
  586. package/lib/nodes/html-media-element/HTMLMediaElement.d.ts.map +1 -1
  587. package/lib/nodes/html-media-element/HTMLMediaElement.js +12 -16
  588. package/lib/nodes/html-media-element/HTMLMediaElement.js.map +1 -1
  589. package/lib/nodes/html-media-element/MediaStream.d.ts.map +1 -1
  590. package/lib/nodes/html-media-element/MediaStream.js +3 -0
  591. package/lib/nodes/html-media-element/MediaStream.js.map +1 -1
  592. package/lib/nodes/html-media-element/MediaStreamTrack.d.ts.map +1 -1
  593. package/lib/nodes/html-media-element/MediaStreamTrack.js +3 -0
  594. package/lib/nodes/html-media-element/MediaStreamTrack.js.map +1 -1
  595. package/lib/nodes/html-media-element/TextTrack.d.ts.map +1 -1
  596. package/lib/nodes/html-media-element/TextTrack.js +3 -0
  597. package/lib/nodes/html-media-element/TextTrack.js.map +1 -1
  598. package/lib/nodes/html-media-element/TextTrackCue.d.ts.map +1 -1
  599. package/lib/nodes/html-media-element/TextTrackCue.js +3 -0
  600. package/lib/nodes/html-media-element/TextTrackCue.js.map +1 -1
  601. package/lib/nodes/html-media-element/VTTCue.d.ts +1 -4
  602. package/lib/nodes/html-media-element/VTTCue.d.ts.map +1 -1
  603. package/lib/nodes/html-media-element/VTTCue.js +7 -8
  604. package/lib/nodes/html-media-element/VTTCue.js.map +1 -1
  605. package/lib/nodes/html-meter-element/HTMLMeterElement.d.ts.map +1 -1
  606. package/lib/nodes/html-meter-element/HTMLMeterElement.js +7 -6
  607. package/lib/nodes/html-meter-element/HTMLMeterElement.js.map +1 -1
  608. package/lib/nodes/html-progress-element/HTMLProgressElement.d.ts.map +1 -1
  609. package/lib/nodes/html-progress-element/HTMLProgressElement.js +3 -2
  610. package/lib/nodes/html-progress-element/HTMLProgressElement.js.map +1 -1
  611. package/lib/nodes/html-script-element/HTMLScriptElement.d.ts +0 -6
  612. package/lib/nodes/html-script-element/HTMLScriptElement.d.ts.map +1 -1
  613. package/lib/nodes/html-script-element/HTMLScriptElement.js +21 -27
  614. package/lib/nodes/html-script-element/HTMLScriptElement.js.map +1 -1
  615. package/lib/nodes/html-select-element/HTMLSelectElement.d.ts.map +1 -1
  616. package/lib/nodes/html-select-element/HTMLSelectElement.js +5 -5
  617. package/lib/nodes/html-select-element/HTMLSelectElement.js.map +1 -1
  618. package/lib/nodes/html-table-element/HTMLTableElement.d.ts.map +1 -1
  619. package/lib/nodes/html-table-element/HTMLTableElement.js +8 -9
  620. package/lib/nodes/html-table-element/HTMLTableElement.js.map +1 -1
  621. package/lib/nodes/html-table-row-element/HTMLTableRowElement.d.ts.map +1 -1
  622. package/lib/nodes/html-table-row-element/HTMLTableRowElement.js +5 -6
  623. package/lib/nodes/html-table-row-element/HTMLTableRowElement.js.map +1 -1
  624. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.d.ts.map +1 -1
  625. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js +1 -2
  626. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js.map +1 -1
  627. package/lib/nodes/html-track-element/HTMLTrackElement.js +1 -2
  628. package/lib/nodes/html-track-element/HTMLTrackElement.js.map +1 -1
  629. package/lib/nodes/node/Node.d.ts +1 -2
  630. package/lib/nodes/node/Node.d.ts.map +1 -1
  631. package/lib/nodes/node/Node.js +23 -22
  632. package/lib/nodes/node/Node.js.map +1 -1
  633. package/lib/nodes/node/NodeList.d.ts.map +1 -1
  634. package/lib/nodes/node/NodeList.js +4 -6
  635. package/lib/nodes/node/NodeList.js.map +1 -1
  636. package/lib/nodes/text/Text.d.ts.map +1 -1
  637. package/lib/nodes/text/Text.js +1 -2
  638. package/lib/nodes/text/Text.js.map +1 -1
  639. package/lib/permissions/Permissions.d.ts +7 -0
  640. package/lib/permissions/Permissions.d.ts.map +1 -1
  641. package/lib/permissions/Permissions.js +13 -2
  642. package/lib/permissions/Permissions.js.map +1 -1
  643. package/lib/query-selector/QuerySelector.d.ts.map +1 -1
  644. package/lib/query-selector/QuerySelector.js +12 -10
  645. package/lib/query-selector/QuerySelector.js.map +1 -1
  646. package/lib/range/Range.d.ts +2 -2
  647. package/lib/range/Range.d.ts.map +1 -1
  648. package/lib/range/Range.js +26 -23
  649. package/lib/range/Range.js.map +1 -1
  650. package/lib/selection/Selection.d.ts.map +1 -1
  651. package/lib/selection/Selection.js +16 -17
  652. package/lib/selection/Selection.js.map +1 -1
  653. package/lib/window/BrowserWindow.d.ts +115 -117
  654. package/lib/window/BrowserWindow.d.ts.map +1 -1
  655. package/lib/window/BrowserWindow.js +140 -270
  656. package/lib/window/BrowserWindow.js.map +1 -1
  657. package/lib/window/VMGlobalPropertyScript.d.ts.map +1 -1
  658. package/lib/window/VMGlobalPropertyScript.js +0 -1
  659. package/lib/window/VMGlobalPropertyScript.js.map +1 -1
  660. package/lib/window/WindowBrowserContext.d.ts +75 -0
  661. package/lib/window/WindowBrowserContext.d.ts.map +1 -0
  662. package/lib/window/WindowBrowserContext.js +91 -0
  663. package/lib/window/WindowBrowserContext.js.map +1 -0
  664. package/lib/window/WindowClassExtender.d.ts +15 -0
  665. package/lib/window/WindowClassExtender.d.ts.map +1 -0
  666. package/lib/window/WindowClassExtender.js +303 -0
  667. package/lib/window/WindowClassExtender.js.map +1 -0
  668. package/lib/window/WindowPageOpenUtility.d.ts.map +1 -1
  669. package/lib/window/WindowPageOpenUtility.js +11 -1
  670. package/lib/window/WindowPageOpenUtility.js.map +1 -1
  671. package/lib/xml-http-request/XMLHttpRequest.d.ts +2 -11
  672. package/lib/xml-http-request/XMLHttpRequest.d.ts.map +1 -1
  673. package/lib/xml-http-request/XMLHttpRequest.js +33 -33
  674. package/lib/xml-http-request/XMLHttpRequest.js.map +1 -1
  675. package/package.json +1 -1
  676. package/src/ClassMethodBinder.ts +10 -7
  677. package/src/PropertySymbol.ts +15 -4
  678. package/src/async-task-manager/AsyncTaskManager.ts +71 -39
  679. package/src/browser/Browser.ts +7 -0
  680. package/src/browser/BrowserFrame.ts +3 -7
  681. package/src/browser/DefaultBrowserSettings.ts +2 -1
  682. package/src/browser/detached-browser/DetachedBrowser.ts +7 -0
  683. package/src/browser/detached-browser/DetachedBrowserFrame.ts +3 -7
  684. package/src/browser/types/IBrowser.ts +3 -0
  685. package/src/browser/types/IBrowserFrame.ts +0 -3
  686. package/src/browser/types/IBrowserSettings.ts +1 -0
  687. package/src/browser/utilities/BrowserExceptionObserver.ts +125 -0
  688. package/src/browser/utilities/BrowserFrameFactory.ts +29 -33
  689. package/src/browser/utilities/BrowserFrameNavigator.ts +60 -38
  690. package/src/clipboard/Clipboard.ts +20 -14
  691. package/src/css/declaration/AbstractCSSStyleDeclaration.ts +4 -4
  692. package/src/css/declaration/element-style/CSSStyleDeclarationElementStyle.ts +6 -7
  693. package/src/css/declaration/measurement-converter/CSSMeasurementConverter.ts +6 -8
  694. package/src/custom-element/CustomElementRegistry.ts +45 -17
  695. package/src/dom-implementation/DOMImplementation.ts +15 -10
  696. package/src/dom-parser/DOMParser.ts +11 -16
  697. package/src/event/Event.ts +85 -18
  698. package/src/event/EventTarget.ts +200 -185
  699. package/src/event/MessagePort.ts +1 -2
  700. package/src/event/TEventListener.ts +6 -0
  701. package/src/event/TEventListenerFunction.ts +5 -0
  702. package/src/event/TEventListenerObject.ts +7 -0
  703. package/src/event/events/CustomEvent.ts +16 -6
  704. package/src/event/events/IErrorEventInit.ts +0 -1
  705. package/src/event/events/IMessageEventInit.ts +2 -2
  706. package/src/event/events/MessageEvent.ts +2 -2
  707. package/src/fetch/AbortController.ts +5 -7
  708. package/src/fetch/AbortSignal.ts +30 -4
  709. package/src/fetch/Fetch.ts +44 -16
  710. package/src/fetch/Request.ts +83 -55
  711. package/src/fetch/ResourceFetch.ts +2 -3
  712. package/src/fetch/Response.ts +80 -45
  713. package/src/fetch/SyncFetch.ts +20 -14
  714. package/src/fetch/multipart/MultipartFormDataParser.ts +16 -5
  715. package/src/fetch/multipart/MultipartReader.ts +6 -3
  716. package/src/fetch/utilities/FetchBodyUtility.ts +23 -8
  717. package/src/file/FileReader.ts +16 -12
  718. package/src/history/History.ts +31 -14
  719. package/src/index.ts +2 -2
  720. package/src/location/Location.ts +46 -22
  721. package/src/match-media/MediaQueryItem.ts +27 -30
  722. package/src/match-media/MediaQueryList.ts +11 -21
  723. package/src/match-media/MediaQueryParser.ts +5 -5
  724. package/src/mutation-observer/MutationObserver.ts +25 -17
  725. package/src/navigator/Navigator.ts +14 -12
  726. package/src/nodes/NodeFactory.ts +1 -1
  727. package/src/nodes/document/Document.ts +67 -62
  728. package/src/nodes/document/DocumentReadyStateManager.ts +13 -10
  729. package/src/nodes/element/Element.ts +44 -29
  730. package/src/nodes/element/HTMLCollection.ts +1 -4
  731. package/src/nodes/element/NamedNodeMap.ts +4 -0
  732. package/src/nodes/element/NamedNodeMapProxyFactory.ts +0 -6
  733. package/src/nodes/html-anchor-element/HTMLAnchorElement.ts +4 -8
  734. package/src/nodes/html-area-element/HTMLAreaElement.ts +7 -11
  735. package/src/nodes/html-audio-element/Audio.ts +6 -0
  736. package/src/nodes/html-button-element/HTMLButtonElement.ts +67 -37
  737. package/src/nodes/html-canvas-element/HTMLCanvasElement.ts +5 -3
  738. package/src/nodes/html-document/HTMLDocument.ts +2 -8
  739. package/src/nodes/html-element/HTMLElement.ts +151 -129
  740. package/src/nodes/html-form-element/HTMLFormElement.ts +7 -9
  741. package/src/nodes/html-iframe-element/HTMLIFrameElement.ts +31 -42
  742. package/src/nodes/html-image-element/Image.ts +6 -0
  743. package/src/nodes/html-input-element/HTMLInputElement.ts +96 -61
  744. package/src/nodes/html-label-element/HTMLLabelElement.ts +21 -6
  745. package/src/nodes/html-link-element/HTMLLinkElement.ts +12 -19
  746. package/src/nodes/html-media-element/HTMLMediaElement.ts +15 -12
  747. package/src/nodes/html-media-element/MediaStream.ts +6 -0
  748. package/src/nodes/html-media-element/MediaStreamTrack.ts +6 -0
  749. package/src/nodes/html-media-element/TextTrack.ts +6 -0
  750. package/src/nodes/html-media-element/TextTrackCue.ts +6 -0
  751. package/src/nodes/html-media-element/VTTCue.ts +10 -9
  752. package/src/nodes/html-meter-element/HTMLMeterElement.ts +8 -6
  753. package/src/nodes/html-progress-element/HTMLProgressElement.ts +4 -2
  754. package/src/nodes/html-script-element/HTMLScriptElement.ts +25 -45
  755. package/src/nodes/html-select-element/HTMLSelectElement.ts +6 -5
  756. package/src/nodes/html-table-element/HTMLTableElement.ts +8 -9
  757. package/src/nodes/html-table-row-element/HTMLTableRowElement.ts +5 -6
  758. package/src/nodes/html-text-area-element/HTMLTextAreaElement.ts +1 -2
  759. package/src/nodes/html-track-element/HTMLTrackElement.ts +1 -1
  760. package/src/nodes/node/Node.ts +28 -26
  761. package/src/nodes/node/NodeList.ts +10 -11
  762. package/src/nodes/text/Text.ts +1 -2
  763. package/src/permissions/Permissions.ts +17 -1
  764. package/src/query-selector/QuerySelector.ts +15 -10
  765. package/src/range/Range.ts +39 -23
  766. package/src/selection/Selection.ts +27 -17
  767. package/src/window/BrowserWindow.ts +308 -335
  768. package/src/window/VMGlobalPropertyScript.ts +0 -1
  769. package/src/window/WindowBrowserContext.ts +114 -0
  770. package/src/window/WindowClassExtender.ts +306 -0
  771. package/src/window/WindowPageOpenUtility.ts +11 -1
  772. package/src/xml-http-request/XMLHttpRequest.ts +39 -36
  773. package/cjs/browser/utilities/BrowserFrameExceptionObserver.cjs +0 -80
  774. package/cjs/browser/utilities/BrowserFrameExceptionObserver.cjs.map +0 -1
  775. package/cjs/browser/utilities/BrowserFrameExceptionObserver.d.ts.map +0 -1
  776. package/cjs/event/IEventListener.cjs.map +0 -1
  777. package/cjs/event/IEventListener.d.ts +0 -13
  778. package/cjs/event/IEventListener.d.ts.map +0 -1
  779. package/cjs/event/IMessagePort.cjs.map +0 -1
  780. package/cjs/event/IMessagePort.d.ts +0 -24
  781. package/cjs/event/IMessagePort.d.ts.map +0 -1
  782. package/cjs/window/WindowBrowserSettingsReader.cjs +0 -72
  783. package/cjs/window/WindowBrowserSettingsReader.cjs.map +0 -1
  784. package/cjs/window/WindowBrowserSettingsReader.d.ts +0 -29
  785. package/cjs/window/WindowBrowserSettingsReader.d.ts.map +0 -1
  786. package/lib/browser/utilities/BrowserFrameExceptionObserver.d.ts.map +0 -1
  787. package/lib/browser/utilities/BrowserFrameExceptionObserver.js +0 -77
  788. package/lib/browser/utilities/BrowserFrameExceptionObserver.js.map +0 -1
  789. package/lib/event/IEventListener.d.ts +0 -13
  790. package/lib/event/IEventListener.d.ts.map +0 -1
  791. package/lib/event/IEventListener.js +0 -2
  792. package/lib/event/IEventListener.js.map +0 -1
  793. package/lib/event/IMessagePort.d.ts +0 -24
  794. package/lib/event/IMessagePort.d.ts.map +0 -1
  795. package/lib/event/IMessagePort.js +0 -2
  796. package/lib/event/IMessagePort.js.map +0 -1
  797. package/lib/window/WindowBrowserSettingsReader.d.ts +0 -29
  798. package/lib/window/WindowBrowserSettingsReader.d.ts.map +0 -1
  799. package/lib/window/WindowBrowserSettingsReader.js +0 -46
  800. package/lib/window/WindowBrowserSettingsReader.js.map +0 -1
  801. package/src/browser/utilities/BrowserFrameExceptionObserver.ts +0 -111
  802. package/src/event/IEventListener.ts +0 -13
  803. package/src/event/IMessagePort.ts +0 -26
  804. package/src/window/WindowBrowserSettingsReader.ts +0 -55
@@ -0,0 +1,125 @@
1
+ import BrowserWindow from '../../window/BrowserWindow.js';
2
+
3
+ /**
4
+ * Listens for uncaught exceptions coming from Happy DOM on the running Node process and dispatches error events on the Window instance.
5
+ */
6
+ export default class BrowserExceptionObserver {
7
+ private static listenerCount = 0;
8
+ private observedWindows: BrowserWindow[] = [];
9
+ private uncaughtExceptionListener: (
10
+ error: Error,
11
+ origin: 'uncaughtException' | 'unhandledRejection'
12
+ ) => void | null;
13
+ private uncaughtRejectionListener: (error: Error) => void | null;
14
+
15
+ /**
16
+ * Observes the Node process for uncaught exceptions.
17
+ *
18
+ * @param window Browser window.
19
+ */
20
+ public observe(window: BrowserWindow): void {
21
+ if (this.observedWindows.includes(window)) {
22
+ throw new Error('Browser window is already being observed.');
23
+ }
24
+
25
+ this.observedWindows.push(window);
26
+
27
+ if (this.uncaughtExceptionListener) {
28
+ return;
29
+ }
30
+
31
+ this.uncaughtExceptionListener = (
32
+ error: unknown,
33
+ origin: 'uncaughtException' | 'unhandledRejection'
34
+ ): void => {
35
+ if (origin === 'unhandledRejection') {
36
+ return;
37
+ }
38
+
39
+ let targetWindow: BrowserWindow | null = null;
40
+
41
+ for (const window of this.observedWindows) {
42
+ if (error instanceof window.Error || error instanceof window.DOMException) {
43
+ targetWindow = window;
44
+ break;
45
+ }
46
+ }
47
+
48
+ if (targetWindow) {
49
+ targetWindow.console.error(error);
50
+ targetWindow.dispatchEvent(
51
+ new targetWindow.ErrorEvent('error', {
52
+ error: <Error>error,
53
+ message: (<Error>error).message
54
+ })
55
+ );
56
+ } else if (
57
+ process.listenerCount('uncaughtException') ===
58
+ (<typeof BrowserExceptionObserver>this.constructor).listenerCount
59
+ ) {
60
+ // eslint-disable-next-line no-console
61
+ console.error(error);
62
+ // Exit if there are no other listeners handling the error.
63
+ process.exit(1);
64
+ }
65
+ };
66
+
67
+ // The "uncaughtException" event is not always triggered for unhandled rejections.
68
+ // Therefore we want to use the "unhandledRejection" event as well.
69
+ this.uncaughtRejectionListener = (error: unknown): void => {
70
+ let targetWindow: BrowserWindow | null = null;
71
+
72
+ for (const window of this.observedWindows) {
73
+ if (error instanceof window.Error || error instanceof window.DOMException) {
74
+ targetWindow = window;
75
+ break;
76
+ }
77
+ }
78
+
79
+ if (targetWindow) {
80
+ targetWindow.console.error(error);
81
+ targetWindow.dispatchEvent(
82
+ new targetWindow.ErrorEvent('error', {
83
+ error: <Error>error,
84
+ message: (<Error>error).message
85
+ })
86
+ );
87
+ } else if (
88
+ process.listenerCount('unhandledRejection') ===
89
+ (<typeof BrowserExceptionObserver>this.constructor).listenerCount
90
+ ) {
91
+ // eslint-disable-next-line no-console
92
+ console.error(error);
93
+ // Exit if there are no other listeners handling the error.
94
+ process.exit(1);
95
+ }
96
+ };
97
+
98
+ (<typeof BrowserExceptionObserver>this.constructor).listenerCount++;
99
+ process.on('uncaughtException', this.uncaughtExceptionListener);
100
+ process.on('unhandledRejection', this.uncaughtRejectionListener);
101
+ }
102
+
103
+ /**
104
+ * Disconnects observer.
105
+ *
106
+ * @param window Browser window.
107
+ */
108
+ public disconnect(window: BrowserWindow): void {
109
+ const index = this.observedWindows.indexOf(window);
110
+
111
+ if (index === -1) {
112
+ return;
113
+ }
114
+
115
+ this.observedWindows.splice(index, 1);
116
+
117
+ if (this.observedWindows.length === 0 && this.uncaughtExceptionListener) {
118
+ (<typeof BrowserExceptionObserver>this.constructor).listenerCount--;
119
+ process.off('uncaughtException', this.uncaughtExceptionListener);
120
+ process.off('unhandledRejection', this.uncaughtRejectionListener);
121
+ this.uncaughtExceptionListener = null;
122
+ this.uncaughtRejectionListener = null;
123
+ }
124
+ }
125
+ }
@@ -2,6 +2,7 @@ import IBrowserFrame from '../types/IBrowserFrame.js';
2
2
  import * as PropertySymbol from '../../PropertySymbol.js';
3
3
  import BrowserWindow from '../../window/BrowserWindow.js';
4
4
  import IBrowserPage from '../types/IBrowserPage.js';
5
+
5
6
  /**
6
7
  * Browser frame factory.
7
8
  */
@@ -27,7 +28,9 @@ export default class BrowserFrameFactory {
27
28
  * @param frame Frame.
28
29
  */
29
30
  public static destroyFrame(frame: IBrowserFrame): Promise<void> {
30
- // Using Promise instead of async/await to prevent microtask
31
+ const exceptionObserver = frame.page?.context?.browser?.[PropertySymbol.exceptionObserver];
32
+
33
+ // Using Promise instead of async/await to prevent usage of a microtask
31
34
  return new Promise((resolve, reject) => {
32
35
  if (!frame.window) {
33
36
  resolve();
@@ -42,54 +45,47 @@ export default class BrowserFrameFactory {
42
45
  }
43
46
 
44
47
  if (!frame.childFrames.length) {
45
- if (frame.window && frame.window[PropertySymbol.mutationObservers]) {
46
- for (const mutationObserver of frame.window[PropertySymbol.mutationObservers]) {
47
- mutationObserver.disconnect();
48
- }
49
- frame.window[PropertySymbol.mutationObservers] = [];
50
- }
51
- return frame[PropertySymbol.asyncTaskManager]
48
+ frame[PropertySymbol.asyncTaskManager]
52
49
  .destroy()
53
50
  .then(() => {
54
- frame[PropertySymbol.exceptionObserver]?.disconnect();
55
- if (frame.window) {
56
- frame.window[PropertySymbol.destroy]();
57
- (<IBrowserPage | null>frame.page) = null;
58
- (<BrowserWindow | null>frame.window) = null;
59
- frame[PropertySymbol.openerFrame] = null;
60
- frame[PropertySymbol.openerWindow] = null;
51
+ if (exceptionObserver && frame.window) {
52
+ exceptionObserver.disconnect(frame.window);
61
53
  }
54
+
55
+ (<IBrowserPage | null>frame.page) = null;
56
+ (<BrowserWindow | null>frame.window) = null;
57
+ frame[PropertySymbol.openerFrame] = null;
58
+ frame[PropertySymbol.openerWindow] = null;
59
+
62
60
  resolve();
63
61
  })
64
62
  .catch((error) => reject(error));
63
+ if (frame.window) {
64
+ frame.window[PropertySymbol.destroy]();
65
+ }
66
+ return;
65
67
  }
66
68
 
67
69
  Promise.all(frame.childFrames.slice().map((childFrame) => this.destroyFrame(childFrame)))
68
70
  .then(() => {
69
- if (frame.window && frame.window[PropertySymbol.mutationObservers]) {
70
- for (const mutationObserver of frame.window[PropertySymbol.mutationObservers]) {
71
- mutationObserver.disconnect();
72
- }
73
- frame.window[PropertySymbol.mutationObservers] = [];
74
- }
75
- return frame[PropertySymbol.asyncTaskManager].destroy().then(() => {
76
- frame[PropertySymbol.exceptionObserver]?.disconnect();
77
- if (frame.window) {
78
- const listeners = frame[PropertySymbol.listeners];
71
+ frame[PropertySymbol.asyncTaskManager]
72
+ .destroy()
73
+ .then(() => {
74
+ if (exceptionObserver && frame.window) {
75
+ exceptionObserver.disconnect(frame.window);
76
+ }
79
77
 
80
- frame.window[PropertySymbol.destroy]();
81
78
  (<IBrowserPage | null>frame.page) = null;
82
79
  (<BrowserWindow | null>frame.window) = null;
83
- frame[PropertySymbol.listeners] = null;
84
80
  frame[PropertySymbol.openerFrame] = null;
85
81
  frame[PropertySymbol.openerWindow] = null;
86
82
 
87
- for (const listener of listeners.navigation) {
88
- listener();
89
- }
90
- }
91
- resolve();
92
- });
83
+ resolve();
84
+ })
85
+ .catch((error) => reject(error));
86
+ if (frame.window) {
87
+ frame.window[PropertySymbol.destroy]();
88
+ }
93
89
  })
94
90
  .catch((error) => reject(error));
95
91
  });
@@ -4,13 +4,10 @@ import IGoToOptions from '../types/IGoToOptions.js';
4
4
  import Response from '../../fetch/Response.js';
5
5
  import DocumentReadyStateManager from '../../nodes/document/DocumentReadyStateManager.js';
6
6
  import BrowserWindow from '../../window/BrowserWindow.js';
7
- import WindowErrorUtility from '../../window/WindowErrorUtility.js';
8
- import AbortController from '../../fetch/AbortController.js';
9
7
  import BrowserFrameFactory from './BrowserFrameFactory.js';
10
8
  import BrowserFrameURL from './BrowserFrameURL.js';
11
9
  import BrowserFrameValidator from './BrowserFrameValidator.js';
12
10
  import AsyncTaskManager from '../../async-task-manager/AsyncTaskManager.js';
13
- import BrowserErrorCaptureEnum from '../enums/BrowserErrorCaptureEnum.js';
14
11
  import FormData from '../../form-data/FormData.js';
15
12
  import HistoryScrollRestorationEnum from '../../history/HistoryScrollRestorationEnum.js';
16
13
  import IHistoryItem from '../../history/IHistoryItem.js';
@@ -46,6 +43,7 @@ export default class BrowserFrameNavigator {
46
43
  disableHistory?: boolean;
47
44
  }): Promise<Response | null> {
48
45
  const { windowClass, frame, url, formData, method, goToOptions, disableHistory } = options;
46
+ const exceptionObserver = frame.page.context.browser[PropertySymbol.exceptionObserver];
49
47
  const referrer = goToOptions?.referrer || frame.window.location.origin;
50
48
  const targetURL = BrowserFrameURL.getRelativeURL(frame, url);
51
49
  const resolveNavigationListeners = (): void => {
@@ -60,6 +58,7 @@ export default class BrowserFrameNavigator {
60
58
  throw new Error('The frame has been destroyed, the "window" property is not set.');
61
59
  }
62
60
 
61
+ // Javascript protocol
63
62
  if (targetURL.protocol === 'javascript:') {
64
63
  if (frame && !frame.page.context.browser.settings.disableJavaScriptEvaluation) {
65
64
  const readyStateManager = (<
@@ -67,30 +66,26 @@ export default class BrowserFrameNavigator {
67
66
  >(<unknown>frame.window))[PropertySymbol.readyStateManager];
68
67
 
69
68
  readyStateManager.startTask();
70
-
71
- // The browser will wait for the next tick before executing the script.
72
- await new Promise((resolve) => frame.page.mainFrame.window.setTimeout(resolve));
73
-
74
69
  const code =
75
70
  '//# sourceURL=' + frame.url + '\n' + targetURL.href.replace('javascript:', '');
76
71
 
77
- if (
78
- frame.page.context.browser.settings.disableErrorCapturing ||
79
- frame.page.context.browser.settings.errorCapture !== BrowserErrorCaptureEnum.tryAndCatch
80
- ) {
81
- frame.window.eval(code);
82
- } else {
83
- WindowErrorUtility.captureError(frame.window, () => frame.window.eval(code));
84
- }
72
+ // The browser will wait for the next tick before executing the script.
73
+ // Fixes issue where evaluating the response can throw an error.
74
+ // By using requestAnimationFrame() the error will not reject the promise.
75
+ // The error will be caught by process error level listener or a try and catch in the requestAnimationFrame().
76
+ frame.window.requestAnimationFrame(() => frame.window.eval(code));
85
77
 
86
- readyStateManager.endTask();
78
+ // We need to wait for the next tick before resolving navigation listeners and ending the ready state task.
79
+ await new Promise((resolve) => frame.window.setTimeout(() => resolve(null)));
87
80
 
81
+ readyStateManager.endTask();
88
82
  resolveNavigationListeners();
89
83
  }
90
84
 
91
85
  return null;
92
86
  }
93
87
 
88
+ // Validate navigation
94
89
  if (!BrowserFrameValidator.validateCrossOriginPolicy(frame, targetURL)) {
95
90
  return null;
96
91
  }
@@ -103,16 +98,6 @@ export default class BrowserFrameNavigator {
103
98
  return null;
104
99
  }
105
100
 
106
- const width = frame.window.innerWidth;
107
- const height = frame.window.innerHeight;
108
- const devicePixelRatio = frame.window.devicePixelRatio;
109
- const parentWindow = frame.parentFrame ? frame.parentFrame.window : frame.page.mainFrame.window;
110
- const topWindow = frame.page.mainFrame.window;
111
-
112
- for (const childFrame of frame.childFrames) {
113
- BrowserFrameFactory.destroyFrame(childFrame);
114
- }
115
-
116
101
  // History management.
117
102
  if (!disableHistory) {
118
103
  const history = frame[PropertySymbol.history];
@@ -138,36 +123,63 @@ export default class BrowserFrameNavigator {
138
123
  });
139
124
  }
140
125
 
141
- (<IBrowserFrame[]>frame.childFrames) = [];
142
- frame.window[PropertySymbol.destroy]();
143
- frame[PropertySymbol.asyncTaskManager].destroy();
144
- frame[PropertySymbol.asyncTaskManager] = new AsyncTaskManager();
126
+ // Store current Window state
127
+ const previousWindow = frame.window;
128
+ const previousAsyncTaskManager = frame[PropertySymbol.asyncTaskManager];
129
+ const width = previousWindow.innerWidth;
130
+ const height = previousWindow.innerHeight;
131
+ const devicePixelRatio = previousWindow.devicePixelRatio;
132
+ const parentWindow = frame.parentFrame ? frame.parentFrame.window : frame.page.mainFrame.window;
133
+ const topWindow = frame.page.mainFrame.window;
145
134
 
135
+ // Create new Window
136
+ frame[PropertySymbol.asyncTaskManager] = new AsyncTaskManager(frame);
146
137
  (<BrowserWindow>frame.window) = new windowClass(frame, { url: targetURL.href, width, height });
147
138
  frame.window[PropertySymbol.parent] = parentWindow;
148
139
  frame.window[PropertySymbol.top] = topWindow;
149
140
  (<number>frame.window.devicePixelRatio) = devicePixelRatio;
150
141
 
142
+ if (exceptionObserver) {
143
+ exceptionObserver.observe(frame.window);
144
+ }
145
+
151
146
  if (referrer) {
152
147
  frame.window.document[PropertySymbol.referrer] = referrer;
153
148
  }
154
149
 
150
+ // Destroy child frames and Window
151
+ const destroyTaskID = frame[PropertySymbol.asyncTaskManager].startTask();
152
+ const destroyWindowAndAsyncTaskManager = (): void => {
153
+ previousAsyncTaskManager.destroy().then(() => {
154
+ if (exceptionObserver) {
155
+ exceptionObserver.disconnect(previousWindow);
156
+ }
157
+ frame[PropertySymbol.asyncTaskManager].endTask(destroyTaskID);
158
+ });
159
+
160
+ previousWindow[PropertySymbol.destroy]();
161
+ };
162
+
163
+ if (frame.childFrames.length) {
164
+ Promise.all(
165
+ frame.childFrames.map((childFrame) => BrowserFrameFactory.destroyFrame(childFrame))
166
+ ).then(destroyWindowAndAsyncTaskManager);
167
+ } else {
168
+ destroyWindowAndAsyncTaskManager();
169
+ }
170
+
171
+ // About protocol
155
172
  if (targetURL.protocol === 'about:') {
156
173
  await new Promise((resolve) => frame.page.mainFrame.window.requestAnimationFrame(resolve));
157
174
  resolveNavigationListeners();
158
175
  return null;
159
176
  }
160
177
 
178
+ // Start navigation
161
179
  const readyStateManager = (<{ [PropertySymbol.readyStateManager]: DocumentReadyStateManager }>(
162
180
  (<unknown>frame.window)
163
181
  ))[PropertySymbol.readyStateManager];
164
-
165
- readyStateManager.startTask();
166
-
167
- const abortController = new AbortController();
168
- let response: Response;
169
- let responseText: string;
170
-
182
+ const abortController = new frame.window.AbortController();
171
183
  const timeout = frame.window.setTimeout(
172
184
  () => abortController.abort(new Error('Request timed out.')),
173
185
  goToOptions?.timeout ?? 30000
@@ -177,6 +189,10 @@ export default class BrowserFrameNavigator {
177
189
  readyStateManager.endTask();
178
190
  resolveNavigationListeners();
179
191
  };
192
+ let response: Response;
193
+ let responseText: string;
194
+
195
+ readyStateManager.startTask();
180
196
 
181
197
  try {
182
198
  response = await frame.window.fetch(targetURL.href, {
@@ -211,13 +227,19 @@ export default class BrowserFrameNavigator {
211
227
  frame.page.console.error(`GET ${targetURL.href} ${response.status} (${response.statusText})`);
212
228
  }
213
229
 
230
+ // The frame may be destroyed during teardown.
231
+ if (!frame.window) {
232
+ return;
233
+ }
234
+
214
235
  // Fixes issue where evaluating the response can throw an error.
215
236
  // By using requestAnimationFrame() the error will not reject the promise.
216
237
  // The error will be caught by process error level listener or a try and catch in the requestAnimationFrame().
217
238
  frame.window.requestAnimationFrame(() => (frame.content = responseText));
218
239
 
240
+ // Finalize the navigation
219
241
  await new Promise((resolve) =>
220
- frame.window.requestAnimationFrame(() => {
242
+ frame.window.setTimeout(() => {
221
243
  finalize();
222
244
  resolve(null);
223
245
  })
@@ -1,4 +1,3 @@
1
- import DOMException from '../exception/DOMException.js';
2
1
  import BrowserWindow from '../window/BrowserWindow.js';
3
2
  import ClipboardItem from './ClipboardItem.js';
4
3
  import Blob from '../file/Blob.js';
@@ -10,16 +9,19 @@ import Blob from '../file/Blob.js';
10
9
  * https://developer.mozilla.org/en-US/docs/Web/API/Clipboard.
11
10
  */
12
11
  export default class Clipboard {
13
- #ownerWindow: BrowserWindow;
12
+ #window: BrowserWindow;
14
13
  #data: ClipboardItem[] = [];
15
14
 
16
15
  /**
17
16
  * Constructor.
18
17
  *
19
- * @param ownerWindow Owner window.
18
+ * @param window Owner window.
20
19
  */
21
- constructor(ownerWindow: BrowserWindow) {
22
- this.#ownerWindow = ownerWindow;
20
+ constructor(window: BrowserWindow) {
21
+ if (!window) {
22
+ throw new TypeError('Illegal constructor');
23
+ }
24
+ this.#window = window;
23
25
  }
24
26
 
25
27
  /**
@@ -28,11 +30,13 @@ export default class Clipboard {
28
30
  * @returns Data.
29
31
  */
30
32
  public async read(): Promise<ClipboardItem[]> {
31
- const permissionStatus = await this.#ownerWindow.navigator.permissions.query({
33
+ const permissionStatus = await this.#window.navigator.permissions.query({
32
34
  name: 'clipboard-read'
33
35
  });
34
36
  if (permissionStatus.state === 'denied') {
35
- throw new DOMException(`Failed to execute 'read' on 'Clipboard': The request is not allowed`);
37
+ throw new this.#window.DOMException(
38
+ `Failed to execute 'read' on 'Clipboard': The request is not allowed`
39
+ );
36
40
  }
37
41
  return this.#data;
38
42
  }
@@ -43,11 +47,11 @@ export default class Clipboard {
43
47
  * @returns Text.
44
48
  */
45
49
  public async readText(): Promise<string> {
46
- const permissionStatus = await this.#ownerWindow.navigator.permissions.query({
50
+ const permissionStatus = await this.#window.navigator.permissions.query({
47
51
  name: 'clipboard-read'
48
52
  });
49
53
  if (permissionStatus.state === 'denied') {
50
- throw new DOMException(
54
+ throw new this.#window.DOMException(
51
55
  `Failed to execute 'readText' on 'Clipboard': The request is not allowed`
52
56
  );
53
57
  }
@@ -72,11 +76,11 @@ export default class Clipboard {
72
76
  * @param data Data.
73
77
  */
74
78
  public async write(data: ClipboardItem[]): Promise<void> {
75
- const permissionStatus = await this.#ownerWindow.navigator.permissions.query({
79
+ const permissionStatus = await this.#window.navigator.permissions.query({
76
80
  name: 'clipboard-write'
77
81
  });
78
82
  if (permissionStatus.state === 'denied') {
79
- throw new DOMException(
83
+ throw new this.#window.DOMException(
80
84
  `Failed to execute 'write' on 'Clipboard': The request is not allowed`
81
85
  );
82
86
  }
@@ -89,14 +93,16 @@ export default class Clipboard {
89
93
  * @param text Text.
90
94
  */
91
95
  public async writeText(text: string): Promise<void> {
92
- const permissionStatus = await this.#ownerWindow.navigator.permissions.query({
96
+ const permissionStatus = await this.#window.navigator.permissions.query({
93
97
  name: 'clipboard-write'
94
98
  });
95
99
  if (permissionStatus.state === 'denied') {
96
- throw new DOMException(
100
+ throw new this.#window.DOMException(
97
101
  `Failed to execute 'writeText' on 'Clipboard': The request is not allowed`
98
102
  );
99
103
  }
100
- this.#data = [new ClipboardItem({ 'text/plain': new Blob([text], { type: 'text/plain' }) })];
104
+ this.#data = [
105
+ new this.#window.ClipboardItem({ 'text/plain': new Blob([text], { type: 'text/plain' }) })
106
+ ];
101
107
  }
102
108
  }
@@ -1,9 +1,9 @@
1
1
  import Element from '../../nodes/element/Element.js';
2
2
  import CSSRule from '../CSSRule.js';
3
3
  import DOMExceptionNameEnum from '../../exception/DOMExceptionNameEnum.js';
4
- import DOMException from '../../exception/DOMException.js';
5
4
  import CSSStyleDeclarationElementStyle from './element-style/CSSStyleDeclarationElementStyle.js';
6
5
  import CSSStyleDeclarationPropertyManager from './property-manager/CSSStyleDeclarationPropertyManager.js';
6
+ import * as PropertySymbol from '../../PropertySymbol.js';
7
7
 
8
8
  /**
9
9
  * CSS Style Declaration.
@@ -68,7 +68,7 @@ export default abstract class AbstractCSSStyleDeclaration {
68
68
  */
69
69
  public set cssText(cssText: string) {
70
70
  if (this.#computed) {
71
- throw new DOMException(
71
+ throw new this[PropertySymbol.window].DOMException(
72
72
  `Failed to execute 'cssText' on 'CSSStyleDeclaration': These styles are computed, and the properties are therefore read-only.`,
73
73
  DOMExceptionNameEnum.domException
74
74
  );
@@ -106,7 +106,7 @@ export default abstract class AbstractCSSStyleDeclaration {
106
106
  */
107
107
  public setProperty(name: string, value: string, priority?: 'important' | '' | undefined): void {
108
108
  if (this.#computed) {
109
- throw new DOMException(
109
+ throw new this[PropertySymbol.window].DOMException(
110
110
  `Failed to execute 'setProperty' on 'CSSStyleDeclaration': These styles are computed, and therefore the '${name}' property is read-only.`,
111
111
  DOMExceptionNameEnum.domException
112
112
  );
@@ -139,7 +139,7 @@ export default abstract class AbstractCSSStyleDeclaration {
139
139
  */
140
140
  public removeProperty(name: string): void {
141
141
  if (this.#computed) {
142
- throw new DOMException(
142
+ throw new this[PropertySymbol.window].DOMException(
143
143
  `Failed to execute 'removeProperty' on 'CSSStyleDeclaration': These styles are computed, and therefore the '${name}' property is read-only.`,
144
144
  DOMExceptionNameEnum.domException
145
145
  );
@@ -17,7 +17,7 @@ import CSSStyleDeclarationCSSParser from '../css-parser/CSSStyleDeclarationCSSPa
17
17
  import QuerySelector from '../../../query-selector/QuerySelector.js';
18
18
  import CSSMeasurementConverter from '../measurement-converter/CSSMeasurementConverter.js';
19
19
  import MediaQueryList from '../../../match-media/MediaQueryList.js';
20
- import WindowBrowserSettingsReader from '../../../window/WindowBrowserSettingsReader.js';
20
+ import WindowBrowserContext from '../../../window/WindowBrowserContext.js';
21
21
 
22
22
  const CSS_MEASUREMENT_REGEXP = /[0-9.]+(px|rem|em|vw|vh|%|vmin|vmax|cm|mm|in|pt|pc|Q)/g;
23
23
  const CSS_VARIABLE_REGEXP = /var\( *(--[^), ]+)\)|var\( *(--[^), ]+), *(.+)\)/;
@@ -333,7 +333,7 @@ export default class CSSStyleDeclarationElementStyle {
333
333
  return;
334
334
  }
335
335
 
336
- const ownerWindow = this.element[PropertySymbol.ownerDocument][PropertySymbol.ownerWindow];
336
+ const window = this.element[PropertySymbol.window];
337
337
 
338
338
  for (const rule of options.cssRules) {
339
339
  if (rule.type === CSSRuleTypeEnum.styleRule) {
@@ -371,7 +371,7 @@ export default class CSSStyleDeclarationElementStyle {
371
371
  rule.type === CSSRuleTypeEnum.mediaRule &&
372
372
  // TODO: We need to send in a predfined root font size as it will otherwise be calculated using Window.getComputedStyle(), which will cause a never ending loop. Is there another solution?
373
373
  new MediaQueryList({
374
- ownerWindow,
374
+ window,
375
375
  media: (<CSSMediaRule>rule).conditionText,
376
376
  rootFontSize: this.element[PropertySymbol.tagName] === 'HTML' ? 16 : null
377
377
  }).matches
@@ -425,9 +425,8 @@ export default class CSSStyleDeclarationElementStyle {
425
425
  parentSize: string | number | null;
426
426
  }): string {
427
427
  if (
428
- WindowBrowserSettingsReader.getSettings(
429
- this.element[PropertySymbol.ownerDocument][PropertySymbol.ownerWindow]
430
- ).disableComputedStyleRendering
428
+ new WindowBrowserContext(this.element[PropertySymbol.window]).getSettings()
429
+ ?.disableComputedStyleRendering
431
430
  ) {
432
431
  return options.value;
433
432
  }
@@ -439,7 +438,7 @@ export default class CSSStyleDeclarationElementStyle {
439
438
  while ((match = regexp.exec(options.value)) !== null) {
440
439
  if (match[1] !== 'px') {
441
440
  const valueInPixels = CSSMeasurementConverter.toPixels({
442
- ownerWindow: this.element[PropertySymbol.ownerDocument][PropertySymbol.ownerWindow],
441
+ window: this.element[PropertySymbol.window],
443
442
  value: match[0],
444
443
  rootFontSize: options.rootFontSize,
445
444
  parentFontSize: options.parentFontSize,
@@ -8,7 +8,7 @@ export default class CSSMeasurementConverter {
8
8
  * Returns measurement in pixels.
9
9
  *
10
10
  * @param options Options.
11
- * @param options.ownerWindow Owner window.
11
+ * @param options.window Owner window.
12
12
  * @param options.value Measurement (e.g. "10px", "10rem" or "10em").
13
13
  * @param options.rootFontSize Root font size in pixels.
14
14
  * @param options.parentFontSize Parent font size in pixels.
@@ -16,7 +16,7 @@ export default class CSSMeasurementConverter {
16
16
  * @returns Measurement in pixels.
17
17
  */
18
18
  public static toPixels(options: {
19
- ownerWindow: BrowserWindow;
19
+ window: BrowserWindow;
20
20
  value: string;
21
21
  rootFontSize: string | number;
22
22
  parentFontSize: string | number;
@@ -37,21 +37,19 @@ export default class CSSMeasurementConverter {
37
37
  case 'em':
38
38
  return this.round(value * parseFloat(<string>options.parentFontSize));
39
39
  case 'vw':
40
- return this.round((value * options.ownerWindow.innerWidth) / 100);
40
+ return this.round((value * options.window.innerWidth) / 100);
41
41
  case 'vh':
42
- return this.round((value * options.ownerWindow.innerHeight) / 100);
42
+ return this.round((value * options.window.innerHeight) / 100);
43
43
  case '%':
44
44
  return options.parentSize !== undefined && options.parentSize !== null
45
45
  ? this.round((value * parseFloat(<string>options.parentSize)) / 100)
46
46
  : null;
47
47
  case 'vmin':
48
48
  return this.round(
49
- (value * Math.min(options.ownerWindow.innerWidth, options.ownerWindow.innerHeight)) / 100
49
+ (value * Math.min(options.window.innerWidth, options.window.innerHeight)) / 100
50
50
  );
51
51
  case 'vmax':
52
- return (
53
- (value * Math.max(options.ownerWindow.innerWidth, options.ownerWindow.innerHeight)) / 100
54
- );
52
+ return (value * Math.max(options.window.innerWidth, options.window.innerHeight)) / 100;
55
53
  case 'cm':
56
54
  return this.round(value * 37.7812);
57
55
  case 'mm':