UNPKG

chrome-devtools-frontend

Version:
70 lines (61 loc) 2.81 kB
// Copyright 2018 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import type * as Platform from '../../../../core/platform/platform.js'; import * as SDK from '../../../../core/sdk/sdk.js'; import type * as ProtocolProxyApi from '../../../../generated/protocol-proxy-api.js'; import type * as Protocol from '../../../../generated/protocol.js'; import * as UI from '../../legacy.js'; export class TargetDetachedDialog extends SDK.SDKModel.SDKModel<void> implements ProtocolProxyApi.InspectorDispatcher { private static hideCrashedDialog: (() => void)|null; constructor(target: SDK.Target.Target) { super(target); target.registerInspectorDispatcher(this); void target.inspectorAgent().invoke_enable(); // Hide all dialogs if a new top-level target is created. if (target.parentTarget()?.type() === SDK.Target.Type.BROWSER && TargetDetachedDialog.hideCrashedDialog) { TargetDetachedDialog.hideCrashedDialog.call(null); TargetDetachedDialog.hideCrashedDialog = null; } } detached({reason}: Protocol.Inspector.DetachedEvent): void { UI.RemoteDebuggingTerminatedScreen.RemoteDebuggingTerminatedScreen.show(reason); } static connectionLost(message: Platform.UIString.LocalizedString): void { UI.RemoteDebuggingTerminatedScreen.RemoteDebuggingTerminatedScreen.show(message); } targetCrashed(): void { // In case of service workers targetCrashed usually signals that the worker is stopped // and in any case it is restarted automatically (in which case front-end will receive // targetReloadedAfterCrash event). if (TargetDetachedDialog.hideCrashedDialog) { return; } // Ignore child targets altogether. const parentTarget = this.target().parentTarget(); if (parentTarget && parentTarget.type() !== SDK.Target.Type.BROWSER) { return; } const dialog = new UI.Dialog.Dialog('target-crashed'); dialog.setSizeBehavior(UI.GlassPane.SizeBehavior.MEASURE_CONTENT); dialog.addCloseButton(); dialog.setDimmed(true); TargetDetachedDialog.hideCrashedDialog = dialog.hide.bind(dialog); new UI.TargetCrashedScreen .TargetCrashedScreen(() => { TargetDetachedDialog.hideCrashedDialog = null; }) .show(dialog.contentElement); dialog.show(); } /** ; */ targetReloadedAfterCrash(): void { void this.target().runtimeAgent().invoke_runIfWaitingForDebugger(); if (TargetDetachedDialog.hideCrashedDialog) { TargetDetachedDialog.hideCrashedDialog.call(null); TargetDetachedDialog.hideCrashedDialog = null; } } } SDK.SDKModel.SDKModel.register(TargetDetachedDialog, {capabilities: SDK.Target.Capability.INSPECTOR, autostart: true});