@remotion/renderer 4.0.405 → 4.0.406
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.
- package/dist/assets/apply-tone-frequency.d.ts +1 -2
- package/dist/assets/convert-assets-to-file-urls.d.ts +1 -2
- package/dist/assets/download-and-map-assets-to-file.d.ts +2 -3
- package/dist/assets/download-and-map-assets-to-file.js +1 -0
- package/dist/assets/download-file.d.ts +1 -0
- package/dist/assets/download-file.js +17 -1
- package/dist/assets/download-map.d.ts +1 -0
- package/dist/assets/download-map.js +2 -0
- package/dist/assets/get-audio-channels.d.ts +2 -3
- package/dist/assets/inline-audio-mixing.d.ts +1 -2
- package/dist/browser/Browser.d.ts +5 -5
- package/dist/browser/Browser.js +65 -74
- package/dist/browser/BrowserFetcher.d.ts +3 -5
- package/dist/browser/BrowserFetcher.js +1 -0
- package/dist/browser/BrowserPage.d.ts +4 -4
- package/dist/browser/BrowserPage.js +223 -218
- package/dist/browser/BrowserRunner.d.ts +1 -2
- package/dist/browser/Connection.js +99 -112
- package/dist/browser/ConsoleMessage.d.ts +1 -1
- package/dist/browser/ConsoleMessage.js +9 -16
- package/dist/browser/DOMWorld.d.ts +1 -1
- package/dist/browser/DOMWorld.js +75 -89
- package/dist/browser/Errors.js +2 -4
- package/dist/browser/EventEmitter.js +2 -1
- package/dist/browser/ExecutionContext.js +117 -120
- package/dist/browser/FrameManager.js +249 -244
- package/dist/browser/HTTPRequest.js +11 -22
- package/dist/browser/HTTPResponse.js +3 -16
- package/dist/browser/JSHandle.js +17 -30
- package/dist/browser/LifecycleWatcher.js +122 -128
- package/dist/browser/NetworkEventManager.js +31 -40
- package/dist/browser/NetworkManager.js +210 -203
- package/dist/browser/NodeWebSocketTransport.js +3 -0
- package/dist/browser/Target.d.ts +1 -1
- package/dist/browser/Target.js +32 -39
- package/dist/browser/TaskQueue.js +5 -18
- package/dist/browser/TimeoutSettings.js +12 -25
- package/dist/browser/browser-download-progress-bar.d.ts +1 -2
- package/dist/browser/handle-failed-resource.d.ts +1 -2
- package/dist/browser/handle-failed-resource.js +4 -3
- package/dist/call-ffmpeg.d.ts +4 -5
- package/dist/can-concat-seamlessly.d.ts +2 -4
- package/dist/can-use-parallel-encoding.d.ts +1 -2
- package/dist/check-version-requirements.d.ts +1 -2
- package/dist/client.d.ts +181 -181
- package/dist/codec-supports-media.d.ts +3 -4
- package/dist/collect-assets.d.ts +1 -1
- package/dist/combine-audio.d.ts +2 -4
- package/dist/combine-chunks.d.ts +1 -2
- package/dist/combine-video-streams.d.ts +2 -4
- package/dist/compositor/compositor.d.ts +2 -3
- package/dist/compositor/get-executable-path.d.ts +3 -3
- package/dist/compress-audio.d.ts +2 -4
- package/dist/create-audio.d.ts +2 -4
- package/dist/create-silent-audio.d.ts +1 -2
- package/dist/crf.d.ts +4 -6
- package/dist/cycle-browser-tabs.d.ts +1 -2
- package/dist/ensure-browser.d.ts +44 -1
- package/dist/error-handling/handle-javascript-exception.d.ts +1 -1
- package/dist/error-handling/handle-javascript-exception.js +7 -1
- package/dist/error-handling/symbolicateable-error.d.ts +1 -1
- package/dist/error-handling/symbolicateable-error.js +4 -0
- package/dist/error-handling.js +1 -1
- package/dist/esm/client.mjs +7 -2
- package/dist/esm/index.mjs +28 -4
- package/dist/extract-audio.d.ts +2 -3
- package/dist/ffmpeg-args.d.ts +6 -12
- package/dist/get-browser-instance.d.ts +4 -6
- package/dist/get-codec-name.d.ts +3 -6
- package/dist/get-compositions.d.ts +1 -1
- package/dist/get-concurrency.d.ts +1 -1
- package/dist/get-extension-from-codec.d.ts +2 -3
- package/dist/get-frame-padded-index.d.ts +1 -2
- package/dist/get-local-browser-executable.d.ts +2 -4
- package/dist/get-prores-profile-name.d.ts +1 -3
- package/dist/get-silent-parts.d.ts +4 -5
- package/dist/get-video-metadata.d.ts +3 -4
- package/dist/get-video-threads-flag.d.ts +1 -2
- package/dist/goto-page-or-throw.d.ts +1 -1
- package/dist/guess-extension-for-media.d.ts +2 -3
- package/dist/image-format.d.ts +2 -3
- package/dist/index.d.ts +173 -172
- package/dist/index.js +16 -16
- package/dist/is-audio-codec.d.ts +1 -2
- package/dist/log-level.d.ts +1 -1
- package/dist/logger.d.ts +6 -6
- package/dist/make-page.d.ts +2 -4
- package/dist/memory/from-proc-meminfo.d.ts +1 -2
- package/dist/memory/get-available-memory.d.ts +1 -2
- package/dist/mime-types.js +2 -1
- package/dist/mux-video-and-audio.d.ts +2 -3
- package/dist/offthread-video-server.d.ts +1 -2
- package/dist/offthread-video-server.js +4 -6
- package/dist/open-browser.d.ts +1 -1
- package/dist/open-browser.js +6 -5
- package/dist/options/api-key.js +3 -1
- package/dist/options/audio-bitrate.js +9 -1
- package/dist/options/audio-codec.d.ts +10 -13
- package/dist/options/beep-on-finish.js +1 -1
- package/dist/options/binaries-directory.js +9 -1
- package/dist/options/chrome-mode.d.ts +3 -3
- package/dist/options/chrome-mode.js +6 -1
- package/dist/options/color-space.d.ts +5 -9
- package/dist/options/color-space.js +7 -1
- package/dist/options/crf.js +1 -1
- package/dist/options/cross-site-isolation.js +2 -1
- package/dist/options/dark-mode.js +2 -1
- package/dist/options/delete-after.js +11 -1
- package/dist/options/disallow-parallel-encoding.js +1 -1
- package/dist/options/enable-lambda-insights.js +2 -1
- package/dist/options/enable-multiprocess-on-linux.js +13 -1
- package/dist/options/encoding-buffer-size.js +3 -1
- package/dist/options/encoding-max-rate.js +3 -1
- package/dist/options/enforce-audio.js +1 -1
- package/dist/options/folder-expiry.js +4 -1
- package/dist/options/for-seamless-aac-concatenation.js +3 -1
- package/dist/options/gl.d.ts +6 -6
- package/dist/options/gl.js +28 -2
- package/dist/options/hardware-acceleration.d.ts +2 -2
- package/dist/options/headless.js +4 -1
- package/dist/options/image-sequence-pattern.js +5 -1
- package/dist/options/index.d.ts +25 -25
- package/dist/options/jpeg-quality.js +1 -1
- package/dist/options/latency-hint.js +10 -1
- package/dist/options/license-key.js +2 -1
- package/dist/options/log-level.d.ts +3 -4
- package/dist/options/log-level.js +16 -1
- package/dist/options/metadata.js +7 -2
- package/dist/options/mute.js +1 -1
- package/dist/options/number-of-gif-loops.js +13 -1
- package/dist/options/offthreadvideo-cache-size.js +11 -1
- package/dist/options/offthreadvideo-threads.js +2 -1
- package/dist/options/on-browser-download.js +2 -1
- package/dist/options/options-map.d.ts +93 -93
- package/dist/options/overwrite.js +5 -1
- package/dist/options/prefer-lossless.js +4 -1
- package/dist/options/public-dir.js +2 -1
- package/dist/options/public-license-key.js +3 -1
- package/dist/options/public-path.js +7 -1
- package/dist/options/repro.js +1 -1
- package/dist/options/scale.js +5 -1
- package/dist/options/timeout.js +4 -1
- package/dist/options/video-bitrate.js +7 -1
- package/dist/options/video-cache-size.js +8 -1
- package/dist/options/video-codec.d.ts +6 -6
- package/dist/options/video-codec.js +1 -1
- package/dist/options/webhook-custom-data.js +1 -1
- package/dist/options/x264-preset.d.ts +5 -6
- package/dist/options/x264-preset.js +23 -1
- package/dist/p-limit.d.ts +1 -1
- package/dist/pixel-format.d.ts +2 -3
- package/dist/pool.js +2 -0
- package/dist/port-config.d.ts +5 -6
- package/dist/prespawn-ffmpeg.js +5 -4
- package/dist/prestitcher-memory-usage.d.ts +1 -2
- package/dist/print-useful-error-message.d.ts +1 -2
- package/dist/prores-profile.d.ts +2 -4
- package/dist/puppeteer-evaluate.d.ts +2 -2
- package/dist/puppeteer-screenshot.d.ts +3 -4
- package/dist/pure.d.ts +5 -5
- package/dist/render-frame-and-retry-target-close.d.ts +8 -8
- package/dist/render-frame-with-option-to-reject.d.ts +4 -6
- package/dist/render-frame.d.ts +8 -8
- package/dist/render-has-audio.d.ts +2 -3
- package/dist/render-media.js +2 -1
- package/dist/replace-browser.d.ts +1 -2
- package/dist/repro.d.ts +1 -1
- package/dist/screenshot-task.d.ts +3 -4
- package/dist/seek-to-frame.d.ts +2 -3
- package/dist/serve-handler/index.d.ts +1 -1
- package/dist/serve-handler/range-parser.d.ts +2 -2
- package/dist/serve-static.d.ts +1 -2
- package/dist/set-props-and-env.js +3 -1
- package/dist/stringify-ffmpeg-filter.d.ts +1 -2
- package/dist/take-frame.d.ts +1 -2
- package/dist/test-gpu.d.ts +2 -4
- package/dist/validate-even-dimensions-with-codec.d.ts +2 -4
- package/dist/validate-ffmpeg-override.d.ts +1 -1
- package/dist/validate-number-of-gif-loops.d.ts +1 -2
- package/dist/validate-output-filename.d.ts +2 -4
- package/package.json +16 -14
|
@@ -14,18 +14,6 @@
|
|
|
14
14
|
* See the License for the specific language governing permissions and
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
18
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
19
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
20
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
21
|
-
};
|
|
22
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
23
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
24
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
25
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
26
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
27
|
-
};
|
|
28
|
-
var _FrameManager_instances, _FrameManager_page, _FrameManager_networkManager, _FrameManager_frames, _FrameManager_contextIdToContext, _FrameManager_isolatedWorlds, _FrameManager_mainFrame, _FrameManager_client, _FrameManager_onAttachedToTarget, _FrameManager_onDetachedFromTarget, _FrameManager_onLifecycleEvent, _FrameManager_onFrameStartedLoading, _FrameManager_onFrameStoppedLoading, _FrameManager_handleFrameTree, _FrameManager_onFrameAttached, _FrameManager_onFrameNavigated, _FrameManager_onFrameNavigatedWithinDocument, _FrameManager_onFrameDetached, _FrameManager_onExecutionContextCreated, _FrameManager_onExecutionContextDestroyed, _FrameManager_onExecutionContextsCleared, _FrameManager_removeFramesRecursively, _Frame_parentFrame, _Frame_url, _Frame_client;
|
|
29
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
18
|
exports.Frame = exports.FrameManager = exports.FrameManagerEmittedEvents = void 0;
|
|
31
19
|
const Connection_1 = require("./Connection");
|
|
@@ -48,68 +36,67 @@ exports.FrameManagerEmittedEvents = {
|
|
|
48
36
|
ExecutionContextDestroyed: Symbol('FrameManager.ExecutionContextDestroyed'),
|
|
49
37
|
};
|
|
50
38
|
class FrameManager extends EventEmitter_1.EventEmitter {
|
|
39
|
+
#page;
|
|
40
|
+
#networkManager;
|
|
41
|
+
#frames = new Map();
|
|
42
|
+
#contextIdToContext = new Map();
|
|
43
|
+
#isolatedWorlds = new Set();
|
|
44
|
+
#mainFrame;
|
|
45
|
+
#client;
|
|
51
46
|
get _client() {
|
|
52
|
-
return
|
|
47
|
+
return this.#client;
|
|
53
48
|
}
|
|
54
49
|
constructor(client, page, indent, logLevel) {
|
|
55
50
|
super();
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
_FrameManager_contextIdToContext.set(this, new Map());
|
|
61
|
-
_FrameManager_isolatedWorlds.set(this, new Set());
|
|
62
|
-
_FrameManager_mainFrame.set(this, void 0);
|
|
63
|
-
_FrameManager_client.set(this, void 0);
|
|
64
|
-
__classPrivateFieldSet(this, _FrameManager_client, client, "f");
|
|
65
|
-
__classPrivateFieldSet(this, _FrameManager_page, page, "f");
|
|
66
|
-
__classPrivateFieldSet(this, _FrameManager_networkManager, new NetworkManager_1.NetworkManager(client, this, indent, logLevel), "f");
|
|
67
|
-
this.setupEventListeners(__classPrivateFieldGet(this, _FrameManager_client, "f"));
|
|
51
|
+
this.#client = client;
|
|
52
|
+
this.#page = page;
|
|
53
|
+
this.#networkManager = new NetworkManager_1.NetworkManager(client, this, indent, logLevel);
|
|
54
|
+
this.setupEventListeners(this.#client);
|
|
68
55
|
}
|
|
69
56
|
setupEventListeners(session) {
|
|
70
57
|
session.on('Page.frameAttached', (event) => {
|
|
71
|
-
|
|
58
|
+
this.#onFrameAttached(session, event.frameId, event.parentFrameId);
|
|
72
59
|
});
|
|
73
60
|
session.on('Page.frameNavigated', (event) => {
|
|
74
|
-
|
|
61
|
+
this.#onFrameNavigated(event.frame);
|
|
75
62
|
});
|
|
76
63
|
session.on('Page.navigatedWithinDocument', (event) => {
|
|
77
|
-
|
|
64
|
+
this.#onFrameNavigatedWithinDocument(event.frameId, event.url);
|
|
78
65
|
});
|
|
79
66
|
session.on('Page.frameDetached', (event) => {
|
|
80
|
-
|
|
67
|
+
this.#onFrameDetached(event.frameId, event.reason);
|
|
81
68
|
});
|
|
82
69
|
session.on('Page.frameStartedLoading', (event) => {
|
|
83
|
-
|
|
70
|
+
this.#onFrameStartedLoading(event.frameId);
|
|
84
71
|
});
|
|
85
72
|
session.on('Page.frameStoppedLoading', (event) => {
|
|
86
|
-
|
|
73
|
+
this.#onFrameStoppedLoading(event.frameId);
|
|
87
74
|
});
|
|
88
75
|
session.on('Runtime.executionContextCreated', (event) => {
|
|
89
|
-
|
|
76
|
+
this.#onExecutionContextCreated(event.context, session);
|
|
90
77
|
});
|
|
91
78
|
session.on('Runtime.executionContextDestroyed', (event) => {
|
|
92
|
-
|
|
79
|
+
this.#onExecutionContextDestroyed(event.executionContextId, session);
|
|
93
80
|
});
|
|
94
81
|
session.on('Runtime.executionContextsCleared', () => {
|
|
95
|
-
|
|
82
|
+
this.#onExecutionContextsCleared(session);
|
|
96
83
|
});
|
|
97
84
|
session.on('Page.lifecycleEvent', (event) => {
|
|
98
|
-
|
|
85
|
+
this.#onLifecycleEvent(event);
|
|
99
86
|
});
|
|
100
87
|
session.on('Target.attachedToTarget', (event) => {
|
|
101
|
-
|
|
88
|
+
this.#onAttachedToTarget(event);
|
|
102
89
|
});
|
|
103
90
|
session.on('Target.detachedFromTarget', (event) => {
|
|
104
|
-
|
|
91
|
+
this.#onDetachedFromTarget(event);
|
|
105
92
|
});
|
|
106
93
|
}
|
|
107
|
-
async initialize(client =
|
|
94
|
+
async initialize(client = this.#client) {
|
|
108
95
|
try {
|
|
109
96
|
const result = await Promise.all([
|
|
110
97
|
client.send('Page.enable'),
|
|
111
98
|
client.send('Page.getFrameTree'),
|
|
112
|
-
client ===
|
|
99
|
+
client === this.#client
|
|
113
100
|
? Promise.resolve()
|
|
114
101
|
: client.send('Target.setAutoAttach', {
|
|
115
102
|
autoAttach: true,
|
|
@@ -118,14 +105,14 @@ class FrameManager extends EventEmitter_1.EventEmitter {
|
|
|
118
105
|
}),
|
|
119
106
|
]);
|
|
120
107
|
const { value: { frameTree }, } = result[1];
|
|
121
|
-
|
|
108
|
+
this.#handleFrameTree(client, frameTree);
|
|
122
109
|
await Promise.all([
|
|
123
110
|
client.send('Page.setLifecycleEventsEnabled', { enabled: true }),
|
|
124
111
|
client.send('Runtime.enable').then(() => {
|
|
125
112
|
return this._ensureIsolatedWorld(client, UTILITY_WORLD_NAME);
|
|
126
113
|
}),
|
|
127
|
-
client ===
|
|
128
|
-
?
|
|
114
|
+
client === this.#client
|
|
115
|
+
? this.#networkManager.initialize()
|
|
129
116
|
: Promise.resolve(),
|
|
130
117
|
]);
|
|
131
118
|
}
|
|
@@ -138,13 +125,13 @@ class FrameManager extends EventEmitter_1.EventEmitter {
|
|
|
138
125
|
}
|
|
139
126
|
}
|
|
140
127
|
networkManager() {
|
|
141
|
-
return
|
|
128
|
+
return this.#networkManager;
|
|
142
129
|
}
|
|
143
130
|
async navigateFrame(frame, url, timeout, options = {}) {
|
|
144
131
|
const { referer = undefined, waitUntil = 'load' } = options;
|
|
145
132
|
const watcher = new LifecycleWatcher_1.LifecycleWatcher(this, frame, waitUntil, timeout);
|
|
146
133
|
let error = await Promise.race([
|
|
147
|
-
navigate(
|
|
134
|
+
navigate(this.#client, url, referer, frame._id),
|
|
148
135
|
watcher.timeoutOrTerminationPromise(),
|
|
149
136
|
]);
|
|
150
137
|
if (!error) {
|
|
@@ -178,25 +165,134 @@ class FrameManager extends EventEmitter_1.EventEmitter {
|
|
|
178
165
|
}
|
|
179
166
|
}
|
|
180
167
|
}
|
|
168
|
+
async #onAttachedToTarget(event) {
|
|
169
|
+
if (event.targetInfo.type !== 'iframe') {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
const frame = this.#frames.get(event.targetInfo.targetId);
|
|
173
|
+
const connection = Connection_1.Connection.fromSession(this.#client);
|
|
174
|
+
(0, assert_1.assert)(connection);
|
|
175
|
+
const session = connection.session(event.sessionId);
|
|
176
|
+
(0, assert_1.assert)(session);
|
|
177
|
+
if (frame) {
|
|
178
|
+
frame._updateClient(session);
|
|
179
|
+
}
|
|
180
|
+
this.setupEventListeners(session);
|
|
181
|
+
await this.initialize(session);
|
|
182
|
+
}
|
|
183
|
+
#onDetachedFromTarget(event) {
|
|
184
|
+
if (!event.targetId) {
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
const frame = this.#frames.get(event.targetId);
|
|
188
|
+
if (frame === null || frame === void 0 ? void 0 : frame.isOOPFrame()) {
|
|
189
|
+
// When an OOP iframe is removed from the page, it
|
|
190
|
+
// will only get a Target.detachedFromTarget event.
|
|
191
|
+
this.#removeFramesRecursively(frame);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
#onLifecycleEvent(event) {
|
|
195
|
+
const frame = this.#frames.get(event.frameId);
|
|
196
|
+
if (!frame) {
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
frame._onLifecycleEvent(event.loaderId, event.name);
|
|
200
|
+
this.emit(exports.FrameManagerEmittedEvents.LifecycleEvent, frame);
|
|
201
|
+
}
|
|
202
|
+
#onFrameStartedLoading(frameId) {
|
|
203
|
+
const frame = this.#frames.get(frameId);
|
|
204
|
+
if (!frame) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
frame._onLoadingStarted();
|
|
208
|
+
}
|
|
209
|
+
#onFrameStoppedLoading(frameId) {
|
|
210
|
+
const frame = this.#frames.get(frameId);
|
|
211
|
+
if (!frame) {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
frame._onLoadingStopped();
|
|
215
|
+
this.emit(exports.FrameManagerEmittedEvents.LifecycleEvent, frame);
|
|
216
|
+
}
|
|
217
|
+
#handleFrameTree(session, frameTree) {
|
|
218
|
+
if (frameTree.frame.parentId) {
|
|
219
|
+
this.#onFrameAttached(session, frameTree.frame.id, frameTree.frame.parentId);
|
|
220
|
+
}
|
|
221
|
+
this.#onFrameNavigated(frameTree.frame);
|
|
222
|
+
if (!frameTree.childFrames) {
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
for (const child of frameTree.childFrames) {
|
|
226
|
+
this.#handleFrameTree(session, child);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
181
229
|
page() {
|
|
182
|
-
return
|
|
230
|
+
return this.#page;
|
|
183
231
|
}
|
|
184
232
|
mainFrame() {
|
|
185
|
-
(0, assert_1.assert)(
|
|
186
|
-
return
|
|
233
|
+
(0, assert_1.assert)(this.#mainFrame, 'Requesting main frame too early!');
|
|
234
|
+
return this.#mainFrame;
|
|
187
235
|
}
|
|
188
236
|
frames() {
|
|
189
|
-
return Array.from(
|
|
237
|
+
return Array.from(this.#frames.values());
|
|
190
238
|
}
|
|
191
239
|
frame(frameId) {
|
|
192
|
-
return
|
|
240
|
+
return this.#frames.get(frameId) || null;
|
|
241
|
+
}
|
|
242
|
+
#onFrameAttached(session, frameId, parentFrameId) {
|
|
243
|
+
if (this.#frames.has(frameId)) {
|
|
244
|
+
const _frame = this.#frames.get(frameId);
|
|
245
|
+
if (session && _frame.isOOPFrame()) {
|
|
246
|
+
// If an OOP iframes becomes a normal iframe again
|
|
247
|
+
// it is first attached to the parent page before
|
|
248
|
+
// the target is removed.
|
|
249
|
+
_frame._updateClient(session);
|
|
250
|
+
}
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
(0, assert_1.assert)(parentFrameId);
|
|
254
|
+
const parentFrame = this.#frames.get(parentFrameId);
|
|
255
|
+
(0, assert_1.assert)(parentFrame);
|
|
256
|
+
const frame = new Frame(this, parentFrame, frameId, session);
|
|
257
|
+
this.#frames.set(frame._id, frame);
|
|
258
|
+
}
|
|
259
|
+
#onFrameNavigated(framePayload) {
|
|
260
|
+
const isMainFrame = !framePayload.parentId;
|
|
261
|
+
let frame = isMainFrame
|
|
262
|
+
? this.#mainFrame
|
|
263
|
+
: this.#frames.get(framePayload.id);
|
|
264
|
+
(0, assert_1.assert)(isMainFrame || frame, 'We either navigate top level or have old version of the navigated frame');
|
|
265
|
+
// Detach all child frames first.
|
|
266
|
+
if (frame) {
|
|
267
|
+
for (const child of frame.childFrames()) {
|
|
268
|
+
this.#removeFramesRecursively(child);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
// Update or create main frame.
|
|
272
|
+
if (isMainFrame) {
|
|
273
|
+
if (frame) {
|
|
274
|
+
// Update frame id to retain frame identity on cross-process navigation.
|
|
275
|
+
this.#frames.delete(frame._id);
|
|
276
|
+
frame._id = framePayload.id;
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
// Initial main frame navigation.
|
|
280
|
+
frame = new Frame(this, null, framePayload.id, this.#client);
|
|
281
|
+
}
|
|
282
|
+
this.#frames.set(framePayload.id, frame);
|
|
283
|
+
this.#mainFrame = frame;
|
|
284
|
+
}
|
|
285
|
+
// Update frame payload.
|
|
286
|
+
(0, assert_1.assert)(frame);
|
|
287
|
+
frame._navigated(framePayload);
|
|
288
|
+
this.emit(exports.FrameManagerEmittedEvents.FrameNavigated, frame);
|
|
193
289
|
}
|
|
194
290
|
async _ensureIsolatedWorld(session, name) {
|
|
195
291
|
const key = `${session.id()}:${name}`;
|
|
196
|
-
if (
|
|
292
|
+
if (this.#isolatedWorlds.has(key)) {
|
|
197
293
|
return;
|
|
198
294
|
}
|
|
199
|
-
|
|
295
|
+
this.#isolatedWorlds.add(key);
|
|
200
296
|
await session.send('Page.addScriptToEvaluateOnNewDocument', {
|
|
201
297
|
source: `//# sourceURL=${ExecutionContext_1.EVALUATION_SCRIPT_URL}`,
|
|
202
298
|
worldName: name,
|
|
@@ -216,225 +312,135 @@ class FrameManager extends EventEmitter_1.EventEmitter {
|
|
|
216
312
|
.catch(() => undefined);
|
|
217
313
|
}));
|
|
218
314
|
}
|
|
219
|
-
|
|
220
|
-
const
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
return context;
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
exports.FrameManager = FrameManager;
|
|
227
|
-
_FrameManager_page = new WeakMap(), _FrameManager_networkManager = new WeakMap(), _FrameManager_frames = new WeakMap(), _FrameManager_contextIdToContext = new WeakMap(), _FrameManager_isolatedWorlds = new WeakMap(), _FrameManager_mainFrame = new WeakMap(), _FrameManager_client = new WeakMap(), _FrameManager_instances = new WeakSet(), _FrameManager_onAttachedToTarget = async function _FrameManager_onAttachedToTarget(event) {
|
|
228
|
-
if (event.targetInfo.type !== 'iframe') {
|
|
229
|
-
return;
|
|
230
|
-
}
|
|
231
|
-
const frame = __classPrivateFieldGet(this, _FrameManager_frames, "f").get(event.targetInfo.targetId);
|
|
232
|
-
const connection = Connection_1.Connection.fromSession(__classPrivateFieldGet(this, _FrameManager_client, "f"));
|
|
233
|
-
(0, assert_1.assert)(connection);
|
|
234
|
-
const session = connection.session(event.sessionId);
|
|
235
|
-
(0, assert_1.assert)(session);
|
|
236
|
-
if (frame) {
|
|
237
|
-
frame._updateClient(session);
|
|
238
|
-
}
|
|
239
|
-
this.setupEventListeners(session);
|
|
240
|
-
await this.initialize(session);
|
|
241
|
-
}, _FrameManager_onDetachedFromTarget = function _FrameManager_onDetachedFromTarget(event) {
|
|
242
|
-
if (!event.targetId) {
|
|
243
|
-
return;
|
|
244
|
-
}
|
|
245
|
-
const frame = __classPrivateFieldGet(this, _FrameManager_frames, "f").get(event.targetId);
|
|
246
|
-
if (frame === null || frame === void 0 ? void 0 : frame.isOOPFrame()) {
|
|
247
|
-
// When an OOP iframe is removed from the page, it
|
|
248
|
-
// will only get a Target.detachedFromTarget event.
|
|
249
|
-
__classPrivateFieldGet(this, _FrameManager_instances, "m", _FrameManager_removeFramesRecursively).call(this, frame);
|
|
250
|
-
}
|
|
251
|
-
}, _FrameManager_onLifecycleEvent = function _FrameManager_onLifecycleEvent(event) {
|
|
252
|
-
const frame = __classPrivateFieldGet(this, _FrameManager_frames, "f").get(event.frameId);
|
|
253
|
-
if (!frame) {
|
|
254
|
-
return;
|
|
255
|
-
}
|
|
256
|
-
frame._onLifecycleEvent(event.loaderId, event.name);
|
|
257
|
-
this.emit(exports.FrameManagerEmittedEvents.LifecycleEvent, frame);
|
|
258
|
-
}, _FrameManager_onFrameStartedLoading = function _FrameManager_onFrameStartedLoading(frameId) {
|
|
259
|
-
const frame = __classPrivateFieldGet(this, _FrameManager_frames, "f").get(frameId);
|
|
260
|
-
if (!frame) {
|
|
261
|
-
return;
|
|
262
|
-
}
|
|
263
|
-
frame._onLoadingStarted();
|
|
264
|
-
}, _FrameManager_onFrameStoppedLoading = function _FrameManager_onFrameStoppedLoading(frameId) {
|
|
265
|
-
const frame = __classPrivateFieldGet(this, _FrameManager_frames, "f").get(frameId);
|
|
266
|
-
if (!frame) {
|
|
267
|
-
return;
|
|
268
|
-
}
|
|
269
|
-
frame._onLoadingStopped();
|
|
270
|
-
this.emit(exports.FrameManagerEmittedEvents.LifecycleEvent, frame);
|
|
271
|
-
}, _FrameManager_handleFrameTree = function _FrameManager_handleFrameTree(session, frameTree) {
|
|
272
|
-
if (frameTree.frame.parentId) {
|
|
273
|
-
__classPrivateFieldGet(this, _FrameManager_instances, "m", _FrameManager_onFrameAttached).call(this, session, frameTree.frame.id, frameTree.frame.parentId);
|
|
274
|
-
}
|
|
275
|
-
__classPrivateFieldGet(this, _FrameManager_instances, "m", _FrameManager_onFrameNavigated).call(this, frameTree.frame);
|
|
276
|
-
if (!frameTree.childFrames) {
|
|
277
|
-
return;
|
|
278
|
-
}
|
|
279
|
-
for (const child of frameTree.childFrames) {
|
|
280
|
-
__classPrivateFieldGet(this, _FrameManager_instances, "m", _FrameManager_handleFrameTree).call(this, session, child);
|
|
281
|
-
}
|
|
282
|
-
}, _FrameManager_onFrameAttached = function _FrameManager_onFrameAttached(session, frameId, parentFrameId) {
|
|
283
|
-
if (__classPrivateFieldGet(this, _FrameManager_frames, "f").has(frameId)) {
|
|
284
|
-
const _frame = __classPrivateFieldGet(this, _FrameManager_frames, "f").get(frameId);
|
|
285
|
-
if (session && _frame.isOOPFrame()) {
|
|
286
|
-
// If an OOP iframes becomes a normal iframe again
|
|
287
|
-
// it is first attached to the parent page before
|
|
288
|
-
// the target is removed.
|
|
289
|
-
_frame._updateClient(session);
|
|
315
|
+
#onFrameNavigatedWithinDocument(frameId, url) {
|
|
316
|
+
const frame = this.#frames.get(frameId);
|
|
317
|
+
if (!frame) {
|
|
318
|
+
return;
|
|
290
319
|
}
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
(
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
__classPrivateFieldGet(this, _FrameManager_instances, "m", _FrameManager_removeFramesRecursively).call(this, child);
|
|
320
|
+
frame._navigatedWithinDocument(url);
|
|
321
|
+
this.emit(exports.FrameManagerEmittedEvents.FrameNavigatedWithinDocument, frame);
|
|
322
|
+
this.emit(exports.FrameManagerEmittedEvents.FrameNavigated, frame);
|
|
323
|
+
}
|
|
324
|
+
#onFrameDetached(frameId, reason) {
|
|
325
|
+
const frame = this.#frames.get(frameId);
|
|
326
|
+
if (reason === 'remove') {
|
|
327
|
+
// Only remove the frame if the reason for the detached event is
|
|
328
|
+
// an actual removement of the frame.
|
|
329
|
+
// For frames that become OOP iframes, the reason would be 'swap'.
|
|
330
|
+
if (frame) {
|
|
331
|
+
this.#removeFramesRecursively(frame);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
else if (reason === 'swap') {
|
|
335
|
+
this.emit(exports.FrameManagerEmittedEvents.FrameSwapped, frame);
|
|
308
336
|
}
|
|
309
337
|
}
|
|
310
|
-
|
|
311
|
-
|
|
338
|
+
#onExecutionContextCreated(contextPayload, session) {
|
|
339
|
+
const auxData = contextPayload.auxData;
|
|
340
|
+
const frameId = auxData === null || auxData === void 0 ? void 0 : auxData.frameId;
|
|
341
|
+
const frame = typeof frameId === 'string' ? this.#frames.get(frameId) : undefined;
|
|
342
|
+
let world;
|
|
312
343
|
if (frame) {
|
|
313
|
-
//
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
344
|
+
// Only care about execution contexts created for the current session.
|
|
345
|
+
if (frame._client() !== session) {
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
if (contextPayload.auxData && Boolean(contextPayload.auxData.isDefault)) {
|
|
349
|
+
world = frame._mainWorld;
|
|
350
|
+
}
|
|
351
|
+
else if (contextPayload.name === UTILITY_WORLD_NAME &&
|
|
352
|
+
!frame._secondaryWorld._hasContext()) {
|
|
353
|
+
// In case of multiple sessions to the same target, there's a race between
|
|
354
|
+
// connections so we might end up creating multiple isolated worlds.
|
|
355
|
+
// We can use either.
|
|
356
|
+
world = frame._secondaryWorld;
|
|
357
|
+
}
|
|
320
358
|
}
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
// Update frame payload.
|
|
325
|
-
(0, assert_1.assert)(frame);
|
|
326
|
-
frame._navigated(framePayload);
|
|
327
|
-
this.emit(exports.FrameManagerEmittedEvents.FrameNavigated, frame);
|
|
328
|
-
}, _FrameManager_onFrameNavigatedWithinDocument = function _FrameManager_onFrameNavigatedWithinDocument(frameId, url) {
|
|
329
|
-
const frame = __classPrivateFieldGet(this, _FrameManager_frames, "f").get(frameId);
|
|
330
|
-
if (!frame) {
|
|
331
|
-
return;
|
|
332
|
-
}
|
|
333
|
-
frame._navigatedWithinDocument(url);
|
|
334
|
-
this.emit(exports.FrameManagerEmittedEvents.FrameNavigatedWithinDocument, frame);
|
|
335
|
-
this.emit(exports.FrameManagerEmittedEvents.FrameNavigated, frame);
|
|
336
|
-
}, _FrameManager_onFrameDetached = function _FrameManager_onFrameDetached(frameId, reason) {
|
|
337
|
-
const frame = __classPrivateFieldGet(this, _FrameManager_frames, "f").get(frameId);
|
|
338
|
-
if (reason === 'remove') {
|
|
339
|
-
// Only remove the frame if the reason for the detached event is
|
|
340
|
-
// an actual removement of the frame.
|
|
341
|
-
// For frames that become OOP iframes, the reason would be 'swap'.
|
|
342
|
-
if (frame) {
|
|
343
|
-
__classPrivateFieldGet(this, _FrameManager_instances, "m", _FrameManager_removeFramesRecursively).call(this, frame);
|
|
359
|
+
const context = new ExecutionContext_1.ExecutionContext((frame === null || frame === void 0 ? void 0 : frame._client()) || this.#client, contextPayload, world);
|
|
360
|
+
if (world) {
|
|
361
|
+
world._setContext(context);
|
|
344
362
|
}
|
|
363
|
+
const key = `${session.id()}:${contextPayload.id}`;
|
|
364
|
+
this.#contextIdToContext.set(key, context);
|
|
345
365
|
}
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
const auxData = contextPayload.auxData;
|
|
351
|
-
const frameId = auxData === null || auxData === void 0 ? void 0 : auxData.frameId;
|
|
352
|
-
const frame = typeof frameId === 'string' ? __classPrivateFieldGet(this, _FrameManager_frames, "f").get(frameId) : undefined;
|
|
353
|
-
let world;
|
|
354
|
-
if (frame) {
|
|
355
|
-
// Only care about execution contexts created for the current session.
|
|
356
|
-
if (frame._client() !== session) {
|
|
366
|
+
#onExecutionContextDestroyed(executionContextId, session) {
|
|
367
|
+
const key = `${session.id()}:${executionContextId}`;
|
|
368
|
+
const context = this.#contextIdToContext.get(key);
|
|
369
|
+
if (!context) {
|
|
357
370
|
return;
|
|
358
371
|
}
|
|
359
|
-
|
|
360
|
-
world = frame._mainWorld;
|
|
361
|
-
}
|
|
362
|
-
else if (contextPayload.name === UTILITY_WORLD_NAME &&
|
|
363
|
-
!frame._secondaryWorld._hasContext()) {
|
|
364
|
-
// In case of multiple sessions to the same target, there's a race between
|
|
365
|
-
// connections so we might end up creating multiple isolated worlds.
|
|
366
|
-
// We can use either.
|
|
367
|
-
world = frame._secondaryWorld;
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
const context = new ExecutionContext_1.ExecutionContext((frame === null || frame === void 0 ? void 0 : frame._client()) || __classPrivateFieldGet(this, _FrameManager_client, "f"), contextPayload, world);
|
|
371
|
-
if (world) {
|
|
372
|
-
world._setContext(context);
|
|
373
|
-
}
|
|
374
|
-
const key = `${session.id()}:${contextPayload.id}`;
|
|
375
|
-
__classPrivateFieldGet(this, _FrameManager_contextIdToContext, "f").set(key, context);
|
|
376
|
-
}, _FrameManager_onExecutionContextDestroyed = function _FrameManager_onExecutionContextDestroyed(executionContextId, session) {
|
|
377
|
-
const key = `${session.id()}:${executionContextId}`;
|
|
378
|
-
const context = __classPrivateFieldGet(this, _FrameManager_contextIdToContext, "f").get(key);
|
|
379
|
-
if (!context) {
|
|
380
|
-
return;
|
|
381
|
-
}
|
|
382
|
-
__classPrivateFieldGet(this, _FrameManager_contextIdToContext, "f").delete(key);
|
|
383
|
-
if (context._world) {
|
|
384
|
-
context._world._setContext(null);
|
|
385
|
-
}
|
|
386
|
-
}, _FrameManager_onExecutionContextsCleared = function _FrameManager_onExecutionContextsCleared(session) {
|
|
387
|
-
for (const [key, context] of __classPrivateFieldGet(this, _FrameManager_contextIdToContext, "f").entries()) {
|
|
388
|
-
// Make sure to only clear execution contexts that belong
|
|
389
|
-
// to the current session.
|
|
390
|
-
if (context._client !== session) {
|
|
391
|
-
continue;
|
|
392
|
-
}
|
|
372
|
+
this.#contextIdToContext.delete(key);
|
|
393
373
|
if (context._world) {
|
|
394
374
|
context._world._setContext(null);
|
|
395
375
|
}
|
|
396
|
-
__classPrivateFieldGet(this, _FrameManager_contextIdToContext, "f").delete(key);
|
|
397
376
|
}
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
377
|
+
#onExecutionContextsCleared(session) {
|
|
378
|
+
for (const [key, context] of this.#contextIdToContext.entries()) {
|
|
379
|
+
// Make sure to only clear execution contexts that belong
|
|
380
|
+
// to the current session.
|
|
381
|
+
if (context._client !== session) {
|
|
382
|
+
continue;
|
|
383
|
+
}
|
|
384
|
+
if (context._world) {
|
|
385
|
+
context._world._setContext(null);
|
|
386
|
+
}
|
|
387
|
+
this.#contextIdToContext.delete(key);
|
|
388
|
+
}
|
|
401
389
|
}
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
390
|
+
executionContextById(contextId, session = this.#client) {
|
|
391
|
+
const key = `${session.id()}:${contextId}`;
|
|
392
|
+
const context = this.#contextIdToContext.get(key);
|
|
393
|
+
(0, assert_1.assert)(context, 'INTERNAL ERROR: missing context with id = ' + contextId);
|
|
394
|
+
return context;
|
|
395
|
+
}
|
|
396
|
+
#removeFramesRecursively(frame) {
|
|
397
|
+
for (const child of frame.childFrames()) {
|
|
398
|
+
this.#removeFramesRecursively(child);
|
|
399
|
+
}
|
|
400
|
+
frame._detach();
|
|
401
|
+
this.#frames.delete(frame._id);
|
|
402
|
+
this.emit(exports.FrameManagerEmittedEvents.FrameDetached, frame);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
exports.FrameManager = FrameManager;
|
|
406
406
|
class Frame {
|
|
407
|
+
#parentFrame;
|
|
408
|
+
#url = '';
|
|
409
|
+
#client;
|
|
410
|
+
_frameManager;
|
|
411
|
+
_id;
|
|
412
|
+
_loaderId = '';
|
|
413
|
+
_name;
|
|
414
|
+
_hasStartedLoading = false;
|
|
415
|
+
_lifecycleEvents = new Set();
|
|
416
|
+
_mainWorld;
|
|
417
|
+
_secondaryWorld;
|
|
418
|
+
_childFrames;
|
|
407
419
|
constructor(frameManager, parentFrame, frameId, client) {
|
|
408
|
-
_Frame_parentFrame.set(this, void 0);
|
|
409
|
-
_Frame_url.set(this, '');
|
|
410
|
-
_Frame_client.set(this, void 0);
|
|
411
|
-
this._loaderId = '';
|
|
412
|
-
this._hasStartedLoading = false;
|
|
413
|
-
this._lifecycleEvents = new Set();
|
|
414
420
|
this._frameManager = frameManager;
|
|
415
|
-
|
|
416
|
-
|
|
421
|
+
this.#parentFrame = parentFrame !== null && parentFrame !== void 0 ? parentFrame : null;
|
|
422
|
+
this.#url = '';
|
|
417
423
|
this._id = frameId;
|
|
418
424
|
this._loaderId = '';
|
|
419
425
|
this._childFrames = new Set();
|
|
420
|
-
if (
|
|
421
|
-
|
|
426
|
+
if (this.#parentFrame) {
|
|
427
|
+
this.#parentFrame._childFrames.add(this);
|
|
422
428
|
}
|
|
423
429
|
this._updateClient(client);
|
|
424
430
|
}
|
|
425
431
|
_updateClient(client) {
|
|
426
|
-
|
|
432
|
+
this.#client = client;
|
|
427
433
|
this._mainWorld = new DOMWorld_1.DOMWorld(this);
|
|
428
434
|
this._secondaryWorld = new DOMWorld_1.DOMWorld(this);
|
|
429
435
|
}
|
|
430
436
|
isOOPFrame() {
|
|
431
|
-
return
|
|
437
|
+
return this.#client !== this._frameManager._client;
|
|
432
438
|
}
|
|
433
439
|
goto(url, timeout, options = {}) {
|
|
434
440
|
return this._frameManager.navigateFrame(this, url, timeout, options);
|
|
435
441
|
}
|
|
436
442
|
_client() {
|
|
437
|
-
return
|
|
443
|
+
return this.#client;
|
|
438
444
|
}
|
|
439
445
|
/**
|
|
440
446
|
* @returns a promise that resolves to the frame's default execution context.
|
|
@@ -449,17 +455,17 @@ class Frame {
|
|
|
449
455
|
return this._mainWorld.evaluate(pageFunction, ...args);
|
|
450
456
|
}
|
|
451
457
|
url() {
|
|
452
|
-
return
|
|
458
|
+
return this.#url;
|
|
453
459
|
}
|
|
454
460
|
childFrames() {
|
|
455
461
|
return Array.from(this._childFrames);
|
|
456
462
|
}
|
|
457
463
|
_navigated(framePayload) {
|
|
458
464
|
this._name = framePayload.name;
|
|
459
|
-
|
|
465
|
+
this.#url = `${framePayload.url}${framePayload.urlFragment || ''}`;
|
|
460
466
|
}
|
|
461
467
|
_navigatedWithinDocument(url) {
|
|
462
|
-
|
|
468
|
+
this.#url = url;
|
|
463
469
|
}
|
|
464
470
|
_onLifecycleEvent(loaderId, name) {
|
|
465
471
|
if (name === 'init') {
|
|
@@ -477,11 +483,10 @@ class Frame {
|
|
|
477
483
|
_detach() {
|
|
478
484
|
this._mainWorld._detach();
|
|
479
485
|
this._secondaryWorld._detach();
|
|
480
|
-
if (
|
|
481
|
-
|
|
486
|
+
if (this.#parentFrame) {
|
|
487
|
+
this.#parentFrame._childFrames.delete(this);
|
|
482
488
|
}
|
|
483
|
-
|
|
489
|
+
this.#parentFrame = null;
|
|
484
490
|
}
|
|
485
491
|
}
|
|
486
492
|
exports.Frame = Frame;
|
|
487
|
-
_Frame_parentFrame = new WeakMap(), _Frame_url = new WeakMap(), _Frame_client = new WeakMap();
|