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

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

Issue 1164573002: CSSValue Immediates: Change CSSValue to an object instead of a pointer (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase 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
« no previous file with comments | « Source/core/css/CSSValue.h ('k') | Source/core/css/CSSValueList.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright (C) 2011 Andreas Kling (kling@webkit.org)
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 *
25 */
26
27 #include "config.h"
28 #include "core/css/CSSValue.h"
29
30 #include "core/css/CSSBorderImageSliceValue.h"
31 #include "core/css/CSSCalculationValue.h"
32 #include "core/css/CSSCanvasValue.h"
33 #include "core/css/CSSContentDistributionValue.h"
34 #include "core/css/CSSCrossfadeValue.h"
35 #include "core/css/CSSCursorImageValue.h"
36 #include "core/css/CSSFontFaceSrcValue.h"
37 #include "core/css/CSSFontFeatureValue.h"
38 #include "core/css/CSSFunctionValue.h"
39 #include "core/css/CSSGradientValue.h"
40 #include "core/css/CSSGridLineNamesValue.h"
41 #include "core/css/CSSGridTemplateAreasValue.h"
42 #include "core/css/CSSImageSetValue.h"
43 #include "core/css/CSSImageValue.h"
44 #include "core/css/CSSInheritedValue.h"
45 #include "core/css/CSSInitialValue.h"
46 #include "core/css/CSSLineBoxContainValue.h"
47 #include "core/css/CSSPathValue.h"
48 #include "core/css/CSSPrimitiveValue.h"
49 #include "core/css/CSSReflectValue.h"
50 #include "core/css/CSSSVGDocumentValue.h"
51 #include "core/css/CSSShadowValue.h"
52 #include "core/css/CSSTimingFunctionValue.h"
53 #include "core/css/CSSUnicodeRangeValue.h"
54 #include "core/css/CSSUnsetValue.h"
55 #include "core/css/CSSValueList.h"
56
57 namespace blink {
58
59 struct SameSizeAsCSSValue : public RefCountedWillBeGarbageCollectedFinalized<Sam eSizeAsCSSValue>
60 {
61 uint32_t bitfields;
62 };
63
64 static_assert(sizeof(CSSValue) <= sizeof(SameSizeAsCSSValue), "CSSValue should s tay small");
65
66 bool CSSValue::isImplicitInitialValue() const
67 {
68 return m_classType == InitialClass && toCSSInitialValue(this)->isImplicit();
69 }
70
71 bool CSSValue::hasFailedOrCanceledSubresources() const
72 {
73 if (isValueList())
74 return toCSSValueList(this)->hasFailedOrCanceledSubresources();
75 if (classType() == FontFaceSrcClass)
76 return toCSSFontFaceSrcValue(this)->hasFailedOrCanceledSubresources();
77 if (classType() == ImageClass)
78 return toCSSImageValue(this)->hasFailedOrCanceledSubresources();
79 if (classType() == CrossfadeClass)
80 return toCSSCrossfadeValue(this)->hasFailedOrCanceledSubresources();
81 if (classType() == ImageSetClass)
82 return toCSSImageSetValue(this)->hasFailedOrCanceledSubresources();
83
84 return false;
85 }
86
87 template<class ChildClassType>
88 inline static bool compareCSSValues(const CSSValue& first, const CSSValue& secon d)
89 {
90 return static_cast<const ChildClassType&>(first).equals(static_cast<const Ch ildClassType&>(second));
91 }
92
93 bool CSSValue::equals(const CSSValue& other) const
94 {
95 if (m_classType == other.m_classType) {
96 switch (m_classType) {
97 case BorderImageSliceClass:
98 return compareCSSValues<CSSBorderImageSliceValue>(*this, other);
99 case CanvasClass:
100 return compareCSSValues<CSSCanvasValue>(*this, other);
101 case CursorImageClass:
102 return compareCSSValues<CSSCursorImageValue>(*this, other);
103 case FontFaceSrcClass:
104 return compareCSSValues<CSSFontFaceSrcValue>(*this, other);
105 case FontFeatureClass:
106 return compareCSSValues<CSSFontFeatureValue>(*this, other);
107 case FunctionClass:
108 return compareCSSValues<CSSFunctionValue>(*this, other);
109 case LinearGradientClass:
110 return compareCSSValues<CSSLinearGradientValue>(*this, other);
111 case RadialGradientClass:
112 return compareCSSValues<CSSRadialGradientValue>(*this, other);
113 case CrossfadeClass:
114 return compareCSSValues<CSSCrossfadeValue>(*this, other);
115 case ImageClass:
116 return compareCSSValues<CSSImageValue>(*this, other);
117 case InheritedClass:
118 return compareCSSValues<CSSInheritedValue>(*this, other);
119 case InitialClass:
120 return compareCSSValues<CSSInitialValue>(*this, other);
121 case UnsetClass:
122 return compareCSSValues<CSSUnsetValue>(*this, other);
123 case GridLineNamesClass:
124 return compareCSSValues<CSSGridLineNamesValue>(*this, other);
125 case GridTemplateAreasClass:
126 return compareCSSValues<CSSGridTemplateAreasValue>(*this, other);
127 case PathClass:
128 return compareCSSValues<CSSPathValue>(*this, other);
129 case PrimitiveClass:
130 return compareCSSValues<CSSPrimitiveValue>(*this, other);
131 case ReflectClass:
132 return compareCSSValues<CSSReflectValue>(*this, other);
133 case ShadowClass:
134 return compareCSSValues<CSSShadowValue>(*this, other);
135 case CubicBezierTimingFunctionClass:
136 return compareCSSValues<CSSCubicBezierTimingFunctionValue>(*this, ot her);
137 case StepsTimingFunctionClass:
138 return compareCSSValues<CSSStepsTimingFunctionValue>(*this, other);
139 case UnicodeRangeClass:
140 return compareCSSValues<CSSUnicodeRangeValue>(*this, other);
141 case ValueListClass:
142 return compareCSSValues<CSSValueList>(*this, other);
143 case LineBoxContainClass:
144 return compareCSSValues<CSSLineBoxContainValue>(*this, other);
145 case CalculationClass:
146 return compareCSSValues<CSSCalcValue>(*this, other);
147 case ImageSetClass:
148 return compareCSSValues<CSSImageSetValue>(*this, other);
149 case CSSSVGDocumentClass:
150 return compareCSSValues<CSSSVGDocumentValue>(*this, other);
151 case CSSContentDistributionClass:
152 return compareCSSValues<CSSContentDistributionValue>(*this, other);
153 default:
154 ASSERT_NOT_REACHED();
155 return false;
156 }
157 }
158 return false;
159 }
160
161 String CSSValue::cssText() const
162 {
163 switch (classType()) {
164 case BorderImageSliceClass:
165 return toCSSBorderImageSliceValue(this)->customCSSText();
166 case CanvasClass:
167 return toCSSCanvasValue(this)->customCSSText();
168 case CursorImageClass:
169 return toCSSCursorImageValue(this)->customCSSText();
170 case FontFaceSrcClass:
171 return toCSSFontFaceSrcValue(this)->customCSSText();
172 case FontFeatureClass:
173 return toCSSFontFeatureValue(this)->customCSSText();
174 case FunctionClass:
175 return toCSSFunctionValue(this)->customCSSText();
176 case LinearGradientClass:
177 return toCSSLinearGradientValue(this)->customCSSText();
178 case RadialGradientClass:
179 return toCSSRadialGradientValue(this)->customCSSText();
180 case CrossfadeClass:
181 return toCSSCrossfadeValue(this)->customCSSText();
182 case ImageClass:
183 return toCSSImageValue(this)->customCSSText();
184 case InheritedClass:
185 return toCSSInheritedValue(this)->customCSSText();
186 case UnsetClass:
187 return toCSSUnsetValue(this)->customCSSText();
188 case InitialClass:
189 return toCSSInitialValue(this)->customCSSText();
190 case GridLineNamesClass:
191 return toCSSGridLineNamesValue(this)->customCSSText();
192 case GridTemplateAreasClass:
193 return toCSSGridTemplateAreasValue(this)->customCSSText();
194 case PathClass:
195 return toCSSPathValue(this)->customCSSText();
196 case PrimitiveClass:
197 return toCSSPrimitiveValue(this)->customCSSText();
198 case ReflectClass:
199 return toCSSReflectValue(this)->customCSSText();
200 case ShadowClass:
201 return toCSSShadowValue(this)->customCSSText();
202 case CubicBezierTimingFunctionClass:
203 return toCSSCubicBezierTimingFunctionValue(this)->customCSSText();
204 case StepsTimingFunctionClass:
205 return toCSSStepsTimingFunctionValue(this)->customCSSText();
206 case UnicodeRangeClass:
207 return toCSSUnicodeRangeValue(this)->customCSSText();
208 case ValueListClass:
209 return toCSSValueList(this)->customCSSText();
210 case LineBoxContainClass:
211 return toCSSLineBoxContainValue(this)->customCSSText();
212 case CalculationClass:
213 return toCSSCalcValue(this)->customCSSText();
214 case ImageSetClass:
215 return toCSSImageSetValue(this)->customCSSText();
216 case CSSSVGDocumentClass:
217 return toCSSSVGDocumentValue(this)->customCSSText();
218 case CSSContentDistributionClass:
219 return toCSSContentDistributionValue(this)->customCSSText();
220 }
221 ASSERT_NOT_REACHED();
222 return String();
223 }
224
225 void CSSValue::destroy()
226 {
227 switch (classType()) {
228 case BorderImageSliceClass:
229 delete toCSSBorderImageSliceValue(this);
230 return;
231 case CanvasClass:
232 delete toCSSCanvasValue(this);
233 return;
234 case CursorImageClass:
235 delete toCSSCursorImageValue(this);
236 return;
237 case FontFaceSrcClass:
238 delete toCSSFontFaceSrcValue(this);
239 return;
240 case FontFeatureClass:
241 delete toCSSFontFeatureValue(this);
242 return;
243 case FunctionClass:
244 delete toCSSFunctionValue(this);
245 return;
246 case LinearGradientClass:
247 delete toCSSLinearGradientValue(this);
248 return;
249 case RadialGradientClass:
250 delete toCSSRadialGradientValue(this);
251 return;
252 case CrossfadeClass:
253 delete toCSSCrossfadeValue(this);
254 return;
255 case ImageClass:
256 delete toCSSImageValue(this);
257 return;
258 case InheritedClass:
259 delete toCSSInheritedValue(this);
260 return;
261 case InitialClass:
262 delete toCSSInitialValue(this);
263 return;
264 case UnsetClass:
265 delete toCSSUnsetValue(this);
266 return;
267 case GridLineNamesClass:
268 delete toCSSGridLineNamesValue(this);
269 return;
270 case GridTemplateAreasClass:
271 delete toCSSGridTemplateAreasValue(this);
272 return;
273 case PathClass:
274 delete toCSSPathValue(this);
275 return;
276 case PrimitiveClass:
277 delete toCSSPrimitiveValue(this);
278 return;
279 case ReflectClass:
280 delete toCSSReflectValue(this);
281 return;
282 case ShadowClass:
283 delete toCSSShadowValue(this);
284 return;
285 case CubicBezierTimingFunctionClass:
286 delete toCSSCubicBezierTimingFunctionValue(this);
287 return;
288 case StepsTimingFunctionClass:
289 delete toCSSStepsTimingFunctionValue(this);
290 return;
291 case UnicodeRangeClass:
292 delete toCSSUnicodeRangeValue(this);
293 return;
294 case ValueListClass:
295 delete toCSSValueList(this);
296 return;
297 case LineBoxContainClass:
298 delete toCSSLineBoxContainValue(this);
299 return;
300 case CalculationClass:
301 delete toCSSCalcValue(this);
302 return;
303 case ImageSetClass:
304 delete toCSSImageSetValue(this);
305 return;
306 case CSSSVGDocumentClass:
307 delete toCSSSVGDocumentValue(this);
308 return;
309 case CSSContentDistributionClass:
310 delete toCSSContentDistributionValue(this);
311 return;
312 }
313 ASSERT_NOT_REACHED();
314 }
315
316 void CSSValue::finalizeGarbageCollectedObject()
317 {
318 switch (classType()) {
319 case BorderImageSliceClass:
320 toCSSBorderImageSliceValue(this)->~CSSBorderImageSliceValue();
321 return;
322 case CanvasClass:
323 toCSSCanvasValue(this)->~CSSCanvasValue();
324 return;
325 case CursorImageClass:
326 toCSSCursorImageValue(this)->~CSSCursorImageValue();
327 return;
328 case FontFaceSrcClass:
329 toCSSFontFaceSrcValue(this)->~CSSFontFaceSrcValue();
330 return;
331 case FontFeatureClass:
332 toCSSFontFeatureValue(this)->~CSSFontFeatureValue();
333 return;
334 case FunctionClass:
335 toCSSFunctionValue(this)->~CSSFunctionValue();
336 return;
337 case LinearGradientClass:
338 toCSSLinearGradientValue(this)->~CSSLinearGradientValue();
339 return;
340 case RadialGradientClass:
341 toCSSRadialGradientValue(this)->~CSSRadialGradientValue();
342 return;
343 case CrossfadeClass:
344 toCSSCrossfadeValue(this)->~CSSCrossfadeValue();
345 return;
346 case ImageClass:
347 toCSSImageValue(this)->~CSSImageValue();
348 return;
349 case InheritedClass:
350 toCSSInheritedValue(this)->~CSSInheritedValue();
351 return;
352 case InitialClass:
353 toCSSInitialValue(this)->~CSSInitialValue();
354 return;
355 case UnsetClass:
356 toCSSUnsetValue(this)->~CSSUnsetValue();
357 return;
358 case GridLineNamesClass:
359 toCSSGridLineNamesValue(this)->~CSSGridLineNamesValue();
360 return;
361 case GridTemplateAreasClass:
362 toCSSGridTemplateAreasValue(this)->~CSSGridTemplateAreasValue();
363 return;
364 case PathClass:
365 toCSSPathValue(this)->~CSSPathValue();
366 return;
367 case PrimitiveClass:
368 toCSSPrimitiveValue(this)->~CSSPrimitiveValue();
369 return;
370 case ReflectClass:
371 toCSSReflectValue(this)->~CSSReflectValue();
372 return;
373 case ShadowClass:
374 toCSSShadowValue(this)->~CSSShadowValue();
375 return;
376 case CubicBezierTimingFunctionClass:
377 toCSSCubicBezierTimingFunctionValue(this)->~CSSCubicBezierTimingFunction Value();
378 return;
379 case StepsTimingFunctionClass:
380 toCSSStepsTimingFunctionValue(this)->~CSSStepsTimingFunctionValue();
381 return;
382 case UnicodeRangeClass:
383 toCSSUnicodeRangeValue(this)->~CSSUnicodeRangeValue();
384 return;
385 case ValueListClass:
386 toCSSValueList(this)->~CSSValueList();
387 return;
388 case LineBoxContainClass:
389 toCSSLineBoxContainValue(this)->~CSSLineBoxContainValue();
390 return;
391 case CalculationClass:
392 toCSSCalcValue(this)->~CSSCalcValue();
393 return;
394 case ImageSetClass:
395 toCSSImageSetValue(this)->~CSSImageSetValue();
396 return;
397 case CSSSVGDocumentClass:
398 toCSSSVGDocumentValue(this)->~CSSSVGDocumentValue();
399 return;
400 case CSSContentDistributionClass:
401 toCSSContentDistributionValue(this)->~CSSContentDistributionValue();
402 return;
403 }
404 ASSERT_NOT_REACHED();
405 }
406
407 DEFINE_TRACE(CSSValue)
408 {
409 switch (classType()) {
410 case BorderImageSliceClass:
411 toCSSBorderImageSliceValue(this)->traceAfterDispatch(visitor);
412 return;
413 case CanvasClass:
414 toCSSCanvasValue(this)->traceAfterDispatch(visitor);
415 return;
416 case CursorImageClass:
417 toCSSCursorImageValue(this)->traceAfterDispatch(visitor);
418 return;
419 case FontFaceSrcClass:
420 toCSSFontFaceSrcValue(this)->traceAfterDispatch(visitor);
421 return;
422 case FontFeatureClass:
423 toCSSFontFeatureValue(this)->traceAfterDispatch(visitor);
424 return;
425 case FunctionClass:
426 toCSSFunctionValue(this)->traceAfterDispatch(visitor);
427 return;
428 case LinearGradientClass:
429 toCSSLinearGradientValue(this)->traceAfterDispatch(visitor);
430 return;
431 case RadialGradientClass:
432 toCSSRadialGradientValue(this)->traceAfterDispatch(visitor);
433 return;
434 case CrossfadeClass:
435 toCSSCrossfadeValue(this)->traceAfterDispatch(visitor);
436 return;
437 case ImageClass:
438 toCSSImageValue(this)->traceAfterDispatch(visitor);
439 return;
440 case InheritedClass:
441 toCSSInheritedValue(this)->traceAfterDispatch(visitor);
442 return;
443 case InitialClass:
444 toCSSInitialValue(this)->traceAfterDispatch(visitor);
445 return;
446 case UnsetClass:
447 toCSSUnsetValue(this)->traceAfterDispatch(visitor);
448 return;
449 case GridLineNamesClass:
450 toCSSGridLineNamesValue(this)->traceAfterDispatch(visitor);
451 return;
452 case GridTemplateAreasClass:
453 toCSSGridTemplateAreasValue(this)->traceAfterDispatch(visitor);
454 return;
455 case PathClass:
456 toCSSPathValue(this)->traceAfterDispatch(visitor);
457 return;
458 case PrimitiveClass:
459 toCSSPrimitiveValue(this)->traceAfterDispatch(visitor);
460 return;
461 case ReflectClass:
462 toCSSReflectValue(this)->traceAfterDispatch(visitor);
463 return;
464 case ShadowClass:
465 toCSSShadowValue(this)->traceAfterDispatch(visitor);
466 return;
467 case CubicBezierTimingFunctionClass:
468 toCSSCubicBezierTimingFunctionValue(this)->traceAfterDispatch(visitor);
469 return;
470 case StepsTimingFunctionClass:
471 toCSSStepsTimingFunctionValue(this)->traceAfterDispatch(visitor);
472 return;
473 case UnicodeRangeClass:
474 toCSSUnicodeRangeValue(this)->traceAfterDispatch(visitor);
475 return;
476 case ValueListClass:
477 toCSSValueList(this)->traceAfterDispatch(visitor);
478 return;
479 case LineBoxContainClass:
480 toCSSLineBoxContainValue(this)->traceAfterDispatch(visitor);
481 return;
482 case CalculationClass:
483 toCSSCalcValue(this)->traceAfterDispatch(visitor);
484 return;
485 case ImageSetClass:
486 toCSSImageSetValue(this)->traceAfterDispatch(visitor);
487 return;
488 case CSSSVGDocumentClass:
489 toCSSSVGDocumentValue(this)->traceAfterDispatch(visitor);
490 return;
491 case CSSContentDistributionClass:
492 toCSSContentDistributionValue(this)->traceAfterDispatch(visitor);
493 return;
494 }
495 ASSERT_NOT_REACHED();
496 }
497
498 }
OLDNEW
« no previous file with comments | « Source/core/css/CSSValue.h ('k') | Source/core/css/CSSValueList.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698