tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

JSHandle.ts (2125B)


      1 /**
      2 * @license
      3 * Copyright 2023 Google Inc.
      4 * SPDX-License-Identifier: Apache-2.0
      5 */
      6 
      7 import type * as Bidi from 'chromium-bidi/lib/cjs/protocol/protocol.js';
      8 
      9 import type {ElementHandle} from '../api/ElementHandle.js';
     10 import {JSHandle} from '../api/JSHandle.js';
     11 import {UnsupportedOperation} from '../common/Errors.js';
     12 
     13 import {BidiDeserializer} from './Deserializer.js';
     14 import type {BidiRealm} from './Realm.js';
     15 
     16 /**
     17 * @internal
     18 */
     19 export class BidiJSHandle<T = unknown> extends JSHandle<T> {
     20  static from<T>(
     21    value: Bidi.Script.RemoteValue,
     22    realm: BidiRealm,
     23  ): BidiJSHandle<T> {
     24    return new BidiJSHandle(value, realm);
     25  }
     26 
     27  readonly #remoteValue: Bidi.Script.RemoteValue;
     28 
     29  override readonly realm: BidiRealm;
     30 
     31  #disposed = false;
     32 
     33  constructor(value: Bidi.Script.RemoteValue, realm: BidiRealm) {
     34    super();
     35    this.#remoteValue = value;
     36    this.realm = realm;
     37  }
     38 
     39  override get disposed(): boolean {
     40    return this.#disposed;
     41  }
     42 
     43  override async jsonValue(): Promise<T> {
     44    return await this.evaluate(value => {
     45      return value;
     46    });
     47  }
     48 
     49  override asElement(): ElementHandle<Node> | null {
     50    return null;
     51  }
     52 
     53  override async dispose(): Promise<void> {
     54    if (this.#disposed) {
     55      return;
     56    }
     57    this.#disposed = true;
     58    await this.realm.destroyHandles([this]);
     59  }
     60 
     61  get isPrimitiveValue(): boolean {
     62    switch (this.#remoteValue.type) {
     63      case 'string':
     64      case 'number':
     65      case 'bigint':
     66      case 'boolean':
     67      case 'undefined':
     68      case 'null':
     69        return true;
     70 
     71      default:
     72        return false;
     73    }
     74  }
     75 
     76  override toString(): string {
     77    if (this.isPrimitiveValue) {
     78      return 'JSHandle:' + BidiDeserializer.deserialize(this.#remoteValue);
     79    }
     80 
     81    return 'JSHandle@' + this.#remoteValue.type;
     82  }
     83 
     84  override get id(): string | undefined {
     85    return 'handle' in this.#remoteValue ? this.#remoteValue.handle : undefined;
     86  }
     87 
     88  remoteValue(): Bidi.Script.RemoteValue {
     89    return this.#remoteValue;
     90  }
     91 
     92  override remoteObject(): never {
     93    throw new UnsupportedOperation('Not available in WebDriver BiDi');
     94  }
     95 }