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

Side by Side Diff: Source/core/css/resolver/StyleResolver.cpp

Issue 23601011: Have StyleResolver / StyleResolverState deal with Document references, not pointers (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Update StyleResolverState as well Created 7 years, 3 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/css/resolver/StyleResolver.h ('k') | Source/core/css/resolver/StyleResolverState.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 } 99 }
100 100
101 static StylePropertySet* rightToLeftDeclaration() 101 static StylePropertySet* rightToLeftDeclaration()
102 { 102 {
103 DEFINE_STATIC_LOCAL(RefPtr<MutableStylePropertySet>, rightToLeftDecl, (Mutab leStylePropertySet::create())); 103 DEFINE_STATIC_LOCAL(RefPtr<MutableStylePropertySet>, rightToLeftDecl, (Mutab leStylePropertySet::create()));
104 if (rightToLeftDecl->isEmpty()) 104 if (rightToLeftDecl->isEmpty())
105 rightToLeftDecl->setProperty(CSSPropertyDirection, CSSValueRtl); 105 rightToLeftDecl->setProperty(CSSPropertyDirection, CSSValueRtl);
106 return rightToLeftDecl.get(); 106 return rightToLeftDecl.get();
107 } 107 }
108 108
109 StyleResolver::StyleResolver(Document* document, bool matchAuthorAndUserStyles) 109 StyleResolver::StyleResolver(Document& document, bool matchAuthorAndUserStyles)
110 : m_document(document) 110 : m_document(document)
111 , m_matchAuthorAndUserStyles(matchAuthorAndUserStyles) 111 , m_matchAuthorAndUserStyles(matchAuthorAndUserStyles)
112 , m_fontSelector(CSSFontSelector::create(document)) 112 , m_fontSelector(CSSFontSelector::create(&document))
113 , m_viewportStyleResolver(ViewportStyleResolver::create(document)) 113 , m_viewportStyleResolver(ViewportStyleResolver::create(&document))
114 , m_styleResourceLoader(document->fetcher()) 114 , m_styleResourceLoader(document.fetcher())
115 { 115 {
116 Element* root = document->documentElement(); 116 Element* root = document.documentElement();
117 117
118 CSSDefaultStyleSheets::initDefaultStyle(root); 118 CSSDefaultStyleSheets::initDefaultStyle(root);
119 119
120 // construct document root element default style. this is needed 120 // construct document root element default style. this is needed
121 // to evaluate media queries that contain relative constraints, like "screen and (max-width: 10em)" 121 // to evaluate media queries that contain relative constraints, like "screen and (max-width: 10em)"
122 // This is here instead of constructor, because when constructor is run, 122 // This is here instead of constructor, because when constructor is run,
123 // document doesn't have documentElement 123 // document doesn't have documentElement
124 // NOTE: this assumes that element that gets passed to styleForElement -call 124 // NOTE: this assumes that element that gets passed to styleForElement -call
125 // is always from the document that owns the style selector 125 // is always from the document that owns the style selector
126 FrameView* view = document->view(); 126 FrameView* view = document.view();
127 if (view) 127 if (view)
128 m_medium = adoptPtr(new MediaQueryEvaluator(view->mediaType())); 128 m_medium = adoptPtr(new MediaQueryEvaluator(view->mediaType()));
129 else 129 else
130 m_medium = adoptPtr(new MediaQueryEvaluator("all")); 130 m_medium = adoptPtr(new MediaQueryEvaluator("all"));
131 131
132 if (root) 132 if (root)
133 m_rootDefaultStyle = styleForElement(root, 0, DisallowStyleSharing, Matc hOnlyUserAgentRules); 133 m_rootDefaultStyle = styleForElement(root, 0, DisallowStyleSharing, Matc hOnlyUserAgentRules);
134 134
135 if (m_rootDefaultStyle && view) 135 if (m_rootDefaultStyle && view)
136 m_medium = adoptPtr(new MediaQueryEvaluator(view->mediaType(), view->fra me(), m_rootDefaultStyle.get())); 136 m_medium = adoptPtr(new MediaQueryEvaluator(view->mediaType(), view->fra me(), m_rootDefaultStyle.get()));
137 137
138 m_styleTree.clear(); 138 m_styleTree.clear();
139 139
140 StyleSheetCollections* styleSheetCollection = document->styleSheetCollection s(); 140 StyleSheetCollections* styleSheetCollection = document.styleSheetCollections ();
141 m_ruleSets.initUserStyle(styleSheetCollection, *m_medium, *this); 141 m_ruleSets.initUserStyle(styleSheetCollection, *m_medium, *this);
142 142
143 #if ENABLE(SVG_FONTS) 143 #if ENABLE(SVG_FONTS)
144 if (document->svgExtensions()) { 144 if (document.svgExtensions()) {
145 const HashSet<SVGFontFaceElement*>& svgFontFaceElements = document->svgE xtensions()->svgFontFaceElements(); 145 const HashSet<SVGFontFaceElement*>& svgFontFaceElements = document.svgEx tensions()->svgFontFaceElements();
146 HashSet<SVGFontFaceElement*>::const_iterator end = svgFontFaceElements.e nd(); 146 HashSet<SVGFontFaceElement*>::const_iterator end = svgFontFaceElements.e nd();
147 for (HashSet<SVGFontFaceElement*>::const_iterator it = svgFontFaceElemen ts.begin(); it != end; ++it) 147 for (HashSet<SVGFontFaceElement*>::const_iterator it = svgFontFaceElemen ts.begin(); it != end; ++it)
148 fontSelector()->addFontFaceRule((*it)->fontFaceRule()); 148 fontSelector()->addFontFaceRule((*it)->fontFaceRule());
149 } 149 }
150 #endif 150 #endif
151 151
152 styleSheetCollection->appendActiveAuthorStyleSheets(this); 152 styleSheetCollection->appendActiveAuthorStyleSheets(this);
153 } 153 }
154 154
155 void StyleResolver::appendAuthorStyleSheets(unsigned firstNew, const Vector<RefP tr<CSSStyleSheet> >& styleSheets) 155 void StyleResolver::appendAuthorStyleSheets(unsigned firstNew, const Vector<RefP tr<CSSStyleSheet> >& styleSheets)
(...skipping 12 matching lines...) Expand all
168 ASSERT(resolver); 168 ASSERT(resolver);
169 resolver->addRulesFromSheet(sheet, *m_medium, this); 169 resolver->addRulesFromSheet(sheet, *m_medium, this);
170 m_inspectorCSSOMWrappers.collectFromStyleSheetIfNeeded(cssSheet); 170 m_inspectorCSSOMWrappers.collectFromStyleSheetIfNeeded(cssSheet);
171 } 171 }
172 } 172 }
173 173
174 void StyleResolver::finishAppendAuthorStyleSheets() 174 void StyleResolver::finishAppendAuthorStyleSheets()
175 { 175 {
176 collectFeatures(); 176 collectFeatures();
177 177
178 if (document()->renderer() && document()->renderer()->style()) 178 if (document().renderer() && document().renderer()->style())
179 document()->renderer()->style()->font().update(fontSelector()); 179 document().renderer()->style()->font().update(fontSelector());
180 180
181 if (RuntimeEnabledFeatures::cssViewportEnabled()) 181 if (RuntimeEnabledFeatures::cssViewportEnabled())
182 collectViewportRules(); 182 collectViewportRules();
183 } 183 }
184 184
185 void StyleResolver::resetAuthorStyle(const ContainerNode* scopingNode) 185 void StyleResolver::resetAuthorStyle(const ContainerNode* scopingNode)
186 { 186 {
187 ScopedStyleResolver* resolver = scopingNode ? m_styleTree.scopedStyleResolve rFor(scopingNode) : m_styleTree.scopedStyleResolverForDocument(); 187 ScopedStyleResolver* resolver = scopingNode ? m_styleTree.scopedStyleResolve rFor(scopingNode) : m_styleTree.scopedStyleResolverForDocument();
188 if (!resolver) 188 if (!resolver)
189 return; 189 return;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 return nullptr; 228 return nullptr;
229 OwnPtr<RuleSet> ruleSet = RuleSet::create(); 229 OwnPtr<RuleSet> ruleSet = RuleSet::create();
230 for (size_t i = 0; i < size; ++i) 230 for (size_t i = 0; i < size; ++i)
231 ruleSet->addRule(rules[i].rule, rules[i].selectorIndex, rules[i].hasDocu mentSecurityOrigin ? RuleHasDocumentSecurityOrigin : RuleHasNoSpecialState); 231 ruleSet->addRule(rules[i].rule, rules[i].selectorIndex, rules[i].hasDocu mentSecurityOrigin ? RuleHasDocumentSecurityOrigin : RuleHasNoSpecialState);
232 return ruleSet.release(); 232 return ruleSet.release();
233 } 233 }
234 234
235 void StyleResolver::collectFeatures() 235 void StyleResolver::collectFeatures()
236 { 236 {
237 m_features.clear(); 237 m_features.clear();
238 m_ruleSets.collectFeaturesTo(m_features, document()->isViewSource()); 238 m_ruleSets.collectFeaturesTo(m_features, document().isViewSource());
239 m_styleTree.collectFeaturesTo(m_features); 239 m_styleTree.collectFeaturesTo(m_features);
240 240
241 m_siblingRuleSet = makeRuleSet(m_features.siblingRules); 241 m_siblingRuleSet = makeRuleSet(m_features.siblingRules);
242 m_uncommonAttributeRuleSet = makeRuleSet(m_features.uncommonAttributeRules); 242 m_uncommonAttributeRuleSet = makeRuleSet(m_features.uncommonAttributeRules);
243 } 243 }
244 244
245 void StyleResolver::pushParentElement(Element* parent) 245 void StyleResolver::pushParentElement(Element* parent)
246 { 246 {
247 const ContainerNode* parentsParent = parent->parentOrShadowHostElement(); 247 const ContainerNode* parentsParent = parent->parentOrShadowHostElement();
248 248
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
415 415
416 // First we match rules from the user agent sheet. 416 // First we match rules from the user agent sheet.
417 if (CSSDefaultStyleSheets::simpleDefaultStyleSheet) 417 if (CSSDefaultStyleSheets::simpleDefaultStyleSheet)
418 collector.matchedResult().isCacheable = false; 418 collector.matchedResult().isCacheable = false;
419 419
420 RuleSet* userAgentStyleSheet = m_medium->mediaTypeMatchSpecific("print") 420 RuleSet* userAgentStyleSheet = m_medium->mediaTypeMatchSpecific("print")
421 ? CSSDefaultStyleSheets::defaultPrintStyle : CSSDefaultStyleSheets::defa ultStyle; 421 ? CSSDefaultStyleSheets::defaultPrintStyle : CSSDefaultStyleSheets::defa ultStyle;
422 matchUARules(collector, userAgentStyleSheet); 422 matchUARules(collector, userAgentStyleSheet);
423 423
424 // In quirks mode, we match rules from the quirks user agent sheet. 424 // In quirks mode, we match rules from the quirks user agent sheet.
425 if (document()->inQuirksMode()) 425 if (document().inQuirksMode())
426 matchUARules(collector, CSSDefaultStyleSheets::defaultQuirksStyle); 426 matchUARules(collector, CSSDefaultStyleSheets::defaultQuirksStyle);
427 427
428 // If document uses view source styles (in view source mode or in xml viewer mode), then we match rules from the view source style sheet. 428 // If document uses view source styles (in view source mode or in xml viewer mode), then we match rules from the view source style sheet.
429 if (document()->isViewSource()) 429 if (document().isViewSource())
430 matchUARules(collector, CSSDefaultStyleSheets::viewSourceStyle()); 430 matchUARules(collector, CSSDefaultStyleSheets::viewSourceStyle());
431 431
432 collector.setMatchingUARules(false); 432 collector.setMatchingUARules(false);
433 } 433 }
434 434
435 void StyleResolver::matchUARules(ElementRuleCollector& collector, RuleSet* rules ) 435 void StyleResolver::matchUARules(ElementRuleCollector& collector, RuleSet* rules )
436 { 436 {
437 collector.clearMatchedRules(); 437 collector.clearMatchedRules();
438 collector.matchedResult().ranges.lastUARule = collector.matchedResult().matc hedProperties.size() - 1; 438 collector.matchedResult().ranges.lastUARule = collector.matchedResult().matc hedProperties.size() - 1;
439 439
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 493
494 bool StyleResolver::styleSharingCandidateMatchesRuleSet(const ElementResolveCont ext& context, RenderStyle* style, RuleSet* ruleSet) 494 bool StyleResolver::styleSharingCandidateMatchesRuleSet(const ElementResolveCont ext& context, RenderStyle* style, RuleSet* ruleSet)
495 { 495 {
496 if (!ruleSet) 496 if (!ruleSet)
497 return false; 497 return false;
498 498
499 ElementRuleCollector collector(context, m_selectorFilter, style); 499 ElementRuleCollector collector(context, m_selectorFilter, style);
500 return collector.hasAnyMatchingRules(ruleSet); 500 return collector.hasAnyMatchingRules(ruleSet);
501 } 501 }
502 502
503 PassRefPtr<RenderStyle> StyleResolver::styleForDocument(const Document* document , CSSFontSelector* fontSelector) 503 PassRefPtr<RenderStyle> StyleResolver::styleForDocument(const Document& document , CSSFontSelector* fontSelector)
504 { 504 {
505 const Frame* frame = document->frame(); 505 const Frame* frame = document.frame();
506 506
507 // HTML5 states that seamless iframes should replace default CSS values 507 // HTML5 states that seamless iframes should replace default CSS values
508 // with values inherited from the containing iframe element. However, 508 // with values inherited from the containing iframe element. However,
509 // some values (such as the case of designMode = "on") still need to 509 // some values (such as the case of designMode = "on") still need to
510 // be set by this "document style". 510 // be set by this "document style".
511 RefPtr<RenderStyle> documentStyle = RenderStyle::create(); 511 RefPtr<RenderStyle> documentStyle = RenderStyle::create();
512 bool seamlessWithParent = document->shouldDisplaySeamlesslyWithParent(); 512 bool seamlessWithParent = document.shouldDisplaySeamlesslyWithParent();
513 if (seamlessWithParent) { 513 if (seamlessWithParent) {
514 RenderStyle* iframeStyle = document->seamlessParentIFrame()->renderStyle (); 514 RenderStyle* iframeStyle = document.seamlessParentIFrame()->renderStyle( );
515 if (iframeStyle) 515 if (iframeStyle)
516 documentStyle->inheritFrom(iframeStyle); 516 documentStyle->inheritFrom(iframeStyle);
517 } 517 }
518 518
519 // FIXME: It's not clear which values below we want to override in the seaml ess case! 519 // FIXME: It's not clear which values below we want to override in the seaml ess case!
520 documentStyle->setDisplay(BLOCK); 520 documentStyle->setDisplay(BLOCK);
521 if (!seamlessWithParent) { 521 if (!seamlessWithParent) {
522 documentStyle->setRTLOrdering(document->visuallyOrdered() ? VisualOrder : LogicalOrder); 522 documentStyle->setRTLOrdering(document.visuallyOrdered() ? VisualOrder : LogicalOrder);
523 documentStyle->setZoom(frame && !document->printing() ? frame->pageZoomF actor() : 1); 523 documentStyle->setZoom(frame && !document.printing() ? frame->pageZoomFa ctor() : 1);
524 documentStyle->setLocale(document->contentLanguage()); 524 documentStyle->setLocale(document.contentLanguage());
525 } 525 }
526 // This overrides any -webkit-user-modify inherited from the parent iframe. 526 // This overrides any -webkit-user-modify inherited from the parent iframe.
527 documentStyle->setUserModify(document->inDesignMode() ? READ_WRITE : READ_ON LY); 527 documentStyle->setUserModify(document.inDesignMode() ? READ_WRITE : READ_ONL Y);
528 528
529 Element* docElement = document->documentElement(); 529 Element* docElement = document.documentElement();
530 RenderObject* docElementRenderer = docElement ? docElement->renderer() : 0; 530 RenderObject* docElementRenderer = docElement ? docElement->renderer() : 0;
531 if (docElementRenderer) { 531 if (docElementRenderer) {
532 // Use the direction and writing-mode of the body to set the 532 // Use the direction and writing-mode of the body to set the
533 // viewport's direction and writing-mode unless the property is set on t he document element. 533 // viewport's direction and writing-mode unless the property is set on t he document element.
534 // If there is no body, then use the document element. 534 // If there is no body, then use the document element.
535 RenderObject* bodyRenderer = document->body() ? document->body()->render er() : 0; 535 RenderObject* bodyRenderer = document.body() ? document.body()->renderer () : 0;
536 if (bodyRenderer && !document->writingModeSetOnDocumentElement()) 536 if (bodyRenderer && !document.writingModeSetOnDocumentElement())
537 documentStyle->setWritingMode(bodyRenderer->style()->writingMode()); 537 documentStyle->setWritingMode(bodyRenderer->style()->writingMode());
538 else 538 else
539 documentStyle->setWritingMode(docElementRenderer->style()->writingMo de()); 539 documentStyle->setWritingMode(docElementRenderer->style()->writingMo de());
540 if (bodyRenderer && !document->directionSetOnDocumentElement()) 540 if (bodyRenderer && !document.directionSetOnDocumentElement())
541 documentStyle->setDirection(bodyRenderer->style()->direction()); 541 documentStyle->setDirection(bodyRenderer->style()->direction());
542 else 542 else
543 documentStyle->setDirection(docElementRenderer->style()->direction() ); 543 documentStyle->setDirection(docElementRenderer->style()->direction() );
544 } 544 }
545 545
546 if (frame) { 546 if (frame) {
547 if (FrameView* frameView = frame->view()) { 547 if (FrameView* frameView = frame->view()) {
548 const Pagination& pagination = frameView->pagination(); 548 const Pagination& pagination = frameView->pagination();
549 if (pagination.mode != Pagination::Unpaginated) { 549 if (pagination.mode != Pagination::Unpaginated) {
550 Pagination::setStylesForPaginationMode(pagination.mode, document Style.get()); 550 Pagination::setStylesForPaginationMode(pagination.mode, document Style.get());
551 documentStyle->setColumnGap(pagination.gap); 551 documentStyle->setColumnGap(pagination.gap);
552 if (RenderView* view = document->renderView()) { 552 if (RenderView* view = document.renderView()) {
553 if (view->hasColumns()) 553 if (view->hasColumns())
554 view->updateColumnInfoFromStyle(documentStyle.get()); 554 view->updateColumnInfoFromStyle(documentStyle.get());
555 } 555 }
556 } 556 }
557 } 557 }
558 } 558 }
559 559
560 // Seamless iframes want to inherit their font from their parent iframe, so early return before setting the font. 560 // Seamless iframes want to inherit their font from their parent iframe, so early return before setting the font.
561 if (seamlessWithParent) 561 if (seamlessWithParent)
562 return documentStyle.release(); 562 return documentStyle.release();
563 563
564 FontBuilder fontBuilder; 564 FontBuilder fontBuilder;
565 fontBuilder.initForStyleResolve(document, documentStyle.get(), document->isS VGDocument()); 565 fontBuilder.initForStyleResolve(&document, documentStyle.get(), document.isS VGDocument());
566 fontBuilder.createFontForDocument(fontSelector, documentStyle.get()); 566 fontBuilder.createFontForDocument(fontSelector, documentStyle.get());
567 567
568 return documentStyle.release(); 568 return documentStyle.release();
569 } 569 }
570 570
571 // FIXME: This is duplicated with StyleAdjuster.cpp 571 // FIXME: This is duplicated with StyleAdjuster.cpp
572 // Perhaps this should move onto ElementResolveContext or even Element? 572 // Perhaps this should move onto ElementResolveContext or even Element?
573 static inline bool isAtShadowBoundary(const Element* element) 573 static inline bool isAtShadowBoundary(const Element* element)
574 { 574 {
575 if (!element) 575 if (!element)
576 return false; 576 return false;
577 ContainerNode* parentNode = element->parentNode(); 577 ContainerNode* parentNode = element->parentNode();
578 return parentNode && parentNode->isShadowRoot(); 578 return parentNode && parentNode->isShadowRoot();
579 } 579 }
580 580
581 static inline void resetDirectionAndWritingModeOnDocument(Document* document) 581 static inline void resetDirectionAndWritingModeOnDocument(Document& document)
582 { 582 {
583 document->setDirectionSetOnDocumentElement(false); 583 document.setDirectionSetOnDocumentElement(false);
584 document->setWritingModeSetOnDocumentElement(false); 584 document.setWritingModeSetOnDocumentElement(false);
585 } 585 }
586 586
587 static void addContentAttrValuesToFeatures(const Vector<AtomicString>& contentAt trValues, RuleFeatureSet& features) 587 static void addContentAttrValuesToFeatures(const Vector<AtomicString>& contentAt trValues, RuleFeatureSet& features)
588 { 588 {
589 for (size_t i = 0; i < contentAttrValues.size(); ++i) 589 for (size_t i = 0; i < contentAttrValues.size(); ++i)
590 features.attrsInRules.add(contentAttrValues[i].impl()); 590 features.attrsInRules.add(contentAttrValues[i].impl());
591 } 591 }
592 592
593 PassRefPtr<RenderStyle> StyleResolver::styleForElement(Element* element, RenderS tyle* defaultParent, StyleSharingBehavior sharingBehavior, 593 PassRefPtr<RenderStyle> StyleResolver::styleForElement(Element* element, RenderS tyle* defaultParent, StyleSharingBehavior sharingBehavior,
594 RuleMatchingBehavior matchingBehavior, RenderRegion* regionForStyling) 594 RuleMatchingBehavior matchingBehavior, RenderRegion* regionForStyling)
595 { 595 {
596 ASSERT(document()->frame()); 596 ASSERT(document().frame());
597 ASSERT(documentSettings()); 597 ASSERT(documentSettings());
598 598
599 // Once an element has a renderer, we don't try to destroy it, since otherwi se the renderer 599 // Once an element has a renderer, we don't try to destroy it, since otherwi se the renderer
600 // will vanish if a style recalc happens during loading. 600 // will vanish if a style recalc happens during loading.
601 if (sharingBehavior == AllowStyleSharing && !element->document().haveStylesh eetsLoaded() && !element->renderer()) { 601 if (sharingBehavior == AllowStyleSharing && !element->document().haveStylesh eetsLoaded() && !element->renderer()) {
602 if (!s_styleNotYetAvailable) { 602 if (!s_styleNotYetAvailable) {
603 s_styleNotYetAvailable = RenderStyle::create().leakRef(); 603 s_styleNotYetAvailable = RenderStyle::create().leakRef();
604 s_styleNotYetAvailable->setDisplay(NONE); 604 s_styleNotYetAvailable->setDisplay(NONE);
605 s_styleNotYetAvailable->font().update(m_fontSelector); 605 s_styleNotYetAvailable->font().update(m_fontSelector);
606 } 606 }
607 element->document().setHasNodesWithPlaceholderStyle(); 607 element->document().setHasNodesWithPlaceholderStyle();
608 return s_styleNotYetAvailable; 608 return s_styleNotYetAvailable;
609 } 609 }
610 610
611 if (element == document()->documentElement()) 611 if (element == document().documentElement())
612 resetDirectionAndWritingModeOnDocument(document()); 612 resetDirectionAndWritingModeOnDocument(document());
613 StyleResolverState state(document(), element, defaultParent, regionForStylin g); 613 StyleResolverState state(document(), element, defaultParent, regionForStylin g);
614 614
615 if (sharingBehavior == AllowStyleSharing && !state.distributedToInsertionPoi nt() && state.parentStyle()) { 615 if (sharingBehavior == AllowStyleSharing && !state.distributedToInsertionPoi nt() && state.parentStyle()) {
616 SharedStyleFinder styleFinder(m_features, m_siblingRuleSet.get(), m_unco mmonAttributeRuleSet.get(), this); 616 SharedStyleFinder styleFinder(m_features, m_siblingRuleSet.get(), m_unco mmonAttributeRuleSet.get(), this);
617 RefPtr<RenderStyle> sharedStyle = styleFinder.locateSharedStyle(state.el ementContext(), state.style()); 617 RefPtr<RenderStyle> sharedStyle = styleFinder.locateSharedStyle(state.el ementContext(), state.style());
618 if (sharedStyle) 618 if (sharedStyle)
619 return sharedStyle.release(); 619 return sharedStyle.release();
620 } 620 }
621 621
622 if (state.parentStyle()) { 622 if (state.parentStyle()) {
623 state.setStyle(RenderStyle::create()); 623 state.setStyle(RenderStyle::create());
624 state.style()->inheritFrom(state.parentStyle(), isAtShadowBoundary(eleme nt) ? RenderStyle::AtShadowBoundary : RenderStyle::NotAtShadowBoundary); 624 state.style()->inheritFrom(state.parentStyle(), isAtShadowBoundary(eleme nt) ? RenderStyle::AtShadowBoundary : RenderStyle::NotAtShadowBoundary);
625 } else { 625 } else {
626 state.setStyle(defaultStyleForElement()); 626 state.setStyle(defaultStyleForElement());
627 state.setParentStyle(RenderStyle::clone(state.style())); 627 state.setParentStyle(RenderStyle::clone(state.style()));
628 } 628 }
629 // contenteditable attribute (implemented by -webkit-user-modify) should 629 // contenteditable attribute (implemented by -webkit-user-modify) should
630 // be propagated from shadow host to distributed node. 630 // be propagated from shadow host to distributed node.
631 if (state.distributedToInsertionPoint()) { 631 if (state.distributedToInsertionPoint()) {
632 if (Element* parent = element->parentElement()) { 632 if (Element* parent = element->parentElement()) {
633 if (RenderStyle* styleOfShadowHost = parent->renderStyle()) 633 if (RenderStyle* styleOfShadowHost = parent->renderStyle())
634 state.style()->setUserModify(styleOfShadowHost->userModify()); 634 state.style()->setUserModify(styleOfShadowHost->userModify());
635 } 635 }
636 } 636 }
637 637
638 state.fontBuilder().initForStyleResolve(state.document(), state.style(), sta te.useSVGZoomRules()); 638 state.fontBuilder().initForStyleResolve(&state.document(), state.style(), st ate.useSVGZoomRules());
639 639
640 if (element->isLink()) { 640 if (element->isLink()) {
641 state.style()->setIsLink(true); 641 state.style()->setIsLink(true);
642 EInsideLink linkState = state.elementLinkState(); 642 EInsideLink linkState = state.elementLinkState();
643 if (linkState != NotInsideLink) { 643 if (linkState != NotInsideLink) {
644 bool forceVisited = InspectorInstrumentation::forcePseudoState(eleme nt, CSSSelector::PseudoVisited); 644 bool forceVisited = InspectorInstrumentation::forcePseudoState(eleme nt, CSSSelector::PseudoVisited);
645 if (forceVisited) 645 if (forceVisited)
646 linkState = InsideVisitedLink; 646 linkState = InsideVisitedLink;
647 } 647 }
648 state.style()->setInsideLink(linkState); 648 state.style()->setInsideLink(linkState);
(...skipping 13 matching lines...) Expand all
662 if (matchingBehavior == MatchOnlyUserAgentRules) 662 if (matchingBehavior == MatchOnlyUserAgentRules)
663 matchUARules(collector); 663 matchUARules(collector);
664 else 664 else
665 matchAllRules(state, collector, m_matchAuthorAndUserStyles, matching Behavior != MatchAllRulesExcludingSMIL); 665 matchAllRules(state, collector, m_matchAuthorAndUserStyles, matching Behavior != MatchAllRulesExcludingSMIL);
666 666
667 applyMatchedProperties(state, collector.matchedResult()); 667 applyMatchedProperties(state, collector.matchedResult());
668 668
669 addContentAttrValuesToFeatures(state.contentAttrValues(), m_features); 669 addContentAttrValuesToFeatures(state.contentAttrValues(), m_features);
670 } 670 }
671 { 671 {
672 StyleAdjuster adjuster(state.cachedUAStyle(), m_document->inQuirksMode() ); 672 StyleAdjuster adjuster(state.cachedUAStyle(), m_document.inQuirksMode()) ;
673 adjuster.adjustRenderStyle(state.style(), state.parentStyle(), element); 673 adjuster.adjustRenderStyle(state.style(), state.parentStyle(), element);
674 } 674 }
675 document()->didAccessStyleResolver(); 675 document().didAccessStyleResolver();
676 676
677 // FIXME: Shouldn't this be on RenderBody::styleDidChange? 677 // FIXME: Shouldn't this be on RenderBody::styleDidChange?
678 if (element->hasTagName(bodyTag)) 678 if (element->hasTagName(bodyTag))
679 document()->textLinkColors().setTextColor(state.style()->visitedDependen tColor(CSSPropertyColor)); 679 document().textLinkColors().setTextColor(state.style()->visitedDependent Color(CSSPropertyColor));
680 680
681 // If any changes to CSS Animations were detected, stash the update away for application after the 681 // If any changes to CSS Animations were detected, stash the update away for application after the
682 // render object is updated if we're in the appropriate scope. 682 // render object is updated if we're in the appropriate scope.
683 if (RuntimeEnabledFeatures::webAnimationsCSSEnabled() && state.animationUpda te()) 683 if (RuntimeEnabledFeatures::webAnimationsCSSEnabled() && state.animationUpda te())
684 element->ensureActiveAnimations()->cssAnimations()->setPendingUpdate(sta te.takeAnimationUpdate()); 684 element->ensureActiveAnimations()->cssAnimations()->setPendingUpdate(sta te.takeAnimationUpdate());
685 685
686 // Now return the style. 686 // Now return the style.
687 return state.takeStyle(); 687 return state.takeStyle();
688 } 688 }
689 689
690 PassRefPtr<RenderStyle> StyleResolver::styleForKeyframe(Element* e, const Render Style* elementStyle, const StyleKeyframe* keyframe) 690 PassRefPtr<RenderStyle> StyleResolver::styleForKeyframe(Element* e, const Render Style* elementStyle, const StyleKeyframe* keyframe)
691 { 691 {
692 ASSERT(document()->frame()); 692 ASSERT(document().frame());
693 ASSERT(documentSettings()); 693 ASSERT(documentSettings());
694 694
695 if (e == document()->documentElement()) 695 if (e == document().documentElement())
696 resetDirectionAndWritingModeOnDocument(document()); 696 resetDirectionAndWritingModeOnDocument(document());
697 StyleResolverState state(document(), e); 697 StyleResolverState state(document(), e);
698 698
699 MatchResult result; 699 MatchResult result;
700 if (keyframe->properties()) 700 if (keyframe->properties())
701 result.addMatchedProperties(keyframe->properties()); 701 result.addMatchedProperties(keyframe->properties());
702 702
703 ASSERT(!state.style()); 703 ASSERT(!state.style());
704 704
705 // Create the style 705 // Create the style
706 state.setStyle(RenderStyle::clone(elementStyle)); 706 state.setStyle(RenderStyle::clone(elementStyle));
707 state.setLineHeightValue(0); 707 state.setLineHeightValue(0);
708 708
709 state.fontBuilder().initForStyleResolve(state.document(), state.style(), sta te.useSVGZoomRules()); 709 state.fontBuilder().initForStyleResolve(&state.document(), state.style(), st ate.useSVGZoomRules());
710 710
711 // We don't need to bother with !important. Since there is only ever one 711 // We don't need to bother with !important. Since there is only ever one
712 // decl, there's nothing to override. So just add the first properties. 712 // decl, there's nothing to override. So just add the first properties.
713 bool inheritedOnly = false; 713 bool inheritedOnly = false;
714 if (keyframe->properties()) { 714 if (keyframe->properties()) {
715 // FIXME: Can't keyframes contain variables? 715 // FIXME: Can't keyframes contain variables?
716 applyMatchedProperties<AnimationProperties>(state, result, false, 0, res ult.matchedProperties.size() - 1, inheritedOnly); 716 applyMatchedProperties<AnimationProperties>(state, result, false, 0, res ult.matchedProperties.size() - 1, inheritedOnly);
717 applyMatchedProperties<HighPriorityProperties>(state, result, false, 0, result.matchedProperties.size() - 1, inheritedOnly); 717 applyMatchedProperties<HighPriorityProperties>(state, result, false, 0, result.matchedProperties.size() - 1, inheritedOnly);
718 } 718 }
719 719
720 // If our font got dirtied, go ahead and update it now. 720 // If our font got dirtied, go ahead and update it now.
721 updateFont(state); 721 updateFont(state);
722 722
723 // Line-height is set when we are sure we decided on the font-size 723 // Line-height is set when we are sure we decided on the font-size
724 if (state.lineHeightValue()) 724 if (state.lineHeightValue())
725 StyleBuilder::applyProperty(CSSPropertyLineHeight, state, state.lineHeig htValue()); 725 StyleBuilder::applyProperty(CSSPropertyLineHeight, state, state.lineHeig htValue());
726 726
727 // Now do rest of the properties. 727 // Now do rest of the properties.
728 if (keyframe->properties()) 728 if (keyframe->properties())
729 applyMatchedProperties<LowPriorityProperties>(state, result, false, 0, r esult.matchedProperties.size() - 1, inheritedOnly); 729 applyMatchedProperties<LowPriorityProperties>(state, result, false, 0, r esult.matchedProperties.size() - 1, inheritedOnly);
730 730
731 // If our font got dirtied by one of the non-essential font props, 731 // If our font got dirtied by one of the non-essential font props,
732 // go ahead and update it a second time. 732 // go ahead and update it a second time.
733 updateFont(state); 733 updateFont(state);
734 734
735 // Start loading resources referenced by this style. 735 // Start loading resources referenced by this style.
736 m_styleResourceLoader.loadPendingResources(state.style(), state.elementStyle Resources()); 736 m_styleResourceLoader.loadPendingResources(state.style(), state.elementStyle Resources());
737 737
738 document()->didAccessStyleResolver(); 738 document().didAccessStyleResolver();
739 739
740 return state.takeStyle(); 740 return state.takeStyle();
741 } 741 }
742 742
743 const StyleRuleKeyframes* StyleResolver::matchScopedKeyframesRule(const Element* e, const StringImpl* animationName) 743 const StyleRuleKeyframes* StyleResolver::matchScopedKeyframesRule(const Element* e, const StringImpl* animationName)
744 { 744 {
745 if (m_styleTree.hasOnlyScopedResolverForDocument()) 745 if (m_styleTree.hasOnlyScopedResolverForDocument())
746 return m_styleTree.scopedStyleResolverForDocument()->keyframeStylesForAn imation(animationName); 746 return m_styleTree.scopedStyleResolverForDocument()->keyframeStylesForAn imation(animationName);
747 747
748 Vector<ScopedStyleResolver*, 8> stack; 748 Vector<ScopedStyleResolver*, 8> stack;
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
900 RefPtr<AnimatableValue> snapshotValue = CSSAnimatableValueFactory::creat e(property, style); 900 RefPtr<AnimatableValue> snapshotValue = CSSAnimatableValueFactory::creat e(property, style);
901 if (startNeedsValue) 901 if (startNeedsValue)
902 startKeyframe->setPropertyValue(property, snapshotValue.get()); 902 startKeyframe->setPropertyValue(property, snapshotValue.get());
903 if (endNeedsValue) 903 if (endNeedsValue)
904 endKeyframe->setPropertyValue(property, snapshotValue.get()); 904 endKeyframe->setPropertyValue(property, snapshotValue.get());
905 } 905 }
906 } 906 }
907 907
908 PassRefPtr<RenderStyle> StyleResolver::pseudoStyleForElement(Element* e, const P seudoStyleRequest& pseudoStyleRequest, RenderStyle* parentStyle) 908 PassRefPtr<RenderStyle> StyleResolver::pseudoStyleForElement(Element* e, const P seudoStyleRequest& pseudoStyleRequest, RenderStyle* parentStyle)
909 { 909 {
910 ASSERT(document()->frame()); 910 ASSERT(document().frame());
911 ASSERT(documentSettings()); 911 ASSERT(documentSettings());
912 ASSERT(parentStyle); 912 ASSERT(parentStyle);
913 if (!e) 913 if (!e)
914 return 0; 914 return 0;
915 915
916 if (e == document()->documentElement()) 916 if (e == document().documentElement())
917 resetDirectionAndWritingModeOnDocument(document()); 917 resetDirectionAndWritingModeOnDocument(document());
918 StyleResolverState state(document(), e, parentStyle); 918 StyleResolverState state(document(), e, parentStyle);
919 919
920 if (pseudoStyleRequest.allowsInheritance(state.parentStyle())) { 920 if (pseudoStyleRequest.allowsInheritance(state.parentStyle())) {
921 state.setStyle(RenderStyle::create()); 921 state.setStyle(RenderStyle::create());
922 state.style()->inheritFrom(state.parentStyle()); 922 state.style()->inheritFrom(state.parentStyle());
923 } else { 923 } else {
924 state.setStyle(defaultStyleForElement()); 924 state.setStyle(defaultStyleForElement());
925 state.setParentStyle(RenderStyle::clone(state.style())); 925 state.setParentStyle(RenderStyle::clone(state.style()));
926 } 926 }
927 927
928 state.fontBuilder().initForStyleResolve(state.document(), state.style(), sta te.useSVGZoomRules()); 928 state.fontBuilder().initForStyleResolve(&state.document(), state.style(), st ate.useSVGZoomRules());
929 929
930 // Since we don't use pseudo-elements in any of our quirk/print 930 // Since we don't use pseudo-elements in any of our quirk/print
931 // user agent rules, don't waste time walking those rules. 931 // user agent rules, don't waste time walking those rules.
932 932
933 { 933 {
934 // Check UA, user and author rules. 934 // Check UA, user and author rules.
935 ElementRuleCollector collector(state.elementContext(), m_selectorFilter, sta te.style()); 935 ElementRuleCollector collector(state.elementContext(), m_selectorFilter, sta te.style());
936 collector.setPseudoStyleRequest(pseudoStyleRequest); 936 collector.setPseudoStyleRequest(pseudoStyleRequest);
937 937
938 matchUARules(collector); 938 matchUARules(collector);
939 if (m_matchAuthorAndUserStyles) { 939 if (m_matchAuthorAndUserStyles) {
940 matchUserRules(collector, false); 940 matchUserRules(collector, false);
941 matchAuthorRules(state.element(), collector, false); 941 matchAuthorRules(state.element(), collector, false);
942 } 942 }
943 943
944 if (collector.matchedResult().matchedProperties.isEmpty()) 944 if (collector.matchedResult().matchedProperties.isEmpty())
945 return 0; 945 return 0;
946 946
947 state.style()->setStyleType(pseudoStyleRequest.pseudoId); 947 state.style()->setStyleType(pseudoStyleRequest.pseudoId);
948 948
949 applyMatchedProperties(state, collector.matchedResult()); 949 applyMatchedProperties(state, collector.matchedResult());
950 950
951 addContentAttrValuesToFeatures(state.contentAttrValues(), m_features); 951 addContentAttrValuesToFeatures(state.contentAttrValues(), m_features);
952 } 952 }
953 { 953 {
954 StyleAdjuster adjuster(state.cachedUAStyle(), m_document->inQuirksMode() ); 954 StyleAdjuster adjuster(state.cachedUAStyle(), m_document.inQuirksMode()) ;
955 // FIXME: Passing 0 as the Element* introduces a lot of complexity 955 // FIXME: Passing 0 as the Element* introduces a lot of complexity
956 // in the adjustRenderStyle code. 956 // in the adjustRenderStyle code.
957 adjuster.adjustRenderStyle(state.style(), state.parentStyle(), 0); 957 adjuster.adjustRenderStyle(state.style(), state.parentStyle(), 0);
958 } 958 }
959 959
960 // Start loading resources referenced by this style. 960 // Start loading resources referenced by this style.
961 m_styleResourceLoader.loadPendingResources(state.style(), state.elementStyle Resources()); 961 m_styleResourceLoader.loadPendingResources(state.style(), state.elementStyle Resources());
962 962
963 document()->didAccessStyleResolver(); 963 document().didAccessStyleResolver();
964 964
965 // Now return the style. 965 // Now return the style.
966 return state.takeStyle(); 966 return state.takeStyle();
967 } 967 }
968 968
969 PassRefPtr<RenderStyle> StyleResolver::styleForPage(int pageIndex) 969 PassRefPtr<RenderStyle> StyleResolver::styleForPage(int pageIndex)
970 { 970 {
971 resetDirectionAndWritingModeOnDocument(document()); 971 resetDirectionAndWritingModeOnDocument(document());
972 StyleResolverState state(document(), document()->documentElement()); // m_ro otElementStyle will be set to the document style. 972 StyleResolverState state(document(), document().documentElement()); // m_roo tElementStyle will be set to the document style.
973 973
974 state.setStyle(RenderStyle::create()); 974 state.setStyle(RenderStyle::create());
975 state.style()->inheritFrom(state.rootElementStyle()); 975 state.style()->inheritFrom(state.rootElementStyle());
976 976
977 state.fontBuilder().initForStyleResolve(state.document(), state.style(), sta te.useSVGZoomRules()); 977 state.fontBuilder().initForStyleResolve(&state.document(), state.style(), st ate.useSVGZoomRules());
978 978
979 PageRuleCollector collector(state.elementContext(), pageIndex); 979 PageRuleCollector collector(state.elementContext(), pageIndex);
980 980
981 collector.matchPageRules(CSSDefaultStyleSheets::defaultPrintStyle); 981 collector.matchPageRules(CSSDefaultStyleSheets::defaultPrintStyle);
982 collector.matchPageRules(m_ruleSets.userStyle()); 982 collector.matchPageRules(m_ruleSets.userStyle());
983 983
984 if (ScopedStyleResolver* scopedResolver = m_styleTree.scopedStyleResolverFor Document()) 984 if (ScopedStyleResolver* scopedResolver = m_styleTree.scopedStyleResolverFor Document())
985 scopedResolver->matchPageRules(collector); 985 scopedResolver->matchPageRules(collector);
986 986
987 state.setLineHeightValue(0); 987 state.setLineHeightValue(0);
(...skipping 10 matching lines...) Expand all
998 if (state.lineHeightValue()) 998 if (state.lineHeightValue())
999 StyleBuilder::applyProperty(CSSPropertyLineHeight, state, state.lineHeig htValue()); 999 StyleBuilder::applyProperty(CSSPropertyLineHeight, state, state.lineHeig htValue());
1000 1000
1001 applyMatchedProperties<LowPriorityProperties>(state, result, false, 0, resul t.matchedProperties.size() - 1, inheritedOnly); 1001 applyMatchedProperties<LowPriorityProperties>(state, result, false, 0, resul t.matchedProperties.size() - 1, inheritedOnly);
1002 1002
1003 addContentAttrValuesToFeatures(state.contentAttrValues(), m_features); 1003 addContentAttrValuesToFeatures(state.contentAttrValues(), m_features);
1004 1004
1005 // Start loading resources referenced by this style. 1005 // Start loading resources referenced by this style.
1006 m_styleResourceLoader.loadPendingResources(state.style(), state.elementStyle Resources()); 1006 m_styleResourceLoader.loadPendingResources(state.style(), state.elementStyle Resources());
1007 1007
1008 document()->didAccessStyleResolver(); 1008 document().didAccessStyleResolver();
1009 1009
1010 // Now return the style. 1010 // Now return the style.
1011 return state.takeStyle(); 1011 return state.takeStyle();
1012 } 1012 }
1013 1013
1014 void StyleResolver::collectViewportRules() 1014 void StyleResolver::collectViewportRules()
1015 { 1015 {
1016 ASSERT(RuntimeEnabledFeatures::cssViewportEnabled()); 1016 ASSERT(RuntimeEnabledFeatures::cssViewportEnabled());
1017 1017
1018 collectViewportRules(CSSDefaultStyleSheets::defaultStyle); 1018 collectViewportRules(CSSDefaultStyleSheets::defaultStyle);
(...skipping 14 matching lines...) Expand all
1033 1033
1034 const Vector<StyleRuleViewport*>& viewportRules = rules->viewportRules(); 1034 const Vector<StyleRuleViewport*>& viewportRules = rules->viewportRules();
1035 for (size_t i = 0; i < viewportRules.size(); ++i) 1035 for (size_t i = 0; i < viewportRules.size(); ++i)
1036 viewportStyleResolver()->addViewportRule(viewportRules[i]); 1036 viewportStyleResolver()->addViewportRule(viewportRules[i]);
1037 } 1037 }
1038 1038
1039 PassRefPtr<RenderStyle> StyleResolver::defaultStyleForElement() 1039 PassRefPtr<RenderStyle> StyleResolver::defaultStyleForElement()
1040 { 1040 {
1041 StyleResolverState state(document(), 0); 1041 StyleResolverState state(document(), 0);
1042 state.setStyle(RenderStyle::create()); 1042 state.setStyle(RenderStyle::create());
1043 state.fontBuilder().initForStyleResolve(document(), state.style(), state.use SVGZoomRules()); 1043 state.fontBuilder().initForStyleResolve(&document(), state.style(), state.us eSVGZoomRules());
1044 state.style()->setLineHeight(RenderStyle::initialLineHeight()); 1044 state.style()->setLineHeight(RenderStyle::initialLineHeight());
1045 state.setLineHeightValue(0); 1045 state.setLineHeightValue(0);
1046 state.fontBuilder().setInitial(state.style()->effectiveZoom()); 1046 state.fontBuilder().setInitial(state.style()->effectiveZoom());
1047 state.style()->font().update(fontSelector()); 1047 state.style()->font().update(fontSelector());
1048 return state.takeStyle(); 1048 return state.takeStyle();
1049 } 1049 }
1050 1050
1051 PassRefPtr<RenderStyle> StyleResolver::styleForText(Text* textNode) 1051 PassRefPtr<RenderStyle> StyleResolver::styleForText(Text* textNode)
1052 { 1052 {
1053 ASSERT(textNode); 1053 ASSERT(textNode);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1088 PassRefPtr<CSSRuleList> StyleResolver::styleRulesForElement(Element* e, unsigned rulesToInclude) 1088 PassRefPtr<CSSRuleList> StyleResolver::styleRulesForElement(Element* e, unsigned rulesToInclude)
1089 { 1089 {
1090 return pseudoStyleRulesForElement(e, NOPSEUDO, rulesToInclude); 1090 return pseudoStyleRulesForElement(e, NOPSEUDO, rulesToInclude);
1091 } 1091 }
1092 1092
1093 PassRefPtr<CSSRuleList> StyleResolver::pseudoStyleRulesForElement(Element* e, Ps eudoId pseudoId, unsigned rulesToInclude) 1093 PassRefPtr<CSSRuleList> StyleResolver::pseudoStyleRulesForElement(Element* e, Ps eudoId pseudoId, unsigned rulesToInclude)
1094 { 1094 {
1095 if (!e || !e->document().haveStylesheetsLoaded()) 1095 if (!e || !e->document().haveStylesheetsLoaded())
1096 return 0; 1096 return 0;
1097 1097
1098 if (e == document()->documentElement()) 1098 if (e == document().documentElement())
1099 resetDirectionAndWritingModeOnDocument(document()); 1099 resetDirectionAndWritingModeOnDocument(document());
1100 StyleResolverState state(document(), e); 1100 StyleResolverState state(document(), e);
1101 1101
1102 ElementRuleCollector collector(state.elementContext(), m_selectorFilter, sta te.style()); 1102 ElementRuleCollector collector(state.elementContext(), m_selectorFilter, sta te.style());
1103 collector.setMode(SelectorChecker::CollectingRules); 1103 collector.setMode(SelectorChecker::CollectingRules);
1104 collector.setPseudoStyleRequest(PseudoStyleRequest(pseudoId)); 1104 collector.setPseudoStyleRequest(PseudoStyleRequest(pseudoId));
1105 1105
1106 if (rulesToInclude & UAAndUserCSSRules) { 1106 if (rulesToInclude & UAAndUserCSSRules) {
1107 // First we match rules from the user agent sheet. 1107 // First we match rules from the user agent sheet.
1108 matchUARules(collector); 1108 matchUARules(collector);
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after
1479 1479
1480 CSSPropertyValue::CSSPropertyValue(CSSPropertyID id, const StylePropertySet& pro pertySet) 1480 CSSPropertyValue::CSSPropertyValue(CSSPropertyID id, const StylePropertySet& pro pertySet)
1481 : property(id), value(propertySet.getPropertyCSSValue(id).get()) 1481 : property(id), value(propertySet.getPropertyCSSValue(id).get())
1482 { } 1482 { }
1483 1483
1484 void StyleResolver::applyPropertiesToStyle(const CSSPropertyValue* properties, s ize_t count, RenderStyle* style) 1484 void StyleResolver::applyPropertiesToStyle(const CSSPropertyValue* properties, s ize_t count, RenderStyle* style)
1485 { 1485 {
1486 StyleResolverState state(document(), 0, style); 1486 StyleResolverState state(document(), 0, style);
1487 state.setStyle(style); 1487 state.setStyle(style);
1488 1488
1489 state.fontBuilder().initForStyleResolve(document(), style, state.useSVGZoomR ules()); 1489 state.fontBuilder().initForStyleResolve(&document(), style, state.useSVGZoom Rules());
1490 1490
1491 for (size_t i = 0; i < count; ++i) { 1491 for (size_t i = 0; i < count; ++i) {
1492 if (properties[i].value) { 1492 if (properties[i].value) {
1493 // As described in BUG66291, setting font-size and line-height on a font may entail a CSSPrimitiveValue::computeLengthDouble call, 1493 // As described in BUG66291, setting font-size and line-height on a font may entail a CSSPrimitiveValue::computeLengthDouble call,
1494 // which assumes the fontMetrics are available for the affected font , otherwise a crash occurs (see http://trac.webkit.org/changeset/96122). 1494 // which assumes the fontMetrics are available for the affected font , otherwise a crash occurs (see http://trac.webkit.org/changeset/96122).
1495 // The updateFont() call below updates the fontMetrics and ensure th e proper setting of font-size and line-height. 1495 // The updateFont() call below updates the fontMetrics and ensure th e proper setting of font-size and line-height.
1496 switch (properties[i].property) { 1496 switch (properties[i].property) {
1497 case CSSPropertyFontSize: 1497 case CSSPropertyFontSize:
1498 case CSSPropertyLineHeight: 1498 case CSSPropertyLineHeight:
1499 updateFont(state); 1499 updateFont(state);
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1550 m_matchedPropertiesSearches, m_matchedPropertiesHit, m_matchedProperties SharedInheritedHit, m_matchedPropertiesToCache, m_matchedPropertiesEnteredIntoCa che); 1550 m_matchedPropertiesSearches, m_matchedPropertiesHit, m_matchedProperties SharedInheritedHit, m_matchedPropertiesToCache, m_matchedPropertiesEnteredIntoCa che);
1551 1551
1552 fprintf(stderr, "Total:\n"); 1552 fprintf(stderr, "Total:\n");
1553 printStyleStats(m_totalSearches, m_totalElementsEligibleForSharing, m_totalS tylesShared, m_totalSearchFoundSiblingForSharing, m_totalSearchesMissedSharing, 1553 printStyleStats(m_totalSearches, m_totalElementsEligibleForSharing, m_totalS tylesShared, m_totalSearchFoundSiblingForSharing, m_totalSearchesMissedSharing,
1554 m_totalMatchedPropertiesSearches, m_totalMatchedPropertiesHit, m_totalMa tchedPropertiesSharedInheritedHit, m_totalMatchedPropertiesToCache, m_totalMatch edPropertiesEnteredIntoCache); 1554 m_totalMatchedPropertiesSearches, m_totalMatchedPropertiesHit, m_totalMa tchedPropertiesSharedInheritedHit, m_totalMatchedPropertiesToCache, m_totalMatch edPropertiesEnteredIntoCache);
1555 fprintf(stderr, "----------------------------------------------------------- ---------------------\n"); 1555 fprintf(stderr, "----------------------------------------------------------- ---------------------\n");
1556 } 1556 }
1557 #endif 1557 #endif
1558 1558
1559 } // namespace WebCore 1559 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/css/resolver/StyleResolver.h ('k') | Source/core/css/resolver/StyleResolverState.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698