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 }