[Recorder] Implement Recorder extension API for replay
Chromium documentation: https://crrev.com/c/4161597
Doc: go/devtools-recorder:replay-extensions
Bug: chromium:1400243
Change-Id: I4ab5d6cc7c30a5a9970c5099a8cdff179c2f3722
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/4117074
Commit-Queue: Alex Rudenko <alexrudenko@chromium.org>
Reviewed-by: Philip Pfaffe <pfaffe@chromium.org>
diff --git a/extension-api/ExtensionAPI.d.ts b/extension-api/ExtensionAPI.d.ts
index 2daaa26..dbb448c 100644
--- a/extension-api/ExtensionAPI.d.ts
+++ b/extension-api/ExtensionAPI.d.ts
@@ -47,10 +47,15 @@
}
export interface ExtensionPanel extends ExtensionView {
+ show(): void;
onSearch: EventSink<(action: string, queryString?: string) => unknown>;
createStatusBarButton(iconPath: string, tooltipText: string, disabled: boolean): Button;
}
+ export interface RecorderView extends ExtensionView {
+ show(): void;
+ }
+
export interface ExtensionSidebarPane extends ExtensionView {
setHeight(height: string): void;
setObject(jsonObject: string, rootTitle?: string, callback?: () => unknown): void;
@@ -171,10 +176,15 @@
payload: unknown;
}
- export interface RecorderExtensionPlugin {
+ export type RecorderExtensionPlugin = RecorderExtensionExportPlugin|RecorderExtensionReplayPlugin;
+
+ export interface RecorderExtensionExportPlugin {
stringify(recording: Record<string, any>): Promise<string>;
stringifyStep(step: Record<string, any>): Promise<string>;
}
+ export interface RecorderExtensionReplayPlugin {
+ replay(recording: Record<string, any>): void;
+ }
export type RemoteObjectId = string;
export type RemoteObjectType = 'object'|'undefined'|'string'|'number'|'boolean'|'bigint'|'array'|'null';
@@ -330,10 +340,12 @@
getWasmOp(op: number, stopId: unknown): Promise<WasmValue>;
}
+
export interface RecorderExtensions {
- registerRecorderExtensionPlugin(plugin: RecorderExtensionPlugin, pluginName: string, mediaType: string):
+ registerRecorderExtensionPlugin(plugin: RecorderExtensionPlugin, pluginName: string, mediaType?: string):
Promise<void>;
unregisterRecorderExtensionPlugin(plugin: RecorderExtensionPlugin): Promise<void>;
+ createView(title: string, pagePath: string): Promise<RecorderView>;
}
export interface Chrome {