feat: add read-only CDP target viewing

This commit is contained in:
QiuSW
2026-07-27 10:01:07 +08:00
parent 7816be2a3d
commit 519d3ef636
11 changed files with 668 additions and 18 deletions
+32
View File
@@ -130,6 +130,7 @@ func runWindow(logger *slog.Logger) {
externalProfiles: externalProfiles,
remoteDebug: cdp,
}.Refresh, window.Invalidate)
shell.OnInspectTabs(instanceTabsInspector{remoteDebug: cdp}.Inspect, window.Invalidate)
shell.OnPathSearch(func(ctx context.Context, field ui.PathField, current string) (string, error) {
switch field {
case ui.PathChromeExecutable:
@@ -362,6 +363,37 @@ type instanceStatusRefresher struct {
remoteDebug browser.RemoteDebugEndpointInspector
}
// instanceTabsInspector is a read-only adapter. It accepts only a UI row that
// already has a verified runtime port and maps platform targets into UI DTOs.
type instanceTabsInspector struct {
remoteDebug browser.RemoteDebugTargetInspector
}
func (i instanceTabsInspector) Inspect(ctx context.Context, row ui.InstanceRow) ([]ui.CDPTarget, error) {
if i.remoteDebug == nil {
return nil, errors.New("CDP 页面目标服务尚未准备好")
}
if row.Status != "运行中" && row.Status != "外部已关联" {
return nil, errors.New("实例需要处于已验证的运行或外部关联状态")
}
if !domain.ValidRemoteDebugPort(row.RemoteDebugPort) {
return nil, errors.New("实例没有可验证的本地调试端口")
}
kind, err := browserKind(row.Browser)
if err != nil {
return nil, err
}
targets, err := i.remoteDebug.ListRemoteDebugTargets(ctx, kind, row.RemoteDebugPort)
if err != nil {
return nil, fmt.Errorf("读取 CDP 页面目标失败:%w", err)
}
result := make([]ui.CDPTarget, 0, len(targets))
for _, target := range targets {
result = append(result, ui.CDPTarget{ID: target.ID, Type: target.Type, Title: target.Title, URL: target.URL})
}
return result, nil
}
func (s instanceStatusRefresher) Refresh(ctx context.Context, rows []ui.InstanceRow) ([]ui.InstanceRefreshResult, error) {
results := make([]ui.InstanceRefreshResult, 0, len(rows))
for _, row := range rows {