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

Side by Side Diff: Source/core/css/CSSPrimitiveValue.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 * (C) 1999-2003 Lars Knoll (knoll@kde.org) 2 * (C) 1999-2003 Lars Knoll (knoll@kde.org)
3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2012 Apple Inc. All rights reserv ed. 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2012 Apple Inc. All rights reserv ed.
4 * 4 *
5 * This library is free software; you can redistribute it and/or 5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public 6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either 7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version. 8 * version 2 of the License, or (at your option) any later version.
9 * 9 *
10 * This library is distributed in the hope that it will be useful, 10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details. 13 * Library General Public License for more details.
14 * 14 *
15 * You should have received a copy of the GNU Library General Public License 15 * You should have received a copy of the GNU Library General Public License
16 * along with this library; see the file COPYING.LIB. If not, write to 16 * along with this library; see the file COPYING.LIB. If not, write to
17 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 17 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 * Boston, MA 02110-1301, USA. 18 * Boston, MA 02110-1301, USA.
19 */ 19 */
20 20
21 #include "config.h" 21 #include "config.h"
22 #include "core/css/CSSPrimitiveValue.h" 22 #include "core/css/CSSPrimitiveValue.h"
23 23
24 #include "core/css/CSSBasicShapes.h" 24 #include "core/css/CSSBasicShapes.h"
25 #include "core/css/CSSCalculationValue.h" 25 #include "core/css/CSSCalculationValue.h"
26 #include "core/css/CSSHelper.h" 26 #include "core/css/CSSHelper.h"
27 #include "core/css/CSSMarkup.h" 27 #include "core/css/CSSMarkup.h"
28 #include "core/css/CSSToLengthConversionData.h" 28 #include "core/css/CSSToLengthConversionData.h"
29 #include "core/css/Counter.h"
30 #include "core/css/Pair.h" 29 #include "core/css/Pair.h"
31 #include "core/css/Rect.h" 30 #include "core/css/Rect.h"
32 #include "core/css/StyleSheetContents.h" 31 #include "core/css/StyleSheetContents.h"
33 #include "core/dom/Node.h" 32 #include "core/dom/Node.h"
34 #include "core/style/ComputedStyle.h" 33 #include "core/style/ComputedStyle.h"
35 #include "platform/LayoutUnit.h" 34 #include "platform/LayoutUnit.h"
36 #include "platform/fonts/FontMetrics.h" 35 #include "platform/fonts/FontMetrics.h"
37 #include "wtf/StdLibExtras.h" 36 #include "wtf/StdLibExtras.h"
38 #include "wtf/ThreadSpecific.h" 37 #include "wtf/ThreadSpecific.h"
39 #include "wtf/Threading.h" 38 #include "wtf/Threading.h"
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 case CSSValueWebkitText: 151 case CSSValueWebkitText:
153 case CSSValueWebkitLink: 152 case CSSValueWebkitLink:
154 case CSSValueWebkitActivelink: 153 case CSSValueWebkitActivelink:
155 case CSSValueCurrentcolor: 154 case CSSValueCurrentcolor:
156 return true; 155 return true;
157 default: 156 default:
158 return false; 157 return false;
159 } 158 }
160 } 159 }
161 160
162 typedef HashMap<const CSSPrimitiveValue*, String> CSSTextCache;
163 static CSSTextCache& cssTextCache()
164 {
165 AtomicallyInitializedStaticReference(ThreadSpecific<CSSTextCache>, cache, ne w ThreadSpecific<CSSTextCache>());
166 return *cache;
167 }
168
169 CSSPrimitiveValue::UnitType CSSPrimitiveValue::typeWithCalcResolved() const 161 CSSPrimitiveValue::UnitType CSSPrimitiveValue::typeWithCalcResolved() const
170 { 162 {
171 if (type() != UnitType::Calc) 163 if (type() != UnitType::Calc)
172 return type(); 164 return type();
173 165
174 switch (m_value.calc->category()) { 166 switch (m_value.calc->category()) {
175 case CalcAngle: 167 case CalcAngle:
176 return UnitType::Degrees; 168 return UnitType::Degrees;
177 case CalcFrequency: 169 case CalcFrequency:
178 return UnitType::Hertz; 170 return UnitType::Hertz;
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 m_primitiveUnitType = static_cast<unsigned>(type); 327 m_primitiveUnitType = static_cast<unsigned>(type);
336 } 328 }
337 329
338 void CSSPrimitiveValue::init(const LengthSize& lengthSize, const ComputedStyle& style) 330 void CSSPrimitiveValue::init(const LengthSize& lengthSize, const ComputedStyle& style)
339 { 331 {
340 init(UnitType::Pair); 332 init(UnitType::Pair);
341 m_hasCachedCSSText = false; 333 m_hasCachedCSSText = false;
342 m_value.pair = Pair::create(create(lengthSize.width(), style.effectiveZoom() ), create(lengthSize.height(), style.effectiveZoom()), Pair::KeepIdenticalValues ).leakRef(); 334 m_value.pair = Pair::create(create(lengthSize.width(), style.effectiveZoom() ), create(lengthSize.height(), style.effectiveZoom()), Pair::KeepIdenticalValues ).leakRef();
343 } 335 }
344 336
345 void CSSPrimitiveValue::init(PassRefPtrWillBeRawPtr<Counter> c)
346 {
347 init(UnitType::Counter);
348 m_hasCachedCSSText = false;
349 m_value.counter = c.leakRef();
350 }
351
352 void CSSPrimitiveValue::init(PassRefPtrWillBeRawPtr<Rect> r) 337 void CSSPrimitiveValue::init(PassRefPtrWillBeRawPtr<Rect> r)
353 { 338 {
354 init(UnitType::Rect); 339 init(UnitType::Rect);
355 m_hasCachedCSSText = false; 340 m_hasCachedCSSText = false;
356 m_value.rect = r.leakRef(); 341 m_value.rect = r.leakRef();
357 } 342 }
358 343
359 void CSSPrimitiveValue::init(PassRefPtrWillBeRawPtr<Quad> quad) 344 void CSSPrimitiveValue::init(PassRefPtrWillBeRawPtr<Quad> quad)
360 { 345 {
361 init(UnitType::Quad); 346 init(UnitType::Quad);
(...skipping 30 matching lines...) Expand all
392 void CSSPrimitiveValue::cleanup() 377 void CSSPrimitiveValue::cleanup()
393 { 378 {
394 switch (type()) { 379 switch (type()) {
395 case UnitType::CustomIdentifier: 380 case UnitType::CustomIdentifier:
396 case UnitType::String: 381 case UnitType::String:
397 case UnitType::URI: 382 case UnitType::URI:
398 case UnitType::Attribute: 383 case UnitType::Attribute:
399 if (m_value.string) 384 if (m_value.string)
400 m_value.string->deref(); 385 m_value.string->deref();
401 break; 386 break;
402 case UnitType::Counter:
403 // We must not call deref() when oilpan is enabled because m_value.count er is traced.
404 #if !ENABLE(OILPAN)
405 m_value.counter->deref();
406 #endif
407 break;
408 case UnitType::Rect: 387 case UnitType::Rect:
409 // We must not call deref() when oilpan is enabled because m_value.rect is traced. 388 // We must not call deref() when oilpan is enabled because m_value.rect is traced.
410 #if !ENABLE(OILPAN) 389 #if !ENABLE(OILPAN)
411 m_value.rect->deref(); 390 m_value.rect->deref();
412 #endif 391 #endif
413 break; 392 break;
414 case UnitType::Quad: 393 case UnitType::Quad:
415 // We must not call deref() when oilpan is enabled because m_value.quad is traced. 394 // We must not call deref() when oilpan is enabled because m_value.quad is traced.
416 #if !ENABLE(OILPAN) 395 #if !ENABLE(OILPAN)
417 m_value.quad->deref(); 396 m_value.quad->deref();
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 case UnitType::DotsPerPixel: 447 case UnitType::DotsPerPixel:
469 case UnitType::DotsPerInch: 448 case UnitType::DotsPerInch:
470 case UnitType::DotsPerCentimeter: 449 case UnitType::DotsPerCentimeter:
471 case UnitType::Fraction: 450 case UnitType::Fraction:
472 case UnitType::RGBColor: 451 case UnitType::RGBColor:
473 case UnitType::Unknown: 452 case UnitType::Unknown:
474 case UnitType::PropertyID: 453 case UnitType::PropertyID:
475 case UnitType::ValueID: 454 case UnitType::ValueID:
476 break; 455 break;
477 } 456 }
478 if (m_hasCachedCSSText) {
479 cssTextCache().remove(this);
480 m_hasCachedCSSText = false;
481 }
482 } 457 }
483 458
484 double CSSPrimitiveValue::computeSeconds() 459 double CSSPrimitiveValue::computeSeconds()
485 { 460 {
486 ASSERT(isTime() || (isCalculated() && cssCalcValue()->category() == CalcTime )); 461 ASSERT(isTime() || (isCalculated() && cssCalcValue()->category() == CalcTime ));
487 UnitType currentType = isCalculated() ? cssCalcValue()->expressionNode()->ty peWithCalcResolved() : type(); 462 UnitType currentType = isCalculated() ? cssCalcValue()->expressionNode()->ty peWithCalcResolved() : type();
488 if (currentType == UnitType::Seconds) 463 if (currentType == UnitType::Seconds)
489 return getDoubleValue(); 464 return getDoubleValue();
490 if (currentType == UnitType::Milliseconds) 465 if (currentType == UnitType::Milliseconds)
491 return getDoubleValue() / 1000; 466 return getDoubleValue() / 1000;
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after
911 return "vmin"; 886 return "vmin";
912 case UnitType::ViewportMax: 887 case UnitType::ViewportMax:
913 return "vmax"; 888 return "vmax";
914 case UnitType::Unknown: 889 case UnitType::Unknown:
915 case UnitType::CustomIdentifier: 890 case UnitType::CustomIdentifier:
916 case UnitType::String: 891 case UnitType::String:
917 case UnitType::URI: 892 case UnitType::URI:
918 case UnitType::ValueID: 893 case UnitType::ValueID:
919 case UnitType::PropertyID: 894 case UnitType::PropertyID:
920 case UnitType::Attribute: 895 case UnitType::Attribute:
921 case UnitType::Counter:
922 case UnitType::Rect: 896 case UnitType::Rect:
923 case UnitType::Quad: 897 case UnitType::Quad:
924 case UnitType::RGBColor: 898 case UnitType::RGBColor:
925 case UnitType::Pair: 899 case UnitType::Pair:
926 case UnitType::Calc: 900 case UnitType::Calc:
927 case UnitType::Shape: 901 case UnitType::Shape:
928 case UnitType::CalcPercentageWithNumber: 902 case UnitType::CalcPercentageWithNumber:
929 case UnitType::CalcPercentageWithLength: 903 case UnitType::CalcPercentageWithLength:
930 case UnitType::QuirkyEms: 904 case UnitType::QuirkyEms:
931 break; 905 break;
932 }; 906 };
933 ASSERT_NOT_REACHED(); 907 ASSERT_NOT_REACHED();
934 return ""; 908 return "";
935 } 909 }
936 910
937 String CSSPrimitiveValue::customCSSText() const 911 String CSSPrimitiveValue::customCSSText() const
938 { 912 {
939 if (m_hasCachedCSSText) {
940 ASSERT(cssTextCache().contains(this));
941 return cssTextCache().get(this);
942 }
943
944 String text;
945 switch (type()) { 913 switch (type()) {
946 case UnitType::Unknown: 914 case UnitType::Unknown:
947 // FIXME 915 // FIXME
948 break; 916 return "";
949 case UnitType::Integer: 917 case UnitType::Integer:
950 text = String::format("%d", getIntValue()); 918 return String::format("%d", getIntValue());
951 break;
952 case UnitType::Number: 919 case UnitType::Number:
953 case UnitType::Percentage: 920 case UnitType::Percentage:
954 case UnitType::Ems: 921 case UnitType::Ems:
955 case UnitType::Exs: 922 case UnitType::Exs:
956 case UnitType::Rems: 923 case UnitType::Rems:
957 case UnitType::Chs: 924 case UnitType::Chs:
958 case UnitType::Pixels: 925 case UnitType::Pixels:
959 case UnitType::Centimeters: 926 case UnitType::Centimeters:
960 case UnitType::DotsPerPixel: 927 case UnitType::DotsPerPixel:
961 case UnitType::DotsPerInch: 928 case UnitType::DotsPerInch:
962 case UnitType::DotsPerCentimeter: 929 case UnitType::DotsPerCentimeter:
963 case UnitType::Millimeters: 930 case UnitType::Millimeters:
964 case UnitType::Inches: 931 case UnitType::Inches:
965 case UnitType::Points: 932 case UnitType::Points:
966 case UnitType::Picas: 933 case UnitType::Picas:
967 case UnitType::Degrees: 934 case UnitType::Degrees:
968 case UnitType::Radians: 935 case UnitType::Radians:
969 case UnitType::Gradians: 936 case UnitType::Gradians:
970 case UnitType::Milliseconds: 937 case UnitType::Milliseconds:
971 case UnitType::Seconds: 938 case UnitType::Seconds:
972 case UnitType::Hertz: 939 case UnitType::Hertz:
973 case UnitType::Kilohertz: 940 case UnitType::Kilohertz:
974 case UnitType::Turns: 941 case UnitType::Turns:
975 case UnitType::Fraction: 942 case UnitType::Fraction:
976 case UnitType::ViewportWidth: 943 case UnitType::ViewportWidth:
977 case UnitType::ViewportHeight: 944 case UnitType::ViewportHeight:
978 case UnitType::ViewportMin: 945 case UnitType::ViewportMin:
979 case UnitType::ViewportMax: 946 case UnitType::ViewportMax:
980 text = formatNumber(m_value.num, unitTypeToString(type())); 947 return formatNumber(m_value.num, unitTypeToString(type()));
981 break;
982 case UnitType::CustomIdentifier: 948 case UnitType::CustomIdentifier:
983 text = quoteCSSStringIfNeeded(m_value.string); 949 return quoteCSSStringIfNeeded(m_value.string);
984 break;
985 case UnitType::String: { 950 case UnitType::String: {
986 text = serializeString(m_value.string); 951 return serializeString(m_value.string);
987 break;
988 } 952 }
989 case UnitType::URI: 953 case UnitType::URI:
990 text = "url(" + quoteCSSURLIfNeeded(m_value.string) + ")"; 954 return "url(" + quoteCSSURLIfNeeded(m_value.string) + ")";
991 break;
992 case UnitType::ValueID: 955 case UnitType::ValueID:
993 text = valueName(m_value.valueID); 956 return valueName(m_value.valueID);
994 break;
995 case UnitType::PropertyID: 957 case UnitType::PropertyID:
996 text = propertyName(m_value.propertyID); 958 return propertyName(m_value.propertyID);
997 break;
998 case UnitType::Attribute: { 959 case UnitType::Attribute: {
999 StringBuilder result; 960 StringBuilder result;
1000 result.reserveCapacity(6 + m_value.string->length()); 961 result.reserveCapacity(6 + m_value.string->length());
1001 result.appendLiteral("attr("); 962 result.appendLiteral("attr(");
1002 result.append(m_value.string); 963 result.append(m_value.string);
1003 result.append(')'); 964 result.append(')');
1004 965
1005 text = result.toString(); 966 return result.toString();
1006 break;
1007 }
1008 case UnitType::Counter: {
1009 StringBuilder result;
1010 String separator = m_value.counter->separator();
1011 if (separator.isEmpty())
1012 result.appendLiteral("counter(");
1013 else
1014 result.appendLiteral("counters(");
1015
1016 result.append(m_value.counter->identifier());
1017 if (!separator.isEmpty()) {
1018 result.appendLiteral(", ");
1019 result.append(serializeString(separator));
1020 }
1021 String listStyle = m_value.counter->listStyle();
1022 bool isDefaultListStyle = m_value.counter->listStyleIdent() == CSSValueD ecimal;
1023 if (!listStyle.isEmpty() && !isDefaultListStyle) {
1024 result.appendLiteral(", ");
1025 result.append(listStyle);
1026 }
1027 result.append(')');
1028
1029 text = result.toString();
1030 break;
1031 } 967 }
1032 case UnitType::Rect: 968 case UnitType::Rect:
1033 text = getRectValue()->cssText(); 969 return getRectValue()->cssText();
1034 break;
1035 case UnitType::Quad: 970 case UnitType::Quad:
1036 text = getQuadValue()->cssText(); 971 return getQuadValue()->cssText();
1037 break;
1038 case UnitType::RGBColor: { 972 case UnitType::RGBColor: {
1039 text = Color(m_value.rgbcolor).serializedAsCSSComponentValue(); 973 return Color(m_value.rgbcolor).serializedAsCSSComponentValue();
1040 break;
1041 } 974 }
1042 case UnitType::Pair: 975 case UnitType::Pair:
1043 text = getPairValue()->cssText(); 976 return getPairValue()->cssText();
1044 break;
1045 case UnitType::Calc: 977 case UnitType::Calc:
1046 text = m_value.calc->customCSSText(); 978 return m_value.calc->customCSSText();
1047 break;
1048 case UnitType::Shape: 979 case UnitType::Shape:
1049 text = m_value.shape->cssText(); 980 return m_value.shape->cssText();
1050 break;
1051 case UnitType::CalcPercentageWithNumber: 981 case UnitType::CalcPercentageWithNumber:
1052 case UnitType::CalcPercentageWithLength: 982 case UnitType::CalcPercentageWithLength:
1053 case UnitType::QuirkyEms: 983 case UnitType::QuirkyEms:
1054 ASSERT_NOT_REACHED(); 984 ASSERT_NOT_REACHED();
1055 break; 985 return "";
1056 } 986 }
1057
1058 ASSERT(!cssTextCache().contains(this));
1059 cssTextCache().set(this, text);
1060 m_hasCachedCSSText = true;
1061 return text;
1062 } 987 }
1063 988
1064 bool CSSPrimitiveValue::equals(const CSSPrimitiveValue& other) const 989 bool CSSPrimitiveValue::equals(const CSSPrimitiveValue& other) const
1065 { 990 {
1066 if (type() != other.type()) 991 if (type() != other.type())
1067 return false; 992 return false;
1068 993
1069 switch (type()) { 994 switch (type()) {
1070 case UnitType::Unknown: 995 case UnitType::Unknown:
1071 return false; 996 return false;
(...skipping 27 matching lines...) Expand all
1099 return m_value.num == other.m_value.num; 1024 return m_value.num == other.m_value.num;
1100 case UnitType::PropertyID: 1025 case UnitType::PropertyID:
1101 return m_value.propertyID == other.m_value.propertyID; 1026 return m_value.propertyID == other.m_value.propertyID;
1102 case UnitType::ValueID: 1027 case UnitType::ValueID:
1103 return m_value.valueID == other.m_value.valueID; 1028 return m_value.valueID == other.m_value.valueID;
1104 case UnitType::CustomIdentifier: 1029 case UnitType::CustomIdentifier:
1105 case UnitType::String: 1030 case UnitType::String:
1106 case UnitType::URI: 1031 case UnitType::URI:
1107 case UnitType::Attribute: 1032 case UnitType::Attribute:
1108 return equal(m_value.string, other.m_value.string); 1033 return equal(m_value.string, other.m_value.string);
1109 case UnitType::Counter:
1110 return m_value.counter && other.m_value.counter && m_value.counter->equa ls(*other.m_value.counter);
1111 case UnitType::Rect: 1034 case UnitType::Rect:
1112 return m_value.rect && other.m_value.rect && m_value.rect->equals(*other .m_value.rect); 1035 return m_value.rect && other.m_value.rect && m_value.rect->equals(*other .m_value.rect);
1113 case UnitType::Quad: 1036 case UnitType::Quad:
1114 return m_value.quad && other.m_value.quad && m_value.quad->equals(*other .m_value.quad); 1037 return m_value.quad && other.m_value.quad && m_value.quad->equals(*other .m_value.quad);
1115 case UnitType::RGBColor: 1038 case UnitType::RGBColor:
1116 return m_value.rgbcolor == other.m_value.rgbcolor; 1039 return m_value.rgbcolor == other.m_value.rgbcolor;
1117 case UnitType::Pair: 1040 case UnitType::Pair:
1118 return m_value.pair && other.m_value.pair && m_value.pair->equals(*other .m_value.pair); 1041 return m_value.pair && other.m_value.pair && m_value.pair->equals(*other .m_value.pair);
1119 case UnitType::Calc: 1042 case UnitType::Calc:
1120 return m_value.calc && other.m_value.calc && m_value.calc->equals(*other .m_value.calc); 1043 return m_value.calc && other.m_value.calc && m_value.calc->equals(*other .m_value.calc);
1121 case UnitType::Shape: 1044 case UnitType::Shape:
1122 return m_value.shape && other.m_value.shape && m_value.shape->equals(*ot her.m_value.shape); 1045 return m_value.shape && other.m_value.shape && m_value.shape->equals(*ot her.m_value.shape);
1123 case UnitType::Integer: 1046 case UnitType::Integer:
1124 case UnitType::Chs: 1047 case UnitType::Chs:
1125 case UnitType::CalcPercentageWithNumber: 1048 case UnitType::CalcPercentageWithNumber:
1126 case UnitType::CalcPercentageWithLength: 1049 case UnitType::CalcPercentageWithLength:
1127 case UnitType::QuirkyEms: 1050 case UnitType::QuirkyEms:
1128 return false; 1051 return false;
1129 } 1052 }
1130 return false; 1053 return false;
1131 } 1054 }
1132 1055
1133 DEFINE_TRACE_AFTER_DISPATCH(CSSPrimitiveValue) 1056 DEFINE_TRACE_AFTER_DISPATCH(CSSPrimitiveValue)
1134 { 1057 {
1135 #if ENABLE(OILPAN) 1058 #if ENABLE(OILPAN)
1136 switch (type()) { 1059 switch (type()) {
1137 case UnitType::Counter:
1138 visitor->trace(m_value.counter);
1139 break;
1140 case UnitType::Rect: 1060 case UnitType::Rect:
1141 visitor->trace(m_value.rect); 1061 visitor->trace(m_value.rect);
1142 break; 1062 break;
1143 case UnitType::Quad: 1063 case UnitType::Quad:
1144 visitor->trace(m_value.quad); 1064 visitor->trace(m_value.quad);
1145 break; 1065 break;
1146 case UnitType::Pair: 1066 case UnitType::Pair:
1147 visitor->trace(m_value.pair); 1067 visitor->trace(m_value.pair);
1148 break; 1068 break;
1149 case UnitType::Calc: 1069 case UnitType::Calc:
1150 visitor->trace(m_value.calc); 1070 visitor->trace(m_value.calc);
1151 break; 1071 break;
1152 case UnitType::Shape: 1072 case UnitType::Shape:
1153 visitor->trace(m_value.shape); 1073 visitor->trace(m_value.shape);
1154 break; 1074 break;
1155 default: 1075 default:
1156 break; 1076 break;
1157 } 1077 }
1158 #endif 1078 #endif
1159 CSSValue::traceAfterDispatch(visitor); 1079 CSSValue::traceAfterDispatch(visitor);
1160 } 1080 }
1161 1081
1162 } // namespace blink 1082 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698