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

Side by Side Diff: Source/core/inspector/InspectorCSSAgent.cpp

Issue 1350183004: DevTools: CSS.getMatchedStylesForNode protocol command to return inline styles (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: fix tests 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2010, Google Inc. All rights reserved. 2 * Copyright (C) 2010, Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 683 matching lines...) Expand 10 before | Expand all | Expand 10 after
694 collectMediaQueriesFromStyleSheet(styleSheet->pageStyleSheet(), medias.g et()); 694 collectMediaQueriesFromStyleSheet(styleSheet->pageStyleSheet(), medias.g et());
695 const CSSRuleVector& flatRules = styleSheet->flatRules(); 695 const CSSRuleVector& flatRules = styleSheet->flatRules();
696 for (unsigned i = 0; i < flatRules.size(); ++i) { 696 for (unsigned i = 0; i < flatRules.size(); ++i) {
697 CSSRule* rule = flatRules.at(i).get(); 697 CSSRule* rule = flatRules.at(i).get();
698 if (rule->type() == CSSRule::MEDIA_RULE || rule->type() == CSSRule:: IMPORT_RULE) 698 if (rule->type() == CSSRule::MEDIA_RULE || rule->type() == CSSRule:: IMPORT_RULE)
699 collectMediaQueriesFromRule(rule, medias.get()); 699 collectMediaQueriesFromRule(rule, medias.get());
700 } 700 }
701 } 701 }
702 } 702 }
703 703
704 void InspectorCSSAgent::getMatchedStylesForNode(ErrorString* errorString, int no deId, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::RuleMatch>>& matchedCSSRules, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::PseudoIdMatches>>& pseudoIdMatches, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::InheritedStyleEntry>>& inheritedEntr ies) 704 void InspectorCSSAgent::getMatchedStylesForNode(ErrorString* errorString, int no deId, RefPtr<TypeBuilder::CSS::CSSStyle>& inlineStyle, RefPtr<TypeBuilder::CSS:: CSSStyle>& attributesStyle, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::RuleMatc h>>& matchedCSSRules, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::PseudoIdMatche s>>& pseudoIdMatches, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::InheritedStyle Entry>>& inheritedEntries)
705 { 705 {
706 Element* element = elementForId(errorString, nodeId); 706 Element* element = elementForId(errorString, nodeId);
707 if (!element) { 707 if (!element) {
708 *errorString = "Node not found"; 708 *errorString = "Node not found";
709 return; 709 return;
710 } 710 }
711 711
712 Element* originalElement = element; 712 Element* originalElement = element;
713 PseudoId elementPseudoId = element->pseudoId(); 713 PseudoId elementPseudoId = element->pseudoId();
714 if (elementPseudoId) { 714 if (elementPseudoId) {
(...skipping 14 matching lines...) Expand all
729 // without grabbing at internal style classes! 729 // without grabbing at internal style classes!
730 730
731 // Matched rules. 731 // Matched rules.
732 StyleResolver& styleResolver = ownerDocument->ensureStyleResolver(); 732 StyleResolver& styleResolver = ownerDocument->ensureStyleResolver();
733 733
734 element->updateDistribution(); 734 element->updateDistribution();
735 RefPtrWillBeRawPtr<CSSRuleList> matchedRules = styleResolver.pseudoCSSRulesF orElement(element, elementPseudoId, StyleResolver::AllCSSRules); 735 RefPtrWillBeRawPtr<CSSRuleList> matchedRules = styleResolver.pseudoCSSRulesF orElement(element, elementPseudoId, StyleResolver::AllCSSRules);
736 matchedCSSRules = buildArrayForMatchedRuleList(matchedRules.get(), originalE lement, NOPSEUDO); 736 matchedCSSRules = buildArrayForMatchedRuleList(matchedRules.get(), originalE lement, NOPSEUDO);
737 737
738 // Pseudo elements. 738 // Pseudo elements.
739 if (!elementPseudoId) { 739 if (elementPseudoId)
740 RefPtr<TypeBuilder::Array<TypeBuilder::CSS::PseudoIdMatches> > pseudoEle ments = TypeBuilder::Array<TypeBuilder::CSS::PseudoIdMatches>::create(); 740 return;
741 for (PseudoId pseudoId = FIRST_PUBLIC_PSEUDOID; pseudoId < AFTER_LAST_IN TERNAL_PSEUDOID; pseudoId = static_cast<PseudoId>(pseudoId + 1)) { 741
742 RefPtrWillBeRawPtr<CSSRuleList> matchedRules = styleResolver.pseudoC SSRulesForElement(element, pseudoId, StyleResolver::AllCSSRules); 742 InspectorStyleSheetForInlineStyle* inlineStyleSheet = asInspectorStyleSheet( element);
743 if (matchedRules && matchedRules->length()) { 743 if (inlineStyleSheet) {
744 RefPtr<TypeBuilder::CSS::PseudoIdMatches> matches = TypeBuilder: :CSS::PseudoIdMatches::create() 744 inlineStyle = inlineStyleSheet->buildObjectForStyle(element->style());
745 .setPseudoId(static_cast<int>(pseudoId)) 745 RefPtr<TypeBuilder::CSS::CSSStyle> attributes = buildObjectForAttributes Style(element);
746 .setMatches(buildArrayForMatchedRuleList(matchedRules.get(), element, pseudoId)); 746 attributesStyle = attributes ? attributes.release() : nullptr;
747 pseudoElements->addItem(matches.release()); 747 }
748 } 748
749 RefPtr<TypeBuilder::Array<TypeBuilder::CSS::PseudoIdMatches>> pseudoElements = TypeBuilder::Array<TypeBuilder::CSS::PseudoIdMatches>::create();
750 for (PseudoId pseudoId = FIRST_PUBLIC_PSEUDOID; pseudoId < AFTER_LAST_INTERN AL_PSEUDOID; pseudoId = static_cast<PseudoId>(pseudoId + 1)) {
751 RefPtrWillBeRawPtr<CSSRuleList> matchedRules = styleResolver.pseudoCSSRu lesForElement(element, pseudoId, StyleResolver::AllCSSRules);
752 if (matchedRules && matchedRules->length()) {
753 RefPtr<TypeBuilder::CSS::PseudoIdMatches> matches = TypeBuilder::CSS ::PseudoIdMatches::create()
754 .setPseudoId(static_cast<int>(pseudoId))
755 .setMatches(buildArrayForMatchedRuleList(matchedRules.get(), ele ment, pseudoId));
756 pseudoElements->addItem(matches.release());
749 } 757 }
750 pseudoIdMatches = pseudoElements.release(); 758 }
759 pseudoIdMatches = pseudoElements.release();
751 760
752 // Inherited styles. 761 // Inherited styles.
753 RefPtr<TypeBuilder::Array<TypeBuilder::CSS::InheritedStyleEntry> > entri es = TypeBuilder::Array<TypeBuilder::CSS::InheritedStyleEntry>::create(); 762 RefPtr<TypeBuilder::Array<TypeBuilder::CSS::InheritedStyleEntry>> entries = TypeBuilder::Array<TypeBuilder::CSS::InheritedStyleEntry>::create();
754 Element* parentElement = element->parentOrShadowHostElement(); 763 Element* parentElement = element->parentOrShadowHostElement();
755 while (parentElement) { 764 while (parentElement) {
756 StyleResolver& parentStyleResolver = parentElement->ownerDocument()- >ensureStyleResolver(); 765 StyleResolver& parentStyleResolver = parentElement->ownerDocument()->ens ureStyleResolver();
757 RefPtrWillBeRawPtr<CSSRuleList> parentMatchedRules = parentStyleReso lver.cssRulesForElement(parentElement, StyleResolver::AllCSSRules); 766 RefPtrWillBeRawPtr<CSSRuleList> parentMatchedRules = parentStyleResolver .cssRulesForElement(parentElement, StyleResolver::AllCSSRules);
758 RefPtr<TypeBuilder::CSS::InheritedStyleEntry> entry = TypeBuilder::C SS::InheritedStyleEntry::create() 767 RefPtr<TypeBuilder::CSS::InheritedStyleEntry> entry = TypeBuilder::CSS:: InheritedStyleEntry::create()
759 .setMatchedCSSRules(buildArrayForMatchedRuleList(parentMatchedRu les.get(), parentElement, NOPSEUDO)); 768 .setMatchedCSSRules(buildArrayForMatchedRuleList(parentMatchedRules. get(), parentElement, NOPSEUDO));
760 if (parentElement->style() && parentElement->style()->length()) { 769 if (parentElement->style() && parentElement->style()->length()) {
761 InspectorStyleSheetForInlineStyle* styleSheet = asInspectorStyle Sheet(parentElement); 770 InspectorStyleSheetForInlineStyle* styleSheet = asInspectorStyleShee t(parentElement);
762 if (styleSheet) 771 if (styleSheet)
763 entry->setInlineStyle(styleSheet->buildObjectForStyle(styleS heet->inlineStyle())); 772 entry->setInlineStyle(styleSheet->buildObjectForStyle(styleSheet ->inlineStyle()));
764 } 773 }
765 774
766 entries->addItem(entry.release()); 775 entries->addItem(entry.release());
767 parentElement = parentElement->parentOrShadowHostElement(); 776 parentElement = parentElement->parentOrShadowHostElement();
768 }
769 inheritedEntries = entries.release();
770 } 777 }
778 inheritedEntries = entries.release();
771 } 779 }
772 780
773 void InspectorCSSAgent::getInlineStylesForNode(ErrorString* errorString, int nod eId, RefPtr<TypeBuilder::CSS::CSSStyle>& inlineStyle, RefPtr<TypeBuilder::CSS::C SSStyle>& attributesStyle) 781 void InspectorCSSAgent::getInlineStylesForNode(ErrorString* errorString, int nod eId, RefPtr<TypeBuilder::CSS::CSSStyle>& inlineStyle, RefPtr<TypeBuilder::CSS::C SSStyle>& attributesStyle)
774 { 782 {
775 Element* element = elementForId(errorString, nodeId); 783 Element* element = elementForId(errorString, nodeId);
776 if (!element) 784 if (!element)
777 return; 785 return;
778 786
779 InspectorStyleSheetForInlineStyle* styleSheet = asInspectorStyleSheet(elemen t); 787 InspectorStyleSheetForInlineStyle* styleSheet = asInspectorStyleSheet(elemen t);
780 if (!styleSheet) 788 if (!styleSheet)
(...skipping 930 matching lines...) Expand 10 before | Expand all | Expand 10 after
1711 visitor->trace(m_documentToCSSStyleSheets); 1719 visitor->trace(m_documentToCSSStyleSheets);
1712 visitor->trace(m_invalidatedDocuments); 1720 visitor->trace(m_invalidatedDocuments);
1713 visitor->trace(m_nodeToInspectorStyleSheet); 1721 visitor->trace(m_nodeToInspectorStyleSheet);
1714 visitor->trace(m_documentToViaInspectorStyleSheet); 1722 visitor->trace(m_documentToViaInspectorStyleSheet);
1715 #endif 1723 #endif
1716 visitor->trace(m_inspectorUserAgentStyleSheet); 1724 visitor->trace(m_inspectorUserAgentStyleSheet);
1717 InspectorBaseAgent::trace(visitor); 1725 InspectorBaseAgent::trace(visitor);
1718 } 1726 }
1719 1727
1720 } // namespace blink 1728 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/inspector/InspectorCSSAgent.h ('k') | Source/devtools/front_end/audits/AuditRules.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698