| 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.
All rights reserved. | 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc.
All rights reserved. |
| 6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> | 6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> |
| 7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> | 7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> |
| 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) | 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) |
| 9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. | 9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. |
| 10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. | 10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 { | 124 { |
| 125 FrameView* view = document.view(); | 125 FrameView* view = document.view(); |
| 126 if (view) { | 126 if (view) { |
| 127 m_medium = adoptPtr(new MediaQueryEvaluator(&view->frame())); | 127 m_medium = adoptPtr(new MediaQueryEvaluator(&view->frame())); |
| 128 m_printMediaType = equalIgnoringCase(view->mediaType(), MediaTypeNames::
print); | 128 m_printMediaType = equalIgnoringCase(view->mediaType(), MediaTypeNames::
print); |
| 129 } else { | 129 } else { |
| 130 m_medium = adoptPtr(new MediaQueryEvaluator("all")); | 130 m_medium = adoptPtr(new MediaQueryEvaluator("all")); |
| 131 } | 131 } |
| 132 } | 132 } |
| 133 | 133 |
| 134 void StyleResolver::lazyAppendAuthorStyleSheets(unsigned firstNew, const Vector<
RefPtr<CSSStyleSheet> >& styleSheets) | |
| 135 { | |
| 136 unsigned size = styleSheets.size(); | |
| 137 for (unsigned i = firstNew; i < size; ++i) | |
| 138 m_pendingStyleSheets.add(styleSheets[i].get()); | |
| 139 } | |
| 140 | |
| 141 void StyleResolver::removePendingAuthorStyleSheets(const Vector<RefPtr<CSSStyleS
heet> >& styleSheets) | |
| 142 { | |
| 143 for (unsigned i = 0; i < styleSheets.size(); ++i) | |
| 144 m_pendingStyleSheets.remove(styleSheets[i].get()); | |
| 145 } | |
| 146 | |
| 147 void StyleResolver::appendCSSStyleSheet(CSSStyleSheet* cssSheet) | 134 void StyleResolver::appendCSSStyleSheet(CSSStyleSheet* cssSheet) |
| 148 { | 135 { |
| 149 ASSERT(cssSheet); | 136 ASSERT(cssSheet); |
| 150 if (cssSheet->mediaQueries() && !m_medium->eval(cssSheet->mediaQueries(), &m
_viewportDependentMediaQueryResults)) | 137 if (cssSheet->mediaQueries() && !m_medium->eval(cssSheet->mediaQueries(), &m
_viewportDependentMediaQueryResults)) |
| 151 return; | 138 return; |
| 152 | 139 |
| 153 Node* ownerNode = cssSheet->ownerNode(); | 140 Node* ownerNode = cssSheet->ownerNode(); |
| 154 if (!ownerNode) | 141 if (!ownerNode) |
| 155 return; | 142 return; |
| 156 | 143 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 170 const Vector<RawPtr<StyleRuleFontFace> > fontFaceRules = ruleSet.fontFac
eRules(); | 157 const Vector<RawPtr<StyleRuleFontFace> > fontFaceRules = ruleSet.fontFac
eRules(); |
| 171 for (unsigned i = 0; i < fontFaceRules.size(); ++i) { | 158 for (unsigned i = 0; i < fontFaceRules.size(); ++i) { |
| 172 if (RefPtr<FontFace> fontFace = FontFace::create(&document(), fontFa
ceRules[i])) | 159 if (RefPtr<FontFace> fontFace = FontFace::create(&document(), fontFa
ceRules[i])) |
| 173 fontSelector->fontFaceCache()->add(fontSelector, fontFaceRules[i
], fontFace); | 160 fontSelector->fontFaceCache()->add(fontSelector, fontFaceRules[i
], fontFace); |
| 174 } | 161 } |
| 175 if (fontFaceRules.size()) | 162 if (fontFaceRules.size()) |
| 176 invalidateMatchedPropertiesCache(); | 163 invalidateMatchedPropertiesCache(); |
| 177 } | 164 } |
| 178 } | 165 } |
| 179 | 166 |
| 180 void StyleResolver::appendPendingAuthorStyleSheets() | |
| 181 { | |
| 182 for (ListHashSet<RawPtr<CSSStyleSheet>, 16>::iterator it = m_pendingStyleShe
ets.begin(); it != m_pendingStyleSheets.end(); ++it) | |
| 183 appendCSSStyleSheet(*it); | |
| 184 | |
| 185 m_pendingStyleSheets.clear(); | |
| 186 finishAppendAuthorStyleSheets(); | |
| 187 } | |
| 188 | |
| 189 void StyleResolver::appendAuthorStyleSheets(const Vector<RefPtr<CSSStyleSheet> >
& styleSheets) | |
| 190 { | |
| 191 // This handles sheets added to the end of the stylesheet list only. In othe
r cases the style resolver | |
| 192 // needs to be reconstructed. To handle insertions too the rule order number
s would need to be updated. | |
| 193 unsigned size = styleSheets.size(); | |
| 194 for (unsigned i = 0; i < size; ++i) | |
| 195 appendCSSStyleSheet(styleSheets[i].get()); | |
| 196 } | |
| 197 | |
| 198 void StyleResolver::finishAppendAuthorStyleSheets() | |
| 199 { | |
| 200 if (document().renderView() && document().renderView()->style()) | |
| 201 document().renderView()->style()->font().update(document().styleEngine()
->fontSelector()); | |
| 202 } | |
| 203 | |
| 204 void StyleResolver::addToStyleSharingList(Element& element) | 167 void StyleResolver::addToStyleSharingList(Element& element) |
| 205 { | 168 { |
| 206 // Never add elements to the style sharing list if we're not in a recalcStyl
e, | 169 // Never add elements to the style sharing list if we're not in a recalcStyl
e, |
| 207 // otherwise we could leave stale pointers in there. | 170 // otherwise we could leave stale pointers in there. |
| 208 if (!document().inStyleRecalc()) | 171 if (!document().inStyleRecalc()) |
| 209 return; | 172 return; |
| 210 ASSERT(element.supportsStyleSharing()); | 173 ASSERT(element.supportsStyleSharing()); |
| 211 INCREMENT_STYLE_STATS_COUNTER(*this, sharedStyleCandidates); | 174 INCREMENT_STYLE_STATS_COUNTER(*this, sharedStyleCandidates); |
| 212 StyleSharingList& list = styleSharingList(); | 175 StyleSharingList& list = styleSharingList(); |
| 213 if (list.size() >= styleSharingListSize) | 176 if (list.size() >= styleSharingListSize) |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 284 void StyleResolver::loadPendingResources(StyleResolverState& state) | 247 void StyleResolver::loadPendingResources(StyleResolverState& state) |
| 285 { | 248 { |
| 286 m_styleResourceLoader.loadPendingResources(state.style(), state.elementStyle
Resources()); | 249 m_styleResourceLoader.loadPendingResources(state.style(), state.elementStyle
Resources()); |
| 287 document().styleEngine()->fontSelector()->fontLoader()->loadPendingFonts(); | 250 document().styleEngine()->fontSelector()->fontLoader()->loadPendingFonts(); |
| 288 } | 251 } |
| 289 | 252 |
| 290 PassRefPtr<RenderStyle> StyleResolver::styleForElement(Element* element, RenderS
tyle* defaultParent) | 253 PassRefPtr<RenderStyle> StyleResolver::styleForElement(Element* element, RenderS
tyle* defaultParent) |
| 291 { | 254 { |
| 292 ASSERT(document().frame()); | 255 ASSERT(document().frame()); |
| 293 ASSERT(document().settings()); | 256 ASSERT(document().settings()); |
| 294 ASSERT(!hasPendingAuthorStyleSheets()); | |
| 295 | 257 |
| 296 didAccess(); | 258 didAccess(); |
| 297 | 259 |
| 298 if (element == document().documentElement()) | 260 if (element == document().documentElement()) |
| 299 document().setDirectionSetOnDocumentElement(false); | 261 document().setDirectionSetOnDocumentElement(false); |
| 300 StyleResolverState state(document(), element, defaultParent); | 262 StyleResolverState state(document(), element, defaultParent); |
| 301 | 263 |
| 302 if (state.parentStyle()) { | 264 if (state.parentStyle()) { |
| 303 SharedStyleFinder styleFinder(state.elementContext(), *this); | 265 SharedStyleFinder styleFinder(state.elementContext(), *this); |
| 304 if (RefPtr<RenderStyle> sharedStyle = styleFinder.findSharedStyle()) | 266 if (RefPtr<RenderStyle> sharedStyle = styleFinder.findSharedStyle()) |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 349 document().setHasViewportUnits(); | 311 document().setHasViewportUnits(); |
| 350 | 312 |
| 351 // Now return the style. | 313 // Now return the style. |
| 352 return state.takeStyle(); | 314 return state.takeStyle(); |
| 353 } | 315 } |
| 354 | 316 |
| 355 PassRefPtr<RenderStyle> StyleResolver::styleForKeyframe(Element* element, const
RenderStyle& elementStyle, RenderStyle* parentStyle, const StyleKeyframe* keyfra
me, const AtomicString& animationName) | 317 PassRefPtr<RenderStyle> StyleResolver::styleForKeyframe(Element* element, const
RenderStyle& elementStyle, RenderStyle* parentStyle, const StyleKeyframe* keyfra
me, const AtomicString& animationName) |
| 356 { | 318 { |
| 357 ASSERT(document().frame()); | 319 ASSERT(document().frame()); |
| 358 ASSERT(document().settings()); | 320 ASSERT(document().settings()); |
| 359 ASSERT(!hasPendingAuthorStyleSheets()); | |
| 360 | 321 |
| 361 if (element == document().documentElement()) | 322 if (element == document().documentElement()) |
| 362 document().setDirectionSetOnDocumentElement(false); | 323 document().setDirectionSetOnDocumentElement(false); |
| 363 StyleResolverState state(document(), element, parentStyle); | 324 StyleResolverState state(document(), element, parentStyle); |
| 364 | 325 |
| 365 MatchResult result; | 326 MatchResult result; |
| 366 result.addMatchedProperties(&keyframe->properties()); | 327 result.addMatchedProperties(&keyframe->properties()); |
| 367 | 328 |
| 368 ASSERT(!state.style()); | 329 ASSERT(!state.style()); |
| 369 | 330 |
| (...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 778 bool StyleResolver::mediaQueryAffectedByViewportChange() const | 739 bool StyleResolver::mediaQueryAffectedByViewportChange() const |
| 779 { | 740 { |
| 780 for (unsigned i = 0; i < m_viewportDependentMediaQueryResults.size(); ++i) { | 741 for (unsigned i = 0; i < m_viewportDependentMediaQueryResults.size(); ++i) { |
| 781 if (m_medium->eval(m_viewportDependentMediaQueryResults[i]->expression()
) != m_viewportDependentMediaQueryResults[i]->result()) | 742 if (m_medium->eval(m_viewportDependentMediaQueryResults[i]->expression()
) != m_viewportDependentMediaQueryResults[i]->result()) |
| 782 return true; | 743 return true; |
| 783 } | 744 } |
| 784 return false; | 745 return false; |
| 785 } | 746 } |
| 786 | 747 |
| 787 } // namespace blink | 748 } // namespace blink |
| OLD | NEW |