Skip to content

Commit

Permalink
chore: add evaluateOnNewDocument for BiDi (#10712)
Browse files Browse the repository at this point in the history
  • Loading branch information
Lightning00Blade committed Aug 9, 2023
1 parent f70048c commit 47dfc35
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 0 deletions.
4 changes: 4 additions & 0 deletions packages/puppeteer-core/src/common/bidi/Connection.ts
Expand Up @@ -47,6 +47,10 @@ interface Commands {
params: Bidi.Script.AddPreloadScriptParameters;
returnType: Bidi.Script.AddPreloadScriptResult;
};
'script.removePreloadScript': {
params: Bidi.Script.RemovePreloadScriptParameters;
returnType: Bidi.EmptyResult;
};

'browsingContext.activate': {
params: Bidi.BrowsingContext.ActivateParameters;
Expand Down
30 changes: 30 additions & 0 deletions packages/puppeteer-core/src/common/bidi/Page.ts
Expand Up @@ -22,6 +22,7 @@ import Protocol from 'devtools-protocol';
import {
GeolocationOptions,
MediaFeature,
NewDocumentScriptEvaluation,
Page as PageBase,
PageEmittedEvents,
ScreenshotOptions,
Expand All @@ -45,6 +46,7 @@ import {Tracing} from '../Tracing.js';
import {EvaluateFunc, HandleFor} from '../types.js';
import {
debugError,
evaluationString,
isString,
validateDialogType,
waitForEvent,
Expand Down Expand Up @@ -726,6 +728,30 @@ export class Page extends PageBase {
context: this.mainFrame()._id,
});
}

override async evaluateOnNewDocument<
Params extends unknown[],
Func extends (...args: Params) => unknown = (...args: Params) => unknown,
>(
pageFunction: Func | string,
...args: Params
): Promise<NewDocumentScriptEvaluation> {
const expression = evaluationExpression(pageFunction, ...args);
const {result} = await this.#connection.send('script.addPreloadScript', {
functionDeclaration: expression,
// TODO: should change spec to accept browsingContext
});

return {identifier: result.script};
}

override async removeScriptToEvaluateOnNewDocument(
id: string
): Promise<void> {
await this.#connection.send('script.removePreloadScript', {
script: id,
});
}
}

function isConsoleLogEntry(
Expand Down Expand Up @@ -755,3 +781,7 @@ function getStackTraceLocations(
}
return stackTraceLocations;
}

function evaluationExpression(fun: Function | string, ...args: unknown[]) {
return `() => {${evaluationString(fun, ...args)}}`;
}
12 changes: 12 additions & 0 deletions test/TestExpectations.json
Expand Up @@ -4150,5 +4150,17 @@
"platforms": ["darwin", "linux", "win32"],
"parameters": ["cdp", "chrome", "headless"],
"expectations": ["FAIL", "PASS"]
},
{
"testIdPattern": "[evaluation.spec] Evaluation specs Page.evaluateOnNewDocument should evaluate before anything else on the page",
"platforms": ["darwin", "linux", "win32"],
"parameters": ["webDriverBiDi"],
"expectations": ["PASS"]
},
{
"testIdPattern": "[evaluation.spec] Evaluation specs Page.evaluateOnNewDocument should work with CSP",
"platforms": ["darwin", "linux", "win32"],
"parameters": ["webDriverBiDi"],
"expectations": ["PASS"]
}
]

0 comments on commit 47dfc35

Please sign in to comment.