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,