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

Side by Side Diff: Source/core/css/CSSValue.cpp

Issue 1303153003: Change Counter to be a CSSValue (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Oilpan fix Created 5 years, 4 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 /* 1 /*
2 * Copyright (C) 2011 Andreas Kling (kling@webkit.org) 2 * Copyright (C) 2011 Andreas Kling (kling@webkit.org)
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 12 matching lines...) Expand all
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 * 24 *
25 */ 25 */
26 26
27 #include "config.h" 27 #include "config.h"
28 #include "core/css/CSSValue.h" 28 #include "core/css/CSSValue.h"
29 29
30 #include "core/css/CSSBorderImageSliceValue.h" 30 #include "core/css/CSSBorderImageSliceValue.h"
31 #include "core/css/CSSCanvasValue.h" 31 #include "core/css/CSSCanvasValue.h"
32 #include "core/css/CSSContentDistributionValue.h" 32 #include "core/css/CSSContentDistributionValue.h"
33 #include "core/css/CSSCounterValue.h"
33 #include "core/css/CSSCrossfadeValue.h" 34 #include "core/css/CSSCrossfadeValue.h"
34 #include "core/css/CSSCursorImageValue.h" 35 #include "core/css/CSSCursorImageValue.h"
35 #include "core/css/CSSFontFaceSrcValue.h" 36 #include "core/css/CSSFontFaceSrcValue.h"
36 #include "core/css/CSSFontFeatureValue.h" 37 #include "core/css/CSSFontFeatureValue.h"
37 #include "core/css/CSSFunctionValue.h" 38 #include "core/css/CSSFunctionValue.h"
38 #include "core/css/CSSGradientValue.h" 39 #include "core/css/CSSGradientValue.h"
39 #include "core/css/CSSGridLineNamesValue.h" 40 #include "core/css/CSSGridLineNamesValue.h"
40 #include "core/css/CSSGridTemplateAreasValue.h" 41 #include "core/css/CSSGridTemplateAreasValue.h"
41 #include "core/css/CSSImageSetValue.h" 42 #include "core/css/CSSImageSetValue.h"
42 #include "core/css/CSSImageValue.h" 43 #include "core/css/CSSImageValue.h"
(...skipping 11 matching lines...) Expand all
54 #include "core/css/CSSValueList.h" 55 #include "core/css/CSSValueList.h"
55 56
56 namespace blink { 57 namespace blink {
57 58
58 struct SameSizeAsCSSValue : public RefCountedWillBeGarbageCollectedFinalized<Sam eSizeAsCSSValue> { 59 struct SameSizeAsCSSValue : public RefCountedWillBeGarbageCollectedFinalized<Sam eSizeAsCSSValue> {
59 uint32_t bitfields; 60 uint32_t bitfields;
60 }; 61 };
61 62
62 static_assert(sizeof(CSSValue) <= sizeof(SameSizeAsCSSValue), "CSSValue should s tay small"); 63 static_assert(sizeof(CSSValue) <= sizeof(SameSizeAsCSSValue), "CSSValue should s tay small");
63 64
65 typedef HashMap<const CSSValue*, String> CSSTextCache;
66 static CSSTextCache& cssTextCache()
67 {
68 AtomicallyInitializedStaticReference(ThreadSpecific<CSSTextCache>, cache, ne w ThreadSpecific<CSSTextCache>());
69 return *cache;
70 }
71
64 bool CSSValue::isImplicitInitialValue() const 72 bool CSSValue::isImplicitInitialValue() const
65 { 73 {
66 return m_classType == InitialClass && toCSSInitialValue(this)->isImplicit(); 74 return m_classType == InitialClass && toCSSInitialValue(this)->isImplicit();
67 } 75 }
68 76
69 bool CSSValue::hasFailedOrCanceledSubresources() const 77 bool CSSValue::hasFailedOrCanceledSubresources() const
70 { 78 {
71 if (isValueList()) 79 if (isValueList())
72 return toCSSValueList(this)->hasFailedOrCanceledSubresources(); 80 return toCSSValueList(this)->hasFailedOrCanceledSubresources();
73 if (classType() == FontFaceSrcClass) 81 if (classType() == FontFaceSrcClass)
(...skipping 15 matching lines...) Expand all
89 } 97 }
90 98
91 bool CSSValue::equals(const CSSValue& other) const 99 bool CSSValue::equals(const CSSValue& other) const
92 { 100 {
93 if (m_classType == other.m_classType) { 101 if (m_classType == other.m_classType) {
94 switch (m_classType) { 102 switch (m_classType) {
95 case BorderImageSliceClass: 103 case BorderImageSliceClass:
96 return compareCSSValues<CSSBorderImageSliceValue>(*this, other); 104 return compareCSSValues<CSSBorderImageSliceValue>(*this, other);
97 case CanvasClass: 105 case CanvasClass:
98 return compareCSSValues<CSSCanvasValue>(*this, other); 106 return compareCSSValues<CSSCanvasValue>(*this, other);
107 case CounterClass:
108 return compareCSSValues<CSSCounterValue>(*this, other);
99 case CursorImageClass: 109 case CursorImageClass:
100 return compareCSSValues<CSSCursorImageValue>(*this, other); 110 return compareCSSValues<CSSCursorImageValue>(*this, other);
101 case FontFaceSrcClass: 111 case FontFaceSrcClass:
102 return compareCSSValues<CSSFontFaceSrcValue>(*this, other); 112 return compareCSSValues<CSSFontFaceSrcValue>(*this, other);
103 case FontFeatureClass: 113 case FontFeatureClass:
104 return compareCSSValues<CSSFontFeatureValue>(*this, other); 114 return compareCSSValues<CSSFontFeatureValue>(*this, other);
105 case FunctionClass: 115 case FunctionClass:
106 return compareCSSValues<CSSFunctionValue>(*this, other); 116 return compareCSSValues<CSSFunctionValue>(*this, other);
107 case LinearGradientClass: 117 case LinearGradientClass:
108 return compareCSSValues<CSSLinearGradientValue>(*this, other); 118 return compareCSSValues<CSSLinearGradientValue>(*this, other);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 default: 159 default:
150 ASSERT_NOT_REACHED(); 160 ASSERT_NOT_REACHED();
151 return false; 161 return false;
152 } 162 }
153 } 163 }
154 return false; 164 return false;
155 } 165 }
156 166
157 String CSSValue::cssText() const 167 String CSSValue::cssText() const
158 { 168 {
169 if (m_hasCachedCSSText) {
170 ASSERT(cssTextCache().contains(this));
171 return cssTextCache().get(this);
172 }
173
174 String text;
Timothy Loh 2015/08/21 07:33:12 String CSSValue::uncachedCSSText() const { .. }?
sashab 2015/08/24 01:36:11 Should I do this in CSSPrimitiveValue? Not sure ho
159 switch (classType()) { 175 switch (classType()) {
160 case BorderImageSliceClass: 176 case BorderImageSliceClass:
161 return toCSSBorderImageSliceValue(this)->customCSSText(); 177 text = toCSSBorderImageSliceValue(this)->customCSSText();
178 break;
162 case CanvasClass: 179 case CanvasClass:
163 return toCSSCanvasValue(this)->customCSSText(); 180 text = toCSSCanvasValue(this)->customCSSText();
181 break;
182 case CounterClass:
183 text = toCSSCounterValue(this)->customCSSText();
184 break;
164 case CursorImageClass: 185 case CursorImageClass:
165 return toCSSCursorImageValue(this)->customCSSText(); 186 text = toCSSCursorImageValue(this)->customCSSText();
187 break;
166 case FontFaceSrcClass: 188 case FontFaceSrcClass:
167 return toCSSFontFaceSrcValue(this)->customCSSText(); 189 text = toCSSFontFaceSrcValue(this)->customCSSText();
190 break;
168 case FontFeatureClass: 191 case FontFeatureClass:
169 return toCSSFontFeatureValue(this)->customCSSText(); 192 text = toCSSFontFeatureValue(this)->customCSSText();
193 break;
170 case FunctionClass: 194 case FunctionClass:
171 return toCSSFunctionValue(this)->customCSSText(); 195 text = toCSSFunctionValue(this)->customCSSText();
196 break;
172 case LinearGradientClass: 197 case LinearGradientClass:
173 return toCSSLinearGradientValue(this)->customCSSText(); 198 text = toCSSLinearGradientValue(this)->customCSSText();
199 break;
174 case RadialGradientClass: 200 case RadialGradientClass:
175 return toCSSRadialGradientValue(this)->customCSSText(); 201 text = toCSSRadialGradientValue(this)->customCSSText();
202 break;
176 case CrossfadeClass: 203 case CrossfadeClass:
177 return toCSSCrossfadeValue(this)->customCSSText(); 204 text = toCSSCrossfadeValue(this)->customCSSText();
205 break;
178 case ImageClass: 206 case ImageClass:
179 return toCSSImageValue(this)->customCSSText(); 207 text = toCSSImageValue(this)->customCSSText();
208 break;
180 case InheritedClass: 209 case InheritedClass:
181 return toCSSInheritedValue(this)->customCSSText(); 210 text = toCSSInheritedValue(this)->customCSSText();
211 break;
182 case UnsetClass: 212 case UnsetClass:
183 return toCSSUnsetValue(this)->customCSSText(); 213 text = toCSSUnsetValue(this)->customCSSText();
214 break;
184 case InitialClass: 215 case InitialClass:
185 return toCSSInitialValue(this)->customCSSText(); 216 text = toCSSInitialValue(this)->customCSSText();
217 break;
186 case GridLineNamesClass: 218 case GridLineNamesClass:
187 return toCSSGridLineNamesValue(this)->customCSSText(); 219 text = toCSSGridLineNamesValue(this)->customCSSText();
220 break;
188 case GridTemplateAreasClass: 221 case GridTemplateAreasClass:
189 return toCSSGridTemplateAreasValue(this)->customCSSText(); 222 text = toCSSGridTemplateAreasValue(this)->customCSSText();
223 break;
190 case PathClass: 224 case PathClass:
191 return toCSSPathValue(this)->customCSSText(); 225 text = toCSSPathValue(this)->customCSSText();
226 break;
192 case PrimitiveClass: 227 case PrimitiveClass:
193 return toCSSPrimitiveValue(this)->customCSSText(); 228 text = toCSSPrimitiveValue(this)->customCSSText();
229 break;
194 case ReflectClass: 230 case ReflectClass:
195 return toCSSReflectValue(this)->customCSSText(); 231 text = toCSSReflectValue(this)->customCSSText();
232 break;
196 case ShadowClass: 233 case ShadowClass:
197 return toCSSShadowValue(this)->customCSSText(); 234 text = toCSSShadowValue(this)->customCSSText();
235 break;
198 case CubicBezierTimingFunctionClass: 236 case CubicBezierTimingFunctionClass:
199 return toCSSCubicBezierTimingFunctionValue(this)->customCSSText(); 237 text = toCSSCubicBezierTimingFunctionValue(this)->customCSSText();
238 break;
200 case StepsTimingFunctionClass: 239 case StepsTimingFunctionClass:
201 return toCSSStepsTimingFunctionValue(this)->customCSSText(); 240 text = toCSSStepsTimingFunctionValue(this)->customCSSText();
241 break;
202 case UnicodeRangeClass: 242 case UnicodeRangeClass:
203 return toCSSUnicodeRangeValue(this)->customCSSText(); 243 text = toCSSUnicodeRangeValue(this)->customCSSText();
244 break;
204 case ValueListClass: 245 case ValueListClass:
205 return toCSSValueList(this)->customCSSText(); 246 text = toCSSValueList(this)->customCSSText();
247 break;
206 case LineBoxContainClass: 248 case LineBoxContainClass:
207 return toCSSLineBoxContainValue(this)->customCSSText(); 249 text = toCSSLineBoxContainValue(this)->customCSSText();
250 break;
208 case ImageSetClass: 251 case ImageSetClass:
209 return toCSSImageSetValue(this)->customCSSText(); 252 text = toCSSImageSetValue(this)->customCSSText();
253 break;
210 case CSSSVGDocumentClass: 254 case CSSSVGDocumentClass:
211 return toCSSSVGDocumentValue(this)->customCSSText(); 255 text = toCSSSVGDocumentValue(this)->customCSSText();
256 break;
212 case CSSContentDistributionClass: 257 case CSSContentDistributionClass:
213 return toCSSContentDistributionValue(this)->customCSSText(); 258 text = toCSSContentDistributionValue(this)->customCSSText();
259 break;
214 } 260 }
215 ASSERT_NOT_REACHED(); 261
216 return String(); 262 ASSERT(!cssTextCache().contains(this));
263 cssTextCache().set(this, text);
264 m_hasCachedCSSText = true;
265 return text;
217 } 266 }
218 267
219 void CSSValue::destroy() 268 void CSSValue::destroy()
220 { 269 {
270 if (m_hasCachedCSSText) {
271 cssTextCache().remove(this);
272 m_hasCachedCSSText = false;
273 }
274
221 switch (classType()) { 275 switch (classType()) {
222 case BorderImageSliceClass: 276 case BorderImageSliceClass:
223 delete toCSSBorderImageSliceValue(this); 277 delete toCSSBorderImageSliceValue(this);
224 return; 278 return;
225 case CanvasClass: 279 case CanvasClass:
226 delete toCSSCanvasValue(this); 280 delete toCSSCanvasValue(this);
227 return; 281 return;
282 case CounterClass:
283 delete toCSSCounterValue(this);
284 return;
228 case CursorImageClass: 285 case CursorImageClass:
229 delete toCSSCursorImageValue(this); 286 delete toCSSCursorImageValue(this);
230 return; 287 return;
231 case FontFaceSrcClass: 288 case FontFaceSrcClass:
232 delete toCSSFontFaceSrcValue(this); 289 delete toCSSFontFaceSrcValue(this);
233 return; 290 return;
234 case FontFeatureClass: 291 case FontFeatureClass:
235 delete toCSSFontFeatureValue(this); 292 delete toCSSFontFeatureValue(this);
236 return; 293 return;
237 case FunctionClass: 294 case FunctionClass:
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 363
307 void CSSValue::finalizeGarbageCollectedObject() 364 void CSSValue::finalizeGarbageCollectedObject()
308 { 365 {
309 switch (classType()) { 366 switch (classType()) {
310 case BorderImageSliceClass: 367 case BorderImageSliceClass:
311 toCSSBorderImageSliceValue(this)->~CSSBorderImageSliceValue(); 368 toCSSBorderImageSliceValue(this)->~CSSBorderImageSliceValue();
312 return; 369 return;
313 case CanvasClass: 370 case CanvasClass:
314 toCSSCanvasValue(this)->~CSSCanvasValue(); 371 toCSSCanvasValue(this)->~CSSCanvasValue();
315 return; 372 return;
373 case CounterClass:
374 toCSSCounterValue(this)->~CSSCounterValue();
375 return;
316 case CursorImageClass: 376 case CursorImageClass:
317 toCSSCursorImageValue(this)->~CSSCursorImageValue(); 377 toCSSCursorImageValue(this)->~CSSCursorImageValue();
318 return; 378 return;
319 case FontFaceSrcClass: 379 case FontFaceSrcClass:
320 toCSSFontFaceSrcValue(this)->~CSSFontFaceSrcValue(); 380 toCSSFontFaceSrcValue(this)->~CSSFontFaceSrcValue();
321 return; 381 return;
322 case FontFeatureClass: 382 case FontFeatureClass:
323 toCSSFontFeatureValue(this)->~CSSFontFeatureValue(); 383 toCSSFontFeatureValue(this)->~CSSFontFeatureValue();
324 return; 384 return;
325 case FunctionClass: 385 case FunctionClass:
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 454
395 DEFINE_TRACE(CSSValue) 455 DEFINE_TRACE(CSSValue)
396 { 456 {
397 switch (classType()) { 457 switch (classType()) {
398 case BorderImageSliceClass: 458 case BorderImageSliceClass:
399 toCSSBorderImageSliceValue(this)->traceAfterDispatch(visitor); 459 toCSSBorderImageSliceValue(this)->traceAfterDispatch(visitor);
400 return; 460 return;
401 case CanvasClass: 461 case CanvasClass:
402 toCSSCanvasValue(this)->traceAfterDispatch(visitor); 462 toCSSCanvasValue(this)->traceAfterDispatch(visitor);
403 return; 463 return;
464 case CounterClass:
465 toCSSCounterValue(this)->traceAfterDispatch(visitor);
466 return;
404 case CursorImageClass: 467 case CursorImageClass:
405 toCSSCursorImageValue(this)->traceAfterDispatch(visitor); 468 toCSSCursorImageValue(this)->traceAfterDispatch(visitor);
406 return; 469 return;
407 case FontFaceSrcClass: 470 case FontFaceSrcClass:
408 toCSSFontFaceSrcValue(this)->traceAfterDispatch(visitor); 471 toCSSFontFaceSrcValue(this)->traceAfterDispatch(visitor);
409 return; 472 return;
410 case FontFeatureClass: 473 case FontFeatureClass:
411 toCSSFontFeatureValue(this)->traceAfterDispatch(visitor); 474 toCSSFontFeatureValue(this)->traceAfterDispatch(visitor);
412 return; 475 return;
413 case FunctionClass: 476 case FunctionClass:
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 toCSSSVGDocumentValue(this)->traceAfterDispatch(visitor); 537 toCSSSVGDocumentValue(this)->traceAfterDispatch(visitor);
475 return; 538 return;
476 case CSSContentDistributionClass: 539 case CSSContentDistributionClass:
477 toCSSContentDistributionValue(this)->traceAfterDispatch(visitor); 540 toCSSContentDistributionValue(this)->traceAfterDispatch(visitor);
478 return; 541 return;
479 } 542 }
480 ASSERT_NOT_REACHED(); 543 ASSERT_NOT_REACHED();
481 } 544 }
482 545
483 } 546 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698