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

Side by Side Diff: third_party/WebKit/Source/core/editing/EditingStyle.cpp

Issue 1399853005: Changed CSSColorValue to return a Color (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@split_color
Patch Set: Rebase Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2007, 2008, 2009 Apple Computer, Inc. 2 * Copyright (C) 2007, 2008, 2009 Apple Computer, Inc.
3 * Copyright (C) 2010, 2011 Google Inc. All rights reserved. 3 * Copyright (C) 2010, 2011 Google Inc. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 return nullptr; 154 return nullptr;
155 return CSSComputedStyleDeclaration::create(elem); 155 return CSSComputedStyleDeclaration::create(elem);
156 } 156 }
157 157
158 static PassRefPtrWillBeRawPtr<MutableStylePropertySet> getPropertiesNotIn(StyleP ropertySet* styleWithRedundantProperties, CSSStyleDeclaration* baseStyle); 158 static PassRefPtrWillBeRawPtr<MutableStylePropertySet> getPropertiesNotIn(StyleP ropertySet* styleWithRedundantProperties, CSSStyleDeclaration* baseStyle);
159 enum LegacyFontSizeMode { AlwaysUseLegacyFontSize, UseLegacyFontSizeOnlyIfPixelV aluesMatch }; 159 enum LegacyFontSizeMode { AlwaysUseLegacyFontSize, UseLegacyFontSizeOnlyIfPixelV aluesMatch };
160 static int legacyFontSizeFromCSSValue(Document*, CSSPrimitiveValue*, bool, Legac yFontSizeMode); 160 static int legacyFontSizeFromCSSValue(Document*, CSSPrimitiveValue*, bool, Legac yFontSizeMode);
161 static bool isTransparentColorValue(CSSValue*); 161 static bool isTransparentColorValue(CSSValue*);
162 static bool hasTransparentBackgroundColor(CSSStyleDeclaration*); 162 static bool hasTransparentBackgroundColor(CSSStyleDeclaration*);
163 static bool hasTransparentBackgroundColor(StylePropertySet*); 163 static bool hasTransparentBackgroundColor(StylePropertySet*);
164 static PassRefPtrWillBeRawPtr<CSSValue> backgroundColorInEffect(Node*); 164 static PassRefPtrWillBeRawPtr<CSSValue> backgroundColorValueInEffect(Node*);
165 165
166 class HTMLElementEquivalent : public NoBaseWillBeGarbageCollected<HTMLElementEqu ivalent> { 166 class HTMLElementEquivalent : public NoBaseWillBeGarbageCollected<HTMLElementEqu ivalent> {
167 USING_FAST_MALLOC_WILL_BE_REMOVED(HTMLElementEquivalent); 167 USING_FAST_MALLOC_WILL_BE_REMOVED(HTMLElementEquivalent);
168 DECLARE_EMPTY_VIRTUAL_DESTRUCTOR_WILL_BE_REMOVED(HTMLElementEquivalent); 168 DECLARE_EMPTY_VIRTUAL_DESTRUCTOR_WILL_BE_REMOVED(HTMLElementEquivalent);
169 public: 169 public:
170 static PassOwnPtrWillBeRawPtr<HTMLElementEquivalent> create(CSSPropertyID pr opertyID, CSSValueID primitiveValue, const HTMLQualifiedName& tagName) 170 static PassOwnPtrWillBeRawPtr<HTMLElementEquivalent> create(CSSPropertyID pr opertyID, CSSValueID primitiveValue, const HTMLQualifiedName& tagName)
171 { 171 {
172 return adoptPtrWillBeNoop(new HTMLElementEquivalent(propertyID, primitiv eValue, tagName)); 172 return adoptPtrWillBeNoop(new HTMLElementEquivalent(propertyID, primitiv eValue, tagName));
173 } 173 }
174 174
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 , m_isMonospaceFont(false) 388 , m_isMonospaceFont(false)
389 , m_fontSizeDelta(NoFontDelta) 389 , m_fontSizeDelta(NoFontDelta)
390 { 390 {
391 setProperty(propertyID, value); 391 setProperty(propertyID, value);
392 } 392 }
393 393
394 EditingStyle::~EditingStyle() 394 EditingStyle::~EditingStyle()
395 { 395 {
396 } 396 }
397 397
398 static RGBA32 cssValueToRGBA(CSSValue* colorValue) 398 static Color cssValueToColor(CSSValue* colorValue)
399 { 399 {
400 if (!colorValue || (!colorValue->isColorValue() && !colorValue->isPrimitiveV alue())) 400 if (!colorValue || (!colorValue->isColorValue() && !colorValue->isPrimitiveV alue()))
401 return Color::transparent; 401 return Color::transparent;
402 402
403 if (colorValue->isColorValue()) 403 if (colorValue->isColorValue())
404 return toCSSColorValue(colorValue)->value(); 404 return toCSSColorValue(colorValue)->value();
405 405
406 RGBA32 rgba = 0; 406 Color color = 0;
407 // FIXME: Why ignore the return value? 407 // FIXME: Why ignore the return value?
408 CSSParser::parseColor(rgba, colorValue->cssText()); 408 CSSParser::parseColor(color, colorValue->cssText());
409 return rgba; 409 return color;
410 } 410 }
411 411
412 static inline RGBA32 getRGBAFontColor(CSSStyleDeclaration* style) 412 static inline Color getFontColor(CSSStyleDeclaration* style)
413 { 413 {
414 return cssValueToRGBA(style->getPropertyCSSValueInternal(CSSPropertyColor).g et()); 414 return cssValueToColor(style->getPropertyCSSValueInternal(CSSPropertyColor). get());
415 } 415 }
416 416
417 static inline RGBA32 getRGBAFontColor(StylePropertySet* style) 417 static inline Color getFontColor(StylePropertySet* style)
418 { 418 {
419 return cssValueToRGBA(style->getPropertyCSSValue(CSSPropertyColor).get()); 419 return cssValueToColor(style->getPropertyCSSValue(CSSPropertyColor).get());
420 } 420 }
421 421
422 static inline RGBA32 getRGBABackgroundColor(CSSStyleDeclaration* style) 422 static inline Color getBackgroundColor(CSSStyleDeclaration* style)
423 { 423 {
424 return cssValueToRGBA(style->getPropertyCSSValueInternal(CSSPropertyBackgrou ndColor).get()); 424 return cssValueToColor(style->getPropertyCSSValueInternal(CSSPropertyBackgro undColor).get());
425 } 425 }
426 426
427 static inline RGBA32 getRGBABackgroundColor(StylePropertySet* style) 427 static inline Color getBackgroundColor(StylePropertySet* style)
428 { 428 {
429 return cssValueToRGBA(style->getPropertyCSSValue(CSSPropertyBackgroundColor) .get()); 429 return cssValueToColor(style->getPropertyCSSValue(CSSPropertyBackgroundColor ).get());
430 } 430 }
431 431
432 static inline RGBA32 rgbaBackgroundColorInEffect(Node* node) 432 static inline Color backgroundColorInEffect(Node* node)
433 { 433 {
434 return cssValueToRGBA(backgroundColorInEffect(node).get()); 434 return cssValueToColor(backgroundColorValueInEffect(node).get());
435 } 435 }
436 436
437 static int textAlignResolvingStartAndEnd(int textAlign, int direction) 437 static int textAlignResolvingStartAndEnd(int textAlign, int direction)
438 { 438 {
439 switch (textAlign) { 439 switch (textAlign) {
440 case CSSValueCenter: 440 case CSSValueCenter:
441 case CSSValueWebkitCenter: 441 case CSSValueWebkitCenter:
442 return CSSValueCenter; 442 return CSSValueCenter;
443 case CSSValueJustify: 443 case CSSValueJustify:
444 return CSSValueJustify; 444 return CSSValueJustify;
(...skipping 21 matching lines...) Expand all
466 { 466 {
467 if (isTabHTMLSpanElementTextNode(node)) 467 if (isTabHTMLSpanElementTextNode(node))
468 node = tabSpanElement(node)->parentNode(); 468 node = tabSpanElement(node)->parentNode();
469 else if (isTabHTMLSpanElement(node)) 469 else if (isTabHTMLSpanElement(node))
470 node = node->parentNode(); 470 node = node->parentNode();
471 471
472 RefPtrWillBeRawPtr<CSSComputedStyleDeclaration> computedStyleAtPosition = CS SComputedStyleDeclaration::create(node); 472 RefPtrWillBeRawPtr<CSSComputedStyleDeclaration> computedStyleAtPosition = CS SComputedStyleDeclaration::create(node);
473 m_mutableStyle = propertiesToInclude == AllProperties && computedStyleAtPosi tion ? computedStyleAtPosition->copyProperties() : editingStyleFromComputedStyle (computedStyleAtPosition); 473 m_mutableStyle = propertiesToInclude == AllProperties && computedStyleAtPosi tion ? computedStyleAtPosition->copyProperties() : editingStyleFromComputedStyle (computedStyleAtPosition);
474 474
475 if (propertiesToInclude == EditingPropertiesInEffect) { 475 if (propertiesToInclude == EditingPropertiesInEffect) {
476 if (RefPtrWillBeRawPtr<CSSValue> value = backgroundColorInEffect(node)) 476 if (RefPtrWillBeRawPtr<CSSValue> value = backgroundColorValueInEffect(no de))
477 m_mutableStyle->setProperty(CSSPropertyBackgroundColor, value->cssTe xt()); 477 m_mutableStyle->setProperty(CSSPropertyBackgroundColor, value->cssTe xt());
478 if (RefPtrWillBeRawPtr<CSSValue> value = computedStyleAtPosition->getPro pertyCSSValue(CSSPropertyWebkitTextDecorationsInEffect)) 478 if (RefPtrWillBeRawPtr<CSSValue> value = computedStyleAtPosition->getPro pertyCSSValue(CSSPropertyWebkitTextDecorationsInEffect))
479 m_mutableStyle->setProperty(CSSPropertyTextDecoration, value->cssTex t()); 479 m_mutableStyle->setProperty(CSSPropertyTextDecoration, value->cssTex t());
480 } 480 }
481 481
482 if (node && node->ensureComputedStyle()) { 482 if (node && node->ensureComputedStyle()) {
483 const ComputedStyle* computedStyle = node->ensureComputedStyle(); 483 const ComputedStyle* computedStyle = node->ensureComputedStyle();
484 removeTextFillAndStrokeColorsIfNeeded(computedStyle); 484 removeTextFillAndStrokeColorsIfNeeded(computedStyle);
485 replaceFontSizeByKeywordIfPossible(computedStyle, computedStyleAtPositio n.get()); 485 replaceFontSizeByKeywordIfPossible(computedStyle, computedStyleAtPositio n.get());
486 } 486 }
(...skipping 511 matching lines...) Expand 10 before | Expand all | Expand 10 after
998 if (shouldPreserveWritingDirection == PreserveWritingDirection) { 998 if (shouldPreserveWritingDirection == PreserveWritingDirection) {
999 unicodeBidi = m_mutableStyle->getPropertyCSSValue(CSSPropertyUnicodeBidi ); 999 unicodeBidi = m_mutableStyle->getPropertyCSSValue(CSSPropertyUnicodeBidi );
1000 direction = m_mutableStyle->getPropertyCSSValue(CSSPropertyDirection); 1000 direction = m_mutableStyle->getPropertyCSSValue(CSSPropertyDirection);
1001 } 1001 }
1002 1002
1003 m_mutableStyle->removeEquivalentProperties(styleAtPosition); 1003 m_mutableStyle->removeEquivalentProperties(styleAtPosition);
1004 1004
1005 if (textAlignResolvingStartAndEnd(m_mutableStyle.get()) == textAlignResolvin gStartAndEnd(styleAtPosition)) 1005 if (textAlignResolvingStartAndEnd(m_mutableStyle.get()) == textAlignResolvin gStartAndEnd(styleAtPosition))
1006 m_mutableStyle->removeProperty(CSSPropertyTextAlign); 1006 m_mutableStyle->removeProperty(CSSPropertyTextAlign);
1007 1007
1008 if (getRGBAFontColor(m_mutableStyle.get()) == getRGBAFontColor(styleAtPositi on)) 1008 if (getFontColor(m_mutableStyle.get()) == getFontColor(styleAtPosition))
1009 m_mutableStyle->removeProperty(CSSPropertyColor); 1009 m_mutableStyle->removeProperty(CSSPropertyColor);
1010 1010
1011 if (hasTransparentBackgroundColor(m_mutableStyle.get()) 1011 if (hasTransparentBackgroundColor(m_mutableStyle.get())
1012 || cssValueToRGBA(m_mutableStyle->getPropertyCSSValue(CSSPropertyBackgro undColor).get()) == rgbaBackgroundColorInEffect(position.computeContainerNode()) ) 1012 || cssValueToColor(m_mutableStyle->getPropertyCSSValue(CSSPropertyBackgr oundColor).get()) == backgroundColorInEffect(position.computeContainerNode()))
1013 m_mutableStyle->removeProperty(CSSPropertyBackgroundColor); 1013 m_mutableStyle->removeProperty(CSSPropertyBackgroundColor);
1014 1014
1015 if (unicodeBidi && unicodeBidi->isPrimitiveValue()) { 1015 if (unicodeBidi && unicodeBidi->isPrimitiveValue()) {
1016 m_mutableStyle->setProperty(CSSPropertyUnicodeBidi, toCSSPrimitiveValue( unicodeBidi.get())->getValueID()); 1016 m_mutableStyle->setProperty(CSSPropertyUnicodeBidi, toCSSPrimitiveValue( unicodeBidi.get())->getValueID());
1017 if (direction && direction->isPrimitiveValue()) 1017 if (direction && direction->isPrimitiveValue())
1018 m_mutableStyle->setProperty(CSSPropertyDirection, toCSSPrimitiveValu e(direction.get())->getValueID()); 1018 m_mutableStyle->setProperty(CSSPropertyDirection, toCSSPrimitiveValu e(direction.get())->getValueID());
1019 } 1019 }
1020 } 1020 }
1021 1021
1022 void EditingStyle::mergeTypingStyle(Document* document) 1022 void EditingStyle::mergeTypingStyle(Document* document)
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after
1332 return nullptr; 1332 return nullptr;
1333 1333
1334 RefPtrWillBeRawPtr<EditingStyle> style = EditingStyle::create(element, Editi ngStyle::AllProperties); 1334 RefPtrWillBeRawPtr<EditingStyle> style = EditingStyle::create(element, Editi ngStyle::AllProperties);
1335 style->mergeTypingStyle(&element->document()); 1335 style->mergeTypingStyle(&element->document());
1336 1336
1337 // If background color is transparent, traverse parent nodes until we hit a different value or document root 1337 // If background color is transparent, traverse parent nodes until we hit a different value or document root
1338 // Also, if the selection is a range, ignore the background color at the sta rt of selection, 1338 // Also, if the selection is a range, ignore the background color at the sta rt of selection,
1339 // and find the background color of the common ancestor. 1339 // and find the background color of the common ancestor.
1340 if (shouldUseBackgroundColorInEffect && (selection.isRange() || hasTranspare ntBackgroundColor(style->m_mutableStyle.get()))) { 1340 if (shouldUseBackgroundColorInEffect && (selection.isRange() || hasTranspare ntBackgroundColor(style->m_mutableStyle.get()))) {
1341 const EphemeralRange range(selection.toNormalizedEphemeralRange()); 1341 const EphemeralRange range(selection.toNormalizedEphemeralRange());
1342 if (PassRefPtrWillBeRawPtr<CSSValue> value = backgroundColorInEffect(Ran ge::commonAncestorContainer(range.startPosition().computeContainerNode(), range. endPosition().computeContainerNode()))) 1342 if (PassRefPtrWillBeRawPtr<CSSValue> value = backgroundColorValueInEffec t(Range::commonAncestorContainer(range.startPosition().computeContainerNode(), r ange.endPosition().computeContainerNode())))
1343 style->setProperty(CSSPropertyBackgroundColor, value->cssText()); 1343 style->setProperty(CSSPropertyBackgroundColor, value->cssText());
1344 } 1344 }
1345 1345
1346 return style; 1346 return style;
1347 } 1347 }
1348 1348
1349 WritingDirection EditingStyle::textDirectionForSelection(const VisibleSelection& selection, EditingStyle* typingStyle, bool& hasNestedOrMultipleEmbeddings) 1349 WritingDirection EditingStyle::textDirectionForSelection(const VisibleSelection& selection, EditingStyle* typingStyle, bool& hasNestedOrMultipleEmbeddings)
1350 { 1350 {
1351 hasNestedOrMultipleEmbeddings = true; 1351 hasNestedOrMultipleEmbeddings = true;
1352 1352
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
1537 style->removeProperty(CSSPropertyVerticalAlign); 1537 style->removeProperty(CSSPropertyVerticalAlign);
1538 m_applySubscript = true; 1538 m_applySubscript = true;
1539 break; 1539 break;
1540 case CSSValueSuper: 1540 case CSSValueSuper:
1541 style->removeProperty(CSSPropertyVerticalAlign); 1541 style->removeProperty(CSSPropertyVerticalAlign);
1542 m_applySuperscript = true; 1542 m_applySuperscript = true;
1543 break; 1543 break;
1544 } 1544 }
1545 1545
1546 if (style->getPropertyCSSValue(CSSPropertyColor)) { 1546 if (style->getPropertyCSSValue(CSSPropertyColor)) {
1547 m_applyFontColor = Color(getRGBAFontColor(style)).serialized(); 1547 m_applyFontColor = getFontColor(style).serialized();
1548 style->removeProperty(CSSPropertyColor); 1548 style->removeProperty(CSSPropertyColor);
1549 } 1549 }
1550 1550
1551 m_applyFontFace = style->getPropertyValue(CSSPropertyFontFamily); 1551 m_applyFontFace = style->getPropertyValue(CSSPropertyFontFamily);
1552 // Remove single quotes for Outlook 2007 compatibility. See https://bugs.web kit.org/show_bug.cgi?id=79448 1552 // Remove single quotes for Outlook 2007 compatibility. See https://bugs.web kit.org/show_bug.cgi?id=79448
1553 m_applyFontFace.replaceWithLiteral('\'', ""); 1553 m_applyFontFace.replaceWithLiteral('\'', "");
1554 style->removeProperty(CSSPropertyFontFamily); 1554 style->removeProperty(CSSPropertyFontFamily);
1555 1555
1556 if (RefPtrWillBeRawPtr<CSSValue> fontSize = style->getPropertyCSSValue(CSSPr opertyFontSize)) { 1556 if (RefPtrWillBeRawPtr<CSSValue> fontSize = style->getPropertyCSSValue(CSSPr opertyFontSize)) {
1557 if (!fontSize->isPrimitiveValue()) { 1557 if (!fontSize->isPrimitiveValue()) {
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1629 diffTextDecorations(result.get(), CSSPropertyWebkitTextDecorationsInEffect, baseTextDecorationsInEffect.get()); 1629 diffTextDecorations(result.get(), CSSPropertyWebkitTextDecorationsInEffect, baseTextDecorationsInEffect.get());
1630 1630
1631 if (RefPtrWillBeRawPtr<CSSValue> baseFontWeight = baseStyle->getPropertyCSSV alueInternal(CSSPropertyFontWeight)) { 1631 if (RefPtrWillBeRawPtr<CSSValue> baseFontWeight = baseStyle->getPropertyCSSV alueInternal(CSSPropertyFontWeight)) {
1632 if (RefPtrWillBeRawPtr<CSSValue> fontWeight = result->getPropertyCSSValu e(CSSPropertyFontWeight)) { 1632 if (RefPtrWillBeRawPtr<CSSValue> fontWeight = result->getPropertyCSSValu e(CSSPropertyFontWeight)) {
1633 if (!fontWeightNeedsResolving(fontWeight.get()) && !fontWeightNeedsR esolving(baseFontWeight.get()) 1633 if (!fontWeightNeedsResolving(fontWeight.get()) && !fontWeightNeedsR esolving(baseFontWeight.get())
1634 && (fontWeightIsBold(fontWeight.get()) == fontWeightIsBold(baseF ontWeight.get()))) 1634 && (fontWeightIsBold(fontWeight.get()) == fontWeightIsBold(baseF ontWeight.get())))
1635 result->removeProperty(CSSPropertyFontWeight); 1635 result->removeProperty(CSSPropertyFontWeight);
1636 } 1636 }
1637 } 1637 }
1638 1638
1639 if (baseStyle->getPropertyCSSValueInternal(CSSPropertyColor) && getRGBAFontC olor(result.get()) == getRGBAFontColor(baseStyle)) 1639 if (baseStyle->getPropertyCSSValueInternal(CSSPropertyColor) && getFontColor (result.get()) == getFontColor(baseStyle))
1640 result->removeProperty(CSSPropertyColor); 1640 result->removeProperty(CSSPropertyColor);
1641 1641
1642 if (baseStyle->getPropertyCSSValueInternal(CSSPropertyTextAlign) 1642 if (baseStyle->getPropertyCSSValueInternal(CSSPropertyTextAlign)
1643 && textAlignResolvingStartAndEnd(result.get()) == textAlignResolvingStar tAndEnd(baseStyle)) 1643 && textAlignResolvingStartAndEnd(result.get()) == textAlignResolvingStar tAndEnd(baseStyle))
1644 result->removeProperty(CSSPropertyTextAlign); 1644 result->removeProperty(CSSPropertyTextAlign);
1645 1645
1646 if (baseStyle->getPropertyCSSValueInternal(CSSPropertyBackgroundColor) && ge tRGBABackgroundColor(result.get()) == getRGBABackgroundColor(baseStyle)) 1646 if (baseStyle->getPropertyCSSValueInternal(CSSPropertyBackgroundColor) && ge tBackgroundColor(result.get()) == getBackgroundColor(baseStyle))
1647 result->removeProperty(CSSPropertyBackgroundColor); 1647 result->removeProperty(CSSPropertyBackgroundColor);
1648 1648
1649 return result.release(); 1649 return result.release();
1650 } 1650 }
1651 1651
1652 CSSValueID getIdentifierValue(StylePropertySet* style, CSSPropertyID propertyID) 1652 CSSValueID getIdentifierValue(StylePropertySet* style, CSSPropertyID propertyID)
1653 { 1653 {
1654 if (!style) 1654 if (!style)
1655 return CSSValueInvalid; 1655 return CSSValueInvalid;
1656 RefPtrWillBeRawPtr<CSSValue> value = style->getPropertyCSSValue(propertyID); 1656 RefPtrWillBeRawPtr<CSSValue> value = style->getPropertyCSSValue(propertyID);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1688 return value->getValueID() - CSSValueXSmall + 1; 1688 return value->getValueID() - CSSValueXSmall + 1;
1689 1689
1690 return 0; 1690 return 0;
1691 } 1691 }
1692 1692
1693 bool isTransparentColorValue(CSSValue* cssValue) 1693 bool isTransparentColorValue(CSSValue* cssValue)
1694 { 1694 {
1695 if (!cssValue) 1695 if (!cssValue)
1696 return true; 1696 return true;
1697 if (cssValue->isColorValue()) 1697 if (cssValue->isColorValue())
1698 return !alphaChannel(toCSSColorValue(cssValue)->value()); 1698 return !toCSSColorValue(cssValue)->value().alpha();
1699 if (!cssValue->isPrimitiveValue()) 1699 if (!cssValue->isPrimitiveValue())
1700 return false; 1700 return false;
1701 CSSPrimitiveValue* value = toCSSPrimitiveValue(cssValue); 1701 CSSPrimitiveValue* value = toCSSPrimitiveValue(cssValue);
1702 return value->getValueID() == CSSValueTransparent; 1702 return value->getValueID() == CSSValueTransparent;
1703 } 1703 }
1704 1704
1705 bool hasTransparentBackgroundColor(CSSStyleDeclaration* style) 1705 bool hasTransparentBackgroundColor(CSSStyleDeclaration* style)
1706 { 1706 {
1707 RefPtrWillBeRawPtr<CSSValue> cssValue = style->getPropertyCSSValueInternal(C SSPropertyBackgroundColor); 1707 RefPtrWillBeRawPtr<CSSValue> cssValue = style->getPropertyCSSValueInternal(C SSPropertyBackgroundColor);
1708 return isTransparentColorValue(cssValue.get()); 1708 return isTransparentColorValue(cssValue.get());
1709 } 1709 }
1710 1710
1711 bool hasTransparentBackgroundColor(StylePropertySet* style) 1711 bool hasTransparentBackgroundColor(StylePropertySet* style)
1712 { 1712 {
1713 RefPtrWillBeRawPtr<CSSValue> cssValue = style->getPropertyCSSValue(CSSProper tyBackgroundColor); 1713 RefPtrWillBeRawPtr<CSSValue> cssValue = style->getPropertyCSSValue(CSSProper tyBackgroundColor);
1714 return isTransparentColorValue(cssValue.get()); 1714 return isTransparentColorValue(cssValue.get());
1715 } 1715 }
1716 1716
1717 PassRefPtrWillBeRawPtr<CSSValue> backgroundColorInEffect(Node* node) 1717 PassRefPtrWillBeRawPtr<CSSValue> backgroundColorValueInEffect(Node* node)
1718 { 1718 {
1719 for (Node* ancestor = node; ancestor; ancestor = ancestor->parentNode()) { 1719 for (Node* ancestor = node; ancestor; ancestor = ancestor->parentNode()) {
1720 RefPtrWillBeRawPtr<CSSComputedStyleDeclaration> ancestorStyle = CSSCompu tedStyleDeclaration::create(ancestor); 1720 RefPtrWillBeRawPtr<CSSComputedStyleDeclaration> ancestorStyle = CSSCompu tedStyleDeclaration::create(ancestor);
1721 if (!hasTransparentBackgroundColor(ancestorStyle.get())) 1721 if (!hasTransparentBackgroundColor(ancestorStyle.get()))
1722 return ancestorStyle->getPropertyCSSValue(CSSPropertyBackgroundColor ); 1722 return ancestorStyle->getPropertyCSSValue(CSSPropertyBackgroundColor );
1723 } 1723 }
1724 return nullptr; 1724 return nullptr;
1725 } 1725 }
1726 1726
1727 } 1727 }
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/dom/TextLinkColors.cpp ('k') | third_party/WebKit/Source/core/html/HTMLBodyElement.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698