happy-dom 13.0.0 → 13.0.1
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.
- package/cjs/PropertySymbol.cjs +4 -1
- package/cjs/PropertySymbol.cjs.map +1 -1
- package/cjs/PropertySymbol.d.ts +3 -0
- package/cjs/PropertySymbol.d.ts.map +1 -1
- package/cjs/browser/Browser.cjs +2 -3
- package/cjs/browser/Browser.cjs.map +1 -1
- package/cjs/browser/Browser.d.ts +1 -3
- package/cjs/browser/Browser.d.ts.map +1 -1
- package/cjs/browser/BrowserContext.cjs +1 -3
- package/cjs/browser/BrowserContext.cjs.map +1 -1
- package/cjs/browser/BrowserContext.d.ts +1 -3
- package/cjs/browser/BrowserContext.d.ts.map +1 -1
- package/cjs/browser/BrowserFrame.cjs +5 -3
- package/cjs/browser/BrowserFrame.cjs.map +1 -1
- package/cjs/browser/BrowserFrame.d.ts +5 -1
- package/cjs/browser/BrowserFrame.d.ts.map +1 -1
- package/cjs/browser/BrowserPage.cjs +10 -1
- package/cjs/browser/BrowserPage.cjs.map +1 -1
- package/cjs/browser/BrowserPage.d.ts +4 -2
- package/cjs/browser/BrowserPage.d.ts.map +1 -1
- package/cjs/browser/DefaultBrowserPageViewport.cjs +8 -0
- package/cjs/browser/DefaultBrowserPageViewport.cjs.map +1 -0
- package/cjs/browser/DefaultBrowserPageViewport.d.ts +4 -0
- package/cjs/browser/DefaultBrowserPageViewport.d.ts.map +1 -0
- package/cjs/browser/detached-browser/DetachedBrowser.cjs +2 -3
- package/cjs/browser/detached-browser/DetachedBrowser.cjs.map +1 -1
- package/cjs/browser/detached-browser/DetachedBrowser.d.ts +1 -3
- package/cjs/browser/detached-browser/DetachedBrowser.d.ts.map +1 -1
- package/cjs/browser/detached-browser/DetachedBrowserContext.cjs +1 -2
- package/cjs/browser/detached-browser/DetachedBrowserContext.cjs.map +1 -1
- package/cjs/browser/detached-browser/DetachedBrowserContext.d.ts +1 -2
- package/cjs/browser/detached-browser/DetachedBrowserContext.d.ts.map +1 -1
- package/cjs/browser/detached-browser/DetachedBrowserFrame.cjs +5 -3
- package/cjs/browser/detached-browser/DetachedBrowserFrame.cjs.map +1 -1
- package/cjs/browser/detached-browser/DetachedBrowserFrame.d.ts +4 -1
- package/cjs/browser/detached-browser/DetachedBrowserFrame.d.ts.map +1 -1
- package/cjs/browser/detached-browser/DetachedBrowserPage.cjs +10 -1
- package/cjs/browser/detached-browser/DetachedBrowserPage.cjs.map +1 -1
- package/cjs/browser/detached-browser/DetachedBrowserPage.d.ts +4 -2
- package/cjs/browser/detached-browser/DetachedBrowserPage.d.ts.map +1 -1
- package/cjs/browser/types/IBrowser.d.ts +1 -3
- package/cjs/browser/types/IBrowser.d.ts.map +1 -1
- package/cjs/browser/types/IBrowserContext.d.ts +1 -3
- package/cjs/browser/types/IBrowserContext.d.ts.map +1 -1
- package/cjs/browser/types/IBrowserFrame.d.ts +4 -1
- package/cjs/browser/types/IBrowserFrame.d.ts.map +1 -1
- package/cjs/browser/types/IBrowserPage.d.ts +4 -2
- package/cjs/browser/types/IBrowserPage.d.ts.map +1 -1
- package/cjs/browser/types/IBrowserPageViewport.d.ts +3 -3
- package/cjs/browser/types/IBrowserPageViewport.d.ts.map +1 -1
- package/cjs/browser/types/IOptionalBrowserPageViewport.cjs +3 -0
- package/cjs/browser/types/IOptionalBrowserPageViewport.cjs.map +1 -0
- package/cjs/browser/types/IOptionalBrowserPageViewport.d.ts +6 -0
- package/cjs/browser/types/IOptionalBrowserPageViewport.d.ts.map +1 -0
- package/cjs/browser/utilities/BrowserFrameFactory.cjs +2 -1
- package/cjs/browser/utilities/BrowserFrameFactory.cjs.map +1 -1
- package/cjs/browser/utilities/BrowserFrameFactory.d.ts.map +1 -1
- package/cjs/browser/utilities/BrowserFrameValidator.cjs +28 -4
- package/cjs/browser/utilities/BrowserFrameValidator.cjs.map +1 -1
- package/cjs/browser/utilities/BrowserFrameValidator.d.ts.map +1 -1
- package/cjs/browser/utilities/BrowserPageUtility.cjs +0 -24
- package/cjs/browser/utilities/BrowserPageUtility.cjs.map +1 -1
- package/cjs/browser/utilities/BrowserPageUtility.d.ts +0 -8
- package/cjs/browser/utilities/BrowserPageUtility.d.ts.map +1 -1
- package/cjs/index.cjs.map +1 -1
- package/cjs/index.d.ts +2 -1
- package/cjs/index.d.ts.map +1 -1
- package/cjs/version.cjs +1 -1
- package/cjs/window/BrowserWindow.cjs +147 -22
- package/cjs/window/BrowserWindow.cjs.map +1 -1
- package/cjs/window/BrowserWindow.d.ts +80 -10
- package/cjs/window/BrowserWindow.d.ts.map +1 -1
- package/cjs/window/DetachedWindowAPI.cjs.map +1 -1
- package/cjs/window/DetachedWindowAPI.d.ts +2 -2
- package/cjs/window/DetachedWindowAPI.d.ts.map +1 -1
- package/cjs/window/IBrowserWindow.d.ts +16 -5
- package/cjs/window/IBrowserWindow.d.ts.map +1 -1
- package/cjs/window/Window.cjs +9 -4
- package/cjs/window/Window.cjs.map +1 -1
- package/cjs/window/Window.d.ts.map +1 -1
- package/cjs/window/WindowPageOpenUtility.cjs +30 -3
- package/cjs/window/WindowPageOpenUtility.cjs.map +1 -1
- package/cjs/window/WindowPageOpenUtility.d.ts.map +1 -1
- package/lib/PropertySymbol.d.ts +3 -0
- package/lib/PropertySymbol.d.ts.map +1 -1
- package/lib/PropertySymbol.js +3 -0
- package/lib/PropertySymbol.js.map +1 -1
- package/lib/browser/Browser.d.ts +1 -3
- package/lib/browser/Browser.d.ts.map +1 -1
- package/lib/browser/Browser.js +2 -3
- package/lib/browser/Browser.js.map +1 -1
- package/lib/browser/BrowserContext.d.ts +1 -3
- package/lib/browser/BrowserContext.d.ts.map +1 -1
- package/lib/browser/BrowserContext.js +1 -3
- package/lib/browser/BrowserContext.js.map +1 -1
- package/lib/browser/BrowserFrame.d.ts +5 -1
- package/lib/browser/BrowserFrame.d.ts.map +1 -1
- package/lib/browser/BrowserFrame.js +5 -3
- package/lib/browser/BrowserFrame.js.map +1 -1
- package/lib/browser/BrowserPage.d.ts +4 -2
- package/lib/browser/BrowserPage.d.ts.map +1 -1
- package/lib/browser/BrowserPage.js +10 -1
- package/lib/browser/BrowserPage.js.map +1 -1
- package/lib/browser/DefaultBrowserPageViewport.d.ts +4 -0
- package/lib/browser/DefaultBrowserPageViewport.d.ts.map +1 -0
- package/lib/browser/DefaultBrowserPageViewport.js +6 -0
- package/lib/browser/DefaultBrowserPageViewport.js.map +1 -0
- package/lib/browser/detached-browser/DetachedBrowser.d.ts +1 -3
- package/lib/browser/detached-browser/DetachedBrowser.d.ts.map +1 -1
- package/lib/browser/detached-browser/DetachedBrowser.js +2 -3
- package/lib/browser/detached-browser/DetachedBrowser.js.map +1 -1
- package/lib/browser/detached-browser/DetachedBrowserContext.d.ts +1 -2
- package/lib/browser/detached-browser/DetachedBrowserContext.d.ts.map +1 -1
- package/lib/browser/detached-browser/DetachedBrowserContext.js +1 -2
- package/lib/browser/detached-browser/DetachedBrowserContext.js.map +1 -1
- package/lib/browser/detached-browser/DetachedBrowserFrame.d.ts +4 -1
- package/lib/browser/detached-browser/DetachedBrowserFrame.d.ts.map +1 -1
- package/lib/browser/detached-browser/DetachedBrowserFrame.js +5 -3
- package/lib/browser/detached-browser/DetachedBrowserFrame.js.map +1 -1
- package/lib/browser/detached-browser/DetachedBrowserPage.d.ts +4 -2
- package/lib/browser/detached-browser/DetachedBrowserPage.d.ts.map +1 -1
- package/lib/browser/detached-browser/DetachedBrowserPage.js +10 -1
- package/lib/browser/detached-browser/DetachedBrowserPage.js.map +1 -1
- package/lib/browser/types/IBrowser.d.ts +1 -3
- package/lib/browser/types/IBrowser.d.ts.map +1 -1
- package/lib/browser/types/IBrowserContext.d.ts +1 -3
- package/lib/browser/types/IBrowserContext.d.ts.map +1 -1
- package/lib/browser/types/IBrowserFrame.d.ts +4 -1
- package/lib/browser/types/IBrowserFrame.d.ts.map +1 -1
- package/lib/browser/types/IBrowserPage.d.ts +4 -2
- package/lib/browser/types/IBrowserPage.d.ts.map +1 -1
- package/lib/browser/types/IBrowserPageViewport.d.ts +3 -3
- package/lib/browser/types/IBrowserPageViewport.d.ts.map +1 -1
- package/lib/browser/types/IOptionalBrowserPageViewport.d.ts +6 -0
- package/lib/browser/types/IOptionalBrowserPageViewport.d.ts.map +1 -0
- package/lib/browser/types/IOptionalBrowserPageViewport.js +2 -0
- package/lib/browser/types/IOptionalBrowserPageViewport.js.map +1 -0
- package/lib/browser/utilities/BrowserFrameFactory.d.ts.map +1 -1
- package/lib/browser/utilities/BrowserFrameFactory.js +2 -1
- package/lib/browser/utilities/BrowserFrameFactory.js.map +1 -1
- package/lib/browser/utilities/BrowserFrameValidator.d.ts.map +1 -1
- package/lib/browser/utilities/BrowserFrameValidator.js +5 -4
- package/lib/browser/utilities/BrowserFrameValidator.js.map +1 -1
- package/lib/browser/utilities/BrowserPageUtility.d.ts +0 -8
- package/lib/browser/utilities/BrowserPageUtility.d.ts.map +1 -1
- package/lib/browser/utilities/BrowserPageUtility.js +0 -24
- package/lib/browser/utilities/BrowserPageUtility.js.map +1 -1
- package/lib/index.d.ts +2 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/version.js +1 -1
- package/lib/window/BrowserWindow.d.ts +80 -10
- package/lib/window/BrowserWindow.d.ts.map +1 -1
- package/lib/window/BrowserWindow.js +147 -22
- package/lib/window/BrowserWindow.js.map +1 -1
- package/lib/window/DetachedWindowAPI.d.ts +2 -2
- package/lib/window/DetachedWindowAPI.d.ts.map +1 -1
- package/lib/window/DetachedWindowAPI.js.map +1 -1
- package/lib/window/IBrowserWindow.d.ts +16 -5
- package/lib/window/IBrowserWindow.d.ts.map +1 -1
- package/lib/window/Window.d.ts.map +1 -1
- package/lib/window/Window.js +9 -4
- package/lib/window/Window.js.map +1 -1
- package/lib/window/WindowPageOpenUtility.d.ts.map +1 -1
- package/lib/window/WindowPageOpenUtility.js +7 -3
- package/lib/window/WindowPageOpenUtility.js.map +1 -1
- package/package.json +1 -1
- package/src/PropertySymbol.ts +3 -0
- package/src/browser/Browser.ts +2 -4
- package/src/browser/BrowserContext.ts +1 -4
- package/src/browser/BrowserFrame.ts +5 -1
- package/src/browser/BrowserPage.ts +15 -3
- package/src/browser/DefaultBrowserPageViewport.ts +7 -0
- package/src/browser/detached-browser/DetachedBrowser.ts +2 -4
- package/src/browser/detached-browser/DetachedBrowserContext.ts +1 -3
- package/src/browser/detached-browser/DetachedBrowserFrame.ts +4 -1
- package/src/browser/detached-browser/DetachedBrowserPage.ts +15 -3
- package/src/browser/types/IBrowser.ts +1 -3
- package/src/browser/types/IBrowserContext.ts +1 -3
- package/src/browser/types/IBrowserFrame.ts +4 -1
- package/src/browser/types/IBrowserPage.ts +4 -2
- package/src/browser/types/IBrowserPageViewport.ts +3 -3
- package/src/browser/types/IOptionalBrowserPageViewport.ts +5 -0
- package/src/browser/utilities/BrowserFrameFactory.ts +2 -1
- package/src/browser/utilities/BrowserFrameValidator.ts +5 -5
- package/src/browser/utilities/BrowserPageUtility.ts +0 -31
- package/src/index.ts +2 -0
- package/src/window/BrowserWindow.ts +165 -26
- package/src/window/DetachedWindowAPI.ts +2 -2
- package/src/window/IBrowserWindow.ts +18 -5
- package/src/window/Window.ts +10 -4
- package/src/window/WindowPageOpenUtility.ts +8 -3
@@ -1,5 +1,4 @@
|
|
1
1
|
import VirtualConsolePrinter from '../../console/VirtualConsolePrinter.js';
|
2
|
-
import IBrowserPageViewport from '../types/IBrowserPageViewport.js';
|
3
2
|
import DetachedBrowserFrame from './DetachedBrowserFrame.js';
|
4
3
|
import DetachedBrowserContext from './DetachedBrowserContext.js';
|
5
4
|
import VirtualConsole from '../../console/VirtualConsole.js';
|
@@ -9,6 +8,10 @@ import IGoToOptions from '../types/IGoToOptions.js';
|
|
9
8
|
import IResponse from '../../fetch/types/IResponse.js';
|
10
9
|
import BrowserPageUtility from '../utilities/BrowserPageUtility.js';
|
11
10
|
import IReloadOptions from '../types/IReloadOptions.js';
|
11
|
+
import DefaultBrowserPageViewport from '../DefaultBrowserPageViewport.js';
|
12
|
+
import IOptionalBrowserPageViewport from '../types/IOptionalBrowserPageViewport.js';
|
13
|
+
import IBrowserPageViewport from '../types/IBrowserPageViewport.js';
|
14
|
+
import Event from '../../event/Event.js';
|
12
15
|
|
13
16
|
/**
|
14
17
|
* Detached browser page used when constructing a Window instance without a browser.
|
@@ -18,6 +21,7 @@ export default class DetachedBrowserPage implements IBrowserPage {
|
|
18
21
|
public readonly mainFrame: DetachedBrowserFrame;
|
19
22
|
public readonly context: DetachedBrowserContext;
|
20
23
|
public readonly console: Console;
|
24
|
+
public readonly viewport: IBrowserPageViewport = Object.assign({}, DefaultBrowserPageViewport);
|
21
25
|
|
22
26
|
/**
|
23
27
|
* Constructor.
|
@@ -126,8 +130,16 @@ export default class DetachedBrowserPage implements IBrowserPage {
|
|
126
130
|
*
|
127
131
|
* @param viewport Viewport.
|
128
132
|
*/
|
129
|
-
public setViewport(viewport:
|
130
|
-
|
133
|
+
public setViewport(viewport: IOptionalBrowserPageViewport): void {
|
134
|
+
const previousViewport = Object.assign({}, this.viewport);
|
135
|
+
Object.assign(this.viewport, viewport);
|
136
|
+
if (
|
137
|
+
previousViewport.width !== this.viewport.width ||
|
138
|
+
previousViewport.height !== this.viewport.height ||
|
139
|
+
previousViewport.devicePixelRatio !== this.viewport.devicePixelRatio
|
140
|
+
) {
|
141
|
+
this.mainFrame.window.dispatchEvent(new Event('resize'));
|
142
|
+
}
|
131
143
|
}
|
132
144
|
|
133
145
|
/**
|
@@ -1,5 +1,4 @@
|
|
1
1
|
import IBrowserContext from './IBrowserContext.js';
|
2
|
-
import IBrowserFrame from './IBrowserFrame.js';
|
3
2
|
import IBrowserPage from './IBrowserPage.js';
|
4
3
|
import IBrowserSettings from './IBrowserSettings.js';
|
5
4
|
|
@@ -41,8 +40,7 @@ export default interface IBrowser {
|
|
41
40
|
/**
|
42
41
|
* Creates a new page.
|
43
42
|
*
|
44
|
-
* @param [opener] Opener.
|
45
43
|
* @returns Page.
|
46
44
|
*/
|
47
|
-
newPage(
|
45
|
+
newPage(): IBrowserPage;
|
48
46
|
}
|
@@ -1,7 +1,6 @@
|
|
1
1
|
import ICookieContainer from '../../cookie/types/ICookieContainer.js';
|
2
2
|
import IResponseCache from '../../fetch/cache/response/IResponseCache.js';
|
3
3
|
import IBrowser from './IBrowser.js';
|
4
|
-
import IBrowserFrame from './IBrowserFrame.js';
|
5
4
|
import IBrowserPage from './IBrowserPage.js';
|
6
5
|
import IPreflightResponseCache from '../../fetch/cache/preflight/IPreflightResponseCache.js';
|
7
6
|
|
@@ -35,8 +34,7 @@ export default interface IBrowserContext {
|
|
35
34
|
/**
|
36
35
|
* Creates a new page.
|
37
36
|
*
|
38
|
-
* @param [opener] Opener.
|
39
37
|
* @returns Page.
|
40
38
|
*/
|
41
|
-
newPage(
|
39
|
+
newPage(): IBrowserPage;
|
42
40
|
}
|
@@ -8,6 +8,7 @@ import IGoToOptions from './IGoToOptions.js';
|
|
8
8
|
import { Script } from 'vm';
|
9
9
|
import IReloadOptions from './IReloadOptions.js';
|
10
10
|
import BrowserFrameExceptionObserver from '../utilities/BrowserFrameExceptionObserver.js';
|
11
|
+
import ICrossOriginBrowserWindow from '../../window/ICrossOriginBrowserWindow.js';
|
11
12
|
|
12
13
|
/**
|
13
14
|
* Browser frame.
|
@@ -15,7 +16,6 @@ import BrowserFrameExceptionObserver from '../utilities/BrowserFrameExceptionObs
|
|
15
16
|
export default interface IBrowserFrame {
|
16
17
|
readonly childFrames: IBrowserFrame[];
|
17
18
|
readonly parentFrame: IBrowserFrame | null;
|
18
|
-
readonly opener: IBrowserFrame | null;
|
19
19
|
readonly page: IBrowserPage;
|
20
20
|
readonly window: IBrowserWindow;
|
21
21
|
readonly document: IDocument;
|
@@ -24,6 +24,9 @@ export default interface IBrowserFrame {
|
|
24
24
|
[PropertySymbol.asyncTaskManager]: AsyncTaskManager;
|
25
25
|
[PropertySymbol.exceptionObserver]: BrowserFrameExceptionObserver | null;
|
26
26
|
[PropertySymbol.listeners]: { navigation: Array<() => void> };
|
27
|
+
[PropertySymbol.openerFrame]: IBrowserFrame | null;
|
28
|
+
[PropertySymbol.openerWindow]: IBrowserWindow | ICrossOriginBrowserWindow | null;
|
29
|
+
[PropertySymbol.popup]: boolean;
|
27
30
|
|
28
31
|
/**
|
29
32
|
* Returns a promise that is resolved when all resources has been loaded, fetch has completed, and all async tasks such as timers are complete.
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import IBrowserPageViewport from '
|
1
|
+
import IBrowserPageViewport from '../types/IBrowserPageViewport.js';
|
2
2
|
import VirtualConsolePrinter from '../../console/VirtualConsolePrinter.js';
|
3
3
|
import IBrowserFrame from './IBrowserFrame.js';
|
4
4
|
import IBrowserContext from './IBrowserContext.js';
|
@@ -6,6 +6,7 @@ import { Script } from 'vm';
|
|
6
6
|
import IGoToOptions from './IGoToOptions.js';
|
7
7
|
import IResponse from '../../fetch/types/IResponse.js';
|
8
8
|
import IReloadOptions from './IReloadOptions.js';
|
9
|
+
import IOptionalBrowserPageViewport from './IOptionalBrowserPageViewport.js';
|
9
10
|
|
10
11
|
/**
|
11
12
|
* Browser page.
|
@@ -16,6 +17,7 @@ export default interface IBrowserPage {
|
|
16
17
|
readonly context: IBrowserContext;
|
17
18
|
readonly console: Console;
|
18
19
|
readonly frames: IBrowserFrame[];
|
20
|
+
readonly viewport: IBrowserPageViewport;
|
19
21
|
content: string;
|
20
22
|
url: string;
|
21
23
|
|
@@ -49,7 +51,7 @@ export default interface IBrowserPage {
|
|
49
51
|
*
|
50
52
|
* @param viewport Viewport.
|
51
53
|
*/
|
52
|
-
setViewport(viewport:
|
54
|
+
setViewport(viewport: IOptionalBrowserPageViewport): void;
|
53
55
|
|
54
56
|
/**
|
55
57
|
* Go to a page.
|
@@ -45,7 +45,8 @@ export default class BrowserFrameFactory {
|
|
45
45
|
frame.window[PropertySymbol.destroy]();
|
46
46
|
(<IBrowserPage | null>frame.page) = null;
|
47
47
|
(<IBrowserWindow | null>frame.window) = null;
|
48
|
-
|
48
|
+
frame[PropertySymbol.openerFrame] = null;
|
49
|
+
frame[PropertySymbol.openerWindow] = null;
|
49
50
|
|
50
51
|
if (!frame.childFrames.length) {
|
51
52
|
return frame[PropertySymbol.asyncTaskManager]
|
@@ -2,6 +2,7 @@ import IBrowserFrame from '../types/IBrowserFrame.js';
|
|
2
2
|
import { URL } from 'url';
|
3
3
|
import BrowserNavigationCrossOriginPolicyEnum from '../enums/BrowserNavigationCrossOriginPolicyEnum.js';
|
4
4
|
import DetachedBrowserFrame from '../detached-browser/DetachedBrowserFrame.js';
|
5
|
+
import * as PropertySymbol from '../../PropertySymbol.js';
|
5
6
|
|
6
7
|
/**
|
7
8
|
* Browser frame validator.
|
@@ -18,10 +19,9 @@ export default class BrowserFrameValidator {
|
|
18
19
|
const settings = frame.page.context.browser.settings;
|
19
20
|
let fromURL = frame.page.mainFrame.window.location;
|
20
21
|
|
21
|
-
if (frame.
|
22
|
-
fromURL = frame.
|
23
|
-
}
|
24
|
-
if (frame.parentFrame) {
|
22
|
+
if (frame[PropertySymbol.openerFrame]) {
|
23
|
+
fromURL = frame[PropertySymbol.openerFrame].window.location;
|
24
|
+
} else if (frame.parentFrame) {
|
25
25
|
fromURL = frame.parentFrame.window.location;
|
26
26
|
}
|
27
27
|
|
@@ -74,7 +74,7 @@ export default class BrowserFrameValidator {
|
|
74
74
|
return false;
|
75
75
|
}
|
76
76
|
|
77
|
-
if (settings.navigation.disableChildPageNavigation && !!frame.
|
77
|
+
if (settings.navigation.disableChildPageNavigation && !!frame[PropertySymbol.openerFrame]) {
|
78
78
|
return false;
|
79
79
|
}
|
80
80
|
|
@@ -1,7 +1,5 @@
|
|
1
1
|
import IBrowserFrame from '../types/IBrowserFrame.js';
|
2
2
|
import IBrowserPage from '../types/IBrowserPage.js';
|
3
|
-
import IBrowserPageViewport from '../types/IBrowserPageViewport.js';
|
4
|
-
import Event from '../../event/Event.js';
|
5
3
|
import IVirtualConsolePrinter from '../../console/types/IVirtualConsolePrinter.js';
|
6
4
|
import IBrowserContext from '../types/IBrowserContext.js';
|
7
5
|
import BrowserFrameFactory from './BrowserFrameFactory.js';
|
@@ -20,35 +18,6 @@ export default class BrowserPageUtility {
|
|
20
18
|
return this.findFrames(page.mainFrame);
|
21
19
|
}
|
22
20
|
|
23
|
-
/**
|
24
|
-
* Sets the viewport.
|
25
|
-
*
|
26
|
-
* @param page Page.
|
27
|
-
* @param viewport Viewport.
|
28
|
-
*/
|
29
|
-
public static setViewport(page: IBrowserPage, viewport: IBrowserPageViewport): void {
|
30
|
-
if (
|
31
|
-
(viewport.width !== undefined && page.mainFrame.window.innerWidth !== viewport.width) ||
|
32
|
-
(viewport.height !== undefined && page.mainFrame.window.innerHeight !== viewport.height)
|
33
|
-
) {
|
34
|
-
if (viewport.width !== undefined && page.mainFrame.window.innerWidth !== viewport.width) {
|
35
|
-
(<number>page.mainFrame.window.innerWidth) = viewport.width;
|
36
|
-
(<number>page.mainFrame.window.outerWidth) = viewport.width;
|
37
|
-
}
|
38
|
-
|
39
|
-
if (viewport.height !== undefined && page.mainFrame.window.innerHeight !== viewport.height) {
|
40
|
-
(<number>page.mainFrame.window.innerHeight) = viewport.height;
|
41
|
-
(<number>page.mainFrame.window.outerHeight) = viewport.height;
|
42
|
-
}
|
43
|
-
|
44
|
-
page.mainFrame.window.dispatchEvent(new Event('resize'));
|
45
|
-
}
|
46
|
-
|
47
|
-
if (viewport.devicePixelRatio !== undefined) {
|
48
|
-
(<number>page.mainFrame.window.devicePixelRatio) = viewport.devicePixelRatio;
|
49
|
-
}
|
50
|
-
}
|
51
|
-
|
52
21
|
/**
|
53
22
|
* Aborts all ongoing operations and destroys the page.
|
54
23
|
*
|
package/src/index.ts
CHANGED
@@ -172,6 +172,7 @@ import type IBrowser from './browser/types/IBrowser.js';
|
|
172
172
|
import type IBrowserContext from './browser/types/IBrowserContext.js';
|
173
173
|
import type IBrowserFrame from './browser/types/IBrowserFrame.js';
|
174
174
|
import type IBrowserPage from './browser/types/IBrowserPage.js';
|
175
|
+
import type ICrossOriginBrowserWindow from './window/ICrossOriginBrowserWindow.js';
|
175
176
|
|
176
177
|
export type {
|
177
178
|
IAnimationEventInit,
|
@@ -181,6 +182,7 @@ export type {
|
|
181
182
|
IBrowserContext,
|
182
183
|
IBrowserFrame,
|
183
184
|
IBrowserPage,
|
185
|
+
ICrossOriginBrowserWindow,
|
184
186
|
IClipboardEventInit,
|
185
187
|
IComment,
|
186
188
|
ICustomEventInit,
|
@@ -405,21 +405,15 @@ export default class BrowserWindow extends EventTarget implements IBrowserWindow
|
|
405
405
|
public readonly history: History;
|
406
406
|
public readonly navigator: Navigator;
|
407
407
|
public readonly console: Console;
|
408
|
-
public readonly opener: IBrowserWindow | null = null;
|
409
408
|
public readonly self: IBrowserWindow = this;
|
410
409
|
public readonly top: IBrowserWindow = this;
|
411
410
|
public readonly parent: IBrowserWindow = this;
|
412
411
|
public readonly window: IBrowserWindow = this;
|
413
412
|
public readonly globalThis: IBrowserWindow = this;
|
414
413
|
public readonly screen: Screen;
|
415
|
-
public readonly devicePixelRatio = 1;
|
416
414
|
public readonly sessionStorage: Storage;
|
417
415
|
public readonly localStorage: Storage;
|
418
416
|
public readonly performance = PerfHooks.performance;
|
419
|
-
public readonly innerWidth: number = 1024;
|
420
|
-
public readonly innerHeight: number = 768;
|
421
|
-
public readonly outerWidth: number = 1024;
|
422
|
-
public readonly outerHeight: number = 768;
|
423
417
|
public readonly screenLeft: number = 0;
|
424
418
|
public readonly screenTop: number = 0;
|
425
419
|
public readonly screenX: number = 0;
|
@@ -504,6 +498,11 @@ export default class BrowserWindow extends EventTarget implements IBrowserWindow
|
|
504
498
|
#clearInterval: (id: NodeJS.Timeout) => void;
|
505
499
|
#queueMicrotask: (callback: Function) => void;
|
506
500
|
#browserFrame: IBrowserFrame;
|
501
|
+
#innerWidth: number | null = null;
|
502
|
+
#innerHeight: number | null = null;
|
503
|
+
#outerWidth: number | null = null;
|
504
|
+
#outerHeight: number | null = null;
|
505
|
+
#devicePixelRatio: number | null = null;
|
507
506
|
|
508
507
|
/**
|
509
508
|
* Constructor.
|
@@ -511,13 +510,8 @@ export default class BrowserWindow extends EventTarget implements IBrowserWindow
|
|
511
510
|
* @param browserFrame Browser frame.
|
512
511
|
* @param [options] Options.
|
513
512
|
* @param [options.url] URL.
|
514
|
-
* @param [options.width] Window width. Defaults to "1024".
|
515
|
-
* @param [options.height] Window height. Defaults to "768".
|
516
513
|
*/
|
517
|
-
constructor(
|
518
|
-
browserFrame: IBrowserFrame,
|
519
|
-
options?: { url?: string; width?: number; height?: number }
|
520
|
-
) {
|
514
|
+
constructor(browserFrame: IBrowserFrame, options?: { url?: string }) {
|
521
515
|
super();
|
522
516
|
|
523
517
|
this.#browserFrame = browserFrame;
|
@@ -538,20 +532,6 @@ export default class BrowserWindow extends EventTarget implements IBrowserWindow
|
|
538
532
|
|
539
533
|
WindowBrowserSettingsReader.setSettings(this, this.#browserFrame.page.context.browser.settings);
|
540
534
|
|
541
|
-
if (options) {
|
542
|
-
if (options.width !== undefined) {
|
543
|
-
if (options.width !== undefined && this.innerWidth !== options.width) {
|
544
|
-
(<number>this.innerWidth) = options.width;
|
545
|
-
(<number>this.outerWidth) = options.width;
|
546
|
-
}
|
547
|
-
}
|
548
|
-
|
549
|
-
if (options.height !== undefined && this.innerHeight !== options.height) {
|
550
|
-
(<number>this.innerHeight) = options.height;
|
551
|
-
(<number>this.outerHeight) = options.height;
|
552
|
-
}
|
553
|
-
}
|
554
|
-
|
555
535
|
// Binds all methods to "this", so that it will use the correct context when called globally.
|
556
536
|
for (const key of Object.getOwnPropertyNames(BrowserWindow.prototype).concat(
|
557
537
|
Object.getOwnPropertyNames(EventTarget.prototype)
|
@@ -684,6 +664,15 @@ export default class BrowserWindow extends EventTarget implements IBrowserWindow
|
|
684
664
|
});
|
685
665
|
}
|
686
666
|
|
667
|
+
/**
|
668
|
+
* Returns opener.
|
669
|
+
*
|
670
|
+
* @returns Opener.
|
671
|
+
*/
|
672
|
+
public get opener(): IBrowserWindow | ICrossOriginBrowserWindow | null {
|
673
|
+
return this.#browserFrame[PropertySymbol.openerWindow];
|
674
|
+
}
|
675
|
+
|
687
676
|
/**
|
688
677
|
* The number of pixels that the document is currently scrolled horizontally.
|
689
678
|
*
|
@@ -729,6 +718,114 @@ export default class BrowserWindow extends EventTarget implements IBrowserWindow
|
|
729
718
|
return new CSS();
|
730
719
|
}
|
731
720
|
|
721
|
+
/**
|
722
|
+
* Returns inner width.
|
723
|
+
*
|
724
|
+
* @returns Inner width.
|
725
|
+
*/
|
726
|
+
public get innerWidth(): number {
|
727
|
+
if (this.#innerWidth === null) {
|
728
|
+
return this.#browserFrame.page.viewport.width;
|
729
|
+
}
|
730
|
+
return this.#innerWidth;
|
731
|
+
}
|
732
|
+
|
733
|
+
/**
|
734
|
+
* Sets inner width.
|
735
|
+
*
|
736
|
+
* @param value Inner width.
|
737
|
+
*/
|
738
|
+
public set innerWidth(value: number) {
|
739
|
+
this.#innerWidth = value;
|
740
|
+
}
|
741
|
+
|
742
|
+
/**
|
743
|
+
* Returns inner height.
|
744
|
+
*
|
745
|
+
* @returns Inner height.
|
746
|
+
*/
|
747
|
+
public get innerHeight(): number {
|
748
|
+
// It seems like this value can be defined according to spec, but changing it has no effect on the actual viewport.
|
749
|
+
if (this.#innerHeight === null) {
|
750
|
+
return this.#browserFrame.page.viewport.height;
|
751
|
+
}
|
752
|
+
return this.#innerHeight;
|
753
|
+
}
|
754
|
+
|
755
|
+
/**
|
756
|
+
* Sets inner height.
|
757
|
+
*
|
758
|
+
* @param value Inner height.
|
759
|
+
*/
|
760
|
+
public set innerHeight(value: number) {
|
761
|
+
this.#innerHeight = value;
|
762
|
+
}
|
763
|
+
|
764
|
+
/**
|
765
|
+
* Returns outer width.
|
766
|
+
*
|
767
|
+
* @returns Outer width.
|
768
|
+
*/
|
769
|
+
public get outerWidth(): number {
|
770
|
+
// It seems like this value can be defined according to spec, but changing it has no effect on the actual viewport.
|
771
|
+
if (this.#outerWidth === null) {
|
772
|
+
return this.#browserFrame.page.viewport.width;
|
773
|
+
}
|
774
|
+
return this.#outerWidth;
|
775
|
+
}
|
776
|
+
|
777
|
+
/**
|
778
|
+
* Sets outer width.
|
779
|
+
*
|
780
|
+
* @param value Outer width.
|
781
|
+
*/
|
782
|
+
public set outerWidth(value: number) {
|
783
|
+
this.#outerWidth = value;
|
784
|
+
}
|
785
|
+
|
786
|
+
/**
|
787
|
+
* Returns outer height.
|
788
|
+
*
|
789
|
+
* @returns Outer height.
|
790
|
+
*/
|
791
|
+
public get outerHeight(): number {
|
792
|
+
if (this.#outerHeight === null) {
|
793
|
+
return this.#browserFrame.page.viewport.height;
|
794
|
+
}
|
795
|
+
return this.#outerHeight;
|
796
|
+
}
|
797
|
+
|
798
|
+
/**
|
799
|
+
* Sets outer height.
|
800
|
+
*
|
801
|
+
* @param value Outer height.
|
802
|
+
*/
|
803
|
+
public set outerHeight(value: number) {
|
804
|
+
this.#outerHeight = value;
|
805
|
+
}
|
806
|
+
|
807
|
+
/**
|
808
|
+
* Returns device pixel ratio.
|
809
|
+
*
|
810
|
+
* @returns Device pixel ratio.
|
811
|
+
*/
|
812
|
+
public get devicePixelRatio(): number {
|
813
|
+
// It seems like this value can be defined according to spec, but changing it has no effect on the actual viewport.
|
814
|
+
if (this.#devicePixelRatio === null) {
|
815
|
+
return this.#browserFrame.page.viewport.devicePixelRatio;
|
816
|
+
}
|
817
|
+
return this.#devicePixelRatio;
|
818
|
+
}
|
819
|
+
|
820
|
+
/**
|
821
|
+
* Sets device pixel ratio.
|
822
|
+
*
|
823
|
+
* @param value Device pixel ratio.
|
824
|
+
*/
|
825
|
+
public set devicePixelRatio(value: number) {
|
826
|
+
this.#devicePixelRatio = value;
|
827
|
+
}
|
828
|
+
|
732
829
|
/**
|
733
830
|
* Returns an object containing the values of all CSS properties of an element.
|
734
831
|
*
|
@@ -1067,6 +1164,48 @@ export default class BrowserWindow extends EventTarget implements IBrowserWindow
|
|
1067
1164
|
);
|
1068
1165
|
}
|
1069
1166
|
|
1167
|
+
/**
|
1168
|
+
* Resizes the window.
|
1169
|
+
*
|
1170
|
+
* @param width Width.
|
1171
|
+
* @param height Height.
|
1172
|
+
*/
|
1173
|
+
public resizeTo(width: number, height: number): void {
|
1174
|
+
if (!width || !height) {
|
1175
|
+
throw new DOMException(
|
1176
|
+
`Failed to execute 'resizeTo' on 'Window': 2 arguments required, but only ${arguments.length} present.`
|
1177
|
+
);
|
1178
|
+
}
|
1179
|
+
|
1180
|
+
// We can only resize the window if it is a popup.
|
1181
|
+
if (this.#browserFrame[PropertySymbol.popup]) {
|
1182
|
+
this.#browserFrame.page.setViewport({ width, height });
|
1183
|
+
}
|
1184
|
+
}
|
1185
|
+
|
1186
|
+
/**
|
1187
|
+
* Resizes the current window by a specified amount.
|
1188
|
+
*
|
1189
|
+
* @param width Width.
|
1190
|
+
* @param height Height.
|
1191
|
+
*/
|
1192
|
+
public resizeBy(width: number, height: number): void {
|
1193
|
+
if (!width || !height) {
|
1194
|
+
throw new DOMException(
|
1195
|
+
`Failed to execute 'resizeBy' on 'Window': 2 arguments required, but only ${arguments.length} present.`
|
1196
|
+
);
|
1197
|
+
}
|
1198
|
+
|
1199
|
+
// We can only resize the window if it is a popup.
|
1200
|
+
if (this.#browserFrame[PropertySymbol.popup]) {
|
1201
|
+
const viewport = this.#browserFrame.page.viewport;
|
1202
|
+
this.#browserFrame.page.setViewport({
|
1203
|
+
width: viewport.width + width,
|
1204
|
+
height: viewport.height + height
|
1205
|
+
});
|
1206
|
+
}
|
1207
|
+
}
|
1208
|
+
|
1070
1209
|
/**
|
1071
1210
|
* Setup of VM context.
|
1072
1211
|
*/
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import VirtualConsolePrinter from '../console/VirtualConsolePrinter.js';
|
2
|
-
import
|
2
|
+
import IOptionalBrowserPageViewport from '../browser/types/IOptionalBrowserPageViewport.js';
|
3
3
|
import IBrowserFrame from '../browser/types/IBrowserFrame.js';
|
4
4
|
import IBrowserSettings from '../browser/types/IBrowserSettings.js';
|
5
5
|
|
@@ -85,7 +85,7 @@ export default class DetachedWindowAPI {
|
|
85
85
|
*
|
86
86
|
* @param viewport Viewport.
|
87
87
|
*/
|
88
|
-
public setViewport(viewport:
|
88
|
+
public setViewport(viewport: IOptionalBrowserPageViewport): void {
|
89
89
|
this.#browserFrame.page.setViewport(viewport);
|
90
90
|
}
|
91
91
|
|
@@ -398,11 +398,11 @@ export default interface IBrowserWindow extends IEventTarget, INodeJSGlobal {
|
|
398
398
|
readonly window: IBrowserWindow;
|
399
399
|
readonly globalThis: IBrowserWindow;
|
400
400
|
readonly screen: Screen;
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
401
|
+
innerWidth: number;
|
402
|
+
innerHeight: number;
|
403
|
+
outerWidth: number;
|
404
|
+
outerHeight: number;
|
405
|
+
devicePixelRatio: number;
|
406
406
|
readonly screenLeft: number;
|
407
407
|
readonly screenTop: number;
|
408
408
|
readonly screenX: number;
|
@@ -571,6 +571,19 @@ export default interface IBrowserWindow extends IEventTarget, INodeJSGlobal {
|
|
571
571
|
*/
|
572
572
|
postMessage(message: unknown, targetOrigin?: string, transfer?: unknown[]): void;
|
573
573
|
|
574
|
+
/**
|
575
|
+
* Resizes the window.
|
576
|
+
*
|
577
|
+
* @param width Width.
|
578
|
+
* @param height Height.
|
579
|
+
*/
|
580
|
+
resizeTo(width: number, height: number): void;
|
581
|
+
|
582
|
+
/**
|
583
|
+
* Resizes the current window by a specified amount.
|
584
|
+
*/
|
585
|
+
resizeBy(width: number, height: number): void;
|
586
|
+
|
574
587
|
/**
|
575
588
|
* Destroys the window.
|
576
589
|
*/
|
package/src/window/Window.ts
CHANGED
@@ -41,12 +41,18 @@ export default class Window extends BrowserWindow implements IWindow {
|
|
41
41
|
console: options?.console,
|
42
42
|
settings: options?.settings
|
43
43
|
});
|
44
|
-
const
|
44
|
+
const browserPage = browser.defaultContext.pages[0];
|
45
|
+
const browserFrame = browserPage.mainFrame;
|
46
|
+
|
47
|
+
if (options && (options.width || options.height || options.innerWidth || options.innerHeight)) {
|
48
|
+
Object.assign(browserPage.viewport, {
|
49
|
+
width: options.width || options.innerWidth || browserPage.viewport.width,
|
50
|
+
height: options.height || options.innerHeight || browserPage.viewport.height
|
51
|
+
});
|
52
|
+
}
|
45
53
|
|
46
54
|
super(browserFrame, {
|
47
|
-
url: options?.url
|
48
|
-
width: options?.width ?? options?.innerWidth,
|
49
|
-
height: options?.height ?? options?.innerHeight
|
55
|
+
url: options?.url
|
50
56
|
});
|
51
57
|
|
52
58
|
browserFrame.window = this;
|
@@ -4,6 +4,7 @@ import IBrowserFrame from '../browser/types/IBrowserFrame.js';
|
|
4
4
|
import FetchCORSUtility from '../fetch/utilities/FetchCORSUtility.js';
|
5
5
|
import ICrossOriginBrowserWindow from './ICrossOriginBrowserWindow.js';
|
6
6
|
import BrowserFrameURL from '../browser/utilities/BrowserFrameURL.js';
|
7
|
+
import * as PropertySymbol from '../PropertySymbol.js';
|
7
8
|
|
8
9
|
/**
|
9
10
|
* Window page open handler.
|
@@ -45,8 +46,9 @@ export default class WindowPageOpenUtility {
|
|
45
46
|
break;
|
46
47
|
case '_blank':
|
47
48
|
default:
|
48
|
-
const newPage = browserFrame.page.context.newPage(
|
49
|
+
const newPage = browserFrame.page.context.newPage();
|
49
50
|
targetFrame = newPage.mainFrame;
|
51
|
+
targetFrame[PropertySymbol.openerFrame] = browserFrame;
|
50
52
|
break;
|
51
53
|
}
|
52
54
|
|
@@ -66,6 +68,8 @@ export default class WindowPageOpenUtility {
|
|
66
68
|
}
|
67
69
|
|
68
70
|
if (features.popup && target !== '_self' && target !== '_top' && target !== '_parent') {
|
71
|
+
targetFrame[PropertySymbol.popup] = true;
|
72
|
+
|
69
73
|
if (features?.width || features?.height) {
|
70
74
|
targetFrame.page.setViewport({
|
71
75
|
width: features?.width,
|
@@ -100,9 +104,10 @@ export default class WindowPageOpenUtility {
|
|
100
104
|
!features.noopener &&
|
101
105
|
!features.noreferrer &&
|
102
106
|
browserFrame.window &&
|
107
|
+
targetFrame[PropertySymbol.openerFrame] &&
|
103
108
|
targetFrame.window !== browserFrame.window
|
104
109
|
) {
|
105
|
-
|
110
|
+
targetFrame[PropertySymbol.openerWindow] = isCORS
|
106
111
|
? new CrossOriginBrowserWindow(browserFrame.window)
|
107
112
|
: browserFrame.window;
|
108
113
|
}
|
@@ -156,7 +161,7 @@ export default class WindowPageOpenUtility {
|
|
156
161
|
const [key, value] = part.split('=');
|
157
162
|
switch (key) {
|
158
163
|
case 'popup':
|
159
|
-
result.popup = value === 'yes' || value === '1' || value === 'true';
|
164
|
+
result.popup = !value || value === 'yes' || value === '1' || value === 'true';
|
160
165
|
break;
|
161
166
|
case 'width':
|
162
167
|
case 'innerWidth':
|