Title: [236091] trunk
Revision
236091
Author
[email protected]
Date
2018-09-17 15:43:11 -0700 (Mon, 17 Sep 2018)

Log Message

Web Inspector: generate CSSKeywordCompletions from backend values
https://bugs.webkit.org/show_bug.cgi?id=189041

Reviewed by Joseph Pecoraro.

Source/_javascript_Core:

* inspector/protocol/CSS.json:
Include an optional `aliases` array and `inherited` boolean for `CSSPropertyInfo`.

Source/WebCore:

Modified existing test inspector/css/getSupportedCSSProperties.html.

* inspector/agents/InspectorCSSAgent.cpp:
(WebCore::InspectorCSSAgent::getSupportedCSSProperties):
Send alias and longhand information for all properties, and any known keyword values for
those applicable. This makes use of `CSSParserFastPaths::isValidKeywordPropertyAndValue` to
determine if a given keyword is a valid value for each property. This only generates a list
for properties who have no non-keyword values.

* css/makeprop.pl:
* css/makevalues.pl:
Create additional helper functions/constants for retrieving strings of each CSS keyword.

* css/CSSProperty.h:
(WebCore::CSSProperty::aliasesForProperty):

* css/CSSPrimitiveValue.cpp:
(WebCore::valueName):

* css/CSSValuePool.cpp:
(WebCore::CSSValuePool::CSSValuePool):
(WebCore::CSSValuePool::createIdentifierValue):

Source/WebInspectorUI:

Moves the longhands map to `WI.CSSKeywordCompletions` for more global access. Creates an
aliases map to support completions on aliases with the same values as the non-alias name.
Removes all keyword-only properties from `WI.CSSKeywordCompletions._propertyKeywordMap` as
they are now generated by the backend (kept for compatibility).

* UserInterface/Models/CSSCompletions.js:
(WI.CSSCompletions):
(WI.CSSCompletions.requestCSSCompletions.propertyNamesCallback):
(WI.CSSCompletions.prototype.isShorthandPropertyName):

* UserInterface/Models/CSSKeywordCompletions.js:
(WI.CSSKeywordCompletions.forProperty.addKeywordsForName): Added.
(WI.CSSKeywordCompletions.forProperty):
(WI.CSSKeywordCompletions.addCustomCompletions):

* UserInterface/Models/CSSProperty.js:
(WI.CSSProperty.isInheritedPropertyName):

LayoutTests:

* inspector/css/getSupportedCSSProperties-expected.txt:
* inspector/css/getSupportedCSSProperties.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (236090 => 236091)


--- trunk/LayoutTests/ChangeLog	2018-09-17 22:22:15 UTC (rev 236090)
+++ trunk/LayoutTests/ChangeLog	2018-09-17 22:43:11 UTC (rev 236091)
@@ -1,3 +1,13 @@
+2018-09-17  Devin Rousso  <[email protected]>
+
+        Web Inspector: generate CSSKeywordCompletions from backend values
+        https://bugs.webkit.org/show_bug.cgi?id=189041
+
+        Reviewed by Joseph Pecoraro.
+
+        * inspector/css/getSupportedCSSProperties-expected.txt:
+        * inspector/css/getSupportedCSSProperties.html:
+
 2018-09-17  Youenn Fablet  <[email protected]>
 
         track.onmute isn't called for a remote MediaStreamTrack when its counter part track is removed from the peer connection

Modified: trunk/LayoutTests/inspector/css/getSupportedCSSProperties-expected.txt (236090 => 236091)


--- trunk/LayoutTests/inspector/css/getSupportedCSSProperties-expected.txt	2018-09-17 22:22:15 UTC (rev 236090)
+++ trunk/LayoutTests/inspector/css/getSupportedCSSProperties-expected.txt	2018-09-17 22:43:11 UTC (rev 236091)
@@ -1,2 +1,32 @@
-box-shadow is supported
+"box-sizing" is supported
+"box-sizing" has aliases:
+ - "-webkit-box-sizing"
+"box-sizing" has keyword values:
+ - "border-box"
+ - "content-box"
 
+"filter" is supported
+"filter" has aliases:
+ - "-webkit-filter"
+
+"font-style" is supported
+"font-style" is inherited
+
+"margin" is supported
+"margin" has longhands:
+ - "margin-top"
+ - "margin-right"
+ - "margin-bottom"
+ - "margin-left"
+
+"text-transform" is supported
+"text-transform" has aliases:
+ - "-epub-text-transform"
+"text-transform" is inherited
+"text-transform" has keyword values:
+ - "none"
+ - "capitalize"
+ - "uppercase"
+ - "lowercase"
+
+

Modified: trunk/LayoutTests/inspector/css/getSupportedCSSProperties.html (236090 => 236091)


