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

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

Issue 1329013002: Revert of Add inline style in the element's scope. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 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
« no previous file with comments | « Source/core/css/resolver/StyleResolver.h ('k') | no next file » | 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 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 continue; 372 continue;
373 if (ScopedStyleResolver* resolver = shadowRoot->scopedStyleResolver()) { 373 if (ScopedStyleResolver* resolver = shadowRoot->scopedStyleResolver()) {
374 collector.clearMatchedRules(); 374 collector.clearMatchedRules();
375 resolver->collectMatchingShadowHostRules(collector, includeEmptyRule s); 375 resolver->collectMatchingShadowHostRules(collector, includeEmptyRule s);
376 collector.sortAndTransferMatchedRules(); 376 collector.sortAndTransferMatchedRules();
377 collector.finishAddingAuthorRulesForTreeScope(); 377 collector.finishAddingAuthorRulesForTreeScope();
378 } 378 }
379 } 379 }
380 } 380 }
381 381
382 void StyleResolver::matchElementScopeRules(const Element& element, ScopedStyleRe solver* elementScopeResolver, ElementRuleCollector& collector, bool includeEmpty Rules) 382 void StyleResolver::matchElementScopeRules(ScopedStyleResolver& elementScopeReso lver, ElementRuleCollector& collector, bool includeEmptyRules)
383 { 383 {
384 if (elementScopeResolver) { 384 collector.clearMatchedRules();
385 collector.clearMatchedRules(); 385 elementScopeResolver.collectMatchingAuthorRules(collector, includeEmptyRules );
386 elementScopeResolver->collectMatchingAuthorRules(collector, includeEmpty Rules); 386 elementScopeResolver.collectMatchingTreeBoundaryCrossingRules(collector, inc ludeEmptyRules);
387 elementScopeResolver->collectMatchingTreeBoundaryCrossingRules(collector , includeEmptyRules); 387 collector.sortAndTransferMatchedRules();
388 collector.sortAndTransferMatchedRules();
389 }
390
391 if (element.isStyledElement() && element.inlineStyle() && !collector.isColle ctingForPseudoElement()) {
392 // Inline style is immutable as long as there is no CSSOM wrapper.
393 bool isInlineStyleCacheable = !element.inlineStyle()->isMutable();
394 collector.addElementStyleProperties(element.inlineStyle(), isInlineStyle Cacheable);
395 }
396
397 collector.finishAddingAuthorRulesForTreeScope(); 388 collector.finishAddingAuthorRulesForTreeScope();
398 } 389 }
399 390
400 void StyleResolver::matchScopedRules(const Element& element, ElementRuleCollecto r& collector, bool includeEmptyRules) 391 void StyleResolver::matchScopedRules(const Element& element, ElementRuleCollecto r& collector, bool includeEmptyRules)
401 { 392 {
402 // Match rules from treeScopes in the reverse tree-of-trees order, since the 393 // Match rules from treeScopes in the reverse tree-of-trees order, since the
403 // cascading order for normal rules is such that when comparing rules from 394 // cascading order for normal rules is such that when comparing rules from
404 // different shadow trees, the rule from the tree which comes first in the 395 // different shadow trees, the rule from the tree which comes first in the
405 // tree-of-trees order wins. From other treeScopes than the element's own 396 // tree-of-trees order wins. From other treeScopes than the element's own
406 // scope, only tree-boundary-crossing rules may match. 397 // scope, only tree-boundary-crossing rules may match.
407 398
408 ScopedStyleResolver* elementScopeResolver = scopedResolverFor(element); 399 ScopedStyleResolver* elementScopeResolver = scopedResolverFor(element);
409 bool matchElementScopeDone = !elementScopeResolver && !element.inlineStyle() ; 400 bool matchElementScopeDone = !elementScopeResolver;
410 401
411 for (auto it = m_treeBoundaryCrossingScopes.rbegin(); it != m_treeBoundaryCr ossingScopes.rend(); ++it) { 402 for (auto it = m_treeBoundaryCrossingScopes.rbegin(); it != m_treeBoundaryCr ossingScopes.rend(); ++it) {
412 const TreeScope& scope = (*it)->treeScope(); 403 const TreeScope& scope = (*it)->treeScope();
413 ScopedStyleResolver* resolver = scope.scopedStyleResolver(); 404 ScopedStyleResolver* resolver = scope.scopedStyleResolver();
414 ASSERT(resolver); 405 ASSERT(resolver);
415 406
416 if (!matchElementScopeDone && scope.isInclusiveAncestorOf(element.treeSc ope())) { 407 if (!matchElementScopeDone && scope.isInclusiveAncestorOf(element.treeSc ope())) {
417 408
418 matchElementScopeDone = true; 409 matchElementScopeDone = true;
419 410
420 // At this point, the iterator has either encountered the scope for the element 411 // At this point, the iterator has either encountered the scope for the element
421 // itself (if that scope has boundary-crossing rules), or the iterat or has moved 412 // itself (if that scope has boundary-crossing rules), or the iterat or has moved
422 // to a scope which appears before the element's scope in the tree-o f-trees order. 413 // to a scope which appears before the element's scope in the tree-o f-trees order.
423 // Try to match all rules from the element's scope. 414 // Try to match all rules from the element's scope.
424 415
425 matchElementScopeRules(element, elementScopeResolver, collector, inc ludeEmptyRules); 416 matchElementScopeRules(*elementScopeResolver, collector, includeEmpt yRules);
426 if (resolver == elementScopeResolver) { 417 if (resolver == elementScopeResolver) {
427 // Boundary-crossing rules already collected in matchElementScop eRules. 418 // Boundary-crossing rules already collected in matchElementScop eRules.
428 continue; 419 continue;
429 } 420 }
430 } 421 }
431 422
432 collector.clearMatchedRules(); 423 collector.clearMatchedRules();
433 resolver->collectMatchingTreeBoundaryCrossingRules(collector, includeEmp tyRules); 424 resolver->collectMatchingTreeBoundaryCrossingRules(collector, includeEmp tyRules);
434 collector.sortAndTransferMatchedRules(); 425 collector.sortAndTransferMatchedRules();
435 collector.finishAddingAuthorRulesForTreeScope(); 426 collector.finishAddingAuthorRulesForTreeScope();
436 } 427 }
437 428
438 if (!matchElementScopeDone) 429 if (!matchElementScopeDone)
439 matchElementScopeRules(element, elementScopeResolver, collector, include EmptyRules); 430 matchElementScopeRules(*elementScopeResolver, collector, includeEmptyRul es);
440 } 431 }
441 432
442 void StyleResolver::matchAuthorRules(const Element& element, ElementRuleCollecto r& collector, bool includeEmptyRules) 433 void StyleResolver::matchAuthorRules(const Element& element, ElementRuleCollecto r& collector, bool includeEmptyRules)
443 { 434 {
444 matchHostRules(element, collector, includeEmptyRules); 435 matchHostRules(element, collector, includeEmptyRules);
445 matchScopedRules(element, collector, includeEmptyRules); 436 matchScopedRules(element, collector, includeEmptyRules);
446 } 437 }
447 438
448 void StyleResolver::matchUARules(ElementRuleCollector& collector) 439 void StyleResolver::matchUARules(ElementRuleCollector& collector)
449 { 440 {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 if (isAuto) { 482 if (isAuto) {
492 state.setHasDirAutoAttribute(true); 483 state.setHasDirAutoAttribute(true);
493 collector.addElementStyleProperties(textDirection == LTR ? leftT oRightDeclaration() : rightToLeftDeclaration()); 484 collector.addElementStyleProperties(textDirection == LTR ? leftT oRightDeclaration() : rightToLeftDeclaration());
494 } 485 }
495 } 486 }
496 } 487 }
497 488
498 matchAuthorRules(*state.element(), collector, false); 489 matchAuthorRules(*state.element(), collector, false);
499 490
500 if (state.element()->isStyledElement()) { 491 if (state.element()->isStyledElement()) {
492 // TODO(rune@opera.com): Adding style attribute rules here is probably t oo late
493 // when you have shadow piercing combinators. When we don't have piercin g combinators,
494 // the style attribute always belong to the outermost scope whose rules apply to
495 // the element. Thus, applying inline style here is correct. Fixing this for piercing
496 // combinators means moving the code below into matchElementScopeRules a nd _not_
497 // invoking it for pseudo style requests.
498 if (state.element()->inlineStyle()) {
499 // Inline style is immutable as long as there is no CSSOM wrapper.
500 bool isInlineStyleCacheable = !state.element()->inlineStyle()->isMut able();
501 collector.addElementStyleProperties(state.element()->inlineStyle(), isInlineStyleCacheable);
502 }
503
501 // Now check SMIL animation override style. 504 // Now check SMIL animation override style.
502 if (includeSMILProperties && state.element()->isSVGElement()) 505 if (includeSMILProperties && state.element()->isSVGElement())
503 collector.addElementStyleProperties(toSVGElement(state.element())->a nimatedSMILStyleProperties(), false /* isCacheable */); 506 collector.addElementStyleProperties(toSVGElement(state.element())->a nimatedSMILStyleProperties(), false /* isCacheable */);
504 } 507 }
505 508
506 collector.finishAddingAuthorRulesForTreeScope(); 509 collector.finishAddingAuthorRulesForTreeScope();
507 } 510 }
508 511
509 PassRefPtr<ComputedStyle> StyleResolver::styleForDocument(Document& document) 512 PassRefPtr<ComputedStyle> StyleResolver::styleForDocument(Document& document)
510 { 513 {
(...skipping 1026 matching lines...) Expand 10 before | Expand all | Expand 10 after
1537 visitor->trace(m_watchedSelectorsRules); 1540 visitor->trace(m_watchedSelectorsRules);
1538 visitor->trace(m_treeBoundaryCrossingScopes); 1541 visitor->trace(m_treeBoundaryCrossingScopes);
1539 visitor->trace(m_styleResourceLoader); 1542 visitor->trace(m_styleResourceLoader);
1540 visitor->trace(m_styleSharingLists); 1543 visitor->trace(m_styleSharingLists);
1541 visitor->trace(m_pendingStyleSheets); 1544 visitor->trace(m_pendingStyleSheets);
1542 visitor->trace(m_document); 1545 visitor->trace(m_document);
1543 #endif 1546 #endif
1544 } 1547 }
1545 1548
1546 } // namespace blink 1549 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/css/resolver/StyleResolver.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698