summaryrefslogtreecommitdiffstats
path: root/remote/test/puppeteer/packages/puppeteer-core/src/bidi/core/Session.ts
diff options
context:
space:
mode:
Diffstat (limited to 'remote/test/puppeteer/packages/puppeteer-core/src/bidi/core/Session.ts')
-rw-r--r--remote/test/puppeteer/packages/puppeteer-core/src/bidi/core/Session.ts28
1 files changed, 20 insertions, 8 deletions
diff --git a/remote/test/puppeteer/packages/puppeteer-core/src/bidi/core/Session.ts b/remote/test/puppeteer/packages/puppeteer-core/src/bidi/core/Session.ts
index b6e28061f1..ffd39769e7 100644
--- a/remote/test/puppeteer/packages/puppeteer-core/src/bidi/core/Session.ts
+++ b/remote/test/puppeteer/packages/puppeteer-core/src/bidi/core/Session.ts
@@ -8,7 +8,11 @@ import type * as Bidi from 'chromium-bidi/lib/cjs/protocol/protocol.js';
import {EventEmitter} from '../../common/EventEmitter.js';
import {debugError} from '../../common/util.js';
-import {inertIfDisposed, throwIfDisposed} from '../../util/decorators.js';
+import {
+ bubble,
+ inertIfDisposed,
+ throwIfDisposed,
+} from '../../util/decorators.js';
import {DisposableStack, disposeSymbol} from '../../util/disposable.js';
import {Browser} from './Browser.js';
@@ -81,7 +85,8 @@ export class Session
readonly #disposables = new DisposableStack();
readonly #info: Bidi.Session.NewResult;
readonly browser!: Browser;
- readonly connection: Connection;
+ @bubble()
+ accessor connection: Connection;
// keep-sorted end
private constructor(connection: Connection, info: Bidi.Session.NewResult) {
@@ -93,8 +98,6 @@ export class Session
}
async #initialize(): Promise<void> {
- this.connection.pipeTo(this);
-
// SAFETY: We use `any` to allow assignment of the readonly property.
(this as any).browser = await Browser.from(this);
@@ -102,6 +105,19 @@ export class Session
browserEmitter.once('closed', ({reason}) => {
this.dispose(reason);
});
+
+ // TODO: Currently, some implementations do not emit navigationStarted event
+ // for fragment navigations (as per spec) and some do. This could emits a
+ // synthetic navigationStarted to work around this inconsistency.
+ const seen = new WeakSet();
+ this.on('browsingContext.fragmentNavigated', info => {
+ if (seen.has(info)) {
+ return;
+ }
+ seen.add(info);
+ this.emit('browsingContext.navigationStarted', info);
+ this.emit('browsingContext.fragmentNavigated', info);
+ });
}
// keep-sorted start block=yes
@@ -125,10 +141,6 @@ export class Session
this[disposeSymbol]();
}
- pipeTo<Events extends BidiEvents>(emitter: EventEmitter<Events>): void {
- this.connection.pipeTo(emitter);
- }
-
/**
* Currently, there is a 1:1 relationship between the session and the
* session. In the future, we might support multiple sessions and in that