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 4f42ee87c39af53e365b4475267b914beaba644b..7bad781d575019a1e788c60b93841d2f66a9b52d 100644 |
--- a/Source/devtools/front_end/sdk/OverridesSupport.js |
+++ b/Source/devtools/front_end/sdk/OverridesSupport.js |
@@ -515,13 +515,12 @@ WebInspector.OverridesSupport.prototype = { |
var metrics = WebInspector.OverridesSupport.DeviceMetrics.parseSetting(deviceMetrics); |
this._deviceMetricsChangedListenerMuted = true; |
this._userAgentChangedListenerMuted = true; |
- this.settings.userAgent.set(userAgent); |
+ this.settings.deviceUserAgent.set(userAgent); |
this.settings.deviceWidth.set(metrics.width); |
this.settings.deviceHeight.set(metrics.height); |
this.settings.deviceScaleFactor.set(metrics.deviceScaleFactor); |
this.settings.deviceTextAutosizing.set(metrics.textAutosizing); |
- this.settings.overrideUserAgent.set(true); |
- this.settings.emulateTouchEvents.set(true); |
+ this.settings.deviceTouch.set(true); |
this.settings.emulateViewport.set(true); |
this.settings.emulateDevice.set(true); |
delete this._deviceMetricsChangedListenerMuted; |
@@ -533,31 +532,16 @@ WebInspector.OverridesSupport.prototype = { |
} |
}, |
- /** |
- * @param {string} deviceMetrics |
- * @param {string} userAgent |
- * @return {boolean} |
- */ |
- isEmulatingDevice: function(deviceMetrics, userAgent) |
- { |
- var metrics = WebInspector.OverridesSupport.DeviceMetrics.parseSetting(deviceMetrics); |
- return this.settings.userAgent.get() === userAgent |
- && this.settings.deviceWidth.get() === metrics.width |
- && this.settings.deviceHeight.get() === metrics.height |
- && this.settings.deviceScaleFactor.get() === metrics.deviceScaleFactor |
- && this.settings.deviceTextAutosizing.get() === metrics.textAutosizing |
- && this.settings.emulateTouchEvents.get() |
- && this.settings.emulateViewport.get(); |
- }, |
- |
- resetEmulatedDevice: function() |
+ reset: function() |
{ |
this._deviceMetricsChangedListenerMuted = true; |
this._userAgentChangedListenerMuted = true; |
this.settings.emulateDevice.set(false); |
+ this.settings.sensorsTouch.set(false); |
this.settings.overrideUserAgent.set(false); |
- this.settings.emulateTouchEvents.set(false); |
- this.settings.emulateViewport.set(false); |
+ this.settings.overrideDeviceOrientation.set(false); |
+ this.settings.overrideGeolocation.set(false); |
+ this.settings.overrideCSSMedia.set(false); |
delete this._deviceMetricsChangedListenerMuted; |
delete this._userAgentChangedListenerMuted; |
@@ -567,12 +551,21 @@ WebInspector.OverridesSupport.prototype = { |
} |
}, |
- reset: function() |
+ /** |
+ * @param {string} deviceMetrics |
+ * @param {string} userAgent |
+ * @return {boolean} |
+ */ |
+ isEmulatingDevice: function(deviceMetrics, userAgent) |
{ |
- this.settings.overrideDeviceOrientation.set(false); |
- this.settings.overrideGeolocation.set(false); |
- this.settings.overrideCSSMedia.set(false); |
- this.resetEmulatedDevice(); |
+ var metrics = WebInspector.OverridesSupport.DeviceMetrics.parseSetting(deviceMetrics); |
+ return this.settings.deviceUserAgent.get() === userAgent |
+ && this.settings.deviceWidth.get() === metrics.width |
+ && this.settings.deviceHeight.get() === metrics.height |
+ && this.settings.deviceScaleFactor.get() === metrics.deviceScaleFactor |
+ && this.settings.deviceTextAutosizing.get() === metrics.textAutosizing |
+ && this.settings.deviceTouch.get() |
+ && this.settings.emulateViewport.get(); |
}, |
applyInitialOverrides: function() |
@@ -584,18 +577,18 @@ WebInspector.OverridesSupport.prototype = { |
this._initialized = true; |
+ this._addEmulateDeviceListener(this._userAgentChanged); |
+ this.settings.deviceUserAgent.addChangeListener(this._userAgentChanged, this); |
this.settings.overrideUserAgent.addChangeListener(this._userAgentChanged, this); |
this.settings.userAgent.addChangeListener(this._userAgentChanged, this); |
- this.settings.emulateDevice.addChangeListener(this._updateUserAgentAndTouchOnEmulateDeviceChanged, this); |
- this.settings.emulateDevice.addChangeListener(this._deviceMetricsChanged, this); |
+ this._addEmulateDeviceListener(this._deviceMetricsChanged); |
this.settings.deviceWidth.addChangeListener(this._deviceMetricsChanged, this); |
this.settings.deviceHeight.addChangeListener(this._deviceMetricsChanged, this); |
this.settings.deviceScaleFactor.addChangeListener(this._deviceMetricsChanged, this); |
this.settings.deviceTextAutosizing.addChangeListener(this._deviceMetricsChanged, this); |
this.settings.emulateViewport.addChangeListener(this._deviceMetricsChanged, this); |
this.settings.deviceFitWindow.addChangeListener(this._deviceMetricsChanged, this); |
- WebInspector.settings.responsiveDesign.enabled.addChangeListener(this._deviceMetricsChanged, this); |
this.settings.overrideGeolocation.addChangeListener(this._geolocationPositionChanged, this); |
this.settings.geolocationOverride.addChangeListener(this._geolocationPositionChanged, this); |
@@ -603,9 +596,9 @@ WebInspector.OverridesSupport.prototype = { |
this.settings.overrideDeviceOrientation.addChangeListener(this._deviceOrientationChanged, this); |
this.settings.deviceOrientationOverride.addChangeListener(this._deviceOrientationChanged, this); |
- this.settings.emulateDevice.addChangeListener(this._emulateTouchEventsChanged, this); |
- this.settings.emulateTouchEvents.addChangeListener(this._emulateTouchEventsChanged, this); |
- this.settings.emulateDevice.addChangeListener(this._updateUserAgentAndTouchOnEmulateDeviceChanged, this); |
+ this._addEmulateDeviceListener(this._emulateTouchEventsChanged); |
+ this.settings.deviceTouch.addChangeListener(this._emulateTouchEventsChanged, this); |
+ this.settings.sensorsTouch.addChangeListener(this._emulateTouchEventsChanged, this); |
this.settings.overrideCSSMedia.addChangeListener(this._cssMediaChanged, this); |
this.settings.emulatedCSSMedia.addChangeListener(this._cssMediaChanged, this); |
@@ -622,7 +615,7 @@ WebInspector.OverridesSupport.prototype = { |
if (this.settings.overrideGeolocation.get()) |
this._geolocationPositionChanged(); |
- if (this.settings.emulateTouchEvents.get() && (this.settings.emulateDevice.get() || !this._responsiveDesignAvailable)) |
+ if (this.isTouchEmulationEnabled()) |
this._emulateTouchEventsChanged(); |
if (this.settings.overrideCSSMedia.get()) |
@@ -631,7 +624,7 @@ WebInspector.OverridesSupport.prototype = { |
if (this.settings.emulateDevice.get()) |
this._deviceMetricsChanged(); |
- if (this.settings.overrideUserAgent.get()) |
+ if (this.userAgentOverride()) |
this._userAgentChanged(); |
if (this.settings.emulateNetworkConditions.get()) |
@@ -640,20 +633,20 @@ WebInspector.OverridesSupport.prototype = { |
this._showRulersChanged(); |
}, |
- _updateUserAgentAndTouchOnEmulateDeviceChanged: function() |
+ /** |
+ * @param {function(this:WebInspector.OverridesSupport)} listener |
+ */ |
+ _addEmulateDeviceListener: function(listener) |
{ |
- var value = this.settings.emulateDevice.get(); |
- if (this.settings.overrideUserAgent.get() !== value) |
- this.settings.overrideUserAgent.set(value); |
- if (this.settings.emulateTouchEvents.get() !== value && !this._responsiveDesignAvailable) |
- this.settings.emulateTouchEvents.set(value); |
+ this.settings.emulateDevice.addChangeListener(listener, this); |
+ WebInspector.settings.responsiveDesign.enabled.addChangeListener(listener, this); |
}, |
_userAgentChanged: function() |
{ |
if (this._userAgentChangedListenerMuted) |
return; |
- var userAgent = this.settings.overrideUserAgent.get() ? this.settings.userAgent.get() : ""; |
+ var userAgent = this.userAgentOverride(); |
NetworkAgent.setUserAgentOverride(userAgent); |
if (this._userAgent !== userAgent) |
this._updateUserAgentWarningMessage(WebInspector.UIString("You might need to reload the page for proper user agent spoofing and viewport rendering.")); |
@@ -798,10 +791,7 @@ WebInspector.OverridesSupport.prototype = { |
_emulateTouchEventsChanged: function() |
{ |
- if (this.hasTouchInputs() && this.settings.emulateTouchEvents.get()) |
- return; |
- |
- var emulateTouch = this.settings.emulateTouchEvents.get() && (this.settings.emulateDevice.get() || !this._responsiveDesignAvailable); |
+ var emulateTouch = this.isTouchEmulationEnabled(); |
var targets = WebInspector.targetManager.targets(); |
for (var i = 0; i < targets.length; ++i) |
targets[i].domModel.emulateTouchEventObjects(emulateTouch); |
@@ -861,11 +851,11 @@ WebInspector.OverridesSupport.prototype = { |
maybeHasActiveOverridesChanged: function() |
{ |
var hasActiveOverrides = |
- this.settings.overrideUserAgent.get() || |
+ !!this.userAgentOverride() || |
(this.settings.emulateDevice.get() && !this.isInspectingDevice()) || |
this.settings.overrideGeolocation.get() || |
this.settings.overrideDeviceOrientation.get() || |
- (this.settings.emulateTouchEvents.get() && this.settings.emulateDevice.get() && !this.hasTouchInputs()) || |
+ this.isTouchEmulationEnabled() || |
(this.settings.overrideCSSMedia.get() && !this.isInspectingDevice()); |
if (this._hasActiveOverrides !== hasActiveOverrides) { |
this._hasActiveOverrides = hasActiveOverrides; |
@@ -929,7 +919,8 @@ WebInspector.OverridesSupport.prototype = { |
this.settings.deviceFitWindow = WebInspector.settings.createSetting("deviceFitWindow", true); |
// FIXME: rename viewport to mobile everywhere in the code. |
this.settings.emulateViewport = WebInspector.settings.createSetting("emulateViewport", false); |
- this.settings.emulateTouchEvents = WebInspector.settings.createSetting("emulateTouchEvents", false); |
+ this.settings.deviceTouch = WebInspector.settings.createSetting("deviceTouch", false); |
+ this.settings.deviceUserAgent = WebInspector.settings.createSetting("deviceUserAgent", false); |
this.settings.overrideGeolocation = WebInspector.settings.createSetting("overrideGeolocation", false); |
this.settings.geolocationOverride = WebInspector.settings.createSetting("geolocationOverride", ""); |
@@ -937,6 +928,7 @@ WebInspector.OverridesSupport.prototype = { |
this.settings.deviceOrientationOverride = WebInspector.settings.createSetting("deviceOrientationOverride", ""); |
this.settings.overrideCSSMedia = WebInspector.settings.createSetting("overrideCSSMedia", false); |
this.settings.emulatedCSSMedia = WebInspector.settings.createSetting("emulatedCSSMedia", "print"); |
+ this.settings.sensorsTouch = WebInspector.settings.createSetting("sensorsTouch", false); |
this.settings.emulateNetworkConditions = WebInspector.settings.createSetting("emulateNetworkConditions", false); |
this.settings.networkConditionsDomains = WebInspector.settings.createSetting("networkConditionsDomains", ""); |
@@ -977,11 +969,52 @@ WebInspector.OverridesSupport.prototype = { |
/** |
* @return {boolean} |
*/ |
+ isEmulateDeviceEnabled: function() |
+ { |
+ return this.settings.emulateDevice.get() && (!this._responsiveDesignAvailable || WebInspector.settings.responsiveDesign.enabled.get()); |
+ }, |
+ |
+ /** |
+ * @return {boolean} |
+ */ |
+ isTouchEmulationEnabled: function() |
+ { |
+ return !this.hasTouchInputs() && ((this.isEmulateDeviceEnabled() && this.settings.deviceTouch.get()) || this.settings.sensorsTouch.get()); |
+ }, |
+ |
+ /** |
+ * @return {string} |
+ */ |
+ userAgentOverride: function() |
+ { |
+ return this.isEmulateDeviceEnabled() ? this.settings.deviceUserAgent.get() : (this.settings.overrideUserAgent.get() ? this.settings.userAgent.get() : ""); |
+ }, |
+ |
+ /** |
+ * @return {boolean} |
+ */ |
hasTouchInputs: function() |
{ |
return !!this._target && this._target.hasTouchInputs; |
}, |
+ updateSensorsTouchToMatchDeviceTouch: function() |
+ { |
+ var enabled = this.isEmulateDeviceEnabled() && this.settings.deviceTouch.get(); |
+ if (this.settings.sensorsTouch.get() !== enabled) |
+ this.settings.sensorsTouch.set(enabled); |
+ }, |
+ |
+ updateUserAgentToMatchDeviceUserAgent: function() |
+ { |
+ var userAgent = this.settings.deviceUserAgent.get(); |
+ if (this.isEmulateDeviceEnabled() && userAgent && this.settings.userAgent.get() !== userAgent) |
+ this.settings.userAgent.set(userAgent); |
+ var enabled = this.isEmulateDeviceEnabled() && !!this.settings.deviceUserAgent.get(); |
+ if (this.settings.overrideUserAgent.get() !== enabled) |
+ this.settings.overrideUserAgent.set(enabled); |
+ }, |
+ |
/** |
* Compute the font scale factor. |
* |
@@ -1052,9 +1085,8 @@ WebInspector.OverridesSupport.prototype = { |
WebInspector.overridesSupport.settings.deviceTextAutosizing.addChangeListener(emulatedSettingChanged); |
WebInspector.overridesSupport.settings.emulateViewport.addChangeListener(emulatedSettingChanged); |
WebInspector.overridesSupport.settings.deviceFitWindow.addChangeListener(emulatedSettingChanged); |
- WebInspector.overridesSupport.settings.emulateTouchEvents.addChangeListener(emulatedSettingChanged); |
- WebInspector.overridesSupport.settings.overrideUserAgent.addChangeListener(emulatedSettingChanged); |
- WebInspector.overridesSupport.settings.userAgent.addChangeListener(emulatedSettingChanged); |
+ WebInspector.overridesSupport.settings.deviceTouch.addChangeListener(emulatedSettingChanged); |
+ WebInspector.overridesSupport.settings.deviceUserAgent.addChangeListener(emulatedSettingChanged); |
emulatedSettingChanged(); |
function deviceSelected() |
@@ -1089,101 +1121,6 @@ WebInspector.OverridesSupport.prototype = { |
/** |
* @param {!Document} document |
- * @return {{select: !Element, input: !Element}} |
- */ |
- createUserAgentSelectAndInput: function(document) |
- { |
- var overrideUserAgentSetting = WebInspector.overridesSupport.settings.overrideUserAgent; |
- var userAgentSetting = WebInspector.overridesSupport.settings.userAgent; |
- var userAgents = WebInspector.OverridesSupport._userAgents.concat([[WebInspector.UIString("Other"), "Other"]]); |
- |
- var userAgentSelectElement = document.createElement("select"); |
- for (var i = 0; i < userAgents.length; ++i) |
- userAgentSelectElement.add(new Option(userAgents[i][0], userAgents[i][1])); |
- userAgentSelectElement.selectedIndex = 0; |
- |
- var otherUserAgentElement = document.createElement("input"); |
- otherUserAgentElement.type = "text"; |
- otherUserAgentElement.value = userAgentSetting.get(); |
- otherUserAgentElement.title = userAgentSetting.get(); |
- |
- settingChanged(); |
- userAgentSetting.addChangeListener(settingChanged); |
- userAgentSelectElement.addEventListener("change", userAgentSelected, false); |
- |
- otherUserAgentElement.addEventListener("dblclick", textDoubleClicked, true); |
- otherUserAgentElement.addEventListener("blur", textChanged, false); |
- otherUserAgentElement.addEventListener("keydown", textKeyDown, false); |
- |
- function userAgentSelected() |
- { |
- var value = userAgentSelectElement.options[userAgentSelectElement.selectedIndex].value; |
- if (value !== "Other") { |
- userAgentSetting.removeChangeListener(settingChanged); |
- userAgentSetting.set(value); |
- userAgentSetting.addChangeListener(settingChanged); |
- otherUserAgentElement.value = value; |
- otherUserAgentElement.title = value; |
- otherUserAgentElement.readOnly = true; |
- } else { |
- otherUserAgentElement.readOnly = !overrideUserAgentSetting.get(); |
- otherUserAgentElement.focus(); |
- } |
- overrideUserAgentSetting.set(true); |
- } |
- |
- function settingChanged() |
- { |
- var value = userAgentSetting.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.readOnly = !overrideUserAgentSetting.get() || selectionRestored; |
- if (!selectionRestored) |
- userAgentSelectElement.selectedIndex = options.length - 1; |
- |
- if (otherUserAgentElement.value !== value) { |
- otherUserAgentElement.value = value; |
- otherUserAgentElement.title = value; |
- } |
- } |
- |
- function textKeyDown(event) |
- { |
- if (isEnterKey(event)) |
- textChanged(); |
- } |
- |
- function textDoubleClicked() |
- { |
- userAgentSelectElement.selectedIndex = userAgents.length - 1; |
- userAgentSelected(); |
- } |
- |
- function textChanged() |
- { |
- if (userAgentSetting.get() !== otherUserAgentElement.value) |
- userAgentSetting.set(otherUserAgentElement.value); |
- } |
- |
- overrideUserAgentSetting.addChangeListener(overrideUserAgentChanged); |
- function overrideUserAgentChanged() |
- { |
- otherUserAgentElement.readOnly = !overrideUserAgentSetting.get() || (userAgentSelectElement.options[userAgentSelectElement.selectedIndex].value !== "Other"); |
- } |
- |
- return { select: userAgentSelectElement, input: otherUserAgentElement }; |
- }, |
- |
- /** |
- * @param {!Document} document |
* @return {!Element} |
*/ |
createNetworkThroughputSelect: function(document) |