Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * (C) 1999-2003 Lars Knoll (knoll@kde.org) | 2 * (C) 1999-2003 Lars Knoll (knoll@kde.org) |
| 3 * Copyright (C) 2004, 2006, 2010, 2012 Apple Inc. All rights reserved. | 3 * Copyright (C) 2004, 2006, 2010, 2012 Apple Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
| 6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
| 7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
| 8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
| 9 * | 9 * |
| 10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 48 * and are consistent with those of media queries used in CSS. | 48 * and are consistent with those of media queries used in CSS. |
| 49 * | 49 * |
| 50 * HTML5 (at the moment of writing still work in progress) references the Media Queries | 50 * HTML5 (at the moment of writing still work in progress) references the Media Queries |
| 51 * specification directly and thus updates the rules for HTML. | 51 * specification directly and thus updates the rules for HTML. |
| 52 * | 52 * |
| 53 * CSS 2.1 Spec (http://www.w3.org/TR/CSS21/media.html) | 53 * CSS 2.1 Spec (http://www.w3.org/TR/CSS21/media.html) |
| 54 * CSS 3 Media Queries Spec (http://www.w3.org/TR/css3-mediaqueries/) | 54 * CSS 3 Media Queries Spec (http://www.w3.org/TR/css3-mediaqueries/) |
| 55 */ | 55 */ |
| 56 | 56 |
| 57 MediaQuerySet::MediaQuerySet() | 57 MediaQuerySet::MediaQuerySet() |
| 58 : m_parserMode(MediaQueryNormalMode) | 58 : m_lastLine(0) |
| 59 , m_lastLine(0) | |
| 60 { | 59 { |
| 61 } | 60 } |
| 62 | 61 |
| 63 MediaQuerySet::MediaQuerySet(const String& mediaString, MediaQueryParserMode mod e) | 62 MediaQuerySet::MediaQuerySet(const String& mediaString) |
| 64 : m_parserMode(mode) | 63 : m_lastLine(0) |
| 65 , m_lastLine(0) | |
| 66 { | 64 { |
| 67 set(mediaString); | 65 set(mediaString); |
| 68 } | 66 } |
| 69 | 67 |
| 70 MediaQuerySet::MediaQuerySet(const MediaQuerySet& o) | 68 MediaQuerySet::MediaQuerySet(const MediaQuerySet& o) |
| 71 : RefCounted<MediaQuerySet>() | 69 : RefCounted<MediaQuerySet>() |
| 72 , m_parserMode(o.m_parserMode) | |
| 73 , m_lastLine(o.m_lastLine) | 70 , m_lastLine(o.m_lastLine) |
| 74 , m_queries(o.m_queries.size()) | 71 , m_queries(o.m_queries.size()) |
| 75 { | 72 { |
| 76 for (unsigned i = 0; i < m_queries.size(); ++i) | 73 for (unsigned i = 0; i < m_queries.size(); ++i) |
| 77 m_queries[i] = o.m_queries[i]->copy(); | 74 m_queries[i] = o.m_queries[i]->copy(); |
| 78 } | 75 } |
| 79 | 76 |
| 80 MediaQuerySet::~MediaQuerySet() | 77 MediaQuerySet::~MediaQuerySet() |
| 81 { | 78 { |
| 82 } | 79 } |
| 83 | 80 |
| 84 PassOwnPtr<MediaQuery> MediaQuerySet::parseMediaQuery(const String& queryString, MediaQueryParserMode mode) | 81 PassRefPtr<MediaQuerySet> MediaQuerySet::parseMediaQueryList(const String& media String) |
|
SeRya
2013/06/10 12:11:47
It could be static. And MediaQuerySet::create coul
rune
2013/06/10 19:53:07
Fixed. Made a "create" method out of parseMediaQue
| |
| 85 { | 82 { |
| 83 if (mediaString.isEmpty()) | |
| 84 return MediaQuerySet::create(); | |
| 85 | |
| 86 CSSParser parser(CSSStrictMode); | 86 CSSParser parser(CSSStrictMode); |
| 87 OwnPtr<MediaQuery> parsedQuery = parser.parseMediaQuery(queryString); | 87 return parser.parseMediaQueryList(mediaString); |
| 88 | |
| 89 if (parsedQuery) | |
| 90 return parsedQuery.release(); | |
| 91 | |
| 92 switch (mode) { | |
| 93 case MediaQueryNormalMode: | |
| 94 return adoptPtr(new MediaQuery(MediaQuery::None, "not all", nullptr)); | |
| 95 case MediaQueryStrictMode: | |
| 96 break; | |
| 97 default: | |
| 98 ASSERT_NOT_REACHED(); | |
| 99 break; | |
| 100 } | |
| 101 return nullptr; | |
| 102 } | |
| 103 | |
| 104 void MediaQuerySet::parseMediaQueryList(const String& mediaString, MediaQueryPar serMode mode, Vector<OwnPtr<MediaQuery> >& result) | |
| 105 { | |
| 106 if (mediaString.isEmpty()) { | |
| 107 result.clear(); | |
| 108 return; | |
| 109 } | |
| 110 | |
| 111 Vector<String> list; | |
| 112 // FIXME: This is too simple as it shouldn't split when the ',' is inside | |
| 113 // other allowed matching pairs such as (), [], {}, "", and ''. | |
| 114 mediaString.split(',', /* allowEmptyEntries */ true, list); | |
| 115 | |
| 116 result.reserveInitialCapacity(list.size()); | |
| 117 | |
| 118 for (unsigned i = 0; i < list.size(); ++i) { | |
| 119 String queryString = list[i].stripWhiteSpace(); | |
| 120 OwnPtr<MediaQuery> parsedQuery = parseMediaQuery(queryString, mode); | |
| 121 if (parsedQuery) | |
| 122 result.uncheckedAppend(parsedQuery.release()); | |
| 123 } | |
| 124 } | 88 } |
| 125 | 89 |
| 126 bool MediaQuerySet::set(const String& mediaString) | 90 bool MediaQuerySet::set(const String& mediaString) |
| 127 { | 91 { |
| 128 Vector<OwnPtr<MediaQuery> > result; | 92 RefPtr<MediaQuerySet> result = parseMediaQueryList(mediaString); |
| 129 parseMediaQueryList(mediaString, parserMode(), result); | 93 ASSERT(result); |
|
SeRya
2013/06/10 12:11:47
I think this ASSERT says nothing once next line wo
rune
2013/06/10 19:53:07
This is way it's done across Source/core. ASSERT f
| |
| 130 m_queries.swap(result); | 94 m_queries.swap(result->m_queries); |
| 131 return true; | 95 return true; |
| 132 } | 96 } |
| 133 | 97 |
| 134 bool MediaQuerySet::add(const String& queryString) | 98 bool MediaQuerySet::add(const String& queryString) |
| 135 { | 99 { |
| 136 // To "parse a media query" for a given string means to follow "the parse | 100 // To "parse a media query" for a given string means to follow "the parse |
| 137 // a media query list" steps and return "null" if more than one media query | 101 // a media query list" steps and return "null" if more than one media query |
| 138 // is returned, or else the returned media query. | 102 // is returned, or else the returned media query. |
| 139 Vector<OwnPtr<MediaQuery> > queries; | 103 RefPtr<MediaQuerySet> result = parseMediaQueryList(queryString); |
| 140 parseMediaQueryList(queryString, MediaQueryStrictMode, queries); | 104 ASSERT(result); |
|
SeRya
2013/06/10 12:11:47
ditto
rune
2013/06/10 19:53:07
Done.
| |
| 141 | 105 |
| 142 // Only continue if exactly one media query is found, as described above. | 106 // Only continue if exactly one media query is found, as described above. |
| 143 if (queries.size() != 1) | 107 if (result->m_queries.size() != 1) |
| 144 return true; | 108 return true; |
| 145 | 109 |
| 146 OwnPtr<MediaQuery> newQuery = queries[0].release(); | 110 OwnPtr<MediaQuery> newQuery = result->m_queries[0].release(); |
| 147 ASSERT(newQuery); | 111 ASSERT(newQuery); |
| 148 | 112 |
| 149 // If comparing with any of the media queries in the collection of media | 113 // If comparing with any of the media queries in the collection of media |
| 150 // queries returns true terminate these steps. | 114 // queries returns true terminate these steps. |
| 151 for (size_t i = 0; i < m_queries.size(); ++i) { | 115 for (size_t i = 0; i < m_queries.size(); ++i) { |
| 152 MediaQuery* query = m_queries[i].get(); | 116 MediaQuery* query = m_queries[i].get(); |
| 153 if (*query == *newQuery) | 117 if (*query == *newQuery) |
| 154 return true; | 118 return true; |
| 155 } | 119 } |
| 156 | 120 |
| 157 m_queries.append(newQuery.release()); | 121 m_queries.append(newQuery.release()); |
| 158 return true; | 122 return true; |
| 159 } | 123 } |
| 160 | 124 |
| 161 bool MediaQuerySet::remove(const String& queryStringToRemove) | 125 bool MediaQuerySet::remove(const String& queryStringToRemove) |
| 162 { | 126 { |
| 163 // To "parse a media query" for a given string means to follow "the parse | 127 // To "parse a media query" for a given string means to follow "the parse |
| 164 // a media query list" steps and return "null" if more than one media query | 128 // a media query list" steps and return "null" if more than one media query |
| 165 // is returned, or else the returned media query. | 129 // is returned, or else the returned media query. |
| 166 Vector<OwnPtr<MediaQuery> > queries; | 130 RefPtr<MediaQuerySet> result = parseMediaQueryList(queryStringToRemove); |
| 167 parseMediaQueryList(queryStringToRemove, MediaQueryStrictMode, queries); | 131 ASSERT(result); |
|
SeRya
2013/06/10 12:11:47
ditto
rune
2013/06/10 19:53:07
Done.
| |
| 168 | 132 |
| 169 // Only continue if exactly one media query is found, as described above. | 133 // Only continue if exactly one media query is found, as described above. |
| 170 if (queries.size() != 1) | 134 if (result->m_queries.size() != 1) |
| 171 return true; | 135 return true; |
| 172 | 136 |
| 173 OwnPtr<MediaQuery> newQuery = queries[0].release(); | 137 OwnPtr<MediaQuery> newQuery = result->m_queries[0].release(); |
| 174 ASSERT(newQuery); | 138 ASSERT(newQuery); |
| 175 | 139 |
| 176 // Remove any media query from the collection of media queries for which | 140 // Remove any media query from the collection of media queries for which |
| 177 // comparing with the media query returns true. | 141 // comparing with the media query returns true. |
| 178 bool found = false; | 142 bool found = false; |
| 179 for (size_t i = 0; i < m_queries.size(); ++i) { | 143 for (size_t i = 0; i < m_queries.size(); ++i) { |
| 180 MediaQuery* query = m_queries[i].get(); | 144 MediaQuery* query = m_queries[i].get(); |
| 181 if (*query == *newQuery) { | 145 if (*query == *newQuery) { |
| 182 m_queries.remove(i); | 146 m_queries.remove(i); |
| 183 --i; | 147 --i; |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 347 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(cssV alue); | 311 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(cssV alue); |
| 348 if (primitiveValue->isDotsPerInch() || primitiveValue->isDot sPerCentimeter()) | 312 if (primitiveValue->isDotsPerInch() || primitiveValue->isDot sPerCentimeter()) |
| 349 addResolutionWarningMessageToConsole(document, mediaQuer ySet->mediaText(), primitiveValue); | 313 addResolutionWarningMessageToConsole(document, mediaQuer ySet->mediaText(), primitiveValue); |
| 350 } | 314 } |
| 351 } | 315 } |
| 352 } | 316 } |
| 353 } | 317 } |
| 354 } | 318 } |
| 355 | 319 |
| 356 } | 320 } |
| OLD | NEW |