Add an experimental feature flag for viewport "min-device-width"
https://bugs.webkit.org/show_bug.cgi?id=185050
<rdar://problem/39624038>

Reviewed by Tim Horton.

Source/WebCore:

Add MinDeviceWidthEnabled as a new runtime-enabled feature.

* dom/ViewportArguments.cpp:
(WebCore::setViewportFeature):

Gate the parsing of "min-device-width" on the runtime-enabled feature being flipped on.

* page/RuntimeEnabledFeatures.h:
(WebCore::RuntimeEnabledFeatures::setMinDeviceWidthEnabled):
(WebCore::RuntimeEnabledFeatures::minDeviceWidthEnabled const):

Source/WebKit:

Add MinDeviceWidthEnabled as a new experimental feature, on by default in extra zoom mode and off elsewhere.

* Shared/WebPreferences.yaml:
* Shared/WebPreferencesDefaultValues.h:


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@231106 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index 05ebb31..ea0f6c2 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,22 @@
+2018-04-27  Wenson Hsieh  <wenson_hsieh@apple.com>
+
+        Add an experimental feature flag for viewport "min-device-width"
+        https://bugs.webkit.org/show_bug.cgi?id=185050
+        <rdar://problem/39624038>
+
+        Reviewed by Tim Horton.
+
+        Add MinDeviceWidthEnabled as a new runtime-enabled feature.
+
+        * dom/ViewportArguments.cpp:
+        (WebCore::setViewportFeature):
+
+        Gate the parsing of "min-device-width" on the runtime-enabled feature being flipped on.
+
+        * page/RuntimeEnabledFeatures.h:
+        (WebCore::RuntimeEnabledFeatures::setMinDeviceWidthEnabled):
+        (WebCore::RuntimeEnabledFeatures::minDeviceWidthEnabled const):
+
 2018-04-27  Simon Fraser  <simon.fraser@apple.com>
 
         Make color-filter transform gradient colors
diff --git a/Source/WebCore/dom/ViewportArguments.cpp b/Source/WebCore/dom/ViewportArguments.cpp
index 71a3c5d..a77b979 100644
--- a/Source/WebCore/dom/ViewportArguments.cpp
+++ b/Source/WebCore/dom/ViewportArguments.cpp
@@ -31,6 +31,7 @@
 #include "Document.h"
 #include "Frame.h"
 #include "IntSize.h"
+#include "RuntimeEnabledFeatures.h"
 #include "ScriptableDocumentParser.h"
 #include "Settings.h"
 #include <wtf/text/TextStream.h>
@@ -420,7 +421,7 @@
         arguments.shrinkToFit = findBooleanValue(document, key, value);
     else if (equalLettersIgnoringASCIICase(key, "viewport-fit") && document.settings().viewportFitEnabled())
         arguments.viewportFit = parseViewportFitValue(document, key, value);
-    else if (equalLettersIgnoringASCIICase(key, "min-device-width"))
+    else if (equalLettersIgnoringASCIICase(key, "min-device-width") && RuntimeEnabledFeatures::sharedFeatures().minDeviceWidthEnabled())
         arguments.minDeviceWidth = numericPrefix(document, key, value);
     else
         reportViewportWarning(document, UnrecognizedViewportArgumentKeyError, key);
diff --git a/Source/WebCore/page/RuntimeEnabledFeatures.h b/Source/WebCore/page/RuntimeEnabledFeatures.h
index 35a3b8f..29c49d1 100644
--- a/Source/WebCore/page/RuntimeEnabledFeatures.h
+++ b/Source/WebCore/page/RuntimeEnabledFeatures.h
@@ -253,6 +253,9 @@
     void setFromOriginResponseHeaderEnabled(bool isEnabled) { m_fromOriginResponseHeaderEnabled = isEnabled; }
     bool fromOriginResponseHeaderEnabled() const { return m_fromOriginResponseHeaderEnabled; }
 
+    void setMinDeviceWidthEnabled(bool isEnabled) { m_minDeviceWidthEnabled = isEnabled; }
+    bool minDeviceWidthEnabled() const { return m_minDeviceWidthEnabled; }
+
     WEBCORE_EXPORT static RuntimeEnabledFeatures& sharedFeatures();
 
 private:
@@ -389,6 +392,8 @@
 
     bool m_fromOriginResponseHeaderEnabled { false };
 
+    bool m_minDeviceWidthEnabled { false };
+
     friend class WTF::NeverDestroyed<RuntimeEnabledFeatures>;
 };
 
diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog
index 4948836..70f977f 100644
--- a/Source/WebKit/ChangeLog
+++ b/Source/WebKit/ChangeLog
@@ -1,3 +1,16 @@
+2018-04-27  Wenson Hsieh  <wenson_hsieh@apple.com>
+
+        Add an experimental feature flag for viewport "min-device-width"
+        https://bugs.webkit.org/show_bug.cgi?id=185050
+        <rdar://problem/39624038>
+
+        Reviewed by Tim Horton.
+
+        Add MinDeviceWidthEnabled as a new experimental feature, on by default in extra zoom mode and off elsewhere.
+
+        * Shared/WebPreferences.yaml:
+        * Shared/WebPreferencesDefaultValues.h:
+
 2018-04-27  Daniel Bates  <dabates@apple.com>
 
         UIDelegate::UIClient::didResignInputElementStrongPasswordAppearance() is applicable to both Mac and iOS
diff --git a/Source/WebKit/Shared/WebPreferences.yaml b/Source/WebKit/Shared/WebPreferences.yaml
index b5f62c7..f44c7d7 100644
--- a/Source/WebKit/Shared/WebPreferences.yaml
+++ b/Source/WebKit/Shared/WebPreferences.yaml
@@ -781,7 +781,7 @@
 CustomPasteboardDataEnabled:
   type: bool
   defaultValue: defaultCustomPasteboardDataEnabled()
-  humanReadableName: "Custom pateboard data"
+  humanReadableName: "Custom pasteboard data"
   humanReadableDescription: "Enable custom clipboard types and better security model for clipboard API."
   webcoreBinding: RuntimeEnabledFeatures
 
@@ -1248,3 +1248,11 @@
     humanReadableDescription: "Support for the From-Origin Response Header"
     category: experimental
     webcoreBinding: RuntimeEnabledFeatures
+
+MinDeviceWidthEnabled:
+  type: bool
+  defaultValue: DEFAULT_MIN_DEVICE_WIDTH_ENABLED
+  humanReadableName: "Minimum device width"
+  humanReadableDescription: "Enable the min-device-width viewport parameter"
+  category: experimental
+  webcoreBinding: RuntimeEnabledFeatures
diff --git a/Source/WebKit/Shared/WebPreferencesDefaultValues.h b/Source/WebKit/Shared/WebPreferencesDefaultValues.h
index e75f3d4..194e026 100644
--- a/Source/WebKit/Shared/WebPreferencesDefaultValues.h
+++ b/Source/WebKit/Shared/WebPreferencesDefaultValues.h
@@ -177,6 +177,12 @@
 #define DEFAULT_VISUAL_VIEWPORT_HEIGHT_EXPANSION_FACTOR 0
 #endif
 
+#if ENABLE(EXTRA_ZOOM_MODE)
+#define DEFAULT_MIN_DEVICE_WIDTH_ENABLED 1
+#else
+#define DEFAULT_MIN_DEVICE_WIDTH_ENABLED 0
+#endif
+
 // Cocoa ports must disable experimental features on release branches for now.
 #if ENABLE(EXPERIMENTAL_FEATURES) || PLATFORM(COCOA)
 #define DEFAULT_EXPERIMENTAL_FEATURES_ENABLED true