--- trunk/LayoutTests/inspector/css/getSupportedCSSProperties.html	2018-09-17 22:22:15 UTC (rev 236090)
+++ trunk/LayoutTests/inspector/css/getSupportedCSSProperties.html	2018-09-17 22:43:11 UTC (rev 236091)
@@ -4,22 +4,53 @@
 <script>
 function test()
 {
-    InspectorProtocol.sendCommand("CSS.getSupportedCSSProperties", {}, function(messageObject) {
+    InspectorProtocol.sendCommand("CSS.getSupportedCSSProperties", {}, (messageObject) => {
         if ("error" in messageObject)
             ProtocolTest.log(messageObject.error.message);
         else {
-            var cssProperty = "box-shadow";
-            var entries = messageObject["result"]["cssProperties"];
+            let entries = messageObject["result"]["cssProperties"];
 
-            for (var i = 0; i < entries.length; ++i) {
-                if (entries[i].name === cssProperty) {
-                    ProtocolTest.log(entries[i].name + " is supported");
+            const expectedProperties = [
+                "box-sizing",
+                "filter",
+                "font-style",
+                "margin",
+                "text-transform",
+            ];
+
+            for (let expectedProperty of expectedProperties) {
+                for (let entry of entries) {
+                    if (entry.name !== expectedProperty)
+                        continue;
+
+                    ProtocolTest.log(`"${expectedProperty}" is supported`);
+
+                    if (entry.aliases) {
+                        ProtocolTest.log(`"${expectedProperty}" has aliases:`);
+                        for (let alias of entry.aliases)
+                            ProtocolTest.log(` - "${alias}"`);
+                    }
+
+                    if (entry.longhands) {
+                        ProtocolTest.log(`"${expectedProperty}" has longhands:`);
+                        for (let longhand of entry.longhands)
+                            ProtocolTest.log(` - "${longhand}"`);
+                    }
+
+                    if (entry.inherited)
+                        ProtocolTest.log(`"${expectedProperty}" is inherited`);
+
+                    if (entry.values) {
+                        ProtocolTest.log(`"${expectedProperty}" has keyword values:`);
+                        for (let value of entry.values)
+                            ProtocolTest.log(` - "${value}"`);
+                    }
+
                     break;
                 }
+
+                ProtocolTest.log("");
             }
-
-            if (i === entries.length)
-                ProtocolTest.log(cssProperty + " is NOT supported");
         }
 
         ProtocolTest.completeTest();

Modified: trunk/Source/_javascript_Core/ChangeLog (236090 => 236091)


--- trunk/Source/_javascript_Core/ChangeLog	2018-09-17 22:22:15 UTC (rev 236090)
+++ trunk/Source/_javascript_Core/ChangeLog	2018-09-17 22:43:11 UTC (rev 236091)
@@ -1,3 +1,13 @@
+2018-09-17  Devin Rousso  <[email protected]>
+
+        Web Inspector: generate CSSKeywordCompletions from backend values
+        https://bugs.webkit.org/show_bug.cgi?id=189041
+
+        Reviewed by Joseph Pecoraro.
+
+        * inspector/protocol/CSS.json:
+        Include an optional `aliases` array and `inherited` boolean for `CSSPropertyInfo`.
+
 2018-09-17  Saam barati  <[email protected]>
 
         We must convert ProfileType to CheckStructureOrEmpty instead of CheckStructure

Modified: trunk/Source/_javascript_Core/inspector/protocol/CSS.json (236090 => 236091)


--- trunk/Source/_javascript_Core/inspector/protocol/CSS.json	2018-09-17 22:22:15 UTC (rev 236090)
+++ trunk/Source/_javascript_Core/inspector/protocol/CSS.json	2018-09-17 22:43:11 UTC (rev 236091)
@@ -151,8 +151,10 @@
             "type": "object",
             "properties": [
                 { "name": "name", "type": "string", "description": "Property name." },
+                { "name": "aliases", "type": "array", "optional": true, "items": { "type": "string" }, "description": "Other names for this property." },
                 { "name": "longhands", "type": "array", "optional": true, "items": { "type": "string" }, "description": "Longhand property names." },
-                { "name": "values", "type": "array", "optional": true, "items": { "type": "string" }, "description": "Supported values for this property." }
+                { "name": "values", "type": "array", "optional": true, "items": { "type": "string" }, "description": "Supported values for this property." },
+                { "name": "inherited", "type": "boolean", "optional": true, "description": "Whether the property is able to be inherited." }
             ]
         },
         {

Modified: trunk/Source/WebCore/ChangeLog (236090 => 236091)


--- trunk/Source/WebCore/ChangeLog	2018-09-17 22:22:15 UTC (rev 236090)
+++ trunk/Source/WebCore/ChangeLog	2018-09-17 22:43:11 UTC (rev 236091)
@@ -1,3 +1,33 @@
+2018-09-17  Devin Rousso  <[email protected]>
+
+        Web Inspector: generate CSSKeywordCompletions from backend values
+        https://bugs.webkit.org/show_bug.cgi?id=189041
+
+        Reviewed by Joseph Pecoraro.
+
+        Modified existing test inspector/css/getSupportedCSSProperties.html.
+
+        * inspector/agents/InspectorCSSAgent.cpp:
+        (WebCore::InspectorCSSAgent::getSupportedCSSProperties):
+        Send alias and longhand information for all properties, and any known keyword values for
+        those applicable. This makes use of `CSSParserFastPaths::isValidKeywordPropertyAndValue` to
+        determine if a given keyword is a valid value for each property. This only generates a list
+        for properties who have no non-keyword values.
+
+        * css/makeprop.pl:
+        * css/makevalues.pl:
+        Create additional helper functions/constants for retrieving strings of each CSS keyword.
+
+        * css/CSSProperty.h:
+        (WebCore::CSSProperty::aliasesForProperty):
+
+        * css/CSSPrimitiveValue.cpp:
+        (WebCore::valueName):
+
+        * css/CSSValuePool.cpp:
+        (WebCore::CSSValuePool::CSSValuePool):
+        (WebCore::CSSValuePool::createIdentifierValue):
+
 2018-09-17  Youenn Fablet  <[email protected]>
 
         track.onmute isn't called for a remote MediaStreamTrack when its counter part track is removed from the peer connection

Modified: trunk/Source/WebCore/css/CSSPrimitiveValue.cpp (236090 => 236091)


--- trunk/Source/WebCore/css/CSSPrimitiveValue.cpp	2018-09-17 22:22:15 UTC (rev 236090)
+++ trunk/Source/WebCore/css/CSSPrimitiveValue.cpp	2018-09-17 22:43:11 UTC (rev 236091)
@@ -277,17 +277,9 @@
 
 static const AtomicString& valueName(CSSValueID valueID)
 {
-    ASSERT_ARG(valueID, valueID >= 0);
-    ASSERT_ARG(valueID, valueID < numCSSValueKeywords);
+    ASSERT_ARG(valueID, (valueID >= firstCSSValueKeyword && valueID <= lastCSSValueKeyword));
 
-    if (valueID < 0)
-        return nullAtom();
-
-    static AtomicString* keywordStrings = new AtomicString[numCSSValueKeywords]; // Leaked intentionally.
-    AtomicString& keywordString = keywordStrings[valueID];
-    if (keywordString.isNull())
-        keywordString = getValueName(valueID);
-    return keywordString;
+    return getValueNameAtomicString(valueID);
 }
 
 CSSPrimitiveValue::CSSPrimitiveValue(CSSValueID valueID)

Modified: trunk/Source/WebCore/css/CSSProperty.h (236090 => 236091)


--- trunk/Source/WebCore/css/CSSProperty.h	2018-09-17 22:22:15 UTC (rev 236090)
+++ trunk/Source/WebCore/css/CSSProperty.h	2018-09-17 22:43:11 UTC (rev 236091)
@@ -78,6 +78,7 @@
 
     static CSSPropertyID resolveDirectionAwareProperty(CSSPropertyID, TextDirection, WritingMode);
     static bool isInheritedProperty(CSSPropertyID);
+    static Vector<String> aliasesForProperty(CSSPropertyID);
     static bool isDirectionAwareProperty(CSSPropertyID);
     static bool isDescriptorOnly(CSSPropertyID);
 

Modified: trunk/Source/WebCore/css/CSSValuePool.cpp (236090 => 236091)


--- trunk/Source/WebCore/css/CSSValuePool.cpp	2018-09-17 22:22:15 UTC (rev 236090)
+++ trunk/Source/WebCore/css/CSSValuePool.cpp	2018-09-17 22:43:11 UTC (rev 236091)
@@ -51,7 +51,7 @@
     m_whiteColor.construct(Color(Color::white));
     m_blackColor.construct(Color(Color::black));
 
-    for (unsigned i = 0; i < numCSSValueKeywords; ++i)
+    for (unsigned i = firstCSSValueKeyword; i <= lastCSSValueKeyword; ++i)
         m_identifierValues[i].construct(static_cast<CSSValueID>(i));
 
     for (unsigned i = 0; i < (maximumCacheableIntegerValue + 1); ++i) {
@@ -63,7 +63,7 @@
 
 Ref<CSSPrimitiveValue> CSSValuePool::createIdentifierValue(CSSValueID ident)
 {
-    RELEASE_ASSERT(ident >= 0 && ident < numCSSValueKeywords);
+    RELEASE_ASSERT(ident >= firstCSSValueKeyword && ident <= lastCSSValueKeyword);
     return m_identifierValues[ident].get();
 }
 

Modified: trunk/Source/WebCore/css/makeprop.pl (236090 => 236091)


--- trunk/Source/WebCore/css/makeprop.pl	2018-09-17 22:22:15 UTC (rev 236090)
+++ trunk/Source/WebCore/css/makeprop.pl	2018-09-17 22:43:11 UTC (rev 236091)
@@ -243,11 +243,10 @@
 #include \"CSSProperty.h\"
 #include \"CSSPropertyNames.h\"
 #include \"HashTools.h\"
-#include <string.h>
-
 #include <wtf/ASCIICType.h>
 #include <wtf/text/AtomicString.h>
 #include <wtf/text/WTFString.h>
+#include <string.h>
 
 #if defined(__clang__)
 #pragma clang diagnostic push
@@ -401,6 +400,25 @@
     return isInheritedPropertyTable[id];
 }
 
+Vector<String> CSSProperty::aliasesForProperty(CSSPropertyID id)
+{
+    switch (id) {
+EOF
+
+for my $name (@names) {
+    if (!$nameToAliases{$name}) {
+        next;
+    }
+    print GPERF "    case CSSPropertyID::CSSProperty" . $nameToId{$name} . ":\n";
+    print GPERF "        return { \"" . join("\"_s, \"", @{$nameToAliases{$name}}) . "\"_s };\n";
+}
+
+print GPERF << "EOF";
+    default:
+        return { };
+    }
+}
+
 } // namespace WebCore
 
 #if defined(__clang__)

Modified: trunk/Source/WebCore/css/makevalues.pl (236090 => 236091)


--- trunk/Source/WebCore/css/makevalues.pl	2018-09-17 22:22:15 UTC (rev 236090)
+++ trunk/Source/WebCore/css/makevalues.pl	2018-09-17 22:43:11 UTC (rev 236091)
@@ -43,6 +43,7 @@
 
 my @names = ();
 my @lower_names = ();
+my $numPredefinedProperties = 1;
 
 foreach (@NAMES) {
   next if (m/(^\s*$)/);
@@ -69,8 +70,12 @@
 %{
 /* This file is automatically generated from CSSValueKeywords.in by makevalues, do not edit */
 
+#include \"config.h\"
 #include \"CSSValueKeywords.h\"
 #include \"HashTools.h\"
+#include <wtf/ASCIICType.h>
+#include <wtf/text/AtomicString.h>
+#include <wtf/text/WTFString.h>
 #include <string.h>
 
 #if defined(__clang__)
@@ -125,11 +130,29 @@
 
 const char* getValueName(unsigned short id)
 {
-    if (id >= numCSSValueKeywords || id <= 0)
+    if (id > lastCSSValueKeyword)
         return 0;
     return valueList[id];
 }
 
+const AtomicString& getValueNameAtomicString(CSSValueID id)
+{
+    if (id < firstCSSValueKeyword || id > lastCSSValueKeyword)
+        return nullAtom();
+
+    static AtomicString* valueKeywordStrings = new AtomicString[numCSSValueKeywords]; // Leaked intentionally.
+    AtomicString& valueKeywordString = valueKeywordStrings[id];
+    if (valueKeywordString.isNull())
+        valueKeywordString = getValueName(id);
+    return valueKeywordString;
+}
+
+String getValueNameString(CSSValueID id)
+{
+    // We share the StringImpl with the AtomicStrings.
+    return getValueNameAtomicString(id).string();
+}
+
 } // namespace WebCore
 
 #if defined(__clang__)
@@ -146,6 +169,7 @@
 #pragma once
 
 #include <string.h>
+#include <wtf/Forward.h>
 
 namespace WebCore {
 
@@ -153,7 +177,8 @@
     CSSValueInvalid = 0,
 EOF
 
-my $i = 1;
+my $first = 0; # Include CSSValueInvalid in the total number of values
+my $i = $numPredefinedProperties;
 my $maxLen = 0;
 foreach my $name (@names) {
   my $id = $name;
@@ -164,14 +189,26 @@
     $maxLen = length($name);
   }
 }
+my $num = $i - $first;
+my $last = $i - 1;
 
 print HEADER "};\n\n";
-print HEADER "const int numCSSValueKeywords = " . $i . ";\n";
+print HEADER "const int firstCSSValueKeyword = $first;\n";
+print HEADER "const int numCSSValueKeywords = $num;\n";
+print HEADER "const int lastCSSValueKeyword = $last;\n";
 print HEADER "const size_t maxCSSValueKeywordLength = " . $maxLen . ";\n";
 print HEADER << "EOF";
 
 const char* getValueName(unsigned short id);
+const WTF::AtomicString& getValueNameAtomicString(CSSValueID id);
+WTF::String getValueNameString(CSSValueID id);
 
+inline CSSValueID convertToCSSValueID(int value)
+{
+    ASSERT(value >= firstCSSValueKeyword && value <= lastCSSValueKeyword);
+    return static_cast<CSSValueID>(value);
+}
+
 } // namespace WebCore
 EOF
 close HEADER;

Modified: trunk/Source/WebCore/inspector/agents/InspectorCSSAgent.cpp (236090 => 236091)


--- trunk/Source/WebCore/inspector/agents/InspectorCSSAgent.cpp	2018-09-17 22:22:15 UTC (rev 236090)
+++ trunk/Source/WebCore/inspector/agents/InspectorCSSAgent.cpp	2018-09-17 22:43:11 UTC (rev 236091)
@@ -28,6 +28,8 @@
 
 #include "CSSComputedStyleDeclaration.h"
 #include "CSSImportRule.h"
+#include "CSSParserFastPaths.h"
+#include "CSSParserMode.h"
 #include "CSSPropertyNames.h"
 #include "CSSPropertySourceData.h"
 #include "CSSRule.h"
@@ -34,6 +36,7 @@
 #include "CSSRuleList.h"
 #include "CSSStyleRule.h"
 #include "CSSStyleSheet.h"
+#include "CSSValueKeywords.h"
 #include "ContentSecurityPolicy.h"
 #include "DOMWindow.h"
 #include "FontCache.h"
@@ -715,25 +718,46 @@
 {
     auto properties = JSON::ArrayOf<Inspector::Protocol::CSS::CSSPropertyInfo>::create();
     for (int i = firstCSSProperty; i <= lastCSSProperty; ++i) {
-        CSSPropertyID id = convertToCSSPropertyID(i);
-        if (isInternalCSSProperty(id))
+        CSSPropertyID propertyID = convertToCSSPropertyID(i);
+        if (isInternalCSSProperty(propertyID))
             continue;
 
         auto property = Inspector::Protocol::CSS::CSSPropertyInfo::create()
-            .setName(getPropertyNameString(id))
+            .setName(getPropertyNameString(propertyID))
             .release();
 
-        const StylePropertyShorthand& shorthand = shorthandForProperty(id);
-        if (!shorthand.length()) {
-            properties->addItem(WTFMove(property));
-            continue;
+        auto aliases = CSSProperty::aliasesForProperty(propertyID);
+        if (!aliases.isEmpty()) {
+            auto aliasesArray = JSON::ArrayOf<String>::create();
+            for (auto& alias : aliases)
+                aliasesArray->addItem(alias);
+            property->setAliases(WTFMove(aliasesArray));
         }
-        auto longhands = JSON::ArrayOf<String>::create();
-        for (unsigned j = 0; j < shorthand.length(); ++j) {
-            CSSPropertyID longhandID = shorthand.properties()[j];
-            longhands->addItem(getPropertyNameString(longhandID));
+
+        const StylePropertyShorthand& shorthand = shorthandForProperty(propertyID);
+        if (shorthand.length()) {
+            auto longhands = JSON::ArrayOf<String>::create();
+            for (unsigned j = 0; j < shorthand.length(); ++j) {
+                CSSPropertyID longhandID = shorthand.properties()[j];
+                longhands->addItem(getPropertyNameString(longhandID));
+            }
+            property->setLonghands(WTFMove(longhands));
         }
-        property->setLonghands(WTFMove(longhands));
+
+        if (CSSParserFastPaths::isKeywordPropertyID(propertyID)) {
+            auto values = JSON::ArrayOf<String>::create();
+            for (int j = firstCSSValueKeyword; j <= lastCSSValueKeyword; ++j) {
+                CSSValueID valueID = convertToCSSValueID(j);
+                if (CSSParserFastPaths::isValidKeywordPropertyAndValue(propertyID, valueID, HTMLStandardMode))
+                    values->addItem(getValueNameString(valueID));
+            }
+            if (values->length())
+                property->setValues(WTFMove(values));
+        }
+
+        if (CSSProperty::isInheritedProperty(propertyID))
+            property->setInherited(true);
+
         properties->addItem(WTFMove(property));
     }
     cssProperties = WTFMove(properties);

Modified: trunk/Source/WebInspectorUI/ChangeLog (236090 => 236091)


--- trunk/Source/WebInspectorUI/ChangeLog	2018-09-17 22:22:15 UTC (rev 236090)
+++ trunk/Source/WebInspectorUI/ChangeLog	2018-09-17 22:43:11 UTC (rev 236091)
@@ -1,3 +1,28 @@
+2018-09-17  Devin Rousso  <[email protected]>
+
+        Web Inspector: generate CSSKeywordCompletions from backend values
+        https://bugs.webkit.org/show_bug.cgi?id=189041
+
+        Reviewed by Joseph Pecoraro.
+
+        Moves the longhands map to `WI.CSSKeywordCompletions` for more global access. Creates an
+        aliases map to support completions on aliases with the same values as the non-alias name.
+        Removes all keyword-only properties from `WI.CSSKeywordCompletions._propertyKeywordMap` as
+        they are now generated by the backend (kept for compatibility).
+
+        * UserInterface/Models/CSSCompletions.js:
+        (WI.CSSCompletions):
+        (WI.CSSCompletions.requestCSSCompletions.propertyNamesCallback):
+        (WI.CSSCompletions.prototype.isShorthandPropertyName):
+
+        * UserInterface/Models/CSSKeywordCompletions.js:
+        (WI.CSSKeywordCompletions.forProperty.addKeywordsForName): Added.
+        (WI.CSSKeywordCompletions.forProperty):
+        (WI.CSSKeywordCompletions.addCustomCompletions):
+
+        * UserInterface/Models/CSSProperty.js:
+        (WI.CSSProperty.isInheritedPropertyName):
+
 2018-09-15  Devin Rousso  <[email protected]>
 
         Web Inspector: REGRESSION: breakpoint context menu appears twice in DOM tree

Modified: trunk/Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js (236090 => 236091)


--- trunk/Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js	2018-09-17 22:22:15 UTC (rev 236090)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js	2018-09-17 22:43:11 UTC (rev 236091)
@@ -36,7 +36,6 @@
     constructor(properties, acceptEmptyPrefix)
     {
         this._values = [];
-        this._longhands = {};
         this._shorthands = {};
 
         // The `properties` parameter can be either a list of objects with 'name' / 'longhand'
@@ -51,10 +50,12 @@
 
                 this._values.push(propertyName);
 
+                let aliases = property.aliases;
+                if (aliases)
+                    this._values = this._values.concat(aliases);
+
                 var longhands = property.longhands;
                 if (longhands) {
-                    this._longhands[propertyName] = longhands;
-
                     for (var j = 0; j < longhands.length; ++j) {
                         var longhandName = longhands[j];
 
@@ -123,7 +124,7 @@
                 var keywords = WI.CSSKeywordCompletions._propertyKeywordMap[propertyName];
                 for (var i = 0; i < keywords.length; ++i) {
                     // Skip numbers, like the ones defined for font-weight.
-                    if (!isNaN(Number(keywords[i])))
+                    if (keywords[i] === WI.CSSKeywordCompletions.AllPropertyNamesPlaceholder || !isNaN(Number(keywords[i])))
                         continue;
                     valueKeywordsForCodeMirror[nameForCodeMirror(keywords[i])] = true;
                 }
@@ -260,7 +261,7 @@
 
     isShorthandPropertyName(shorthand)
     {
-        return shorthand in this._longhands;
+        return WI.CSSKeywordCompletions.LonghandNamesForShorthandProperty.has(shorthand);
     }
 
     shorthandsForLonghand(longhand)

Modified: trunk/Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js (236090 => 236091)


--- trunk/Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js	2018-09-17 22:22:15 UTC (rev 236090)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js	2018-09-17 22:43:11 UTC (rev 236091)
@@ -34,32 +34,47 @@
 WI.CSSKeywordCompletions.forProperty = function(propertyName)
 {
     let acceptedKeywords = ["initial", "unset", "revert", "var()", "env()"];
-    let isNotPrefixed = propertyName.charAt(0) !== "-";
 
-    if (propertyName in WI.CSSKeywordCompletions._propertyKeywordMap)
-        acceptedKeywords = acceptedKeywords.concat(WI.CSSKeywordCompletions._propertyKeywordMap[propertyName]);
-    else if (isNotPrefixed && ("-webkit-" + propertyName) in WI.CSSKeywordCompletions._propertyKeywordMap)
-        acceptedKeywords = acceptedKeywords.concat(WI.CSSKeywordCompletions._propertyKeywordMap["-webkit-" + propertyName]);
+    function addKeywordsForName(name) {
+        let isNotPrefixed = name.charAt(0) !== "-";
 
-    if (propertyName in WI.CSSKeywordCompletions._colorAwareProperties)
-        acceptedKeywords = acceptedKeywords.concat(WI.CSSKeywordCompletions._colors);
-    else if (isNotPrefixed && ("-webkit-" + propertyName) in WI.CSSKeywordCompletions._colorAwareProperties)
-        acceptedKeywords = acceptedKeywords.concat(WI.CSSKeywordCompletions._colors);
-    else if (propertyName.endsWith("color"))
-        acceptedKeywords = acceptedKeywords.concat(WI.CSSKeywordCompletions._colors);
+        if (name in WI.CSSKeywordCompletions._propertyKeywordMap)
+            acceptedKeywords = acceptedKeywords.concat(WI.CSSKeywordCompletions._propertyKeywordMap[name]);
+        else if (isNotPrefixed && ("-webkit-" + name) in WI.CSSKeywordCompletions._propertyKeywordMap)
+            acceptedKeywords = acceptedKeywords.concat(WI.CSSKeywordCompletions._propertyKeywordMap["-webkit-" + name]);
 
-    // Only suggest "inherit" on inheritable properties even though it is valid on all properties.
-    if (propertyName in WI.CSSKeywordCompletions.InheritedProperties)
-        acceptedKeywords.push("inherit");
-    else if (isNotPrefixed && ("-webkit-" + propertyName) in WI.CSSKeywordCompletions.InheritedProperties)
-        acceptedKeywords.push("inherit");
+        if (name in WI.CSSKeywordCompletions._colorAwareProperties)
+            acceptedKeywords = acceptedKeywords.concat(WI.CSSKeywordCompletions._colors);
+        else if (isNotPrefixed && ("-webkit-" + name) in WI.CSSKeywordCompletions._colorAwareProperties)
+            acceptedKeywords = acceptedKeywords.concat(WI.CSSKeywordCompletions._colors);
+        else if (name.endsWith("color"))
+            acceptedKeywords = acceptedKeywords.concat(WI.CSSKeywordCompletions._colors);
 
+        // Only suggest "inherit" on inheritable properties even though it is valid on all properties.
+        if (WI.CSSKeywordCompletions.InheritedProperties.has(name))
+            acceptedKeywords.push("inherit");
+        else if (isNotPrefixed && WI.CSSKeywordCompletions.InheritedProperties.has("-webkit-" + name))
+            acceptedKeywords.push("inherit");
+    }
+
+    addKeywordsForName(propertyName);
+
+    let unaliasedName = WI.CSSKeywordCompletions.PropertyNameForAlias.get(propertyName);
+    if (unaliasedName)
+        addKeywordsForName(unaliasedName);
+
+    let longhandNames = WI.CSSKeywordCompletions.LonghandNamesForShorthandProperty.get(propertyName);
+    if (longhandNames) {
+        for (let longhandName of longhandNames)
+            addKeywordsForName(longhandName);
+    }
+
     if (acceptedKeywords.includes(WI.CSSKeywordCompletions.AllPropertyNamesPlaceholder) && WI.CSSCompletions.cssNameCompletions) {
         acceptedKeywords.remove(WI.CSSKeywordCompletions.AllPropertyNamesPlaceholder);
         acceptedKeywords = acceptedKeywords.concat(WI.CSSCompletions.cssNameCompletions.values);
     }
 
-    return new WI.CSSCompletions(acceptedKeywords, true);
+    return new WI.CSSCompletions(Array.from(new Set(acceptedKeywords)), true);
 };
 
 WI.CSSKeywordCompletions.forFunction = function(functionName)
@@ -87,8 +102,19 @@
 WI.CSSKeywordCompletions.addCustomCompletions = function(properties)
 {
     for (var property of properties) {
+        if (property.aliases) {
+            for (let alias of property.aliases)
+                WI.CSSKeywordCompletions.PropertyNameForAlias.set(alias, property.name);
+        }
+
         if (property.values)
             WI.CSSKeywordCompletions.addPropertyCompletionValues(property.name, property.values);
+
+        if (property.inherited)
+            WI.CSSKeywordCompletions.InheritedProperties.add(property.name);
+
+        if (property.longhands)
+            WI.CSSKeywordCompletions.LonghandNamesForShorthandProperty.set(property.name, property.longhands);
     }
 };
 
@@ -111,35 +137,140 @@
 
 WI.CSSKeywordCompletions.AllPropertyNamesPlaceholder = "__all-properties__";
 
-WI.CSSKeywordCompletions.InheritedProperties = [
-    "azimuth", "border-collapse", "border-spacing", "caption-side", "clip-rule", "color", "color-interpolation",
-    "color-interpolation-filters", "color-rendering", "cursor", "direction", "elevation", "empty-cells", "fill",
-    "fill-opacity", "fill-rule", "font", "font-family", "font-size", "font-style", "font-variant", "font-variant-numeric", "font-weight", "font-optical-sizing",
-    "glyph-orientation-horizontal", "glyph-orientation-vertical", "hanging-punctuation", "image-rendering", "kerning", "letter-spacing",
-    "line-height", "list-style", "list-style-image", "list-style-position", "list-style-type", "marker", "marker-end",
-    "marker-mid", "marker-start", "orphans", "pitch", "pitch-range", "pointer-events", "quotes", "resize", "richness",
-    "shape-rendering", "speak", "speak-header", "speak-numeral", "speak-punctuation", "speech-rate", "stress", "stroke",
-    "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity",
-    "stroke-width", "tab-size", "text-align", "text-anchor", "text-decoration", "text-indent", "text-rendering",
-    "text-shadow", "text-transform", "visibility", "voice-family", "volume", "white-space", "widows", "word-break",
-    "word-spacing", "word-wrap", "writing-mode", "-webkit-aspect-ratio", "-webkit-border-horizontal-spacing",
-    "-webkit-border-vertical-spacing", "-webkit-box-direction", "-webkit-color-correction", "font-feature-settings",
-    "-webkit-font-kerning", "-webkit-font-smoothing", "-webkit-font-variant-ligatures",
-    "-webkit-hyphenate-character", "-webkit-hyphenate-limit-after", "-webkit-hyphenate-limit-before",
-    "-webkit-hyphenate-limit-lines", "-webkit-hyphens", "-webkit-line-align", "-webkit-line-box-contain",
-    "-webkit-line-break", "-webkit-line-grid", "-webkit-line-snap", "-webkit-locale", "-webkit-nbsp-mode",
-    "-webkit-print-color-adjust", "-webkit-rtl-ordering", "-webkit-text-combine", "-webkit-text-decorations-in-effect",
-    "-webkit-text-emphasis", "-webkit-text-emphasis-color", "-webkit-text-emphasis-position", "-webkit-text-emphasis-style",
-    "-webkit-text-fill-color", "-webkit-text-orientation", "-webkit-text-security", "-webkit-text-size-adjust",
-    "-webkit-text-stroke", "-webkit-text-stroke-color", "-webkit-text-stroke-width", "-webkit-user-modify",
-    "-webkit-user-select", "-webkit-writing-mode", "-webkit-cursor-visibility", "image-orientation", "image-resolution",
-    "overflow-wrap", "-webkit-text-align-last", "-webkit-text-justify", "-webkit-ruby-position", "-webkit-text-decoration-line",
+// Populated by CSS.getSupportedCSSProperties.
+WI.CSSKeywordCompletions.PropertyNameForAlias = new Map;
+WI.CSSKeywordCompletions.LonghandNamesForShorthandProperty = new Map;
+
+WI.CSSKeywordCompletions.InheritedProperties = new Set([
+    // Compatibility (iOS 12): `inherited` didn't exist on `CSSPropertyInfo`
+    "-apple-color-filter",
+    "-apple-trailing-word",
+    "-webkit-animation-trigger",
+    "-webkit-aspect-ratio",
+    "-webkit-border-horizontal-spacing",
+    "-webkit-border-vertical-spacing",
+    "-webkit-box-direction",
+    "-webkit-cursor-visibility",
+    "-webkit-font-kerning",
+    "-webkit-font-smoothing",
+    "-webkit-hyphenate-character",
+    "-webkit-hyphenate-limit-after",
+    "-webkit-hyphenate-limit-before",
+    "-webkit-hyphenate-limit-lines",
+    "-webkit-hyphens",
+    "-webkit-line-align",
+    "-webkit-line-break",
+    "-webkit-line-box-contain",
+    "-webkit-line-grid",
+    "-webkit-line-snap",
+    "-webkit-locale",
+    "-webkit-nbsp-mode",
+    "-webkit-overflow-scrolling",
+    "-webkit-print-color-adjust",
+    "-webkit-rtl-ordering",
+    "-webkit-ruby-position",
+    "-webkit-text-align-last",
+    "-webkit-text-combine",
+    "-webkit-text-decoration-skip",
+    "-webkit-text-decorations-in-effect",
+    "-webkit-text-emphasis",
+    "-webkit-text-emphasis-color",
+    "-webkit-text-emphasis-position",
+    "-webkit-text-emphasis-style",
+    "-webkit-text-fill-color",
+    "-webkit-text-justify",
+    "-webkit-text-orientation",
+    "-webkit-text-security",
+    "-webkit-text-size-adjust",
+    "-webkit-text-stroke",
+    "-webkit-text-stroke-color",
+    "-webkit-text-stroke-width",
+    "-webkit-text-underline-position",
+    "-webkit-text-zoom",
+    "-webkit-touch-callout",
+    "-webkit-user-modify",
+    "-webkit-user-select",
+    "border-collapse",
+    "border-spacing",
+    "caption-side",
+    "caret-color",
+    "clip-rule",
+    "color",
+    "color-interpolation",
+    "color-interpolation-filters",
+    "color-rendering",
+    "cursor",
+    "direction",
+    "empty-cells",
+    "fill",
+    "fill-opacity",
+    "fill-rule",
+    "font",
+    "font-family",
+    "font-feature-settings",
+    "font-optical-sizing",
+    "font-size",
+    "font-stretch",
+    "font-style",
     "font-synthesis",
+    "font-variant",
+    "font-variant-alternates",
+    "font-variant-caps",
+    "font-variant-east-asian",
+    "font-variant-ligatures",
+    "font-variant-numeric",
+    "font-variant-position",
+    "font-variation-settings",
+    "font-weight",
+    "glyph-orientation-horizontal",
+    "glyph-orientation-vertical",
+    "hanging-punctuation",
+    "image-orientation",
+    "image-rendering",
+    "image-resolution",
+    "kerning",
+    "letter-spacing",
+    "line-break",
+    "line-height",
+    "list-style",
+    "list-style-image",
+    "list-style-position",
+    "list-style-type",
+    "marker",
+    "marker-end",
+    "marker-mid",
+    "marker-start",
+    "orphans",
+    "pointer-events",
+    "quotes",
+    "resize",
+    "shape-rendering",
+    "speak-as",
+    "stroke",
+    "stroke-color",
+    "stroke-dasharray",
+    "stroke-dashoffset",
+    "stroke-linecap",
+    "stroke-linejoin",
+    "stroke-miterlimit",
+    "stroke-opacity",
+    "stroke-width",
+    "tab-size",
+    "text-align",
+    "text-anchor",
+    "text-indent",
+    "text-rendering",
+    "text-shadow",
+    "text-transform",
+    "visibility",
+    "white-space",
+    "widows",
+    "word-break",
+    "word-spacing",
+    "word-wrap",
+    "writing-mode",
+]);
 
-    // iOS Properties
-    "-webkit-overflow-scrolling", "-webkit-touch-callout", "-webkit-tap-highlight-color"
-].keySet();
-
 WI.CSSKeywordCompletions._colors = [
     "aqua", "black", "blue", "fuchsia", "gray", "green", "lime", "maroon", "navy", "olive", "orange", "purple", "red",
     "silver", "teal", "white", "yellow", "transparent", "currentcolor", "grey", "aliceblue", "antiquewhite",
@@ -174,15 +305,6 @@
 ].keySet();
 
 WI.CSSKeywordCompletions._propertyKeywordMap = {
-    "table-layout": [
-        "auto", "fixed"
-    ],
-    "visibility": [
-        "hidden", "visible", "collapse"
-    ],
-    "text-underline": [
-        "none", "dotted", "dashed", "solid", "double", "dot-dash", "dot-dot-dash", "wave"
-    ],
     "content": [
         "list-item", "close-quote", "no-close-quote", "no-open-quote", "open-quote", "attr()", "counter()", "counters()", "url()", "linear-gradient()", "radial-gradient()", "repeating-linear-gradient()", "repeating-radial-gradient()", "-webkit-canvas()", "cross-fade()", "image-set()"
     ],
@@ -189,18 +311,6 @@
     "list-style-image": [
         "none", "url()", "linear-gradient()", "radial-gradient()", "repeating-linear-gradient()", "repeating-radial-gradient()", "-webkit-canvas()", "cross-fade()", "image-set()"
     ],
-    "clear": [
-        "none", "left", "right", "both"
-    ],
-    "fill-rule": [
-        "nonzero", "evenodd"
-    ],
-    "stroke-linecap": [
-        "butt", "round", "square"
-    ],
-    "stroke-linejoin": [
-        "round", "miter", "bevel"
-    ],
     "baseline-shift": [
         "baseline", "sub", "super"
     ],
@@ -207,49 +317,13 @@
     "border-bottom-width": [
         "medium", "thick", "thin", "calc()"
     ],
-    "margin-top-collapse": [
-        "collapse", "separate", "discard"
-    ],
-    "-webkit-box-orient": [
-        "horizontal", "vertical", "inline-axis", "block-axis"
-    ],
     "font-stretch": [
         "normal", "wider", "narrower", "ultra-condensed", "extra-condensed", "condensed", "semi-condensed",
         "semi-expanded", "expanded", "extra-expanded", "ultra-expanded"
     ],
-    "font-optical-sizing": [
-        "auto", "none",
-    ],
-    "-webkit-color-correction": [
-        "default", "srgb"
-    ],
     "border-left-width": [
         "medium", "thick", "thin", "calc()"
     ],
-    "-webkit-writing-mode": [
-        "lr", "rl", "tb", "lr-tb", "rl-tb", "tb-rl", "horizontal-tb", "vertical-rl", "vertical-lr", "horizontal-bt"
-    ],
-    "text-line-through-mode": [
-        "continuous", "skip-white-space"
-    ],
-    "text-overline-mode": [
-        "continuous", "skip-white-space"
-    ],
-    "text-underline-mode": [
-        "continuous", "skip-white-space"
-    ],
-    "text-line-through-style": [
-        "none", "dotted", "dashed", "solid", "double", "dot-dash", "dot-dot-dash", "wave"
-    ],
-    "text-overline-style": [
-        "none", "dotted", "dashed", "solid", "double", "dot-dash", "dot-dot-dash", "wave"
-    ],
-    "text-underline-style": [
-        "none", "dotted", "dashed", "solid", "double", "dot-dash", "dot-dot-dash", "wave"
-    ],
-    "border-collapse": [
-        "collapse", "separate"
-    ],
     "border-top-width": [
         "medium", "thick", "thin", "calc()"
     ],
@@ -256,9 +330,6 @@
     "outline-color": [
         "invert", "-webkit-focus-ring-color"
     ],
-    "outline-style": [
-        "none", "hidden", "inset", "groove", "ridge", "outset", "dotted", "dashed", "solid", "double", "auto"
-    ],
     "cursor": [
         "auto", "default", "none", "context-menu", "help", "pointer", "progress", "wait", "cell", "crosshair", "text", "vertical-text",
         "alias", "copy", "move", "no-drop", "not-allowed", "grab", "grabbing",
@@ -305,51 +376,21 @@
     "background-clip": [
         "border-box", "padding-box", "content-box"
     ],
-    "direction": [
-        "ltr", "rtl"
-    ],
     "enable-background": [
         "accumulate", "new"
     ],
-    "float": [
-        "none", "left", "right"
-    ],
     "hanging-punctuation": [
         "none", "first", "last", "allow-end", "force-end"
     ],
-    "overflow-x": [
-        "hidden", "auto", "visible", "overlay", "scroll", "marquee"
-    ],
-    "overflow-y": [
-        "hidden", "auto", "visible", "overlay", "scroll", "marquee", "-webkit-paged-x", "-webkit-paged-y"
-    ],
     "overflow": [
         "hidden", "auto", "visible", "overlay", "scroll", "marquee", "-webkit-paged-x", "-webkit-paged-y"
     ],
-    "margin-bottom-collapse": [
-        "collapse", "separate", "discard"
-    ],
     "-webkit-box-reflect": [
         "none", "left", "right", "above", "below"
     ],
-    "text-rendering": [
-        "auto", "optimizeSpeed", "optimizeLegibility", "geometricPrecision"
-    ],
-    "text-align": [
-        "-webkit-auto", "left", "right", "center", "justify", "-webkit-left", "-webkit-right", "-webkit-center", "-webkit-match-parent", "start", "end"
-    ],
-    "list-style-position": [
-        "outside", "inside"
-    ],
     "margin-bottom": [
         "auto"
     ],
-    "color-interpolation": [
-        "linearrgb"
-    ],
-    "word-wrap": [
-        "normal", "break-word"
-    ],
     "font-weight": [
         "normal", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "700", "800", "900"
     ],
@@ -356,51 +397,9 @@
     "font-synthesis": [
         "none", "weight", "style"
     ],
-    "margin-before-collapse": [
-        "collapse", "separate", "discard"
-    ],
-    "text-overline-width": [
-        "normal", "medium", "auto", "thick", "thin", "calc()"
-    ],
-    "text-transform": [
-        "none", "capitalize", "uppercase", "lowercase"
-    ],
-    "border-right-style": [
-        "none", "hidden", "inset", "groove", "ridge", "outset", "dotted", "dashed", "solid", "double"
-    ],
-    "border-left-style": [
-        "none", "hidden", "inset", "groove", "ridge", "outset", "dotted", "dashed", "solid", "double"
-    ],
     "font-style": [
         "italic", "oblique", "normal"
     ],
-    "speak": [
-        "none", "normal", "spell-out", "digits", "literal-punctuation", "no-punctuation"
-    ],
-    "text-line-through": [
-        "none", "dotted", "dashed", "solid", "double", "dot-dash", "dot-dot-dash", "wave", "continuous", "skip-white-space"
-    ],
-    "color-rendering": [
-        "auto", "optimizeSpeed", "optimizeQuality"
-    ],
-    "list-style-type": [
-        "none", "disc", "circle", "square", "decimal", "decimal-leading-zero", "arabic-indic", "binary", "bengali",
-        "cambodian", "khmer", "devanagari", "gujarati", "gurmukhi", "kannada", "lower-hexadecimal", "lao", "malayalam",
-        "mongolian", "myanmar", "octal", "oriya", "persian", "urdu", "telugu", "tibetan", "thai", "upper-hexadecimal",
-        "lower-roman", "upper-roman", "lower-greek", "lower-alpha", "lower-latin", "upper-alpha", "upper-latin", "afar",
-        "ethiopic-halehame-aa-et", "ethiopic-halehame-aa-er", "amharic", "ethiopic-halehame-am-et", "amharic-abegede",
-        "ethiopic-abegede-am-et", "cjk-earthly-branch", "cjk-heavenly-stem", "ethiopic", "ethiopic-halehame-gez",
-        "ethiopic-abegede", "ethiopic-abegede-gez", "hangul-consonant", "hangul", "lower-norwegian", "oromo",
-        "ethiopic-halehame-om-et", "sidama", "ethiopic-halehame-sid-et", "somali", "ethiopic-halehame-so-et", "tigre",
-        "ethiopic-halehame-tig", "tigrinya-er", "ethiopic-halehame-ti-er", "tigrinya-er-abegede",
-        "ethiopic-abegede-ti-er", "tigrinya-et", "ethiopic-halehame-ti-et", "tigrinya-et-abegede",
-        "ethiopic-abegede-ti-et", "upper-greek", "upper-norwegian", "asterisks", "footnotes", "hebrew", "armenian",
-        "lower-armenian", "upper-armenian", "georgian", "cjk-ideographic", "hiragana", "katakana", "hiragana-iroha",
-        "katakana-iroha"
-    ],
-    "-webkit-text-combine": [
-        "none", "horizontal"
-    ],
     "outline": [
         "none", "hidden", "inset", "groove", "ridge", "outset", "dotted", "dashed", "solid", "double"
     ],
@@ -415,32 +414,9 @@
         "-apple-system-short-subheadline", "-apple-system-short-footnote", "-apple-system-short-caption1",
         "-apple-system-tall-body", "-apple-system-title0", "-apple-system-title1", "-apple-system-title2", "-apple-system-title3", "-apple-system-title4", "system-ui"
     ],
-    "dominant-baseline": [
-        "middle", "auto", "central", "text-before-edge", "text-after-edge", "ideographic", "alphabetic", "hanging",
-        "mathematical", "use-script", "no-change", "reset-size"
-    ],
-    "display": [
-        "none", "inline", "block", "list-item", "compact", "inline-block", "table", "inline-table",
-        "table-row-group", "table-header-group", "table-footer-group", "table-row", "table-column-group",
-        "table-column", "table-cell", "table-caption", "-webkit-box", "-webkit-inline-box", "-wap-marquee",
-        "flex", "inline-flex", "grid", "inline-grid"
-    ],
-    "image-rendering": [
-        "auto", "optimizeSpeed", "optimizeQuality", "-webkit-crisp-edges", "-webkit-optimize-contrast", "crisp-edges", "pixelated"
-    ],
-    "alignment-baseline": [
-        "baseline", "middle", "auto", "before-edge", "after-edge", "central", "text-before-edge", "text-after-edge",
-        "ideographic", "alphabetic", "hanging", "mathematical"
-    ],
     "outline-width": [
         "medium", "thick", "thin", "calc()"
     ],
-    "text-line-through-width": [
-        "normal", "medium", "auto", "thick", "thin"
-    ],
-    "box-align": [
-        "baseline", "center", "stretch", "start", "end"
-    ],
     "box-shadow": [
         "none"
     ],
@@ -453,9 +429,6 @@
     "border-right-width": [
         "medium", "thick", "thin"
     ],
-    "border-top-style": [
-        "none", "hidden", "inset", "groove", "ridge", "outset", "dotted", "dashed", "solid", "double"
-    ],
     "line-height": [
         "normal"
     ],
@@ -465,24 +438,6 @@
     "counter-reset": [
         "none"
     ],
-    "text-overflow": [
-        "clip", "ellipsis"
-    ],
-    "-webkit-box-direction": [
-        "normal", "reverse"
-    ],
-    "margin-after-collapse": [
-        "collapse", "separate", "discard"
-    ],
-    "break-after": [
-         "left", "right", "recto", "verso", "auto", "avoid", "page", "column", "region", "avoid-page", "avoid-column", "avoid-region"
-    ],
-    "break-before": [
-          "left", "right", "recto", "verso", "auto", "avoid", "page", "column", "region", "avoid-page", "avoid-column", "avoid-region"
-    ],
-    "break-inside": [
-          "auto", "avoid", "avoid-page", "avoid-column", "avoid-region"
-    ],
     "page-break-after": [
         "left", "right", "auto", "always", "avoid"
     ],
@@ -501,9 +456,6 @@
     "-webkit-column-break-inside": [
         "auto", "avoid"
     ],
-    "-webkit-hyphens": [
-        "none", "auto", "manual"
-    ],
     "border-image": [
         "repeat", "stretch", "url()", "linear-gradient()", "radial-gradient()", "repeating-linear-gradient()", "repeating-radial-gradient()", "-webkit-canvas()", "cross-fade()", "image-set()"
     ],
@@ -513,9 +465,6 @@
     "-webkit-mask-box-image-repeat": [
         "repeat", "stretch", "space", "round"
     ],
-    "position": [
-        "absolute", "fixed", "relative", "static", "-webkit-sticky"
-    ],
     "font-family": [
         "serif", "sans-serif", "cursive", "fantasy", "monospace", "-webkit-body", "-webkit-pictograph",
         "-apple-system", "-apple-system-headline", "-apple-system-body",
@@ -524,18 +473,6 @@
         "-apple-system-short-footnote", "-apple-system-short-caption1", "-apple-system-tall-body",
         "-apple-system-title0", "-apple-system-title1", "-apple-system-title2", "-apple-system-title3", "-apple-system-title4", "system-ui"
     ],
-    "text-overflow-mode": [
-        "clip", "ellipsis"
-    ],
-    "border-bottom-style": [
-        "none", "hidden", "inset", "groove", "ridge", "outset", "dotted", "dashed", "solid", "double"
-    ],
-    "unicode-bidi": [
-        "normal", "bidi-override", "embed", "plaintext", "isolate", "isolate-override"
-    ],
-    "clip-rule": [
-        "nonzero", "evenodd"
-    ],
     "margin-left": [
         "auto"
     ],
@@ -566,30 +503,6 @@
     "min-height": [
         "intrinsic", "min-intrinsic", "calc()"
     ],
-    "-webkit-logical-width": [
-        "intrinsic", "min-intrinsic", "-webkit-min-content", "-webkit-max-content", "-webkit-fill-available", "-webkit-fit-content", "calc()"
-    ],
-    "-webkit-logical-height": [
-        "intrinsic", "min-intrinsic", "calc()"
-    ],
-    "-webkit-max-logical-width": [
-        "none", "intrinsic", "min-intrinsic", "-webkit-min-content", "-webkit-max-content", "-webkit-fill-available", "-webkit-fit-content", "calc()"
-    ],
-    "-webkit-min-logical-width": [
-        "intrinsic", "min-intrinsic", "-webkit-min-content", "-webkit-max-content", "-webkit-fill-available", "-webkit-fit-content", "calc()"
-    ],
-    "-webkit-max-logical-height": [
-        "none", "intrinsic", "min-intrinsic", "calc()"
-    ],
-    "-webkit-min-logical-height": [
-        "intrinsic", "min-intrinsic", "calc()"
-    ],
-    "empty-cells": [
-        "hide", "show"
-    ],
-    "pointer-events": [
-        "none", "all", "auto", "visible", "visiblepainted", "visiblefill", "visiblestroke", "painted", "fill", "stroke"
-    ],
     "letter-spacing": [
         "normal", "calc()"
     ],
@@ -596,12 +509,6 @@
     "word-spacing": [
         "normal", "calc()"
     ],
-    "-webkit-font-kerning": [
-        "auto", "normal", "none"
-    ],
-    "-webkit-font-smoothing": [
-        "none", "auto", "antialiased", "subpixel-antialiased"
-    ],
     "border": [
         "none", "hidden", "inset", "groove", "ridge", "outset", "dotted", "dashed", "solid", "double"
     ],
@@ -618,21 +525,9 @@
     "vertical-align": [
         "baseline", "middle", "sub", "super", "text-top", "text-bottom", "top", "bottom", "-webkit-baseline-middle"
     ],
-    "white-space": [
-        "normal", "nowrap", "pre", "pre-line", "pre-wrap"
-    ],
-    "word-break": [
-        "normal", "break-all", "break-word"
-    ],
-    "text-underline-width": [
-        "normal", "medium", "auto", "thick", "thin", "calc()"
-    ],
     "text-indent": [
         "-webkit-each-line", "-webkit-hanging"
     ],
-    "-webkit-box-lines": [
-        "single", "multiple"
-    ],
     "clip": [
         "auto", "rect()"
     ],
@@ -663,12 +558,6 @@
     "-webkit-marquee-increment": [
         "small", "large", "medium"
     ],
-    "-webkit-marquee-direction": [
-        "left", "right", "auto", "reverse", "forwards", "backwards", "ahead", "up", "down"
-    ],
-    "-webkit-marquee-style": [
-        "none", "scroll", "slide", "alternate"
-    ],
     "-webkit-marquee-repetition": [
         "infinite"
     ],
@@ -678,9 +567,6 @@
     "margin-right": [
         "auto"
     ],
-    "marquee-speed": [
-        "normal", "slow", "fast"
-    ],
     "-webkit-text-emphasis": [
         "circle", "filled", "open", "dot", "double-circle", "triangle", "sesame"
     ],
@@ -695,12 +581,6 @@
         "scale()", "scaleX()", "scaleY()", "scale3d()", "rotate()", "rotateX()", "rotateY()", "rotateZ()", "rotate3d()", "skew()", "skewX()", "skewY()",
         "translate()", "translateX()", "translateY()", "translateZ()", "translate3d()", "matrix()", "matrix3d()", "perspective()"
     ],
-    "transform-style": [
-        "flat", "preserve-3d"
-    ],
-    "-webkit-cursor-visibility": [
-        "auto", "auto-hide"
-    ],
     "text-decoration": [
         "none", "underline", "overline", "line-through", "blink"
     ],
@@ -710,9 +590,6 @@
     "-webkit-text-decoration-line": [
         "none", "underline", "overline", "line-through", "blink"
     ],
-    "-webkit-text-decoration-style": [
-        "solid", "double", "dotted", "dashed", "wavy"
-    ],
     "-webkit-text-decoration-skip": [
         "auto", "none", "objects", "ink"
     ],
@@ -719,26 +596,6 @@
     "-webkit-text-underline-position": [
         "auto", "alphabetic", "under"
     ],
-    "image-resolution": [
-        "from-image", "snap"
-    ],
-    "-webkit-blend-mode": [
-        "normal", "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "plus-darker", "plus-lighter", "hue", "saturation", "color", "luminosity",
-    ],
-    "mix-blend-mode": [
-        "normal", "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "plus-darker", "plus-lighter", "hue", "saturation", "color", "luminosity",
-    ],
-    "mix": [
-        "auto",
-        "normal", "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "plus-darker", "plus-lighter", "hue", "saturation", "color", "luminosity",
-        "clear", "copy", "destination", "source-over", "destination-over", "source-in", "destination-in", "source-out", "destination-out", "source-atop", "destination-atop", "xor"
-    ],
-    "geometry": [
-        "detached", "attached", "grid()"
-    ],
-    "overflow-wrap": [
-        "normal", "break-word"
-    ],
     "transition": [
         "none", "ease", "linear", "ease-in", "ease-out", "ease-in-out", "step-start", "step-end", "steps()", "cubic-bezier()", "spring()", "all", WI.CSSKeywordCompletions.AllPropertyNamesPlaceholder
     ],
@@ -748,12 +605,21 @@
     "transition-property": [
         "all", "none", WI.CSSKeywordCompletions.AllPropertyNamesPlaceholder
     ],
-    "-webkit-column-progression": [
-        "normal", "reverse"
+    "animation-direction": [
+        "normal", "alternate", "reverse", "alternate-reverse"
     ],
-    "-webkit-box-decoration-break": [
-        "slice", "clone"
+    "animation-fill-mode": [
+        "none", "forwards", "backwards", "both"
     ],
+    "animation-iteration-count": [
+        "infinite"
+    ],
+    "animation-play-state": [
+        "paused", "running"
+    ],
+    "animation-timing-function": [
+        "ease", "linear", "ease-in", "ease-out", "ease-in-out", "step-start", "step-end", "steps()", "cubic-bezier()", "spring()"
+    ],
     "align-content": [
         "auto",
         "baseline", "last-baseline",
@@ -791,12 +657,6 @@
         "center", "start", "end", "self-start", "self-end", "flex-start", "flex-end", "left", "right",
         "true", "safe"
     ],
-    "flex-direction": [
-        "row", "row-reverse", "column", "column-reverse"
-    ],
-    "flex-wrap": [
-        "nowrap", "wrap", "wrap-reverse"
-    ],
     "flex-flow": [
         "row", "row-reverse", "column", "column-reverse",
         "nowrap", "wrap", "wrap-reverse"
@@ -852,217 +712,509 @@
     "grid-template-rows": [
         "none", "auto", "-webkit-max-content", "-webkit-min-content", "minmax()", "repeat()"
     ],
-    "-webkit-ruby-position": [
-        "after", "before", "inter-character"
+    "scroll-snap-align": [
+        "none", "start", "center", "end"
     ],
-    "-webkit-text-align-last": [
-        "auto", "start", "end", "left", "right", "center", "justify"
+    "scroll-snap-type": [
+        "none", "mandatory", "proximity", "x", "y", "inline", "block", "both"
     ],
-    "-webkit-text-justify": [
-        "auto", "none", "inter-word", "inter-ideograph", "inter-cluster", "distribute", "kashida"
+    "-webkit-background-composite": [
+        "clear", "copy", "source-over", "source-in", "source-out", "source-atop", "destination-over", "destination-in", "destination-out", "destination-atop", "xor", "plus-darker", "plus-lighter"
     ],
-    "max-zoom": [
+    "-webkit-mask-composite": [
+        "clear", "copy", "source-over", "source-in", "source-out", "source-atop", "destination-over", "destination-in", "destination-out", "destination-atop", "xor", "plus-darker", "plus-lighter"
+    ],
+    "-webkit-text-stroke-width": [
+        "medium", "thick", "thin", "calc()"
+    ],
+    "-webkit-aspect-ratio": [
+        "auto", "from-dimensions", "from-intrinsic", "/"
+    ],
+    "filter": [
+        "none", "grayscale()", "sepia()", "saturate()", "hue-rotate()", "invert()", "opacity()", "brightness()", "contrast()", "blur()", "drop-shadow()", "custom()"
+    ],
+    "-webkit-backdrop-filter": [
+        "none", "grayscale()", "sepia()", "saturate()", "hue-rotate()", "invert()", "opacity()", "brightness()", "contrast()", "blur()", "drop-shadow()", "custom()"
+    ],
+    "-webkit-hyphenate-character": [
+        "none"
+    ],
+    "-webkit-hyphenate-limit-after": [
         "auto"
     ],
-    "min-zoom": [
+    "-webkit-hyphenate-limit-before": [
         "auto"
     ],
-    "orientation": [
-        "auto", "portait", "landscape"
+    "-webkit-hyphenate-limit-lines": [
+        "no-limit"
     ],
-    "scroll-snap-align": [
-        "none", "start", "center", "end"
+    "-webkit-line-grid": [
+        "none"
     ],
-    "scroll-snap-type": [
-        "none", "mandatory", "proximity", "x", "y", "inline", "block", "both"
+    "-webkit-locale": [
+        "auto"
     ],
-    "user-zoom": [
-        "zoom", "fixed"
+    "-webkit-line-box-contain": [
+        "block", "inline", "font", "glyphs", "replaced", "inline-box", "none"
     ],
-    "-webkit-app-region": [
-        "drag", "no-drag"
+    "font-feature-settings": [
+        "normal"
     ],
-    "-webkit-line-break": [
-        "auto", "loose", "normal", "strict", "after-white-space"
+    "-webkit-animation-trigger": [
+        "auto", "container-scroll()"
     ],
-    "-webkit-background-composite": [
-        "clear", "copy", "source-over", "source-in", "source-out", "source-atop", "destination-over", "destination-in", "destination-out", "destination-atop", "xor", "plus-darker", "plus-lighter"
+
+    // iOS Properties
+    "-webkit-text-size-adjust": [
+        "none", "auto"
     ],
-    "-webkit-mask-composite": [
-        "clear", "copy", "source-over", "source-in", "source-out", "source-atop", "destination-over", "destination-in", "destination-out", "destination-atop", "xor", "plus-darker", "plus-lighter"
+
+    // Compatibility (iOS 12): `inherited` didn't exist on `CSSPropertyInfo`
+    "-apple-pay-button-style": [
+        "black", "white", "white-outline",
     ],
+    "-apple-pay-button-type": [
+        "plain", "buy", "set-up", "in-store", "donate", "checkout", "book", "subscribe",
+    ],
+    "-apple-trailing-word": [
+        "auto", "-webkit-partially-balanced",
+    ],
+    "-webkit-alt": [
+        "attr()",
+    ],
     "-webkit-animation-direction": [
-        "normal", "alternate", "reverse", "alternate-reverse"
+        "normal", "alternate", "reverse", "alternate-reverse",
     ],
     "-webkit-animation-fill-mode": [
-        "none", "forwards", "backwards", "both"
+        "none", "forwards", "backwards", "both",
     ],
     "-webkit-animation-iteration-count": [
-        "infinite"
+        "infinite",
     ],
     "-webkit-animation-play-state": [
-        "paused", "running"
+        "paused", "running",
     ],
     "-webkit-animation-timing-function": [
-        "ease", "linear", "ease-in", "ease-out", "ease-in-out", "step-start", "step-end", "steps()", "cubic-bezier()", "spring()"
+        "ease", "linear", "ease-in", "ease-out", "ease-in-out", "step-start", "step-end", "steps()", "cubic-bezier()", "spring()",
     ],
-    "-webkit-column-span": [
-        "all", "none", "calc()"
+    "-webkit-appearance": [
+        "none", "checkbox", "radio", "push-button", "square-button", "button", "button-bevel", "default-button", "inner-spin-button", "listbox", "listitem", "media-controls-background", "media-controls-dark-bar-background", "media-controls-fullscreen-background", "media-controls-light-bar-background", "media-current-time-display", "media-enter-fullscreen-button", "media-exit-fullscreen-button", "media-fullscreen-volume-slider", "media-fullscreen-volume-slider-thumb", "media-mute-button", "media-overlay-play-button", "media-play-button", "media-return-to-realtime-button", "media-rewind-button", "media-seek-back-button", "media-seek-forward-button", "media-slider", "media-sliderthumb", "media-ti
 me-remaining-display", "media-toggle-closed-captions-button", "media-volume-slider", "media-volume-slider-container", "media-volume-slider-mute-button", "media-volume-sliderthumb", "menulist", "menulist-button", "menulist-text", "menulist-textfield", "meter", "progress-bar", "progress-bar-value", "slider-horizontal", "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "caret", "searchfield", "searchfield-decoration", "searchfield-results-decoration", "searchfield-results-button", "searchfield-cancel-button", "snapshotted-plugin-overlay", "textfield", "relevancy-level-indicator", "continuous-capacity-level-indicator", "discrete-capacity-level-indicator", "rating-level-indicator", "i
 mage-controls-button", "-apple-pay-button", "textarea", "attachment", "borderless-attachment", "caps-lock-indicator",
     ],
-    "-webkit-region-break-after": [
-        "auto", "always", "avoid", "left", "right"
+    "-webkit-backface-visibility": [
+        "hidden", "visible",
     ],
-    "-webkit-region-break-before": [
-        "auto", "always", "avoid", "left", "right"
+    "-webkit-border-after-width": [
+        "medium", "thick", "thin", "calc()",
     ],
-    "-webkit-region-break-inside": [
-        "auto", "avoid"
+    "-webkit-border-before-width": [
+        "medium", "thick", "thin", "calc()",
     ],
-    "-webkit-region-overflow": [
-        "auto", "break"
+    "-webkit-border-end-width": [
+        "medium", "thick", "thin", "calc()",
     ],
-    "-webkit-backface-visibility": [
-        "visible", "hidden"
+    "-webkit-border-fit": [
+        "border", "lines",
     ],
-    "resize": [
-        "none", "both", "horizontal", "vertical", "auto"
+    "-webkit-border-start-width": [
+        "medium", "thick", "thin", "calc()",
     ],
-    "caption-side": [
-        "top", "bottom", "left", "right"
+    "-webkit-box-align": [
+        "baseline", "center", "stretch", "start", "end",
     ],
-    "box-sizing": [
-        "border-box", "content-box"
+    "-webkit-box-decoration-break": [
+        "clone", "slice",
     ],
-    "-webkit-alt": [
-        "attr()"
+    "-webkit-box-direction": [
+        "normal", "reverse",
     ],
-    "-webkit-border-fit": [
-        "border", "lines"
+    "-webkit-box-lines": [
+        "single", "multiple",
     ],
+    "-webkit-box-orient": [
+        "horizontal", "vertical", "inline-axis", "block-axis",
+    ],
+    "-webkit-box-pack": [
+        "center", "justify", "start", "end",
+    ],
+    "-webkit-column-axis": [
+        "auto", "horizontal", "vertical",
+    ],
+    "-webkit-column-count": [
+        "auto", "calc()",
+    ],
+    "-webkit-column-fill": [
+        "auto", "balance",
+    ],
+    "-webkit-column-gap": [
+        "normal", "calc()",
+    ],
+    "-webkit-column-progression": [
+        "normal", "reverse",
+    ],
+    "-webkit-column-rule-width": [
+        "medium", "thick", "thin", "calc()",
+    ],
+    "-webkit-column-span": [
+        "all", "none", "calc()",
+    ],
+    "-webkit-column-width": [
+        "auto", "calc()",
+    ],
+    "-webkit-cursor-visibility": [
+        "auto", "auto-hide",
+    ],
+    "-webkit-font-kerning": [
+        "none", "normal", "auto",
+    ],
+    "-webkit-font-smoothing": [
+        "none", "auto", "antialiased", "subpixel-antialiased",
+    ],
+    "-webkit-hyphens": [
+        "none", "auto", "manual",
+    ],
     "-webkit-line-align": [
-        "none", "edges"
+        "none", "edges",
     ],
+    "-webkit-line-break": [
+        "auto", "loose", "normal", "strict", "after-white-space",
+    ],
     "-webkit-line-snap": [
-        "none", "baseline", "contain"
+        "none", "baseline", "contain",
     ],
+    "-webkit-logical-height": [
+        "intrinsic", "min-intrinsic", "calc()",
+    ],
+    "-webkit-logical-width": [
+        "intrinsic", "min-intrinsic", "-webkit-min-content", "-webkit-max-content", "-webkit-fill-available", "-webkit-fit-content", "calc()",
+    ],
+    "-webkit-margin-after-collapse": [
+        "collapse", "separate", "discard",
+    ],
+    "-webkit-margin-before-collapse": [
+        "collapse", "separate", "discard",
+    ],
+    "-webkit-margin-bottom-collapse": [
+        "collapse", "separate", "discard",
+    ],
+    "-webkit-margin-top-collapse": [
+        "collapse", "separate", "discard",
+    ],
+    "-webkit-marquee-direction": [
+        "left", "right", "auto", "reverse", "forwards", "backwards", "ahead", "up", "down",
+    ],
+    "-webkit-marquee-style": [
+        "none", "scroll", "slide", "alternate",
+    ],
+    "-webkit-max-logical-height": [
+        "none", "intrinsic", "min-intrinsic", "calc()",
+    ],
+    "-webkit-max-logical-width": [
+        "none", "intrinsic", "min-intrinsic", "-webkit-min-content", "-webkit-max-content", "-webkit-fill-available", "-webkit-fit-content", "calc()",
+    ],
+    "-webkit-min-logical-height": [
+        "intrinsic", "min-intrinsic", "calc()",
+    ],
+    "-webkit-min-logical-width": [
+        "intrinsic", "min-intrinsic", "-webkit-min-content", "-webkit-max-content", "-webkit-fill-available", "-webkit-fit-content", "calc()",
+    ],
     "-webkit-nbsp-mode": [
-        "normal", "space"
+        "normal", "space",
     ],
+    "-webkit-overflow-scrolling": [
+        "auto", "touch",
+    ],
     "-webkit-print-color-adjust": [
-        "exact", "economy"
+        "economy", "exact",
     ],
     "-webkit-rtl-ordering": [
-        "logical", "visual"
+        "logical", "visual",
     ],
+    "-webkit-ruby-position": [
+        "after", "before", "inter-character",
+    ],
+    "-webkit-text-align-last": [
+        "auto", "start", "end", "left", "right", "center", "justify",
+    ],
+    "-webkit-text-combine": [
+        "none", "horizontal",
+    ],
+    "-webkit-text-decoration-style": [
+        "dotted", "dashed", "solid", "double", "wavy",
+    ],
+    "-webkit-text-justify": [
+        "auto", "none", "inter-word", "inter-ideograph", "inter-cluster", "distribute", "kashida",
+    ],
+    "-webkit-text-orientation": [
+        "sideways", "sideways-right", "upright", "mixed",
+    ],
     "-webkit-text-security": [
-        "disc", "circle", "square", "none"
+        "none", "disc", "circle", "square",
     ],
+    "-webkit-text-zoom": [
+        "normal", "reset",
+    ],
+    "-webkit-transform-style": [
+        "flat", "preserve-3d",
+    ],
     "-webkit-user-drag": [
-        "auto", "none", "element"
+        "none", "auto", "element",
     ],
     "-webkit-user-modify": [
-        "read-only", "read-write", "read-write-plaintext-only"
+        "read-only", "read-write", "read-write-plaintext-only",
     ],
     "-webkit-user-select": [
-        "auto", "none", "text", "all"
+        "none", "all", "auto", "text",
     ],
-    "-webkit-text-stroke-width": [
-        "medium", "thick", "thin", "calc()"
+    "-webkit-writing-mode": [
+        "lr", "rl", "tb", "lr-tb", "rl-tb", "tb-rl", "horizontal-tb", "vertical-rl", "vertical-lr", "horizontal-bt",
     ],
-    "-webkit-border-start-width": [
-        "medium", "thick", "thin", "calc()"
+    "alignment-baseline": [
+        "baseline", "middle", "auto", "alphabetic", "before-edge", "after-edge", "central", "text-before-edge", "text-after-edge", "ideographic", "hanging", "mathematical",
     ],
-    "-webkit-border-end-width": [
-        "medium", "thick", "thin", "calc()"
+    "border-block-end-style": [
+        "none", "hidden", "inset", "groove", "outset", "ridge", "dotted", "dashed", "solid", "double",
     ],
-    "-webkit-border-before-width": [
-        "medium", "thick", "thin", "calc()"
+    "border-block-start-style": [
+        "none", "hidden", "inset", "groove", "outset", "ridge", "dotted", "dashed", "solid", "double",
     ],
-    "-webkit-border-after-width": [
-        "medium", "thick", "thin", "calc()"
+    "border-bottom-style": [
+        "none", "hidden", "inset", "groove", "outset", "ridge", "dotted", "dashed", "solid", "double",
     ],
-    "-webkit-column-rule-width": [
-        "medium", "thick", "thin", "calc()"
+    "border-collapse": [
+        "collapse", "separate",
     ],
-    "-webkit-aspect-ratio": [
-        "auto", "from-dimensions", "from-intrinsic", "/"
+    "border-inline-end-style": [
+        "none", "hidden", "inset", "groove", "outset", "ridge", "dotted", "dashed", "solid", "double",
     ],
-    "filter": [
-        "none", "grayscale()", "sepia()", "saturate()", "hue-rotate()", "invert()", "opacity()", "brightness()", "contrast()", "blur()", "drop-shadow()", "custom()"
+    "border-inline-start-style": [
+        "none", "hidden", "inset", "groove", "outset", "ridge", "dotted", "dashed", "solid", "double",
     ],
-    "-webkit-backdrop-filter": [
-        "none", "grayscale()", "sepia()", "saturate()", "hue-rotate()", "invert()", "opacity()", "brightness()", "contrast()", "blur()", "drop-shadow()", "custom()"
+    "border-left-style": [
+        "none", "hidden", "inset", "groove", "outset", "ridge", "dotted", "dashed", "solid", "double",
     ],
-    "-webkit-column-count": [
-        "auto", "calc()"
+    "border-right-style": [
+        "none", "hidden", "inset", "groove", "outset", "ridge", "dotted", "dashed", "solid", "double",
     ],
-    "-webkit-column-gap": [
-        "normal", "calc()"
+    "border-top-style": [
+        "none", "hidden", "inset", "groove", "outset", "ridge", "dotted", "dashed", "solid", "double",
     ],
-    "-webkit-column-axis": [
-        "horizontal", "vertical", "auto"
+    "box-sizing": [
+        "border-box", "content-box",
     ],
-    "-webkit-column-width": [
-        "auto", "calc()"
+    "break-after": [
+        "left", "right", "auto", "avoid", "column", "avoid-column", "avoid-page", "page", "recto", "verso",
     ],
-    "-webkit-column-fill": [
-        "auto", "balance"
+    "break-before": [
+        "left", "right", "auto", "avoid", "column", "avoid-column", "avoid-page", "page", "recto", "verso",
     ],
-    "-webkit-hyphenate-character": [
-        "none"
+    "break-inside": [
+        "auto", "avoid", "avoid-column", "avoid-page",
     ],
-    "-webkit-hyphenate-limit-after": [
-        "auto"
+    "buffered-rendering": [
+        "auto", "static", "dynamic",
     ],
-    "-webkit-hyphenate-limit-before": [
-        "auto"
+    "caption-side": [
+        "top", "bottom", "left", "right",
     ],
-    "-webkit-hyphenate-limit-lines": [
-        "no-limit"
+    "clear": [
+        "none", "left", "right", "both",
     ],
-    "-webkit-line-grid": [
-        "none"
+    "clip-rule": [
+        "nonzero", "evenodd",
     ],
-    "-webkit-locale": [
-        "auto"
+    "color-interpolation": [
+        "auto", "sRGB", "linearRGB",
     ],
-    "-webkit-text-orientation": [
-        "sideways", "sideways-right", "vertical-right", "upright"
+    "color-interpolation-filters": [
+        "auto", "sRGB", "linearRGB",
     ],
-    "-webkit-line-box-contain": [
-        "block", "inline", "font", "glyphs", "replaced", "inline-box", "none"
+    "color-rendering": [
+        "auto", "optimizeSpeed", "optimizeQuality",
     ],
-    "font-feature-settings": [
-        "normal"
+    "column-fill": [
+        "auto", "balance",
     ],
-    "-webkit-font-variant-ligatures": [
-        "normal", "common-ligatures", "no-common-ligatures", "discretionary-ligatures", "no-discretionary-ligatures", "historical-ligatures", "no-historical-ligatures"
+    "column-rule-style": [
+        "none", "hidden", "inset", "groove", "outset", "ridge", "dotted", "dashed", "solid", "double",
     ],
-    /*
-    "-webkit-appearance": [
-        "none", "checkbox", "radio", "push-button", "square-button", "button", "button-bevel", "default-button", "inner-spin-button", "listbox", "listitem", "media-enter-fullscreen-button", "media-exit-fullscreen-button", "media-fullscreen-volume-slider", "media-fullscreen-volume-slider-thumb", "media-mute-button", "media-play-button", "media-overlay-play-button", "media-seek-back-button", "media-seek-forward-button", "media-rewind-button", "media-return-to-realtime-button", "media-toggle-closed-captions-button", "media-slider", "media-sliderthumb", "media-volume-slider-container", "media-volume-slider", "media-volume-sliderthumb", "media-volume-slider-mute-button", "media-controls-background&
 quot;, "media-controls-fullscreen-background", "media-current-time-display", "media-time-remaining-display", "menulist", "menulist-button", "menulist-text", "menulist-textfield", "meter", "progress-bar", "progress-bar-value", "slider-horizontal", "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "caret", "searchfield", "searchfield-decoration", "searchfield-results-decoration", "searchfield-results-button", "searchfield-cancel-button", "snapshotted-plugin-overlay", "textfield", "relevancy-level-indicator", "continuous-capacity-level-indicator", "discrete-capacity-level-indicator", "rating-level-indicator", "textarea", "attachment", "caps-lock-indicator", "color-well", &
 quot;list-button"
+    "direction": [
+        "ltr", "rtl",
     ],
-    */
-    "-webkit-animation-trigger": [
-        "auto", "container-scroll()"
+    "display": [
+        "none", "inline", "block", "list-item", "compact", "inline-block", "table", "inline-table", "table-row-group", "table-header-group", "table-footer-group", "table-row", "table-column-group", "table-column", "table-cell", "table-caption", "-webkit-box", "-webkit-inline-box", "flex", "-webkit-flex", "inline-flex", "-webkit-inline-flex", "contents", "grid", "inline-grid",
     ],
-
-    // iOS Properties
-    "-webkit-text-size-adjust": [
-        "none", "auto"
+    "dominant-baseline": [
+        "middle", "auto", "alphabetic", "central", "text-before-edge", "text-after-edge", "ideographic", "hanging", "mathematical", "use-script", "no-change", "reset-size",
     ],
-    "-webkit-touch-callout": [
-        "default", "none"
+    "empty-cells": [
+        "hide", "show",
     ],
-    "-webkit-overflow-scrolling": [
-        "auto", "touch"
+    "fill-rule": [
+        "nonzero", "evenodd",
     ],
-
-    // Apple Pay Properties
-    "-apple-pay-button-style": [
-        "black", "white", "white-outline"
+    "flex-direction": [
+        "row", "row-reverse", "column", "column-reverse",
     ],
-    "-apple-pay-button-type": [
-        "book", "buy", "check-out", "donate", "in-store", "plain", "set-up", "subscribe"
-    ]
+    "flex-wrap": [
+        "nowrap", "wrap-reverse", "wrap",
+    ],
+    "float": [
+        "none", "left", "right",
+    ],
+    "font-optical-sizing": [
+        "none", "auto",
+    ],
+    "font-variant-alternates": [
+        "historical-forms", "normal",
+    ],
+    "font-variant-caps": [
+        "small-caps", "all-small-caps", "petite-caps", "all-petite-caps", "unicase", "titling-caps", "normal",
+    ],
+    "font-variant-position": [
+        "normal", "sub", "super",
+    ],
+    "image-rendering": [
+        "auto", "optimizeSpeed", "optimizeQuality", "crisp-edges", "pixelated", "-webkit-crisp-edges", "-webkit-optimize-contrast",
+    ],
+    "image-resolution": [
+        "from-image", "snap",
+    ],
+    "isolation": [
+        "auto", "isolate",
+    ],
+    "line-break": [
+        "normal", "auto", "loose", "strict", "after-white-space",
+    ],
+    "list-style-position": [
+        "outside", "inside",
+    ],
+    "list-style-type": [
+        "none", "disc", "circle", "square", "decimal", "decimal-leading-zero", "arabic-indic", "binary", "bengali", "cambodian", "khmer", "devanagari", "gujarati", "gurmukhi", "kannada", "lower-hexadecimal", "lao", "malayalam", "mongolian", "myanmar", "octal", "oriya", "persian", "urdu", "telugu", "tibetan", "thai", "upper-hexadecimal", "lower-roman", "upper-roman", "lower-greek", "lower-alpha", "lower-latin", "upper-alpha", "upper-latin", "afar", "ethiopic-halehame-aa-et", "ethiopic-halehame-aa-er", "amharic", "ethiopic-halehame-am-et", "amharic-abegede", "ethiopic-abegede-a
 m-et", "cjk-earthly-branch", "cjk-heavenly-stem", "ethiopic", "ethiopic-halehame-gez", "ethiopic-abegede", "ethiopic-abegede-gez", "hangul-consonant", "hangul", "lower-norwegian", "oromo", "ethiopic-halehame-om-et", "sidama", "ethiopic-halehame-sid-et", "somali", "ethiopic-halehame-so-et", "tigre", "ethiopic-halehame-tig", "tigrinya-er", "ethiopic-halehame-ti-er", "tigrinya-er-abegede", "ethiopic-abegede-ti-er", "tigrinya-et", "ethiopic-halehame-ti-et", "tigrinya-et-abegede", "ethiopic-abegede-ti-et", "upper-greek", "upper-norwegian", "asterisks", "footnotes", "hebrew", "armenian", "lower-armenian", "upper-armenian", "georgian", "cjk-ideog
 raphic", "hiragana", "katakana", "hiragana-iroha", "katakana-iroha",
+    ],
+    "mask-type": [
+        "alpha", "luminance",
+    ],
+    "max-zoom": [
+        "auto",
+    ],
+    "min-zoom": [
+        "auto",
+    ],
+    "mix-blend-mode": [
+        "normal", "plus-darker", "plus-lighter", "overlay", "multiply", "screen", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity",
+    ],
+    "object-fit": [
+        "none", "contain", "cover", "fill", "scale-down",
+    ],
+    "orientation": [
+        "auto", "portait", "landscape",
+    ],
+    "outline-style": [
+        "none", "inset", "groove", "outset", "ridge", "dotted", "dashed", "solid", "double", "auto",
+    ],
+    "overflow-wrap": [
+        "normal", "break-word",
+    ],
+    "overflow-x": [
+        "hidden", "auto", "visible", "overlay", "scroll",
+    ],
+    "overflow-y": [
+        "hidden", "auto", "visible", "overlay", "scroll", "-webkit-paged-x", "-webkit-paged-y",
+    ],
+    "pointer-events": [
+        "none", "all", "auto", "visible", "visiblePainted", "visibleFill", "visibleStroke", "painted", "fill", "stroke",
+    ],
+    "position": [
+        "absolute", "fixed", "relative", "static", "-webkit-sticky",
+    ],
+    "resize": [
+        "none", "auto", "both", "horizontal", "vertical",
+    ],
+    "shape-rendering": [
+        "auto", "optimizeSpeed", "geometricPrecision", "crispedges",
+    ],
+    "stroke-linecap": [
+        "square", "round", "butt",
+    ],
+    "stroke-linejoin": [
+        "round", "miter", "bevel",
+    ],
+    "table-layout": [
+        "auto", "fixed",
+    ],
+    "text-align": [
+        "-webkit-auto", "left", "right", "center", "justify", "-webkit-left", "-webkit-right", "-webkit-center", "-webkit-match-parent", "start", "end",
+    ],
+    "text-anchor": [
+        "middle", "start", "end",
+    ],
+    "text-line-through": [
+        "none", "dotted", "dashed", "solid", "double", "dot-dash", "dot-dot-dash", "wave", "continuous", "skip-white-space",
+    ],
+    "text-line-through-mode": [
+        "continuous", "skip-white-space",
+    ],
+    "text-line-through-style": [
+        "none", "dotted", "dashed", "solid", "double", "dot-dash", "dot-dot-dash", "wave",
+    ],
+    "text-line-through-width": [
+        "normal", "medium", "auto", "thick", "thin",
+    ],
+    "text-overflow": [
+        "clip", "ellipsis",
+    ],
+    "text-overline-mode": [
+        "continuous", "skip-white-space",
+    ],
+    "text-overline-style": [
+        "none", "dotted", "dashed", "solid", "double", "dot-dash", "dot-dot-dash", "wave",
+    ],
+    "text-overline-width": [
+        "normal", "medium", "auto", "thick", "thin", "calc()",
+    ],
+    "text-rendering": [
+        "auto", "optimizeSpeed", "optimizeLegibility", "geometricPrecision",
+    ],
+    "text-transform": [
+        "none", "capitalize", "uppercase", "lowercase",
+    ],
+    "text-underline": [
+        "none", "dotted", "dashed", "solid", "double", "dot-dash", "dot-dot-dash", "wave",
+    ],
+    "text-underline-mode": [
+        "continuous", "skip-white-space",
+    ],
+    "text-underline-style": [
+        "none", "dotted", "dashed", "solid", "double", "dot-dash", "dot-dot-dash", "wave",
+    ],
+    "text-underline-width": [
+        "normal", "medium", "auto", "thick", "thin", "calc()",
+    ],
+    "transform-style": [
+        "flat", "preserve-3d",
+    ],
+    "unicode-bidi": [
+        "normal", "bidi-override", "embed", "isolate-override", "plaintext", "-webkit-isolate", "-webkit-isolate-override", "-webkit-plaintext", "isolate",
+    ],
+    "user-zoom": [
+        "zoom", "fixed",
+    ],
+    "vector-effect": [
+        "none",
+    ],
+    "visibility": [
+        "hidden", "visible", "collapse",
+    ],
+    "white-space": [
+        "normal", "nowrap", "pre", "pre-line", "pre-wrap",
+    ],
+    "word-break": [
+        "normal", "break-all", "keep-all", "break-word",
+    ],
+    "word-wrap": [
+        "normal", "break-word",
+    ],
+    "writing-mode": [
+        "lr", "rl", "tb", "lr-tb", "rl-tb", "tb-rl", "horizontal-tb", "vertical-rl", "vertical-lr", "horizontal-bt",
+    ],
 };

Modified: trunk/Source/WebInspectorUI/UserInterface/Models/CSSProperty.js (236090 => 236091)


--- trunk/Source/WebInspectorUI/UserInterface/Models/CSSProperty.js	2018-09-17 22:22:15 UTC (rev 236090)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/CSSProperty.js	2018-09-17 22:43:11 UTC (rev 236091)
@@ -40,7 +40,7 @@
     static isInheritedPropertyName(name)
     {
         console.assert(typeof name === "string");
-        if (name in WI.CSSKeywordCompletions.InheritedProperties)
+        if (WI.CSSKeywordCompletions.InheritedProperties.has(name))
             return true;
         // Check if the name is a CSS variable.
         return name.startsWith("--");
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to