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

Side by Side Diff: third_party/WebKit/Source/core/css/CSSCalculationValue.cpp

Issue 1481383002: [Experimental] CSSSerializer Proof-of-concept Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: snapshot: top_25 sites ser/dser now works Created 4 years, 11 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, 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved.
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 are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 14 matching lines...) Expand all
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 #include "core/css/CSSCalculationValue.h" 31 #include "core/css/CSSCalculationValue.h"
32 32
33 #include "core/css/CSSPrimitiveValueMappings.h" 33 #include "core/css/CSSPrimitiveValueMappings.h"
34 #include "core/css/resolver/StyleResolver.h" 34 #include "core/css/resolver/StyleResolver.h"
35 #include "core/css/serializer/CSSDeserializeStream.h"
36 #include "core/css/serializer/CSSSerializeStream.h"
35 #include "wtf/MathExtras.h" 37 #include "wtf/MathExtras.h"
36 #include "wtf/OwnPtr.h" 38 #include "wtf/OwnPtr.h"
37 #include "wtf/text/StringBuilder.h" 39 #include "wtf/text/StringBuilder.h"
38 40
39 static const int maxExpressionDepth = 100; 41 static const int maxExpressionDepth = 100;
40 42
41 enum ParseState { 43 enum ParseState {
42 OK, 44 OK,
43 TooDeep, 45 TooDeep,
44 NoMoreTokens 46 NoMoreTokens
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 257
256 return compareCSSValuePtr(m_value, static_cast<const CSSCalcPrimitiveVal ue&>(other).m_value); 258 return compareCSSValuePtr(m_value, static_cast<const CSSCalcPrimitiveVal ue&>(other).m_value);
257 } 259 }
258 260
259 Type type() const override { return CssCalcPrimitiveValue; } 261 Type type() const override { return CssCalcPrimitiveValue; }
260 CSSPrimitiveValue::UnitType typeWithCalcResolved() const override 262 CSSPrimitiveValue::UnitType typeWithCalcResolved() const override
261 { 263 {
262 return m_value->typeWithCalcResolved(); 264 return m_value->typeWithCalcResolved();
263 } 265 }
264 266
267 void serialize(CSSSerializeStream* stream) const override
268 {
269 CSSCalcExpressionNode::serialize(stream);
270 m_value->serialize(stream);
271 }
272
273 static PassRefPtrWillBeRawPtr<CSSCalcPrimitiveValue> deserializeAfterDispatc h(CalculationCategory category, bool isInteger, CSSDeserializeStream* stream)
274 {
275 RefPtrWillBeRawPtr<CSSPrimitiveValue> value = stream->readNullableRef<CS SPrimitiveValue>();
276 return create(value.release(), isInteger);
277 }
265 278
266 DEFINE_INLINE_VIRTUAL_TRACE() 279 DEFINE_INLINE_VIRTUAL_TRACE()
267 { 280 {
268 visitor->trace(m_value); 281 visitor->trace(m_value);
269 CSSCalcExpressionNode::trace(visitor); 282 CSSCalcExpressionNode::trace(visitor);
270 } 283 }
271 284
272 private: 285 private:
273 CSSCalcPrimitiveValue(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> value, bool isInteger) 286 CSSCalcPrimitiveValue(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> value, bool isInteger)
274 : CSSCalcExpressionNode(unitCategory(value->typeWithCalcResolved()), isI nteger) 287 : CSSCalcExpressionNode(unitCategory(value->typeWithCalcResolved()), isI nteger)
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
522 return CSSPrimitiveValue::UnitType::Hertz; 535 return CSSPrimitiveValue::UnitType::Hertz;
523 case CalcPercentLength: 536 case CalcPercentLength:
524 case CalcPercentNumber: 537 case CalcPercentNumber:
525 case CalcOther: 538 case CalcOther:
526 return CSSPrimitiveValue::UnitType::Unknown; 539 return CSSPrimitiveValue::UnitType::Unknown;
527 } 540 }
528 ASSERT_NOT_REACHED(); 541 ASSERT_NOT_REACHED();
529 return CSSPrimitiveValue::UnitType::Unknown; 542 return CSSPrimitiveValue::UnitType::Unknown;
530 } 543 }
531 544
545 void serialize(CSSSerializeStream* stream) const override
546 {
547 CSSCalcExpressionNode::serialize(stream);
548 m_leftSide->serialize(stream);
549 m_rightSide->serialize(stream);
550 stream->writeEnumAsInt<CalcOperator>(m_operator);
551 }
552
553 static PassRefPtrWillBeRawPtr<CSSCalcBinaryOperation> deserializeAfterDispat ch(CalculationCategory category, bool isInteger, CSSDeserializeStream* stream)
554 {
555 RefPtrWillBeRawPtr<CSSCalcExpressionNode> leftSide = CSSCalcExpressionNo de::deserialize(stream);
556 RefPtrWillBeRawPtr<CSSCalcExpressionNode> rightSide = CSSCalcExpressionN ode::deserialize(stream);
557 CalcOperator calcOperator = stream->readIntAsEnum<CalcOperator>();
558 return adoptRefWillBeNoop(new CSSCalcBinaryOperation(leftSide.release(), rightSide.release(), calcOperator, category));
559 }
560
532 DEFINE_INLINE_VIRTUAL_TRACE() 561 DEFINE_INLINE_VIRTUAL_TRACE()
533 { 562 {
534 visitor->trace(m_leftSide); 563 visitor->trace(m_leftSide);
535 visitor->trace(m_rightSide); 564 visitor->trace(m_rightSide);
536 CSSCalcExpressionNode::trace(visitor); 565 CSSCalcExpressionNode::trace(visitor);
537 } 566 }
538 567
539 private: 568 private:
540 CSSCalcBinaryOperation(PassRefPtrWillBeRawPtr<CSSCalcExpressionNode> leftSid e, PassRefPtrWillBeRawPtr<CSSCalcExpressionNode> rightSide, CalcOperator op, Cal culationCategory category) 569 CSSCalcBinaryOperation(PassRefPtrWillBeRawPtr<CSSCalcExpressionNode> leftSid e, PassRefPtrWillBeRawPtr<CSSCalcExpressionNode> rightSide, CalcOperator op, Cal culationCategory category)
541 : CSSCalcExpressionNode(category, isIntegerResult(leftSide.get(), rightS ide.get(), op)) 570 : CSSCalcExpressionNode(category, isIntegerResult(leftSide.get(), rightS ide.get(), op))
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
723 } 752 }
724 753
725 PassRefPtrWillBeRawPtr<CSSCalcExpressionNode> CSSCalcValue::createExpressionNode (double pixels, double percent) 754 PassRefPtrWillBeRawPtr<CSSCalcExpressionNode> CSSCalcValue::createExpressionNode (double pixels, double percent)
726 { 755 {
727 return createExpressionNode( 756 return createExpressionNode(
728 createExpressionNode(CSSPrimitiveValue::create(pixels, CSSPrimitiveValue ::UnitType::Pixels), pixels == trunc(pixels)), 757 createExpressionNode(CSSPrimitiveValue::create(pixels, CSSPrimitiveValue ::UnitType::Pixels), pixels == trunc(pixels)),
729 createExpressionNode(CSSPrimitiveValue::create(percent, CSSPrimitiveValu e::UnitType::Percentage), percent == trunc(percent)), 758 createExpressionNode(CSSPrimitiveValue::create(percent, CSSPrimitiveValu e::UnitType::Percentage), percent == trunc(percent)),
730 CalcAdd); 759 CalcAdd);
731 } 760 }
732 761
762 void CSSCalcExpressionNode::serialize(CSSSerializeStream* stream) const
763 {
764 stream->writeEnumAsInt<Type>(type());
765 stream->writeEnumAsInt<CalculationCategory>(m_category);
766 stream->writeBool(m_isInteger);
767 }
768
769 PassRefPtrWillBeRawPtr<CSSCalcExpressionNode> CSSCalcExpressionNode::deserialize (CSSDeserializeStream* stream)
770 {
771 Type type = stream->readIntAsEnum<Type>();
772 CalculationCategory category = stream->readIntAsEnum<CalculationCategory>();
773 bool isInteger = stream->readBool();
774
775 switch (type) {
776 case CssCalcPrimitiveValue:
777 return CSSCalcPrimitiveValue::deserializeAfterDispatch(category, isInteg er, stream);
778 case CssCalcBinaryOperation:
779 return CSSCalcBinaryOperation::deserializeAfterDispatch(category, isInte ger, stream);
780 default:
781 ASSERT_NOT_REACHED();
782 }
783 }
784
733 PassRefPtrWillBeRawPtr<CSSCalcValue> CSSCalcValue::create(const CSSParserTokenRa nge& tokens, ValueRange range) 785 PassRefPtrWillBeRawPtr<CSSCalcValue> CSSCalcValue::create(const CSSParserTokenRa nge& tokens, ValueRange range)
734 { 786 {
735 CSSCalcExpressionNodeParser parser; 787 CSSCalcExpressionNodeParser parser;
736 RefPtrWillBeRawPtr<CSSCalcExpressionNode> expression = parser.parseCalc(toke ns); 788 RefPtrWillBeRawPtr<CSSCalcExpressionNode> expression = parser.parseCalc(toke ns);
737 789
738 return expression ? adoptRefWillBeNoop(new CSSCalcValue(expression, range)) : nullptr; 790 return expression ? adoptRefWillBeNoop(new CSSCalcValue(expression, range)) : nullptr;
739 } 791 }
740 792
741 PassRefPtrWillBeRawPtr<CSSCalcValue> CSSCalcValue::create(PassRefPtrWillBeRawPtr <CSSCalcExpressionNode> expression, ValueRange range) 793 PassRefPtrWillBeRawPtr<CSSCalcValue> CSSCalcValue::create(PassRefPtrWillBeRawPtr <CSSCalcExpressionNode> expression, ValueRange range)
742 { 794 {
743 return adoptRefWillBeNoop(new CSSCalcValue(expression, range)); 795 return adoptRefWillBeNoop(new CSSCalcValue(expression, range));
744 } 796 }
745 797
798 void CSSCalcValue::serialize(CSSSerializeStream* stream) const
799 {
800 m_expression->serialize(stream);
801 stream->writeBool(m_nonNegative);
802 }
803
804 PassRefPtrWillBeRawPtr<CSSCalcValue> CSSCalcValue::deserialize(CSSDeserializeStr eam* stream)
805 {
806 RefPtrWillBeRawPtr<CSSCalcExpressionNode> expression = CSSCalcExpressionNode ::deserialize(stream);
807 bool nonNegative = stream->readBool();
808 return create(expression.release(), nonNegative ? ValueRangeNonNegative : Va lueRangeAll);
809 }
810
746 } // namespace blink 811 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/css/CSSCalculationValue.h ('k') | third_party/WebKit/Source/core/css/CSSColorValue.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698