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

Side by Side Diff: third_party/WebKit/Source/core/css/cssom/InlineStylePropertyMap.cpp

Issue 2096133002: [Typed OM] Add support for properties which take numbers in CSSProperties.in (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: sync to head Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/css/cssom/InlineStylePropertyMap.h" 5 #include "core/css/cssom/InlineStylePropertyMap.h"
6 6
7 #include "bindings/core/v8/Iterable.h" 7 #include "bindings/core/v8/Iterable.h"
8 #include "core/CSSPropertyNames.h" 8 #include "core/CSSPropertyNames.h"
9 #include "core/css/CSSPrimitiveValue.h" 9 #include "core/css/CSSPrimitiveValue.h"
10 #include "core/css/CSSPropertyMetadata.h" 10 #include "core/css/CSSPropertyMetadata.h"
11 #include "core/css/CSSValueList.h" 11 #include "core/css/CSSValueList.h"
12 #include "core/css/StylePropertySet.h" 12 #include "core/css/StylePropertySet.h"
13 #include "core/css/cssom/CSSOMTypes.h" 13 #include "core/css/cssom/CSSOMTypes.h"
14 #include "core/css/cssom/CSSSimpleLength.h" 14 #include "core/css/cssom/CSSSimpleLength.h"
15 #include "core/css/cssom/StyleValueFactory.h" 15 #include "core/css/cssom/StyleValueFactory.h"
16 16
17 namespace blink { 17 namespace blink {
18 18
19 namespace { 19 namespace {
20 20
21 CSSValue* styleValueToCSSValue(CSSPropertyID propertyID, const CSSStyleValue& st yleValue) 21 CSSValue* styleValueToCSSValue(CSSPropertyID propertyID, const CSSStyleValue& st yleValue)
22 { 22 {
23 if (!CSSOMTypes::propertyCanTake(propertyID, styleValue)) 23 if (!CSSOMTypes::propertyCanTake(propertyID, styleValue))
24 return nullptr; 24 return nullptr;
25 return styleValue.toCSSValueWithProperty(propertyID); 25 return styleValue.toCSSValueWithProperty(propertyID);
26 } 26 }
27 27
28 CSSValue* singleStyleValueAsCSSValue(CSSPropertyID propertyID, const CSSStyleVal ue& styleValue)
29 {
30 if (!CSSPropertyMetadata::propertySupportsMultiple(propertyID))
31 return styleValueToCSSValue(propertyID, styleValue);
32
33 CSSValue* cssValue = styleValueToCSSValue(propertyID, styleValue);
34 if (!cssValue)
35 return nullptr;
36
37 // TODO(meade): This won't always work. Figure out what kind of CSSValueList to create properly.
38 CSSValueList* valueList = CSSValueList::createSpaceSeparated();
39 valueList->append(*cssValue);
40 return valueList;
41 }
42
43 CSSValueList* asCSSValueList(CSSPropertyID propertyID, const CSSStyleValueVector & styleValueVector)
44 {
45 // TODO(meade): This won't always work. Figure out what kind of CSSValueList to create properly.
46 CSSValueList* valueList = CSSValueList::createSpaceSeparated();
47 for (const Member<CSSStyleValue> value : styleValueVector) {
48 CSSValue* cssValue = styleValueToCSSValue(propertyID, *value);
49 if (!cssValue) {
50 return nullptr;
51 }
52 valueList->append(*cssValue);
53 }
54 return valueList;
55 }
56
28 } // namespace 57 } // namespace
29 58
30 CSSStyleValueVector InlineStylePropertyMap::getAllInternal(CSSPropertyID propert yID) 59 CSSStyleValueVector InlineStylePropertyMap::getAllInternal(CSSPropertyID propert yID)
31 { 60 {
32 CSSValue* cssValue = m_ownerElement->ensureMutableInlineStyle().getPropertyC SSValue(propertyID); 61 CSSValue* cssValue = m_ownerElement->ensureMutableInlineStyle().getPropertyC SSValue(propertyID);
33 if (!cssValue) 62 if (!cssValue)
34 return CSSStyleValueVector(); 63 return CSSStyleValueVector();
35 64
36 return StyleValueFactory::cssValueToStyleValueVector(propertyID, *cssValue); 65 return StyleValueFactory::cssValueToStyleValueVector(propertyID, *cssValue);
37 } 66 }
(...skipping 13 matching lines...) Expand all
51 StylePropertySet& inlineStyleSet = m_ownerElement->ensureMutableInlineStyle( ); 80 StylePropertySet& inlineStyleSet = m_ownerElement->ensureMutableInlineStyle( );
52 for (unsigned i = 0; i < inlineStyleSet.propertyCount(); i++) { 81 for (unsigned i = 0; i < inlineStyleSet.propertyCount(); i++) {
53 CSSPropertyID propertyID = inlineStyleSet.propertyAt(i).id(); 82 CSSPropertyID propertyID = inlineStyleSet.propertyAt(i).id();
54 result.append(getPropertyNameString(propertyID)); 83 result.append(getPropertyNameString(propertyID));
55 } 84 }
56 return result; 85 return result;
57 } 86 }
58 87
59 void InlineStylePropertyMap::set(CSSPropertyID propertyID, CSSStyleValueOrCSSSty leValueSequenceOrString& item, ExceptionState& exceptionState) 88 void InlineStylePropertyMap::set(CSSPropertyID propertyID, CSSStyleValueOrCSSSty leValueSequenceOrString& item, ExceptionState& exceptionState)
60 { 89 {
90 CSSValue* cssValue = nullptr;
61 if (item.isCSSStyleValue()) { 91 if (item.isCSSStyleValue()) {
62 CSSValue* cssValue = styleValueToCSSValue(propertyID, *item.getAsCSSStyl eValue()); 92 cssValue = singleStyleValueAsCSSValue(propertyID, *item.getAsCSSStyleVal ue());
63 if (!cssValue) {
64 exceptionState.throwTypeError("Invalid type for property");
65 return;
66 }
67 m_ownerElement->setInlineStyleProperty(propertyID, cssValue);
68 } else if (item.isCSSStyleValueSequence()) { 93 } else if (item.isCSSStyleValueSequence()) {
69 if (!CSSPropertyMetadata::propertySupportsMultiple(propertyID)) { 94 if (!CSSPropertyMetadata::propertySupportsMultiple(propertyID)) {
70 exceptionState.throwTypeError("Property does not support multiple va lues"); 95 exceptionState.throwTypeError("Property does not support multiple va lues");
71 return; 96 return;
72 } 97 }
73 98 cssValue = asCSSValueList(propertyID, item.getAsCSSStyleValueSequence()) ;
74 // TODO(meade): This won't always work. Figure out what kind of CSSValue List to create properly.
75 CSSValueList* valueList = CSSValueList::createSpaceSeparated();
76 CSSStyleValueVector styleValueVector = item.getAsCSSStyleValueSequence() ;
77 for (const Member<CSSStyleValue> value : styleValueVector) {
78 CSSValue* cssValue = styleValueToCSSValue(propertyID, *value);
79 if (!cssValue) {
80 exceptionState.throwTypeError("Invalid type for property");
81 return;
82 }
83 valueList->append(*cssValue);
84 }
85
86 m_ownerElement->setInlineStyleProperty(propertyID, valueList);
87 } else { 99 } else {
88 // Parse it. 100 // Parse it.
89 DCHECK(item.isString()); 101 DCHECK(item.isString());
90 // TODO(meade): Implement this. 102 // TODO(meade): Implement this.
91 exceptionState.throwTypeError("Not implemented yet"); 103 exceptionState.throwTypeError("Not implemented yet");
104 return;
92 } 105 }
106 if (!cssValue) {
107 exceptionState.throwTypeError("Invalid type for property");
108 return;
109 }
110 m_ownerElement->setInlineStyleProperty(propertyID, cssValue);
93 } 111 }
94 112
95 void InlineStylePropertyMap::append(CSSPropertyID propertyID, CSSStyleValueOrCSS StyleValueSequenceOrString& item, ExceptionState& exceptionState) 113 void InlineStylePropertyMap::append(CSSPropertyID propertyID, CSSStyleValueOrCSS StyleValueSequenceOrString& item, ExceptionState& exceptionState)
96 { 114 {
97 if (!CSSPropertyMetadata::propertySupportsMultiple(propertyID)) { 115 if (!CSSPropertyMetadata::propertySupportsMultiple(propertyID)) {
98 exceptionState.throwTypeError("Property does not support multiple values "); 116 exceptionState.throwTypeError("Property does not support multiple values ");
99 return; 117 return;
100 } 118 }
101 119
102 const CSSValue* cssValue = m_ownerElement->ensureMutableInlineStyle().getPro pertyCSSValue(propertyID); 120 const CSSValue* cssValue = m_ownerElement->ensureMutableInlineStyle().getPro pertyCSSValue(propertyID);
103 CSSValueList* cssValueList = nullptr; 121 CSSValueList* cssValueList = nullptr;
104 if (cssValue->isValueList()) { 122 if (!cssValue) {
123 cssValueList = CSSValueList::createSpaceSeparated();
124 } else if (cssValue->isValueList()) {
105 cssValueList = toCSSValueList(cssValue)->copy(); 125 cssValueList = toCSSValueList(cssValue)->copy();
106 } else { 126 } else {
107 // TODO(meade): Figure out what the correct behaviour here is. 127 // TODO(meade): Figure out what the correct behaviour here is.
108 exceptionState.throwTypeError("Property is not already list valued"); 128 exceptionState.throwTypeError("Property is not already list valued");
109 return; 129 return;
110 } 130 }
111 131
112 if (item.isCSSStyleValue()) { 132 if (item.isCSSStyleValue()) {
113 CSSValue* cssValue = styleValueToCSSValue(propertyID, *item.getAsCSSStyl eValue()); 133 CSSValue* cssValue = styleValueToCSSValue(propertyID, *item.getAsCSSStyl eValue());
114 if (!cssValue) { 134 if (!cssValue) {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 value.setCSSStyleValue(styleValueVector[0]); 174 value.setCSSStyleValue(styleValueVector[0]);
155 else 175 else
156 value.setCSSStyleValueSequence(styleValueVector); 176 value.setCSSStyleValueSequence(styleValueVector);
157 result.append(std::make_pair(getPropertyNameString(propertyID), value)); 177 result.append(std::make_pair(getPropertyNameString(propertyID), value));
158 } 178 }
159 return result; 179 return result;
160 } 180 }
161 181
162 } // namespace blink 182 } // namespace blink
163 183
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/css/CSSProperties.in ('k') | third_party/WebKit/Source/core/css/cssom/StyleValueFactory.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698