Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2105)

Unified Diff: Source/devtools/front_end/sdk/OverridesSupport.js

Issue 315003008: [DevTools] UI for network conditions emulation. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/devtools/front_end/responsiveDesignView.css ('k') | Source/devtools/front_end/ui/SettingsUI.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/devtools/front_end/sdk/OverridesSupport.js
diff --git a/Source/devtools/front_end/sdk/OverridesSupport.js b/Source/devtools/front_end/sdk/OverridesSupport.js
index 8d46a0cde1002f1fbfdd9dbd296d0cb6e27801e9..d787ca3e4ce6a91f39350c2bd9ecfe5cf0f4e48b 100644
--- a/Source/devtools/front_end/sdk/OverridesSupport.js
+++ b/Source/devtools/front_end/sdk/OverridesSupport.js
@@ -260,6 +260,7 @@ WebInspector.OverridesSupport.DeviceOrientation.clearDeviceOrientationOverride =
/**
* @param {string} value
+ * @return {!string}
*/
WebInspector.OverridesSupport.integerInputValidator = function(value)
{
@@ -270,6 +271,7 @@ WebInspector.OverridesSupport.integerInputValidator = function(value)
/**
* @param {string} value
+ * @return {!string}
*/
WebInspector.OverridesSupport.doubleInputValidator = function(value)
{
@@ -278,6 +280,22 @@ WebInspector.OverridesSupport.doubleInputValidator = function(value)
return WebInspector.UIString("Value must be non-negative float");
}
+/**
+ * @param {string} value
+ * @return {!string}
+ */
+WebInspector.OverridesSupport.networkDomainsValidator = function(value)
+{
+ function test(s)
+ {
+ return /^[\w\-]+(\.[\w\-]+)*$/.test(s.trim());
+ }
+
+ if (!value.trim())
+ return "";
+ return value.split(",").every(test) ? "" : WebInspector.UIString("Value must be a comma-separated list of domains");
+}
+
// Third element lists device metrics separated by 'x':
// - screen width,
// - screen height,
@@ -444,6 +462,20 @@ WebInspector.OverridesSupport._userAgents = [
["Silk \u2014 Kindle Fire (Mobile view)", "Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; KFTHWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Mobile Safari/535.19 Silk-Accelerated=true"],
];
+WebInspector.OverridesSupport._networkThroughputPresets = [
+ ["Offline", 0],
+ ["5 Kbps", 5 * 1024 / 8],
+ ["10 Kbps (GSM)", 10 * 1024 / 8],
+ ["20 Kbps", 20 * 1024 / 8],
+ ["40 Kbps (GPRS)", 40 * 1024 / 8],
+ ["80 Kbps", 80 * 1024 / 8],
+ ["160 Kbps (EDGE)", 160 * 1024 / 8],
+ ["320 Kbps", 320 * 1024 / 8],
+ ["640 Kbps (3G)", 640 * 1024 / 8],
+ ["1 Mbps", 1024 * 1024 / 8],
+ ["2 Mbps (802.11b)", 2048 * 1024 / 8]
vsevik 2014/06/11 14:53:20 AFAIK 802.11b actually supports up to 5.5 / 11 Mbp
dgozman 2014/06/11 14:59:02 As discussed offline, this is a real throughput es
+];
+
WebInspector.OverridesSupport.prototype = {
/**
* @return {boolean}
@@ -558,6 +590,10 @@ WebInspector.OverridesSupport.prototype = {
this.settings.overrideCSSMedia.addChangeListener(this._cssMediaChanged, this);
this.settings.emulatedCSSMedia.addChangeListener(this._cssMediaChanged, this);
+ this.settings.emulateNetworkConditions.addChangeListener(this._networkConditionsChanged, this);
+ this.settings.networkConditionsDomains.addChangeListener(this._networkConditionsChanged, this);
+ this.settings.networkConditionsThroughput.addChangeListener(this._networkConditionsChanged, this);
+
WebInspector.settings.showMetricsRulers.addChangeListener(this._showRulersChanged, this);
if (this.settings.overrideDeviceOrientation.get())
@@ -578,6 +614,9 @@ WebInspector.OverridesSupport.prototype = {
if (this.settings.overrideUserAgent.get())
this._userAgentChanged();
+ if (this.settings.emulateNetworkConditions.get())
+ this._networkConditionsChanged();
+
this._showRulersChanged();
},
@@ -760,6 +799,20 @@ WebInspector.OverridesSupport.prototype = {
this.maybeHasActiveOverridesChanged();
},
+ _networkConditionsChanged: function()
+ {
+ if (!this.settings.emulateNetworkConditions.get()) {
+ NetworkAgent.emulateNetworkConditions([], 0, false);
+ } else {
+ var domainsString = this.settings.networkConditionsDomains.get().trim();
+ var domains = domainsString ? domainsString.split(",").map(function (s) { return s.trim(); }) : [];
+ var throughput = this.settings.networkConditionsThroughput.get();
+ var offline = !throughput;
+ NetworkAgent.emulateNetworkConditions(domains, throughput, offline);
+ }
+ this.maybeHasActiveOverridesChanged();
+ },
+
/**
* @return {boolean}
*/
@@ -864,6 +917,10 @@ WebInspector.OverridesSupport.prototype = {
this.settings.emulatedCSSMedia = WebInspector.settings.createSetting("emulatedCSSMedia", "print");
this.settings.emulatedDevice = WebInspector.settings.createSetting("emulatedDevice", "Google Nexus 5");
+ this.settings.emulateNetworkConditions = WebInspector.settings.createSetting("emulateNetworkConditions", false);
+ this.settings.networkConditionsDomains = WebInspector.settings.createSetting("networkConditionsDomains", "");
+ this.settings.networkConditionsThroughput = WebInspector.settings.createSetting("networkConditionsThroughput", 0);
+
this.maybeHasActiveOverridesChanged();
if (this._applyInitialOverridesOnTargetAdded) {
@@ -1088,6 +1145,52 @@ WebInspector.OverridesSupport.prototype = {
return { select: userAgentSelectElement, input: otherUserAgentElement };
},
+ /**
+ * @param {!Document} document
+ * @return {!Element}
+ */
+ createNetworkThroughputSelect: function(document)
+ {
+ var throughputSetting = WebInspector.overridesSupport.settings.networkConditionsThroughput;
+ var emulateNetworkSetting = WebInspector.overridesSupport.settings.emulateNetworkConditions;
+ var throughputSelectElement = document.createElement("select");
+ var presets = WebInspector.OverridesSupport._networkThroughputPresets;
+ for (var i = 0; i < presets.length; ++i)
+ throughputSelectElement.add(new Option(presets[i][0], presets[i][1]));
+ throughputSelectElement.selectedIndex = 0;
+
+ settingChanged();
+ throughputSetting.addChangeListener(settingChanged);
+ throughputSelectElement.addEventListener("change", throughputSelected, false);
+
+ function throughputSelected()
+ {
+ var value = Number(throughputSelectElement.options[throughputSelectElement.selectedIndex].value);
+ throughputSetting.removeChangeListener(settingChanged);
+ throughputSetting.set(value);
+ throughputSetting.addChangeListener(settingChanged);
+ emulateNetworkSetting.set(true);
+ }
+
+ function settingChanged()
+ {
+ var value = String(throughputSetting.get());
+ var options = throughputSelectElement.options;
+ var selectionRestored = false;
+ for (var i = 0; i < options.length; ++i) {
+ if (options[i].value === value) {
+ throughputSelectElement.selectedIndex = i;
+ selectionRestored = true;
+ break;
+ }
+ }
+ if (!selectionRestored)
+ throughputSelectElement.selectedIndex = options.length - 1;
+ }
+
+ return throughputSelectElement;
+ },
+
__proto__: WebInspector.Object.prototype
}
« no previous file with comments | « Source/devtools/front_end/responsiveDesignView.css ('k') | Source/devtools/front_end/ui/SettingsUI.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698