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

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

Issue 184313004: Move all RefPtr's to CSSValue to oilpan transition types, except for the one in CSSCursorImageValue. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fix comment Created 6 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/css/CSSValueList.cpp ('k') | Source/core/css/StylePropertySet.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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, 2009, 2010, 2012 Apple Inc. All r ights reserved. 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012 Apple Inc. All r ights reserved.
4 * Copyright (C) 2011 Research In Motion Limited. All rights reserved. 4 * Copyright (C) 2011 Research In Motion Limited. All rights reserved.
5 * Copyright (C) 2013 Intel Corporation. All rights reserved. 5 * Copyright (C) 2013 Intel Corporation. All rights reserved.
6 * 6 *
7 * This library is free software; you can redistribute it and/or 7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public 8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version. 10 * version 2 of the License, or (at your option) any later version.
(...skipping 685 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 result.append(' '); 696 result.append(' ');
697 result.append(value); 697 result.append(value);
698 } 698 }
699 if (isInitialOrInherit(commonValue)) 699 if (isInitialOrInherit(commonValue))
700 return commonValue; 700 return commonValue;
701 return result.isEmpty() ? String() : result.toString(); 701 return result.isEmpty() ? String() : result.toString();
702 } 702 }
703 703
704 String StylePropertySerializer::backgroundRepeatPropertyValue() const 704 String StylePropertySerializer::backgroundRepeatPropertyValue() const
705 { 705 {
706 RefPtr<CSSValue> repeatX = m_propertySet.getPropertyCSSValue(CSSPropertyBack groundRepeatX); 706 RefPtrWillBeRawPtr<CSSValue> repeatX = m_propertySet.getPropertyCSSValue(CSS PropertyBackgroundRepeatX);
707 RefPtr<CSSValue> repeatY = m_propertySet.getPropertyCSSValue(CSSPropertyBack groundRepeatY); 707 RefPtrWillBeRawPtr<CSSValue> repeatY = m_propertySet.getPropertyCSSValue(CSS PropertyBackgroundRepeatY);
708 if (!repeatX || !repeatY) 708 if (!repeatX || !repeatY)
709 return String(); 709 return String();
710 if (repeatX->cssValueType() != repeatY->cssValueType()) 710 if (repeatX->cssValueType() != repeatY->cssValueType())
711 return String(); 711 return String();
712 if (m_propertySet.propertyIsImportant(CSSPropertyBackgroundRepeatX) != m_pro pertySet.propertyIsImportant(CSSPropertyBackgroundRepeatY)) 712 if (m_propertySet.propertyIsImportant(CSSPropertyBackgroundRepeatX) != m_pro pertySet.propertyIsImportant(CSSPropertyBackgroundRepeatY))
713 return String(); 713 return String();
714 714
715 StringBuilder builder; 715 StringBuilder builder;
716 switch (repeatX->cssValueType()) { 716 switch (repeatX->cssValueType()) {
717 case CSSValue::CSS_INHERIT: 717 case CSSValue::CSS_INHERIT:
(...skipping 30 matching lines...) Expand all
748 748
749 void StylePropertySerializer::appendBackgroundPropertyAsText(StringBuilder& resu lt, unsigned& numDecls) const 749 void StylePropertySerializer::appendBackgroundPropertyAsText(StringBuilder& resu lt, unsigned& numDecls) const
750 { 750 {
751 if (isPropertyShorthandAvailable(backgroundShorthand())) { 751 if (isPropertyShorthandAvailable(backgroundShorthand())) {
752 String backgroundValue = getPropertyValue(CSSPropertyBackground); 752 String backgroundValue = getPropertyValue(CSSPropertyBackground);
753 bool isImportant = m_propertySet.propertyIsImportant(CSSPropertyBackgrou ndImage); 753 bool isImportant = m_propertySet.propertyIsImportant(CSSPropertyBackgrou ndImage);
754 result.append(getPropertyText(CSSPropertyBackground, backgroundValue, is Important, numDecls++)); 754 result.append(getPropertyText(CSSPropertyBackground, backgroundValue, is Important, numDecls++));
755 return; 755 return;
756 } 756 }
757 if (shorthandHasOnlyInitialOrInheritedValue(backgroundShorthand())) { 757 if (shorthandHasOnlyInitialOrInheritedValue(backgroundShorthand())) {
758 RefPtr<CSSValue> value = m_propertySet.getPropertyCSSValue(CSSPropertyBa ckgroundImage); 758 RefPtrWillBeRawPtr<CSSValue> value = m_propertySet.getPropertyCSSValue(C SSPropertyBackgroundImage);
759 bool isImportant = m_propertySet.propertyIsImportant(CSSPropertyBackgrou ndImage); 759 bool isImportant = m_propertySet.propertyIsImportant(CSSPropertyBackgrou ndImage);
760 result.append(getPropertyText(CSSPropertyBackground, value->cssText(), i sImportant, numDecls++)); 760 result.append(getPropertyText(CSSPropertyBackground, value->cssText(), i sImportant, numDecls++));
761 return; 761 return;
762 } 762 }
763 763
764 // backgroundShorthandProperty without layered shorhand properties 764 // backgroundShorthandProperty without layered shorhand properties
765 const CSSPropertyID backgroundPropertyIds[] = { 765 const CSSPropertyID backgroundPropertyIds[] = {
766 CSSPropertyBackgroundImage, 766 CSSPropertyBackgroundImage,
767 CSSPropertyBackgroundAttachment, 767 CSSPropertyBackgroundAttachment,
768 CSSPropertyBackgroundColor, 768 CSSPropertyBackgroundColor,
769 CSSPropertyBackgroundSize, 769 CSSPropertyBackgroundSize,
770 CSSPropertyBackgroundOrigin, 770 CSSPropertyBackgroundOrigin,
771 CSSPropertyBackgroundClip 771 CSSPropertyBackgroundClip
772 }; 772 };
773 773
774 for (unsigned i = 0; i < WTF_ARRAY_LENGTH(backgroundPropertyIds); ++i) { 774 for (unsigned i = 0; i < WTF_ARRAY_LENGTH(backgroundPropertyIds); ++i) {
775 CSSPropertyID propertyID = backgroundPropertyIds[i]; 775 CSSPropertyID propertyID = backgroundPropertyIds[i];
776 RefPtr<CSSValue> value = m_propertySet.getPropertyCSSValue(propertyID); 776 RefPtrWillBeRawPtr<CSSValue> value = m_propertySet.getPropertyCSSValue(p ropertyID);
777 if (!value) 777 if (!value)
778 continue; 778 continue;
779 result.append(getPropertyText(propertyID, value->cssText(), m_propertySe t.propertyIsImportant(propertyID), numDecls++)); 779 result.append(getPropertyText(propertyID, value->cssText(), m_propertySe t.propertyIsImportant(propertyID), numDecls++));
780 } 780 }
781 781
782 // FIXME: This is a not-so-nice way to turn x/y positions into single backgr ound-position in output. 782 // FIXME: This is a not-so-nice way to turn x/y positions into single backgr ound-position in output.
783 // It is required because background-position-x/y are non-standard propertie s and WebKit generated output 783 // It is required because background-position-x/y are non-standard propertie s and WebKit generated output
784 // would not work in Firefox (<rdar://problem/5143183>) 784 // would not work in Firefox (<rdar://problem/5143183>)
785 // It would be a better solution if background-position was CSS_PAIR. 785 // It would be a better solution if background-position was CSS_PAIR.
786 if (shorthandHasOnlyInitialOrInheritedValue(backgroundPositionShorthand())) { 786 if (shorthandHasOnlyInitialOrInheritedValue(backgroundPositionShorthand())) {
787 RefPtr<CSSValue> value = m_propertySet.getPropertyCSSValue(CSSPropertyBa ckgroundPositionX); 787 RefPtrWillBeRawPtr<CSSValue> value = m_propertySet.getPropertyCSSValue(C SSPropertyBackgroundPositionX);
788 bool isImportant = m_propertySet.propertyIsImportant(CSSPropertyBackgrou ndPositionX); 788 bool isImportant = m_propertySet.propertyIsImportant(CSSPropertyBackgrou ndPositionX);
789 result.append(getPropertyText(CSSPropertyBackgroundPosition, value->cssT ext(), isImportant, numDecls++)); 789 result.append(getPropertyText(CSSPropertyBackgroundPosition, value->cssT ext(), isImportant, numDecls++));
790 } else if (isPropertyShorthandAvailable(backgroundPositionShorthand())) { 790 } else if (isPropertyShorthandAvailable(backgroundPositionShorthand())) {
791 String positionValue = m_propertySet.getPropertyValue(CSSPropertyBackgro undPosition); 791 String positionValue = m_propertySet.getPropertyValue(CSSPropertyBackgro undPosition);
792 bool isImportant = m_propertySet.propertyIsImportant(CSSPropertyBackgrou ndPositionX); 792 bool isImportant = m_propertySet.propertyIsImportant(CSSPropertyBackgrou ndPositionX);
793 if (!positionValue.isNull()) 793 if (!positionValue.isNull())
794 result.append(getPropertyText(CSSPropertyBackgroundPosition, positio nValue, isImportant, numDecls++)); 794 result.append(getPropertyText(CSSPropertyBackgroundPosition, positio nValue, isImportant, numDecls++));
795 } else { 795 } else {
796 // should check background-position-x or background-position-y. 796 // should check background-position-x or background-position-y.
797 if (RefPtr<CSSValue> value = m_propertySet.getPropertyCSSValue(CSSProper tyBackgroundPositionX)) { 797 if (RefPtrWillBeRawPtr<CSSValue> value = m_propertySet.getPropertyCSSVal ue(CSSPropertyBackgroundPositionX)) {
798 if (!value->isImplicitInitialValue()) { 798 if (!value->isImplicitInitialValue()) {
799 bool isImportant = m_propertySet.propertyIsImportant(CSSProperty BackgroundPositionX); 799 bool isImportant = m_propertySet.propertyIsImportant(CSSProperty BackgroundPositionX);
800 result.append(getPropertyText(CSSPropertyBackgroundPositionX, va lue->cssText(), isImportant, numDecls++)); 800 result.append(getPropertyText(CSSPropertyBackgroundPositionX, va lue->cssText(), isImportant, numDecls++));
801 } 801 }
802 } 802 }
803 if (RefPtr<CSSValue> value = m_propertySet.getPropertyCSSValue(CSSProper tyBackgroundPositionY)) { 803 if (RefPtrWillBeRawPtr<CSSValue> value = m_propertySet.getPropertyCSSVal ue(CSSPropertyBackgroundPositionY)) {
804 if (!value->isImplicitInitialValue()) { 804 if (!value->isImplicitInitialValue()) {
805 bool isImportant = m_propertySet.propertyIsImportant(CSSProperty BackgroundPositionY); 805 bool isImportant = m_propertySet.propertyIsImportant(CSSProperty BackgroundPositionY);
806 result.append(getPropertyText(CSSPropertyBackgroundPositionY, va lue->cssText(), isImportant, numDecls++)); 806 result.append(getPropertyText(CSSPropertyBackgroundPositionY, va lue->cssText(), isImportant, numDecls++));
807 } 807 }
808 } 808 }
809 } 809 }
810 810
811 String repeatValue = m_propertySet.getPropertyValue(CSSPropertyBackgroundRep eat); 811 String repeatValue = m_propertySet.getPropertyValue(CSSPropertyBackgroundRep eat);
812 if (!repeatValue.isNull()) 812 if (!repeatValue.isNull())
813 result.append(getPropertyText(CSSPropertyBackgroundRepeat, repeatValue, m_propertySet.propertyIsImportant(CSSPropertyBackgroundRepeatX), numDecls++)); 813 result.append(getPropertyText(CSSPropertyBackgroundRepeat, repeatValue, m_propertySet.propertyIsImportant(CSSPropertyBackgroundRepeatX), numDecls++));
814 } 814 }
815 815
816 bool StylePropertySerializer::isPropertyShorthandAvailable(const StylePropertySh orthand& shorthand) const 816 bool StylePropertySerializer::isPropertyShorthandAvailable(const StylePropertySh orthand& shorthand) const
817 { 817 {
818 ASSERT(shorthand.length() > 0); 818 ASSERT(shorthand.length() > 0);
819 819
820 bool isImportant = m_propertySet.propertyIsImportant(shorthand.properties()[ 0]); 820 bool isImportant = m_propertySet.propertyIsImportant(shorthand.properties()[ 0]);
821 for (unsigned i = 0; i < shorthand.length(); ++i) { 821 for (unsigned i = 0; i < shorthand.length(); ++i) {
822 RefPtr<CSSValue> value = m_propertySet.getPropertyCSSValue(shorthand.pro perties()[i]); 822 RefPtrWillBeRawPtr<CSSValue> value = m_propertySet.getPropertyCSSValue(s horthand.properties()[i]);
823 if (!value || (value->isInitialValue() && !value->isImplicitInitialValue ()) || value->isInheritedValue()) 823 if (!value || (value->isInitialValue() && !value->isImplicitInitialValue ()) || value->isInheritedValue())
824 return false; 824 return false;
825 if (isImportant != m_propertySet.propertyIsImportant(shorthand.propertie s()[i])) 825 if (isImportant != m_propertySet.propertyIsImportant(shorthand.propertie s()[i]))
826 return false; 826 return false;
827 } 827 }
828 return true; 828 return true;
829 } 829 }
830 830
831 bool StylePropertySerializer::shorthandHasOnlyInitialOrInheritedValue(const Styl ePropertyShorthand& shorthand) const 831 bool StylePropertySerializer::shorthandHasOnlyInitialOrInheritedValue(const Styl ePropertyShorthand& shorthand) const
832 { 832 {
833 ASSERT(shorthand.length() > 0); 833 ASSERT(shorthand.length() > 0);
834 bool isImportant = m_propertySet.propertyIsImportant(shorthand.properties()[ 0]); 834 bool isImportant = m_propertySet.propertyIsImportant(shorthand.properties()[ 0]);
835 bool isInitialValue = true; 835 bool isInitialValue = true;
836 bool isInheritedValue = true; 836 bool isInheritedValue = true;
837 for (unsigned i = 0; i < shorthand.length(); ++i) { 837 for (unsigned i = 0; i < shorthand.length(); ++i) {
838 RefPtr<CSSValue> value = m_propertySet.getPropertyCSSValue(shorthand.pro perties()[i]); 838 RefPtrWillBeRawPtr<CSSValue> value = m_propertySet.getPropertyCSSValue(s horthand.properties()[i]);
839 if (!value) 839 if (!value)
840 return false; 840 return false;
841 if (!value->isInitialValue()) 841 if (!value->isInitialValue())
842 isInitialValue = false; 842 isInitialValue = false;
843 if (!value->isInheritedValue()) 843 if (!value->isInheritedValue())
844 isInheritedValue = false; 844 isInheritedValue = false;
845 if (isImportant != m_propertySet.propertyIsImportant(shorthand.propertie s()[i])) 845 if (isImportant != m_propertySet.propertyIsImportant(shorthand.propertie s()[i]))
846 return false; 846 return false;
847 } 847 }
848 return isInitialValue || isInheritedValue; 848 return isInitialValue || isInheritedValue;
849 } 849 }
850 850
851 } 851 }
OLDNEW
« no previous file with comments | « Source/core/css/CSSValueList.cpp ('k') | Source/core/css/StylePropertySet.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698