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

Unified Diff: Source/devtools/front_end/elements/OverridesView.js

Issue 342443002: [DevTools] Ability to emulate touch or user agent, even when device emulation is turned off. (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
Index: Source/devtools/front_end/elements/OverridesView.js
diff --git a/Source/devtools/front_end/elements/OverridesView.js b/Source/devtools/front_end/elements/OverridesView.js
index 019633d055599b060facd8d6a8f04f460c1a8cf2..05375b3fdccd3544833a6de9e185dcf64518c260 100644
--- a/Source/devtools/front_end/elements/OverridesView.js
+++ b/Source/devtools/front_end/elements/OverridesView.js
@@ -85,7 +85,7 @@ WebInspector.OverridesView.prototype = {
* @extends {WebInspector.VBox}
* @param {string} id
* @param {string} name
- * @param {!Array.<!WebInspector.Setting>} settings
+ * @param {!Array.<!WebInspector.Setting|function():boolean>} settings
*/
WebInspector.OverridesView.Tab = function(id, name, settings)
{
@@ -93,8 +93,10 @@ WebInspector.OverridesView.Tab = function(id, name, settings)
this._id = id;
this._name = name;
this._settings = settings;
- for (var i = 0; i < settings.length; ++i)
- settings[i].addChangeListener(this._updateActiveState, this);
+ for (var i = 0; i < settings.length; ++i) {
+ if (settings[i] instanceof WebInspector.Setting)
pfeldman 2014/06/17 11:42:43 What else could it be?
+ settings[i].addChangeListener(this.updateActiveState, this);
+ }
}
WebInspector.OverridesView.Tab.prototype = {
@@ -105,14 +107,22 @@ WebInspector.OverridesView.Tab.prototype = {
{
this._tabbedPane = tabbedPane;
tabbedPane.appendTab(this._id, this._name, this);
- this._updateActiveState();
+ this.updateActiveState();
},
- _updateActiveState: function()
+ updateActiveState: function()
{
+ if (!this._tabbedPane)
+ return;
var active = false;
- for (var i = 0; !active && i < this._settings.length; ++i)
- active = this._settings[i].get();
+ for (var i = 0; !active && i < this._settings.length; ++i) {
+ if (this._settings[i] instanceof WebInspector.Setting) {
pfeldman 2014/06/17 11:42:43 Lets not do this.
dgozman 2014/06/17 12:02:20 Fixed.
+ active = this._settings[i].get();
+ } else {
+ var getter = /** @type function() */ (this._settings[i]);
+ active = getter();
+ }
+ }
this._tabbedPane.element.classList.toggle("overrides-activate-" + this._id, active);
this._tabbedPane.changeTabTitle(this._id, active ? this._name + " \u2713" : this._name);
},
@@ -278,12 +288,11 @@ WebInspector.OverridesView.ViewportTab.prototype = {
*/
WebInspector.OverridesView.NetworkTab = function()
{
- WebInspector.OverridesView.Tab.call(this, "network", WebInspector.UIString("Network"), [WebInspector.overridesSupport.settings.emulateNetworkConditions, WebInspector.overridesSupport.settings.overrideUserAgent]);
+ WebInspector.OverridesView.Tab.call(this, "network", WebInspector.UIString("Network"), [WebInspector.overridesSupport.settings.emulateNetworkConditions, this._isUserAgentOverrideEnabled.bind(this)]);
this.element.classList.add("overrides-network");
this.element.appendChild(this._createSettingCheckbox(WebInspector.UIString("Limit network throughput"), WebInspector.overridesSupport.settings.emulateNetworkConditions));
this.element.appendChild(this._createNetworkConditionsElement());
- this.element.appendChild(this._createSettingCheckbox(WebInspector.UIString("Spoof user agent"), WebInspector.overridesSupport.settings.overrideUserAgent));
- this.element.appendChild(this._createUserAgentSelectRowElement());
+ this._createUserAgentSection();
}
WebInspector.OverridesView.NetworkTab.prototype = {
@@ -306,16 +315,175 @@ WebInspector.OverridesView.NetworkTab.prototype = {
},
/**
- * @return {!Element}
+ * @return {boolean}
+ */
+ _isUserAgentOverrideEnabled: function()
+ {
+ return !!WebInspector.overridesSupport.userAgentOverride();
+ },
+
+ _onUserAgentOverrideEnabledChanged: function()
+ {
+ this.updateActiveState();
+ var enabled = !!WebInspector.overridesSupport.userAgentOverride();
+ if (this._userAgentCheckbox.checked !== enabled)
+ this._userAgentCheckbox.checked = enabled;
+ this._userAgentFieldset.disabled = !enabled;
+ },
+
+ _updateUserAgentOnDeviceUserAgentChanged: function()
pfeldman 2014/06/17 11:42:43 Looking at the code this belongs to the OverridesS
dgozman 2014/06/17 12:02:20 Done.
+ {
+ var userAgent = WebInspector.overridesSupport.settings.deviceUserAgent.get();
+ if (WebInspector.overridesSupport.isEmulateDeviceEnabled() && userAgent && WebInspector.overridesSupport.settings.userAgent.get() !== userAgent)
+ WebInspector.overridesSupport.settings.userAgent.set(userAgent);
+ var enabled = WebInspector.overridesSupport.isEmulateDeviceEnabled() && !!WebInspector.overridesSupport.settings.deviceUserAgent.get();
+ if (WebInspector.overridesSupport.settings.overrideUserAgent.get() !== enabled)
+ WebInspector.overridesSupport.settings.overrideUserAgent.set(enabled);
+ },
+
+ /**
+ * @param {boolean} enabled
+ */
+ _setOverrideUserAgentEnabled: function(enabled)
pfeldman 2014/06/17 11:42:43 ditto
dgozman 2014/06/17 12:02:20 Done.
+ {
+ WebInspector.overridesSupport.settings.overrideUserAgent.set(enabled);
+ if (WebInspector.overridesSupport.isEmulateDeviceEnabled())
+ WebInspector.overridesSupport.settings.deviceUserAgent.set(enabled ? WebInspector.overridesSupport.settings.userAgent.get() : "");
+ },
+
+ /**
+ * @param {string} userAgent
+ */
+ _setUserAgentValue: function(userAgent)
+ {
+ WebInspector.overridesSupport.settings.userAgent.set(userAgent);
+ if (WebInspector.overridesSupport.isEmulateDeviceEnabled())
+ WebInspector.overridesSupport.settings.deviceUserAgent.set(userAgent);
+ },
+
+ _createUserAgentSection: function()
+ {
+ var settings = [WebInspector.overridesSupport.settings.emulateDevice, WebInspector.settings.responsiveDesign.enabled, WebInspector.overridesSupport.settings.deviceUserAgent];
+ for (var i = 0; i < settings.length; i++) {
+ settings[i].addChangeListener(this._onUserAgentOverrideEnabledChanged.bind(this));
+ settings[i].addChangeListener(this._updateUserAgentOnDeviceUserAgentChanged.bind(this));
+ }
+ WebInspector.overridesSupport.settings.overrideUserAgent.addChangeListener(this._onUserAgentOverrideEnabledChanged.bind(this));
+ WebInspector.overridesSupport.settings.userAgent.addChangeListener(this._onUserAgentOverrideEnabledChanged.bind(this));
+
+ var label = this.element.createChild("label");
+ var checkbox = label.createChild("input");
+ checkbox.type = "checkbox";
+ checkbox.name = WebInspector.UIString("Spoof user agent");
+ label.createTextChild(WebInspector.UIString("Spoof user agent"));
+
+ /**
+ * @this {!WebInspector.OverridesView.NetworkTab}
+ */
+ function checkboxChanged()
+ {
+ this._setOverrideUserAgentEnabled(checkbox.checked);
+ }
+ checkbox.addEventListener("change", checkboxChanged.bind(this), false);
+
+ var fieldsetElement = this.element.createChild("fieldset");
+ this._createUserAgentSelectAndInput(fieldsetElement, settings.concat([WebInspector.overridesSupport.settings.userAgent]));
+
+ this._userAgentFieldset = fieldsetElement;
+ this._userAgentCheckbox = checkbox;
+ this._onUserAgentOverrideEnabledChanged();
+ },
+
+ /**
+ * @param {!Element} fieldsetElement
+ * @param {!Array.<!WebInspector.Setting>} settings
*/
- _createUserAgentSelectRowElement: function()
+ _createUserAgentSelectAndInput: function(fieldsetElement, settings)
{
- var fieldsetElement = WebInspector.SettingsUI.createSettingFieldset(WebInspector.overridesSupport.settings.overrideUserAgent);
- var userAgentSelectAndInput = WebInspector.overridesSupport.createUserAgentSelectAndInput(document);
- fieldsetElement.appendChild(userAgentSelectAndInput.select);
+ var userAgents = WebInspector.OverridesSupport._userAgents.concat([[WebInspector.UIString("Other"), "Other"]]);
+
+ var userAgentSelectElement = fieldsetElement.createChild("select");
+ for (var i = 0; i < userAgents.length; ++i)
+ userAgentSelectElement.add(new Option(userAgents[i][0], userAgents[i][1]));
+ userAgentSelectElement.selectedIndex = 0;
+
fieldsetElement.createChild("br");
- fieldsetElement.appendChild(userAgentSelectAndInput.input);
- return fieldsetElement;
+
+ var otherUserAgentElement = fieldsetElement.createChild("input");
+ otherUserAgentElement.type = "text";
+ otherUserAgentElement.value = otherUserAgentElement.title = WebInspector.overridesSupport.userAgentOverride();
+
+ /**
+ * @this {!WebInspector.OverridesView.NetworkTab}
+ */
+ function userAgentSelected()
+ {
+ var value = userAgentSelectElement.options[userAgentSelectElement.selectedIndex].value;
+ if (value !== "Other") {
+ this._setUserAgentValue(value);
+ otherUserAgentElement.value = value;
+ otherUserAgentElement.title = value;
+ otherUserAgentElement.disabled = true;
+ } else {
+ otherUserAgentElement.disabled = false;
+ otherUserAgentElement.focus();
+ }
+ }
+ var userAgentSelectedBound = userAgentSelected.bind(this);
+
+ function settingChanged()
+ {
+ var deviceUserAgent = WebInspector.overridesSupport.isEmulateDeviceEnabled() ? WebInspector.overridesSupport.settings.deviceUserAgent.get() : "";
+ var value = deviceUserAgent || WebInspector.overridesSupport.settings.userAgent.get();
+ var options = userAgentSelectElement.options;
+ var selectionRestored = false;
+ for (var i = 0; i < options.length; ++i) {
+ if (options[i].value === value) {
+ userAgentSelectElement.selectedIndex = i;
+ selectionRestored = true;
+ break;
+ }
+ }
+
+ otherUserAgentElement.disabled = selectionRestored;
+ if (!selectionRestored)
+ userAgentSelectElement.selectedIndex = options.length - 1;
+
+ if (otherUserAgentElement.value !== value) {
+ otherUserAgentElement.value = value;
+ otherUserAgentElement.title = value;
+ }
+ }
+
+ function textKeyDown(event)
+ {
+ if (isEnterKey(event))
+ textChangedBound();
+ }
+
+ function textDoubleClicked()
+ {
+ userAgentSelectElement.selectedIndex = userAgents.length - 1;
+ userAgentSelectedBound();
+ }
+
+ /**
+ * @this {!WebInspector.OverridesView.NetworkTab}
+ */
+ function textChanged()
+ {
+ this._setUserAgentValue(otherUserAgentElement.value);
+ }
+ var textChangedBound = textChanged.bind(this);
+
+ settingChanged();
+ for (var i = 0; i < settings.length; i++)
+ settings[i].addChangeListener(settingChanged);
+
+ userAgentSelectElement.addEventListener("change", userAgentSelectedBound, false);
+ otherUserAgentElement.addEventListener("dblclick", textDoubleClicked, true);
+ otherUserAgentElement.addEventListener("blur", textChangedBound, false);
+ otherUserAgentElement.addEventListener("keydown", textKeyDown, false);
},
__proto__: WebInspector.OverridesView.Tab.prototype
@@ -329,19 +497,77 @@ WebInspector.OverridesView.NetworkTab.prototype = {
WebInspector.OverridesView.SensorsTab = function()
{
var settings = [WebInspector.overridesSupport.settings.overrideGeolocation, WebInspector.overridesSupport.settings.overrideDeviceOrientation];
- if (!WebInspector.overridesSupport.hasTouchInputs() && !WebInspector.overridesSupport.responsiveDesignAvailable())
- settings.push(WebInspector.overridesSupport.settings.emulateTouchEvents);
+ if (!WebInspector.overridesSupport.hasTouchInputs())
+ settings.push(this._isTouchEnabled.bind(this));
WebInspector.OverridesView.Tab.call(this, "sensors", WebInspector.UIString("Sensors"), settings);
this.element.classList.add("overrides-sensors");
this.registerRequiredCSS("accelerometer.css");
- if (!WebInspector.overridesSupport.hasTouchInputs() && !WebInspector.overridesSupport.responsiveDesignAvailable())
- this.element.appendChild(this._createSettingCheckbox(WebInspector.UIString("Emulate touch screen"), WebInspector.overridesSupport.settings.emulateTouchEvents));
+ if (!WebInspector.overridesSupport.hasTouchInputs())
+ this.element.appendChild(this._createTouchCheckbox());
this._appendGeolocationOverrideControl();
this._apendDeviceOrientationOverrideControl();
}
WebInspector.OverridesView.SensorsTab.prototype = {
+ /**
+ * @return {boolean}
+ */
+ _isTouchEnabled: function()
+ {
+ return WebInspector.overridesSupport.isTouchEmulationEnabled();
+ },
+
+ _onTouchEmulationChanged: function()
+ {
+ this.updateActiveState();
+ var enabled = WebInspector.overridesSupport.isTouchEmulationEnabled();
+ if (this._touchCheckbox.checked !== enabled)
+ this._touchCheckbox.checked = enabled;
+ },
+
+ _updateSensorsTouchOnDeviceTouchChanged: function()
+ {
+ var enabled = WebInspector.overridesSupport.isEmulateDeviceEnabled() && WebInspector.overridesSupport.settings.deviceTouch.get();
+ if (WebInspector.overridesSupport.settings.sensorsTouch.get() !== enabled)
+ WebInspector.overridesSupport.settings.sensorsTouch.set(enabled);
+ },
+
+ /**
+ * @return {!Element}
+ */
+ _createTouchCheckbox: function()
+ {
+ var settings = [WebInspector.overridesSupport.settings.emulateDevice, WebInspector.settings.responsiveDesign.enabled, WebInspector.overridesSupport.settings.deviceTouch];
+ for (var i = 0; i < settings.length; i++) {
+ settings[i].addChangeListener(this._onTouchEmulationChanged.bind(this));
+ settings[i].addChangeListener(this._updateSensorsTouchOnDeviceTouchChanged.bind(this));
+ }
+ WebInspector.overridesSupport.settings.sensorsTouch.addChangeListener(this._onTouchEmulationChanged.bind(this));
+
+ var input = document.createElement("input");
+ input.type = "checkbox";
+ input.name = WebInspector.UIString("Emulate touch screen");
+ this._touchCheckbox = input;
+
+ var label = document.createElement("label");
+ label.appendChild(input);
+ label.createTextChild(WebInspector.UIString("Emulate touch screen"));
+
+ function inputChanged()
+ {
+ var enabled = input.checked;
+ WebInspector.overridesSupport.settings.sensorsTouch.set(enabled);
+ if (WebInspector.overridesSupport.isEmulateDeviceEnabled())
+ WebInspector.overridesSupport.settings.deviceTouch.set(enabled);
+ }
+ input.addEventListener("change", inputChanged, false);
+
+ this._onTouchEmulationChanged();
+
+ return label;
+ },
+
_appendGeolocationOverrideControl: function()
{
const geolocationSetting = WebInspector.overridesSupport.settings.geolocationOverride.get();
« no previous file with comments | « Source/devtools/front_end/ResponsiveDesignView.js ('k') | Source/devtools/front_end/sdk/OverridesSupport.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698