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

Unified Diff: Source/devtools/front_end/sdk/OverridesSupport.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: rebase 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/elements/OverridesView.js ('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 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)
« no previous file with comments | « Source/devtools/front_end/elements/OverridesView.js ('k') | Source/devtools/front_end/ui/SettingsUI.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698