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

Unified Diff: Source/core/css/MediaList.cpp

Issue 15679021: Parse media attributes and CSSOM media text as media_query_list. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fixed review issues. Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/css/MediaList.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/css/MediaList.cpp
diff --git a/Source/core/css/MediaList.cpp b/Source/core/css/MediaList.cpp
index 6e650fd8c725a2273779e52a0cc636276724e77a..bafd03006a210ae2b54f61e3224db1eb614e8f13 100644
--- a/Source/core/css/MediaList.cpp
+++ b/Source/core/css/MediaList.cpp
@@ -55,21 +55,12 @@ namespace WebCore {
*/
MediaQuerySet::MediaQuerySet()
- : m_parserMode(MediaQueryNormalMode)
- , m_lastLine(0)
+ : m_lastLine(0)
{
}
-MediaQuerySet::MediaQuerySet(const String& mediaString, MediaQueryParserMode mode)
- : m_parserMode(mode)
- , m_lastLine(0)
-{
- set(mediaString);
-}
-
MediaQuerySet::MediaQuerySet(const MediaQuerySet& o)
: RefCounted<MediaQuerySet>()
- , m_parserMode(o.m_parserMode)
, m_lastLine(o.m_lastLine)
, m_queries(o.m_queries.size())
{
@@ -81,53 +72,19 @@ MediaQuerySet::~MediaQuerySet()
{
}
-PassOwnPtr<MediaQuery> MediaQuerySet::parseMediaQuery(const String& queryString, MediaQueryParserMode mode)
+PassRefPtr<MediaQuerySet> MediaQuerySet::create(const String& mediaString)
{
- CSSParser parser(CSSStrictMode);
- OwnPtr<MediaQuery> parsedQuery = parser.parseMediaQuery(queryString);
-
- if (parsedQuery)
- return parsedQuery.release();
-
- switch (mode) {
- case MediaQueryNormalMode:
- return adoptPtr(new MediaQuery(MediaQuery::None, "not all", nullptr));
- case MediaQueryStrictMode:
- break;
- default:
- ASSERT_NOT_REACHED();
- break;
- }
- return nullptr;
-}
+ if (mediaString.isEmpty())
+ return MediaQuerySet::create();
-void MediaQuerySet::parseMediaQueryList(const String& mediaString, MediaQueryParserMode mode, Vector<OwnPtr<MediaQuery> >& result)
-{
- if (mediaString.isEmpty()) {
- result.clear();
- return;
- }
-
- Vector<String> 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);
-
- result.reserveInitialCapacity(list.size());
-
- for (unsigned i = 0; i < list.size(); ++i) {
- String queryString = list[i].stripWhiteSpace();
- OwnPtr<MediaQuery> parsedQuery = parseMediaQuery(queryString, mode);
- if (parsedQuery)
- result.uncheckedAppend(parsedQuery.release());
- }
+ CSSParser parser(CSSStrictMode);
+ return parser.parseMediaQueryList(mediaString);
}
bool MediaQuerySet::set(const String& mediaString)
{
- Vector<OwnPtr<MediaQuery> > result;
- parseMediaQueryList(mediaString, parserMode(), result);
- m_queries.swap(result);
+ RefPtr<MediaQuerySet> result = create(mediaString);
+ m_queries.swap(result->m_queries);
return true;
}
@@ -136,14 +93,13 @@ bool MediaQuerySet::add(const String& queryString)
// To "parse a media query" for a given string means to follow "the parse
// a media query list" steps and return "null" if more than one media query
// is returned, or else the returned media query.
- Vector<OwnPtr<MediaQuery> > queries;
- parseMediaQueryList(queryString, MediaQueryStrictMode, queries);
+ RefPtr<MediaQuerySet> result = create(queryString);
// Only continue if exactly one media query is found, as described above.
- if (queries.size() != 1)
+ if (result->m_queries.size() != 1)
return true;
- OwnPtr<MediaQuery> newQuery = queries[0].release();
+ OwnPtr<MediaQuery> newQuery = result->m_queries[0].release();
ASSERT(newQuery);
// If comparing with any of the media queries in the collection of media
@@ -163,14 +119,13 @@ bool MediaQuerySet::remove(const String& queryStringToRemove)
// To "parse a media query" for a given string means to follow "the parse
// a media query list" steps and return "null" if more than one media query
// is returned, or else the returned media query.
- Vector<OwnPtr<MediaQuery> > queries;
- parseMediaQueryList(queryStringToRemove, MediaQueryStrictMode, queries);
+ RefPtr<MediaQuerySet> result = create(queryStringToRemove);
// Only continue if exactly one media query is found, as described above.
- if (queries.size() != 1)
+ if (result->m_queries.size() != 1)
return true;
- OwnPtr<MediaQuery> newQuery = queries[0].release();
+ OwnPtr<MediaQuery> newQuery = result->m_queries[0].release();
ASSERT(newQuery);
// Remove any media query from the collection of media queries for which
« no previous file with comments | « Source/core/css/MediaList.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698