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(); |