| Index: Source/core/css/MediaList.cpp
 | 
| diff --git a/Source/core/css/MediaList.cpp b/Source/core/css/MediaList.cpp
 | 
| index ebaa05ba9a9db25a3e98523954e854e13f573e22..9ce772ff9740d40184f407813df0074840b65229 100644
 | 
| --- a/Source/core/css/MediaList.cpp
 | 
| +++ b/Source/core/css/MediaList.cpp
 | 
| @@ -120,68 +120,60 @@ static String parseMediaDescriptor(const String& string)
 | 
|      return string.left(i);
 | 
|  }
 | 
|  
 | 
| -bool MediaQuerySet::parse(const String& mediaString)
 | 
| +PassOwnPtr<MediaQuery> MediaQuerySet::parseMediaQuery(const String& queryString)
 | 
|  {
 | 
|      CSSParser parser(CSSStrictMode);
 | 
| +    OwnPtr<MediaQuery> parsedQuery = parser.parseMediaQuery(queryString);
 | 
| +
 | 
| +    if (parsedQuery)
 | 
| +        return parsedQuery.release();
 | 
| +
 | 
| +    if (m_fallbackToDescriptor) {
 | 
| +        String medium = parseMediaDescriptor(queryString);
 | 
| +        if (!medium.isNull())
 | 
| +            return adoptPtr(new MediaQuery(MediaQuery::None, medium, nullptr));
 | 
| +    }
 | 
| +
 | 
| +    return adoptPtr(new MediaQuery(MediaQuery::None, "not all", nullptr));
 | 
| +}
 | 
| +
 | 
| +bool MediaQuerySet::parse(const String& mediaString)
 | 
| +{
 | 
| +    if (mediaString.isEmpty()) {
 | 
| +        m_queries.clear();
 | 
| +        return true;
 | 
| +    }
 | 
|  
 | 
| -    Vector<OwnPtr<MediaQuery> > result;
 | 
|      Vector<String> list;
 | 
| -    mediaString.split(',', list);
 | 
| +    // FIXME: This is too simple as it shouldn't split when the ',' is inside
 | 
| +    // other allowed matching pairs such as (), [], {}, "", and ''.
 | 
| +    mediaString.split(',', /* allowEmptyEntries */ true, list);
 | 
| +
 | 
| +    Vector<OwnPtr<MediaQuery> > result;
 | 
| +    result.reserveInitialCapacity(list.size());
 | 
| +
 | 
|      for (unsigned i = 0; i < list.size(); ++i) {
 | 
| -        String medium = list[i].stripWhiteSpace();
 | 
| -        if (medium.isEmpty()) {
 | 
| -            if (!m_fallbackToDescriptor)
 | 
| -                return false;
 | 
| -            continue;
 | 
| -        }
 | 
| -        OwnPtr<MediaQuery> mediaQuery = parser.parseMediaQuery(medium);
 | 
| -        if (!mediaQuery) {
 | 
| -            if (!m_fallbackToDescriptor)
 | 
| -                return false;
 | 
| -            String mediaDescriptor = parseMediaDescriptor(medium);
 | 
| -            if (mediaDescriptor.isNull())
 | 
| -                continue;
 | 
| -            mediaQuery = adoptPtr(new MediaQuery(MediaQuery::None, mediaDescriptor, nullptr));
 | 
| -        }
 | 
| -        result.append(mediaQuery.release());
 | 
| -    }
 | 
| -    // ",,,," falls straight through, but is not valid unless fallback
 | 
| -    if (!m_fallbackToDescriptor && list.isEmpty()) {
 | 
| -        String strippedMediaString = mediaString.stripWhiteSpace();
 | 
| -        if (!strippedMediaString.isEmpty())
 | 
| -            return false;
 | 
| +        String queryString = list[i].stripWhiteSpace();
 | 
| +        if (OwnPtr<MediaQuery> parsedQuery = parseMediaQuery(queryString))
 | 
| +            result.uncheckedAppend(parsedQuery.release());
 | 
|      }
 | 
| +
 | 
|      m_queries.swap(result);
 | 
|      return true;
 | 
|  }
 | 
|  
 | 
|  bool MediaQuerySet::add(const String& queryString)
 | 
|  {
 | 
| -    CSSParser parser(CSSStrictMode);
 | 
| -
 | 
| -    OwnPtr<MediaQuery> parsedQuery = parser.parseMediaQuery(queryString);
 | 
| -    if (!parsedQuery && m_fallbackToDescriptor) {
 | 
| -        String medium = parseMediaDescriptor(queryString);
 | 
| -        if (!medium.isNull())
 | 
| -            parsedQuery = adoptPtr(new MediaQuery(MediaQuery::None, medium, nullptr));
 | 
| +    if (OwnPtr<MediaQuery> parsedQuery = parseMediaQuery(queryString)) {
 | 
| +        m_queries.append(parsedQuery.release());
 | 
| +        return true;
 | 
|      }
 | 
| -    if (!parsedQuery)
 | 
| -        return false;
 | 
| -
 | 
| -    m_queries.append(parsedQuery.release());
 | 
| -    return true;
 | 
| +    return false;
 | 
|  }
 | 
|  
 | 
|  bool MediaQuerySet::remove(const String& queryStringToRemove)
 | 
|  {
 | 
| -    CSSParser parser(CSSStrictMode);
 | 
| -
 | 
| -    OwnPtr<MediaQuery> parsedQuery = parser.parseMediaQuery(queryStringToRemove);
 | 
| -    if (!parsedQuery && m_fallbackToDescriptor) {
 | 
| -        String medium = parseMediaDescriptor(queryStringToRemove);
 | 
| -        if (!medium.isNull())
 | 
| -            parsedQuery = adoptPtr(new MediaQuery(MediaQuery::None, medium, nullptr));
 | 
| -    }
 | 
| +    OwnPtr<MediaQuery> parsedQuery = parseMediaQuery(queryStringToRemove);
 | 
|      if (!parsedQuery)
 | 
|          return false;
 | 
|  
 | 
| 
 |