diff --git a/src/server/dialog.ts b/src/server/dialog.ts index a50b9dd763..84f022cdaa 100644 --- a/src/server/dialog.ts +++ b/src/server/dialog.ts @@ -56,13 +56,11 @@ export class Dialog extends SdkObject { assert(!this._handled, 'Cannot accept dialog which is already handled!'); this._handled = true; await this._onHandle(true, promptText); - this._page.emit(Page.Events.InternalDialogClosed, this); } async dismiss() { assert(!this._handled, 'Cannot dismiss dialog which is already handled!'); this._handled = true; await this._onHandle(false); - this._page.emit(Page.Events.InternalDialogClosed, this); } } diff --git a/src/server/page.ts b/src/server/page.ts index 5677d1ebe5..06fb106a53 100644 --- a/src/server/page.ts +++ b/src/server/page.ts @@ -97,7 +97,6 @@ export class Page extends SdkObject { Crash: 'crash', Console: 'console', Dialog: 'dialog', - InternalDialogClosed: 'internaldialogclosed', Download: 'download', FileChooser: 'filechooser', DOMContentLoaded: 'domcontentloaded', diff --git a/src/server/trace/common/traceEvents.ts b/src/server/trace/common/traceEvents.ts index d1851467dd..05bf5dc879 100644 --- a/src/server/trace/common/traceEvents.ts +++ b/src/server/trace/common/traceEvents.ts @@ -66,35 +66,6 @@ export type FrameSnapshotTraceEvent = { snapshot: FrameSnapshot, }; -export type DialogOpenedEvent = { - timestamp: number, - type: 'dialog-opened', - pageId: string, - dialogType: string, - message?: string, -}; - -export type DialogClosedEvent = { - timestamp: number, - type: 'dialog-closed', - pageId: string, - dialogType: string, -}; - -export type NavigationEvent = { - timestamp: number, - type: 'navigation', - pageId: string, - url: string, - sameDocument: boolean, -}; - -export type LoadEvent = { - timestamp: number, - type: 'load', - pageId: string, -}; - export type TraceEvent = ContextCreatedTraceEvent | PageCreatedTraceEvent | @@ -102,8 +73,4 @@ export type TraceEvent = ScreencastFrameTraceEvent | ActionTraceEvent | ResourceSnapshotTraceEvent | - FrameSnapshotTraceEvent | - DialogOpenedEvent | - DialogClosedEvent | - NavigationEvent | - LoadEvent; + FrameSnapshotTraceEvent; diff --git a/src/server/trace/recorder/tracing.ts b/src/server/trace/recorder/tracing.ts index 58f6a5676f..c501ae9b0d 100644 --- a/src/server/trace/recorder/tracing.ts +++ b/src/server/trace/recorder/tracing.ts @@ -21,9 +21,7 @@ import yazl from 'yazl'; import { calculateSha1, createGuid, mkdirIfNeeded, monotonicTime } from '../../../utils/utils'; import { Artifact } from '../../artifact'; import { BrowserContext } from '../../browserContext'; -import { Dialog } from '../../dialog'; import { ElementHandle } from '../../dom'; -import { Frame, NavigationEvent } from '../../frames'; import { helper, RegisteredListener } from '../../helper'; import { CallMetadata, InstrumentationListener, SdkObject } from '../../instrumentation'; import { Page } from '../../page'; @@ -188,51 +186,6 @@ export class Tracing implements InstrumentationListener { page.setScreencastOptions({ width: 800, height: 600, quality: 90 }); this._eventListeners.push( - helper.addEventListener(page, Page.Events.Dialog, (dialog: Dialog) => { - const event: trace.DialogOpenedEvent = { - timestamp: monotonicTime(), - type: 'dialog-opened', - pageId, - dialogType: dialog.type(), - message: dialog.message(), - }; - this._appendTraceEvent(event); - }), - - helper.addEventListener(page, Page.Events.InternalDialogClosed, (dialog: Dialog) => { - const event: trace.DialogClosedEvent = { - timestamp: monotonicTime(), - type: 'dialog-closed', - pageId, - dialogType: dialog.type(), - }; - this._appendTraceEvent(event); - }), - - helper.addEventListener(page.mainFrame(), Frame.Events.Navigation, (navigationEvent: NavigationEvent) => { - if (page.mainFrame().url() === 'about:blank') - return; - const event: trace.NavigationEvent = { - timestamp: monotonicTime(), - type: 'navigation', - pageId, - url: navigationEvent.url, - sameDocument: !navigationEvent.newDocument, - }; - this._appendTraceEvent(event); - }), - - helper.addEventListener(page, Page.Events.Load, () => { - if (page.mainFrame().url() === 'about:blank') - return; - const event: trace.LoadEvent = { - timestamp: monotonicTime(), - type: 'load', - pageId, - }; - this._appendTraceEvent(event); - }), - helper.addEventListener(page, Page.Events.ScreencastFrame, params => { const sha1 = calculateSha1(createGuid()); // no need to compute sha1 for screenshots const event: trace.ScreencastFrameTraceEvent = { @@ -248,7 +201,6 @@ export class Tracing implements InstrumentationListener { await fsWriteFileAsync(path.join(this._resourcesDir!, sha1), params.buffer).catch(() => {}); }); }), - helper.addEventListener(page, Page.Events.Close, () => { const event: trace.PageDestroyedTraceEvent = { timestamp: monotonicTime(), diff --git a/src/server/trace/viewer/traceModel.ts b/src/server/trace/viewer/traceModel.ts index 81481b7029..28179eee13 100644 --- a/src/server/trace/viewer/traceModel.ts +++ b/src/server/trace/viewer/traceModel.ts @@ -34,18 +34,10 @@ export class TraceModel { appendEvents(events: trace.TraceEvent[], snapshotStorage: SnapshotStorage) { for (const event of events) this.appendEvent(event); - const actions: ActionEntry[] = []; + const actions: trace.ActionTraceEvent[] = []; for (const page of this.contextEntry!.pages) actions.push(...page.actions); - - const resources = snapshotStorage.resources().reverse(); - actions.reverse(); - - for (const action of actions) { - while (resources.length && resources[0].timestamp > action.timestamp) - action.resources.push(resources.shift()!); - action.resources.reverse(); - } + this.contextEntry!.resources = snapshotStorage.resources(); } appendEvent(event: trace.TraceEvent) { @@ -56,6 +48,7 @@ export class TraceModel { endTime: Number.MIN_VALUE, created: event, pages: [], + resources: [] }; break; } @@ -64,7 +57,7 @@ export class TraceModel { created: event, destroyed: undefined as any, actions: [], - interestingEvents: [], + events: [], screencastFrames: [], }; this.pageEntries.set(event.pageId, pageEntry); @@ -82,20 +75,14 @@ export class TraceModel { case 'action': { const metadata = event.metadata; const pageEntry = this.pageEntries.get(metadata.pageId!)!; - const action: ActionEntry = { - actionId: metadata.id, - resources: [], - ...event, - }; - pageEntry.actions.push(action); + pageEntry.actions.push(event); break; } - case 'dialog-opened': - case 'dialog-closed': - case 'navigation': - case 'load': { - const pageEntry = this.pageEntries.get(event.pageId)!; - pageEntry.interestingEvents.push(event); + case 'event': { + const metadata = event.metadata; + const pageEntry = this.pageEntries.get(metadata.pageId!); + if (pageEntry) + pageEntry.events.push(event); break; } case 'resource-snapshot': @@ -105,8 +92,10 @@ export class TraceModel { this._snapshotStorage.addFrameSnapshot(event.snapshot); break; } - this.contextEntry!.startTime = Math.min(this.contextEntry!.startTime, event.timestamp); - this.contextEntry!.endTime = Math.max(this.contextEntry!.endTime, event.timestamp); + if (event.type === 'action' || event.type === 'event') { + this.contextEntry!.startTime = Math.min(this.contextEntry!.startTime, event.metadata.startTime); + this.contextEntry!.endTime = Math.max(this.contextEntry!.endTime, event.metadata.endTime); + } } } @@ -115,15 +104,14 @@ export type ContextEntry = { endTime: number; created: trace.ContextCreatedTraceEvent; pages: PageEntry[]; + resources: ResourceSnapshot[]; } -export type InterestingPageEvent = trace.DialogOpenedEvent | trace.DialogClosedEvent | trace.NavigationEvent | trace.LoadEvent; - export type PageEntry = { created: trace.PageCreatedTraceEvent; destroyed: trace.PageDestroyedTraceEvent; - actions: ActionEntry[]; - interestingEvents: InterestingPageEvent[]; + actions: trace.ActionTraceEvent[]; + events: trace.ActionTraceEvent[]; screencastFrames: { sha1: string, timestamp: number, @@ -132,11 +120,6 @@ export type PageEntry = { }[] } -export type ActionEntry = trace.ActionTraceEvent & { - actionId: string; - resources: ResourceSnapshot[] -}; - export class PersistentSnapshotStorage extends BaseSnapshotStorage { private _resourcesDir: string; diff --git a/src/web/traceViewer/ui/actionList.tsx b/src/web/traceViewer/ui/actionList.tsx index c61de47c9f..6f468fdf12 100644 --- a/src/web/traceViewer/ui/actionList.tsx +++ b/src/web/traceViewer/ui/actionList.tsx @@ -14,17 +14,17 @@ limitations under the License. */ -import { ActionEntry } from '../../../server/trace/viewer/traceModel'; import './actionList.css'; import './tabbedPane.css'; import * as React from 'react'; +import { ActionTraceEvent } from '../../../server/trace/common/traceEvents'; export interface ActionListProps { - actions: ActionEntry[], - selectedAction: ActionEntry | undefined, - highlightedAction: ActionEntry | undefined, - onSelected: (action: ActionEntry) => void, - onHighlighted: (action: ActionEntry | undefined) => void, + actions: ActionTraceEvent[], + selectedAction: ActionTraceEvent | undefined, + highlightedAction: ActionTraceEvent | undefined, + onSelected: (action: ActionTraceEvent) => void, + onHighlighted: (action: ActionTraceEvent | undefined) => void, } export const ActionList: React.FC = ({ @@ -68,16 +68,16 @@ export const ActionList: React.FC = ({ }} ref={actionListRef} > - {actions.map(actionEntry => { - const { metadata, actionId } = actionEntry; - const selectedSuffix = actionEntry === selectedAction ? ' selected' : ''; - const highlightedSuffix = actionEntry === highlightedAction ? ' highlighted' : ''; + {actions.map(action => { + const { metadata } = action; + const selectedSuffix = action === selectedAction ? ' selected' : ''; + const highlightedSuffix = action === highlightedAction ? ' highlighted' : ''; return
onSelected(actionEntry)} - onMouseEnter={() => onHighlighted(actionEntry)} - onMouseLeave={() => (highlightedAction === actionEntry) && onHighlighted(undefined)} + key={metadata.id} + onClick={() => onSelected(action)} + onMouseEnter={() => onHighlighted(action)} + onMouseLeave={() => (highlightedAction === action) && onHighlighted(undefined)} >