tor-browser

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

Target.ts (4006B)


      1 /**
      2 * @license
      3 * Copyright 2023 Google Inc.
      4 * SPDX-License-Identifier: Apache-2.0
      5 */
      6 
      7 import {Target, TargetType} from '../api/Target.js';
      8 import {UnsupportedOperation} from '../common/Errors.js';
      9 import type {CDPSession} from '../puppeteer-core.js';
     10 
     11 import type {BidiBrowser} from './Browser.js';
     12 import type {BidiBrowserContext} from './BrowserContext.js';
     13 import type {BidiFrame} from './Frame.js';
     14 import {BidiPage} from './Page.js';
     15 import type {BidiWebWorker} from './WebWorker.js';
     16 
     17 /**
     18 * @internal
     19 */
     20 export class BidiBrowserTarget extends Target {
     21  #browser: BidiBrowser;
     22 
     23  constructor(browser: BidiBrowser) {
     24    super();
     25    this.#browser = browser;
     26  }
     27 
     28  override asPage(): Promise<BidiPage> {
     29    throw new UnsupportedOperation();
     30  }
     31  override url(): string {
     32    return '';
     33  }
     34  override createCDPSession(): Promise<CDPSession> {
     35    throw new UnsupportedOperation();
     36  }
     37  override type(): TargetType {
     38    return TargetType.BROWSER;
     39  }
     40  override browser(): BidiBrowser {
     41    return this.#browser;
     42  }
     43  override browserContext(): BidiBrowserContext {
     44    return this.#browser.defaultBrowserContext();
     45  }
     46  override opener(): Target | undefined {
     47    throw new UnsupportedOperation();
     48  }
     49 }
     50 
     51 /**
     52 * @internal
     53 */
     54 export class BidiPageTarget extends Target {
     55  #page: BidiPage;
     56 
     57  constructor(page: BidiPage) {
     58    super();
     59    this.#page = page;
     60  }
     61 
     62  override async page(): Promise<BidiPage> {
     63    return this.#page;
     64  }
     65  override async asPage(): Promise<BidiPage> {
     66    return BidiPage.from(
     67      this.browserContext(),
     68      this.#page.mainFrame().browsingContext,
     69    );
     70  }
     71  override url(): string {
     72    return this.#page.url();
     73  }
     74  override createCDPSession(): Promise<CDPSession> {
     75    return this.#page.createCDPSession();
     76  }
     77  override type(): TargetType {
     78    return TargetType.PAGE;
     79  }
     80  override browser(): BidiBrowser {
     81    return this.browserContext().browser();
     82  }
     83  override browserContext(): BidiBrowserContext {
     84    return this.#page.browserContext();
     85  }
     86  override opener(): Target | undefined {
     87    throw new UnsupportedOperation();
     88  }
     89 }
     90 
     91 /**
     92 * @internal
     93 */
     94 export class BidiFrameTarget extends Target {
     95  #frame: BidiFrame;
     96  #page: BidiPage | undefined;
     97 
     98  constructor(frame: BidiFrame) {
     99    super();
    100    this.#frame = frame;
    101  }
    102 
    103  override async page(): Promise<BidiPage> {
    104    if (this.#page === undefined) {
    105      this.#page = BidiPage.from(
    106        this.browserContext(),
    107        this.#frame.browsingContext,
    108      );
    109    }
    110    return this.#page;
    111  }
    112  override async asPage(): Promise<BidiPage> {
    113    return BidiPage.from(this.browserContext(), this.#frame.browsingContext);
    114  }
    115  override url(): string {
    116    return this.#frame.url();
    117  }
    118  override createCDPSession(): Promise<CDPSession> {
    119    return this.#frame.createCDPSession();
    120  }
    121  override type(): TargetType {
    122    return TargetType.PAGE;
    123  }
    124  override browser(): BidiBrowser {
    125    return this.browserContext().browser();
    126  }
    127  override browserContext(): BidiBrowserContext {
    128    return this.#frame.page().browserContext();
    129  }
    130  override opener(): Target | undefined {
    131    throw new UnsupportedOperation();
    132  }
    133 }
    134 
    135 /**
    136 * @internal
    137 */
    138 export class BidiWorkerTarget extends Target {
    139  #worker: BidiWebWorker;
    140 
    141  constructor(worker: BidiWebWorker) {
    142    super();
    143    this.#worker = worker;
    144  }
    145 
    146  override async page(): Promise<BidiPage> {
    147    throw new UnsupportedOperation();
    148  }
    149  override async asPage(): Promise<BidiPage> {
    150    throw new UnsupportedOperation();
    151  }
    152  override url(): string {
    153    return this.#worker.url();
    154  }
    155  override createCDPSession(): Promise<CDPSession> {
    156    throw new UnsupportedOperation();
    157  }
    158  override type(): TargetType {
    159    return TargetType.OTHER;
    160  }
    161  override browser(): BidiBrowser {
    162    return this.browserContext().browser();
    163  }
    164  override browserContext(): BidiBrowserContext {
    165    return this.#worker.frame.page().browserContext();
    166  }
    167  override opener(): Target | undefined {
    168    throw new UnsupportedOperation();
    169  }
    170 }