blob: 26c1956d3a38993d20dd73a39f9b9769753d877c [file] [log] [blame]
Blink Reformat4c46d092018-04-07 15:32:371// Copyright 2018 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Tim van der Lippe76e32b12020-01-24 16:21:005import * as Common from '../common/common.js';
6import * as Components from '../components/components.js';
7import * as Host from '../host/host.js';
8import * as MobileThrottling from '../mobile_throttling/mobile_throttling.js';
9import * as SDK from '../sdk/sdk.js';
10import * as UI from '../ui/ui.js';
11
Blink Reformat4c46d092018-04-07 15:32:3712/**
Tim van der Lippe76e32b12020-01-24 16:21:0013 * @implements {Common.Runnable.Runnable}
Blink Reformat4c46d092018-04-07 15:32:3714 */
Tim van der Lippe76e32b12020-01-24 16:21:0015export class InspectorMainImpl extends Common.ObjectWrapper.ObjectWrapper {
Blink Reformat4c46d092018-04-07 15:32:3716 /**
17 * @override
18 */
Pavel Feldman07ef9722018-12-13 23:52:2219 async run() {
20 let firstCall = true;
Tim van der Lippe76e32b12020-01-24 16:21:0021 await SDK.Connections.initMainConnection(async () => {
22 const type = Root.Runtime.queryParam('v8only') ? SDK.SDKModel.Type.Node : SDK.SDKModel.Type.Frame;
23 const waitForDebuggerInPage = type === SDK.SDKModel.Type.Frame && Root.Runtime.queryParam('panel') === 'sources';
Paul Lewis4ae5f4f2020-01-23 10:19:3324 const target = self.SDK.targetManager.createTarget(
Tim van der Lippe76e32b12020-01-24 16:21:0025 'main', Common.UIString.UIString('Main'), type, null, undefined, waitForDebuggerInPage);
Pavel Feldman07ef9722018-12-13 23:52:2226
27 // Only resume target during the first connection,
28 // subsequent connections are due to connection hand-over,
29 // there is no need to pause in debugger.
Tim van der Lippe1d6e57a2019-09-30 11:55:3430 if (!firstCall) {
Pavel Feldman07ef9722018-12-13 23:52:2231 return;
Tim van der Lippe1d6e57a2019-09-30 11:55:3432 }
Pavel Feldman07ef9722018-12-13 23:52:2233 firstCall = false;
34
35 if (waitForDebuggerInPage) {
Tim van der Lippe76e32b12020-01-24 16:21:0036 const debuggerModel = target.model(SDK.DebuggerModel.DebuggerModel);
Tim van der Lippe1d6e57a2019-09-30 11:55:3437 if (!debuggerModel.isReadyToPause()) {
Pavel Feldman07ef9722018-12-13 23:52:2238 await debuggerModel.once(SDK.DebuggerModel.Events.DebuggerIsReadyToPause);
Tim van der Lippe1d6e57a2019-09-30 11:55:3439 }
Pavel Feldman07ef9722018-12-13 23:52:2240 debuggerModel.pause();
41 }
42
Dmitry Gozman99d7a6c2018-11-12 17:55:1143 target.runtimeAgent().runIfWaitingForDebugger();
Tim van der Lippe76e32b12020-01-24 16:21:0044 }, Components.TargetDetachedDialog.TargetDetachedDialog.webSocketConnectionLost);
Blink Reformat4c46d092018-04-07 15:32:3745
Paul Lewis7b9a9182019-12-03 14:09:0346 new SourcesPanelIndicator();
Tim van der Lippe078c7af2020-01-10 14:44:0147 new BackendSettingsSync();
Tim van der Lippe76e32b12020-01-24 16:21:0048 new MobileThrottling.NetworkPanelIndicator.NetworkPanelIndicator();
Blink Reformat4c46d092018-04-07 15:32:3749
Tim van der Lippe76e32b12020-01-24 16:21:0050 Host.InspectorFrontendHost.InspectorFrontendHostInstance.events.addEventListener(
Tim van der Lippe50cfa9b2019-10-01 10:40:5851 Host.InspectorFrontendHostAPI.Events.ReloadInspectedPage, event => {
52 const hard = /** @type {boolean} */ (event.data);
Tim van der Lippe76e32b12020-01-24 16:21:0053 SDK.ResourceTreeModel.ResourceTreeModel.reloadAllPages(hard);
Tim van der Lippe50cfa9b2019-10-01 10:40:5854 });
Blink Reformat4c46d092018-04-07 15:32:3755 }
Paul Lewis7b9a9182019-12-03 14:09:0356}
Blink Reformat4c46d092018-04-07 15:32:3757
58/**
Tim van der Lippe76e32b12020-01-24 16:21:0059 * @implements {UI.ActionDelegate.ActionDelegate}
Blink Reformat4c46d092018-04-07 15:32:3760 * @unrestricted
61 */
Paul Lewis7b9a9182019-12-03 14:09:0362export class ReloadActionDelegate {
Blink Reformat4c46d092018-04-07 15:32:3763 /**
64 * @override
Tim van der Lippe76e32b12020-01-24 16:21:0065 * @param {!UI.Context.Context} context
Blink Reformat4c46d092018-04-07 15:32:3766 * @param {string} actionId
67 * @return {boolean}
68 */
69 handleAction(context, actionId) {
70 switch (actionId) {
71 case 'inspector_main.reload':
Tim van der Lippe76e32b12020-01-24 16:21:0072 SDK.ResourceTreeModel.ResourceTreeModel.reloadAllPages(false);
Blink Reformat4c46d092018-04-07 15:32:3773 return true;
74 case 'inspector_main.hard-reload':
Tim van der Lippe76e32b12020-01-24 16:21:0075 SDK.ResourceTreeModel.ResourceTreeModel.reloadAllPages(true);
Blink Reformat4c46d092018-04-07 15:32:3776 return true;
77 }
78 return false;
79 }
Paul Lewis7b9a9182019-12-03 14:09:0380}
Blink Reformat4c46d092018-04-07 15:32:3781
82/**
Tim van der Lippe76e32b12020-01-24 16:21:0083 * @implements {UI.ActionDelegate.ActionDelegate}
Blink Reformat4c46d092018-04-07 15:32:3784 * @unrestricted
85 */
Paul Lewis7b9a9182019-12-03 14:09:0386export class FocusDebuggeeActionDelegate {
Blink Reformat4c46d092018-04-07 15:32:3787 /**
88 * @override
Tim van der Lippe76e32b12020-01-24 16:21:0089 * @param {!UI.Context.Context} context
Blink Reformat4c46d092018-04-07 15:32:3790 * @param {string} actionId
91 * @return {boolean}
92 */
93 handleAction(context, actionId) {
Paul Lewis4ae5f4f2020-01-23 10:19:3394 self.SDK.targetManager.mainTarget().pageAgent().bringToFront();
Blink Reformat4c46d092018-04-07 15:32:3795 return true;
96 }
Paul Lewis7b9a9182019-12-03 14:09:0397}
Blink Reformat4c46d092018-04-07 15:32:3798
99/**
Tim van der Lippe76e32b12020-01-24 16:21:00100 * @implements {UI.Toolbar.Provider}
Blink Reformat4c46d092018-04-07 15:32:37101 */
Paul Lewis7b9a9182019-12-03 14:09:03102export class NodeIndicator {
Blink Reformat4c46d092018-04-07 15:32:37103 constructor() {
104 const element = createElement('div');
Tim van der Lippe76e32b12020-01-24 16:21:00105 const shadowRoot = UI.Utils.createShadowRootWithCoreStyles(element, 'inspector_main/nodeIcon.css');
Blink Reformat4c46d092018-04-07 15:32:37106 this._element = shadowRoot.createChild('div', 'node-icon');
Tim van der Lippe76e32b12020-01-24 16:21:00107 element.addEventListener(
108 'click', () => Host.InspectorFrontendHost.InspectorFrontendHostInstance.openNodeFrontend(), false);
109 this._button = new UI.Toolbar.ToolbarItem(element);
110 this._button.setTitle(Common.UIString.UIString('Open dedicated DevTools for Node.js'));
Paul Lewis4ae5f4f2020-01-23 10:19:33111 self.SDK.targetManager.addEventListener(
Tim van der Lippe76e32b12020-01-24 16:21:00112 SDK.SDKModel.Events.AvailableTargetsChanged,
Blink Reformat4c46d092018-04-07 15:32:37113 event => this._update(/** @type {!Array<!Protocol.Target.TargetInfo>} */ (event.data)));
114 this._button.setVisible(false);
115 this._update([]);
116 }
117
118 /**
119 * @param {!Array<!Protocol.Target.TargetInfo>} targetInfos
120 */
121 _update(targetInfos) {
122 const hasNode = !!targetInfos.find(target => target.type === 'node' && !target.attached);
123 this._element.classList.toggle('inactive', !hasNode);
Tim van der Lippe1d6e57a2019-09-30 11:55:34124 if (hasNode) {
Blink Reformat4c46d092018-04-07 15:32:37125 this._button.setVisible(true);
Tim van der Lippe1d6e57a2019-09-30 11:55:34126 }
Blink Reformat4c46d092018-04-07 15:32:37127 }
128
129 /**
130 * @override
Tim van der Lippe76e32b12020-01-24 16:21:00131 * @return {?UI.Toolbar.ToolbarItem}
Blink Reformat4c46d092018-04-07 15:32:37132 */
133 item() {
134 return this._button;
135 }
Paul Lewis7b9a9182019-12-03 14:09:03136}
Blink Reformat4c46d092018-04-07 15:32:37137
138/**
139 * @unrestricted
140 */
Paul Lewis7b9a9182019-12-03 14:09:03141export class SourcesPanelIndicator {
Blink Reformat4c46d092018-04-07 15:32:37142 constructor() {
Paul Lewis4b64b3f2020-01-23 11:41:20143 self.Common.settings.moduleSetting('javaScriptDisabled').addChangeListener(javaScriptDisabledChanged);
Blink Reformat4c46d092018-04-07 15:32:37144 javaScriptDisabledChanged();
145
146 function javaScriptDisabledChanged() {
147 let icon = null;
Paul Lewis4b64b3f2020-01-23 11:41:20148 const javaScriptDisabled = self.Common.settings.moduleSetting('javaScriptDisabled').get();
Blink Reformat4c46d092018-04-07 15:32:37149 if (javaScriptDisabled) {
Tim van der Lippe76e32b12020-01-24 16:21:00150 icon = UI.Icon.Icon.create('smallicon-warning');
151 icon.title = Common.UIString.UIString('JavaScript is disabled');
Blink Reformat4c46d092018-04-07 15:32:37152 }
Paul Lewis0a7c6b62020-01-23 16:16:22153 self.UI.inspectorView.setPanelIcon('sources', icon);
Blink Reformat4c46d092018-04-07 15:32:37154 }
155 }
Paul Lewis7b9a9182019-12-03 14:09:03156}
Blink Reformat4c46d092018-04-07 15:32:37157
158/**
Tim van der Lippe76e32b12020-01-24 16:21:00159 * @implements {SDK.SDKModel.Observer}
Blink Reformat4c46d092018-04-07 15:32:37160 * @unrestricted
161 */
Paul Lewis7b9a9182019-12-03 14:09:03162export class BackendSettingsSync {
Blink Reformat4c46d092018-04-07 15:32:37163 constructor() {
Paul Lewis6bcdb182020-01-23 11:08:05164 this._autoAttachSetting = self.Common.settings.moduleSetting('autoAttachToCreatedPages');
Blink Reformat4c46d092018-04-07 15:32:37165 this._autoAttachSetting.addChangeListener(this._updateAutoAttach, this);
166 this._updateAutoAttach();
167
Paul Lewis6bcdb182020-01-23 11:08:05168 this._adBlockEnabledSetting = self.Common.settings.moduleSetting('network.adBlockingEnabled');
Blink Reformat4c46d092018-04-07 15:32:37169 this._adBlockEnabledSetting.addChangeListener(this._update, this);
170
Paul Lewis6bcdb182020-01-23 11:08:05171 this._emulatePageFocusSetting = self.Common.settings.moduleSetting('emulatePageFocus');
Joel Einbinder09a34e32018-09-11 21:49:05172 this._emulatePageFocusSetting.addChangeListener(this._update, this);
173
Paul Lewis4ae5f4f2020-01-23 10:19:33174 self.SDK.targetManager.observeTargets(this);
Blink Reformat4c46d092018-04-07 15:32:37175 }
176
177 /**
Tim van der Lippe76e32b12020-01-24 16:21:00178 * @param {!SDK.SDKModel.Target} target
Blink Reformat4c46d092018-04-07 15:32:37179 */
180 _updateTarget(target) {
Tim van der Lippe76e32b12020-01-24 16:21:00181 if (target.type() !== SDK.SDKModel.Type.Frame || target.parentTarget()) {
Joel Einbinder09a34e32018-09-11 21:49:05182 return;
Tim van der Lippe1d6e57a2019-09-30 11:55:34183 }
Joel Einbinder09a34e32018-09-11 21:49:05184 target.pageAgent().setAdBlockingEnabled(this._adBlockEnabledSetting.get());
185 target.emulationAgent().setFocusEmulationEnabled(this._emulatePageFocusSetting.get());
Blink Reformat4c46d092018-04-07 15:32:37186 }
187
188 _updateAutoAttach() {
Tim van der Lippe76e32b12020-01-24 16:21:00189 Host.InspectorFrontendHost.InspectorFrontendHostInstance.setOpenNewWindowForPopups(this._autoAttachSetting.get());
Blink Reformat4c46d092018-04-07 15:32:37190 }
191
192 _update() {
Paul Lewis4ae5f4f2020-01-23 10:19:33193 for (const target of self.SDK.targetManager.targets()) {
Dmitry Gozman08dbcb62018-11-01 16:15:05194 this._updateTarget(target);
Tim van der Lippe1d6e57a2019-09-30 11:55:34195 }
Blink Reformat4c46d092018-04-07 15:32:37196 }
197
198 /**
Tim van der Lippe76e32b12020-01-24 16:21:00199 * @param {!SDK.SDKModel.Target} target
Blink Reformat4c46d092018-04-07 15:32:37200 * @override
201 */
202 targetAdded(target) {
203 this._updateTarget(target);
204 }
205
206 /**
Tim van der Lippe76e32b12020-01-24 16:21:00207 * @param {!SDK.SDKModel.Target} target
Blink Reformat4c46d092018-04-07 15:32:37208 * @override
209 */
210 targetRemoved(target) {
211 }
Paul Lewis7b9a9182019-12-03 14:09:03212}
Blink Reformat4c46d092018-04-07 15:32:37213
Tim van der Lippe76e32b12020-01-24 16:21:00214SDK.ChildTargetManager.ChildTargetManager.install();