| Index: Source/core/css/parser/CSSPropertyParser.cpp
 | 
| diff --git a/Source/core/css/parser/CSSPropertyParser.cpp b/Source/core/css/parser/CSSPropertyParser.cpp
 | 
| index de115bb91133da23bbbc11178ebc7941aec60aa2..19fbd51bfa737be2367564d993ee80881c683cdc 100644
 | 
| --- a/Source/core/css/parser/CSSPropertyParser.cpp
 | 
| +++ b/Source/core/css/parser/CSSPropertyParser.cpp
 | 
| @@ -55,6 +55,7 @@
 | 
|  #include "core/css/CSSLineBoxContainValue.h"
 | 
|  #include "core/css/CSSParserValues.h"
 | 
|  #include "core/css/CSSPrimitiveValue.h"
 | 
| +#include "core/css/CSSPrimitiveValueMappings.h"
 | 
|  #include "core/css/CSSPropertySourceData.h"
 | 
|  #include "core/css/CSSReflectValue.h"
 | 
|  #include "core/css/CSSSVGDocumentValue.h"
 | 
| @@ -1413,11 +1414,11 @@ bool CSSPropertyParser::parseValue(CSSPropertyID propId, bool important)
 | 
|      case CSSPropertyFont:
 | 
|          // [ [ 'font-style' || 'font-variant' || 'font-weight' ]? 'font-size' [ / 'line-height' ]?
 | 
|          // 'font-family' ] | caption | icon | menu | message-box | small-caption | status-bar | inherit
 | 
| -        if (id >= CSSValueCaption && id <= CSSValueStatusBar)
 | 
| -            validPrimitive = true;
 | 
| -        else
 | 
| -            return parseFont(important);
 | 
| -        break;
 | 
| +        if (num == 1 && id >= CSSValueCaption && id <= CSSValueStatusBar) {
 | 
| +            parseSystemFont(important);
 | 
| +            return true;
 | 
| +        }
 | 
| +        return parseFont(important);
 | 
|      case CSSPropertyListStyle:
 | 
|          return parseShorthand(propId, listStyleShorthand(), important);
 | 
|      case CSSPropertyWebkitColumns:
 | 
| @@ -4282,6 +4283,30 @@ PassRefPtrWillBeRawPtr<CSSPrimitiveValue> CSSPropertyParser::parseBasicShape()
 | 
|      return cssValuePool().createValue(shape.release());
 | 
|  }
 | 
|  
 | 
| +void CSSPropertyParser::parseSystemFont(bool important)
 | 
| +{
 | 
| +    ASSERT(m_valueList->size() == 1);
 | 
| +    CSSValueID systemFontID = m_valueList->valueAt(0)->id;
 | 
| +    ASSERT(systemFontID >= CSSValueCaption && systemFontID <= CSSValueStatusBar);
 | 
| +    m_valueList->next();
 | 
| +
 | 
| +    FontStyle fontStyle = FontStyleNormal;
 | 
| +    FontWeight fontWeight = FontWeightNormal;
 | 
| +    float fontSize = 0;
 | 
| +    AtomicString fontFamily;
 | 
| +    RenderTheme::theme().systemFont(systemFontID, fontStyle, fontWeight, fontSize, fontFamily);
 | 
| +
 | 
| +    ShorthandScope scope(this, CSSPropertyFont);
 | 
| +    addProperty(CSSPropertyFontStyle, cssValuePool().createIdentifierValue(fontStyle == FontStyleItalic ? CSSValueItalic : CSSValueNormal), important);
 | 
| +    addProperty(CSSPropertyFontWeight, cssValuePool().createValue(fontWeight), important);
 | 
| +    addProperty(CSSPropertyFontSize, cssValuePool().createValue(fontSize, CSSPrimitiveValue::CSS_PX), important);
 | 
| +    RefPtr<CSSValueList> fontFamilyList = CSSValueList::createCommaSeparated();
 | 
| +    fontFamilyList->append(cssValuePool().createFontFamilyValue(fontFamily));
 | 
| +    addProperty(CSSPropertyFontFamily, fontFamilyList.release(), important);
 | 
| +    addProperty(CSSPropertyFontVariant, cssValuePool().createIdentifierValue(CSSValueNormal), important);
 | 
| +    addProperty(CSSPropertyLineHeight, cssValuePool().createIdentifierValue(CSSValueNormal), important);
 | 
| +}
 | 
| +
 | 
|  // [ 'font-style' || 'font-variant' || 'font-weight' ]? 'font-size' [ / 'line-height' ]? 'font-family'
 | 
|  bool CSSPropertyParser::parseFont(bool important)
 | 
|  {
 | 
| 
 |