| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) | 3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) |
| 4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) | 4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) |
| 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. | 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. |
| 6 * All rights reserved. | 6 * All rights reserved. |
| 7 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> | 7 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> |
| 8 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> | 8 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> |
| 9 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. | 9 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. |
| 10 * (http://www.torchmobile.com/) | 10 * (http://www.torchmobile.com/) |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 170 return; | 170 return; |
| 171 | 171 |
| 172 // Adding scoped resolver for active shadow roots for shadow host styling. | 172 // Adding scoped resolver for active shadow roots for shadow host styling. |
| 173 for (ShadowRoot* shadowRoot = &shadow->youngestShadowRoot(); shadowRoot; | 173 for (ShadowRoot* shadowRoot = &shadow->youngestShadowRoot(); shadowRoot; |
| 174 shadowRoot = shadowRoot->olderShadowRoot()) { | 174 shadowRoot = shadowRoot->olderShadowRoot()) { |
| 175 if (ScopedStyleResolver* resolver = shadowRoot->scopedStyleResolver()) | 175 if (ScopedStyleResolver* resolver = shadowRoot->scopedStyleResolver()) |
| 176 resolvers.append(resolver); | 176 resolvers.append(resolver); |
| 177 } | 177 } |
| 178 } | 178 } |
| 179 | 179 |
| 180 StyleResolver::StyleResolver(Document& document) | 180 StyleResolver::StyleResolver(Document& document) : m_document(document) { |
| 181 : m_document(document), m_printMediaType(false), m_styleSharingDepth(0) { | 181 updateMediaType(); |
| 182 FrameView* view = document.view(); | |
| 183 DCHECK(view); | |
| 184 m_medium = new MediaQueryEvaluator(&view->frame()); | |
| 185 m_printMediaType = | |
| 186 equalIgnoringCase(view->mediaType(), MediaTypeNames::print); | |
| 187 } | 182 } |
| 188 | 183 |
| 189 StyleResolver::~StyleResolver() {} | 184 StyleResolver::~StyleResolver() {} |
| 190 | 185 |
| 191 void StyleResolver::dispose() { | 186 void StyleResolver::dispose() { |
| 192 m_matchedPropertiesCache.clear(); | 187 m_matchedPropertiesCache.clear(); |
| 193 } | 188 } |
| 194 | 189 |
| 195 void StyleResolver::setRuleUsageTracker(StyleRuleUsageTracker* tracker) { | 190 void StyleResolver::setRuleUsageTracker(StyleRuleUsageTracker* tracker) { |
| 196 m_tracker = tracker; | 191 m_tracker = tracker; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 211 } | 206 } |
| 212 | 207 |
| 213 void StyleResolver::appendCSSStyleSheet(CSSStyleSheet& cssSheet) { | 208 void StyleResolver::appendCSSStyleSheet(CSSStyleSheet& cssSheet) { |
| 214 DCHECK(!cssSheet.disabled()); | 209 DCHECK(!cssSheet.disabled()); |
| 215 DCHECK(cssSheet.ownerDocument()); | 210 DCHECK(cssSheet.ownerDocument()); |
| 216 DCHECK(cssSheet.ownerNode()); | 211 DCHECK(cssSheet.ownerNode()); |
| 217 DCHECK(isHTMLStyleElement(cssSheet.ownerNode()) || | 212 DCHECK(isHTMLStyleElement(cssSheet.ownerNode()) || |
| 218 isSVGStyleElement(cssSheet.ownerNode()) || | 213 isSVGStyleElement(cssSheet.ownerNode()) || |
| 219 cssSheet.ownerNode()->isConnected()); | 214 cssSheet.ownerNode()->isConnected()); |
| 220 | 215 |
| 216 const MediaQueryEvaluator& evaluator = |
| 217 document().styleEngine().ensureMediaQueryEvaluator(); |
| 221 if (cssSheet.mediaQueries() && | 218 if (cssSheet.mediaQueries() && |
| 222 !m_medium->eval(cssSheet.mediaQueries(), | 219 !evaluator.eval(cssSheet.mediaQueries(), |
| 223 &m_viewportDependentMediaQueryResults, | 220 &m_viewportDependentMediaQueryResults, |
| 224 &m_deviceDependentMediaQueryResults)) | 221 &m_deviceDependentMediaQueryResults)) |
| 225 return; | 222 return; |
| 226 | 223 |
| 227 TreeScope* treeScope = &cssSheet.ownerNode()->treeScope(); | 224 TreeScope* treeScope = &cssSheet.ownerNode()->treeScope(); |
| 228 // TODO(rune@opera.com): This is a workaround for crbug.com/559292 | 225 // TODO(rune@opera.com): This is a workaround for crbug.com/559292 |
| 229 // when we're in the middle of removing a subtree with a style element | 226 // when we're in the middle of removing a subtree with a style element |
| 230 // and the treescope has been changed but inDocument and isInShadowTree | 227 // and the treescope has been changed but inDocument and isInShadowTree |
| 231 // are not. | 228 // are not. |
| 232 // | 229 // |
| 233 // This check can be removed when crbug.com/567021 is fixed. | 230 // This check can be removed when crbug.com/567021 is fixed. |
| 234 if (cssSheet.ownerNode()->isInShadowTree() && | 231 if (cssSheet.ownerNode()->isInShadowTree() && |
| 235 treeScope->rootNode().isDocumentNode()) | 232 treeScope->rootNode().isDocumentNode()) |
| 236 return; | 233 return; |
| 237 | 234 |
| 238 // Sheets in the document scope of HTML imports apply to the main document | 235 // Sheets in the document scope of HTML imports apply to the main document |
| 239 // (m_document), so we override it for all document scoped sheets. | 236 // (m_document), so we override it for all document scoped sheets. |
| 240 if (treeScope->rootNode().isDocumentNode()) | 237 if (treeScope->rootNode().isDocumentNode()) |
| 241 treeScope = m_document; | 238 treeScope = m_document; |
| 242 treeScope->ensureScopedStyleResolver().appendCSSStyleSheet(cssSheet, | 239 treeScope->ensureScopedStyleResolver().appendCSSStyleSheet(cssSheet, |
| 243 *m_medium); | 240 evaluator); |
| 244 } | 241 } |
| 245 | 242 |
| 246 void StyleResolver::appendPendingAuthorStyleSheets() { | 243 void StyleResolver::appendPendingAuthorStyleSheets() { |
| 247 for (const auto& styleSheet : m_pendingStyleSheets) | 244 for (const auto& styleSheet : m_pendingStyleSheets) |
| 248 appendCSSStyleSheet(*styleSheet); | 245 appendCSSStyleSheet(*styleSheet); |
| 249 | 246 |
| 250 m_pendingStyleSheets.clear(); | 247 m_pendingStyleSheets.clear(); |
| 251 } | 248 } |
| 252 | 249 |
| 253 void StyleResolver::appendAuthorStyleSheets( | 250 void StyleResolver::appendAuthorStyleSheets( |
| (...skipping 1697 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1951 m_viewportDependentMediaQueryResults.append(list[i]); | 1948 m_viewportDependentMediaQueryResults.append(list[i]); |
| 1952 } | 1949 } |
| 1953 | 1950 |
| 1954 void StyleResolver::addDeviceDependentMediaQueries( | 1951 void StyleResolver::addDeviceDependentMediaQueries( |
| 1955 const MediaQueryResultList& list) { | 1952 const MediaQueryResultList& list) { |
| 1956 for (size_t i = 0; i < list.size(); ++i) | 1953 for (size_t i = 0; i < list.size(); ++i) |
| 1957 m_deviceDependentMediaQueryResults.append(list[i]); | 1954 m_deviceDependentMediaQueryResults.append(list[i]); |
| 1958 } | 1955 } |
| 1959 | 1956 |
| 1960 bool StyleResolver::mediaQueryAffectedByViewportChange() const { | 1957 bool StyleResolver::mediaQueryAffectedByViewportChange() const { |
| 1958 const MediaQueryEvaluator& evaluator = |
| 1959 document().styleEngine().ensureMediaQueryEvaluator(); |
| 1961 for (unsigned i = 0; i < m_viewportDependentMediaQueryResults.size(); ++i) { | 1960 for (unsigned i = 0; i < m_viewportDependentMediaQueryResults.size(); ++i) { |
| 1962 if (m_medium->eval(m_viewportDependentMediaQueryResults[i]->expression()) != | 1961 if (evaluator.eval(m_viewportDependentMediaQueryResults[i]->expression()) != |
| 1963 m_viewportDependentMediaQueryResults[i]->result()) | 1962 m_viewportDependentMediaQueryResults[i]->result()) |
| 1964 return true; | 1963 return true; |
| 1965 } | 1964 } |
| 1966 return false; | 1965 return false; |
| 1967 } | 1966 } |
| 1968 | 1967 |
| 1969 bool StyleResolver::mediaQueryAffectedByDeviceChange() const { | 1968 bool StyleResolver::mediaQueryAffectedByDeviceChange() const { |
| 1969 const MediaQueryEvaluator& evaluator = |
| 1970 document().styleEngine().ensureMediaQueryEvaluator(); |
| 1970 for (unsigned i = 0; i < m_deviceDependentMediaQueryResults.size(); ++i) { | 1971 for (unsigned i = 0; i < m_deviceDependentMediaQueryResults.size(); ++i) { |
| 1971 if (m_medium->eval(m_deviceDependentMediaQueryResults[i]->expression()) != | 1972 if (evaluator.eval(m_deviceDependentMediaQueryResults[i]->expression()) != |
| 1972 m_deviceDependentMediaQueryResults[i]->result()) | 1973 m_deviceDependentMediaQueryResults[i]->result()) |
| 1973 return true; | 1974 return true; |
| 1974 } | 1975 } |
| 1975 return false; | 1976 return false; |
| 1976 } | 1977 } |
| 1977 | 1978 |
| 1979 void StyleResolver::updateMediaType() { |
| 1980 if (FrameView* view = document().view()) { |
| 1981 m_printMediaType = |
| 1982 equalIgnoringCase(view->mediaType(), MediaTypeNames::print); |
| 1983 } |
| 1984 } |
| 1985 |
| 1978 DEFINE_TRACE(StyleResolver) { | 1986 DEFINE_TRACE(StyleResolver) { |
| 1979 visitor->trace(m_matchedPropertiesCache); | 1987 visitor->trace(m_matchedPropertiesCache); |
| 1980 visitor->trace(m_medium); | |
| 1981 visitor->trace(m_viewportDependentMediaQueryResults); | 1988 visitor->trace(m_viewportDependentMediaQueryResults); |
| 1982 visitor->trace(m_deviceDependentMediaQueryResults); | 1989 visitor->trace(m_deviceDependentMediaQueryResults); |
| 1983 visitor->trace(m_selectorFilter); | 1990 visitor->trace(m_selectorFilter); |
| 1984 visitor->trace(m_styleSharingLists); | 1991 visitor->trace(m_styleSharingLists); |
| 1985 visitor->trace(m_pendingStyleSheets); | 1992 visitor->trace(m_pendingStyleSheets); |
| 1986 visitor->trace(m_document); | 1993 visitor->trace(m_document); |
| 1987 visitor->trace(m_tracker); | 1994 visitor->trace(m_tracker); |
| 1988 } | 1995 } |
| 1989 | 1996 |
| 1990 } // namespace blink | 1997 } // namespace blink |
| OLD | NEW |