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

Side by Side Diff: Source/core/css/resolver/TransformBuilder.cpp

Issue 108653006: Assert that convertToLength succeeds instead of returning Length(Undefined) (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: rebased Created 7 years 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) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) 3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com)
4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) 4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com)
5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved. 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved.
6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> 6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org>
7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> 7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org>
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. 9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved.
10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. 10 * Copyright (C) Research In Motion Limited 2011. All rights reserved.
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 TransformBuilder::TransformBuilder() 46 TransformBuilder::TransformBuilder()
47 { 47 {
48 } 48 }
49 49
50 TransformBuilder::~TransformBuilder() 50 TransformBuilder::~TransformBuilder()
51 { 51 {
52 } 52 }
53 53
54 static Length convertToFloatLength(CSSPrimitiveValue* primitiveValue, const CSST oLengthConversionData& conversionData) 54 static Length convertToFloatLength(CSSPrimitiveValue* primitiveValue, const CSST oLengthConversionData& conversionData)
55 { 55 {
56 return primitiveValue ? primitiveValue->convertToLength<FixedConversion | Pe rcentConversion>(conversionData) : Length(Undefined); 56 ASSERT(primitiveValue);
57 return primitiveValue->convertToLength<FixedConversion | PercentConversion>( conversionData);
57 } 58 }
58 59
59 static TransformOperation::OperationType getTransformOperationType(CSSTransformV alue::TransformOperationType type) 60 static TransformOperation::OperationType getTransformOperationType(CSSTransformV alue::TransformOperationType type)
60 { 61 {
61 switch (type) { 62 switch (type) {
62 case CSSTransformValue::ScaleTransformOperation: return TransformOperation:: Scale; 63 case CSSTransformValue::ScaleTransformOperation: return TransformOperation:: Scale;
63 case CSSTransformValue::ScaleXTransformOperation: return TransformOperation: :ScaleX; 64 case CSSTransformValue::ScaleXTransformOperation: return TransformOperation: :ScaleX;
64 case CSSTransformValue::ScaleYTransformOperation: return TransformOperation: :ScaleY; 65 case CSSTransformValue::ScaleYTransformOperation: return TransformOperation: :ScaleY;
65 case CSSTransformValue::ScaleZTransformOperation: return TransformOperation: :ScaleZ; 66 case CSSTransformValue::ScaleZTransformOperation: return TransformOperation: :ScaleZ;
66 case CSSTransformValue::Scale3DTransformOperation: return TransformOperation ::Scale3D; 67 case CSSTransformValue::Scale3DTransformOperation: return TransformOperation ::Scale3D;
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 else { 174 else {
174 tx = convertToFloatLength(firstValue, conversionData); 175 tx = convertToFloatLength(firstValue, conversionData);
175 if (transformValue->operationType() != CSSTransformValue::Transl ateXTransformOperation) { 176 if (transformValue->operationType() != CSSTransformValue::Transl ateXTransformOperation) {
176 if (transformValue->length() > 1) { 177 if (transformValue->length() > 1) {
177 CSSPrimitiveValue* secondValue = toCSSPrimitiveValue(tra nsformValue->itemWithoutBoundsCheck(1)); 178 CSSPrimitiveValue* secondValue = toCSSPrimitiveValue(tra nsformValue->itemWithoutBoundsCheck(1));
178 ty = convertToFloatLength(secondValue, conversionData); 179 ty = convertToFloatLength(secondValue, conversionData);
179 } 180 }
180 } 181 }
181 } 182 }
182 183
183 if (tx.isUndefined() || ty.isUndefined())
184 return false;
185
186 operations.operations().append(TranslateTransformOperation::create(t x, ty, Length(0, Fixed), getTransformOperationType(transformValue->operationType ()))); 184 operations.operations().append(TranslateTransformOperation::create(t x, ty, Length(0, Fixed), getTransformOperationType(transformValue->operationType ())));
187 break; 185 break;
188 } 186 }
189 case CSSTransformValue::TranslateZTransformOperation: 187 case CSSTransformValue::TranslateZTransformOperation:
190 case CSSTransformValue::Translate3DTransformOperation: { 188 case CSSTransformValue::Translate3DTransformOperation: {
191 Length tx = Length(0, Fixed); 189 Length tx = Length(0, Fixed);
192 Length ty = Length(0, Fixed); 190 Length ty = Length(0, Fixed);
193 Length tz = Length(0, Fixed); 191 Length tz = Length(0, Fixed);
194 if (transformValue->operationType() == CSSTransformValue::TranslateZ TransformOperation) 192 if (transformValue->operationType() == CSSTransformValue::TranslateZ TransformOperation)
195 tz = convertToFloatLength(firstValue, conversionData); 193 tz = convertToFloatLength(firstValue, conversionData);
196 else if (transformValue->operationType() == CSSTransformValue::Trans lateYTransformOperation) 194 else if (transformValue->operationType() == CSSTransformValue::Trans lateYTransformOperation)
197 ty = convertToFloatLength(firstValue, conversionData); 195 ty = convertToFloatLength(firstValue, conversionData);
198 else { 196 else {
199 tx = convertToFloatLength(firstValue, conversionData); 197 tx = convertToFloatLength(firstValue, conversionData);
200 if (transformValue->operationType() != CSSTransformValue::Transl ateXTransformOperation) { 198 if (transformValue->operationType() != CSSTransformValue::Transl ateXTransformOperation) {
201 if (transformValue->length() > 2) { 199 if (transformValue->length() > 2) {
202 CSSPrimitiveValue* thirdValue = toCSSPrimitiveValue(tran sformValue->itemWithoutBoundsCheck(2)); 200 CSSPrimitiveValue* thirdValue = toCSSPrimitiveValue(tran sformValue->itemWithoutBoundsCheck(2));
203 tz = convertToFloatLength(thirdValue, conversionData); 201 tz = convertToFloatLength(thirdValue, conversionData);
204 } 202 }
205 if (transformValue->length() > 1) { 203 if (transformValue->length() > 1) {
206 CSSPrimitiveValue* secondValue = toCSSPrimitiveValue(tra nsformValue->itemWithoutBoundsCheck(1)); 204 CSSPrimitiveValue* secondValue = toCSSPrimitiveValue(tra nsformValue->itemWithoutBoundsCheck(1));
207 ty = convertToFloatLength(secondValue, conversionData); 205 ty = convertToFloatLength(secondValue, conversionData);
208 } 206 }
209 } 207 }
210 } 208 }
211 209
212 if (tx.isUndefined() || ty.isUndefined() || tz.isUndefined())
213 return false;
214
215 operations.operations().append(TranslateTransformOperation::create(t x, ty, tz, getTransformOperationType(transformValue->operationType()))); 210 operations.operations().append(TranslateTransformOperation::create(t x, ty, tz, getTransformOperationType(transformValue->operationType())));
216 break; 211 break;
217 } 212 }
218 case CSSTransformValue::RotateTransformOperation: { 213 case CSSTransformValue::RotateTransformOperation: {
219 double angle = firstValue->computeDegrees(); 214 double angle = firstValue->computeDegrees();
220 operations.operations().append(RotateTransformOperation::create(0, 0 , 1, angle, getTransformOperationType(transformValue->operationType()))); 215 operations.operations().append(RotateTransformOperation::create(0, 0 , 1, angle, getTransformOperationType(transformValue->operationType())));
221 break; 216 break;
222 } 217 }
223 case CSSTransformValue::RotateXTransformOperation: 218 case CSSTransformValue::RotateXTransformOperation:
224 case CSSTransformValue::RotateYTransformOperation: 219 case CSSTransformValue::RotateYTransformOperation:
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 operations.operations().append(Matrix3DTransformOperation::create(ma trix)); 299 operations.operations().append(Matrix3DTransformOperation::create(ma trix));
305 break; 300 break;
306 } 301 }
307 case CSSTransformValue::PerspectiveTransformOperation: { 302 case CSSTransformValue::PerspectiveTransformOperation: {
308 Length p = Length(0, Fixed); 303 Length p = Length(0, Fixed);
309 if (firstValue->isLength()) 304 if (firstValue->isLength())
310 p = convertToFloatLength(firstValue, conversionData); 305 p = convertToFloatLength(firstValue, conversionData);
311 else { 306 else {
312 // This is a quirk that should go away when 3d transforms are fi nalized. 307 // This is a quirk that should go away when 3d transforms are fi nalized.
313 double val = firstValue->getDoubleValue(); 308 double val = firstValue->getDoubleValue();
314 p = val >= 0 ? Length(clampToPositiveInteger(val), Fixed) : Leng th(Undefined); 309 if (val < 0)
310 return false;
311 p = Length(clampToPositiveInteger(val), Fixed);
315 } 312 }
316 313
317 if (p.isUndefined())
318 return false;
319
320 operations.operations().append(PerspectiveTransformOperation::create (p)); 314 operations.operations().append(PerspectiveTransformOperation::create (p));
321 break; 315 break;
322 } 316 }
323 case CSSTransformValue::UnknownTransformOperation: 317 case CSSTransformValue::UnknownTransformOperation:
324 ASSERT_NOT_REACHED(); 318 ASSERT_NOT_REACHED();
325 break; 319 break;
326 } 320 }
327 } 321 }
328 322
329 outOperations = operations; 323 outOperations = operations;
330 return true; 324 return true;
331 } 325 }
332 326
333 } // namespace WebCore 327 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/css/resolver/StyleBuilderCustom.cpp ('k') | Source/core/rendering/style/BasicShapes.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698