diff --git a/front_end/browser_sdk/module.json b/front_end/browser_sdk/module.json index 8871c8a2b9..b80c6c996e 100644 --- a/front_end/browser_sdk/module.json +++ b/front_end/browser_sdk/module.json @@ -11,13 +11,22 @@ "options": [ { "value": true, - "title": "Do not preserve log on page reload / navigation" + "title": "Preserve log on page reload / navigation" }, { "value": false, - "title": "Preserve log on page reload / navigation" + "title": "Do not preserve log on page reload / navigation" } ] + }, + { + "type": "setting", + "category": "Network", + "title": "Record network log", + "settingName": "network_log.record-log", + "settingType": "boolean", + "storageType": "session", + "defaultValue": true } ], "modules": [ "browser_sdk.js", diff --git a/front_end/langpacks/shared_strings.grdp b/front_end/langpacks/shared_strings.grdp index bfebcf5749..112f6f9d8e 100644 --- a/front_end/langpacks/shared_strings.grdp +++ b/front_end/langpacks/shared_strings.grdp @@ -292,6 +292,9 @@ Not optimized: $1sOptimized too many times + + Record network log + Size diff --git a/front_end/main/MainImpl.js b/front_end/main/MainImpl.js index 63572d47ab..d39397359b 100644 --- a/front_end/main/MainImpl.js +++ b/front_end/main/MainImpl.js @@ -270,6 +270,12 @@ export class MainImpl { UI.ContextMenu.ContextMenu.initialize(); UI.ContextMenu.ContextMenu.installHandler(document); UI.Tooltip.Tooltip.installHandler(document); + + // We need to force creation of the FrameManager early to make sure no issues are missed. + SDK.FrameManager.FrameManager.instance(); + // We need to force creation of the NetworkLog early to make sure no requests are missed. + SDK.NetworkLog.NetworkLog.instance(); + // @ts-ignore layout test global self.SDK.consoleModel = SDK.ConsoleModel.ConsoleModel.instance(); // @ts-ignore layout test global diff --git a/front_end/network/NetworkLogView.js b/front_end/network/NetworkLogView.js index 85af85269e..909e7e36f1 100644 --- a/front_end/network/NetworkLogView.js +++ b/front_end/network/NetworkLogView.js @@ -740,15 +740,15 @@ export class NetworkLogView extends UI.Widget.VBox { this._recordingHint = this.element.createChild('div', 'network-status-pane fill'); const hintText = this._recordingHint.createChild('div', 'recording-hint'); - let reloadShortcutNode = null; - const reloadShortcut = - UI.ShortcutRegistry.ShortcutRegistry.instance().shortcutsForAction('inspector_main.reload')[0]; - if (reloadShortcut) { - reloadShortcutNode = this._recordingHint.createChild('b'); - reloadShortcutNode.textContent = reloadShortcut.title(); - } - if (this._recording) { + let reloadShortcutNode = null; + const reloadShortcut = + UI.ShortcutRegistry.ShortcutRegistry.instance().shortcutsForAction('inspector_main.reload')[0]; + if (reloadShortcut) { + reloadShortcutNode = this._recordingHint.createChild('b'); + reloadShortcutNode.textContent = reloadShortcut.title(); + } + const recordingText = hintText.createChild('span'); recordingText.textContent = Common.UIString.UIString('Recording network activity…'); if (reloadShortcutNode) { @@ -760,12 +760,7 @@ export class NetworkLogView extends UI.Widget.VBox { const recordNode = hintText.createChild('b'); recordNode.textContent = UI.ShortcutRegistry.ShortcutRegistry.instance().shortcutTitleForAction('network.toggle-recording') || ''; - if (reloadShortcutNode) { - hintText.appendChild(UI.UIUtils.formatLocalized( - 'Record (%s) or reload (%s) to display network activity.', [recordNode, reloadShortcutNode])); - } else { - hintText.appendChild(UI.UIUtils.formatLocalized('Record (%s) to display network activity.', [recordNode])); - } + hintText.appendChild(UI.UIUtils.formatLocalized('Record (%s) to display network activity.', [recordNode])); } hintText.createChild('br'); hintText.appendChild(UI.XLink.XLink.create( diff --git a/front_end/network/NetworkPanel.js b/front_end/network/NetworkPanel.js index e4bc534ee0..a253fc1242 100644 --- a/front_end/network/NetworkPanel.js +++ b/front_end/network/NetworkPanel.js @@ -171,11 +171,13 @@ export class NetworkPanel extends UI.Panel.Panel { this._networkRecordFilmStripSetting.addChangeListener(this._toggleRecordFilmStrip, this); this._preserveLogSetting = Common.Settings.Settings.instance().moduleSetting('network_log.preserve-log'); + this._recordLogSetting = Common.Settings.Settings.instance().moduleSetting('network_log.record-log'); + this._recordLogSetting.addChangeListener(({data}) => this._toggleRecord(data)); this._throttlingSelect = this._createThrottlingConditionsSelect(); this._setupToolbarButtons(splitWidget); - this._toggleRecord(true); + this._toggleRecord(this._recordLogSetting.get()); this._toggleShowOverview(); this._toggleLargerRequests(); this._toggleRecordFilmStrip(); @@ -354,25 +356,19 @@ export class NetworkPanel extends UI.Panel.Panel { return toolbarItem; } - _toggleRecording() { - if (!this._preserveLogSetting.get() && !this._toggleRecordAction.toggled()) { - SDK.NetworkLog.NetworkLog.instance().reset(); - } - this._toggleRecord(!this._toggleRecordAction.toggled()); - } - /** * @param {boolean} toggled */ _toggleRecord(toggled) { this._toggleRecordAction.setToggled(toggled); + if (this._recordLogSetting.get() !== toggled) { + this._recordLogSetting.set(toggled); + } + this._networkLogView.setRecording(toggled); if (!toggled && this._filmStripRecorder) { this._filmStripRecorder.stopRecording(this._filmStripAvailable.bind(this)); } - // TODO(einbinder) This should be moved to a setting/action that NetworkLog owns but NetworkPanel controls, but - // always be present in the command menu. - SDK.NetworkLog.NetworkLog.instance().setIsRecording(toggled); } /** @@ -416,7 +412,6 @@ export class NetworkPanel extends UI.Panel.Panel { * @param {!Common.EventTarget.EventTargetEvent} event */ _willReloadPage(event) { - this._toggleRecord(true); if (this._pendingStopTimer) { clearTimeout(this._pendingStopTimer); delete this._pendingStopTimer; @@ -913,7 +908,7 @@ export class ActionDelegate { } switch (actionId) { case 'network.toggle-recording': { - panel._toggleRecording(); + panel._toggleRecord(!panel._recordLogSetting.get()); return true; } case 'network.hide-request-details': { diff --git a/front_end/network/network_strings.grdp b/front_end/network/network_strings.grdp index 6af24c8252..e1fad99347 100644 --- a/front_end/network/network_strings.grdp +++ b/front_end/network/network_strings.grdp @@ -174,9 +174,6 @@ Remove all patterns - - Record ($1snetwork.toggle-recording) or reload ($2sCtrl + R) to display network activity. - (unable to decode value) @@ -405,9 +402,6 @@ Event Source - - Record network log - Opera Mini — iOS diff --git a/front_end/sdk/NetworkLog.js b/front_end/sdk/NetworkLog.js index 42da3ce125..0ed006be70 100644 --- a/front_end/sdk/NetworkLog.js +++ b/front_end/sdk/NetworkLog.js @@ -66,6 +66,15 @@ export class NetworkLog extends Common.ObjectWrapper.ObjectWrapper { /** @type {!WeakMap} */ this._initiatorData = new WeakMap(); TargetManager.instance().observeModels(NetworkManager, this); + /** @type {!Common.Settings.Setting<*>} */ + const recordLogSetting = Common.Settings.Settings.instance().moduleSetting('network_log.record-log'); + recordLogSetting.addChangeListener(() => { + const preserveLogSetting = Common.Settings.Settings.instance().moduleSetting('network_log.preserve-log'); + if (!preserveLogSetting.get() && recordLogSetting.get()) { + this.reset(); + } + this.setIsRecording(/** @type{boolean} */ (recordLogSetting.get())); + }, this); } /** diff --git a/front_end/sdk/sdk.js b/front_end/sdk/sdk.js index ea5aa1da56..9ed6ca6476 100644 --- a/front_end/sdk/sdk.js +++ b/front_end/sdk/sdk.js @@ -72,11 +72,6 @@ import * as TracingManager from './TracingManager.js'; import * as TracingModel from './TracingModel.js'; import * as WebAuthnModel from './WebAuthnModel.js'; -// We need to force creation of the FrameManager early to make sure no issues are missed. -FrameManager.FrameManager.instance(); -// We need to force creation of the NetworkLog early to make sure no requests are missed. -NetworkLog.NetworkLog.instance(); - export { ChildTargetManager, CompilerSourceMappingContentProvider,