diff --git a/content/html/content/src/nsGenericHTMLElement.cpp b/content/html/content/src/nsGenericHTMLElement.cpp
index 156c1ea88a1..04d7ab84e26 100644
--- a/content/html/content/src/nsGenericHTMLElement.cpp
+++ b/content/html/content/src/nsGenericHTMLElement.cpp
@@ -151,23 +151,18 @@ nsDOMCSSAttributeDeclaration::RemoveProperty(const nsString& aPropertyName,
if (doc)
doc->BeginUpdate();
+ PRInt32 hint;
+ decl->GetStyleImpact(&hint);
+
nsCSSProperty prop = nsCSSProps::LookupProperty(aPropertyName);
nsCSSValue val;
-
-#if 0 // Once nsICSSDeclaration has a RemoveProperty this ifdef should be removed
rv = decl->RemoveProperty(prop, val);
-#else
- rv = NS_ERROR_NOT_IMPLEMENTED;
-#endif
-
if (NS_FAILED(rv))
return rv;
val.ToString(aReturn, prop);
if (doc) {
- PRInt32 hint;
- decl->GetStyleImpact(&hint);
doc->AttributeChanged(mContent, kNameSpaceID_None, nsHTMLAtoms::style,
hint);
diff --git a/content/html/style/src/nsCSSDeclaration.cpp b/content/html/style/src/nsCSSDeclaration.cpp
index 6225323157a..19ce376350f 100644
--- a/content/html/style/src/nsCSSDeclaration.cpp
+++ b/content/html/style/src/nsCSSDeclaration.cpp
@@ -937,6 +937,7 @@ public:
NS_IMETHOD AppendStructValue(nsCSSProperty aProperty, void* aStruct);
NS_IMETHOD SetValueImportant(nsCSSProperty aProperty);
NS_IMETHOD AppendComment(const nsString& aComment);
+ NS_IMETHOD RemoveProperty(nsCSSProperty aProperty, nsCSSValue& aValue);
NS_IMETHOD GetValue(nsCSSProperty aProperty, nsCSSValue& aValue);
NS_IMETHOD GetValue(nsCSSProperty aProperty, nsString& aValue);
@@ -962,6 +963,9 @@ public:
NS_IMETHOD GetStyleImpact(PRInt32* aHint) const;
+protected:
+ nsresult RemoveProperty(nsCSSProperty aProperty);
+
private:
CSSDeclarationImpl& operator=(const CSSDeclarationImpl& aCopy);
PRBool operator==(const CSSDeclarationImpl& aCopy) const;
@@ -1700,6 +1704,7 @@ CSSDeclarationImpl::AppendValue(nsCSSProperty aProperty, const nsCSSValue& aValu
case eCSSProperty_border_style:
case eCSSProperty_border_width:
case eCSSProperty__moz_border_radius:
+ case eCSSProperty__moz_outline_radius:
NS_ERROR("can't append shorthand properties");
// default: // XXX explicitly removing default case so compiler will help find missed props
case eCSSProperty_UNKNOWN:
@@ -2445,6 +2450,7 @@ CSSDeclarationImpl::SetValueImportant(nsCSSProperty aProperty)
case eCSSProperty_border_spacing:
SetValueImportant(eCSSProperty_border_x_spacing);
SetValueImportant(eCSSProperty_border_y_spacing);
+ break;
case eCSSProperty_clip:
SetValueImportant(eCSSProperty_clip_top);
SetValueImportant(eCSSProperty_clip_right);
@@ -2555,6 +2561,698 @@ CSSDeclarationImpl::SetValueImportant(nsCSSProperty aProperty)
return result;
}
+
+#define CSS_CHECK(data) \
+ if (nsnull == m##data) { \
+ result = NS_ERROR_NOT_AVAILABLE; \
+ } \
+ else
+
+#define CSS_CHECK_RECT(data) \
+ if (nsnull == data) { \
+ result = NS_ERROR_NOT_AVAILABLE; \
+ } \
+ else
+
+#define CSS_CHECK_DATA(data,type) \
+ if (nsnull == data) { \
+ result = NS_ERROR_NOT_AVAILABLE; \
+ } \
+ else
+
+
+nsresult
+CSSDeclarationImpl::RemoveProperty(nsCSSProperty aProperty)
+{
+ nsresult result = NS_OK;
+
+ switch (aProperty) {
+ // nsCSSFont
+ case eCSSProperty_font_family:
+ case eCSSProperty_font_style:
+ case eCSSProperty_font_variant:
+ case eCSSProperty_font_weight:
+ case eCSSProperty_font_size:
+ case eCSSProperty_font_size_adjust:
+ case eCSSProperty_font_stretch:
+ CSS_CHECK(Font) {
+ switch (aProperty) {
+ case eCSSProperty_font_family: mFont->mFamily.Reset(); break;
+ case eCSSProperty_font_style: mFont->mStyle.Reset(); break;
+ case eCSSProperty_font_variant: mFont->mVariant.Reset(); break;
+ case eCSSProperty_font_weight: mFont->mWeight.Reset(); break;
+ case eCSSProperty_font_size: mFont->mSize.Reset(); break;
+ case eCSSProperty_font_size_adjust: mFont->mSizeAdjust.Reset(); break;
+ case eCSSProperty_font_stretch: mFont->mStretch.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSColor
+ case eCSSProperty_color:
+ case eCSSProperty_background_color:
+ case eCSSProperty_background_image:
+ case eCSSProperty_background_repeat:
+ case eCSSProperty_background_attachment:
+ case eCSSProperty_background_x_position:
+ case eCSSProperty_background_y_position:
+ case eCSSProperty_cursor:
+ case eCSSProperty_opacity:
+ CSS_CHECK(Color) {
+ switch (aProperty) {
+ case eCSSProperty_color: mColor->mColor.Reset(); break;
+ case eCSSProperty_background_color: mColor->mBackColor.Reset(); break;
+ case eCSSProperty_background_image: mColor->mBackImage.Reset(); break;
+ case eCSSProperty_background_repeat: mColor->mBackRepeat.Reset(); break;
+ case eCSSProperty_background_attachment: mColor->mBackAttachment.Reset(); break;
+ case eCSSProperty_background_x_position: mColor->mBackPositionX.Reset(); break;
+ case eCSSProperty_background_y_position: mColor->mBackPositionY.Reset(); break;
+ case eCSSProperty_cursor:
+ CSS_CHECK_DATA(mColor->mCursor, nsCSSValueList) {
+ mColor->mCursor->mValue.Reset();
+ CSS_IF_DELETE(mColor->mCursor->mNext);
+ }
+ break;
+ case eCSSProperty_opacity: mColor->mOpacity.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSText
+ case eCSSProperty_word_spacing:
+ case eCSSProperty_letter_spacing:
+ case eCSSProperty_text_decoration:
+ case eCSSProperty_vertical_align:
+ case eCSSProperty_text_transform:
+ case eCSSProperty_text_align:
+ case eCSSProperty_text_indent:
+ case eCSSProperty_unicode_bidi:
+ case eCSSProperty_line_height:
+ case eCSSProperty_white_space:
+ CSS_CHECK(Text) {
+ switch (aProperty) {
+ case eCSSProperty_word_spacing: mText->mWordSpacing.Reset(); break;
+ case eCSSProperty_letter_spacing: mText->mLetterSpacing.Reset(); break;
+ case eCSSProperty_text_decoration: mText->mDecoration.Reset(); break;
+ case eCSSProperty_vertical_align: mText->mVerticalAlign.Reset(); break;
+ case eCSSProperty_text_transform: mText->mTextTransform.Reset(); break;
+ case eCSSProperty_text_align: mText->mTextAlign.Reset(); break;
+ case eCSSProperty_text_indent: mText->mTextIndent.Reset(); break;
+ case eCSSProperty_unicode_bidi: mText->mUnicodeBidi.Reset(); break;
+ case eCSSProperty_line_height: mText->mLineHeight.Reset(); break;
+ case eCSSProperty_white_space: mText->mWhiteSpace.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ case eCSSProperty_text_shadow_color:
+ case eCSSProperty_text_shadow_radius:
+ case eCSSProperty_text_shadow_x:
+ case eCSSProperty_text_shadow_y:
+ CSS_CHECK(Text) {
+ CSS_CHECK_DATA(mText->mTextShadow, nsCSSShadow) {
+ switch (aProperty) {
+ case eCSSProperty_text_shadow_color: mText->mTextShadow->mColor.Reset(); break;
+ case eCSSProperty_text_shadow_radius: mText->mTextShadow->mRadius.Reset(); break;
+ case eCSSProperty_text_shadow_x: mText->mTextShadow->mXOffset.Reset(); break;
+ case eCSSProperty_text_shadow_y: mText->mTextShadow->mYOffset.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ CSS_IF_DELETE(mText->mTextShadow->mNext);
+ }
+ }
+ break;
+
+ // nsCSSDisplay
+ case eCSSProperty_float:
+ case eCSSProperty_clear:
+ case eCSSProperty_display:
+ case eCSSProperty_direction:
+ case eCSSProperty_visibility:
+ case eCSSProperty_overflow:
+ CSS_CHECK(Display) {
+ switch (aProperty) {
+ case eCSSProperty_float: mDisplay->mFloat.Reset(); break;
+ case eCSSProperty_clear: mDisplay->mClear.Reset(); break;
+ case eCSSProperty_display: mDisplay->mDisplay.Reset(); break;
+ case eCSSProperty_direction: mDisplay->mDirection.Reset(); break;
+ case eCSSProperty_visibility: mDisplay->mVisibility.Reset(); break;
+ case eCSSProperty_overflow: mDisplay->mOverflow.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ case eCSSProperty_clip_top:
+ case eCSSProperty_clip_right:
+ case eCSSProperty_clip_bottom:
+ case eCSSProperty_clip_left:
+ CSS_CHECK(Display) {
+ CSS_CHECK_RECT(mDisplay->mClip) {
+ switch(aProperty) {
+ case eCSSProperty_clip_top: mDisplay->mClip->mTop.Reset(); break;
+ case eCSSProperty_clip_right: mDisplay->mClip->mRight.Reset(); break;
+ case eCSSProperty_clip_bottom: mDisplay->mClip->mBottom.Reset(); break;
+ case eCSSProperty_clip_left: mDisplay->mClip->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ // nsCSSMargin
+ case eCSSProperty_margin_top:
+ case eCSSProperty_margin_right:
+ case eCSSProperty_margin_bottom:
+ case eCSSProperty_margin_left:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mMargin) {
+ switch (aProperty) {
+ case eCSSProperty_margin_top: mMargin->mMargin->mTop.Reset(); break;
+ case eCSSProperty_margin_right: mMargin->mMargin->mRight.Reset(); break;
+ case eCSSProperty_margin_bottom: mMargin->mMargin->mBottom.Reset(); break;
+ case eCSSProperty_margin_left: mMargin->mMargin->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty_padding_top:
+ case eCSSProperty_padding_right:
+ case eCSSProperty_padding_bottom:
+ case eCSSProperty_padding_left:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mPadding) {
+ switch (aProperty) {
+ case eCSSProperty_padding_top: mMargin->mPadding->mTop.Reset(); break;
+ case eCSSProperty_padding_right: mMargin->mPadding->mRight.Reset(); break;
+ case eCSSProperty_padding_bottom: mMargin->mPadding->mBottom.Reset(); break;
+ case eCSSProperty_padding_left: mMargin->mPadding->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty_border_top_width:
+ case eCSSProperty_border_right_width:
+ case eCSSProperty_border_bottom_width:
+ case eCSSProperty_border_left_width:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mBorderWidth) {
+ switch (aProperty) {
+ case eCSSProperty_border_top_width: mMargin->mBorderWidth->mTop.Reset(); break;
+ case eCSSProperty_border_right_width: mMargin->mBorderWidth->mRight.Reset(); break;
+ case eCSSProperty_border_bottom_width: mMargin->mBorderWidth->mBottom.Reset(); break;
+ case eCSSProperty_border_left_width: mMargin->mBorderWidth->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty_border_top_color:
+ case eCSSProperty_border_right_color:
+ case eCSSProperty_border_bottom_color:
+ case eCSSProperty_border_left_color:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mBorderColor) {
+ switch (aProperty) {
+ case eCSSProperty_border_top_color: mMargin->mBorderColor->mTop.Reset(); break;
+ case eCSSProperty_border_right_color: mMargin->mBorderColor->mRight.Reset(); break;
+ case eCSSProperty_border_bottom_color: mMargin->mBorderColor->mBottom.Reset(); break;
+ case eCSSProperty_border_left_color: mMargin->mBorderColor->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty_border_top_style:
+ case eCSSProperty_border_right_style:
+ case eCSSProperty_border_bottom_style:
+ case eCSSProperty_border_left_style:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mBorderStyle) {
+ switch (aProperty) {
+ case eCSSProperty_border_top_style: mMargin->mBorderStyle->mTop.Reset(); break;
+ case eCSSProperty_border_right_style: mMargin->mBorderStyle->mRight.Reset(); break;
+ case eCSSProperty_border_bottom_style: mMargin->mBorderStyle->mBottom.Reset(); break;
+ case eCSSProperty_border_left_style: mMargin->mBorderStyle->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty__moz_border_radius_topLeft:
+ case eCSSProperty__moz_border_radius_topRight:
+ case eCSSProperty__moz_border_radius_bottomRight:
+ case eCSSProperty__moz_border_radius_bottomLeft:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mBorderRadius) {
+ switch (aProperty) {
+ case eCSSProperty__moz_border_radius_topLeft: mMargin->mBorderRadius->mTop.Reset(); break;
+ case eCSSProperty__moz_border_radius_topRight: mMargin->mBorderRadius->mRight.Reset(); break;
+ case eCSSProperty__moz_border_radius_bottomRight: mMargin->mBorderRadius->mBottom.Reset(); break;
+ case eCSSProperty__moz_border_radius_bottomLeft: mMargin->mBorderRadius->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty__moz_outline_radius_topLeft:
+ case eCSSProperty__moz_outline_radius_topRight:
+ case eCSSProperty__moz_outline_radius_bottomRight:
+ case eCSSProperty__moz_outline_radius_bottomLeft:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mOutlineRadius) {
+ switch (aProperty) {
+ case eCSSProperty__moz_outline_radius_topLeft: mMargin->mOutlineRadius->mTop.Reset(); break;
+ case eCSSProperty__moz_outline_radius_topRight: mMargin->mOutlineRadius->mRight.Reset(); break;
+ case eCSSProperty__moz_outline_radius_bottomRight: mMargin->mOutlineRadius->mBottom.Reset(); break;
+ case eCSSProperty__moz_outline_radius_bottomLeft: mMargin->mOutlineRadius->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty_outline_width:
+ case eCSSProperty_outline_color:
+ case eCSSProperty_outline_style:
+ case eCSSProperty_float_edge:
+ CSS_CHECK(Margin) {
+ switch (aProperty) {
+ case eCSSProperty_outline_width: mMargin->mOutlineWidth.Reset(); break;
+ case eCSSProperty_outline_color: mMargin->mOutlineColor.Reset(); break;
+ case eCSSProperty_outline_style: mMargin->mOutlineStyle.Reset(); break;
+ case eCSSProperty_float_edge: mMargin->mFloatEdge.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSPosition
+ case eCSSProperty_position:
+ case eCSSProperty_width:
+ case eCSSProperty_min_width:
+ case eCSSProperty_max_width:
+ case eCSSProperty_height:
+ case eCSSProperty_min_height:
+ case eCSSProperty_max_height:
+ case eCSSProperty_box_sizing:
+ case eCSSProperty_z_index:
+ CSS_CHECK(Position) {
+ switch (aProperty) {
+ case eCSSProperty_position: mPosition->mPosition.Reset(); break;
+ case eCSSProperty_width: mPosition->mWidth.Reset(); break;
+ case eCSSProperty_min_width: mPosition->mMinWidth.Reset(); break;
+ case eCSSProperty_max_width: mPosition->mMaxWidth.Reset(); break;
+ case eCSSProperty_height: mPosition->mHeight.Reset(); break;
+ case eCSSProperty_min_height: mPosition->mMinHeight.Reset(); break;
+ case eCSSProperty_max_height: mPosition->mMaxHeight.Reset(); break;
+ case eCSSProperty_box_sizing: mPosition->mBoxSizing.Reset(); break;
+ case eCSSProperty_z_index: mPosition->mZIndex.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ case eCSSProperty_top:
+ case eCSSProperty_right:
+ case eCSSProperty_bottom:
+ case eCSSProperty_left:
+ CSS_CHECK(Position) {
+ CSS_CHECK_RECT(mPosition->mOffset) {
+ switch (aProperty) {
+ case eCSSProperty_top: mPosition->mOffset->mTop.Reset(); break;
+ case eCSSProperty_right: mPosition->mOffset->mRight.Reset(); break;
+ case eCSSProperty_bottom: mPosition->mOffset->mBottom.Reset(); break;
+ case eCSSProperty_left: mPosition->mOffset->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ // nsCSSList
+ case eCSSProperty_list_style_type:
+ case eCSSProperty_list_style_image:
+ case eCSSProperty_list_style_position:
+ CSS_CHECK(List) {
+ switch (aProperty) {
+ case eCSSProperty_list_style_type: mList->mType.Reset(); break;
+ case eCSSProperty_list_style_image: mList->mImage.Reset(); break;
+ case eCSSProperty_list_style_position: mList->mPosition.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSTable
+ case eCSSProperty_border_collapse:
+ case eCSSProperty_border_x_spacing:
+ case eCSSProperty_border_y_spacing:
+ case eCSSProperty_caption_side:
+ case eCSSProperty_empty_cells:
+ case eCSSProperty_table_layout:
+ CSS_CHECK(Table) {
+ switch (aProperty) {
+ case eCSSProperty_border_collapse: mTable->mBorderCollapse.Reset(); break;
+ case eCSSProperty_border_x_spacing: mTable->mBorderSpacingX.Reset(); break;
+ case eCSSProperty_border_y_spacing: mTable->mBorderSpacingY.Reset(); break;
+ case eCSSProperty_caption_side: mTable->mCaptionSide.Reset(); break;
+ case eCSSProperty_empty_cells: mTable->mEmptyCells.Reset(); break;
+ case eCSSProperty_table_layout: mTable->mLayout.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSBreaks
+ case eCSSProperty_orphans:
+ case eCSSProperty_widows:
+ case eCSSProperty_page:
+ case eCSSProperty_page_break_after:
+ case eCSSProperty_page_break_before:
+ case eCSSProperty_page_break_inside:
+ CSS_CHECK(Breaks) {
+ switch (aProperty) {
+ case eCSSProperty_orphans: mBreaks->mOrphans.Reset(); break;
+ case eCSSProperty_widows: mBreaks->mWidows.Reset(); break;
+ case eCSSProperty_page: mBreaks->mPage.Reset(); break;
+ case eCSSProperty_page_break_after: mBreaks->mPageBreakAfter.Reset(); break;
+ case eCSSProperty_page_break_before: mBreaks->mPageBreakBefore.Reset(); break;
+ case eCSSProperty_page_break_inside: mBreaks->mPageBreakInside.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSPage
+ case eCSSProperty_marks:
+ case eCSSProperty_size_width:
+ case eCSSProperty_size_height:
+ CSS_CHECK(Page) {
+ switch (aProperty) {
+ case eCSSProperty_marks: mPage->mMarks.Reset(); break;
+ case eCSSProperty_size_width: mPage->mSizeWidth.Reset(); break;
+ case eCSSProperty_size_height: mPage->mSizeHeight.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSContent
+ case eCSSProperty_content:
+ case eCSSProperty_counter_increment:
+ case eCSSProperty_counter_reset:
+ case eCSSProperty_marker_offset:
+ case eCSSProperty_quotes_open:
+ case eCSSProperty_quotes_close:
+ CSS_CHECK(Content) {
+ switch (aProperty) {
+ case eCSSProperty_content:
+ CSS_CHECK_DATA(mContent->mContent, nsCSSValueList) {
+ mContent->mContent->mValue.Reset();
+ CSS_IF_DELETE(mContent->mContent->mNext);
+ }
+ break;
+ case eCSSProperty_counter_increment:
+ CSS_CHECK_DATA(mContent->mCounterIncrement, nsCSSCounterData) {
+ mContent->mCounterIncrement->mCounter.Reset();
+ CSS_IF_DELETE(mContent->mCounterIncrement->mNext);
+ }
+ break;
+ case eCSSProperty_counter_reset:
+ CSS_CHECK_DATA(mContent->mCounterReset, nsCSSCounterData) {
+ mContent->mCounterReset->mCounter.Reset();
+ CSS_IF_DELETE(mContent->mCounterReset->mNext);
+ }
+ break;
+ case eCSSProperty_marker_offset: mContent->mMarkerOffset.Reset(); break;
+ case eCSSProperty_quotes_open:
+ CSS_CHECK_DATA(mContent->mQuotes, nsCSSQuotes) {
+ mContent->mQuotes->mOpen.Reset();
+ CSS_IF_DELETE(mContent->mQuotes->mNext);
+ }
+ break;
+ case eCSSProperty_quotes_close:
+ CSS_CHECK_DATA(mContent->mQuotes, nsCSSQuotes) {
+ mContent->mQuotes->mClose.Reset();
+ CSS_IF_DELETE(mContent->mQuotes->mNext);
+ }
+ break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSUserInterface
+ case eCSSProperty_user_input:
+ case eCSSProperty_user_modify:
+ case eCSSProperty_user_select:
+ case eCSSProperty_key_equivalent:
+ case eCSSProperty_user_focus:
+ case eCSSProperty_resizer:
+ case eCSSProperty_behavior:
+ CSS_CHECK(UserInterface) {
+ switch (aProperty) {
+ case eCSSProperty_user_input: mUserInterface->mUserInput.Reset(); break;
+ case eCSSProperty_user_modify: mUserInterface->mUserModify.Reset(); break;
+ case eCSSProperty_user_select: mUserInterface->mUserSelect.Reset(); break;
+ case eCSSProperty_key_equivalent:
+ CSS_CHECK_DATA(mUserInterface->mKeyEquivalent, nsCSSValueList) {
+ mUserInterface->mKeyEquivalent->mValue.Reset();
+ CSS_IF_DELETE(mUserInterface->mKeyEquivalent->mNext);
+ }
+ break;
+ case eCSSProperty_user_focus: mUserInterface->mUserFocus.Reset(); break;
+ case eCSSProperty_resizer: mUserInterface->mResizer.Reset(); break;
+ case eCSSProperty_behavior:
+ mUserInterface->mBehavior.Reset();
+ break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSAural
+ case eCSSProperty_azimuth:
+ case eCSSProperty_elevation:
+ case eCSSProperty_cue_after:
+ case eCSSProperty_cue_before:
+ case eCSSProperty_pause_after:
+ case eCSSProperty_pause_before:
+ case eCSSProperty_pitch:
+ case eCSSProperty_pitch_range:
+ case eCSSProperty_play_during:
+ case eCSSProperty_play_during_flags:
+ case eCSSProperty_richness:
+ case eCSSProperty_speak:
+ case eCSSProperty_speak_header:
+ case eCSSProperty_speak_numeral:
+ case eCSSProperty_speak_punctuation:
+ case eCSSProperty_speech_rate:
+ case eCSSProperty_stress:
+ case eCSSProperty_voice_family:
+ case eCSSProperty_volume:
+ CSS_CHECK(Aural) {
+ switch (aProperty) {
+ case eCSSProperty_azimuth: mAural->mAzimuth.Reset(); break;
+ case eCSSProperty_elevation: mAural->mElevation.Reset(); break;
+ case eCSSProperty_cue_after: mAural->mCueAfter.Reset(); break;
+ case eCSSProperty_cue_before: mAural->mCueBefore.Reset(); break;
+ case eCSSProperty_pause_after: mAural->mPauseAfter.Reset(); break;
+ case eCSSProperty_pause_before: mAural->mPauseBefore.Reset(); break;
+ case eCSSProperty_pitch: mAural->mPitch.Reset(); break;
+ case eCSSProperty_pitch_range: mAural->mPitchRange.Reset(); break;
+ case eCSSProperty_play_during: mAural->mPlayDuring.Reset(); break;
+ case eCSSProperty_play_during_flags: mAural->mPlayDuringFlags.Reset(); break;
+ case eCSSProperty_richness: mAural->mRichness.Reset(); break;
+ case eCSSProperty_speak: mAural->mSpeak.Reset(); break;
+ case eCSSProperty_speak_header: mAural->mSpeakHeader.Reset(); break;
+ case eCSSProperty_speak_numeral: mAural->mSpeakNumeral.Reset(); break;
+ case eCSSProperty_speak_punctuation: mAural->mSpeakPunctuation.Reset(); break;
+ case eCSSProperty_speech_rate: mAural->mSpeechRate.Reset(); break;
+ case eCSSProperty_stress: mAural->mStress.Reset(); break;
+ case eCSSProperty_voice_family: mAural->mVoiceFamily.Reset(); break;
+ case eCSSProperty_volume: mAural->mVolume.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // Shorthands
+ case eCSSProperty_background:
+ RemoveProperty(eCSSProperty_background_color);
+ RemoveProperty(eCSSProperty_background_image);
+ RemoveProperty(eCSSProperty_background_repeat);
+ RemoveProperty(eCSSProperty_background_attachment);
+ RemoveProperty(eCSSProperty_background_x_position);
+ RemoveProperty(eCSSProperty_background_y_position);
+ break;
+ case eCSSProperty_border:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mBorderWidth);
+ CSS_IF_DELETE(mMargin->mBorderStyle);
+ CSS_IF_DELETE(mMargin->mBorderColor);
+ }
+ break;
+ case eCSSProperty_border_spacing:
+ RemoveProperty(eCSSProperty_border_x_spacing);
+ RemoveProperty(eCSSProperty_border_y_spacing);
+ break;
+ case eCSSProperty_clip:
+ CSS_CHECK(Display) {
+ CSS_IF_DELETE(mDisplay->mClip);
+ }
+ break;
+ case eCSSProperty_cue:
+ RemoveProperty(eCSSProperty_cue_after);
+ RemoveProperty(eCSSProperty_cue_before);
+ break;
+ case eCSSProperty_font:
+ RemoveProperty(eCSSProperty_font_family);
+ RemoveProperty(eCSSProperty_font_style);
+ RemoveProperty(eCSSProperty_font_variant);
+ RemoveProperty(eCSSProperty_font_weight);
+ RemoveProperty(eCSSProperty_font_size);
+ RemoveProperty(eCSSProperty_line_height);
+ break;
+ case eCSSProperty_list_style:
+ RemoveProperty(eCSSProperty_list_style_type);
+ RemoveProperty(eCSSProperty_list_style_image);
+ RemoveProperty(eCSSProperty_list_style_position);
+ break;
+ case eCSSProperty_margin:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mMargin);
+ }
+ break;
+ case eCSSProperty_outline:
+ RemoveProperty(eCSSProperty_outline_color);
+ RemoveProperty(eCSSProperty_outline_style);
+ RemoveProperty(eCSSProperty_outline_width);
+ break;
+ case eCSSProperty_padding:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mPadding);
+ }
+ break;
+ case eCSSProperty_pause:
+ RemoveProperty(eCSSProperty_pause_after);
+ RemoveProperty(eCSSProperty_pause_before);
+ break;
+ case eCSSProperty_quotes:
+ CSS_CHECK(Content) {
+ CSS_IF_DELETE(mContent->mQuotes);
+ }
+ break;
+ case eCSSProperty_size:
+ RemoveProperty(eCSSProperty_size_width);
+ RemoveProperty(eCSSProperty_size_height);
+ break;
+ case eCSSProperty_text_shadow:
+ CSS_CHECK(Text) {
+ CSS_IF_DELETE(mText->mTextShadow);
+ }
+ break;
+ case eCSSProperty_background_position:
+ RemoveProperty(eCSSProperty_background_x_position);
+ RemoveProperty(eCSSProperty_background_y_position);
+ break;
+ case eCSSProperty_border_top:
+ RemoveProperty(eCSSProperty_border_top_width);
+ RemoveProperty(eCSSProperty_border_top_style);
+ RemoveProperty(eCSSProperty_border_top_color);
+ break;
+ case eCSSProperty_border_right:
+ RemoveProperty(eCSSProperty_border_right_width);
+ RemoveProperty(eCSSProperty_border_right_style);
+ RemoveProperty(eCSSProperty_border_right_color);
+ break;
+ case eCSSProperty_border_bottom:
+ RemoveProperty(eCSSProperty_border_bottom_width);
+ RemoveProperty(eCSSProperty_border_bottom_style);
+ RemoveProperty(eCSSProperty_border_bottom_color);
+ break;
+ case eCSSProperty_border_left:
+ RemoveProperty(eCSSProperty_border_left_width);
+ RemoveProperty(eCSSProperty_border_left_style);
+ RemoveProperty(eCSSProperty_border_left_color);
+ break;
+ case eCSSProperty_border_color:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mBorderColor);
+ }
+ break;
+ case eCSSProperty_border_style:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mBorderStyle);
+ }
+ break;
+ case eCSSProperty_border_width:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mBorderWidth);
+ }
+ break;
+ case eCSSProperty__moz_border_radius:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mBorderRadius);
+ }
+ break;
+ case eCSSProperty__moz_outline_radius:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mOutlineRadius);
+ }
+ break;
+// default: // XXX explicitly removing default case so compiler will help find missed props
+ case eCSSProperty_UNKNOWN:
+ case eCSSProperty_COUNT:
+ result = NS_ERROR_ILLEGAL_VALUE;
+ break;
+ }
+
+ if (NS_OK == result) {
+ if (nsnull != mOrder) {
+ PRInt32 index = mOrder->IndexOf((void*)aProperty);
+ if (-1 != index) {
+ mOrder->RemoveElementAt(index);
+ }
+ }
+ }
+ return result;
+}
+
+
+NS_IMETHODIMP
+CSSDeclarationImpl::RemoveProperty(nsCSSProperty aProperty, nsCSSValue& aValue)
+{
+ nsresult result = NS_OK;
+
+ PRBool isImportant = PR_FALSE;
+ GetValueIsImportant(aProperty, isImportant);
+ if (isImportant) {
+ result = mImportant->GetValue(aProperty, aValue);
+ if (NS_SUCCEEDED(result)) {
+ result = mImportant->RemoveProperty(aProperty);
+ }
+ } else {
+ result = GetValue(aProperty, aValue);
+ if (NS_SUCCEEDED(result)) {
+ result = RemoveProperty(aProperty);
+ }
+ }
+ return result;
+}
+
NS_IMETHODIMP
CSSDeclarationImpl::AppendComment(const nsString& aComment)
{
diff --git a/content/html/style/src/nsCSSStruct.cpp b/content/html/style/src/nsCSSStruct.cpp
index 6225323157a..19ce376350f 100644
--- a/content/html/style/src/nsCSSStruct.cpp
+++ b/content/html/style/src/nsCSSStruct.cpp
@@ -937,6 +937,7 @@ public:
NS_IMETHOD AppendStructValue(nsCSSProperty aProperty, void* aStruct);
NS_IMETHOD SetValueImportant(nsCSSProperty aProperty);
NS_IMETHOD AppendComment(const nsString& aComment);
+ NS_IMETHOD RemoveProperty(nsCSSProperty aProperty, nsCSSValue& aValue);
NS_IMETHOD GetValue(nsCSSProperty aProperty, nsCSSValue& aValue);
NS_IMETHOD GetValue(nsCSSProperty aProperty, nsString& aValue);
@@ -962,6 +963,9 @@ public:
NS_IMETHOD GetStyleImpact(PRInt32* aHint) const;
+protected:
+ nsresult RemoveProperty(nsCSSProperty aProperty);
+
private:
CSSDeclarationImpl& operator=(const CSSDeclarationImpl& aCopy);
PRBool operator==(const CSSDeclarationImpl& aCopy) const;
@@ -1700,6 +1704,7 @@ CSSDeclarationImpl::AppendValue(nsCSSProperty aProperty, const nsCSSValue& aValu
case eCSSProperty_border_style:
case eCSSProperty_border_width:
case eCSSProperty__moz_border_radius:
+ case eCSSProperty__moz_outline_radius:
NS_ERROR("can't append shorthand properties");
// default: // XXX explicitly removing default case so compiler will help find missed props
case eCSSProperty_UNKNOWN:
@@ -2445,6 +2450,7 @@ CSSDeclarationImpl::SetValueImportant(nsCSSProperty aProperty)
case eCSSProperty_border_spacing:
SetValueImportant(eCSSProperty_border_x_spacing);
SetValueImportant(eCSSProperty_border_y_spacing);
+ break;
case eCSSProperty_clip:
SetValueImportant(eCSSProperty_clip_top);
SetValueImportant(eCSSProperty_clip_right);
@@ -2555,6 +2561,698 @@ CSSDeclarationImpl::SetValueImportant(nsCSSProperty aProperty)
return result;
}
+
+#define CSS_CHECK(data) \
+ if (nsnull == m##data) { \
+ result = NS_ERROR_NOT_AVAILABLE; \
+ } \
+ else
+
+#define CSS_CHECK_RECT(data) \
+ if (nsnull == data) { \
+ result = NS_ERROR_NOT_AVAILABLE; \
+ } \
+ else
+
+#define CSS_CHECK_DATA(data,type) \
+ if (nsnull == data) { \
+ result = NS_ERROR_NOT_AVAILABLE; \
+ } \
+ else
+
+
+nsresult
+CSSDeclarationImpl::RemoveProperty(nsCSSProperty aProperty)
+{
+ nsresult result = NS_OK;
+
+ switch (aProperty) {
+ // nsCSSFont
+ case eCSSProperty_font_family:
+ case eCSSProperty_font_style:
+ case eCSSProperty_font_variant:
+ case eCSSProperty_font_weight:
+ case eCSSProperty_font_size:
+ case eCSSProperty_font_size_adjust:
+ case eCSSProperty_font_stretch:
+ CSS_CHECK(Font) {
+ switch (aProperty) {
+ case eCSSProperty_font_family: mFont->mFamily.Reset(); break;
+ case eCSSProperty_font_style: mFont->mStyle.Reset(); break;
+ case eCSSProperty_font_variant: mFont->mVariant.Reset(); break;
+ case eCSSProperty_font_weight: mFont->mWeight.Reset(); break;
+ case eCSSProperty_font_size: mFont->mSize.Reset(); break;
+ case eCSSProperty_font_size_adjust: mFont->mSizeAdjust.Reset(); break;
+ case eCSSProperty_font_stretch: mFont->mStretch.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSColor
+ case eCSSProperty_color:
+ case eCSSProperty_background_color:
+ case eCSSProperty_background_image:
+ case eCSSProperty_background_repeat:
+ case eCSSProperty_background_attachment:
+ case eCSSProperty_background_x_position:
+ case eCSSProperty_background_y_position:
+ case eCSSProperty_cursor:
+ case eCSSProperty_opacity:
+ CSS_CHECK(Color) {
+ switch (aProperty) {
+ case eCSSProperty_color: mColor->mColor.Reset(); break;
+ case eCSSProperty_background_color: mColor->mBackColor.Reset(); break;
+ case eCSSProperty_background_image: mColor->mBackImage.Reset(); break;
+ case eCSSProperty_background_repeat: mColor->mBackRepeat.Reset(); break;
+ case eCSSProperty_background_attachment: mColor->mBackAttachment.Reset(); break;
+ case eCSSProperty_background_x_position: mColor->mBackPositionX.Reset(); break;
+ case eCSSProperty_background_y_position: mColor->mBackPositionY.Reset(); break;
+ case eCSSProperty_cursor:
+ CSS_CHECK_DATA(mColor->mCursor, nsCSSValueList) {
+ mColor->mCursor->mValue.Reset();
+ CSS_IF_DELETE(mColor->mCursor->mNext);
+ }
+ break;
+ case eCSSProperty_opacity: mColor->mOpacity.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSText
+ case eCSSProperty_word_spacing:
+ case eCSSProperty_letter_spacing:
+ case eCSSProperty_text_decoration:
+ case eCSSProperty_vertical_align:
+ case eCSSProperty_text_transform:
+ case eCSSProperty_text_align:
+ case eCSSProperty_text_indent:
+ case eCSSProperty_unicode_bidi:
+ case eCSSProperty_line_height:
+ case eCSSProperty_white_space:
+ CSS_CHECK(Text) {
+ switch (aProperty) {
+ case eCSSProperty_word_spacing: mText->mWordSpacing.Reset(); break;
+ case eCSSProperty_letter_spacing: mText->mLetterSpacing.Reset(); break;
+ case eCSSProperty_text_decoration: mText->mDecoration.Reset(); break;
+ case eCSSProperty_vertical_align: mText->mVerticalAlign.Reset(); break;
+ case eCSSProperty_text_transform: mText->mTextTransform.Reset(); break;
+ case eCSSProperty_text_align: mText->mTextAlign.Reset(); break;
+ case eCSSProperty_text_indent: mText->mTextIndent.Reset(); break;
+ case eCSSProperty_unicode_bidi: mText->mUnicodeBidi.Reset(); break;
+ case eCSSProperty_line_height: mText->mLineHeight.Reset(); break;
+ case eCSSProperty_white_space: mText->mWhiteSpace.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ case eCSSProperty_text_shadow_color:
+ case eCSSProperty_text_shadow_radius:
+ case eCSSProperty_text_shadow_x:
+ case eCSSProperty_text_shadow_y:
+ CSS_CHECK(Text) {
+ CSS_CHECK_DATA(mText->mTextShadow, nsCSSShadow) {
+ switch (aProperty) {
+ case eCSSProperty_text_shadow_color: mText->mTextShadow->mColor.Reset(); break;
+ case eCSSProperty_text_shadow_radius: mText->mTextShadow->mRadius.Reset(); break;
+ case eCSSProperty_text_shadow_x: mText->mTextShadow->mXOffset.Reset(); break;
+ case eCSSProperty_text_shadow_y: mText->mTextShadow->mYOffset.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ CSS_IF_DELETE(mText->mTextShadow->mNext);
+ }
+ }
+ break;
+
+ // nsCSSDisplay
+ case eCSSProperty_float:
+ case eCSSProperty_clear:
+ case eCSSProperty_display:
+ case eCSSProperty_direction:
+ case eCSSProperty_visibility:
+ case eCSSProperty_overflow:
+ CSS_CHECK(Display) {
+ switch (aProperty) {
+ case eCSSProperty_float: mDisplay->mFloat.Reset(); break;
+ case eCSSProperty_clear: mDisplay->mClear.Reset(); break;
+ case eCSSProperty_display: mDisplay->mDisplay.Reset(); break;
+ case eCSSProperty_direction: mDisplay->mDirection.Reset(); break;
+ case eCSSProperty_visibility: mDisplay->mVisibility.Reset(); break;
+ case eCSSProperty_overflow: mDisplay->mOverflow.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ case eCSSProperty_clip_top:
+ case eCSSProperty_clip_right:
+ case eCSSProperty_clip_bottom:
+ case eCSSProperty_clip_left:
+ CSS_CHECK(Display) {
+ CSS_CHECK_RECT(mDisplay->mClip) {
+ switch(aProperty) {
+ case eCSSProperty_clip_top: mDisplay->mClip->mTop.Reset(); break;
+ case eCSSProperty_clip_right: mDisplay->mClip->mRight.Reset(); break;
+ case eCSSProperty_clip_bottom: mDisplay->mClip->mBottom.Reset(); break;
+ case eCSSProperty_clip_left: mDisplay->mClip->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ // nsCSSMargin
+ case eCSSProperty_margin_top:
+ case eCSSProperty_margin_right:
+ case eCSSProperty_margin_bottom:
+ case eCSSProperty_margin_left:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mMargin) {
+ switch (aProperty) {
+ case eCSSProperty_margin_top: mMargin->mMargin->mTop.Reset(); break;
+ case eCSSProperty_margin_right: mMargin->mMargin->mRight.Reset(); break;
+ case eCSSProperty_margin_bottom: mMargin->mMargin->mBottom.Reset(); break;
+ case eCSSProperty_margin_left: mMargin->mMargin->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty_padding_top:
+ case eCSSProperty_padding_right:
+ case eCSSProperty_padding_bottom:
+ case eCSSProperty_padding_left:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mPadding) {
+ switch (aProperty) {
+ case eCSSProperty_padding_top: mMargin->mPadding->mTop.Reset(); break;
+ case eCSSProperty_padding_right: mMargin->mPadding->mRight.Reset(); break;
+ case eCSSProperty_padding_bottom: mMargin->mPadding->mBottom.Reset(); break;
+ case eCSSProperty_padding_left: mMargin->mPadding->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty_border_top_width:
+ case eCSSProperty_border_right_width:
+ case eCSSProperty_border_bottom_width:
+ case eCSSProperty_border_left_width:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mBorderWidth) {
+ switch (aProperty) {
+ case eCSSProperty_border_top_width: mMargin->mBorderWidth->mTop.Reset(); break;
+ case eCSSProperty_border_right_width: mMargin->mBorderWidth->mRight.Reset(); break;
+ case eCSSProperty_border_bottom_width: mMargin->mBorderWidth->mBottom.Reset(); break;
+ case eCSSProperty_border_left_width: mMargin->mBorderWidth->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty_border_top_color:
+ case eCSSProperty_border_right_color:
+ case eCSSProperty_border_bottom_color:
+ case eCSSProperty_border_left_color:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mBorderColor) {
+ switch (aProperty) {
+ case eCSSProperty_border_top_color: mMargin->mBorderColor->mTop.Reset(); break;
+ case eCSSProperty_border_right_color: mMargin->mBorderColor->mRight.Reset(); break;
+ case eCSSProperty_border_bottom_color: mMargin->mBorderColor->mBottom.Reset(); break;
+ case eCSSProperty_border_left_color: mMargin->mBorderColor->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty_border_top_style:
+ case eCSSProperty_border_right_style:
+ case eCSSProperty_border_bottom_style:
+ case eCSSProperty_border_left_style:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mBorderStyle) {
+ switch (aProperty) {
+ case eCSSProperty_border_top_style: mMargin->mBorderStyle->mTop.Reset(); break;
+ case eCSSProperty_border_right_style: mMargin->mBorderStyle->mRight.Reset(); break;
+ case eCSSProperty_border_bottom_style: mMargin->mBorderStyle->mBottom.Reset(); break;
+ case eCSSProperty_border_left_style: mMargin->mBorderStyle->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty__moz_border_radius_topLeft:
+ case eCSSProperty__moz_border_radius_topRight:
+ case eCSSProperty__moz_border_radius_bottomRight:
+ case eCSSProperty__moz_border_radius_bottomLeft:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mBorderRadius) {
+ switch (aProperty) {
+ case eCSSProperty__moz_border_radius_topLeft: mMargin->mBorderRadius->mTop.Reset(); break;
+ case eCSSProperty__moz_border_radius_topRight: mMargin->mBorderRadius->mRight.Reset(); break;
+ case eCSSProperty__moz_border_radius_bottomRight: mMargin->mBorderRadius->mBottom.Reset(); break;
+ case eCSSProperty__moz_border_radius_bottomLeft: mMargin->mBorderRadius->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty__moz_outline_radius_topLeft:
+ case eCSSProperty__moz_outline_radius_topRight:
+ case eCSSProperty__moz_outline_radius_bottomRight:
+ case eCSSProperty__moz_outline_radius_bottomLeft:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mOutlineRadius) {
+ switch (aProperty) {
+ case eCSSProperty__moz_outline_radius_topLeft: mMargin->mOutlineRadius->mTop.Reset(); break;
+ case eCSSProperty__moz_outline_radius_topRight: mMargin->mOutlineRadius->mRight.Reset(); break;
+ case eCSSProperty__moz_outline_radius_bottomRight: mMargin->mOutlineRadius->mBottom.Reset(); break;
+ case eCSSProperty__moz_outline_radius_bottomLeft: mMargin->mOutlineRadius->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty_outline_width:
+ case eCSSProperty_outline_color:
+ case eCSSProperty_outline_style:
+ case eCSSProperty_float_edge:
+ CSS_CHECK(Margin) {
+ switch (aProperty) {
+ case eCSSProperty_outline_width: mMargin->mOutlineWidth.Reset(); break;
+ case eCSSProperty_outline_color: mMargin->mOutlineColor.Reset(); break;
+ case eCSSProperty_outline_style: mMargin->mOutlineStyle.Reset(); break;
+ case eCSSProperty_float_edge: mMargin->mFloatEdge.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSPosition
+ case eCSSProperty_position:
+ case eCSSProperty_width:
+ case eCSSProperty_min_width:
+ case eCSSProperty_max_width:
+ case eCSSProperty_height:
+ case eCSSProperty_min_height:
+ case eCSSProperty_max_height:
+ case eCSSProperty_box_sizing:
+ case eCSSProperty_z_index:
+ CSS_CHECK(Position) {
+ switch (aProperty) {
+ case eCSSProperty_position: mPosition->mPosition.Reset(); break;
+ case eCSSProperty_width: mPosition->mWidth.Reset(); break;
+ case eCSSProperty_min_width: mPosition->mMinWidth.Reset(); break;
+ case eCSSProperty_max_width: mPosition->mMaxWidth.Reset(); break;
+ case eCSSProperty_height: mPosition->mHeight.Reset(); break;
+ case eCSSProperty_min_height: mPosition->mMinHeight.Reset(); break;
+ case eCSSProperty_max_height: mPosition->mMaxHeight.Reset(); break;
+ case eCSSProperty_box_sizing: mPosition->mBoxSizing.Reset(); break;
+ case eCSSProperty_z_index: mPosition->mZIndex.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ case eCSSProperty_top:
+ case eCSSProperty_right:
+ case eCSSProperty_bottom:
+ case eCSSProperty_left:
+ CSS_CHECK(Position) {
+ CSS_CHECK_RECT(mPosition->mOffset) {
+ switch (aProperty) {
+ case eCSSProperty_top: mPosition->mOffset->mTop.Reset(); break;
+ case eCSSProperty_right: mPosition->mOffset->mRight.Reset(); break;
+ case eCSSProperty_bottom: mPosition->mOffset->mBottom.Reset(); break;
+ case eCSSProperty_left: mPosition->mOffset->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ // nsCSSList
+ case eCSSProperty_list_style_type:
+ case eCSSProperty_list_style_image:
+ case eCSSProperty_list_style_position:
+ CSS_CHECK(List) {
+ switch (aProperty) {
+ case eCSSProperty_list_style_type: mList->mType.Reset(); break;
+ case eCSSProperty_list_style_image: mList->mImage.Reset(); break;
+ case eCSSProperty_list_style_position: mList->mPosition.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSTable
+ case eCSSProperty_border_collapse:
+ case eCSSProperty_border_x_spacing:
+ case eCSSProperty_border_y_spacing:
+ case eCSSProperty_caption_side:
+ case eCSSProperty_empty_cells:
+ case eCSSProperty_table_layout:
+ CSS_CHECK(Table) {
+ switch (aProperty) {
+ case eCSSProperty_border_collapse: mTable->mBorderCollapse.Reset(); break;
+ case eCSSProperty_border_x_spacing: mTable->mBorderSpacingX.Reset(); break;
+ case eCSSProperty_border_y_spacing: mTable->mBorderSpacingY.Reset(); break;
+ case eCSSProperty_caption_side: mTable->mCaptionSide.Reset(); break;
+ case eCSSProperty_empty_cells: mTable->mEmptyCells.Reset(); break;
+ case eCSSProperty_table_layout: mTable->mLayout.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSBreaks
+ case eCSSProperty_orphans:
+ case eCSSProperty_widows:
+ case eCSSProperty_page:
+ case eCSSProperty_page_break_after:
+ case eCSSProperty_page_break_before:
+ case eCSSProperty_page_break_inside:
+ CSS_CHECK(Breaks) {
+ switch (aProperty) {
+ case eCSSProperty_orphans: mBreaks->mOrphans.Reset(); break;
+ case eCSSProperty_widows: mBreaks->mWidows.Reset(); break;
+ case eCSSProperty_page: mBreaks->mPage.Reset(); break;
+ case eCSSProperty_page_break_after: mBreaks->mPageBreakAfter.Reset(); break;
+ case eCSSProperty_page_break_before: mBreaks->mPageBreakBefore.Reset(); break;
+ case eCSSProperty_page_break_inside: mBreaks->mPageBreakInside.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSPage
+ case eCSSProperty_marks:
+ case eCSSProperty_size_width:
+ case eCSSProperty_size_height:
+ CSS_CHECK(Page) {
+ switch (aProperty) {
+ case eCSSProperty_marks: mPage->mMarks.Reset(); break;
+ case eCSSProperty_size_width: mPage->mSizeWidth.Reset(); break;
+ case eCSSProperty_size_height: mPage->mSizeHeight.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSContent
+ case eCSSProperty_content:
+ case eCSSProperty_counter_increment:
+ case eCSSProperty_counter_reset:
+ case eCSSProperty_marker_offset:
+ case eCSSProperty_quotes_open:
+ case eCSSProperty_quotes_close:
+ CSS_CHECK(Content) {
+ switch (aProperty) {
+ case eCSSProperty_content:
+ CSS_CHECK_DATA(mContent->mContent, nsCSSValueList) {
+ mContent->mContent->mValue.Reset();
+ CSS_IF_DELETE(mContent->mContent->mNext);
+ }
+ break;
+ case eCSSProperty_counter_increment:
+ CSS_CHECK_DATA(mContent->mCounterIncrement, nsCSSCounterData) {
+ mContent->mCounterIncrement->mCounter.Reset();
+ CSS_IF_DELETE(mContent->mCounterIncrement->mNext);
+ }
+ break;
+ case eCSSProperty_counter_reset:
+ CSS_CHECK_DATA(mContent->mCounterReset, nsCSSCounterData) {
+ mContent->mCounterReset->mCounter.Reset();
+ CSS_IF_DELETE(mContent->mCounterReset->mNext);
+ }
+ break;
+ case eCSSProperty_marker_offset: mContent->mMarkerOffset.Reset(); break;
+ case eCSSProperty_quotes_open:
+ CSS_CHECK_DATA(mContent->mQuotes, nsCSSQuotes) {
+ mContent->mQuotes->mOpen.Reset();
+ CSS_IF_DELETE(mContent->mQuotes->mNext);
+ }
+ break;
+ case eCSSProperty_quotes_close:
+ CSS_CHECK_DATA(mContent->mQuotes, nsCSSQuotes) {
+ mContent->mQuotes->mClose.Reset();
+ CSS_IF_DELETE(mContent->mQuotes->mNext);
+ }
+ break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSUserInterface
+ case eCSSProperty_user_input:
+ case eCSSProperty_user_modify:
+ case eCSSProperty_user_select:
+ case eCSSProperty_key_equivalent:
+ case eCSSProperty_user_focus:
+ case eCSSProperty_resizer:
+ case eCSSProperty_behavior:
+ CSS_CHECK(UserInterface) {
+ switch (aProperty) {
+ case eCSSProperty_user_input: mUserInterface->mUserInput.Reset(); break;
+ case eCSSProperty_user_modify: mUserInterface->mUserModify.Reset(); break;
+ case eCSSProperty_user_select: mUserInterface->mUserSelect.Reset(); break;
+ case eCSSProperty_key_equivalent:
+ CSS_CHECK_DATA(mUserInterface->mKeyEquivalent, nsCSSValueList) {
+ mUserInterface->mKeyEquivalent->mValue.Reset();
+ CSS_IF_DELETE(mUserInterface->mKeyEquivalent->mNext);
+ }
+ break;
+ case eCSSProperty_user_focus: mUserInterface->mUserFocus.Reset(); break;
+ case eCSSProperty_resizer: mUserInterface->mResizer.Reset(); break;
+ case eCSSProperty_behavior:
+ mUserInterface->mBehavior.Reset();
+ break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSAural
+ case eCSSProperty_azimuth:
+ case eCSSProperty_elevation:
+ case eCSSProperty_cue_after:
+ case eCSSProperty_cue_before:
+ case eCSSProperty_pause_after:
+ case eCSSProperty_pause_before:
+ case eCSSProperty_pitch:
+ case eCSSProperty_pitch_range:
+ case eCSSProperty_play_during:
+ case eCSSProperty_play_during_flags:
+ case eCSSProperty_richness:
+ case eCSSProperty_speak:
+ case eCSSProperty_speak_header:
+ case eCSSProperty_speak_numeral:
+ case eCSSProperty_speak_punctuation:
+ case eCSSProperty_speech_rate:
+ case eCSSProperty_stress:
+ case eCSSProperty_voice_family:
+ case eCSSProperty_volume:
+ CSS_CHECK(Aural) {
+ switch (aProperty) {
+ case eCSSProperty_azimuth: mAural->mAzimuth.Reset(); break;
+ case eCSSProperty_elevation: mAural->mElevation.Reset(); break;
+ case eCSSProperty_cue_after: mAural->mCueAfter.Reset(); break;
+ case eCSSProperty_cue_before: mAural->mCueBefore.Reset(); break;
+ case eCSSProperty_pause_after: mAural->mPauseAfter.Reset(); break;
+ case eCSSProperty_pause_before: mAural->mPauseBefore.Reset(); break;
+ case eCSSProperty_pitch: mAural->mPitch.Reset(); break;
+ case eCSSProperty_pitch_range: mAural->mPitchRange.Reset(); break;
+ case eCSSProperty_play_during: mAural->mPlayDuring.Reset(); break;
+ case eCSSProperty_play_during_flags: mAural->mPlayDuringFlags.Reset(); break;
+ case eCSSProperty_richness: mAural->mRichness.Reset(); break;
+ case eCSSProperty_speak: mAural->mSpeak.Reset(); break;
+ case eCSSProperty_speak_header: mAural->mSpeakHeader.Reset(); break;
+ case eCSSProperty_speak_numeral: mAural->mSpeakNumeral.Reset(); break;
+ case eCSSProperty_speak_punctuation: mAural->mSpeakPunctuation.Reset(); break;
+ case eCSSProperty_speech_rate: mAural->mSpeechRate.Reset(); break;
+ case eCSSProperty_stress: mAural->mStress.Reset(); break;
+ case eCSSProperty_voice_family: mAural->mVoiceFamily.Reset(); break;
+ case eCSSProperty_volume: mAural->mVolume.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // Shorthands
+ case eCSSProperty_background:
+ RemoveProperty(eCSSProperty_background_color);
+ RemoveProperty(eCSSProperty_background_image);
+ RemoveProperty(eCSSProperty_background_repeat);
+ RemoveProperty(eCSSProperty_background_attachment);
+ RemoveProperty(eCSSProperty_background_x_position);
+ RemoveProperty(eCSSProperty_background_y_position);
+ break;
+ case eCSSProperty_border:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mBorderWidth);
+ CSS_IF_DELETE(mMargin->mBorderStyle);
+ CSS_IF_DELETE(mMargin->mBorderColor);
+ }
+ break;
+ case eCSSProperty_border_spacing:
+ RemoveProperty(eCSSProperty_border_x_spacing);
+ RemoveProperty(eCSSProperty_border_y_spacing);
+ break;
+ case eCSSProperty_clip:
+ CSS_CHECK(Display) {
+ CSS_IF_DELETE(mDisplay->mClip);
+ }
+ break;
+ case eCSSProperty_cue:
+ RemoveProperty(eCSSProperty_cue_after);
+ RemoveProperty(eCSSProperty_cue_before);
+ break;
+ case eCSSProperty_font:
+ RemoveProperty(eCSSProperty_font_family);
+ RemoveProperty(eCSSProperty_font_style);
+ RemoveProperty(eCSSProperty_font_variant);
+ RemoveProperty(eCSSProperty_font_weight);
+ RemoveProperty(eCSSProperty_font_size);
+ RemoveProperty(eCSSProperty_line_height);
+ break;
+ case eCSSProperty_list_style:
+ RemoveProperty(eCSSProperty_list_style_type);
+ RemoveProperty(eCSSProperty_list_style_image);
+ RemoveProperty(eCSSProperty_list_style_position);
+ break;
+ case eCSSProperty_margin:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mMargin);
+ }
+ break;
+ case eCSSProperty_outline:
+ RemoveProperty(eCSSProperty_outline_color);
+ RemoveProperty(eCSSProperty_outline_style);
+ RemoveProperty(eCSSProperty_outline_width);
+ break;
+ case eCSSProperty_padding:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mPadding);
+ }
+ break;
+ case eCSSProperty_pause:
+ RemoveProperty(eCSSProperty_pause_after);
+ RemoveProperty(eCSSProperty_pause_before);
+ break;
+ case eCSSProperty_quotes:
+ CSS_CHECK(Content) {
+ CSS_IF_DELETE(mContent->mQuotes);
+ }
+ break;
+ case eCSSProperty_size:
+ RemoveProperty(eCSSProperty_size_width);
+ RemoveProperty(eCSSProperty_size_height);
+ break;
+ case eCSSProperty_text_shadow:
+ CSS_CHECK(Text) {
+ CSS_IF_DELETE(mText->mTextShadow);
+ }
+ break;
+ case eCSSProperty_background_position:
+ RemoveProperty(eCSSProperty_background_x_position);
+ RemoveProperty(eCSSProperty_background_y_position);
+ break;
+ case eCSSProperty_border_top:
+ RemoveProperty(eCSSProperty_border_top_width);
+ RemoveProperty(eCSSProperty_border_top_style);
+ RemoveProperty(eCSSProperty_border_top_color);
+ break;
+ case eCSSProperty_border_right:
+ RemoveProperty(eCSSProperty_border_right_width);
+ RemoveProperty(eCSSProperty_border_right_style);
+ RemoveProperty(eCSSProperty_border_right_color);
+ break;
+ case eCSSProperty_border_bottom:
+ RemoveProperty(eCSSProperty_border_bottom_width);
+ RemoveProperty(eCSSProperty_border_bottom_style);
+ RemoveProperty(eCSSProperty_border_bottom_color);
+ break;
+ case eCSSProperty_border_left:
+ RemoveProperty(eCSSProperty_border_left_width);
+ RemoveProperty(eCSSProperty_border_left_style);
+ RemoveProperty(eCSSProperty_border_left_color);
+ break;
+ case eCSSProperty_border_color:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mBorderColor);
+ }
+ break;
+ case eCSSProperty_border_style:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mBorderStyle);
+ }
+ break;
+ case eCSSProperty_border_width:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mBorderWidth);
+ }
+ break;
+ case eCSSProperty__moz_border_radius:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mBorderRadius);
+ }
+ break;
+ case eCSSProperty__moz_outline_radius:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mOutlineRadius);
+ }
+ break;
+// default: // XXX explicitly removing default case so compiler will help find missed props
+ case eCSSProperty_UNKNOWN:
+ case eCSSProperty_COUNT:
+ result = NS_ERROR_ILLEGAL_VALUE;
+ break;
+ }
+
+ if (NS_OK == result) {
+ if (nsnull != mOrder) {
+ PRInt32 index = mOrder->IndexOf((void*)aProperty);
+ if (-1 != index) {
+ mOrder->RemoveElementAt(index);
+ }
+ }
+ }
+ return result;
+}
+
+
+NS_IMETHODIMP
+CSSDeclarationImpl::RemoveProperty(nsCSSProperty aProperty, nsCSSValue& aValue)
+{
+ nsresult result = NS_OK;
+
+ PRBool isImportant = PR_FALSE;
+ GetValueIsImportant(aProperty, isImportant);
+ if (isImportant) {
+ result = mImportant->GetValue(aProperty, aValue);
+ if (NS_SUCCEEDED(result)) {
+ result = mImportant->RemoveProperty(aProperty);
+ }
+ } else {
+ result = GetValue(aProperty, aValue);
+ if (NS_SUCCEEDED(result)) {
+ result = RemoveProperty(aProperty);
+ }
+ }
+ return result;
+}
+
NS_IMETHODIMP
CSSDeclarationImpl::AppendComment(const nsString& aComment)
{
diff --git a/content/html/style/src/nsCSSStyleRule.cpp b/content/html/style/src/nsCSSStyleRule.cpp
index e24e3c76d68..718812f770c 100644
--- a/content/html/style/src/nsCSSStyleRule.cpp
+++ b/content/html/style/src/nsCSSStyleRule.cpp
@@ -829,12 +829,7 @@ DOMCSSDeclarationImpl::RemoveProperty(const nsString& aPropertyName,
nsCSSProperty prop = nsCSSProps::LookupProperty(aPropertyName);
nsCSSValue val;
-#if 0 // This is not done yet, once it is this ifdef should be removed
rv = decl->RemoveProperty(prop, val);
-#else
- rv = NS_ERROR_NOT_IMPLEMENTED;
-#endif
-
if (NS_FAILED(rv))
return rv;
diff --git a/content/html/style/src/nsICSSDeclaration.h b/content/html/style/src/nsICSSDeclaration.h
index 29f57d63646..10c12cbdc83 100644
--- a/content/html/style/src/nsICSSDeclaration.h
+++ b/content/html/style/src/nsICSSDeclaration.h
@@ -394,6 +394,7 @@ public:
NS_IMETHOD AppendStructValue(nsCSSProperty aProperty, void* aStruct) = 0;
NS_IMETHOD SetValueImportant(nsCSSProperty aProperty) = 0;
NS_IMETHOD AppendComment(const nsString& aComment) = 0;
+ NS_IMETHOD RemoveProperty(nsCSSProperty aProperty, nsCSSValue& aValue) = 0;
// XXX make nscolor a struct to avoid type conflicts
NS_IMETHOD GetValue(nsCSSProperty aProperty, nsCSSValue& aValue) = 0;
diff --git a/layout/html/content/src/nsGenericHTMLElement.cpp b/layout/html/content/src/nsGenericHTMLElement.cpp
index 156c1ea88a1..04d7ab84e26 100644
--- a/layout/html/content/src/nsGenericHTMLElement.cpp
+++ b/layout/html/content/src/nsGenericHTMLElement.cpp
@@ -151,23 +151,18 @@ nsDOMCSSAttributeDeclaration::RemoveProperty(const nsString& aPropertyName,
if (doc)
doc->BeginUpdate();
+ PRInt32 hint;
+ decl->GetStyleImpact(&hint);
+
nsCSSProperty prop = nsCSSProps::LookupProperty(aPropertyName);
nsCSSValue val;
-
-#if 0 // Once nsICSSDeclaration has a RemoveProperty this ifdef should be removed
rv = decl->RemoveProperty(prop, val);
-#else
- rv = NS_ERROR_NOT_IMPLEMENTED;
-#endif
-
if (NS_FAILED(rv))
return rv;
val.ToString(aReturn, prop);
if (doc) {
- PRInt32 hint;
- decl->GetStyleImpact(&hint);
doc->AttributeChanged(mContent, kNameSpaceID_None, nsHTMLAtoms::style,
hint);
diff --git a/layout/html/style/src/nsCSSDeclaration.cpp b/layout/html/style/src/nsCSSDeclaration.cpp
index 6225323157a..19ce376350f 100644
--- a/layout/html/style/src/nsCSSDeclaration.cpp
+++ b/layout/html/style/src/nsCSSDeclaration.cpp
@@ -937,6 +937,7 @@ public:
NS_IMETHOD AppendStructValue(nsCSSProperty aProperty, void* aStruct);
NS_IMETHOD SetValueImportant(nsCSSProperty aProperty);
NS_IMETHOD AppendComment(const nsString& aComment);
+ NS_IMETHOD RemoveProperty(nsCSSProperty aProperty, nsCSSValue& aValue);
NS_IMETHOD GetValue(nsCSSProperty aProperty, nsCSSValue& aValue);
NS_IMETHOD GetValue(nsCSSProperty aProperty, nsString& aValue);
@@ -962,6 +963,9 @@ public:
NS_IMETHOD GetStyleImpact(PRInt32* aHint) const;
+protected:
+ nsresult RemoveProperty(nsCSSProperty aProperty);
+
private:
CSSDeclarationImpl& operator=(const CSSDeclarationImpl& aCopy);
PRBool operator==(const CSSDeclarationImpl& aCopy) const;
@@ -1700,6 +1704,7 @@ CSSDeclarationImpl::AppendValue(nsCSSProperty aProperty, const nsCSSValue& aValu
case eCSSProperty_border_style:
case eCSSProperty_border_width:
case eCSSProperty__moz_border_radius:
+ case eCSSProperty__moz_outline_radius:
NS_ERROR("can't append shorthand properties");
// default: // XXX explicitly removing default case so compiler will help find missed props
case eCSSProperty_UNKNOWN:
@@ -2445,6 +2450,7 @@ CSSDeclarationImpl::SetValueImportant(nsCSSProperty aProperty)
case eCSSProperty_border_spacing:
SetValueImportant(eCSSProperty_border_x_spacing);
SetValueImportant(eCSSProperty_border_y_spacing);
+ break;
case eCSSProperty_clip:
SetValueImportant(eCSSProperty_clip_top);
SetValueImportant(eCSSProperty_clip_right);
@@ -2555,6 +2561,698 @@ CSSDeclarationImpl::SetValueImportant(nsCSSProperty aProperty)
return result;
}
+
+#define CSS_CHECK(data) \
+ if (nsnull == m##data) { \
+ result = NS_ERROR_NOT_AVAILABLE; \
+ } \
+ else
+
+#define CSS_CHECK_RECT(data) \
+ if (nsnull == data) { \
+ result = NS_ERROR_NOT_AVAILABLE; \
+ } \
+ else
+
+#define CSS_CHECK_DATA(data,type) \
+ if (nsnull == data) { \
+ result = NS_ERROR_NOT_AVAILABLE; \
+ } \
+ else
+
+
+nsresult
+CSSDeclarationImpl::RemoveProperty(nsCSSProperty aProperty)
+{
+ nsresult result = NS_OK;
+
+ switch (aProperty) {
+ // nsCSSFont
+ case eCSSProperty_font_family:
+ case eCSSProperty_font_style:
+ case eCSSProperty_font_variant:
+ case eCSSProperty_font_weight:
+ case eCSSProperty_font_size:
+ case eCSSProperty_font_size_adjust:
+ case eCSSProperty_font_stretch:
+ CSS_CHECK(Font) {
+ switch (aProperty) {
+ case eCSSProperty_font_family: mFont->mFamily.Reset(); break;
+ case eCSSProperty_font_style: mFont->mStyle.Reset(); break;
+ case eCSSProperty_font_variant: mFont->mVariant.Reset(); break;
+ case eCSSProperty_font_weight: mFont->mWeight.Reset(); break;
+ case eCSSProperty_font_size: mFont->mSize.Reset(); break;
+ case eCSSProperty_font_size_adjust: mFont->mSizeAdjust.Reset(); break;
+ case eCSSProperty_font_stretch: mFont->mStretch.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSColor
+ case eCSSProperty_color:
+ case eCSSProperty_background_color:
+ case eCSSProperty_background_image:
+ case eCSSProperty_background_repeat:
+ case eCSSProperty_background_attachment:
+ case eCSSProperty_background_x_position:
+ case eCSSProperty_background_y_position:
+ case eCSSProperty_cursor:
+ case eCSSProperty_opacity:
+ CSS_CHECK(Color) {
+ switch (aProperty) {
+ case eCSSProperty_color: mColor->mColor.Reset(); break;
+ case eCSSProperty_background_color: mColor->mBackColor.Reset(); break;
+ case eCSSProperty_background_image: mColor->mBackImage.Reset(); break;
+ case eCSSProperty_background_repeat: mColor->mBackRepeat.Reset(); break;
+ case eCSSProperty_background_attachment: mColor->mBackAttachment.Reset(); break;
+ case eCSSProperty_background_x_position: mColor->mBackPositionX.Reset(); break;
+ case eCSSProperty_background_y_position: mColor->mBackPositionY.Reset(); break;
+ case eCSSProperty_cursor:
+ CSS_CHECK_DATA(mColor->mCursor, nsCSSValueList) {
+ mColor->mCursor->mValue.Reset();
+ CSS_IF_DELETE(mColor->mCursor->mNext);
+ }
+ break;
+ case eCSSProperty_opacity: mColor->mOpacity.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSText
+ case eCSSProperty_word_spacing:
+ case eCSSProperty_letter_spacing:
+ case eCSSProperty_text_decoration:
+ case eCSSProperty_vertical_align:
+ case eCSSProperty_text_transform:
+ case eCSSProperty_text_align:
+ case eCSSProperty_text_indent:
+ case eCSSProperty_unicode_bidi:
+ case eCSSProperty_line_height:
+ case eCSSProperty_white_space:
+ CSS_CHECK(Text) {
+ switch (aProperty) {
+ case eCSSProperty_word_spacing: mText->mWordSpacing.Reset(); break;
+ case eCSSProperty_letter_spacing: mText->mLetterSpacing.Reset(); break;
+ case eCSSProperty_text_decoration: mText->mDecoration.Reset(); break;
+ case eCSSProperty_vertical_align: mText->mVerticalAlign.Reset(); break;
+ case eCSSProperty_text_transform: mText->mTextTransform.Reset(); break;
+ case eCSSProperty_text_align: mText->mTextAlign.Reset(); break;
+ case eCSSProperty_text_indent: mText->mTextIndent.Reset(); break;
+ case eCSSProperty_unicode_bidi: mText->mUnicodeBidi.Reset(); break;
+ case eCSSProperty_line_height: mText->mLineHeight.Reset(); break;
+ case eCSSProperty_white_space: mText->mWhiteSpace.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ case eCSSProperty_text_shadow_color:
+ case eCSSProperty_text_shadow_radius:
+ case eCSSProperty_text_shadow_x:
+ case eCSSProperty_text_shadow_y:
+ CSS_CHECK(Text) {
+ CSS_CHECK_DATA(mText->mTextShadow, nsCSSShadow) {
+ switch (aProperty) {
+ case eCSSProperty_text_shadow_color: mText->mTextShadow->mColor.Reset(); break;
+ case eCSSProperty_text_shadow_radius: mText->mTextShadow->mRadius.Reset(); break;
+ case eCSSProperty_text_shadow_x: mText->mTextShadow->mXOffset.Reset(); break;
+ case eCSSProperty_text_shadow_y: mText->mTextShadow->mYOffset.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ CSS_IF_DELETE(mText->mTextShadow->mNext);
+ }
+ }
+ break;
+
+ // nsCSSDisplay
+ case eCSSProperty_float:
+ case eCSSProperty_clear:
+ case eCSSProperty_display:
+ case eCSSProperty_direction:
+ case eCSSProperty_visibility:
+ case eCSSProperty_overflow:
+ CSS_CHECK(Display) {
+ switch (aProperty) {
+ case eCSSProperty_float: mDisplay->mFloat.Reset(); break;
+ case eCSSProperty_clear: mDisplay->mClear.Reset(); break;
+ case eCSSProperty_display: mDisplay->mDisplay.Reset(); break;
+ case eCSSProperty_direction: mDisplay->mDirection.Reset(); break;
+ case eCSSProperty_visibility: mDisplay->mVisibility.Reset(); break;
+ case eCSSProperty_overflow: mDisplay->mOverflow.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ case eCSSProperty_clip_top:
+ case eCSSProperty_clip_right:
+ case eCSSProperty_clip_bottom:
+ case eCSSProperty_clip_left:
+ CSS_CHECK(Display) {
+ CSS_CHECK_RECT(mDisplay->mClip) {
+ switch(aProperty) {
+ case eCSSProperty_clip_top: mDisplay->mClip->mTop.Reset(); break;
+ case eCSSProperty_clip_right: mDisplay->mClip->mRight.Reset(); break;
+ case eCSSProperty_clip_bottom: mDisplay->mClip->mBottom.Reset(); break;
+ case eCSSProperty_clip_left: mDisplay->mClip->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ // nsCSSMargin
+ case eCSSProperty_margin_top:
+ case eCSSProperty_margin_right:
+ case eCSSProperty_margin_bottom:
+ case eCSSProperty_margin_left:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mMargin) {
+ switch (aProperty) {
+ case eCSSProperty_margin_top: mMargin->mMargin->mTop.Reset(); break;
+ case eCSSProperty_margin_right: mMargin->mMargin->mRight.Reset(); break;
+ case eCSSProperty_margin_bottom: mMargin->mMargin->mBottom.Reset(); break;
+ case eCSSProperty_margin_left: mMargin->mMargin->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty_padding_top:
+ case eCSSProperty_padding_right:
+ case eCSSProperty_padding_bottom:
+ case eCSSProperty_padding_left:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mPadding) {
+ switch (aProperty) {
+ case eCSSProperty_padding_top: mMargin->mPadding->mTop.Reset(); break;
+ case eCSSProperty_padding_right: mMargin->mPadding->mRight.Reset(); break;
+ case eCSSProperty_padding_bottom: mMargin->mPadding->mBottom.Reset(); break;
+ case eCSSProperty_padding_left: mMargin->mPadding->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty_border_top_width:
+ case eCSSProperty_border_right_width:
+ case eCSSProperty_border_bottom_width:
+ case eCSSProperty_border_left_width:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mBorderWidth) {
+ switch (aProperty) {
+ case eCSSProperty_border_top_width: mMargin->mBorderWidth->mTop.Reset(); break;
+ case eCSSProperty_border_right_width: mMargin->mBorderWidth->mRight.Reset(); break;
+ case eCSSProperty_border_bottom_width: mMargin->mBorderWidth->mBottom.Reset(); break;
+ case eCSSProperty_border_left_width: mMargin->mBorderWidth->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty_border_top_color:
+ case eCSSProperty_border_right_color:
+ case eCSSProperty_border_bottom_color:
+ case eCSSProperty_border_left_color:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mBorderColor) {
+ switch (aProperty) {
+ case eCSSProperty_border_top_color: mMargin->mBorderColor->mTop.Reset(); break;
+ case eCSSProperty_border_right_color: mMargin->mBorderColor->mRight.Reset(); break;
+ case eCSSProperty_border_bottom_color: mMargin->mBorderColor->mBottom.Reset(); break;
+ case eCSSProperty_border_left_color: mMargin->mBorderColor->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty_border_top_style:
+ case eCSSProperty_border_right_style:
+ case eCSSProperty_border_bottom_style:
+ case eCSSProperty_border_left_style:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mBorderStyle) {
+ switch (aProperty) {
+ case eCSSProperty_border_top_style: mMargin->mBorderStyle->mTop.Reset(); break;
+ case eCSSProperty_border_right_style: mMargin->mBorderStyle->mRight.Reset(); break;
+ case eCSSProperty_border_bottom_style: mMargin->mBorderStyle->mBottom.Reset(); break;
+ case eCSSProperty_border_left_style: mMargin->mBorderStyle->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty__moz_border_radius_topLeft:
+ case eCSSProperty__moz_border_radius_topRight:
+ case eCSSProperty__moz_border_radius_bottomRight:
+ case eCSSProperty__moz_border_radius_bottomLeft:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mBorderRadius) {
+ switch (aProperty) {
+ case eCSSProperty__moz_border_radius_topLeft: mMargin->mBorderRadius->mTop.Reset(); break;
+ case eCSSProperty__moz_border_radius_topRight: mMargin->mBorderRadius->mRight.Reset(); break;
+ case eCSSProperty__moz_border_radius_bottomRight: mMargin->mBorderRadius->mBottom.Reset(); break;
+ case eCSSProperty__moz_border_radius_bottomLeft: mMargin->mBorderRadius->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty__moz_outline_radius_topLeft:
+ case eCSSProperty__moz_outline_radius_topRight:
+ case eCSSProperty__moz_outline_radius_bottomRight:
+ case eCSSProperty__moz_outline_radius_bottomLeft:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mOutlineRadius) {
+ switch (aProperty) {
+ case eCSSProperty__moz_outline_radius_topLeft: mMargin->mOutlineRadius->mTop.Reset(); break;
+ case eCSSProperty__moz_outline_radius_topRight: mMargin->mOutlineRadius->mRight.Reset(); break;
+ case eCSSProperty__moz_outline_radius_bottomRight: mMargin->mOutlineRadius->mBottom.Reset(); break;
+ case eCSSProperty__moz_outline_radius_bottomLeft: mMargin->mOutlineRadius->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty_outline_width:
+ case eCSSProperty_outline_color:
+ case eCSSProperty_outline_style:
+ case eCSSProperty_float_edge:
+ CSS_CHECK(Margin) {
+ switch (aProperty) {
+ case eCSSProperty_outline_width: mMargin->mOutlineWidth.Reset(); break;
+ case eCSSProperty_outline_color: mMargin->mOutlineColor.Reset(); break;
+ case eCSSProperty_outline_style: mMargin->mOutlineStyle.Reset(); break;
+ case eCSSProperty_float_edge: mMargin->mFloatEdge.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSPosition
+ case eCSSProperty_position:
+ case eCSSProperty_width:
+ case eCSSProperty_min_width:
+ case eCSSProperty_max_width:
+ case eCSSProperty_height:
+ case eCSSProperty_min_height:
+ case eCSSProperty_max_height:
+ case eCSSProperty_box_sizing:
+ case eCSSProperty_z_index:
+ CSS_CHECK(Position) {
+ switch (aProperty) {
+ case eCSSProperty_position: mPosition->mPosition.Reset(); break;
+ case eCSSProperty_width: mPosition->mWidth.Reset(); break;
+ case eCSSProperty_min_width: mPosition->mMinWidth.Reset(); break;
+ case eCSSProperty_max_width: mPosition->mMaxWidth.Reset(); break;
+ case eCSSProperty_height: mPosition->mHeight.Reset(); break;
+ case eCSSProperty_min_height: mPosition->mMinHeight.Reset(); break;
+ case eCSSProperty_max_height: mPosition->mMaxHeight.Reset(); break;
+ case eCSSProperty_box_sizing: mPosition->mBoxSizing.Reset(); break;
+ case eCSSProperty_z_index: mPosition->mZIndex.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ case eCSSProperty_top:
+ case eCSSProperty_right:
+ case eCSSProperty_bottom:
+ case eCSSProperty_left:
+ CSS_CHECK(Position) {
+ CSS_CHECK_RECT(mPosition->mOffset) {
+ switch (aProperty) {
+ case eCSSProperty_top: mPosition->mOffset->mTop.Reset(); break;
+ case eCSSProperty_right: mPosition->mOffset->mRight.Reset(); break;
+ case eCSSProperty_bottom: mPosition->mOffset->mBottom.Reset(); break;
+ case eCSSProperty_left: mPosition->mOffset->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ // nsCSSList
+ case eCSSProperty_list_style_type:
+ case eCSSProperty_list_style_image:
+ case eCSSProperty_list_style_position:
+ CSS_CHECK(List) {
+ switch (aProperty) {
+ case eCSSProperty_list_style_type: mList->mType.Reset(); break;
+ case eCSSProperty_list_style_image: mList->mImage.Reset(); break;
+ case eCSSProperty_list_style_position: mList->mPosition.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSTable
+ case eCSSProperty_border_collapse:
+ case eCSSProperty_border_x_spacing:
+ case eCSSProperty_border_y_spacing:
+ case eCSSProperty_caption_side:
+ case eCSSProperty_empty_cells:
+ case eCSSProperty_table_layout:
+ CSS_CHECK(Table) {
+ switch (aProperty) {
+ case eCSSProperty_border_collapse: mTable->mBorderCollapse.Reset(); break;
+ case eCSSProperty_border_x_spacing: mTable->mBorderSpacingX.Reset(); break;
+ case eCSSProperty_border_y_spacing: mTable->mBorderSpacingY.Reset(); break;
+ case eCSSProperty_caption_side: mTable->mCaptionSide.Reset(); break;
+ case eCSSProperty_empty_cells: mTable->mEmptyCells.Reset(); break;
+ case eCSSProperty_table_layout: mTable->mLayout.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSBreaks
+ case eCSSProperty_orphans:
+ case eCSSProperty_widows:
+ case eCSSProperty_page:
+ case eCSSProperty_page_break_after:
+ case eCSSProperty_page_break_before:
+ case eCSSProperty_page_break_inside:
+ CSS_CHECK(Breaks) {
+ switch (aProperty) {
+ case eCSSProperty_orphans: mBreaks->mOrphans.Reset(); break;
+ case eCSSProperty_widows: mBreaks->mWidows.Reset(); break;
+ case eCSSProperty_page: mBreaks->mPage.Reset(); break;
+ case eCSSProperty_page_break_after: mBreaks->mPageBreakAfter.Reset(); break;
+ case eCSSProperty_page_break_before: mBreaks->mPageBreakBefore.Reset(); break;
+ case eCSSProperty_page_break_inside: mBreaks->mPageBreakInside.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSPage
+ case eCSSProperty_marks:
+ case eCSSProperty_size_width:
+ case eCSSProperty_size_height:
+ CSS_CHECK(Page) {
+ switch (aProperty) {
+ case eCSSProperty_marks: mPage->mMarks.Reset(); break;
+ case eCSSProperty_size_width: mPage->mSizeWidth.Reset(); break;
+ case eCSSProperty_size_height: mPage->mSizeHeight.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSContent
+ case eCSSProperty_content:
+ case eCSSProperty_counter_increment:
+ case eCSSProperty_counter_reset:
+ case eCSSProperty_marker_offset:
+ case eCSSProperty_quotes_open:
+ case eCSSProperty_quotes_close:
+ CSS_CHECK(Content) {
+ switch (aProperty) {
+ case eCSSProperty_content:
+ CSS_CHECK_DATA(mContent->mContent, nsCSSValueList) {
+ mContent->mContent->mValue.Reset();
+ CSS_IF_DELETE(mContent->mContent->mNext);
+ }
+ break;
+ case eCSSProperty_counter_increment:
+ CSS_CHECK_DATA(mContent->mCounterIncrement, nsCSSCounterData) {
+ mContent->mCounterIncrement->mCounter.Reset();
+ CSS_IF_DELETE(mContent->mCounterIncrement->mNext);
+ }
+ break;
+ case eCSSProperty_counter_reset:
+ CSS_CHECK_DATA(mContent->mCounterReset, nsCSSCounterData) {
+ mContent->mCounterReset->mCounter.Reset();
+ CSS_IF_DELETE(mContent->mCounterReset->mNext);
+ }
+ break;
+ case eCSSProperty_marker_offset: mContent->mMarkerOffset.Reset(); break;
+ case eCSSProperty_quotes_open:
+ CSS_CHECK_DATA(mContent->mQuotes, nsCSSQuotes) {
+ mContent->mQuotes->mOpen.Reset();
+ CSS_IF_DELETE(mContent->mQuotes->mNext);
+ }
+ break;
+ case eCSSProperty_quotes_close:
+ CSS_CHECK_DATA(mContent->mQuotes, nsCSSQuotes) {
+ mContent->mQuotes->mClose.Reset();
+ CSS_IF_DELETE(mContent->mQuotes->mNext);
+ }
+ break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSUserInterface
+ case eCSSProperty_user_input:
+ case eCSSProperty_user_modify:
+ case eCSSProperty_user_select:
+ case eCSSProperty_key_equivalent:
+ case eCSSProperty_user_focus:
+ case eCSSProperty_resizer:
+ case eCSSProperty_behavior:
+ CSS_CHECK(UserInterface) {
+ switch (aProperty) {
+ case eCSSProperty_user_input: mUserInterface->mUserInput.Reset(); break;
+ case eCSSProperty_user_modify: mUserInterface->mUserModify.Reset(); break;
+ case eCSSProperty_user_select: mUserInterface->mUserSelect.Reset(); break;
+ case eCSSProperty_key_equivalent:
+ CSS_CHECK_DATA(mUserInterface->mKeyEquivalent, nsCSSValueList) {
+ mUserInterface->mKeyEquivalent->mValue.Reset();
+ CSS_IF_DELETE(mUserInterface->mKeyEquivalent->mNext);
+ }
+ break;
+ case eCSSProperty_user_focus: mUserInterface->mUserFocus.Reset(); break;
+ case eCSSProperty_resizer: mUserInterface->mResizer.Reset(); break;
+ case eCSSProperty_behavior:
+ mUserInterface->mBehavior.Reset();
+ break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSAural
+ case eCSSProperty_azimuth:
+ case eCSSProperty_elevation:
+ case eCSSProperty_cue_after:
+ case eCSSProperty_cue_before:
+ case eCSSProperty_pause_after:
+ case eCSSProperty_pause_before:
+ case eCSSProperty_pitch:
+ case eCSSProperty_pitch_range:
+ case eCSSProperty_play_during:
+ case eCSSProperty_play_during_flags:
+ case eCSSProperty_richness:
+ case eCSSProperty_speak:
+ case eCSSProperty_speak_header:
+ case eCSSProperty_speak_numeral:
+ case eCSSProperty_speak_punctuation:
+ case eCSSProperty_speech_rate:
+ case eCSSProperty_stress:
+ case eCSSProperty_voice_family:
+ case eCSSProperty_volume:
+ CSS_CHECK(Aural) {
+ switch (aProperty) {
+ case eCSSProperty_azimuth: mAural->mAzimuth.Reset(); break;
+ case eCSSProperty_elevation: mAural->mElevation.Reset(); break;
+ case eCSSProperty_cue_after: mAural->mCueAfter.Reset(); break;
+ case eCSSProperty_cue_before: mAural->mCueBefore.Reset(); break;
+ case eCSSProperty_pause_after: mAural->mPauseAfter.Reset(); break;
+ case eCSSProperty_pause_before: mAural->mPauseBefore.Reset(); break;
+ case eCSSProperty_pitch: mAural->mPitch.Reset(); break;
+ case eCSSProperty_pitch_range: mAural->mPitchRange.Reset(); break;
+ case eCSSProperty_play_during: mAural->mPlayDuring.Reset(); break;
+ case eCSSProperty_play_during_flags: mAural->mPlayDuringFlags.Reset(); break;
+ case eCSSProperty_richness: mAural->mRichness.Reset(); break;
+ case eCSSProperty_speak: mAural->mSpeak.Reset(); break;
+ case eCSSProperty_speak_header: mAural->mSpeakHeader.Reset(); break;
+ case eCSSProperty_speak_numeral: mAural->mSpeakNumeral.Reset(); break;
+ case eCSSProperty_speak_punctuation: mAural->mSpeakPunctuation.Reset(); break;
+ case eCSSProperty_speech_rate: mAural->mSpeechRate.Reset(); break;
+ case eCSSProperty_stress: mAural->mStress.Reset(); break;
+ case eCSSProperty_voice_family: mAural->mVoiceFamily.Reset(); break;
+ case eCSSProperty_volume: mAural->mVolume.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // Shorthands
+ case eCSSProperty_background:
+ RemoveProperty(eCSSProperty_background_color);
+ RemoveProperty(eCSSProperty_background_image);
+ RemoveProperty(eCSSProperty_background_repeat);
+ RemoveProperty(eCSSProperty_background_attachment);
+ RemoveProperty(eCSSProperty_background_x_position);
+ RemoveProperty(eCSSProperty_background_y_position);
+ break;
+ case eCSSProperty_border:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mBorderWidth);
+ CSS_IF_DELETE(mMargin->mBorderStyle);
+ CSS_IF_DELETE(mMargin->mBorderColor);
+ }
+ break;
+ case eCSSProperty_border_spacing:
+ RemoveProperty(eCSSProperty_border_x_spacing);
+ RemoveProperty(eCSSProperty_border_y_spacing);
+ break;
+ case eCSSProperty_clip:
+ CSS_CHECK(Display) {
+ CSS_IF_DELETE(mDisplay->mClip);
+ }
+ break;
+ case eCSSProperty_cue:
+ RemoveProperty(eCSSProperty_cue_after);
+ RemoveProperty(eCSSProperty_cue_before);
+ break;
+ case eCSSProperty_font:
+ RemoveProperty(eCSSProperty_font_family);
+ RemoveProperty(eCSSProperty_font_style);
+ RemoveProperty(eCSSProperty_font_variant);
+ RemoveProperty(eCSSProperty_font_weight);
+ RemoveProperty(eCSSProperty_font_size);
+ RemoveProperty(eCSSProperty_line_height);
+ break;
+ case eCSSProperty_list_style:
+ RemoveProperty(eCSSProperty_list_style_type);
+ RemoveProperty(eCSSProperty_list_style_image);
+ RemoveProperty(eCSSProperty_list_style_position);
+ break;
+ case eCSSProperty_margin:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mMargin);
+ }
+ break;
+ case eCSSProperty_outline:
+ RemoveProperty(eCSSProperty_outline_color);
+ RemoveProperty(eCSSProperty_outline_style);
+ RemoveProperty(eCSSProperty_outline_width);
+ break;
+ case eCSSProperty_padding:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mPadding);
+ }
+ break;
+ case eCSSProperty_pause:
+ RemoveProperty(eCSSProperty_pause_after);
+ RemoveProperty(eCSSProperty_pause_before);
+ break;
+ case eCSSProperty_quotes:
+ CSS_CHECK(Content) {
+ CSS_IF_DELETE(mContent->mQuotes);
+ }
+ break;
+ case eCSSProperty_size:
+ RemoveProperty(eCSSProperty_size_width);
+ RemoveProperty(eCSSProperty_size_height);
+ break;
+ case eCSSProperty_text_shadow:
+ CSS_CHECK(Text) {
+ CSS_IF_DELETE(mText->mTextShadow);
+ }
+ break;
+ case eCSSProperty_background_position:
+ RemoveProperty(eCSSProperty_background_x_position);
+ RemoveProperty(eCSSProperty_background_y_position);
+ break;
+ case eCSSProperty_border_top:
+ RemoveProperty(eCSSProperty_border_top_width);
+ RemoveProperty(eCSSProperty_border_top_style);
+ RemoveProperty(eCSSProperty_border_top_color);
+ break;
+ case eCSSProperty_border_right:
+ RemoveProperty(eCSSProperty_border_right_width);
+ RemoveProperty(eCSSProperty_border_right_style);
+ RemoveProperty(eCSSProperty_border_right_color);
+ break;
+ case eCSSProperty_border_bottom:
+ RemoveProperty(eCSSProperty_border_bottom_width);
+ RemoveProperty(eCSSProperty_border_bottom_style);
+ RemoveProperty(eCSSProperty_border_bottom_color);
+ break;
+ case eCSSProperty_border_left:
+ RemoveProperty(eCSSProperty_border_left_width);
+ RemoveProperty(eCSSProperty_border_left_style);
+ RemoveProperty(eCSSProperty_border_left_color);
+ break;
+ case eCSSProperty_border_color:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mBorderColor);
+ }
+ break;
+ case eCSSProperty_border_style:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mBorderStyle);
+ }
+ break;
+ case eCSSProperty_border_width:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mBorderWidth);
+ }
+ break;
+ case eCSSProperty__moz_border_radius:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mBorderRadius);
+ }
+ break;
+ case eCSSProperty__moz_outline_radius:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mOutlineRadius);
+ }
+ break;
+// default: // XXX explicitly removing default case so compiler will help find missed props
+ case eCSSProperty_UNKNOWN:
+ case eCSSProperty_COUNT:
+ result = NS_ERROR_ILLEGAL_VALUE;
+ break;
+ }
+
+ if (NS_OK == result) {
+ if (nsnull != mOrder) {
+ PRInt32 index = mOrder->IndexOf((void*)aProperty);
+ if (-1 != index) {
+ mOrder->RemoveElementAt(index);
+ }
+ }
+ }
+ return result;
+}
+
+
+NS_IMETHODIMP
+CSSDeclarationImpl::RemoveProperty(nsCSSProperty aProperty, nsCSSValue& aValue)
+{
+ nsresult result = NS_OK;
+
+ PRBool isImportant = PR_FALSE;
+ GetValueIsImportant(aProperty, isImportant);
+ if (isImportant) {
+ result = mImportant->GetValue(aProperty, aValue);
+ if (NS_SUCCEEDED(result)) {
+ result = mImportant->RemoveProperty(aProperty);
+ }
+ } else {
+ result = GetValue(aProperty, aValue);
+ if (NS_SUCCEEDED(result)) {
+ result = RemoveProperty(aProperty);
+ }
+ }
+ return result;
+}
+
NS_IMETHODIMP
CSSDeclarationImpl::AppendComment(const nsString& aComment)
{
diff --git a/layout/html/style/src/nsCSSStyleRule.cpp b/layout/html/style/src/nsCSSStyleRule.cpp
index e24e3c76d68..718812f770c 100644
--- a/layout/html/style/src/nsCSSStyleRule.cpp
+++ b/layout/html/style/src/nsCSSStyleRule.cpp
@@ -829,12 +829,7 @@ DOMCSSDeclarationImpl::RemoveProperty(const nsString& aPropertyName,
nsCSSProperty prop = nsCSSProps::LookupProperty(aPropertyName);
nsCSSValue val;
-#if 0 // This is not done yet, once it is this ifdef should be removed
rv = decl->RemoveProperty(prop, val);
-#else
- rv = NS_ERROR_NOT_IMPLEMENTED;
-#endif
-
if (NS_FAILED(rv))
return rv;
diff --git a/layout/html/style/src/nsICSSDeclaration.h b/layout/html/style/src/nsICSSDeclaration.h
index 29f57d63646..10c12cbdc83 100644
--- a/layout/html/style/src/nsICSSDeclaration.h
+++ b/layout/html/style/src/nsICSSDeclaration.h
@@ -394,6 +394,7 @@ public:
NS_IMETHOD AppendStructValue(nsCSSProperty aProperty, void* aStruct) = 0;
NS_IMETHOD SetValueImportant(nsCSSProperty aProperty) = 0;
NS_IMETHOD AppendComment(const nsString& aComment) = 0;
+ NS_IMETHOD RemoveProperty(nsCSSProperty aProperty, nsCSSValue& aValue) = 0;
// XXX make nscolor a struct to avoid type conflicts
NS_IMETHOD GetValue(nsCSSProperty aProperty, nsCSSValue& aValue) = 0;
diff --git a/layout/style/nsCSSDeclaration.cpp b/layout/style/nsCSSDeclaration.cpp
index 6225323157a..19ce376350f 100644
--- a/layout/style/nsCSSDeclaration.cpp
+++ b/layout/style/nsCSSDeclaration.cpp
@@ -937,6 +937,7 @@ public:
NS_IMETHOD AppendStructValue(nsCSSProperty aProperty, void* aStruct);
NS_IMETHOD SetValueImportant(nsCSSProperty aProperty);
NS_IMETHOD AppendComment(const nsString& aComment);
+ NS_IMETHOD RemoveProperty(nsCSSProperty aProperty, nsCSSValue& aValue);
NS_IMETHOD GetValue(nsCSSProperty aProperty, nsCSSValue& aValue);
NS_IMETHOD GetValue(nsCSSProperty aProperty, nsString& aValue);
@@ -962,6 +963,9 @@ public:
NS_IMETHOD GetStyleImpact(PRInt32* aHint) const;
+protected:
+ nsresult RemoveProperty(nsCSSProperty aProperty);
+
private:
CSSDeclarationImpl& operator=(const CSSDeclarationImpl& aCopy);
PRBool operator==(const CSSDeclarationImpl& aCopy) const;
@@ -1700,6 +1704,7 @@ CSSDeclarationImpl::AppendValue(nsCSSProperty aProperty, const nsCSSValue& aValu
case eCSSProperty_border_style:
case eCSSProperty_border_width:
case eCSSProperty__moz_border_radius:
+ case eCSSProperty__moz_outline_radius:
NS_ERROR("can't append shorthand properties");
// default: // XXX explicitly removing default case so compiler will help find missed props
case eCSSProperty_UNKNOWN:
@@ -2445,6 +2450,7 @@ CSSDeclarationImpl::SetValueImportant(nsCSSProperty aProperty)
case eCSSProperty_border_spacing:
SetValueImportant(eCSSProperty_border_x_spacing);
SetValueImportant(eCSSProperty_border_y_spacing);
+ break;
case eCSSProperty_clip:
SetValueImportant(eCSSProperty_clip_top);
SetValueImportant(eCSSProperty_clip_right);
@@ -2555,6 +2561,698 @@ CSSDeclarationImpl::SetValueImportant(nsCSSProperty aProperty)
return result;
}
+
+#define CSS_CHECK(data) \
+ if (nsnull == m##data) { \
+ result = NS_ERROR_NOT_AVAILABLE; \
+ } \
+ else
+
+#define CSS_CHECK_RECT(data) \
+ if (nsnull == data) { \
+ result = NS_ERROR_NOT_AVAILABLE; \
+ } \
+ else
+
+#define CSS_CHECK_DATA(data,type) \
+ if (nsnull == data) { \
+ result = NS_ERROR_NOT_AVAILABLE; \
+ } \
+ else
+
+
+nsresult
+CSSDeclarationImpl::RemoveProperty(nsCSSProperty aProperty)
+{
+ nsresult result = NS_OK;
+
+ switch (aProperty) {
+ // nsCSSFont
+ case eCSSProperty_font_family:
+ case eCSSProperty_font_style:
+ case eCSSProperty_font_variant:
+ case eCSSProperty_font_weight:
+ case eCSSProperty_font_size:
+ case eCSSProperty_font_size_adjust:
+ case eCSSProperty_font_stretch:
+ CSS_CHECK(Font) {
+ switch (aProperty) {
+ case eCSSProperty_font_family: mFont->mFamily.Reset(); break;
+ case eCSSProperty_font_style: mFont->mStyle.Reset(); break;
+ case eCSSProperty_font_variant: mFont->mVariant.Reset(); break;
+ case eCSSProperty_font_weight: mFont->mWeight.Reset(); break;
+ case eCSSProperty_font_size: mFont->mSize.Reset(); break;
+ case eCSSProperty_font_size_adjust: mFont->mSizeAdjust.Reset(); break;
+ case eCSSProperty_font_stretch: mFont->mStretch.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSColor
+ case eCSSProperty_color:
+ case eCSSProperty_background_color:
+ case eCSSProperty_background_image:
+ case eCSSProperty_background_repeat:
+ case eCSSProperty_background_attachment:
+ case eCSSProperty_background_x_position:
+ case eCSSProperty_background_y_position:
+ case eCSSProperty_cursor:
+ case eCSSProperty_opacity:
+ CSS_CHECK(Color) {
+ switch (aProperty) {
+ case eCSSProperty_color: mColor->mColor.Reset(); break;
+ case eCSSProperty_background_color: mColor->mBackColor.Reset(); break;
+ case eCSSProperty_background_image: mColor->mBackImage.Reset(); break;
+ case eCSSProperty_background_repeat: mColor->mBackRepeat.Reset(); break;
+ case eCSSProperty_background_attachment: mColor->mBackAttachment.Reset(); break;
+ case eCSSProperty_background_x_position: mColor->mBackPositionX.Reset(); break;
+ case eCSSProperty_background_y_position: mColor->mBackPositionY.Reset(); break;
+ case eCSSProperty_cursor:
+ CSS_CHECK_DATA(mColor->mCursor, nsCSSValueList) {
+ mColor->mCursor->mValue.Reset();
+ CSS_IF_DELETE(mColor->mCursor->mNext);
+ }
+ break;
+ case eCSSProperty_opacity: mColor->mOpacity.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSText
+ case eCSSProperty_word_spacing:
+ case eCSSProperty_letter_spacing:
+ case eCSSProperty_text_decoration:
+ case eCSSProperty_vertical_align:
+ case eCSSProperty_text_transform:
+ case eCSSProperty_text_align:
+ case eCSSProperty_text_indent:
+ case eCSSProperty_unicode_bidi:
+ case eCSSProperty_line_height:
+ case eCSSProperty_white_space:
+ CSS_CHECK(Text) {
+ switch (aProperty) {
+ case eCSSProperty_word_spacing: mText->mWordSpacing.Reset(); break;
+ case eCSSProperty_letter_spacing: mText->mLetterSpacing.Reset(); break;
+ case eCSSProperty_text_decoration: mText->mDecoration.Reset(); break;
+ case eCSSProperty_vertical_align: mText->mVerticalAlign.Reset(); break;
+ case eCSSProperty_text_transform: mText->mTextTransform.Reset(); break;
+ case eCSSProperty_text_align: mText->mTextAlign.Reset(); break;
+ case eCSSProperty_text_indent: mText->mTextIndent.Reset(); break;
+ case eCSSProperty_unicode_bidi: mText->mUnicodeBidi.Reset(); break;
+ case eCSSProperty_line_height: mText->mLineHeight.Reset(); break;
+ case eCSSProperty_white_space: mText->mWhiteSpace.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ case eCSSProperty_text_shadow_color:
+ case eCSSProperty_text_shadow_radius:
+ case eCSSProperty_text_shadow_x:
+ case eCSSProperty_text_shadow_y:
+ CSS_CHECK(Text) {
+ CSS_CHECK_DATA(mText->mTextShadow, nsCSSShadow) {
+ switch (aProperty) {
+ case eCSSProperty_text_shadow_color: mText->mTextShadow->mColor.Reset(); break;
+ case eCSSProperty_text_shadow_radius: mText->mTextShadow->mRadius.Reset(); break;
+ case eCSSProperty_text_shadow_x: mText->mTextShadow->mXOffset.Reset(); break;
+ case eCSSProperty_text_shadow_y: mText->mTextShadow->mYOffset.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ CSS_IF_DELETE(mText->mTextShadow->mNext);
+ }
+ }
+ break;
+
+ // nsCSSDisplay
+ case eCSSProperty_float:
+ case eCSSProperty_clear:
+ case eCSSProperty_display:
+ case eCSSProperty_direction:
+ case eCSSProperty_visibility:
+ case eCSSProperty_overflow:
+ CSS_CHECK(Display) {
+ switch (aProperty) {
+ case eCSSProperty_float: mDisplay->mFloat.Reset(); break;
+ case eCSSProperty_clear: mDisplay->mClear.Reset(); break;
+ case eCSSProperty_display: mDisplay->mDisplay.Reset(); break;
+ case eCSSProperty_direction: mDisplay->mDirection.Reset(); break;
+ case eCSSProperty_visibility: mDisplay->mVisibility.Reset(); break;
+ case eCSSProperty_overflow: mDisplay->mOverflow.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ case eCSSProperty_clip_top:
+ case eCSSProperty_clip_right:
+ case eCSSProperty_clip_bottom:
+ case eCSSProperty_clip_left:
+ CSS_CHECK(Display) {
+ CSS_CHECK_RECT(mDisplay->mClip) {
+ switch(aProperty) {
+ case eCSSProperty_clip_top: mDisplay->mClip->mTop.Reset(); break;
+ case eCSSProperty_clip_right: mDisplay->mClip->mRight.Reset(); break;
+ case eCSSProperty_clip_bottom: mDisplay->mClip->mBottom.Reset(); break;
+ case eCSSProperty_clip_left: mDisplay->mClip->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ // nsCSSMargin
+ case eCSSProperty_margin_top:
+ case eCSSProperty_margin_right:
+ case eCSSProperty_margin_bottom:
+ case eCSSProperty_margin_left:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mMargin) {
+ switch (aProperty) {
+ case eCSSProperty_margin_top: mMargin->mMargin->mTop.Reset(); break;
+ case eCSSProperty_margin_right: mMargin->mMargin->mRight.Reset(); break;
+ case eCSSProperty_margin_bottom: mMargin->mMargin->mBottom.Reset(); break;
+ case eCSSProperty_margin_left: mMargin->mMargin->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty_padding_top:
+ case eCSSProperty_padding_right:
+ case eCSSProperty_padding_bottom:
+ case eCSSProperty_padding_left:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mPadding) {
+ switch (aProperty) {
+ case eCSSProperty_padding_top: mMargin->mPadding->mTop.Reset(); break;
+ case eCSSProperty_padding_right: mMargin->mPadding->mRight.Reset(); break;
+ case eCSSProperty_padding_bottom: mMargin->mPadding->mBottom.Reset(); break;
+ case eCSSProperty_padding_left: mMargin->mPadding->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty_border_top_width:
+ case eCSSProperty_border_right_width:
+ case eCSSProperty_border_bottom_width:
+ case eCSSProperty_border_left_width:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mBorderWidth) {
+ switch (aProperty) {
+ case eCSSProperty_border_top_width: mMargin->mBorderWidth->mTop.Reset(); break;
+ case eCSSProperty_border_right_width: mMargin->mBorderWidth->mRight.Reset(); break;
+ case eCSSProperty_border_bottom_width: mMargin->mBorderWidth->mBottom.Reset(); break;
+ case eCSSProperty_border_left_width: mMargin->mBorderWidth->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty_border_top_color:
+ case eCSSProperty_border_right_color:
+ case eCSSProperty_border_bottom_color:
+ case eCSSProperty_border_left_color:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mBorderColor) {
+ switch (aProperty) {
+ case eCSSProperty_border_top_color: mMargin->mBorderColor->mTop.Reset(); break;
+ case eCSSProperty_border_right_color: mMargin->mBorderColor->mRight.Reset(); break;
+ case eCSSProperty_border_bottom_color: mMargin->mBorderColor->mBottom.Reset(); break;
+ case eCSSProperty_border_left_color: mMargin->mBorderColor->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty_border_top_style:
+ case eCSSProperty_border_right_style:
+ case eCSSProperty_border_bottom_style:
+ case eCSSProperty_border_left_style:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mBorderStyle) {
+ switch (aProperty) {
+ case eCSSProperty_border_top_style: mMargin->mBorderStyle->mTop.Reset(); break;
+ case eCSSProperty_border_right_style: mMargin->mBorderStyle->mRight.Reset(); break;
+ case eCSSProperty_border_bottom_style: mMargin->mBorderStyle->mBottom.Reset(); break;
+ case eCSSProperty_border_left_style: mMargin->mBorderStyle->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty__moz_border_radius_topLeft:
+ case eCSSProperty__moz_border_radius_topRight:
+ case eCSSProperty__moz_border_radius_bottomRight:
+ case eCSSProperty__moz_border_radius_bottomLeft:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mBorderRadius) {
+ switch (aProperty) {
+ case eCSSProperty__moz_border_radius_topLeft: mMargin->mBorderRadius->mTop.Reset(); break;
+ case eCSSProperty__moz_border_radius_topRight: mMargin->mBorderRadius->mRight.Reset(); break;
+ case eCSSProperty__moz_border_radius_bottomRight: mMargin->mBorderRadius->mBottom.Reset(); break;
+ case eCSSProperty__moz_border_radius_bottomLeft: mMargin->mBorderRadius->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty__moz_outline_radius_topLeft:
+ case eCSSProperty__moz_outline_radius_topRight:
+ case eCSSProperty__moz_outline_radius_bottomRight:
+ case eCSSProperty__moz_outline_radius_bottomLeft:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mOutlineRadius) {
+ switch (aProperty) {
+ case eCSSProperty__moz_outline_radius_topLeft: mMargin->mOutlineRadius->mTop.Reset(); break;
+ case eCSSProperty__moz_outline_radius_topRight: mMargin->mOutlineRadius->mRight.Reset(); break;
+ case eCSSProperty__moz_outline_radius_bottomRight: mMargin->mOutlineRadius->mBottom.Reset(); break;
+ case eCSSProperty__moz_outline_radius_bottomLeft: mMargin->mOutlineRadius->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty_outline_width:
+ case eCSSProperty_outline_color:
+ case eCSSProperty_outline_style:
+ case eCSSProperty_float_edge:
+ CSS_CHECK(Margin) {
+ switch (aProperty) {
+ case eCSSProperty_outline_width: mMargin->mOutlineWidth.Reset(); break;
+ case eCSSProperty_outline_color: mMargin->mOutlineColor.Reset(); break;
+ case eCSSProperty_outline_style: mMargin->mOutlineStyle.Reset(); break;
+ case eCSSProperty_float_edge: mMargin->mFloatEdge.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSPosition
+ case eCSSProperty_position:
+ case eCSSProperty_width:
+ case eCSSProperty_min_width:
+ case eCSSProperty_max_width:
+ case eCSSProperty_height:
+ case eCSSProperty_min_height:
+ case eCSSProperty_max_height:
+ case eCSSProperty_box_sizing:
+ case eCSSProperty_z_index:
+ CSS_CHECK(Position) {
+ switch (aProperty) {
+ case eCSSProperty_position: mPosition->mPosition.Reset(); break;
+ case eCSSProperty_width: mPosition->mWidth.Reset(); break;
+ case eCSSProperty_min_width: mPosition->mMinWidth.Reset(); break;
+ case eCSSProperty_max_width: mPosition->mMaxWidth.Reset(); break;
+ case eCSSProperty_height: mPosition->mHeight.Reset(); break;
+ case eCSSProperty_min_height: mPosition->mMinHeight.Reset(); break;
+ case eCSSProperty_max_height: mPosition->mMaxHeight.Reset(); break;
+ case eCSSProperty_box_sizing: mPosition->mBoxSizing.Reset(); break;
+ case eCSSProperty_z_index: mPosition->mZIndex.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ case eCSSProperty_top:
+ case eCSSProperty_right:
+ case eCSSProperty_bottom:
+ case eCSSProperty_left:
+ CSS_CHECK(Position) {
+ CSS_CHECK_RECT(mPosition->mOffset) {
+ switch (aProperty) {
+ case eCSSProperty_top: mPosition->mOffset->mTop.Reset(); break;
+ case eCSSProperty_right: mPosition->mOffset->mRight.Reset(); break;
+ case eCSSProperty_bottom: mPosition->mOffset->mBottom.Reset(); break;
+ case eCSSProperty_left: mPosition->mOffset->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ // nsCSSList
+ case eCSSProperty_list_style_type:
+ case eCSSProperty_list_style_image:
+ case eCSSProperty_list_style_position:
+ CSS_CHECK(List) {
+ switch (aProperty) {
+ case eCSSProperty_list_style_type: mList->mType.Reset(); break;
+ case eCSSProperty_list_style_image: mList->mImage.Reset(); break;
+ case eCSSProperty_list_style_position: mList->mPosition.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSTable
+ case eCSSProperty_border_collapse:
+ case eCSSProperty_border_x_spacing:
+ case eCSSProperty_border_y_spacing:
+ case eCSSProperty_caption_side:
+ case eCSSProperty_empty_cells:
+ case eCSSProperty_table_layout:
+ CSS_CHECK(Table) {
+ switch (aProperty) {
+ case eCSSProperty_border_collapse: mTable->mBorderCollapse.Reset(); break;
+ case eCSSProperty_border_x_spacing: mTable->mBorderSpacingX.Reset(); break;
+ case eCSSProperty_border_y_spacing: mTable->mBorderSpacingY.Reset(); break;
+ case eCSSProperty_caption_side: mTable->mCaptionSide.Reset(); break;
+ case eCSSProperty_empty_cells: mTable->mEmptyCells.Reset(); break;
+ case eCSSProperty_table_layout: mTable->mLayout.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSBreaks
+ case eCSSProperty_orphans:
+ case eCSSProperty_widows:
+ case eCSSProperty_page:
+ case eCSSProperty_page_break_after:
+ case eCSSProperty_page_break_before:
+ case eCSSProperty_page_break_inside:
+ CSS_CHECK(Breaks) {
+ switch (aProperty) {
+ case eCSSProperty_orphans: mBreaks->mOrphans.Reset(); break;
+ case eCSSProperty_widows: mBreaks->mWidows.Reset(); break;
+ case eCSSProperty_page: mBreaks->mPage.Reset(); break;
+ case eCSSProperty_page_break_after: mBreaks->mPageBreakAfter.Reset(); break;
+ case eCSSProperty_page_break_before: mBreaks->mPageBreakBefore.Reset(); break;
+ case eCSSProperty_page_break_inside: mBreaks->mPageBreakInside.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSPage
+ case eCSSProperty_marks:
+ case eCSSProperty_size_width:
+ case eCSSProperty_size_height:
+ CSS_CHECK(Page) {
+ switch (aProperty) {
+ case eCSSProperty_marks: mPage->mMarks.Reset(); break;
+ case eCSSProperty_size_width: mPage->mSizeWidth.Reset(); break;
+ case eCSSProperty_size_height: mPage->mSizeHeight.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSContent
+ case eCSSProperty_content:
+ case eCSSProperty_counter_increment:
+ case eCSSProperty_counter_reset:
+ case eCSSProperty_marker_offset:
+ case eCSSProperty_quotes_open:
+ case eCSSProperty_quotes_close:
+ CSS_CHECK(Content) {
+ switch (aProperty) {
+ case eCSSProperty_content:
+ CSS_CHECK_DATA(mContent->mContent, nsCSSValueList) {
+ mContent->mContent->mValue.Reset();
+ CSS_IF_DELETE(mContent->mContent->mNext);
+ }
+ break;
+ case eCSSProperty_counter_increment:
+ CSS_CHECK_DATA(mContent->mCounterIncrement, nsCSSCounterData) {
+ mContent->mCounterIncrement->mCounter.Reset();
+ CSS_IF_DELETE(mContent->mCounterIncrement->mNext);
+ }
+ break;
+ case eCSSProperty_counter_reset:
+ CSS_CHECK_DATA(mContent->mCounterReset, nsCSSCounterData) {
+ mContent->mCounterReset->mCounter.Reset();
+ CSS_IF_DELETE(mContent->mCounterReset->mNext);
+ }
+ break;
+ case eCSSProperty_marker_offset: mContent->mMarkerOffset.Reset(); break;
+ case eCSSProperty_quotes_open:
+ CSS_CHECK_DATA(mContent->mQuotes, nsCSSQuotes) {
+ mContent->mQuotes->mOpen.Reset();
+ CSS_IF_DELETE(mContent->mQuotes->mNext);
+ }
+ break;
+ case eCSSProperty_quotes_close:
+ CSS_CHECK_DATA(mContent->mQuotes, nsCSSQuotes) {
+ mContent->mQuotes->mClose.Reset();
+ CSS_IF_DELETE(mContent->mQuotes->mNext);
+ }
+ break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSUserInterface
+ case eCSSProperty_user_input:
+ case eCSSProperty_user_modify:
+ case eCSSProperty_user_select:
+ case eCSSProperty_key_equivalent:
+ case eCSSProperty_user_focus:
+ case eCSSProperty_resizer:
+ case eCSSProperty_behavior:
+ CSS_CHECK(UserInterface) {
+ switch (aProperty) {
+ case eCSSProperty_user_input: mUserInterface->mUserInput.Reset(); break;
+ case eCSSProperty_user_modify: mUserInterface->mUserModify.Reset(); break;
+ case eCSSProperty_user_select: mUserInterface->mUserSelect.Reset(); break;
+ case eCSSProperty_key_equivalent:
+ CSS_CHECK_DATA(mUserInterface->mKeyEquivalent, nsCSSValueList) {
+ mUserInterface->mKeyEquivalent->mValue.Reset();
+ CSS_IF_DELETE(mUserInterface->mKeyEquivalent->mNext);
+ }
+ break;
+ case eCSSProperty_user_focus: mUserInterface->mUserFocus.Reset(); break;
+ case eCSSProperty_resizer: mUserInterface->mResizer.Reset(); break;
+ case eCSSProperty_behavior:
+ mUserInterface->mBehavior.Reset();
+ break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSAural
+ case eCSSProperty_azimuth:
+ case eCSSProperty_elevation:
+ case eCSSProperty_cue_after:
+ case eCSSProperty_cue_before:
+ case eCSSProperty_pause_after:
+ case eCSSProperty_pause_before:
+ case eCSSProperty_pitch:
+ case eCSSProperty_pitch_range:
+ case eCSSProperty_play_during:
+ case eCSSProperty_play_during_flags:
+ case eCSSProperty_richness:
+ case eCSSProperty_speak:
+ case eCSSProperty_speak_header:
+ case eCSSProperty_speak_numeral:
+ case eCSSProperty_speak_punctuation:
+ case eCSSProperty_speech_rate:
+ case eCSSProperty_stress:
+ case eCSSProperty_voice_family:
+ case eCSSProperty_volume:
+ CSS_CHECK(Aural) {
+ switch (aProperty) {
+ case eCSSProperty_azimuth: mAural->mAzimuth.Reset(); break;
+ case eCSSProperty_elevation: mAural->mElevation.Reset(); break;
+ case eCSSProperty_cue_after: mAural->mCueAfter.Reset(); break;
+ case eCSSProperty_cue_before: mAural->mCueBefore.Reset(); break;
+ case eCSSProperty_pause_after: mAural->mPauseAfter.Reset(); break;
+ case eCSSProperty_pause_before: mAural->mPauseBefore.Reset(); break;
+ case eCSSProperty_pitch: mAural->mPitch.Reset(); break;
+ case eCSSProperty_pitch_range: mAural->mPitchRange.Reset(); break;
+ case eCSSProperty_play_during: mAural->mPlayDuring.Reset(); break;
+ case eCSSProperty_play_during_flags: mAural->mPlayDuringFlags.Reset(); break;
+ case eCSSProperty_richness: mAural->mRichness.Reset(); break;
+ case eCSSProperty_speak: mAural->mSpeak.Reset(); break;
+ case eCSSProperty_speak_header: mAural->mSpeakHeader.Reset(); break;
+ case eCSSProperty_speak_numeral: mAural->mSpeakNumeral.Reset(); break;
+ case eCSSProperty_speak_punctuation: mAural->mSpeakPunctuation.Reset(); break;
+ case eCSSProperty_speech_rate: mAural->mSpeechRate.Reset(); break;
+ case eCSSProperty_stress: mAural->mStress.Reset(); break;
+ case eCSSProperty_voice_family: mAural->mVoiceFamily.Reset(); break;
+ case eCSSProperty_volume: mAural->mVolume.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // Shorthands
+ case eCSSProperty_background:
+ RemoveProperty(eCSSProperty_background_color);
+ RemoveProperty(eCSSProperty_background_image);
+ RemoveProperty(eCSSProperty_background_repeat);
+ RemoveProperty(eCSSProperty_background_attachment);
+ RemoveProperty(eCSSProperty_background_x_position);
+ RemoveProperty(eCSSProperty_background_y_position);
+ break;
+ case eCSSProperty_border:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mBorderWidth);
+ CSS_IF_DELETE(mMargin->mBorderStyle);
+ CSS_IF_DELETE(mMargin->mBorderColor);
+ }
+ break;
+ case eCSSProperty_border_spacing:
+ RemoveProperty(eCSSProperty_border_x_spacing);
+ RemoveProperty(eCSSProperty_border_y_spacing);
+ break;
+ case eCSSProperty_clip:
+ CSS_CHECK(Display) {
+ CSS_IF_DELETE(mDisplay->mClip);
+ }
+ break;
+ case eCSSProperty_cue:
+ RemoveProperty(eCSSProperty_cue_after);
+ RemoveProperty(eCSSProperty_cue_before);
+ break;
+ case eCSSProperty_font:
+ RemoveProperty(eCSSProperty_font_family);
+ RemoveProperty(eCSSProperty_font_style);
+ RemoveProperty(eCSSProperty_font_variant);
+ RemoveProperty(eCSSProperty_font_weight);
+ RemoveProperty(eCSSProperty_font_size);
+ RemoveProperty(eCSSProperty_line_height);
+ break;
+ case eCSSProperty_list_style:
+ RemoveProperty(eCSSProperty_list_style_type);
+ RemoveProperty(eCSSProperty_list_style_image);
+ RemoveProperty(eCSSProperty_list_style_position);
+ break;
+ case eCSSProperty_margin:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mMargin);
+ }
+ break;
+ case eCSSProperty_outline:
+ RemoveProperty(eCSSProperty_outline_color);
+ RemoveProperty(eCSSProperty_outline_style);
+ RemoveProperty(eCSSProperty_outline_width);
+ break;
+ case eCSSProperty_padding:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mPadding);
+ }
+ break;
+ case eCSSProperty_pause:
+ RemoveProperty(eCSSProperty_pause_after);
+ RemoveProperty(eCSSProperty_pause_before);
+ break;
+ case eCSSProperty_quotes:
+ CSS_CHECK(Content) {
+ CSS_IF_DELETE(mContent->mQuotes);
+ }
+ break;
+ case eCSSProperty_size:
+ RemoveProperty(eCSSProperty_size_width);
+ RemoveProperty(eCSSProperty_size_height);
+ break;
+ case eCSSProperty_text_shadow:
+ CSS_CHECK(Text) {
+ CSS_IF_DELETE(mText->mTextShadow);
+ }
+ break;
+ case eCSSProperty_background_position:
+ RemoveProperty(eCSSProperty_background_x_position);
+ RemoveProperty(eCSSProperty_background_y_position);
+ break;
+ case eCSSProperty_border_top:
+ RemoveProperty(eCSSProperty_border_top_width);
+ RemoveProperty(eCSSProperty_border_top_style);
+ RemoveProperty(eCSSProperty_border_top_color);
+ break;
+ case eCSSProperty_border_right:
+ RemoveProperty(eCSSProperty_border_right_width);
+ RemoveProperty(eCSSProperty_border_right_style);
+ RemoveProperty(eCSSProperty_border_right_color);
+ break;
+ case eCSSProperty_border_bottom:
+ RemoveProperty(eCSSProperty_border_bottom_width);
+ RemoveProperty(eCSSProperty_border_bottom_style);
+ RemoveProperty(eCSSProperty_border_bottom_color);
+ break;
+ case eCSSProperty_border_left:
+ RemoveProperty(eCSSProperty_border_left_width);
+ RemoveProperty(eCSSProperty_border_left_style);
+ RemoveProperty(eCSSProperty_border_left_color);
+ break;
+ case eCSSProperty_border_color:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mBorderColor);
+ }
+ break;
+ case eCSSProperty_border_style:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mBorderStyle);
+ }
+ break;
+ case eCSSProperty_border_width:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mBorderWidth);
+ }
+ break;
+ case eCSSProperty__moz_border_radius:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mBorderRadius);
+ }
+ break;
+ case eCSSProperty__moz_outline_radius:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mOutlineRadius);
+ }
+ break;
+// default: // XXX explicitly removing default case so compiler will help find missed props
+ case eCSSProperty_UNKNOWN:
+ case eCSSProperty_COUNT:
+ result = NS_ERROR_ILLEGAL_VALUE;
+ break;
+ }
+
+ if (NS_OK == result) {
+ if (nsnull != mOrder) {
+ PRInt32 index = mOrder->IndexOf((void*)aProperty);
+ if (-1 != index) {
+ mOrder->RemoveElementAt(index);
+ }
+ }
+ }
+ return result;
+}
+
+
+NS_IMETHODIMP
+CSSDeclarationImpl::RemoveProperty(nsCSSProperty aProperty, nsCSSValue& aValue)
+{
+ nsresult result = NS_OK;
+
+ PRBool isImportant = PR_FALSE;
+ GetValueIsImportant(aProperty, isImportant);
+ if (isImportant) {
+ result = mImportant->GetValue(aProperty, aValue);
+ if (NS_SUCCEEDED(result)) {
+ result = mImportant->RemoveProperty(aProperty);
+ }
+ } else {
+ result = GetValue(aProperty, aValue);
+ if (NS_SUCCEEDED(result)) {
+ result = RemoveProperty(aProperty);
+ }
+ }
+ return result;
+}
+
NS_IMETHODIMP
CSSDeclarationImpl::AppendComment(const nsString& aComment)
{
diff --git a/layout/style/nsCSSStruct.cpp b/layout/style/nsCSSStruct.cpp
index 6225323157a..19ce376350f 100644
--- a/layout/style/nsCSSStruct.cpp
+++ b/layout/style/nsCSSStruct.cpp
@@ -937,6 +937,7 @@ public:
NS_IMETHOD AppendStructValue(nsCSSProperty aProperty, void* aStruct);
NS_IMETHOD SetValueImportant(nsCSSProperty aProperty);
NS_IMETHOD AppendComment(const nsString& aComment);
+ NS_IMETHOD RemoveProperty(nsCSSProperty aProperty, nsCSSValue& aValue);
NS_IMETHOD GetValue(nsCSSProperty aProperty, nsCSSValue& aValue);
NS_IMETHOD GetValue(nsCSSProperty aProperty, nsString& aValue);
@@ -962,6 +963,9 @@ public:
NS_IMETHOD GetStyleImpact(PRInt32* aHint) const;
+protected:
+ nsresult RemoveProperty(nsCSSProperty aProperty);
+
private:
CSSDeclarationImpl& operator=(const CSSDeclarationImpl& aCopy);
PRBool operator==(const CSSDeclarationImpl& aCopy) const;
@@ -1700,6 +1704,7 @@ CSSDeclarationImpl::AppendValue(nsCSSProperty aProperty, const nsCSSValue& aValu
case eCSSProperty_border_style:
case eCSSProperty_border_width:
case eCSSProperty__moz_border_radius:
+ case eCSSProperty__moz_outline_radius:
NS_ERROR("can't append shorthand properties");
// default: // XXX explicitly removing default case so compiler will help find missed props
case eCSSProperty_UNKNOWN:
@@ -2445,6 +2450,7 @@ CSSDeclarationImpl::SetValueImportant(nsCSSProperty aProperty)
case eCSSProperty_border_spacing:
SetValueImportant(eCSSProperty_border_x_spacing);
SetValueImportant(eCSSProperty_border_y_spacing);
+ break;
case eCSSProperty_clip:
SetValueImportant(eCSSProperty_clip_top);
SetValueImportant(eCSSProperty_clip_right);
@@ -2555,6 +2561,698 @@ CSSDeclarationImpl::SetValueImportant(nsCSSProperty aProperty)
return result;
}
+
+#define CSS_CHECK(data) \
+ if (nsnull == m##data) { \
+ result = NS_ERROR_NOT_AVAILABLE; \
+ } \
+ else
+
+#define CSS_CHECK_RECT(data) \
+ if (nsnull == data) { \
+ result = NS_ERROR_NOT_AVAILABLE; \
+ } \
+ else
+
+#define CSS_CHECK_DATA(data,type) \
+ if (nsnull == data) { \
+ result = NS_ERROR_NOT_AVAILABLE; \
+ } \
+ else
+
+
+nsresult
+CSSDeclarationImpl::RemoveProperty(nsCSSProperty aProperty)
+{
+ nsresult result = NS_OK;
+
+ switch (aProperty) {
+ // nsCSSFont
+ case eCSSProperty_font_family:
+ case eCSSProperty_font_style:
+ case eCSSProperty_font_variant:
+ case eCSSProperty_font_weight:
+ case eCSSProperty_font_size:
+ case eCSSProperty_font_size_adjust:
+ case eCSSProperty_font_stretch:
+ CSS_CHECK(Font) {
+ switch (aProperty) {
+ case eCSSProperty_font_family: mFont->mFamily.Reset(); break;
+ case eCSSProperty_font_style: mFont->mStyle.Reset(); break;
+ case eCSSProperty_font_variant: mFont->mVariant.Reset(); break;
+ case eCSSProperty_font_weight: mFont->mWeight.Reset(); break;
+ case eCSSProperty_font_size: mFont->mSize.Reset(); break;
+ case eCSSProperty_font_size_adjust: mFont->mSizeAdjust.Reset(); break;
+ case eCSSProperty_font_stretch: mFont->mStretch.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSColor
+ case eCSSProperty_color:
+ case eCSSProperty_background_color:
+ case eCSSProperty_background_image:
+ case eCSSProperty_background_repeat:
+ case eCSSProperty_background_attachment:
+ case eCSSProperty_background_x_position:
+ case eCSSProperty_background_y_position:
+ case eCSSProperty_cursor:
+ case eCSSProperty_opacity:
+ CSS_CHECK(Color) {
+ switch (aProperty) {
+ case eCSSProperty_color: mColor->mColor.Reset(); break;
+ case eCSSProperty_background_color: mColor->mBackColor.Reset(); break;
+ case eCSSProperty_background_image: mColor->mBackImage.Reset(); break;
+ case eCSSProperty_background_repeat: mColor->mBackRepeat.Reset(); break;
+ case eCSSProperty_background_attachment: mColor->mBackAttachment.Reset(); break;
+ case eCSSProperty_background_x_position: mColor->mBackPositionX.Reset(); break;
+ case eCSSProperty_background_y_position: mColor->mBackPositionY.Reset(); break;
+ case eCSSProperty_cursor:
+ CSS_CHECK_DATA(mColor->mCursor, nsCSSValueList) {
+ mColor->mCursor->mValue.Reset();
+ CSS_IF_DELETE(mColor->mCursor->mNext);
+ }
+ break;
+ case eCSSProperty_opacity: mColor->mOpacity.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSText
+ case eCSSProperty_word_spacing:
+ case eCSSProperty_letter_spacing:
+ case eCSSProperty_text_decoration:
+ case eCSSProperty_vertical_align:
+ case eCSSProperty_text_transform:
+ case eCSSProperty_text_align:
+ case eCSSProperty_text_indent:
+ case eCSSProperty_unicode_bidi:
+ case eCSSProperty_line_height:
+ case eCSSProperty_white_space:
+ CSS_CHECK(Text) {
+ switch (aProperty) {
+ case eCSSProperty_word_spacing: mText->mWordSpacing.Reset(); break;
+ case eCSSProperty_letter_spacing: mText->mLetterSpacing.Reset(); break;
+ case eCSSProperty_text_decoration: mText->mDecoration.Reset(); break;
+ case eCSSProperty_vertical_align: mText->mVerticalAlign.Reset(); break;
+ case eCSSProperty_text_transform: mText->mTextTransform.Reset(); break;
+ case eCSSProperty_text_align: mText->mTextAlign.Reset(); break;
+ case eCSSProperty_text_indent: mText->mTextIndent.Reset(); break;
+ case eCSSProperty_unicode_bidi: mText->mUnicodeBidi.Reset(); break;
+ case eCSSProperty_line_height: mText->mLineHeight.Reset(); break;
+ case eCSSProperty_white_space: mText->mWhiteSpace.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ case eCSSProperty_text_shadow_color:
+ case eCSSProperty_text_shadow_radius:
+ case eCSSProperty_text_shadow_x:
+ case eCSSProperty_text_shadow_y:
+ CSS_CHECK(Text) {
+ CSS_CHECK_DATA(mText->mTextShadow, nsCSSShadow) {
+ switch (aProperty) {
+ case eCSSProperty_text_shadow_color: mText->mTextShadow->mColor.Reset(); break;
+ case eCSSProperty_text_shadow_radius: mText->mTextShadow->mRadius.Reset(); break;
+ case eCSSProperty_text_shadow_x: mText->mTextShadow->mXOffset.Reset(); break;
+ case eCSSProperty_text_shadow_y: mText->mTextShadow->mYOffset.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ CSS_IF_DELETE(mText->mTextShadow->mNext);
+ }
+ }
+ break;
+
+ // nsCSSDisplay
+ case eCSSProperty_float:
+ case eCSSProperty_clear:
+ case eCSSProperty_display:
+ case eCSSProperty_direction:
+ case eCSSProperty_visibility:
+ case eCSSProperty_overflow:
+ CSS_CHECK(Display) {
+ switch (aProperty) {
+ case eCSSProperty_float: mDisplay->mFloat.Reset(); break;
+ case eCSSProperty_clear: mDisplay->mClear.Reset(); break;
+ case eCSSProperty_display: mDisplay->mDisplay.Reset(); break;
+ case eCSSProperty_direction: mDisplay->mDirection.Reset(); break;
+ case eCSSProperty_visibility: mDisplay->mVisibility.Reset(); break;
+ case eCSSProperty_overflow: mDisplay->mOverflow.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ case eCSSProperty_clip_top:
+ case eCSSProperty_clip_right:
+ case eCSSProperty_clip_bottom:
+ case eCSSProperty_clip_left:
+ CSS_CHECK(Display) {
+ CSS_CHECK_RECT(mDisplay->mClip) {
+ switch(aProperty) {
+ case eCSSProperty_clip_top: mDisplay->mClip->mTop.Reset(); break;
+ case eCSSProperty_clip_right: mDisplay->mClip->mRight.Reset(); break;
+ case eCSSProperty_clip_bottom: mDisplay->mClip->mBottom.Reset(); break;
+ case eCSSProperty_clip_left: mDisplay->mClip->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ // nsCSSMargin
+ case eCSSProperty_margin_top:
+ case eCSSProperty_margin_right:
+ case eCSSProperty_margin_bottom:
+ case eCSSProperty_margin_left:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mMargin) {
+ switch (aProperty) {
+ case eCSSProperty_margin_top: mMargin->mMargin->mTop.Reset(); break;
+ case eCSSProperty_margin_right: mMargin->mMargin->mRight.Reset(); break;
+ case eCSSProperty_margin_bottom: mMargin->mMargin->mBottom.Reset(); break;
+ case eCSSProperty_margin_left: mMargin->mMargin->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty_padding_top:
+ case eCSSProperty_padding_right:
+ case eCSSProperty_padding_bottom:
+ case eCSSProperty_padding_left:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mPadding) {
+ switch (aProperty) {
+ case eCSSProperty_padding_top: mMargin->mPadding->mTop.Reset(); break;
+ case eCSSProperty_padding_right: mMargin->mPadding->mRight.Reset(); break;
+ case eCSSProperty_padding_bottom: mMargin->mPadding->mBottom.Reset(); break;
+ case eCSSProperty_padding_left: mMargin->mPadding->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty_border_top_width:
+ case eCSSProperty_border_right_width:
+ case eCSSProperty_border_bottom_width:
+ case eCSSProperty_border_left_width:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mBorderWidth) {
+ switch (aProperty) {
+ case eCSSProperty_border_top_width: mMargin->mBorderWidth->mTop.Reset(); break;
+ case eCSSProperty_border_right_width: mMargin->mBorderWidth->mRight.Reset(); break;
+ case eCSSProperty_border_bottom_width: mMargin->mBorderWidth->mBottom.Reset(); break;
+ case eCSSProperty_border_left_width: mMargin->mBorderWidth->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty_border_top_color:
+ case eCSSProperty_border_right_color:
+ case eCSSProperty_border_bottom_color:
+ case eCSSProperty_border_left_color:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mBorderColor) {
+ switch (aProperty) {
+ case eCSSProperty_border_top_color: mMargin->mBorderColor->mTop.Reset(); break;
+ case eCSSProperty_border_right_color: mMargin->mBorderColor->mRight.Reset(); break;
+ case eCSSProperty_border_bottom_color: mMargin->mBorderColor->mBottom.Reset(); break;
+ case eCSSProperty_border_left_color: mMargin->mBorderColor->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty_border_top_style:
+ case eCSSProperty_border_right_style:
+ case eCSSProperty_border_bottom_style:
+ case eCSSProperty_border_left_style:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mBorderStyle) {
+ switch (aProperty) {
+ case eCSSProperty_border_top_style: mMargin->mBorderStyle->mTop.Reset(); break;
+ case eCSSProperty_border_right_style: mMargin->mBorderStyle->mRight.Reset(); break;
+ case eCSSProperty_border_bottom_style: mMargin->mBorderStyle->mBottom.Reset(); break;
+ case eCSSProperty_border_left_style: mMargin->mBorderStyle->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty__moz_border_radius_topLeft:
+ case eCSSProperty__moz_border_radius_topRight:
+ case eCSSProperty__moz_border_radius_bottomRight:
+ case eCSSProperty__moz_border_radius_bottomLeft:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mBorderRadius) {
+ switch (aProperty) {
+ case eCSSProperty__moz_border_radius_topLeft: mMargin->mBorderRadius->mTop.Reset(); break;
+ case eCSSProperty__moz_border_radius_topRight: mMargin->mBorderRadius->mRight.Reset(); break;
+ case eCSSProperty__moz_border_radius_bottomRight: mMargin->mBorderRadius->mBottom.Reset(); break;
+ case eCSSProperty__moz_border_radius_bottomLeft: mMargin->mBorderRadius->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty__moz_outline_radius_topLeft:
+ case eCSSProperty__moz_outline_radius_topRight:
+ case eCSSProperty__moz_outline_radius_bottomRight:
+ case eCSSProperty__moz_outline_radius_bottomLeft:
+ CSS_CHECK(Margin) {
+ CSS_CHECK_RECT(mMargin->mOutlineRadius) {
+ switch (aProperty) {
+ case eCSSProperty__moz_outline_radius_topLeft: mMargin->mOutlineRadius->mTop.Reset(); break;
+ case eCSSProperty__moz_outline_radius_topRight: mMargin->mOutlineRadius->mRight.Reset(); break;
+ case eCSSProperty__moz_outline_radius_bottomRight: mMargin->mOutlineRadius->mBottom.Reset(); break;
+ case eCSSProperty__moz_outline_radius_bottomLeft: mMargin->mOutlineRadius->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ case eCSSProperty_outline_width:
+ case eCSSProperty_outline_color:
+ case eCSSProperty_outline_style:
+ case eCSSProperty_float_edge:
+ CSS_CHECK(Margin) {
+ switch (aProperty) {
+ case eCSSProperty_outline_width: mMargin->mOutlineWidth.Reset(); break;
+ case eCSSProperty_outline_color: mMargin->mOutlineColor.Reset(); break;
+ case eCSSProperty_outline_style: mMargin->mOutlineStyle.Reset(); break;
+ case eCSSProperty_float_edge: mMargin->mFloatEdge.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSPosition
+ case eCSSProperty_position:
+ case eCSSProperty_width:
+ case eCSSProperty_min_width:
+ case eCSSProperty_max_width:
+ case eCSSProperty_height:
+ case eCSSProperty_min_height:
+ case eCSSProperty_max_height:
+ case eCSSProperty_box_sizing:
+ case eCSSProperty_z_index:
+ CSS_CHECK(Position) {
+ switch (aProperty) {
+ case eCSSProperty_position: mPosition->mPosition.Reset(); break;
+ case eCSSProperty_width: mPosition->mWidth.Reset(); break;
+ case eCSSProperty_min_width: mPosition->mMinWidth.Reset(); break;
+ case eCSSProperty_max_width: mPosition->mMaxWidth.Reset(); break;
+ case eCSSProperty_height: mPosition->mHeight.Reset(); break;
+ case eCSSProperty_min_height: mPosition->mMinHeight.Reset(); break;
+ case eCSSProperty_max_height: mPosition->mMaxHeight.Reset(); break;
+ case eCSSProperty_box_sizing: mPosition->mBoxSizing.Reset(); break;
+ case eCSSProperty_z_index: mPosition->mZIndex.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ case eCSSProperty_top:
+ case eCSSProperty_right:
+ case eCSSProperty_bottom:
+ case eCSSProperty_left:
+ CSS_CHECK(Position) {
+ CSS_CHECK_RECT(mPosition->mOffset) {
+ switch (aProperty) {
+ case eCSSProperty_top: mPosition->mOffset->mTop.Reset(); break;
+ case eCSSProperty_right: mPosition->mOffset->mRight.Reset(); break;
+ case eCSSProperty_bottom: mPosition->mOffset->mBottom.Reset(); break;
+ case eCSSProperty_left: mPosition->mOffset->mLeft.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ }
+ break;
+
+ // nsCSSList
+ case eCSSProperty_list_style_type:
+ case eCSSProperty_list_style_image:
+ case eCSSProperty_list_style_position:
+ CSS_CHECK(List) {
+ switch (aProperty) {
+ case eCSSProperty_list_style_type: mList->mType.Reset(); break;
+ case eCSSProperty_list_style_image: mList->mImage.Reset(); break;
+ case eCSSProperty_list_style_position: mList->mPosition.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSTable
+ case eCSSProperty_border_collapse:
+ case eCSSProperty_border_x_spacing:
+ case eCSSProperty_border_y_spacing:
+ case eCSSProperty_caption_side:
+ case eCSSProperty_empty_cells:
+ case eCSSProperty_table_layout:
+ CSS_CHECK(Table) {
+ switch (aProperty) {
+ case eCSSProperty_border_collapse: mTable->mBorderCollapse.Reset(); break;
+ case eCSSProperty_border_x_spacing: mTable->mBorderSpacingX.Reset(); break;
+ case eCSSProperty_border_y_spacing: mTable->mBorderSpacingY.Reset(); break;
+ case eCSSProperty_caption_side: mTable->mCaptionSide.Reset(); break;
+ case eCSSProperty_empty_cells: mTable->mEmptyCells.Reset(); break;
+ case eCSSProperty_table_layout: mTable->mLayout.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSBreaks
+ case eCSSProperty_orphans:
+ case eCSSProperty_widows:
+ case eCSSProperty_page:
+ case eCSSProperty_page_break_after:
+ case eCSSProperty_page_break_before:
+ case eCSSProperty_page_break_inside:
+ CSS_CHECK(Breaks) {
+ switch (aProperty) {
+ case eCSSProperty_orphans: mBreaks->mOrphans.Reset(); break;
+ case eCSSProperty_widows: mBreaks->mWidows.Reset(); break;
+ case eCSSProperty_page: mBreaks->mPage.Reset(); break;
+ case eCSSProperty_page_break_after: mBreaks->mPageBreakAfter.Reset(); break;
+ case eCSSProperty_page_break_before: mBreaks->mPageBreakBefore.Reset(); break;
+ case eCSSProperty_page_break_inside: mBreaks->mPageBreakInside.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSPage
+ case eCSSProperty_marks:
+ case eCSSProperty_size_width:
+ case eCSSProperty_size_height:
+ CSS_CHECK(Page) {
+ switch (aProperty) {
+ case eCSSProperty_marks: mPage->mMarks.Reset(); break;
+ case eCSSProperty_size_width: mPage->mSizeWidth.Reset(); break;
+ case eCSSProperty_size_height: mPage->mSizeHeight.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSContent
+ case eCSSProperty_content:
+ case eCSSProperty_counter_increment:
+ case eCSSProperty_counter_reset:
+ case eCSSProperty_marker_offset:
+ case eCSSProperty_quotes_open:
+ case eCSSProperty_quotes_close:
+ CSS_CHECK(Content) {
+ switch (aProperty) {
+ case eCSSProperty_content:
+ CSS_CHECK_DATA(mContent->mContent, nsCSSValueList) {
+ mContent->mContent->mValue.Reset();
+ CSS_IF_DELETE(mContent->mContent->mNext);
+ }
+ break;
+ case eCSSProperty_counter_increment:
+ CSS_CHECK_DATA(mContent->mCounterIncrement, nsCSSCounterData) {
+ mContent->mCounterIncrement->mCounter.Reset();
+ CSS_IF_DELETE(mContent->mCounterIncrement->mNext);
+ }
+ break;
+ case eCSSProperty_counter_reset:
+ CSS_CHECK_DATA(mContent->mCounterReset, nsCSSCounterData) {
+ mContent->mCounterReset->mCounter.Reset();
+ CSS_IF_DELETE(mContent->mCounterReset->mNext);
+ }
+ break;
+ case eCSSProperty_marker_offset: mContent->mMarkerOffset.Reset(); break;
+ case eCSSProperty_quotes_open:
+ CSS_CHECK_DATA(mContent->mQuotes, nsCSSQuotes) {
+ mContent->mQuotes->mOpen.Reset();
+ CSS_IF_DELETE(mContent->mQuotes->mNext);
+ }
+ break;
+ case eCSSProperty_quotes_close:
+ CSS_CHECK_DATA(mContent->mQuotes, nsCSSQuotes) {
+ mContent->mQuotes->mClose.Reset();
+ CSS_IF_DELETE(mContent->mQuotes->mNext);
+ }
+ break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSUserInterface
+ case eCSSProperty_user_input:
+ case eCSSProperty_user_modify:
+ case eCSSProperty_user_select:
+ case eCSSProperty_key_equivalent:
+ case eCSSProperty_user_focus:
+ case eCSSProperty_resizer:
+ case eCSSProperty_behavior:
+ CSS_CHECK(UserInterface) {
+ switch (aProperty) {
+ case eCSSProperty_user_input: mUserInterface->mUserInput.Reset(); break;
+ case eCSSProperty_user_modify: mUserInterface->mUserModify.Reset(); break;
+ case eCSSProperty_user_select: mUserInterface->mUserSelect.Reset(); break;
+ case eCSSProperty_key_equivalent:
+ CSS_CHECK_DATA(mUserInterface->mKeyEquivalent, nsCSSValueList) {
+ mUserInterface->mKeyEquivalent->mValue.Reset();
+ CSS_IF_DELETE(mUserInterface->mKeyEquivalent->mNext);
+ }
+ break;
+ case eCSSProperty_user_focus: mUserInterface->mUserFocus.Reset(); break;
+ case eCSSProperty_resizer: mUserInterface->mResizer.Reset(); break;
+ case eCSSProperty_behavior:
+ mUserInterface->mBehavior.Reset();
+ break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // nsCSSAural
+ case eCSSProperty_azimuth:
+ case eCSSProperty_elevation:
+ case eCSSProperty_cue_after:
+ case eCSSProperty_cue_before:
+ case eCSSProperty_pause_after:
+ case eCSSProperty_pause_before:
+ case eCSSProperty_pitch:
+ case eCSSProperty_pitch_range:
+ case eCSSProperty_play_during:
+ case eCSSProperty_play_during_flags:
+ case eCSSProperty_richness:
+ case eCSSProperty_speak:
+ case eCSSProperty_speak_header:
+ case eCSSProperty_speak_numeral:
+ case eCSSProperty_speak_punctuation:
+ case eCSSProperty_speech_rate:
+ case eCSSProperty_stress:
+ case eCSSProperty_voice_family:
+ case eCSSProperty_volume:
+ CSS_CHECK(Aural) {
+ switch (aProperty) {
+ case eCSSProperty_azimuth: mAural->mAzimuth.Reset(); break;
+ case eCSSProperty_elevation: mAural->mElevation.Reset(); break;
+ case eCSSProperty_cue_after: mAural->mCueAfter.Reset(); break;
+ case eCSSProperty_cue_before: mAural->mCueBefore.Reset(); break;
+ case eCSSProperty_pause_after: mAural->mPauseAfter.Reset(); break;
+ case eCSSProperty_pause_before: mAural->mPauseBefore.Reset(); break;
+ case eCSSProperty_pitch: mAural->mPitch.Reset(); break;
+ case eCSSProperty_pitch_range: mAural->mPitchRange.Reset(); break;
+ case eCSSProperty_play_during: mAural->mPlayDuring.Reset(); break;
+ case eCSSProperty_play_during_flags: mAural->mPlayDuringFlags.Reset(); break;
+ case eCSSProperty_richness: mAural->mRichness.Reset(); break;
+ case eCSSProperty_speak: mAural->mSpeak.Reset(); break;
+ case eCSSProperty_speak_header: mAural->mSpeakHeader.Reset(); break;
+ case eCSSProperty_speak_numeral: mAural->mSpeakNumeral.Reset(); break;
+ case eCSSProperty_speak_punctuation: mAural->mSpeakPunctuation.Reset(); break;
+ case eCSSProperty_speech_rate: mAural->mSpeechRate.Reset(); break;
+ case eCSSProperty_stress: mAural->mStress.Reset(); break;
+ case eCSSProperty_voice_family: mAural->mVoiceFamily.Reset(); break;
+ case eCSSProperty_volume: mAural->mVolume.Reset(); break;
+ CSS_BOGUS_DEFAULT; // make compiler happy
+ }
+ }
+ break;
+
+ // Shorthands
+ case eCSSProperty_background:
+ RemoveProperty(eCSSProperty_background_color);
+ RemoveProperty(eCSSProperty_background_image);
+ RemoveProperty(eCSSProperty_background_repeat);
+ RemoveProperty(eCSSProperty_background_attachment);
+ RemoveProperty(eCSSProperty_background_x_position);
+ RemoveProperty(eCSSProperty_background_y_position);
+ break;
+ case eCSSProperty_border:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mBorderWidth);
+ CSS_IF_DELETE(mMargin->mBorderStyle);
+ CSS_IF_DELETE(mMargin->mBorderColor);
+ }
+ break;
+ case eCSSProperty_border_spacing:
+ RemoveProperty(eCSSProperty_border_x_spacing);
+ RemoveProperty(eCSSProperty_border_y_spacing);
+ break;
+ case eCSSProperty_clip:
+ CSS_CHECK(Display) {
+ CSS_IF_DELETE(mDisplay->mClip);
+ }
+ break;
+ case eCSSProperty_cue:
+ RemoveProperty(eCSSProperty_cue_after);
+ RemoveProperty(eCSSProperty_cue_before);
+ break;
+ case eCSSProperty_font:
+ RemoveProperty(eCSSProperty_font_family);
+ RemoveProperty(eCSSProperty_font_style);
+ RemoveProperty(eCSSProperty_font_variant);
+ RemoveProperty(eCSSProperty_font_weight);
+ RemoveProperty(eCSSProperty_font_size);
+ RemoveProperty(eCSSProperty_line_height);
+ break;
+ case eCSSProperty_list_style:
+ RemoveProperty(eCSSProperty_list_style_type);
+ RemoveProperty(eCSSProperty_list_style_image);
+ RemoveProperty(eCSSProperty_list_style_position);
+ break;
+ case eCSSProperty_margin:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mMargin);
+ }
+ break;
+ case eCSSProperty_outline:
+ RemoveProperty(eCSSProperty_outline_color);
+ RemoveProperty(eCSSProperty_outline_style);
+ RemoveProperty(eCSSProperty_outline_width);
+ break;
+ case eCSSProperty_padding:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mPadding);
+ }
+ break;
+ case eCSSProperty_pause:
+ RemoveProperty(eCSSProperty_pause_after);
+ RemoveProperty(eCSSProperty_pause_before);
+ break;
+ case eCSSProperty_quotes:
+ CSS_CHECK(Content) {
+ CSS_IF_DELETE(mContent->mQuotes);
+ }
+ break;
+ case eCSSProperty_size:
+ RemoveProperty(eCSSProperty_size_width);
+ RemoveProperty(eCSSProperty_size_height);
+ break;
+ case eCSSProperty_text_shadow:
+ CSS_CHECK(Text) {
+ CSS_IF_DELETE(mText->mTextShadow);
+ }
+ break;
+ case eCSSProperty_background_position:
+ RemoveProperty(eCSSProperty_background_x_position);
+ RemoveProperty(eCSSProperty_background_y_position);
+ break;
+ case eCSSProperty_border_top:
+ RemoveProperty(eCSSProperty_border_top_width);
+ RemoveProperty(eCSSProperty_border_top_style);
+ RemoveProperty(eCSSProperty_border_top_color);
+ break;
+ case eCSSProperty_border_right:
+ RemoveProperty(eCSSProperty_border_right_width);
+ RemoveProperty(eCSSProperty_border_right_style);
+ RemoveProperty(eCSSProperty_border_right_color);
+ break;
+ case eCSSProperty_border_bottom:
+ RemoveProperty(eCSSProperty_border_bottom_width);
+ RemoveProperty(eCSSProperty_border_bottom_style);
+ RemoveProperty(eCSSProperty_border_bottom_color);
+ break;
+ case eCSSProperty_border_left:
+ RemoveProperty(eCSSProperty_border_left_width);
+ RemoveProperty(eCSSProperty_border_left_style);
+ RemoveProperty(eCSSProperty_border_left_color);
+ break;
+ case eCSSProperty_border_color:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mBorderColor);
+ }
+ break;
+ case eCSSProperty_border_style:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mBorderStyle);
+ }
+ break;
+ case eCSSProperty_border_width:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mBorderWidth);
+ }
+ break;
+ case eCSSProperty__moz_border_radius:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mBorderRadius);
+ }
+ break;
+ case eCSSProperty__moz_outline_radius:
+ CSS_CHECK(Margin) {
+ CSS_IF_DELETE(mMargin->mOutlineRadius);
+ }
+ break;
+// default: // XXX explicitly removing default case so compiler will help find missed props
+ case eCSSProperty_UNKNOWN:
+ case eCSSProperty_COUNT:
+ result = NS_ERROR_ILLEGAL_VALUE;
+ break;
+ }
+
+ if (NS_OK == result) {
+ if (nsnull != mOrder) {
+ PRInt32 index = mOrder->IndexOf((void*)aProperty);
+ if (-1 != index) {
+ mOrder->RemoveElementAt(index);
+ }
+ }
+ }
+ return result;
+}
+
+
+NS_IMETHODIMP
+CSSDeclarationImpl::RemoveProperty(nsCSSProperty aProperty, nsCSSValue& aValue)
+{
+ nsresult result = NS_OK;
+
+ PRBool isImportant = PR_FALSE;
+ GetValueIsImportant(aProperty, isImportant);
+ if (isImportant) {
+ result = mImportant->GetValue(aProperty, aValue);
+ if (NS_SUCCEEDED(result)) {
+ result = mImportant->RemoveProperty(aProperty);
+ }
+ } else {
+ result = GetValue(aProperty, aValue);
+ if (NS_SUCCEEDED(result)) {
+ result = RemoveProperty(aProperty);
+ }
+ }
+ return result;
+}
+
NS_IMETHODIMP
CSSDeclarationImpl::AppendComment(const nsString& aComment)
{
diff --git a/layout/style/nsCSSStyleRule.cpp b/layout/style/nsCSSStyleRule.cpp
index e24e3c76d68..718812f770c 100644
--- a/layout/style/nsCSSStyleRule.cpp
+++ b/layout/style/nsCSSStyleRule.cpp
@@ -829,12 +829,7 @@ DOMCSSDeclarationImpl::RemoveProperty(const nsString& aPropertyName,
nsCSSProperty prop = nsCSSProps::LookupProperty(aPropertyName);
nsCSSValue val;
-#if 0 // This is not done yet, once it is this ifdef should be removed
rv = decl->RemoveProperty(prop, val);
-#else
- rv = NS_ERROR_NOT_IMPLEMENTED;
-#endif
-
if (NS_FAILED(rv))
return rv;