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 9d11541452e65ad9e4bd7ef96afaca2de2ab5efd..98b36915c03f2e5f10fcb7e4232649e30ad127c7 100644 |
--- a/Source/devtools/front_end/sdk/OverridesSupport.js |
+++ b/Source/devtools/front_end/sdk/OverridesSupport.js |
@@ -37,14 +37,13 @@ |
WebInspector.OverridesSupport = function(responsiveDesignAvailable) |
{ |
WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.MainFrameNavigated, this._onMainFrameNavigated.bind(this), this); |
- this._overrideDeviceResolution = false; |
this._emulateViewportEnabled = false; |
this._userAgent = ""; |
this._pageResizer = null; |
this._initialized = false; |
this._deviceMetricsThrottler = new WebInspector.Throttler(0); |
- WebInspector.targetManager.observeTargets(this); |
this._responsiveDesignAvailable = responsiveDesignAvailable; |
+ WebInspector.targetManager.observeTargets(this); |
} |
WebInspector.OverridesSupport.Events = { |
@@ -517,7 +516,6 @@ WebInspector.OverridesSupport.prototype = { |
this._deviceMetricsChangedListenerMuted = true; |
this._userAgentChangedListenerMuted = true; |
this.settings.userAgent.set(userAgent); |
- this.settings.overrideDeviceResolution.set(true); |
this.settings.deviceWidth.set(metrics.width); |
this.settings.deviceHeight.set(metrics.height); |
this.settings.deviceScaleFactor.set(metrics.deviceScaleFactor); |
@@ -525,6 +523,7 @@ WebInspector.OverridesSupport.prototype = { |
this.settings.overrideUserAgent.set(true); |
this.settings.emulateTouchEvents.set(true); |
this.settings.emulateViewport.set(true); |
+ this.settings.emulateDevice.set(true); |
delete this._deviceMetricsChangedListenerMuted; |
delete this._userAgentChangedListenerMuted; |
@@ -534,11 +533,28 @@ 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() |
{ |
this._deviceMetricsChangedListenerMuted = true; |
this._userAgentChangedListenerMuted = true; |
- this.settings.overrideDeviceResolution.set(false); |
+ this.settings.emulateDevice.set(false); |
this.settings.overrideUserAgent.set(false); |
this.settings.emulateTouchEvents.set(false); |
this.settings.emulateViewport.set(false); |
@@ -570,8 +586,9 @@ WebInspector.OverridesSupport.prototype = { |
this.settings.overrideUserAgent.addChangeListener(this._userAgentChanged, this); |
this.settings.userAgent.addChangeListener(this._userAgentChanged, this); |
+ this.settings.emulateDevice.addChangeListener(this._updateUserAgentAndTouchOnEmulateDeviceChanged, this); |
- this.settings.overrideDeviceResolution.addChangeListener(this._deviceMetricsChanged, this); |
+ this.settings.emulateDevice.addChangeListener(this._deviceMetricsChanged, this); |
this.settings.deviceWidth.addChangeListener(this._deviceMetricsChanged, this); |
this.settings.deviceHeight.addChangeListener(this._deviceMetricsChanged, this); |
this.settings.deviceScaleFactor.addChangeListener(this._deviceMetricsChanged, this); |
@@ -586,7 +603,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.settings.overrideCSSMedia.addChangeListener(this._cssMediaChanged, this); |
this.settings.emulatedCSSMedia.addChangeListener(this._cssMediaChanged, this); |
@@ -603,13 +622,13 @@ WebInspector.OverridesSupport.prototype = { |
if (this.settings.overrideGeolocation.get()) |
this._geolocationPositionChanged(); |
- if (this.settings.emulateTouchEvents.get()) |
+ if (this.settings.emulateTouchEvents.get() && (this.settings.emulateDevice.get() || !this._responsiveDesignAvailable)) |
this._emulateTouchEventsChanged(); |
if (this.settings.overrideCSSMedia.get()) |
this._cssMediaChanged(); |
- if (this.settings.overrideDeviceResolution.get() || this.settings.emulateViewport.get()) |
+ if (this.settings.emulateDevice.get()) |
this._deviceMetricsChanged(); |
if (this.settings.overrideUserAgent.get()) |
@@ -621,6 +640,15 @@ WebInspector.OverridesSupport.prototype = { |
this._showRulersChanged(); |
}, |
+ _updateUserAgentAndTouchOnEmulateDeviceChanged: function() |
+ { |
+ 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); |
+ }, |
+ |
_userAgentChanged: function() |
{ |
if (this._userAgentChangedListenerMuted) |
@@ -660,17 +688,16 @@ WebInspector.OverridesSupport.prototype = { |
if (this._deviceMetricsChangedListenerMuted) |
return; |
var responsiveDesignAvailableAndDisabled = this._responsiveDesignAvailable && (!WebInspector.settings.responsiveDesign.enabled.get() || !this._pageResizer); |
- var overrideDeviceResolution = this.settings.overrideDeviceResolution.get(); |
- var emulationEnabled = overrideDeviceResolution || this.settings.emulateViewport.get(); |
- if (responsiveDesignAvailableAndDisabled || !emulationEnabled) { |
+ var emulateDevice = this.settings.emulateDevice.get(); |
+ if (responsiveDesignAvailableAndDisabled || !emulateDevice) { |
this._deviceMetricsThrottler.schedule(clearDeviceMetricsOverride.bind(this)); |
- if (this._pageResizer && !emulationEnabled) |
+ if (this._pageResizer && !emulateDevice) |
this._pageResizer.update(0, 0, 0); |
return; |
} |
- var dipWidth = overrideDeviceResolution ? this.settings.deviceWidth.get() : 0; |
- var dipHeight = overrideDeviceResolution ? this.settings.deviceHeight.get() : 0; |
+ var dipWidth = emulateDevice ? this.settings.deviceWidth.get() : 0; |
+ var dipHeight = emulateDevice ? this.settings.deviceHeight.get() : 0; |
// Disable override without checks. |
if (this.isInspectingDevice()) |
@@ -728,11 +755,9 @@ WebInspector.OverridesSupport.prototype = { |
return; |
} |
- var overrideDeviceResolution = this.settings.overrideDeviceResolution.get(); |
- var viewportEnabled = this.settings.emulateViewport.get(); |
- if (this._overrideDeviceResolution !== overrideDeviceResolution || this._emulateViewportEnabled !== viewportEnabled) |
+ var viewportEnabled = this.settings.emulateDevice.get() && this.settings.emulateViewport.get(); |
+ if (this._emulateViewportEnabled !== viewportEnabled) |
this._updateDeviceMetricsWarningMessage(WebInspector.UIString("You might need to reload the page for proper user agent spoofing and viewport rendering.")); |
- this._overrideDeviceResolution = overrideDeviceResolution; |
this._emulateViewportEnabled = viewportEnabled; |
this._deviceMetricsOverrideAppliedForTest(); |
this.maybeHasActiveOverridesChanged(); |
@@ -776,7 +801,7 @@ WebInspector.OverridesSupport.prototype = { |
if (this.hasTouchInputs() && this.settings.emulateTouchEvents.get()) |
return; |
- var emulateTouch = this.settings.emulateTouchEvents.get(); |
+ var emulateTouch = this.settings.emulateTouchEvents.get() && (this.settings.emulateDevice.get() || !this._responsiveDesignAvailable); |
var targets = WebInspector.targetManager.targets(); |
for (var i = 0; i < targets.length; ++i) |
targets[i].domModel.emulateTouchEventObjects(emulateTouch); |
@@ -814,7 +839,7 @@ WebInspector.OverridesSupport.prototype = { |
*/ |
showMetricsRulers: function() |
{ |
- var rulersInPageResizer = this._pageResizer && this.settings.overrideDeviceResolution.get(); |
+ var rulersInPageResizer = this._pageResizer && this.settings.emulateDevice.get(); |
return WebInspector.settings.showMetricsRulers.get() && !rulersInPageResizer; |
}, |
@@ -837,10 +862,10 @@ WebInspector.OverridesSupport.prototype = { |
{ |
var hasActiveOverrides = |
this.settings.overrideUserAgent.get() || |
- ((this.settings.overrideDeviceResolution.get() || this.settings.emulateViewport.get()) && !this.isInspectingDevice()) || |
+ (this.settings.emulateDevice.get() && !this.isInspectingDevice()) || |
this.settings.overrideGeolocation.get() || |
this.settings.overrideDeviceOrientation.get() || |
- (this.settings.emulateTouchEvents.get() && !this.hasTouchInputs()) || |
+ (this.settings.emulateTouchEvents.get() && this.settings.emulateDevice.get() && !this.hasTouchInputs()) || |
(this.settings.overrideCSSMedia.get() && !this.isInspectingDevice()); |
if (this._hasActiveOverrides !== hasActiveOverrides) { |
this._hasActiveOverrides = hasActiveOverrides; |
@@ -896,22 +921,22 @@ WebInspector.OverridesSupport.prototype = { |
this.settings.overrideUserAgent = WebInspector.settings.createSetting("overrideUserAgent", false); |
this.settings.userAgent = WebInspector.settings.createSetting("userAgent", ""); |
- this.settings.overrideDeviceResolution = WebInspector.settings.createSetting("overrideDeviceResolution", false); |
+ this.settings.emulateDevice = WebInspector.settings.createSetting("emulateDevice", false); |
this.settings.deviceWidth = WebInspector.settings.createSetting("deviceWidth", 800); |
this.settings.deviceHeight = WebInspector.settings.createSetting("deviceHeight", 600); |
this.settings.deviceScaleFactor = WebInspector.settings.createSetting("deviceScaleFactor", window.devicePixelRatio); |
this.settings.deviceTextAutosizing = WebInspector.settings.createSetting("deviceTextAutosizing", true); |
- |
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.overrideGeolocation = WebInspector.settings.createSetting("overrideGeolocation", false); |
this.settings.geolocationOverride = WebInspector.settings.createSetting("geolocationOverride", ""); |
this.settings.overrideDeviceOrientation = WebInspector.settings.createSetting("overrideDeviceOrientation", false); |
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.emulatedDevice = WebInspector.settings.createSetting("emulatedDevice", "Google Nexus 5"); |
this.settings.emulateNetworkConditions = WebInspector.settings.createSetting("emulateNetworkConditions", false); |
this.settings.networkConditionsDomains = WebInspector.settings.createSetting("networkConditionsDomains", ""); |
@@ -972,7 +997,7 @@ WebInspector.OverridesSupport.prototype = { |
*/ |
_fontScaleFactor: function(width, height) |
{ |
- if (!this.settings.overrideDeviceResolution.get()) |
+ if (!this.settings.emulateDevice.get()) |
return 1; |
if (!width && !height) |
return 1; |
@@ -1007,6 +1032,9 @@ WebInspector.OverridesSupport.prototype = { |
var devices = WebInspector.OverridesSupport._phones.concat(WebInspector.OverridesSupport._tablets); |
devices.sort(); |
+ |
+ var selectDevice = [WebInspector.UIString("<Select device>"), "", ""]; |
+ devices = devices.concat([selectDevice]); |
for (var i = 0; i < devices.length; ++i) { |
var device = devices[i]; |
var option = new Option(device[0], device[0]); |
@@ -1015,32 +1043,45 @@ WebInspector.OverridesSupport.prototype = { |
deviceSelectElement.add(option); |
} |
- settingChanged(); |
- WebInspector.overridesSupport.settings.emulatedDevice.addChangeListener(settingChanged); |
deviceSelectElement.addEventListener("change", deviceSelected, false); |
+ var emulatedSettingChangedMuted = false; |
+ WebInspector.overridesSupport.settings.deviceWidth.addChangeListener(emulatedSettingChanged); |
+ WebInspector.overridesSupport.settings.deviceHeight.addChangeListener(emulatedSettingChanged); |
+ WebInspector.overridesSupport.settings.deviceScaleFactor.addChangeListener(emulatedSettingChanged); |
+ 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); |
+ emulatedSettingChanged(); |
+ |
function deviceSelected() |
{ |
+ if (deviceSelectElement.selectedIndex === devices.length - 1) |
+ return; |
+ |
var option = deviceSelectElement.options[deviceSelectElement.selectedIndex]; |
- WebInspector.overridesSupport.settings.emulatedDevice.removeChangeListener(settingChanged); |
- WebInspector.overridesSupport.settings.emulatedDevice.set(option.value); |
- WebInspector.overridesSupport.settings.emulatedDevice.addChangeListener(settingChanged); |
+ emulatedSettingChangedMuted = true; |
+ WebInspector.overridesSupport.emulateDevice(option.metrics, option.userAgent); |
+ emulatedSettingChangedMuted = false; |
} |
- function settingChanged() |
+ function emulatedSettingChanged() |
{ |
- var selectionRestored = false; |
+ if (emulatedSettingChangedMuted) |
+ return; |
+ |
+ var index = devices.length - 1; |
for (var i = 0; i < devices.length; ++i) { |
- var device = devices[i]; |
- if (WebInspector.overridesSupport.settings.emulatedDevice.get() === device[0]) { |
- deviceSelectElement.selectedIndex = i; |
- selectionRestored = true; |
+ var option = deviceSelectElement.options[i]; |
+ if (WebInspector.overridesSupport.isEmulatingDevice(option.metrics, option.userAgent)) { |
+ index = i; |
break; |
} |
} |
- |
- if (!selectionRestored) |
- deviceSelectElement.selectedIndex = devices.length - 1; |
+ deviceSelectElement.selectedIndex = index; |
} |
return deviceSelectElement; |