Commit 6500b0c3 authored by Nathan Bruer's avatar Nathan Bruer Committed by Commit Bot

[Devtools] Moved chrome data saver warning to console

Removes the infobar for "Please consider disabling chrome data saver"
and moved it into the console instead through the NetworkLog. We will
now sniff the headers looking for the chrome proxy and show the console
message only when we see the main resource was loaded with the proxy
header present.

see b/63351364 for new p-link request.

R=dgozman
BUG=455981

Change-Id: I08e4b200c20e7e650fefe3d047a8349e8cf2c169
Reviewed-on: https://chromium-review.googlesource.com/477598Reviewed-by: default avatarDmitry Gozman <dgozman@chromium.org>
Commit-Queue: Blaise Bruer <allada@chromium.org>
Cr-Commit-Position: refs/heads/master@{#487385}
parent e87da780
Tests to ensure datsaver logs warning in console if enabled and only shown once on reloads.
Console messages:
Enabling data saver
Reloading Page
Page reloaded.
Console messages:
Consider disabling Chrome Data Saver while debugging. For more info see: https://support.google.com/chrome/?p=datasaver
Reloading Page
Page reloaded.
Console messages:
<html>
<head>
<script src="../inspector-test.js"></script>
<script src="../console-test.js"></script>
<script src="../network-test.js"></script>
<script>
async function test() {
InspectorTest.addResult('Console messages:')
InspectorTest.dumpConsoleMessages();
InspectorTest.addResult('');
InspectorTest.addResult('Enabling data saver');
InspectorTest.evaluateInPagePromise('window.internals.settings.setDataSaverEnabled(true)');
InspectorTest.addResult('Reloading Page');
await InspectorTest.reloadPagePromise();
InspectorTest.addResult('Console messages:')
InspectorTest.dumpConsoleMessages();
InspectorTest.addResult('');
InspectorTest.addResult('Reloading Page');
await InspectorTest.reloadPagePromise();
InspectorTest.addResult('Console messages:')
InspectorTest.dumpConsoleMessages();
InspectorTest.completeTest();
}
</script>
</head>
<body onload="runTest()">
<p>Tests to ensure datsaver logs warning in console if enabled and only shown once on reloads.</p>
</body>
</html>
......@@ -127,7 +127,6 @@ all_devtools_files = [
"front_end/common/Trie.js",
"front_end/common/UIString.js",
"front_end/common/Worker.js",
"front_end/components/DataSaverInfobar.js",
"front_end/components/DockController.js",
"front_end/components/domBreakpointsSidebarPane.css",
"front_end/components/DOMBreakpointsSidebarPane.js",
......
// Copyright 2015 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.
/**
* @unrestricted
*/
Components.DataSaverInfobar = class extends UI.Infobar {
constructor() {
super(
UI.Infobar.Type.Warning, Common.UIString('Consider disabling Chrome Data Saver while debugging.'),
Common.settings.moduleSetting('disableDataSaverInfobar'));
var message = this.createDetailsRowMessage();
message.createTextChild('More information about ');
message.appendChild(UI.createExternalLink(
'https://support.google.com/chrome/answer/2392284?hl=en', Common.UIString('Chrome Data Saver')));
message.createTextChild('.');
}
/**
* @param {!UI.Panel} panel
*/
static maybeShowInPanel(panel) {
if (Runtime.queryParam('remoteFrontend')) {
var infobar = new Components.DataSaverInfobar();
Components.DataSaverInfobar._infobars.push(infobar);
panel.showInfobar(infobar);
}
}
/**
* @override
*/
dispose() {
for (var infobar of Components.DataSaverInfobar._infobars)
UI.Infobar.prototype.dispose.call(infobar);
}
};
Components.DataSaverInfobar._infobars = [];
......@@ -47,7 +47,6 @@
"network_log"
],
"scripts": [
"DataSaverInfobar.js",
"DOMBreakpointsSidebarPane.js",
"DOMPresentationUtils.js",
"DockController.js",
......
......@@ -119,8 +119,6 @@ Network.NetworkPanel = class extends UI.Panel {
NetworkLog.networkLog.addEventListener(NetworkLog.NetworkLog.Events.RequestAdded, this._onUpdateRequest, this);
NetworkLog.networkLog.addEventListener(NetworkLog.NetworkLog.Events.RequestUpdated, this._onUpdateRequest, this);
NetworkLog.networkLog.addEventListener(NetworkLog.NetworkLog.Events.Reset, this._onNetworkLogReset, this);
Components.DataSaverInfobar.maybeShowInPanel(this);
}
/**
......
......@@ -401,6 +401,26 @@ NetworkLog.PageLoad = class {
/** @type {number} */
this.contentLoadTime;
this.mainRequest = mainRequest;
this._showDataSaverWarningIfNeeded();
}
async _showDataSaverWarningIfNeeded() {
var manager = SDK.NetworkManager.forRequest(this.mainRequest);
if (!manager)
return;
if (!this.mainRequest.finished)
await this.mainRequest.once(SDK.NetworkRequest.Events.FinishedLoading);
var saveDataHeader = this.mainRequest.requestHeaderValue('Save-Data');
if (!NetworkLog.PageLoad._dataSaverMessageWasShown && saveDataHeader && saveDataHeader === 'on') {
var message = Common.UIString(
'Consider disabling %s while debugging. For more info see: %s', Common.UIString('Chrome Data Saver'),
'https://support.google.com/chrome/?p=datasaver');
manager.dispatchEventToListeners(
SDK.NetworkManager.Events.MessageGenerated,
{message: message, requestId: this.mainRequest.requestId(), warning: true});
NetworkLog.PageLoad._dataSaverMessageWasShown = true;
}
}
/**
......@@ -422,6 +442,8 @@ NetworkLog.PageLoad = class {
NetworkLog.PageLoad._lastIdentifier = 0;
NetworkLog.PageLoad._pageLoadForRequestSymbol = Symbol('PageLoadForRequest');
NetworkLog.PageLoad._dataSaverMessageWasShown = false;
/** @typedef {!{initiators: !Set<!SDK.NetworkRequest>, initiated: !Set<!SDK.NetworkRequest>}} */
NetworkLog.NetworkLog.InitiatorGraph;
......
......@@ -80,7 +80,14 @@ SDK.NetworkRequest = class extends Common.Object {
/** @type {!Array.<!SDK.NetworkRequest.EventSourceMessage>} */
this._eventSourceMessages = [];
/** @type {!Object<string, (string|undefined)>} */
this._responseHeaderValues = {};
this._responseHeadersText = '';
/** @type {!Array<!SDK.NetworkRequest.NameValue>} */
this._requestHeaders = [];
/** @type {!Object<string, (string|undefined)>} */
this._requestHeaderValues = {};
this._remoteAddress = '';
......@@ -608,7 +615,7 @@ SDK.NetworkRequest = class extends Common.Object {
* @return {!Array.<!SDK.NetworkRequest.NameValue>}
*/
requestHeaders() {
return this._requestHeaders || [];
return this._requestHeaders;
}
/**
......@@ -642,7 +649,10 @@ SDK.NetworkRequest = class extends Common.Object {
* @return {string|undefined}
*/
requestHeaderValue(headerName) {
return this._headerValue(this.requestHeaders(), headerName);
if (headerName in this._requestHeaderValues)
return this._requestHeaderValues[headerName];
this._requestHeaderValues[headerName] = this._computeHeaderValue(this.requestHeaders(), headerName);
return this._requestHeaderValues[headerName];
}
/**
......@@ -750,12 +760,10 @@ SDK.NetworkRequest = class extends Common.Object {
* @return {string|undefined}
*/
responseHeaderValue(headerName) {
var value = this._responseHeaderValues[headerName];
if (value === undefined) {
value = this._headerValue(this.responseHeaders, headerName);
this._responseHeaderValues[headerName] = (value !== undefined) ? value : null;
}
return (value !== null) ? value : undefined;
if (headerName in this._responseHeaderValues)
return this._responseHeaderValues[headerName];
this._responseHeaderValues[headerName] = this._computeHeaderValue(this.responseHeaders, headerName);
return this._responseHeaderValues[headerName];
}
/**
......@@ -867,7 +875,7 @@ SDK.NetworkRequest = class extends Common.Object {
* @param {string} headerName
* @return {string|undefined}
*/
_headerValue(headers, headerName) {
_computeHeaderValue(headers, headerName) {
headerName = headerName.toLowerCase();
var values = [];
......
......@@ -119,7 +119,6 @@ Sources.SourcesPanel = class extends UI.Panel {
new Sources.WorkspaceMappingTip(this, this._workspace);
Extensions.extensionServer.addEventListener(
Extensions.ExtensionServer.Events.SidebarPaneAdded, this._extensionSidebarPaneAdded, this);
Components.DataSaverInfobar.maybeShowInPanel(this);
SDK.targetManager.observeTargets(this);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment