Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: inline page._runAbortableTask #3861

Merged
merged 1 commit into from
Sep 12, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions src/server/dom.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import * as js from './javascript';
import { Page } from './page';
import { SelectorInfo } from './selectors';
import * as types from './types';
import { Progress } from './progress';
import { Progress, runAbortableTask } from './progress';
import { FatalDOMError, RetargetableDOMError } from './common/domErrors';

export class FrameExecutionContext extends js.ExecutionContext {
Expand Down Expand Up @@ -213,7 +213,7 @@ export class ElementHandle<T extends Node = Node> extends js.JSHandle<T> {
}

async scrollIntoViewIfNeeded(options: types.TimeoutOptions = {}) {
return this._page._runAbortableTask(
return runAbortableTask(
progress => this._waitAndScrollIntoViewIfNeeded(progress),
this._page._timeoutSettings.timeout(options));
}
Expand Down Expand Up @@ -432,7 +432,7 @@ export class ElementHandle<T extends Node = Node> extends js.JSHandle<T> {
}

async selectText(options: types.TimeoutOptions = {}): Promise<void> {
return this._page._runAbortableTask(async progress => {
return runAbortableTask(async progress => {
progress.throwIfAborted(); // Avoid action that has side-effects.
const poll = await this._evaluateHandleInUtility(([injected, node]) => {
return injected.waitForVisibleAndSelectText(node);
Expand Down Expand Up @@ -469,7 +469,7 @@ export class ElementHandle<T extends Node = Node> extends js.JSHandle<T> {
}

async focus(): Promise<void> {
await this._page._runAbortableTask(async progress => {
await runAbortableTask(async progress => {
const result = await this._focus(progress);
await this._page._doSlowMo();
return assertDone(throwRetargetableDOMError(result));
Expand Down Expand Up @@ -542,7 +542,7 @@ export class ElementHandle<T extends Node = Node> extends js.JSHandle<T> {
}

async screenshot(options: types.ElementScreenshotOptions = {}): Promise<Buffer> {
return this._page._runAbortableTask(
return runAbortableTask(
progress => this._page._screenshotter.screenshotElement(progress, this, options),
this._page._timeoutSettings.timeout(options));
}
Expand Down Expand Up @@ -572,7 +572,7 @@ export class ElementHandle<T extends Node = Node> extends js.JSHandle<T> {
}

async waitForElementState(state: 'visible' | 'hidden' | 'stable' | 'enabled' | 'disabled', options: types.TimeoutOptions = {}): Promise<void> {
return this._page._runAbortableTask(async progress => {
return runAbortableTask(async progress => {
progress.log(` waiting for element to be ${state}`);
if (state === 'visible') {
const poll = await this._evaluateHandleInUtility(([injected, node]) => {
Expand Down Expand Up @@ -625,7 +625,7 @@ export class ElementHandle<T extends Node = Node> extends js.JSHandle<T> {
throw new Error(`state: expected one of (attached|detached|visible|hidden)`);
const info = this._page.selectors._parseSelector(selector);
const task = waitForSelectorTask(info, state, this);
return this._page._runAbortableTask(async progress => {
return runAbortableTask(async progress => {
progress.log(`waiting for selector "${selector}"${state === 'attached' ? '' : ' to be ' + state}`);
const context = await this._context.frame._context(info.world);
const injected = await context.injectedScript();
Expand Down
18 changes: 9 additions & 9 deletions src/server/frames.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import * as network from './network';
import { Page } from './page';
import * as types from './types';
import { BrowserContext } from './browserContext';
import { Progress, ProgressController } from './progress';
import { Progress, ProgressController, runAbortableTask } from './progress';
import { EventEmitter } from 'events';
import { assert, makeWaitForNextTask } from '../utils/utils';
import { debugLogger } from '../utils/debugLogger';
Expand Down Expand Up @@ -550,7 +550,7 @@ export class Frame extends EventEmitter {
throw new Error(`state: expected one of (attached|detached|visible|hidden)`);
const info = this._page.selectors._parseSelector(selector);
const task = dom.waitForSelectorTask(info, state);
return this._page._runAbortableTask(async progress => {
return runAbortableTask(async progress => {
progress.log(`waiting for selector "${selector}"${state === 'attached' ? '' : ' to be ' + state}`);
const result = await this._scheduleRerunnableHandleTask(progress, info.world, task);
if (!result.asElement()) {
Expand All @@ -565,7 +565,7 @@ export class Frame extends EventEmitter {
async dispatchEvent(selector: string, type: string, eventInit?: Object, options: types.TimeoutOptions = {}): Promise<void> {
const info = this._page.selectors._parseSelector(selector);
const task = dom.dispatchEventTask(info, type, eventInit || {});
await this._page._runAbortableTask(async progress => {
await runAbortableTask(async progress => {
progress.log(`Dispatching "${type}" event on selector "${selector}"...`);
// Note: we always dispatch events in the main world.
await this._scheduleRerunnableTask(progress, 'main', task);
Expand Down Expand Up @@ -799,7 +799,7 @@ export class Frame extends EventEmitter {
private async _retryWithSelectorIfNotConnected<R>(
selector: string, options: types.TimeoutOptions,
action: (progress: Progress, handle: dom.ElementHandle<Element>) => Promise<R | 'error:notconnected'>): Promise<R> {
return this._page._runAbortableTask(async progress => {
return runAbortableTask(async progress => {
return this._retryWithProgressIfNotConnected(progress, selector, handle => action(progress, handle));
}, this._page._timeoutSettings.timeout(options));
}
Expand All @@ -824,7 +824,7 @@ export class Frame extends EventEmitter {
async textContent(selector: string, options: types.TimeoutOptions = {}): Promise<string | null> {
const info = this._page.selectors._parseSelector(selector);
const task = dom.textContentTask(info);
return this._page._runAbortableTask(async progress => {
return runAbortableTask(async progress => {
progress.log(` retrieving textContent from "${selector}"`);
return this._scheduleRerunnableTask(progress, info.world, task);
}, this._page._timeoutSettings.timeout(options));
Expand All @@ -833,7 +833,7 @@ export class Frame extends EventEmitter {
async innerText(selector: string, options: types.TimeoutOptions = {}): Promise<string> {
const info = this._page.selectors._parseSelector(selector);
const task = dom.innerTextTask(info);
return this._page._runAbortableTask(async progress => {
return runAbortableTask(async progress => {
progress.log(` retrieving innerText from "${selector}"`);
const result = dom.throwFatalDOMError(await this._scheduleRerunnableTask(progress, info.world, task));
return result.innerText;
Expand All @@ -843,7 +843,7 @@ export class Frame extends EventEmitter {
async innerHTML(selector: string, options: types.TimeoutOptions = {}): Promise<string> {
const info = this._page.selectors._parseSelector(selector);
const task = dom.innerHTMLTask(info);
return this._page._runAbortableTask(async progress => {
return runAbortableTask(async progress => {
progress.log(` retrieving innerHTML from "${selector}"`);
return this._scheduleRerunnableTask(progress, info.world, task);
}, this._page._timeoutSettings.timeout(options));
Expand All @@ -852,7 +852,7 @@ export class Frame extends EventEmitter {
async getAttribute(selector: string, name: string, options: types.TimeoutOptions = {}): Promise<string | null> {
const info = this._page.selectors._parseSelector(selector);
const task = dom.getAttributeTask(info, name);
return this._page._runAbortableTask(async progress => {
return runAbortableTask(async progress => {
progress.log(` retrieving attribute "${name}" from "${selector}"`);
return this._scheduleRerunnableTask(progress, info.world, task);
}, this._page._timeoutSettings.timeout(options));
Expand Down Expand Up @@ -896,7 +896,7 @@ export class Frame extends EventEmitter {
return injectedScript.pollRaf((progress, continuePolling) => innerPredicate(arg) || continuePolling);
return injectedScript.pollInterval(polling, (progress, continuePolling) => innerPredicate(arg) || continuePolling);
}, { predicateBody, polling: options.pollingInterval, arg });
return this._page._runAbortableTask(
return runAbortableTask(
progress => this._scheduleRerunnableHandleTask(progress, 'main', task),
this._page._timeoutSettings.timeout(options));
}
Expand Down
8 changes: 2 additions & 6 deletions src/server/page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import { ConsoleMessage } from './console';
import * as accessibility from './accessibility';
import { EventEmitter } from 'events';
import { FileChooser } from './fileChooser';
import { Progress, runAbortableTask } from './progress';
import { runAbortableTask } from './progress';
import { assert, isError } from '../utils/utils';
import { debugLogger } from '../utils/debugLogger';
import { Selectors } from './selectors';
Expand Down Expand Up @@ -198,10 +198,6 @@ export class Page extends EventEmitter {
this._disconnectedCallback(new Error('Page closed'));
}

async _runAbortableTask<T>(task: (progress: Progress) => Promise<T>, timeout: number): Promise<T> {
return runAbortableTask(task, timeout);
}

async _onFileChooserOpened(handle: dom.ElementHandle) {
const multiple = await handle.evaluate(element => !!(element as HTMLInputElement).multiple);
if (!this.listenerCount(Page.Events.FileChooser)) {
Expand Down Expand Up @@ -356,7 +352,7 @@ export class Page extends EventEmitter {
}

async screenshot(options: types.ScreenshotOptions = {}): Promise<Buffer> {
return this._runAbortableTask(
return runAbortableTask(
progress => this._screenshotter.screenshotPage(progress, options),
this._timeoutSettings.timeout(options));
}
Expand Down