OLD | NEW |
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 462 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
473 void InspectorCSSAgent::restore() | 473 void InspectorCSSAgent::restore() |
474 { | 474 { |
475 if (m_state->getBoolean(CSSAgentState::cssAgentEnabled)) | 475 if (m_state->getBoolean(CSSAgentState::cssAgentEnabled)) |
476 wasEnabled(); | 476 wasEnabled(); |
477 } | 477 } |
478 | 478 |
479 void InspectorCSSAgent::flushPendingProtocolNotifications() | 479 void InspectorCSSAgent::flushPendingProtocolNotifications() |
480 { | 480 { |
481 if (!m_invalidatedDocuments.size()) | 481 if (!m_invalidatedDocuments.size()) |
482 return; | 482 return; |
483 WillBeHeapHashSet<RawPtrWillBeMember<Document> > invalidatedDocuments; | 483 WillBeHeapHashSet<RawPtrWillBeMember<Document>> invalidatedDocuments; |
484 m_invalidatedDocuments.swap(&invalidatedDocuments); | 484 m_invalidatedDocuments.swap(&invalidatedDocuments); |
485 for (Document* document: invalidatedDocuments) | 485 for (Document* document: invalidatedDocuments) |
486 updateActiveStyleSheets(document, ExistingFrontendRefresh); | 486 updateActiveStyleSheets(document, ExistingFrontendRefresh); |
487 } | 487 } |
488 | 488 |
489 void InspectorCSSAgent::reset() | 489 void InspectorCSSAgent::reset() |
490 { | 490 { |
491 m_idToInspectorStyleSheet.clear(); | 491 m_idToInspectorStyleSheet.clear(); |
492 m_idToInspectorStyleSheetForInlineStyle.clear(); | 492 m_idToInspectorStyleSheetForInlineStyle.clear(); |
493 m_cssStyleSheetToInspectorStyleSheet.clear(); | 493 m_cssStyleSheetToInspectorStyleSheet.clear(); |
(...skipping 25 matching lines...) Expand all Loading... |
519 } | 519 } |
520 | 520 |
521 void InspectorCSSAgent::wasEnabled() | 521 void InspectorCSSAgent::wasEnabled() |
522 { | 522 { |
523 if (!m_state->getBoolean(CSSAgentState::cssAgentEnabled)) { | 523 if (!m_state->getBoolean(CSSAgentState::cssAgentEnabled)) { |
524 // We were disabled while fetching resources. | 524 // We were disabled while fetching resources. |
525 return; | 525 return; |
526 } | 526 } |
527 | 527 |
528 m_instrumentingAgents->setInspectorCSSAgent(this); | 528 m_instrumentingAgents->setInspectorCSSAgent(this); |
529 WillBeHeapVector<RawPtrWillBeMember<Document> > documents = m_domAgent->docu
ments(); | 529 WillBeHeapVector<RawPtrWillBeMember<Document>> documents = m_domAgent->docum
ents(); |
530 for (Document* document : documents) | 530 for (Document* document : documents) |
531 updateActiveStyleSheets(document, InitialFrontendLoad); | 531 updateActiveStyleSheets(document, InitialFrontendLoad); |
532 } | 532 } |
533 | 533 |
534 void InspectorCSSAgent::disable(ErrorString*) | 534 void InspectorCSSAgent::disable(ErrorString*) |
535 { | 535 { |
536 reset(); | 536 reset(); |
537 m_instrumentingAgents->setInspectorCSSAgent(0); | 537 m_instrumentingAgents->setInspectorCSSAgent(0); |
538 m_state->setBoolean(CSSAgentState::cssAgentEnabled, false); | 538 m_state->setBoolean(CSSAgentState::cssAgentEnabled, false); |
539 } | 539 } |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
589 if (styleSheetEditInProgress()) | 589 if (styleSheetEditInProgress()) |
590 return; | 590 return; |
591 | 591 |
592 m_invalidatedDocuments.add(document); | 592 m_invalidatedDocuments.add(document); |
593 if (m_creatingViaInspectorStyleSheet) | 593 if (m_creatingViaInspectorStyleSheet) |
594 flushPendingProtocolNotifications(); | 594 flushPendingProtocolNotifications(); |
595 } | 595 } |
596 | 596 |
597 void InspectorCSSAgent::updateActiveStyleSheets(Document* document, StyleSheetsU
pdateType styleSheetsUpdateType) | 597 void InspectorCSSAgent::updateActiveStyleSheets(Document* document, StyleSheetsU
pdateType styleSheetsUpdateType) |
598 { | 598 { |
599 WillBeHeapVector<RawPtrWillBeMember<CSSStyleSheet> > newSheetsVector; | 599 WillBeHeapVector<RawPtrWillBeMember<CSSStyleSheet>> newSheetsVector; |
600 InspectorCSSAgent::collectAllDocumentStyleSheets(document, newSheetsVector); | 600 InspectorCSSAgent::collectAllDocumentStyleSheets(document, newSheetsVector); |
601 setActiveStyleSheets(document, newSheetsVector, styleSheetsUpdateType); | 601 setActiveStyleSheets(document, newSheetsVector, styleSheetsUpdateType); |
602 } | 602 } |
603 | 603 |
604 void InspectorCSSAgent::setActiveStyleSheets(Document* document, const WillBeHea
pVector<RawPtrWillBeMember<CSSStyleSheet> >& allSheetsVector, StyleSheetsUpdateT
ype styleSheetsUpdateType) | 604 void InspectorCSSAgent::setActiveStyleSheets(Document* document, const WillBeHea
pVector<RawPtrWillBeMember<CSSStyleSheet>>& allSheetsVector, StyleSheetsUpdateTy
pe styleSheetsUpdateType) |
605 { | 605 { |
606 bool isInitialFrontendLoad = styleSheetsUpdateType == InitialFrontendLoad; | 606 bool isInitialFrontendLoad = styleSheetsUpdateType == InitialFrontendLoad; |
607 | 607 |
608 WillBeHeapHashSet<RawPtrWillBeMember<CSSStyleSheet> >* documentCSSStyleSheet
s = m_documentToCSSStyleSheets.get(document); | 608 WillBeHeapHashSet<RawPtrWillBeMember<CSSStyleSheet>>* documentCSSStyleSheets
= m_documentToCSSStyleSheets.get(document); |
609 if (!documentCSSStyleSheets) { | 609 if (!documentCSSStyleSheets) { |
610 documentCSSStyleSheets = new WillBeHeapHashSet<RawPtrWillBeMember<CSSSty
leSheet> >(); | 610 documentCSSStyleSheets = new WillBeHeapHashSet<RawPtrWillBeMember<CSSSty
leSheet>>(); |
611 OwnPtrWillBeRawPtr<WillBeHeapHashSet<RawPtrWillBeMember<CSSStyleSheet> >
> documentCSSStyleSheetsPtr = adoptPtrWillBeNoop(documentCSSStyleSheets); | 611 OwnPtrWillBeRawPtr<WillBeHeapHashSet<RawPtrWillBeMember<CSSStyleSheet>>>
documentCSSStyleSheetsPtr = adoptPtrWillBeNoop(documentCSSStyleSheets); |
612 m_documentToCSSStyleSheets.set(document, documentCSSStyleSheetsPtr.relea
se()); | 612 m_documentToCSSStyleSheets.set(document, documentCSSStyleSheetsPtr.relea
se()); |
613 } | 613 } |
614 | 614 |
615 WillBeHeapHashSet<RawPtrWillBeMember<CSSStyleSheet> > removedSheets(*documen
tCSSStyleSheets); | 615 WillBeHeapHashSet<RawPtrWillBeMember<CSSStyleSheet>> removedSheets(*document
CSSStyleSheets); |
616 WillBeHeapVector<RawPtrWillBeMember<CSSStyleSheet> > addedSheets; | 616 WillBeHeapVector<RawPtrWillBeMember<CSSStyleSheet>> addedSheets; |
617 for (CSSStyleSheet* cssStyleSheet : allSheetsVector) { | 617 for (CSSStyleSheet* cssStyleSheet : allSheetsVector) { |
618 if (removedSheets.contains(cssStyleSheet)) { | 618 if (removedSheets.contains(cssStyleSheet)) { |
619 removedSheets.remove(cssStyleSheet); | 619 removedSheets.remove(cssStyleSheet); |
620 if (isInitialFrontendLoad) | 620 if (isInitialFrontendLoad) |
621 addedSheets.append(cssStyleSheet); | 621 addedSheets.append(cssStyleSheet); |
622 } else { | 622 } else { |
623 addedSheets.append(cssStyleSheet); | 623 addedSheets.append(cssStyleSheet); |
624 } | 624 } |
625 } | 625 } |
626 | 626 |
(...skipping 19 matching lines...) Expand all Loading... |
646 } | 646 } |
647 } | 647 } |
648 | 648 |
649 if (documentCSSStyleSheets->isEmpty()) | 649 if (documentCSSStyleSheets->isEmpty()) |
650 m_documentToCSSStyleSheets.remove(document); | 650 m_documentToCSSStyleSheets.remove(document); |
651 } | 651 } |
652 | 652 |
653 void InspectorCSSAgent::documentDetached(Document* document) | 653 void InspectorCSSAgent::documentDetached(Document* document) |
654 { | 654 { |
655 m_invalidatedDocuments.remove(document); | 655 m_invalidatedDocuments.remove(document); |
656 setActiveStyleSheets(document, WillBeHeapVector<RawPtrWillBeMember<CSSStyleS
heet> >(), ExistingFrontendRefresh); | 656 setActiveStyleSheets(document, WillBeHeapVector<RawPtrWillBeMember<CSSStyleS
heet>>(), ExistingFrontendRefresh); |
657 } | 657 } |
658 | 658 |
659 bool InspectorCSSAgent::forcePseudoState(Element* element, CSSSelector::PseudoTy
pe pseudoType) | 659 bool InspectorCSSAgent::forcePseudoState(Element* element, CSSSelector::PseudoTy
pe pseudoType) |
660 { | 660 { |
661 if (m_nodeIdToForcedPseudoState.isEmpty()) | 661 if (m_nodeIdToForcedPseudoState.isEmpty()) |
662 return false; | 662 return false; |
663 | 663 |
664 int nodeId = m_domAgent->boundNodeId(element); | 664 int nodeId = m_domAgent->boundNodeId(element); |
665 if (!nodeId) | 665 if (!nodeId) |
666 return false; | 666 return false; |
(...skipping 10 matching lines...) Expand all Loading... |
677 return forcedPseudoState & PseudoFocus; | 677 return forcedPseudoState & PseudoFocus; |
678 case CSSSelector::PseudoHover: | 678 case CSSSelector::PseudoHover: |
679 return forcedPseudoState & PseudoHover; | 679 return forcedPseudoState & PseudoHover; |
680 case CSSSelector::PseudoVisited: | 680 case CSSSelector::PseudoVisited: |
681 return forcedPseudoState & PseudoVisited; | 681 return forcedPseudoState & PseudoVisited; |
682 default: | 682 default: |
683 return false; | 683 return false; |
684 } | 684 } |
685 } | 685 } |
686 | 686 |
687 void InspectorCSSAgent::getMediaQueries(ErrorString* errorString, RefPtr<TypeBui
lder::Array<TypeBuilder::CSS::CSSMedia> >& medias) | 687 void InspectorCSSAgent::getMediaQueries(ErrorString* errorString, RefPtr<TypeBui
lder::Array<TypeBuilder::CSS::CSSMedia>>& medias) |
688 { | 688 { |
689 medias = TypeBuilder::Array<TypeBuilder::CSS::CSSMedia>::create(); | 689 medias = TypeBuilder::Array<TypeBuilder::CSS::CSSMedia>::create(); |
690 for (auto& style : m_idToInspectorStyleSheet) { | 690 for (auto& style : m_idToInspectorStyleSheet) { |
691 RefPtrWillBeRawPtr<InspectorStyleSheet> styleSheet = style.value; | 691 RefPtrWillBeRawPtr<InspectorStyleSheet> styleSheet = style.value; |
692 collectMediaQueriesFromStyleSheet(styleSheet->pageStyleSheet(), medias.g
et()); | 692 collectMediaQueriesFromStyleSheet(styleSheet->pageStyleSheet(), medias.g
et()); |
693 const CSSRuleVector& flatRules = styleSheet->flatRules(); | 693 const CSSRuleVector& flatRules = styleSheet->flatRules(); |
694 for (unsigned i = 0; i < flatRules.size(); ++i) { | 694 for (unsigned i = 0; i < flatRules.size(); ++i) { |
695 CSSRule* rule = flatRules.at(i).get(); | 695 CSSRule* rule = flatRules.at(i).get(); |
696 if (rule->type() == CSSRule::MEDIA_RULE || rule->type() == CSSRule::
IMPORT_RULE) | 696 if (rule->type() == CSSRule::MEDIA_RULE || rule->type() == CSSRule::
IMPORT_RULE) |
697 collectMediaQueriesFromRule(rule, medias.get()); | 697 collectMediaQueriesFromRule(rule, medias.get()); |
698 } | 698 } |
699 } | 699 } |
700 } | 700 } |
701 | 701 |
702 void InspectorCSSAgent::getMatchedStylesForNode(ErrorString* errorString, int no
deId, const bool* excludePseudo, const bool* excludeInherited, RefPtr<TypeBuilde
r::Array<TypeBuilder::CSS::RuleMatch> >& matchedCSSRules, RefPtr<TypeBuilder::Ar
ray<TypeBuilder::CSS::PseudoIdMatches> >& pseudoIdMatches, RefPtr<TypeBuilder::A
rray<TypeBuilder::CSS::InheritedStyleEntry> >& inheritedEntries) | 702 void InspectorCSSAgent::getMatchedStylesForNode(ErrorString* errorString, int no
deId, const bool* excludePseudo, const bool* excludeInherited, RefPtr<TypeBuilde
r::Array<TypeBuilder::CSS::RuleMatch>>& matchedCSSRules, RefPtr<TypeBuilder::Arr
ay<TypeBuilder::CSS::PseudoIdMatches>>& pseudoIdMatches, RefPtr<TypeBuilder::Arr
ay<TypeBuilder::CSS::InheritedStyleEntry>>& inheritedEntries) |
703 { | 703 { |
704 Element* element = elementForId(errorString, nodeId); | 704 Element* element = elementForId(errorString, nodeId); |
705 if (!element) { | 705 if (!element) { |
706 *errorString = "Node not found"; | 706 *errorString = "Node not found"; |
707 return; | 707 return; |
708 } | 708 } |
709 | 709 |
710 Element* originalElement = element; | 710 Element* originalElement = element; |
711 PseudoId elementPseudoId = element->pseudoId(); | 711 PseudoId elementPseudoId = element->pseudoId(); |
712 if (elementPseudoId) { | 712 if (elementPseudoId) { |
(...skipping 14 matching lines...) Expand all Loading... |
727 // without grabbing at internal style classes! | 727 // without grabbing at internal style classes! |
728 | 728 |
729 // Matched rules. | 729 // Matched rules. |
730 StyleResolver& styleResolver = ownerDocument->ensureStyleResolver(); | 730 StyleResolver& styleResolver = ownerDocument->ensureStyleResolver(); |
731 | 731 |
732 RefPtrWillBeRawPtr<CSSRuleList> matchedRules = styleResolver.pseudoCSSRulesF
orElement(element, elementPseudoId, StyleResolver::AllCSSRules); | 732 RefPtrWillBeRawPtr<CSSRuleList> matchedRules = styleResolver.pseudoCSSRulesF
orElement(element, elementPseudoId, StyleResolver::AllCSSRules); |
733 matchedCSSRules = buildArrayForMatchedRuleList(matchedRules.get(), originalE
lement, NOPSEUDO); | 733 matchedCSSRules = buildArrayForMatchedRuleList(matchedRules.get(), originalE
lement, NOPSEUDO); |
734 | 734 |
735 // Pseudo elements. | 735 // Pseudo elements. |
736 if (!elementPseudoId && !asBool(excludePseudo)) { | 736 if (!elementPseudoId && !asBool(excludePseudo)) { |
737 RefPtr<TypeBuilder::Array<TypeBuilder::CSS::PseudoIdMatches> > pseudoEle
ments = TypeBuilder::Array<TypeBuilder::CSS::PseudoIdMatches>::create(); | 737 RefPtr<TypeBuilder::Array<TypeBuilder::CSS::PseudoIdMatches>> pseudoElem
ents = TypeBuilder::Array<TypeBuilder::CSS::PseudoIdMatches>::create(); |
738 for (PseudoId pseudoId = FIRST_PUBLIC_PSEUDOID; pseudoId < AFTER_LAST_IN
TERNAL_PSEUDOID; pseudoId = static_cast<PseudoId>(pseudoId + 1)) { | 738 for (PseudoId pseudoId = FIRST_PUBLIC_PSEUDOID; pseudoId < AFTER_LAST_IN
TERNAL_PSEUDOID; pseudoId = static_cast<PseudoId>(pseudoId + 1)) { |
739 RefPtrWillBeRawPtr<CSSRuleList> matchedRules = styleResolver.pseudoC
SSRulesForElement(element, pseudoId, StyleResolver::AllCSSRules); | 739 RefPtrWillBeRawPtr<CSSRuleList> matchedRules = styleResolver.pseudoC
SSRulesForElement(element, pseudoId, StyleResolver::AllCSSRules); |
740 if (matchedRules && matchedRules->length()) { | 740 if (matchedRules && matchedRules->length()) { |
741 RefPtr<TypeBuilder::CSS::PseudoIdMatches> matches = TypeBuilder:
:CSS::PseudoIdMatches::create() | 741 RefPtr<TypeBuilder::CSS::PseudoIdMatches> matches = TypeBuilder:
:CSS::PseudoIdMatches::create() |
742 .setPseudoId(static_cast<int>(pseudoId)) | 742 .setPseudoId(static_cast<int>(pseudoId)) |
743 .setMatches(buildArrayForMatchedRuleList(matchedRules.get(),
element, pseudoId)); | 743 .setMatches(buildArrayForMatchedRuleList(matchedRules.get(),
element, pseudoId)); |
744 pseudoElements->addItem(matches.release()); | 744 pseudoElements->addItem(matches.release()); |
745 } | 745 } |
746 } | 746 } |
747 | 747 |
748 pseudoIdMatches = pseudoElements.release(); | 748 pseudoIdMatches = pseudoElements.release(); |
749 } | 749 } |
750 | 750 |
751 // Inherited styles. | 751 // Inherited styles. |
752 if (!elementPseudoId && !asBool(excludeInherited)) { | 752 if (!elementPseudoId && !asBool(excludeInherited)) { |
753 RefPtr<TypeBuilder::Array<TypeBuilder::CSS::InheritedStyleEntry> > entri
es = TypeBuilder::Array<TypeBuilder::CSS::InheritedStyleEntry>::create(); | 753 RefPtr<TypeBuilder::Array<TypeBuilder::CSS::InheritedStyleEntry>> entrie
s = TypeBuilder::Array<TypeBuilder::CSS::InheritedStyleEntry>::create(); |
754 Element* parentElement = element->parentElement(); | 754 Element* parentElement = element->parentElement(); |
755 while (parentElement) { | 755 while (parentElement) { |
756 StyleResolver& parentStyleResolver = parentElement->ownerDocument()-
>ensureStyleResolver(); | 756 StyleResolver& parentStyleResolver = parentElement->ownerDocument()-
>ensureStyleResolver(); |
757 RefPtrWillBeRawPtr<CSSRuleList> parentMatchedRules = parentStyleReso
lver.cssRulesForElement(parentElement, StyleResolver::AllCSSRules); | 757 RefPtrWillBeRawPtr<CSSRuleList> parentMatchedRules = parentStyleReso
lver.cssRulesForElement(parentElement, StyleResolver::AllCSSRules); |
758 RefPtr<TypeBuilder::CSS::InheritedStyleEntry> entry = TypeBuilder::C
SS::InheritedStyleEntry::create() | 758 RefPtr<TypeBuilder::CSS::InheritedStyleEntry> entry = TypeBuilder::C
SS::InheritedStyleEntry::create() |
759 .setMatchedCSSRules(buildArrayForMatchedRuleList(parentMatchedRu
les.get(), parentElement, NOPSEUDO)); | 759 .setMatchedCSSRules(buildArrayForMatchedRuleList(parentMatchedRu
les.get(), parentElement, NOPSEUDO)); |
760 if (parentElement->style() && parentElement->style()->length()) { | 760 if (parentElement->style() && parentElement->style()->length()) { |
761 InspectorStyleSheetForInlineStyle* styleSheet = asInspectorStyle
Sheet(parentElement); | 761 InspectorStyleSheetForInlineStyle* styleSheet = asInspectorStyle
Sheet(parentElement); |
762 if (styleSheet) | 762 if (styleSheet) |
763 entry->setInlineStyle(styleSheet->buildObjectForStyle(styleS
heet->styleForId(InspectorCSSId(styleSheet->id(), 0)))); | 763 entry->setInlineStyle(styleSheet->buildObjectForStyle(styleS
heet->styleForId(InspectorCSSId(styleSheet->id(), 0)))); |
(...skipping 15 matching lines...) Expand all Loading... |
779 | 779 |
780 InspectorStyleSheetForInlineStyle* styleSheet = asInspectorStyleSheet(elemen
t); | 780 InspectorStyleSheetForInlineStyle* styleSheet = asInspectorStyleSheet(elemen
t); |
781 if (!styleSheet) | 781 if (!styleSheet) |
782 return; | 782 return; |
783 | 783 |
784 inlineStyle = styleSheet->buildObjectForStyle(element->style()); | 784 inlineStyle = styleSheet->buildObjectForStyle(element->style()); |
785 RefPtr<TypeBuilder::CSS::CSSStyle> attributes = buildObjectForAttributesStyl
e(element); | 785 RefPtr<TypeBuilder::CSS::CSSStyle> attributes = buildObjectForAttributesStyl
e(element); |
786 attributesStyle = attributes ? attributes.release() : nullptr; | 786 attributesStyle = attributes ? attributes.release() : nullptr; |
787 } | 787 } |
788 | 788 |
789 void InspectorCSSAgent::getComputedStyleForNode(ErrorString* errorString, int no
deId, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSComputedStyleProperty> >& s
tyle) | 789 void InspectorCSSAgent::getComputedStyleForNode(ErrorString* errorString, int no
deId, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSComputedStyleProperty>>& st
yle) |
790 { | 790 { |
791 Node* node = m_domAgent->assertNode(errorString, nodeId); | 791 Node* node = m_domAgent->assertNode(errorString, nodeId); |
792 if (!node) | 792 if (!node) |
793 return; | 793 return; |
794 | 794 |
795 RefPtrWillBeRawPtr<CSSComputedStyleDeclaration> computedStyleInfo = CSSCompu
tedStyleDeclaration::create(node, true); | 795 RefPtrWillBeRawPtr<CSSComputedStyleDeclaration> computedStyleInfo = CSSCompu
tedStyleDeclaration::create(node, true); |
796 RefPtrWillBeRawPtr<InspectorStyle> inspectorStyle = InspectorStyle::create(I
nspectorCSSId(), computedStyleInfo, 0); | 796 RefPtrWillBeRawPtr<InspectorStyle> inspectorStyle = InspectorStyle::create(I
nspectorCSSId(), computedStyleInfo, 0); |
797 style = inspectorStyle->buildArrayForComputedStyle(); | 797 style = inspectorStyle->buildArrayForComputedStyle(); |
798 } | 798 } |
799 | 799 |
800 void InspectorCSSAgent::collectPlatformFontsForRenderer(RenderText* renderer, Ha
shCountedSet<String>* fontStats) | 800 void InspectorCSSAgent::collectPlatformFontsForRenderer(RenderText* renderer, Ha
shCountedSet<String>* fontStats) |
801 { | 801 { |
802 for (InlineTextBox* box = renderer->firstTextBox(); box; box = box->nextText
Box()) { | 802 for (InlineTextBox* box = renderer->firstTextBox(); box; box = box->nextText
Box()) { |
803 RenderStyle* style = renderer->style(box->isFirstLineStyle()); | 803 RenderStyle* style = renderer->style(box->isFirstLineStyle()); |
804 const Font& font = style->font(); | 804 const Font& font = style->font(); |
805 TextRun run = box->constructTextRunForInspector(style, font); | 805 TextRun run = box->constructTextRunForInspector(style, font); |
806 SimpleShaper shaper(&font, run); | 806 SimpleShaper shaper(&font, run); |
807 GlyphBuffer glyphBuffer; | 807 GlyphBuffer glyphBuffer; |
808 shaper.advance(run.length(), &glyphBuffer); | 808 shaper.advance(run.length(), &glyphBuffer); |
809 for (unsigned i = 0; i < glyphBuffer.size(); ++i) { | 809 for (unsigned i = 0; i < glyphBuffer.size(); ++i) { |
810 String familyName = glyphBuffer.fontDataAt(i)->platformData().fontFa
milyName(); | 810 String familyName = glyphBuffer.fontDataAt(i)->platformData().fontFa
milyName(); |
811 if (familyName.isNull()) | 811 if (familyName.isNull()) |
812 familyName = ""; | 812 familyName = ""; |
813 fontStats->add(familyName); | 813 fontStats->add(familyName); |
814 } | 814 } |
815 } | 815 } |
816 } | 816 } |
817 | 817 |
818 void InspectorCSSAgent::getPlatformFontsForNode(ErrorString* errorString, int no
deId, | 818 void InspectorCSSAgent::getPlatformFontsForNode(ErrorString* errorString, int no
deId, |
819 String* cssFamilyName, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::PlatformF
ontUsage> >& platformFonts) | 819 String* cssFamilyName, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::PlatformF
ontUsage>>& platformFonts) |
820 { | 820 { |
821 Node* node = m_domAgent->assertNode(errorString, nodeId); | 821 Node* node = m_domAgent->assertNode(errorString, nodeId); |
822 if (!node) | 822 if (!node) |
823 return; | 823 return; |
824 | 824 |
825 RefPtrWillBeRawPtr<CSSComputedStyleDeclaration> computedStyleInfo = CSSCompu
tedStyleDeclaration::create(node, true); | 825 RefPtrWillBeRawPtr<CSSComputedStyleDeclaration> computedStyleInfo = CSSCompu
tedStyleDeclaration::create(node, true); |
826 *cssFamilyName = computedStyleInfo->getPropertyValue(CSSPropertyFontFamily); | 826 *cssFamilyName = computedStyleInfo->getPropertyValue(CSSPropertyFontFamily); |
827 | 827 |
828 WillBeHeapVector<RawPtrWillBeMember<Text> > textNodes; | 828 WillBeHeapVector<RawPtrWillBeMember<Text>> textNodes; |
829 if (node->nodeType() == Node::TEXT_NODE) { | 829 if (node->nodeType() == Node::TEXT_NODE) { |
830 if (node->renderer()) | 830 if (node->renderer()) |
831 textNodes.append(toText(node)); | 831 textNodes.append(toText(node)); |
832 } else { | 832 } else { |
833 for (Node* child = node->firstChild(); child; child = child->nextSibling
()) { | 833 for (Node* child = node->firstChild(); child; child = child->nextSibling
()) { |
834 if (child->nodeType() == Node::TEXT_NODE && child->renderer()) | 834 if (child->nodeType() == Node::TEXT_NODE && child->renderer()) |
835 textNodes.append(toText(child)); | 835 textNodes.append(toText(child)); |
836 } | 836 } |
837 } | 837 } |
838 | 838 |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1086 break; | 1086 break; |
1087 case MediaListSourceLinkedSheet: | 1087 case MediaListSourceLinkedSheet: |
1088 source = TypeBuilder::CSS::CSSMedia::Source::LinkedSheet; | 1088 source = TypeBuilder::CSS::CSSMedia::Source::LinkedSheet; |
1089 break; | 1089 break; |
1090 case MediaListSourceInlineSheet: | 1090 case MediaListSourceInlineSheet: |
1091 source = TypeBuilder::CSS::CSSMedia::Source::InlineSheet; | 1091 source = TypeBuilder::CSS::CSSMedia::Source::InlineSheet; |
1092 break; | 1092 break; |
1093 } | 1093 } |
1094 | 1094 |
1095 const MediaQuerySet* queries = media->queries(); | 1095 const MediaQuerySet* queries = media->queries(); |
1096 const WillBeHeapVector<OwnPtrWillBeMember<MediaQuery> >& queryVector = queri
es->queryVector(); | 1096 const WillBeHeapVector<OwnPtrWillBeMember<MediaQuery>>& queryVector = querie
s->queryVector(); |
1097 OwnPtr<MediaQueryEvaluator> mediaEvaluator = adoptPtr(new MediaQueryEvaluato
r(parentStyleSheet->ownerDocument()->frame())); | 1097 OwnPtr<MediaQueryEvaluator> mediaEvaluator = adoptPtr(new MediaQueryEvaluato
r(parentStyleSheet->ownerDocument()->frame())); |
1098 | 1098 |
1099 InspectorStyleSheet* inspectorStyleSheet = parentStyleSheet ? m_cssStyleShee
tToInspectorStyleSheet.get(parentStyleSheet) : nullptr; | 1099 InspectorStyleSheet* inspectorStyleSheet = parentStyleSheet ? m_cssStyleShee
tToInspectorStyleSheet.get(parentStyleSheet) : nullptr; |
1100 RefPtr<TypeBuilder::Array<TypeBuilder::CSS::MediaQuery> > mediaListArray = T
ypeBuilder::Array<TypeBuilder::CSS::MediaQuery>::create(); | 1100 RefPtr<TypeBuilder::Array<TypeBuilder::CSS::MediaQuery>> mediaListArray = Ty
peBuilder::Array<TypeBuilder::CSS::MediaQuery>::create(); |
1101 RefPtr<MediaValues> mediaValues = MediaValues::createDynamicIfFrameExists(pa
rentStyleSheet->ownerDocument()->frame()); | 1101 RefPtr<MediaValues> mediaValues = MediaValues::createDynamicIfFrameExists(pa
rentStyleSheet->ownerDocument()->frame()); |
1102 bool hasMediaQueryItems = false; | 1102 bool hasMediaQueryItems = false; |
1103 for (size_t i = 0; i < queryVector.size(); ++i) { | 1103 for (size_t i = 0; i < queryVector.size(); ++i) { |
1104 MediaQuery* query = queryVector.at(i).get(); | 1104 MediaQuery* query = queryVector.at(i).get(); |
1105 const ExpressionHeapVector& expressions = query->expressions(); | 1105 const ExpressionHeapVector& expressions = query->expressions(); |
1106 RefPtr<TypeBuilder::Array<TypeBuilder::CSS::MediaQueryExpression> > expr
essionArray = TypeBuilder::Array<TypeBuilder::CSS::MediaQueryExpression>::create
(); | 1106 RefPtr<TypeBuilder::Array<TypeBuilder::CSS::MediaQueryExpression>> expre
ssionArray = TypeBuilder::Array<TypeBuilder::CSS::MediaQueryExpression>::create(
); |
1107 bool hasExpressionItems = false; | 1107 bool hasExpressionItems = false; |
1108 for (size_t j = 0; j < expressions.size(); ++j) { | 1108 for (size_t j = 0; j < expressions.size(); ++j) { |
1109 MediaQueryExp* mediaQueryExp = expressions.at(j).get(); | 1109 MediaQueryExp* mediaQueryExp = expressions.at(j).get(); |
1110 MediaQueryExpValue expValue = mediaQueryExp->expValue(); | 1110 MediaQueryExpValue expValue = mediaQueryExp->expValue(); |
1111 if (!expValue.isValue) | 1111 if (!expValue.isValue) |
1112 continue; | 1112 continue; |
1113 const char* valueName = CSSPrimitiveValue::unitTypeToString(expValue
.unit); | 1113 const char* valueName = CSSPrimitiveValue::unitTypeToString(expValue
.unit); |
1114 RefPtr<TypeBuilder::CSS::MediaQueryExpression> mediaQueryExpression
= TypeBuilder::CSS::MediaQueryExpression::create() | 1114 RefPtr<TypeBuilder::CSS::MediaQueryExpression> mediaQueryExpression
= TypeBuilder::CSS::MediaQueryExpression::create() |
1115 .setValue(expValue.value) | 1115 .setValue(expValue.value) |
1116 .setUnit(String(valueName)) | 1116 .setUnit(String(valueName)) |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1208 sourceURL = ""; | 1208 sourceURL = ""; |
1209 } | 1209 } |
1210 | 1210 |
1211 if (mediaList && mediaList->length()) { | 1211 if (mediaList && mediaList->length()) { |
1212 mediaArray->addItem(buildMediaObject(mediaList, isMediaRule ? MediaListS
ourceMediaRule : MediaListSourceImportRule, sourceURL, parentStyleSheet)); | 1212 mediaArray->addItem(buildMediaObject(mediaList, isMediaRule ? MediaListS
ourceMediaRule : MediaListSourceImportRule, sourceURL, parentStyleSheet)); |
1213 addedItems = true; | 1213 addedItems = true; |
1214 } | 1214 } |
1215 return addedItems; | 1215 return addedItems; |
1216 } | 1216 } |
1217 | 1217 |
1218 PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSMedia> > InspectorCSSAgent::b
uildMediaListChain(CSSRule* rule) | 1218 PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSMedia>> InspectorCSSAgent::bu
ildMediaListChain(CSSRule* rule) |
1219 { | 1219 { |
1220 if (!rule) | 1220 if (!rule) |
1221 return nullptr; | 1221 return nullptr; |
1222 RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSMedia> > mediaArray = TypeBui
lder::Array<TypeBuilder::CSS::CSSMedia>::create(); | 1222 RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSMedia>> mediaArray = TypeBuil
der::Array<TypeBuilder::CSS::CSSMedia>::create(); |
1223 bool hasItems = false; | 1223 bool hasItems = false; |
1224 CSSRule* parentRule = rule; | 1224 CSSRule* parentRule = rule; |
1225 while (parentRule) { | 1225 while (parentRule) { |
1226 hasItems = collectMediaQueriesFromRule(parentRule, mediaArray.get()) ||
hasItems; | 1226 hasItems = collectMediaQueriesFromRule(parentRule, mediaArray.get()) ||
hasItems; |
1227 if (parentRule->parentRule()) { | 1227 if (parentRule->parentRule()) { |
1228 parentRule = parentRule->parentRule(); | 1228 parentRule = parentRule->parentRule(); |
1229 } else { | 1229 } else { |
1230 CSSStyleSheet* styleSheet = parentRule->parentStyleSheet(); | 1230 CSSStyleSheet* styleSheet = parentRule->parentStyleSheet(); |
1231 while (styleSheet) { | 1231 while (styleSheet) { |
1232 hasItems = collectMediaQueriesFromStyleSheet(styleSheet, mediaAr
ray.get()) || hasItems; | 1232 hasItems = collectMediaQueriesFromStyleSheet(styleSheet, mediaAr
ray.get()) || hasItems; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1265 return nullptr; | 1265 return nullptr; |
1266 } | 1266 } |
1267 if (!node->isElementNode()) { | 1267 if (!node->isElementNode()) { |
1268 *errorString = "Not an element node"; | 1268 *errorString = "Not an element node"; |
1269 return nullptr; | 1269 return nullptr; |
1270 } | 1270 } |
1271 return toElement(node); | 1271 return toElement(node); |
1272 } | 1272 } |
1273 | 1273 |
1274 // static | 1274 // static |
1275 void InspectorCSSAgent::collectAllDocumentStyleSheets(Document* document, WillBe
HeapVector<RawPtrWillBeMember<CSSStyleSheet> >& result) | 1275 void InspectorCSSAgent::collectAllDocumentStyleSheets(Document* document, WillBe
HeapVector<RawPtrWillBeMember<CSSStyleSheet>>& result) |
1276 { | 1276 { |
1277 const WillBeHeapVector<RefPtrWillBeMember<CSSStyleSheet> > activeStyleSheets
= document->styleEngine()->activeStyleSheetsForInspector(); | 1277 const WillBeHeapVector<RefPtrWillBeMember<CSSStyleSheet>> activeStyleSheets
= document->styleEngine()->activeStyleSheetsForInspector(); |
1278 for (const auto& style : activeStyleSheets) { | 1278 for (const auto& style : activeStyleSheets) { |
1279 CSSStyleSheet* styleSheet = style.get(); | 1279 CSSStyleSheet* styleSheet = style.get(); |
1280 InspectorCSSAgent::collectStyleSheets(styleSheet, result); | 1280 InspectorCSSAgent::collectStyleSheets(styleSheet, result); |
1281 } | 1281 } |
1282 } | 1282 } |
1283 | 1283 |
1284 // static | 1284 // static |
1285 void InspectorCSSAgent::collectStyleSheets(CSSStyleSheet* styleSheet, WillBeHeap
Vector<RawPtrWillBeMember<CSSStyleSheet> >& result) | 1285 void InspectorCSSAgent::collectStyleSheets(CSSStyleSheet* styleSheet, WillBeHeap
Vector<RawPtrWillBeMember<CSSStyleSheet>>& result) |
1286 { | 1286 { |
1287 result.append(styleSheet); | 1287 result.append(styleSheet); |
1288 for (unsigned i = 0, size = styleSheet->length(); i < size; ++i) { | 1288 for (unsigned i = 0, size = styleSheet->length(); i < size; ++i) { |
1289 CSSRule* rule = styleSheet->item(i); | 1289 CSSRule* rule = styleSheet->item(i); |
1290 if (rule->type() == CSSRule::IMPORT_RULE) { | 1290 if (rule->type() == CSSRule::IMPORT_RULE) { |
1291 CSSStyleSheet* importedStyleSheet = toCSSImportRule(rule)->styleShee
t(); | 1291 CSSStyleSheet* importedStyleSheet = toCSSImportRule(rule)->styleShee
t(); |
1292 if (importedStyleSheet) | 1292 if (importedStyleSheet) |
1293 InspectorCSSAgent::collectStyleSheets(importedStyleSheet, result
); | 1293 InspectorCSSAgent::collectStyleSheets(importedStyleSheet, result
); |
1294 } | 1294 } |
1295 } | 1295 } |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1423 // According to http://www.w3.org/TR/css3-selectors/#pseudo-elements, "Only
one pseudo-element may appear per selector." | 1423 // According to http://www.w3.org/TR/css3-selectors/#pseudo-elements, "Only
one pseudo-element may appear per selector." |
1424 // As such, check the last selector in the tag history. | 1424 // As such, check the last selector in the tag history. |
1425 for (; !selector->isLastInTagHistory(); ++selector) { } | 1425 for (; !selector->isLastInTagHistory(); ++selector) { } |
1426 PseudoId selectorPseudoId = selector->matchesPseudoElement() ? CSSSelector::
pseudoId(selector->pseudoType()) : NOPSEUDO; | 1426 PseudoId selectorPseudoId = selector->matchesPseudoElement() ? CSSSelector::
pseudoId(selector->pseudoType()) : NOPSEUDO; |
1427 | 1427 |
1428 // FIXME: This only covers the case of matching pseudo-element selectors aga
inst PseudoElements. | 1428 // FIXME: This only covers the case of matching pseudo-element selectors aga
inst PseudoElements. |
1429 // We should come up with a solution for matching pseudo-element selectors a
gainst ordinary Elements, too. | 1429 // We should come up with a solution for matching pseudo-element selectors a
gainst ordinary Elements, too. |
1430 return selectorPseudoId == elementPseudoId; | 1430 return selectorPseudoId == elementPseudoId; |
1431 } | 1431 } |
1432 | 1432 |
1433 PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::RuleMatch> > InspectorCSSAgent::
buildArrayForMatchedRuleList(CSSRuleList* ruleList, Element* element, PseudoId m
atchesForPseudoId) | 1433 PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::RuleMatch>> InspectorCSSAgent::b
uildArrayForMatchedRuleList(CSSRuleList* ruleList, Element* element, PseudoId ma
tchesForPseudoId) |
1434 { | 1434 { |
1435 RefPtr<TypeBuilder::Array<TypeBuilder::CSS::RuleMatch> > result = TypeBuilde
r::Array<TypeBuilder::CSS::RuleMatch>::create(); | 1435 RefPtr<TypeBuilder::Array<TypeBuilder::CSS::RuleMatch>> result = TypeBuilder
::Array<TypeBuilder::CSS::RuleMatch>::create(); |
1436 if (!ruleList) | 1436 if (!ruleList) |
1437 return result.release(); | 1437 return result.release(); |
1438 | 1438 |
1439 for (unsigned i = 0, size = ruleList->length(); i < size; ++i) { | 1439 for (unsigned i = 0, size = ruleList->length(); i < size; ++i) { |
1440 CSSStyleRule* rule = asCSSStyleRule(ruleList->item(i)); | 1440 CSSStyleRule* rule = asCSSStyleRule(ruleList->item(i)); |
1441 RefPtr<TypeBuilder::CSS::CSSRule> ruleObject = buildObjectForRule(rule); | 1441 RefPtr<TypeBuilder::CSS::CSSRule> ruleObject = buildObjectForRule(rule); |
1442 if (!ruleObject) | 1442 if (!ruleObject) |
1443 continue; | 1443 continue; |
1444 RefPtr<TypeBuilder::Array<int> > matchingSelectors = TypeBuilder::Array<
int>::create(); | 1444 RefPtr<TypeBuilder::Array<int>> matchingSelectors = TypeBuilder::Array<i
nt>::create(); |
1445 const CSSSelectorList& selectorList = rule->styleRule()->selectorList(); | 1445 const CSSSelectorList& selectorList = rule->styleRule()->selectorList(); |
1446 long index = 0; | 1446 long index = 0; |
1447 PseudoId elementPseudoId = matchesForPseudoId ? matchesForPseudoId : ele
ment->pseudoId(); | 1447 PseudoId elementPseudoId = matchesForPseudoId ? matchesForPseudoId : ele
ment->pseudoId(); |
1448 for (const CSSSelector* selector = selectorList.first(); selector; selec
tor = CSSSelectorList::next(*selector)) { | 1448 for (const CSSSelector* selector = selectorList.first(); selector; selec
tor = CSSSelectorList::next(*selector)) { |
1449 const CSSSelector* firstTagHistorySelector = selector; | 1449 const CSSSelector* firstTagHistorySelector = selector; |
1450 bool matched = false; | 1450 bool matched = false; |
1451 if (elementPseudoId) | 1451 if (elementPseudoId) |
1452 matched = matchesPseudoElement(selector, elementPseudoId); // Mo
difies |selector|. | 1452 matched = matchesPseudoElement(selector, elementPseudoId); // Mo
difies |selector|. |
1453 else | 1453 else |
1454 matched = element->matches(firstTagHistorySelector->selectorText
(), IGNORE_EXCEPTION); | 1454 matched = element->matches(firstTagHistorySelector->selectorText
(), IGNORE_EXCEPTION); |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1529 } | 1529 } |
1530 | 1530 |
1531 void InspectorCSSAgent::didReparseStyleSheet() | 1531 void InspectorCSSAgent::didReparseStyleSheet() |
1532 { | 1532 { |
1533 ASSERT(m_isSettingStyleSheetText); | 1533 ASSERT(m_isSettingStyleSheetText); |
1534 m_isSettingStyleSheetText = false; | 1534 m_isSettingStyleSheetText = false; |
1535 } | 1535 } |
1536 | 1536 |
1537 void InspectorCSSAgent::resetPseudoStates() | 1537 void InspectorCSSAgent::resetPseudoStates() |
1538 { | 1538 { |
1539 WillBeHeapHashSet<RawPtrWillBeMember<Document> > documentsToChange; | 1539 WillBeHeapHashSet<RawPtrWillBeMember<Document>> documentsToChange; |
1540 for (auto& state : m_nodeIdToForcedPseudoState) { | 1540 for (auto& state : m_nodeIdToForcedPseudoState) { |
1541 Element* element = toElement(m_domAgent->nodeForId(state.key)); | 1541 Element* element = toElement(m_domAgent->nodeForId(state.key)); |
1542 if (element && element->ownerDocument()) | 1542 if (element && element->ownerDocument()) |
1543 documentsToChange.add(element->ownerDocument()); | 1543 documentsToChange.add(element->ownerDocument()); |
1544 } | 1544 } |
1545 | 1545 |
1546 m_nodeIdToForcedPseudoState.clear(); | 1546 m_nodeIdToForcedPseudoState.clear(); |
1547 for (auto& document : documentsToChange) | 1547 for (auto& document : documentsToChange) |
1548 document->setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTr
acing::create(StyleChangeReason::Inspector)); | 1548 document->setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTr
acing::create(StyleChangeReason::Inspector)); |
1549 } | 1549 } |
(...skipping 11 matching lines...) Expand all Loading... |
1561 visitor->trace(m_invalidatedDocuments); | 1561 visitor->trace(m_invalidatedDocuments); |
1562 visitor->trace(m_nodeToInspectorStyleSheet); | 1562 visitor->trace(m_nodeToInspectorStyleSheet); |
1563 visitor->trace(m_documentToViaInspectorStyleSheet); | 1563 visitor->trace(m_documentToViaInspectorStyleSheet); |
1564 #endif | 1564 #endif |
1565 visitor->trace(m_inspectorUserAgentStyleSheet); | 1565 visitor->trace(m_inspectorUserAgentStyleSheet); |
1566 InspectorBaseAgent::trace(visitor); | 1566 InspectorBaseAgent::trace(visitor); |
1567 } | 1567 } |
1568 | 1568 |
1569 } // namespace blink | 1569 } // namespace blink |
1570 | 1570 |
OLD | NEW |