Skip to content

Commit 1c4619e

Browse files
authored
fix(chromium/webkit): fix a race between Page.enable and Page.getResourceTree (#1201)
1 parent 15c70c9 commit 1c4619e

File tree

1 file changed

+22
-23
lines changed

1 file changed

+22
-23
lines changed

src/chromium/crPage.ts

+22-23
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ export class CRPage implements PageDelegate {
4747
readonly _networkManager: CRNetworkManager;
4848
private _contextIdToContext = new Map<number, dom.FrameExecutionContext>();
4949
private _isolatedWorlds = new Set<string>();
50-
private _eventListeners: RegisteredListener[];
50+
private _eventListeners: RegisteredListener[] = [];
5151
rawMouse: RawMouseImpl;
5252
rawKeyboard: RawKeyboardImpl;
5353
private _browser: CRBrowser;
@@ -65,35 +65,34 @@ export class CRPage implements PageDelegate {
6565
this._browserContext = browserContext;
6666
this._page = new Page(this, browserContext);
6767
this._networkManager = new CRNetworkManager(client, this._page);
68-
69-
this._eventListeners = [
70-
helper.addEventListener(client, 'Inspector.targetCrashed', event => this._onTargetCrashed()),
71-
helper.addEventListener(client, 'Log.entryAdded', event => this._onLogEntryAdded(event)),
72-
helper.addEventListener(client, 'Page.fileChooserOpened', event => this._onFileChooserOpened(event)),
73-
helper.addEventListener(client, 'Page.frameAttached', event => this._onFrameAttached(event.frameId, event.parentFrameId)),
74-
helper.addEventListener(client, 'Page.frameDetached', event => this._onFrameDetached(event.frameId)),
75-
helper.addEventListener(client, 'Page.frameNavigated', event => this._onFrameNavigated(event.frame, false)),
76-
helper.addEventListener(client, 'Page.frameStoppedLoading', event => this._onFrameStoppedLoading(event.frameId)),
77-
helper.addEventListener(client, 'Page.javascriptDialogOpening', event => this._onDialog(event)),
78-
helper.addEventListener(client, 'Page.lifecycleEvent', event => this._onLifecycleEvent(event)),
79-
helper.addEventListener(client, 'Page.navigatedWithinDocument', event => this._onFrameNavigatedWithinDocument(event.frameId, event.url)),
80-
helper.addEventListener(client, 'Runtime.bindingCalled', event => this._onBindingCalled(event)),
81-
helper.addEventListener(client, 'Runtime.consoleAPICalled', event => this._onConsoleAPI(event)),
82-
helper.addEventListener(client, 'Runtime.exceptionThrown', exception => this._handleException(exception.exceptionDetails)),
83-
helper.addEventListener(client, 'Runtime.executionContextCreated', event => this._onExecutionContextCreated(event.context)),
84-
helper.addEventListener(client, 'Runtime.executionContextDestroyed', event => this._onExecutionContextDestroyed(event.executionContextId)),
85-
helper.addEventListener(client, 'Runtime.executionContextsCleared', event => this._onExecutionContextsCleared()),
86-
helper.addEventListener(client, 'Target.attachedToTarget', event => this._onAttachedToTarget(event)),
87-
helper.addEventListener(client, 'Target.detachedFromTarget', event => this._onDetachedFromTarget(event)),
88-
];
8968
}
9069

9170
async initialize() {
92-
const [,{frameTree}] = await Promise.all([
71+
const [, { frameTree }] = await Promise.all([
9372
this._client.send('Page.enable'),
9473
this._client.send('Page.getFrameTree'),
9574
] as const);
9675
this._handleFrameTree(frameTree);
76+
this._eventListeners = [
77+
helper.addEventListener(this._client, 'Inspector.targetCrashed', event => this._onTargetCrashed()),
78+
helper.addEventListener(this._client, 'Log.entryAdded', event => this._onLogEntryAdded(event)),
79+
helper.addEventListener(this._client, 'Page.fileChooserOpened', event => this._onFileChooserOpened(event)),
80+
helper.addEventListener(this._client, 'Page.frameAttached', event => this._onFrameAttached(event.frameId, event.parentFrameId)),
81+
helper.addEventListener(this._client, 'Page.frameDetached', event => this._onFrameDetached(event.frameId)),
82+
helper.addEventListener(this._client, 'Page.frameNavigated', event => this._onFrameNavigated(event.frame, false)),
83+
helper.addEventListener(this._client, 'Page.frameStoppedLoading', event => this._onFrameStoppedLoading(event.frameId)),
84+
helper.addEventListener(this._client, 'Page.javascriptDialogOpening', event => this._onDialog(event)),
85+
helper.addEventListener(this._client, 'Page.lifecycleEvent', event => this._onLifecycleEvent(event)),
86+
helper.addEventListener(this._client, 'Page.navigatedWithinDocument', event => this._onFrameNavigatedWithinDocument(event.frameId, event.url)),
87+
helper.addEventListener(this._client, 'Runtime.bindingCalled', event => this._onBindingCalled(event)),
88+
helper.addEventListener(this._client, 'Runtime.consoleAPICalled', event => this._onConsoleAPI(event)),
89+
helper.addEventListener(this._client, 'Runtime.exceptionThrown', exception => this._handleException(exception.exceptionDetails)),
90+
helper.addEventListener(this._client, 'Runtime.executionContextCreated', event => this._onExecutionContextCreated(event.context)),
91+
helper.addEventListener(this._client, 'Runtime.executionContextDestroyed', event => this._onExecutionContextDestroyed(event.executionContextId)),
92+
helper.addEventListener(this._client, 'Runtime.executionContextsCleared', event => this._onExecutionContextsCleared()),
93+
helper.addEventListener(this._client, 'Target.attachedToTarget', event => this._onAttachedToTarget(event)),
94+
helper.addEventListener(this._client, 'Target.detachedFromTarget', event => this._onDetachedFromTarget(event)),
95+
];
9796
const promises: Promise<any>[] = [
9897
this._client.send('Log.enable', {}),
9998
this._client.send('Page.setLifecycleEventsEnabled', { enabled: true }),

0 commit comments

Comments
 (0)