summaryrefslogtreecommitdiffstats
path: root/remote/test/puppeteer/src/node/PipeTransport.ts
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
commit2aa4a82499d4becd2284cdb482213d541b8804dd (patch)
treeb80bf8bf13c3766139fbacc530efd0dd9d54394c /remote/test/puppeteer/src/node/PipeTransport.ts
parentInitial commit. (diff)
downloadfirefox-upstream.tar.xz
firefox-upstream.zip
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'remote/test/puppeteer/src/node/PipeTransport.ts')
-rw-r--r--remote/test/puppeteer/src/node/PipeTransport.ts80
1 files changed, 80 insertions, 0 deletions
diff --git a/remote/test/puppeteer/src/node/PipeTransport.ts b/remote/test/puppeteer/src/node/PipeTransport.ts
new file mode 100644
index 0000000000..e66c2c0b47
--- /dev/null
+++ b/remote/test/puppeteer/src/node/PipeTransport.ts
@@ -0,0 +1,80 @@
+/**
+ * Copyright 2018 Google Inc. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import {
+ helper,
+ debugError,
+ PuppeteerEventListener,
+} from '../common/helper.js';
+import { ConnectionTransport } from '../common/ConnectionTransport.js';
+
+export class PipeTransport implements ConnectionTransport {
+ _pipeWrite: NodeJS.WritableStream;
+ _pendingMessage: string;
+ _eventListeners: PuppeteerEventListener[];
+
+ onclose?: () => void;
+ onmessage?: () => void;
+
+ constructor(
+ pipeWrite: NodeJS.WritableStream,
+ pipeRead: NodeJS.ReadableStream
+ ) {
+ this._pipeWrite = pipeWrite;
+ this._pendingMessage = '';
+ this._eventListeners = [
+ helper.addEventListener(pipeRead, 'data', (buffer) =>
+ this._dispatch(buffer)
+ ),
+ helper.addEventListener(pipeRead, 'close', () => {
+ if (this.onclose) this.onclose.call(null);
+ }),
+ helper.addEventListener(pipeRead, 'error', debugError),
+ helper.addEventListener(pipeWrite, 'error', debugError),
+ ];
+ this.onmessage = null;
+ this.onclose = null;
+ }
+
+ send(message: string): void {
+ this._pipeWrite.write(message);
+ this._pipeWrite.write('\0');
+ }
+
+ _dispatch(buffer: Buffer): void {
+ let end = buffer.indexOf('\0');
+ if (end === -1) {
+ this._pendingMessage += buffer.toString();
+ return;
+ }
+ const message = this._pendingMessage + buffer.toString(undefined, 0, end);
+ if (this.onmessage) this.onmessage.call(null, message);
+
+ let start = end + 1;
+ end = buffer.indexOf('\0', start);
+ while (end !== -1) {
+ if (this.onmessage)
+ this.onmessage.call(null, buffer.toString(undefined, start, end));
+ start = end + 1;
+ end = buffer.indexOf('\0', start);
+ }
+ this._pendingMessage = buffer.toString(undefined, start);
+ }
+
+ close(): void {
+ this._pipeWrite = null;
+ helper.removeEventListeners(this._eventListeners);
+ }
+}