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

Side by Side Diff: Source/core/css/CSSPrimitiveValue.h

Issue 209353004: Remove mutation foot-gun from CSSPrimitiveValue (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: removed Created 6 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/css/CSSParserValues.cpp ('k') | Source/core/css/CSSPrimitiveValue.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * (C) 1999-2003 Lars Knoll (knoll@kde.org) 2 * (C) 1999-2003 Lars Knoll (knoll@kde.org)
3 * Copyright (C) 2004, 2005, 2006, 2008 Apple Inc. All rights reserved. 3 * Copyright (C) 2004, 2005, 2006, 2008 Apple Inc. All rights reserved.
4 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> 4 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org>
5 * 5 *
6 * This library is free software; you can redistribute it and/or 6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public 7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either 8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version. 9 * version 2 of the License, or (at your option) any later version.
10 * 10 *
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 { 58 {
59 double ceiledValue = ceil(value); 59 double ceiledValue = ceil(value);
60 double proximityToNextInt = ceiledValue - value; 60 double proximityToNextInt = ceiledValue - value;
61 if (proximityToNextInt <= 0.01 && value > 0) 61 if (proximityToNextInt <= 0.01 && value > 0)
62 return static_cast<float>(ceiledValue); 62 return static_cast<float>(ceiledValue);
63 if (proximityToNextInt >= 0.99 && value < 0) 63 if (proximityToNextInt >= 0.99 && value < 0)
64 return static_cast<float>(floor(value)); 64 return static_cast<float>(floor(value));
65 return static_cast<float>(value); 65 return static_cast<float>(value);
66 } 66 }
67 67
68 // CSSPrimitiveValues are immutable. This class has manual ref-counting
69 // of unioned types and does not have the code necessary
70 // to handle any kind of mutations. All DOM-exposed "setters" just throw
71 // exceptions.
68 class CSSPrimitiveValue : public CSSValue { 72 class CSSPrimitiveValue : public CSSValue {
69 public: 73 public:
70 enum UnitTypes { 74 enum UnitTypes {
71 CSS_UNKNOWN = 0, 75 CSS_UNKNOWN = 0,
72 CSS_NUMBER = 1, 76 CSS_NUMBER = 1,
73 CSS_PERCENTAGE = 2, 77 CSS_PERCENTAGE = 2,
74 CSS_EMS = 3, 78 CSS_EMS = 3,
75 CSS_EXS = 4, 79 CSS_EXS = 4,
76 CSS_PX = 5, 80 CSS_PX = 5,
77 CSS_CM = 6, 81 CSS_CM = 6,
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> createIdentifier(CSSValueID valueID) 206 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> createIdentifier(CSSValueID valueID)
203 { 207 {
204 return adoptRefWillBeRefCountedGarbageCollected(new CSSPrimitiveValue(va lueID)); 208 return adoptRefWillBeRefCountedGarbageCollected(new CSSPrimitiveValue(va lueID));
205 } 209 }
206 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> createIdentifier(CSSPropert yID propertyID) 210 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> createIdentifier(CSSPropert yID propertyID)
207 { 211 {
208 return adoptRefWillBeRefCountedGarbageCollected(new CSSPrimitiveValue(pr opertyID)); 212 return adoptRefWillBeRefCountedGarbageCollected(new CSSPrimitiveValue(pr opertyID));
209 } 213 }
210 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> createParserOperator(int pa rserOperator) 214 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> createParserOperator(int pa rserOperator)
211 { 215 {
212 return adoptRefWillBeRefCountedGarbageCollected(new CSSPrimitiveValue(pa rserOperator)); 216 return adoptRefWillBeRefCountedGarbageCollected(new CSSPrimitiveValue(pa rserOperator, CSS_PARSER_OPERATOR));
213 } 217 }
214 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> createColor(unsigned rgbVal ue) 218 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> createColor(unsigned rgbVal ue)
215 { 219 {
216 return adoptRefWillBeRefCountedGarbageCollected(new CSSPrimitiveValue(rg bValue)); 220 return adoptRefWillBeRefCountedGarbageCollected(new CSSPrimitiveValue(rg bValue, CSS_RGBCOLOR));
217 } 221 }
218 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> create(double value, UnitTy pes type) 222 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> create(double value, UnitTy pes type)
219 { 223 {
220 return adoptRefWillBeRefCountedGarbageCollected(new CSSPrimitiveValue(va lue, type)); 224 return adoptRefWillBeRefCountedGarbageCollected(new CSSPrimitiveValue(va lue, type));
221 } 225 }
222 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> create(const String& value, UnitTypes type) 226 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> create(const String& value, UnitTypes type)
223 { 227 {
224 return adoptRefWillBeRefCountedGarbageCollected(new CSSPrimitiveValue(va lue, type)); 228 return adoptRefWillBeRefCountedGarbageCollected(new CSSPrimitiveValue(va lue, type));
225 } 229 }
226 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> create(const Length& value, float zoom) 230 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> create(const Length& value, float zoom)
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 * For screen output we assume 1 inch == 72 px, for printer we assume 300 dp i 281 * For screen output we assume 1 inch == 72 px, for printer we assume 300 dp i
278 * 282 *
279 * this is screen/printer dependent, so we probably need a config option for this, 283 * this is screen/printer dependent, so we probably need a config option for this,
280 * and some tool to calibrate. 284 * and some tool to calibrate.
281 */ 285 */
282 template<typename T> T computeLength(const CSSToLengthConversionData&); 286 template<typename T> T computeLength(const CSSToLengthConversionData&);
283 287
284 // Converts to a Length, mapping various unit types appropriately. 288 // Converts to a Length, mapping various unit types appropriately.
285 template<int> Length convertToLength(const CSSToLengthConversionData&); 289 template<int> Length convertToLength(const CSSToLengthConversionData&);
286 290
287 // use with care!!!
288 void setPrimitiveType(unsigned short type) { m_primitiveUnitType = type; }
289
290 double getDoubleValue(unsigned short unitType, ExceptionState&) const; 291 double getDoubleValue(unsigned short unitType, ExceptionState&) const;
291 double getDoubleValue(unsigned short unitType) const; 292 double getDoubleValue(unsigned short unitType) const;
292 double getDoubleValue() const; 293 double getDoubleValue() const;
293 294
294 void setFloatValue(unsigned short unitType, double floatValue, ExceptionStat e&); 295 void setFloatValue(unsigned short unitType, double floatValue, ExceptionStat e&);
295 float getFloatValue(unsigned short unitType, ExceptionState& exceptionState) const { return getValue<float>(unitType, exceptionState); } 296 float getFloatValue(unsigned short unitType, ExceptionState& exceptionState) const { return getValue<float>(unitType, exceptionState); }
296 float getFloatValue(unsigned short unitType) const { return getValue<float>( unitType); } 297 float getFloatValue(unsigned short unitType) const { return getValue<float>( unitType); }
297 float getFloatValue() const { return getValue<float>(); } 298 float getFloatValue() const { return getValue<float>(); }
298 299
299 int getIntValue(unsigned short unitType, ExceptionState& exceptionState) con st { return getValue<int>(unitType, exceptionState); } 300 int getIntValue(unsigned short unitType, ExceptionState& exceptionState) con st { return getValue<int>(unitType, exceptionState); }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 bool equals(const CSSPrimitiveValue&) const; 343 bool equals(const CSSPrimitiveValue&) const;
343 344
344 void traceAfterDispatch(Visitor*); 345 void traceAfterDispatch(Visitor*);
345 346
346 static UnitTypes canonicalUnitTypeForCategory(UnitCategory); 347 static UnitTypes canonicalUnitTypeForCategory(UnitCategory);
347 static double conversionToCanonicalUnitsScaleFactor(unsigned short unitType) ; 348 static double conversionToCanonicalUnitsScaleFactor(unsigned short unitType) ;
348 349
349 private: 350 private:
350 CSSPrimitiveValue(CSSValueID); 351 CSSPrimitiveValue(CSSValueID);
351 CSSPrimitiveValue(CSSPropertyID); 352 CSSPrimitiveValue(CSSPropertyID);
352 // FIXME: int vs. unsigned overloading is too subtle to distinguish the colo r and operator cases. 353 // int vs. unsigned is too subtle to distinguish types, so require a UnitTyp e.
353 CSSPrimitiveValue(int parserOperator); 354 CSSPrimitiveValue(int parserOperator, UnitTypes);
354 CSSPrimitiveValue(unsigned color); // RGB value 355 CSSPrimitiveValue(unsigned color, UnitTypes); // RGB value
355 CSSPrimitiveValue(const Length& length) 356 CSSPrimitiveValue(const Length& length)
356 : CSSValue(PrimitiveClass) 357 : CSSValue(PrimitiveClass)
357 { 358 {
358 init(length); 359 init(length);
359 } 360 }
360 CSSPrimitiveValue(const Length&, float zoom); 361 CSSPrimitiveValue(const Length&, float zoom);
361 CSSPrimitiveValue(const LengthSize&); 362 CSSPrimitiveValue(const LengthSize&);
362 CSSPrimitiveValue(const String&, UnitTypes); 363 CSSPrimitiveValue(const String&, UnitTypes);
363 CSSPrimitiveValue(double, UnitTypes); 364 CSSPrimitiveValue(double, UnitTypes);
364 365
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 Rect* rect; 407 Rect* rect;
407 Quad* quad; 408 Quad* quad;
408 } m_value; 409 } m_value;
409 }; 410 };
410 411
411 DEFINE_CSS_VALUE_TYPE_CASTS(CSSPrimitiveValue, isPrimitiveValue()); 412 DEFINE_CSS_VALUE_TYPE_CASTS(CSSPrimitiveValue, isPrimitiveValue());
412 413
413 } // namespace WebCore 414 } // namespace WebCore
414 415
415 #endif // CSSPrimitiveValue_h 416 #endif // CSSPrimitiveValue_h
OLDNEW
« no previous file with comments | « Source/core/css/CSSParserValues.cpp ('k') | Source/core/css/CSSPrimitiveValue.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698